Diffstat (limited to 'noncore/settings/usermanager') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/settings/usermanager/userdialog.cpp | 14 | ||||
-rw-r--r-- | noncore/settings/usermanager/usermanager.cpp | 11 | ||||
-rw-r--r-- | noncore/settings/usermanager/usermanager.pro | 9 |
3 files changed, 17 insertions, 17 deletions
diff --git a/noncore/settings/usermanager/userdialog.cpp b/noncore/settings/usermanager/userdialog.cpp index 5854fe0..3616507 100644 --- a/noncore/settings/usermanager/userdialog.cpp +++ b/noncore/settings/usermanager/userdialog.cpp | |||
@@ -1,85 +1,83 @@ | |||
1 | /*************************************************************************** | 1 | /*************************************************************************** |
2 | * * | 2 | * * |
3 | * This program is free software; you can redistribute it and/or modify * | 3 | * This program is free software; you can redistribute it and/or modify * |
4 | * it under the terms of the GNU General Public License as published by * | 4 | * it under the terms of the GNU General Public License as published by * |
5 | * the Free Software Foundation; either version 2 of the License, or * | 5 | * the Free Software Foundation; either version 2 of the License, or * |
6 | * (at your option) any later version. * | 6 | * (at your option) any later version. * |
7 | * * | 7 | * * |
8 | ***************************************************************************/ | 8 | ***************************************************************************/ |
9 | 9 | ||
10 | #include "userdialog.h" | 10 | #include "userdialog.h" |
11 | #include "passwd.h" | 11 | #include "passwd.h" |
12 | 12 | ||
13 | /* OPIE */ | 13 | /* OPIE */ |
14 | #include <opie2/odebug.h> | ||
14 | #include <opie2/odevice.h> | 15 | #include <opie2/odevice.h> |
15 | #include <qpe/qpeapplication.h> | 16 | #include <qpe/qpeapplication.h> |
17 | using namespace Opie::Core; | ||
18 | using namespace Opie::Ui; | ||
16 | 19 | ||
17 | /* QT */ | 20 | /* QT */ |
18 | #include <qlayout.h> | 21 | #include <qlayout.h> |
19 | #include <qlabel.h> | 22 | #include <qlabel.h> |
20 | #include <qmessagebox.h> | 23 | #include <qmessagebox.h> |
21 | #include <qfile.h> | 24 | #include <qfile.h> |
22 | 25 | ||
23 | /* STD */ | 26 | /* STD */ |
24 | #include <sys/types.h> | 27 | #include <sys/types.h> |
25 | #include <sys/wait.h> | 28 | #include <sys/wait.h> |
26 | #include <unistd.h> | 29 | #include <unistd.h> |
27 | #include <signal.h> | 30 | #include <signal.h> |
28 | 31 | ||
29 | |||
30 | using namespace Opie::Core; | ||
31 | |||
32 | |||
33 | /** | 32 | /** |
34 | * UserDialog constructor. Setup the dialog, fill the groupComboBox & groupsListView with all groups. | 33 | * UserDialog constructor. Setup the dialog, fill the groupComboBox & groupsListView with all groups. |
35 | * | 34 | * |
36 | */ | 35 | */ |
37 | using namespace Opie::Ui; | ||
38 | UserDialog::UserDialog(int viewmode, QWidget* parent, const char* name, bool modal, WFlags fl) : QDialog(parent, name, modal, fl) | 36 | UserDialog::UserDialog(int viewmode, QWidget* parent, const char* name, bool modal, WFlags fl) : QDialog(parent, name, modal, fl) |
39 | { | 37 | { |
40 | vm=viewmode; | 38 | vm=viewmode; |
41 | QVBoxLayout *layout = new QVBoxLayout(this); | 39 | QVBoxLayout *layout = new QVBoxLayout(this); |
42 | myTabWidget=new QTabWidget(this,"User Tab Widget"); | 40 | myTabWidget=new QTabWidget(this,"User Tab Widget"); |
43 | layout->addWidget(myTabWidget); | 41 | layout->addWidget(myTabWidget); |
44 | setupTab1(); | 42 | setupTab1(); |
45 | setupTab2(); | 43 | setupTab2(); |
46 | 44 | ||
47 | accounts->groupStringList.sort(); | 45 | accounts->groupStringList.sort(); |
48 | // And also fill the listview & the combobox with all available groups. | 46 | // And also fill the listview & the combobox with all available groups. |
49 | for( QStringList::Iterator it = accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) | 47 | for( QStringList::Iterator it = accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) |
50 | { | 48 | { |
51 | accounts->splitGroupEntry(*it); | 49 | accounts->splitGroupEntry(*it); |
52 | if(accounts->gr_name.find(QRegExp("^#"),0)) | 50 | if(accounts->gr_name.find(QRegExp("^#"),0)) |
53 | { // Skip commented lines. | 51 | { // Skip commented lines. |
54 | new QCheckListItem(groupsListView,accounts->gr_name,QCheckListItem::CheckBox); | 52 | new QCheckListItem(groupsListView,accounts->gr_name,QCheckListItem::CheckBox); |
55 | groupComboBox->insertItem(accounts->gr_name); | 53 | groupComboBox->insertItem(accounts->gr_name); |
56 | } | 54 | } |
57 | } | 55 | } |
58 | QPEApplication::showDialog( this ); | 56 | QPEApplication::showDialog( this ); |
59 | } | 57 | } |
60 | 58 | ||
61 | /** | 59 | /** |
62 | * Empty destructor. | 60 | * Empty destructor. |
63 | * | 61 | * |
64 | */ | 62 | */ |
65 | UserDialog::~UserDialog() | 63 | UserDialog::~UserDialog() |
66 | {} | 64 | {} |
67 | 65 | ||
68 | /** | 66 | /** |
69 | * Creates the first tab, all userinfo is here. | 67 | * Creates the first tab, all userinfo is here. |
70 | * | 68 | * |
71 | */ | 69 | */ |
72 | void UserDialog::setupTab1() | 70 | void UserDialog::setupTab1() |
73 | { | 71 | { |
74 | QPixmap mypixmap; | 72 | QPixmap mypixmap; |
75 | QWidget *tabpage = new QWidget(myTabWidget,"page1"); | 73 | QWidget *tabpage = new QWidget(myTabWidget,"page1"); |
76 | QVBoxLayout *layout = new QVBoxLayout(tabpage); | 74 | QVBoxLayout *layout = new QVBoxLayout(tabpage); |
77 | layout->setMargin(5); | 75 | layout->setMargin(5); |
78 | 76 | ||
79 | // Picture | 77 | // Picture |
80 | picturePushButton = new QPushButton(tabpage,"Label"); | 78 | picturePushButton = new QPushButton(tabpage,"Label"); |
81 | picturePushButton->setMinimumSize(48,48); | 79 | picturePushButton->setMinimumSize(48,48); |
82 | picturePushButton->setMaximumSize(48,48); | 80 | picturePushButton->setMaximumSize(48,48); |
83 | picturePushButton->setPixmap(Resource::loadPixmap("usermanager/usericon")); // Load default usericon. | 81 | picturePushButton->setPixmap(Resource::loadPixmap("usermanager/usericon")); // Load default usericon. |
84 | connect(picturePushButton,SIGNAL(clicked()),this,SLOT(clickedPicture())); // Clicking the picture should invoke pictureselector. | 82 | connect(picturePushButton,SIGNAL(clicked()),this,SLOT(clickedPicture())); // Clicking the picture should invoke pictureselector. |
85 | 83 | ||
@@ -200,97 +198,97 @@ void UserDialog::setupTab2() | |||
200 | } | 198 | } |
201 | 199 | ||
202 | /** | 200 | /** |
203 | * Static function that creates the userinfo dialog. | 201 | * Static function that creates the userinfo dialog. |
204 | * The user will be prompted to add a user. | 202 | * The user will be prompted to add a user. |
205 | * | 203 | * |
206 | * @param uid This is a suggested available UID. | 204 | * @param uid This is a suggested available UID. |
207 | * @param gid This is a suggested available GID. | 205 | * @param gid This is a suggested available GID. |
208 | * | 206 | * |
209 | * @return <code>true</code> if the user was successfully added, otherwise <code>false</code>. | 207 | * @return <code>true</code> if the user was successfully added, otherwise <code>false</code>. |
210 | * | 208 | * |
211 | */ | 209 | */ |
212 | bool UserDialog::addUser(int uid, int gid) | 210 | bool UserDialog::addUser(int uid, int gid) |
213 | { | 211 | { |
214 | QCheckListItem *temp; | 212 | QCheckListItem *temp; |
215 | QFile ozTest; | 213 | QFile ozTest; |
216 | int oz=false; | 214 | int oz=false; |
217 | if(ODevice::inst()->system()==System_OpenZaurus) oz=true; | 215 | if(ODevice::inst()->system()==System_OpenZaurus) oz=true; |
218 | // viewmode is a workaround for a bug in qte-2.3.4 that gives bus error on manipulating adduserDialog's widgets here. | 216 | // viewmode is a workaround for a bug in qte-2.3.4 that gives bus error on manipulating adduserDialog's widgets here. |
219 | UserDialog *adduserDialog=new UserDialog(VIEWMODE_NEW); | 217 | UserDialog *adduserDialog=new UserDialog(VIEWMODE_NEW); |
220 | adduserDialog->setCaption(tr("Add User")); | 218 | adduserDialog->setCaption(tr("Add User")); |
221 | adduserDialog->userID=uid; // Set next available UID as default uid. | 219 | adduserDialog->userID=uid; // Set next available UID as default uid. |
222 | adduserDialog->groupID=gid; // Set next available GID as default gid. | 220 | adduserDialog->groupID=gid; // Set next available GID as default gid. |
223 | // Insert default group into groupComboBox | 221 | // Insert default group into groupComboBox |
224 | adduserDialog->groupComboBox->insertItem("<create new group>",0); | 222 | adduserDialog->groupComboBox->insertItem("<create new group>",0); |
225 | adduserDialog->uidLineEdit->setText(QString::number(uid)); | 223 | adduserDialog->uidLineEdit->setText(QString::number(uid)); |
226 | // If we're running on OZ, add new users to some default groups. | 224 | // If we're running on OZ, add new users to some default groups. |
227 | if(oz) | 225 | if(oz) |
228 | { | 226 | { |
229 | QListViewItemIterator iter( adduserDialog->groupsListView ); | 227 | QListViewItemIterator iter( adduserDialog->groupsListView ); |
230 | for ( ; iter.current(); ++iter ) | 228 | for ( ; iter.current(); ++iter ) |
231 | { | 229 | { |
232 | temp=(QCheckListItem*)iter.current(); | 230 | temp=(QCheckListItem*)iter.current(); |
233 | if (temp->text()=="video") temp->setOn(true); | 231 | if (temp->text()=="video") temp->setOn(true); |
234 | if (temp->text()=="audio") temp->setOn(true); | 232 | if (temp->text()=="audio") temp->setOn(true); |
235 | if (temp->text()=="time") temp->setOn(true); | 233 | if (temp->text()=="time") temp->setOn(true); |
236 | if (temp->text()=="power") temp->setOn(true); | 234 | if (temp->text()=="power") temp->setOn(true); |
237 | if (temp->text()=="input") temp->setOn(true); | 235 | if (temp->text()=="input") temp->setOn(true); |
238 | if (temp->text()=="sharp") temp->setOn(true); | 236 | if (temp->text()=="sharp") temp->setOn(true); |
239 | if (temp->text()=="tty") temp->setOn(true); | 237 | if (temp->text()=="tty") temp->setOn(true); |
240 | } | 238 | } |
241 | } | 239 | } |
242 | // Show the dialog! | 240 | // Show the dialog! |
243 | if(!(adduserDialog->exec())) return false; | 241 | if(!(adduserDialog->exec())) return false; |
244 | if((adduserDialog->groupComboBox->currentItem()!=0)) | 242 | if((adduserDialog->groupComboBox->currentItem()!=0)) |
245 | { | 243 | { |
246 | accounts->findGroup(adduserDialog->groupComboBox->currentText()); | 244 | accounts->findGroup(adduserDialog->groupComboBox->currentText()); |
247 | adduserDialog->groupID=accounts->gr_gid; | 245 | adduserDialog->groupID=accounts->gr_gid; |
248 | qWarning(QString::number(accounts->gr_gid)); | 246 | owarn << QString::number(accounts->gr_gid) << oendl; |
249 | } | 247 | } |
250 | if(!(accounts->addUser(adduserDialog->loginLineEdit->text(), adduserDialog->passwordLineEdit->text(), | 248 | if(!(accounts->addUser(adduserDialog->loginLineEdit->text(), adduserDialog->passwordLineEdit->text(), |
251 | adduserDialog->uidLineEdit->text().toInt(), adduserDialog->groupID, adduserDialog->gecosLineEdit->text(), | 249 | adduserDialog->uidLineEdit->text().toInt(), adduserDialog->groupID, adduserDialog->gecosLineEdit->text(), |
252 | QString("/home/")+adduserDialog->loginLineEdit->text() , adduserDialog->shellComboBox->currentText()))) | 250 | QString("/home/")+adduserDialog->loginLineEdit->text() , adduserDialog->shellComboBox->currentText()))) |
253 | { | 251 | { |
254 | QMessageBox::information(0,"Ooops!","Something went wrong!\nUnable to add user."); | 252 | QMessageBox::information(0,"Ooops!","Something went wrong!\nUnable to add user."); |
255 | return false; | 253 | return false; |
256 | } | 254 | } |
257 | 255 | ||
258 | // Add User to additional groups. | 256 | // Add User to additional groups. |
259 | QListViewItemIterator it( adduserDialog->groupsListView ); | 257 | QListViewItemIterator it( adduserDialog->groupsListView ); |
260 | for ( ; it.current(); ++it ) | 258 | for ( ; it.current(); ++it ) |
261 | { | 259 | { |
262 | temp=(QCheckListItem*)it.current(); | 260 | temp=(QCheckListItem*)it.current(); |
263 | if (temp->isOn() ) | 261 | if (temp->isOn() ) |
264 | accounts->addGroupMember(it.current()->text(0),adduserDialog->loginLineEdit->text()); | 262 | accounts->addGroupMember(it.current()->text(0),adduserDialog->loginLineEdit->text()); |
265 | } | 263 | } |
266 | // Copy image to pics/users/ | 264 | // Copy image to pics/users/ |
267 | if(!(adduserDialog->userImage.isNull())) | 265 | if(!(adduserDialog->userImage.isNull())) |
268 | { | 266 | { |
269 | QDir d; | 267 | QDir d; |
270 | if(!(d.exists("/opt/QtPalmtop/pics/users"))) | 268 | if(!(d.exists("/opt/QtPalmtop/pics/users"))) |
271 | { | 269 | { |
272 | d.mkdir("/opt/QtPalmtop/pics/users"); | 270 | d.mkdir("/opt/QtPalmtop/pics/users"); |
273 | } | 271 | } |
274 | QString filename="/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png"; | 272 | QString filename="/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png"; |
275 | // adduserDialog->userImage=adduserDialog->userImage.smoothScale(48,48); | 273 | // adduserDialog->userImage=adduserDialog->userImage.smoothScale(48,48); |
276 | adduserDialog->userImage.save(filename,"PNG"); | 274 | adduserDialog->userImage.save(filename,"PNG"); |
277 | } | 275 | } |
278 | 276 | ||
279 | // Should we copy the skeleton homedirectory /etc/skel to the user's homedirectory? | 277 | // Should we copy the skeleton homedirectory /etc/skel to the user's homedirectory? |
280 | accounts->findUser(adduserDialog->loginLineEdit->text()); | 278 | accounts->findUser(adduserDialog->loginLineEdit->text()); |
281 | if(adduserDialog->skelCheckBox->isChecked()) | 279 | if(adduserDialog->skelCheckBox->isChecked()) |
282 | { | 280 | { |
283 | QString command_cp; | 281 | QString command_cp; |
284 | QString command_chown; | 282 | QString command_chown; |
285 | command_cp.sprintf("cp -a /etc/skel/* %s/",accounts->pw_dir.latin1()); | 283 | command_cp.sprintf("cp -a /etc/skel/* %s/",accounts->pw_dir.latin1()); |
286 | system(command_cp); | 284 | system(command_cp); |
287 | 285 | ||
288 | command_cp.sprintf("cp -a /etc/skel/.[!.]* %s/",accounts->pw_dir.latin1()); // Bug in busybox, ".*" includes parent directory, does this work as a workaround? | 286 | command_cp.sprintf("cp -a /etc/skel/.[!.]* %s/",accounts->pw_dir.latin1()); // Bug in busybox, ".*" includes parent directory, does this work as a workaround? |
289 | system(command_cp); | 287 | system(command_cp); |
290 | 288 | ||
291 | command_chown.sprintf("chown -R %d:%d %s",accounts->pw_uid,accounts->pw_gid,accounts->pw_dir.latin1()); | 289 | command_chown.sprintf("chown -R %d:%d %s",accounts->pw_uid,accounts->pw_gid,accounts->pw_dir.latin1()); |
292 | system(command_chown); | 290 | system(command_chown); |
293 | } | 291 | } |
294 | 292 | ||
295 | return true; | 293 | return true; |
296 | } | 294 | } |
@@ -329,112 +327,112 @@ bool UserDialog::delUser(const char *username) | |||
329 | * @return <code>true</code> if the user was successfully deleted, otherwise <code>false</code>. | 327 | * @return <code>true</code> if the user was successfully deleted, otherwise <code>false</code>. |
330 | * | 328 | * |
331 | */ | 329 | */ |
332 | bool UserDialog::editUser(const char *username) | 330 | bool UserDialog::editUser(const char *username) |
333 | { | 331 | { |
334 | int invalid_group=0; | 332 | int invalid_group=0; |
335 | // viewmode is a workaround for a bug in qte-2.3.4 that gives bus error on manipulating edituserDialog's widgets here. | 333 | // viewmode is a workaround for a bug in qte-2.3.4 that gives bus error on manipulating edituserDialog's widgets here. |
336 | UserDialog *edituserDialog=new UserDialog(VIEWMODE_EDIT); // Create Dialog | 334 | UserDialog *edituserDialog=new UserDialog(VIEWMODE_EDIT); // Create Dialog |
337 | edituserDialog->setCaption(tr("Edit User")); | 335 | edituserDialog->setCaption(tr("Edit User")); |
338 | accounts->findUser(username); // Locate user in database and fill variables in 'accounts' object. | 336 | accounts->findUser(username); // Locate user in database and fill variables in 'accounts' object. |
339 | if(!(accounts->findGroup(accounts->pw_gid))) | 337 | if(!(accounts->findGroup(accounts->pw_gid))) |
340 | { // Locate the user's primary group, and fill group variables in 'accounts' object. | 338 | { // Locate the user's primary group, and fill group variables in 'accounts' object. |
341 | invalid_group=1; | 339 | invalid_group=1; |
342 | } | 340 | } |
343 | // Fill widgets with userinfo. | 341 | // Fill widgets with userinfo. |
344 | edituserDialog->loginLineEdit->setText(accounts->pw_name); | 342 | edituserDialog->loginLineEdit->setText(accounts->pw_name); |
345 | edituserDialog->uidLineEdit->setText(QString::number(accounts->pw_uid)); | 343 | edituserDialog->uidLineEdit->setText(QString::number(accounts->pw_uid)); |
346 | edituserDialog->gecosLineEdit->setText(accounts->pw_gecos); | 344 | edituserDialog->gecosLineEdit->setText(accounts->pw_gecos); |
347 | // Set password to '........', we will later check if this still is the contents, if not, the password has been changed. | 345 | // Set password to '........', we will later check if this still is the contents, if not, the password has been changed. |
348 | edituserDialog->passwordLineEdit->setText("........"); | 346 | edituserDialog->passwordLineEdit->setText("........"); |
349 | // If this user is not using /bin/sh,/bin/ash or /bin/false as shell, add that entry to the shell-combobox. | 347 | // If this user is not using /bin/sh,/bin/ash or /bin/false as shell, add that entry to the shell-combobox. |
350 | if(accounts->pw_shell!="/bin/sh" && accounts->pw_shell!="/bin/ash" && accounts->pw_shell!="/bin/false") | 348 | if(accounts->pw_shell!="/bin/sh" && accounts->pw_shell!="/bin/ash" && accounts->pw_shell!="/bin/false") |
351 | { | 349 | { |
352 | edituserDialog->shellComboBox->insertItem(accounts->pw_shell,0); | 350 | edituserDialog->shellComboBox->insertItem(accounts->pw_shell,0); |
353 | edituserDialog->shellComboBox->setCurrentItem(0); | 351 | edituserDialog->shellComboBox->setCurrentItem(0); |
354 | } | 352 | } |
355 | // Select the primary group for this user. | 353 | // Select the primary group for this user. |
356 | for(int i=0;i<edituserDialog->groupComboBox->count();++i) | 354 | for(int i=0;i<edituserDialog->groupComboBox->count();++i) |
357 | { | 355 | { |
358 | if(accounts->gr_name==edituserDialog->groupComboBox->text(i)) | 356 | if(accounts->gr_name==edituserDialog->groupComboBox->text(i)) |
359 | { | 357 | { |
360 | edituserDialog->groupComboBox->setCurrentItem(i); | 358 | edituserDialog->groupComboBox->setCurrentItem(i); |
361 | break; | 359 | break; |
362 | } | 360 | } |
363 | } | 361 | } |
364 | if(invalid_group) | 362 | if(invalid_group) |
365 | { | 363 | { |
366 | edituserDialog->groupComboBox->insertItem("<Undefined group>",0); | 364 | edituserDialog->groupComboBox->insertItem("<Undefined group>",0); |
367 | edituserDialog->groupComboBox->setCurrentItem(0); | 365 | edituserDialog->groupComboBox->setCurrentItem(0); |
368 | } | 366 | } |
369 | 367 | ||
370 | // Select the groups in the listview, to which the user belongs. | 368 | // Select the groups in the listview, to which the user belongs. |
371 | QCheckListItem *temp; | 369 | QCheckListItem *temp; |
372 | // BAH!!! QRegExp in qt2 sucks... or maybe I do... can't figure out how to check for EITHER end of input ($) OR a comma, so here we do two different QRegExps instead. | 370 | // BAH!!! QRegExp in qt2 sucks... or maybe I do... can't figure out how to check for EITHER end of input ($) OR a comma, so here we do two different QRegExps instead. |
373 | QRegExp userRegExp(QString("[:,]%1$").arg(username)); // The end of line variant. | 371 | QRegExp userRegExp(QString("[:,]%1$").arg(username)); // The end of line variant. |
374 | QStringList tempList=accounts->groupStringList.grep(userRegExp); // Find all entries in the group database, that the user is a member of. | 372 | QStringList tempList=accounts->groupStringList.grep(userRegExp); // Find all entries in the group database, that the user is a member of. |
375 | for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) | 373 | for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) |
376 | { // Iterate over all of them. | 374 | { // Iterate over all of them. |
377 | qWarning(*it); | 375 | owarn << *it << oendl; |
378 | QListViewItemIterator lvit( edituserDialog->groupsListView ); // Compare to all groups. | 376 | QListViewItemIterator lvit( edituserDialog->groupsListView ); // Compare to all groups. |
379 | for ( ; lvit.current(); ++lvit ) | 377 | for ( ; lvit.current(); ++lvit ) |
380 | { | 378 | { |
381 | if(lvit.current()->text(0)==(*it).left((*it).find(":"))) | 379 | if(lvit.current()->text(0)==(*it).left((*it).find(":"))) |
382 | { | 380 | { |
383 | temp=(QCheckListItem*)lvit.current(); | 381 | temp=(QCheckListItem*)lvit.current(); |
384 | temp->setOn(true); // If we find a line with that groupname, select it.; | 382 | temp->setOn(true); // If we find a line with that groupname, select it.; |
385 | } | 383 | } |
386 | } | 384 | } |
387 | } | 385 | } |
388 | userRegExp=QRegExp(QString("[:,]%1,").arg(username)); // And the other one. (not end of line.) | 386 | userRegExp=QRegExp(QString("[:,]%1,").arg(username)); // And the other one. (not end of line.) |
389 | tempList=accounts->groupStringList.grep(userRegExp); // Find all entries in the group database, that the user is a member of. | 387 | tempList=accounts->groupStringList.grep(userRegExp); // Find all entries in the group database, that the user is a member of. |
390 | for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) | 388 | for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) |
391 | { // Iterate over all of them. | 389 | { // Iterate over all of them. |
392 | qWarning(*it); | 390 | owarn << *it << oendl; |
393 | QListViewItemIterator lvit( edituserDialog->groupsListView ); // Compare to all groups. | 391 | QListViewItemIterator lvit( edituserDialog->groupsListView ); // Compare to all groups. |
394 | for ( ; lvit.current(); ++lvit ) | 392 | for ( ; lvit.current(); ++lvit ) |
395 | { | 393 | { |
396 | if(lvit.current()->text(0)==(*it).left((*it).find(":"))) | 394 | if(lvit.current()->text(0)==(*it).left((*it).find(":"))) |
397 | { | 395 | { |
398 | temp=(QCheckListItem*)lvit.current(); | 396 | temp=(QCheckListItem*)lvit.current(); |
399 | temp->setOn(true); // If we find a line with that groupname, select it.; | 397 | temp->setOn(true); // If we find a line with that groupname, select it.; |
400 | } | 398 | } |
401 | } | 399 | } |
402 | } | 400 | } |
403 | 401 | ||
404 | if(!(edituserDialog->exec())) return false; // SHOW THE DIALOG! | 402 | if(!(edituserDialog->exec())) return false; // SHOW THE DIALOG! |
405 | 403 | ||
406 | accounts->findUser(username); // Fill user variables in 'acccounts' object. | 404 | accounts->findUser(username); // Fill user variables in 'acccounts' object. |
407 | accounts->pw_name=edituserDialog->loginLineEdit->text(); | 405 | accounts->pw_name=edituserDialog->loginLineEdit->text(); |
408 | // Has the password been changed ? Make a new "crypt":ed password. | 406 | // Has the password been changed ? Make a new "crypt":ed password. |
409 | if(edituserDialog->passwordLineEdit->text()!="........") accounts->pw_passwd=crypt(edituserDialog->passwordLineEdit->text(), accounts->crypt_make_salt()); | 407 | if(edituserDialog->passwordLineEdit->text()!="........") accounts->pw_passwd=crypt(edituserDialog->passwordLineEdit->text(), accounts->crypt_make_salt()); |
410 | 408 | ||
411 | // Set all variables in accounts object, that will be used when calling 'updateUser()' | 409 | // Set all variables in accounts object, that will be used when calling 'updateUser()' |
412 | accounts->pw_uid=edituserDialog->uidLineEdit->text().toInt(); | 410 | accounts->pw_uid=edituserDialog->uidLineEdit->text().toInt(); |
413 | if(accounts->findGroup(edituserDialog->groupComboBox->currentText())) | 411 | if(accounts->findGroup(edituserDialog->groupComboBox->currentText())) |
414 | { // Fill all group variables in 'accounts' object. | 412 | { // Fill all group variables in 'accounts' object. |
415 | accounts->pw_gid=accounts->gr_gid; // Only do this if the group is a valid group (ie. "<Undefined group>"), otherwise keep the old group. | 413 | accounts->pw_gid=accounts->gr_gid; // Only do this if the group is a valid group (ie. "<Undefined group>"), otherwise keep the old group. |
416 | } | 414 | } |
417 | accounts->pw_gecos=edituserDialog->gecosLineEdit->text(); | 415 | accounts->pw_gecos=edituserDialog->gecosLineEdit->text(); |
418 | accounts->pw_shell=edituserDialog->shellComboBox->currentText(); | 416 | accounts->pw_shell=edituserDialog->shellComboBox->currentText(); |
419 | // Update userinfo, using the information stored in the user variables stored in the accounts object. | 417 | // Update userinfo, using the information stored in the user variables stored in the accounts object. |
420 | accounts->updateUser(username); | 418 | accounts->updateUser(username); |
421 | 419 | ||
422 | // Remove user from all groups he/she is a member of. (could be done in a better way I guess, this was simple though.) | 420 | // Remove user from all groups he/she is a member of. (could be done in a better way I guess, this was simple though.) |
423 | for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) | 421 | for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) |
424 | { | 422 | { |
425 | accounts->delGroupMember((*it).left((*it).find(":")),username); | 423 | accounts->delGroupMember((*it).left((*it).find(":")),username); |
426 | } | 424 | } |
427 | 425 | ||
428 | // Add User to additional groups that he/she is a member of. | 426 | // Add User to additional groups that he/she is a member of. |
429 | QListViewItemIterator it( edituserDialog->groupsListView ); | 427 | QListViewItemIterator it( edituserDialog->groupsListView ); |
430 | for ( ; it.current(); ++it ) | 428 | for ( ; it.current(); ++it ) |
431 | { | 429 | { |
432 | temp=(QCheckListItem*)it.current(); | 430 | temp=(QCheckListItem*)it.current(); |
433 | if ( temp->isOn() ) | 431 | if ( temp->isOn() ) |
434 | accounts->addGroupMember(it.current()->text(0),edituserDialog->loginLineEdit->text()); | 432 | accounts->addGroupMember(it.current()->text(0),edituserDialog->loginLineEdit->text()); |
435 | } | 433 | } |
436 | 434 | ||
437 | // Copy image to pics/users/ | 435 | // Copy image to pics/users/ |
438 | if(!(edituserDialog->userImage.isNull())) | 436 | if(!(edituserDialog->userImage.isNull())) |
439 | { | 437 | { |
440 | QDir d; | 438 | QDir d; |
diff --git a/noncore/settings/usermanager/usermanager.cpp b/noncore/settings/usermanager/usermanager.cpp index a1130d4..1d345ee 100644 --- a/noncore/settings/usermanager/usermanager.cpp +++ b/noncore/settings/usermanager/usermanager.cpp | |||
@@ -1,65 +1,68 @@ | |||
1 | /*************************************************************************** | 1 | /*************************************************************************** |
2 | * * | 2 | * * |
3 | * This program is free software; you can redistribute it and/or modify * | 3 | * This program is free software; you can redistribute it and/or modify * |
4 | * it under the terms of the GNU General Public License as published by * | 4 | * it under the terms of the GNU General Public License as published by * |
5 | * the Free Software Foundation; either version 2 of the License, or * | 5 | * the Free Software Foundation; either version 2 of the License, or * |
6 | * (at your option) any later version. * | 6 | * (at your option) any later version. * |
7 | * * | 7 | * * |
8 | ***************************************************************************/ | 8 | ***************************************************************************/ |
9 | 9 | ||
10 | #include "usermanager.h" | 10 | #include "usermanager.h" |
11 | 11 | ||
12 | #include <qlayout.h> | 12 | /* OPIE */ |
13 | #include <opie2/odebug.h> | ||
14 | #include <qpe/resource.h> | ||
15 | using namespace Opie::Core; | ||
13 | 16 | ||
17 | /* QT */ | ||
18 | #include <qlayout.h> | ||
14 | #include <qmessagebox.h> | 19 | #include <qmessagebox.h> |
15 | #include <qfile.h> | 20 | #include <qfile.h> |
16 | #include <qpe/resource.h> | ||
17 | |||
18 | #include <qregexp.h> | 21 | #include <qregexp.h> |
19 | 22 | ||
20 | /** | 23 | /** |
21 | * The mainwindow constructor. | 24 | * The mainwindow constructor. |
22 | * | 25 | * |
23 | * @param QWidget *parent | 26 | * @param QWidget *parent |
24 | * @param const char *name | 27 | * @param const char *name |
25 | * @ param WFlags fl | 28 | * @ param WFlags fl |
26 | * | 29 | * |
27 | */ | 30 | */ |
28 | UserConfig::UserConfig(QWidget* parent, const char* name, WFlags fl) : QMainWindow(parent, name, fl) { | 31 | UserConfig::UserConfig(QWidget* parent, const char* name, WFlags fl) : QMainWindow(parent, name, fl) { |
29 | setCaption(tr("Opie User Manager")); | 32 | setCaption(tr("Opie User Manager")); |
30 | 33 | ||
31 | // Create an instance of the global object 'accounts'. This holds all user/group info, and functions to modify them. | 34 | // Create an instance of the global object 'accounts'. This holds all user/group info, and functions to modify them. |
32 | accounts=new Passwd(); | 35 | accounts=new Passwd(); |
33 | accounts->open();// This actually loads the files /etc/passwd & /etc/group into memory. | 36 | accounts->open();// This actually loads the files /etc/passwd & /etc/group into memory. |
34 | 37 | ||
35 | // Create the toolbar. | 38 | // Create the toolbar. |
36 | QToolBar *toolbar = new QToolBar(this,"Toolbar"); | 39 | QToolBar *toolbar = new QToolBar(this,"Toolbar"); |
37 | toolbar->setHorizontalStretchable(1); // Is there any other way to get the toolbar to stretch of the full screen!? | 40 | toolbar->setHorizontalStretchable(1); // Is there any other way to get the toolbar to stretch of the full screen!? |
38 | adduserToolButton = new QToolButton(Resource::loadPixmap("usermanager/adduser"),"Add User",0,this,SLOT(addUser()),toolbar,"Add User"); | 41 | adduserToolButton = new QToolButton(Resource::loadPixmap("usermanager/adduser"),"Add User",0,this,SLOT(addUser()),toolbar,"Add User"); |
39 | edituserToolButton = new QToolButton(Resource::loadPixmap("usermanager/edituser"),"Edit User",0,this,SLOT(editUser()),toolbar,"Edit User"); | 42 | edituserToolButton = new QToolButton(Resource::loadPixmap("usermanager/edituser"),"Edit User",0,this,SLOT(editUser()),toolbar,"Edit User"); |
40 | deleteuserToolButton = new QToolButton(Resource::loadPixmap("usermanager/deleteuser"),"Delete User",0,this,SLOT(delUser()),toolbar,"Delete User"); | 43 | deleteuserToolButton = new QToolButton(Resource::loadPixmap("usermanager/deleteuser"),"Delete User",0,this,SLOT(delUser()),toolbar,"Delete User"); |
41 | QToolButton *userstext = new QToolButton(0,"User",0,0,0,toolbar,"User"); | 44 | QToolButton *userstext = new QToolButton(0,"User",0,0,0,toolbar,"User"); |
42 | userstext->setUsesTextLabel(true); | 45 | userstext->setUsesTextLabel(true); |
43 | toolbar->addSeparator(); | 46 | toolbar->addSeparator(); |
44 | addgroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/addgroup"),"Add Group",0,this,SLOT(addGroup()),toolbar,"Add Group"); | 47 | addgroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/addgroup"),"Add Group",0,this,SLOT(addGroup()),toolbar,"Add Group"); |
45 | editgroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/editgroup"),"Edit Group",0,this,SLOT(editGroup()),toolbar,"Edit Group"); | 48 | editgroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/editgroup"),"Edit Group",0,this,SLOT(editGroup()),toolbar,"Edit Group"); |
46 | deletegroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/deletegroup"),"Delete Group",0,this,SLOT(delGroup()),toolbar,"Delete Group"); | 49 | deletegroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/deletegroup"),"Delete Group",0,this,SLOT(delGroup()),toolbar,"Delete Group"); |
47 | QToolButton *groupstext = new QToolButton(0,"Group",0,0,0,toolbar,"Group"); | 50 | QToolButton *groupstext = new QToolButton(0,"Group",0,0,0,toolbar,"Group"); |
48 | groupstext->setUsesTextLabel(true); | 51 | groupstext->setUsesTextLabel(true); |
49 | addToolBar(toolbar,"myToolBar"); | 52 | addToolBar(toolbar,"myToolBar"); |
50 | 53 | ||
51 | // Add a tabwidget and all the tabs. | 54 | // Add a tabwidget and all the tabs. |
52 | myTabWidget = new QTabWidget(this,"My Tab Widget"); | 55 | myTabWidget = new QTabWidget(this,"My Tab Widget"); |
53 | setupTabAccounts(); | 56 | setupTabAccounts(); |
54 | setupTabAllUsers(); | 57 | setupTabAllUsers(); |
55 | setupTabAllGroups(); | 58 | setupTabAllGroups(); |
56 | userPopupMenu.insertItem("Copy",0); | 59 | userPopupMenu.insertItem("Copy",0); |
57 | 60 | ||
58 | getUsers(); // Fill out the iconview & listview with all users. | 61 | getUsers(); // Fill out the iconview & listview with all users. |
59 | getGroups(); // Fill out the group listview with all groups. | 62 | getGroups(); // Fill out the group listview with all groups. |
60 | 63 | ||
61 | setCentralWidget(myTabWidget); | 64 | setCentralWidget(myTabWidget); |
62 | } | 65 | } |
63 | 66 | ||
64 | UserConfig::~UserConfig() { | 67 | UserConfig::~UserConfig() { |
65 | accounts->close(); | 68 | accounts->close(); |
@@ -208,50 +211,50 @@ void UserConfig::delUser() { | |||
208 | } else { | 211 | } else { |
209 | QMessageBox::information(this,"No selection","No user has been selected."); | 212 | QMessageBox::information(this,"No selection","No user has been selected."); |
210 | } | 213 | } |
211 | } | 214 | } |
212 | 215 | ||
213 | } | 216 | } |
214 | 217 | ||
215 | void UserConfig::getGroups() { | 218 | void UserConfig::getGroups() { |
216 | groupsListView->clear();// Empty the listview. | 219 | groupsListView->clear();// Empty the listview. |
217 | availableGID=500;// We need to find the next free GID, and are only interested in values between 500 & 65000. | 220 | availableGID=500;// We need to find the next free GID, and are only interested in values between 500 & 65000. |
218 | for(QStringList::Iterator it=accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) {// Split the list into lines. | 221 | for(QStringList::Iterator it=accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) {// Split the list into lines. |
219 | accounts->splitGroupEntry(*it);// Split the line into its components and fill the variables of 'accounts'. (gr_name, gr_uid & gr_mem). | 222 | accounts->splitGroupEntry(*it);// Split the line into its components and fill the variables of 'accounts'. (gr_name, gr_uid & gr_mem). |
220 | if(accounts->gr_name.find(QRegExp("^#"),0)) {// Skip commented lines. | 223 | if(accounts->gr_name.find(QRegExp("^#"),0)) {// Skip commented lines. |
221 | new QListViewItem(groupsListView,QString::number(accounts->gr_gid),accounts->gr_name); | 224 | new QListViewItem(groupsListView,QString::number(accounts->gr_gid),accounts->gr_name); |
222 | if((accounts->gr_gid>=availableGID) && (accounts->gr_gid<65000)) availableGID=accounts->gr_gid+1;// Maybe a new free GID. | 225 | if((accounts->gr_gid>=availableGID) && (accounts->gr_gid<65000)) availableGID=accounts->gr_gid+1;// Maybe a new free GID. |
223 | } | 226 | } |
224 | } | 227 | } |
225 | } | 228 | } |
226 | 229 | ||
227 | void UserConfig::addGroup() { | 230 | void UserConfig::addGroup() { |
228 | if(GroupDialog::addGroup(availableGID)) getGroups();// Bring up the add group dialog. | 231 | if(GroupDialog::addGroup(availableGID)) getGroups();// Bring up the add group dialog. |
229 | } | 232 | } |
230 | 233 | ||
231 | void UserConfig::editGroup() { | 234 | void UserConfig::editGroup() { |
232 | int gid; | 235 | int gid; |
233 | if(groupsListView->currentItem()) {// Any group selected? | 236 | if(groupsListView->currentItem()) {// Any group selected? |
234 | gid=groupsListView->currentItem()->text(0).toInt();// Get the GID from the listview. | 237 | gid=groupsListView->currentItem()->text(0).toInt();// Get the GID from the listview. |
235 | if(GroupDialog::editGroup(gid)) getGroups();// Bring up the edit group dialog. | 238 | if(GroupDialog::editGroup(gid)) getGroups();// Bring up the edit group dialog. |
236 | } else { | 239 | } else { |
237 | QMessageBox::information(this,"No selection","No group has been selected."); | 240 | QMessageBox::information(this,"No selection","No group has been selected."); |
238 | } | 241 | } |
239 | } | 242 | } |
240 | 243 | ||
241 | void UserConfig::delGroup() { | 244 | void UserConfig::delGroup() { |
242 | const char *groupname; | 245 | const char *groupname; |
243 | if(groupsListView->currentItem()) {// Any group selected? | 246 | if(groupsListView->currentItem()) {// Any group selected? |
244 | groupname=groupsListView->currentItem()->text(1);// Get the groupname from the listview. | 247 | groupname=groupsListView->currentItem()->text(1);// Get the groupname from the listview. |
245 | if(QMessageBox::warning(this,"Delete group","Are you sure you want to\ndelete the group \""+QString(groupname)+"\" ?","&No","&Yes",0,0,1)) { | 248 | if(QMessageBox::warning(this,"Delete group","Are you sure you want to\ndelete the group \""+QString(groupname)+"\" ?","&No","&Yes",0,0,1)) { |
246 | // If confirmed, try to delete the group. | 249 | // If confirmed, try to delete the group. |
247 | if(GroupDialog::delGroup(groupname)) getGroups(); // And also update the view afterwards if the user was deleted. | 250 | if(GroupDialog::delGroup(groupname)) getGroups(); // And also update the view afterwards if the user was deleted. |
248 | } | 251 | } |
249 | } else { | 252 | } else { |
250 | QMessageBox::information(this,"No selection","No group has been selected."); | 253 | QMessageBox::information(this,"No selection","No group has been selected."); |
251 | } | 254 | } |
252 | } | 255 | } |
253 | 256 | ||
254 | void UserConfig::showUserMenu(QListViewItem *item) { | 257 | void UserConfig::showUserMenu(QListViewItem *item) { |
255 | //userPopupMenu.exec(item->mapToGlobal(QPoint(0,0))); | 258 | //userPopupMenu.exec(item->mapToGlobal(QPoint(0,0))); |
256 | qWarning("Pressed!"); | 259 | owarn << "Pressed!" << oendl; |
257 | } | 260 | } |
diff --git a/noncore/settings/usermanager/usermanager.pro b/noncore/settings/usermanager/usermanager.pro index d0647dd..31f52a6 100644 --- a/noncore/settings/usermanager/usermanager.pro +++ b/noncore/settings/usermanager/usermanager.pro | |||
@@ -1,10 +1,9 @@ | |||
1 | #CONFIG = qt warn_on | 1 | CONFIG = qt warn_on quick-app |
2 | CONFIG = qt warn_on quick-app | ||
3 | HEADERS = usermanager.h userdialog.h groupdialog.h passwd.h | 2 | HEADERS = usermanager.h userdialog.h groupdialog.h passwd.h |
4 | SOURCES = usermanager.cpp userdialog.cpp groupdialog.cpp passwd.cpp main.cpp | 3 | SOURCES = usermanager.cpp userdialog.cpp groupdialog.cpp passwd.cpp main.cpp |
5 | INCLUDEPATH += $(OPIEDIR)/include | 4 | INCLUDEPATH += $(OPIEDIR)/include |
6 | DEPENDPATH += $(OPIEDIR)/include | 5 | DEPENDPATH += $(OPIEDIR)/include |
7 | LIBS += -lqpe -lopiecore2 -lopieui2 -lcrypt | 6 | LIBS += -lqpe -lopiecore2 -lopieui2 -lcrypt |
8 | TARGET = usermanager | 7 | TARGET = usermanager |
9 | 8 | ||
10 | include ( $(OPIEDIR)/include.pro ) | 9 | include ( $(OPIEDIR)/include.pro ) |