summaryrefslogtreecommitdiff
path: root/noncore/settings/usermanager/userdialog.cpp
authorumopapisdn <umopapisdn>2002-09-30 18:11:33 (UTC)
committer umopapisdn <umopapisdn>2002-09-30 18:11:33 (UTC)
commitd49bd63f3b15795a1ee2497960f00eb3fb075e69 (patch) (unidiff)
tree44459a473faadc66288822f43146af817bac124e /noncore/settings/usermanager/userdialog.cpp
parent096eb52cfbb50fefbe6679fb91e926346ff3c9d7 (diff)
downloadopie-d49bd63f3b15795a1ee2497960f00eb3fb075e69.zip
opie-d49bd63f3b15795a1ee2497960f00eb3fb075e69.tar.gz
opie-d49bd63f3b15795a1ee2497960f00eb3fb075e69.tar.bz2
Primary group combobox is sorted.
Deleting a primary group for a user sets the primarygroup combobox to <Undefined group> not an arbitrary group.
Diffstat (limited to 'noncore/settings/usermanager/userdialog.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/usermanager/userdialog.cpp32
1 files changed, 26 insertions, 6 deletions
diff --git a/noncore/settings/usermanager/userdialog.cpp b/noncore/settings/usermanager/userdialog.cpp
index b7827a4..90e27d5 100644
--- a/noncore/settings/usermanager/userdialog.cpp
+++ b/noncore/settings/usermanager/userdialog.cpp
@@ -29,24 +29,23 @@
29 */ 29 */
30UserDialog::UserDialog(QWidget* parent, const char* name, bool modal, WFlags fl) : QDialog(parent, name, modal, fl) { 30UserDialog::UserDialog(QWidget* parent, const char* name, bool modal, WFlags fl) : QDialog(parent, name, modal, fl) {
31 QVBoxLayout *layout = new QVBoxLayout(this); 31 QVBoxLayout *layout = new QVBoxLayout(this);
32 myTabWidget=new QTabWidget(this,"User Tab Widget"); 32 myTabWidget=new QTabWidget(this,"User Tab Widget");
33 layout->addWidget(myTabWidget); 33 layout->addWidget(myTabWidget);
34 setupTab1(); 34 setupTab1();
35 setupTab2(); 35 setupTab2();
36 36
37 accounts->groupStringList.sort();
37 // And also fill the listview & the combobox with all available groups. 38 // And also fill the listview & the combobox with all available groups.
38 for( QStringList::Iterator it = accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) { 39 for( QStringList::Iterator it = accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) {
39 accounts->splitGroupEntry(*it); 40 accounts->splitGroupEntry(*it);
40 //new QListViewItem(groupsListView,accounts->gr_name);
41 new QCheckListItem(groupsListView,accounts->gr_name,QCheckListItem::CheckBox); 41 new QCheckListItem(groupsListView,accounts->gr_name,QCheckListItem::CheckBox);
42 groupComboBox->insertItem(accounts->gr_name); 42 groupComboBox->insertItem(accounts->gr_name);
43 } 43 }
44
45 showMaximized(); 44 showMaximized();
46} 45}
47 46
48/** 47/**
49 * Empty destructor. 48 * Empty destructor.
50 * 49 *
51 */ 50 */
52UserDialog::~UserDialog() { 51UserDialog::~UserDialog() {
@@ -100,17 +99,25 @@ void UserDialog::setupTab1() {
100 shellComboBox->insertItem("/bin/ash"); 99 shellComboBox->insertItem("/bin/ash");
101 shellComboBox->insertItem("/bin/false"); 100 shellComboBox->insertItem("/bin/false");
102 101
103 // Primary Group 102 // Primary Group
104 QLabel *groupLabel=new QLabel(tabpage,"group"); 103 QLabel *groupLabel=new QLabel(tabpage,"group");
105 groupLabel->setText("Primary group: "); 104 groupLabel->setText("Primary group: ");
106 groupComboBox=new QComboBox(tabpage,"PrimaryGroup"); 105 groupComboBox=new QComboBox(tabpage,"PrimaryGroup");
107 106
108 // Widget layout 107 // Copy /etc/skel
108 QLabel *skelLabel=new QLabel(tabpage,"skel");
109 skelLabel->setText("Copy /etc/skel: ");
110 skelCheckBox=new QCheckBox(tabpage);
111 skelCheckBox->setChecked(true);
112 skelLabel->setDisabled(true);
113 skelCheckBox->setDisabled(true);
114
115 // Widget layout
109 QHBoxLayout *hlayout=new QHBoxLayout(-1,"hlayout"); 116 QHBoxLayout *hlayout=new QHBoxLayout(-1,"hlayout");
110 layout->addWidget(picturePushButton); 117 layout->addWidget(picturePushButton);
111 layout->addSpacing(5); 118 layout->addSpacing(5);
112 layout->addLayout(hlayout); 119 layout->addLayout(hlayout);
113 QVBoxLayout *vlayout1=new QVBoxLayout(-1,"vlayout1"); 120 QVBoxLayout *vlayout1=new QVBoxLayout(-1,"vlayout1");
114 QVBoxLayout *vlayout2=new QVBoxLayout(-1,"vlayout2"); 121 QVBoxLayout *vlayout2=new QVBoxLayout(-1,"vlayout2");
115 // First column, labels 122 // First column, labels
116 vlayout1->addWidget(loginLabel); 123 vlayout1->addWidget(loginLabel);
@@ -119,28 +126,32 @@ void UserDialog::setupTab1() {
119 vlayout1->addSpacing(5); 126 vlayout1->addSpacing(5);
120 vlayout1->addWidget(gecosLabel); 127 vlayout1->addWidget(gecosLabel);
121 vlayout1->addSpacing(5); 128 vlayout1->addSpacing(5);
122 vlayout1->addWidget(passwordLabel); 129 vlayout1->addWidget(passwordLabel);
123 vlayout1->addSpacing(5); 130 vlayout1->addSpacing(5);
124 vlayout1->addWidget(shellLabel); 131 vlayout1->addWidget(shellLabel);
125 vlayout1->addSpacing(5); 132 vlayout1->addSpacing(5);
126 vlayout1->addWidget(groupLabel); 133 vlayout1->addWidget(groupLabel);
134 vlayout1->addSpacing(5);
135 vlayout1->addWidget(skelLabel);
127 // Second column, data 136 // Second column, data
128 vlayout2->addWidget(loginLineEdit); 137 vlayout2->addWidget(loginLineEdit);
129 vlayout2->addSpacing(5); 138 vlayout2->addSpacing(5);
130 vlayout2->addWidget(uidLineEdit); 139 vlayout2->addWidget(uidLineEdit);
131 vlayout2->addSpacing(5); 140 vlayout2->addSpacing(5);
132 vlayout2->addWidget(gecosLineEdit); 141 vlayout2->addWidget(gecosLineEdit);
133 vlayout2->addSpacing(5); 142 vlayout2->addSpacing(5);
134 vlayout2->addWidget(passwordLineEdit); 143 vlayout2->addWidget(passwordLineEdit);
135 vlayout2->addSpacing(5); 144 vlayout2->addSpacing(5);
136 vlayout2->addWidget(shellComboBox); 145 vlayout2->addWidget(shellComboBox);
137 vlayout2->addSpacing(5); 146 vlayout2->addSpacing(5);
138 vlayout2->addWidget(groupComboBox); 147 vlayout2->addWidget(groupComboBox);
148 vlayout2->addSpacing(5);
149 vlayout2->addWidget(skelCheckBox);
139 hlayout->addLayout(vlayout1); 150 hlayout->addLayout(vlayout1);
140 hlayout->addLayout(vlayout2); 151 hlayout->addLayout(vlayout2);
141 152
142 myTabWidget->addTab(tabpage,"User Info"); 153 myTabWidget->addTab(tabpage,"User Info");
143} 154}
144 155
145/** 156/**
146 * Creates the second tab containing additional groups for the user. 157 * Creates the second tab containing additional groups for the user.
@@ -243,37 +254,45 @@ bool UserDialog::delUser(const char *username) {
243 * (And also deletes the account) 254 * (And also deletes the account)
244 * 255 *
245 * @param username User to be deleted. 256 * @param username User to be deleted.
246 * 257 *
247 * @return <code>true</code> if the user was successfully deleted, otherwise <code>false</code>. 258 * @return <code>true</code> if the user was successfully deleted, otherwise <code>false</code>.
248 * 259 *
249 */ 260 */
250bool UserDialog::editUser(const char *username) { 261bool UserDialog::editUser(const char *username) {
262 int invalid_group=0;
251 UserDialog *edituserDialog=new UserDialog();// Create Dialog 263 UserDialog *edituserDialog=new UserDialog();// Create Dialog
252 edituserDialog->setCaption(tr("Edit User")); 264 edituserDialog->setCaption(tr("Edit User"));
253 accounts->findUser(username);// Locate user in database and fill variables in 'accounts' object. 265 accounts->findUser(username);// Locate user in database and fill variables in 'accounts' object.
254 accounts->findGroup(accounts->pw_gid);// Locate the user's primary group, and fill group variables in 'accounts' object. 266 if(!(accounts->findGroup(accounts->pw_gid))) {// Locate the user's primary group, and fill group variables in 'accounts' object.
267 invalid_group=1;
268 }
255 // Fill widgets with userinfo. 269 // Fill widgets with userinfo.
256 edituserDialog->loginLineEdit->setText(accounts->pw_name); 270 edituserDialog->loginLineEdit->setText(accounts->pw_name);
257 edituserDialog->uidLineEdit->setText(QString::number(accounts->pw_uid)); 271 edituserDialog->uidLineEdit->setText(QString::number(accounts->pw_uid));
258 edituserDialog->gecosLineEdit->setText(accounts->pw_gecos); 272 edituserDialog->gecosLineEdit->setText(accounts->pw_gecos);
259 // Set password to '........', we will later check if this still is the contents, if not, the password has been changed. 273 // Set password to '........', we will later check if this still is the contents, if not, the password has been changed.
260 edituserDialog->passwordLineEdit->setText("........"); 274 edituserDialog->passwordLineEdit->setText("........");
261 // If this user is not using /bin/sh,/bin/ash or /bin/false as shell, add that entry to the shell-combobox. 275 // If this user is not using /bin/sh,/bin/ash or /bin/false as shell, add that entry to the shell-combobox.
262 if(accounts->pw_shell!="/bin/sh" && accounts->pw_shell!="/bin/ash" && accounts->pw_shell!="/bin/false") { 276 if(accounts->pw_shell!="/bin/sh" && accounts->pw_shell!="/bin/ash" && accounts->pw_shell!="/bin/false") {
263 edituserDialog->shellComboBox->insertItem(accounts->pw_shell,0); 277 edituserDialog->shellComboBox->insertItem(accounts->pw_shell,0);
264 edituserDialog->shellComboBox->setCurrentItem(0); 278 edituserDialog->shellComboBox->setCurrentItem(0);
265 } 279 }
266 // Select the primary group for this user. 280 // Select the primary group for this user.
267 for(int i=0;i<edituserDialog->groupComboBox->count();++i) { 281 for(int i=0;i<edituserDialog->groupComboBox->count();++i) {
268 if(accounts->gr_name==edituserDialog->groupComboBox->text(i)) { 282 if(accounts->gr_name==edituserDialog->groupComboBox->text(i)) {
269 edituserDialog->groupComboBox->setCurrentItem(i); 283 edituserDialog->groupComboBox->setCurrentItem(i);
284 break;
270 } 285 }
271 } 286 }
287 if(invalid_group) {
288 edituserDialog->groupComboBox->insertItem("<Undefined group>",0);
289 edituserDialog->groupComboBox->setCurrentItem(0);
290 }
272 // Select the groups in the listview, to which the user belongs. 291 // Select the groups in the listview, to which the user belongs.
273 QCheckListItem *temp; 292 QCheckListItem *temp;
274 QRegExp userRegExp(QString("[:\\s]%1\\s").arg(username)); 293 QRegExp userRegExp(QString("[:\\s]%1\\s").arg(username));
275 QStringList tempList=accounts->groupStringList.grep(userRegExp);// Find all entries in the group database, that the user is a member of. 294 QStringList tempList=accounts->groupStringList.grep(userRegExp);// Find all entries in the group database, that the user is a member of.
276 for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) {// Iterate over all of them. 295 for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) {// Iterate over all of them.
277 QListViewItemIterator lvit( edituserDialog->groupsListView );// Compare to all groups. 296 QListViewItemIterator lvit( edituserDialog->groupsListView );// Compare to all groups.
278 for ( ; lvit.current(); ++lvit ) { 297 for ( ; lvit.current(); ++lvit ) {
279 if(lvit.current()->text(0)==(*it).left((*it).find(":"))) { 298 if(lvit.current()->text(0)==(*it).left((*it).find(":"))) {
@@ -287,18 +306,19 @@ bool UserDialog::editUser(const char *username) {
287 306
288 accounts->findUser(username);// Fill user variables in 'acccounts' object. 307 accounts->findUser(username);// Fill user variables in 'acccounts' object.
289 accounts->pw_name=edituserDialog->loginLineEdit->text(); 308 accounts->pw_name=edituserDialog->loginLineEdit->text();
290 // Has the password been changed ? Make a new "crypt":ed password. 309 // Has the password been changed ? Make a new "crypt":ed password.
291 if(edituserDialog->passwordLineEdit->text()!="........") accounts->pw_passwd=crypt(edituserDialog->passwordLineEdit->text(), accounts->crypt_make_salt()); 310 if(edituserDialog->passwordLineEdit->text()!="........") accounts->pw_passwd=crypt(edituserDialog->passwordLineEdit->text(), accounts->crypt_make_salt());
292 311
293 // Set all variables in accounts object, that will be used when calling 'updateUser()' 312 // Set all variables in accounts object, that will be used when calling 'updateUser()'
294 accounts->pw_uid=edituserDialog->uidLineEdit->text().toInt(); 313 accounts->pw_uid=edituserDialog->uidLineEdit->text().toInt();
295 accounts->findGroup(edituserDialog->groupComboBox->currentText());// Fill all group variables in 'accounts' object. 314 if(accounts->findGroup(edituserDialog->groupComboBox->currentText())) {// Fill all group variables in 'accounts' object.
296 accounts->pw_gid=accounts->gr_gid; 315 accounts->pw_gid=accounts->gr_gid;// Only do this if the group is a valid group (ie. "<Undefined group>"), otherwise keep the old group.
316 }
297 accounts->pw_gecos=edituserDialog->gecosLineEdit->text(); 317 accounts->pw_gecos=edituserDialog->gecosLineEdit->text();
298 accounts->pw_shell=edituserDialog->shellComboBox->currentText(); 318 accounts->pw_shell=edituserDialog->shellComboBox->currentText();
299 // Update userinfo, using the information stored in the user variables stored in the accounts object. 319 // Update userinfo, using the information stored in the user variables stored in the accounts object.
300 accounts->updateUser(username); 320 accounts->updateUser(username);
301 321
302 // Remove user from all groups he/she is a member of. (could be done in a better way I guess, this was simple though.) 322 // Remove user from all groups he/she is a member of. (could be done in a better way I guess, this was simple though.)
303 for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) { 323 for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) {
304 accounts->delGroupMember((*it).left((*it).find(":")),username); 324 accounts->delGroupMember((*it).left((*it).find(":")),username);