summaryrefslogtreecommitdiff
path: root/noncore/settings/usermanager
authorar <ar>2004-02-21 16:02:01 (UTC)
committer ar <ar>2004-02-21 16:02:01 (UTC)
commitdb2afda83e495bff9fc19fa14a30072f1cd4c67a (patch) (side-by-side diff)
tree0281ec10dad24d83179283370661ae9225016de0 /noncore/settings/usermanager
parent460258f203be746ff79e14f32a823f381b8ea513 (diff)
downloadopie-db2afda83e495bff9fc19fa14a30072f1cd4c67a.zip
opie-db2afda83e495bff9fc19fa14a30072f1cd4c67a.tar.gz
opie-db2afda83e495bff9fc19fa14a30072f1cd4c67a.tar.bz2
improve support for BigScreen
Diffstat (limited to 'noncore/settings/usermanager') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/usermanager/userdialog.cpp743
1 files changed, 397 insertions, 346 deletions
diff --git a/noncore/settings/usermanager/userdialog.cpp b/noncore/settings/usermanager/userdialog.cpp
index d87a005..08de352 100644
--- a/noncore/settings/usermanager/userdialog.cpp
+++ b/noncore/settings/usermanager/userdialog.cpp
@@ -8,20 +8,25 @@
***************************************************************************/
#include "userdialog.h"
+#include "passwd.h"
+
+/* OPIE */
+#include <opie/odevice.h>
+#include <qpe/qpeapplication.h>
+/* QT */
#include <qlayout.h>
#include <qlabel.h>
#include <qmessagebox.h>
#include <qfile.h>
+/* STD */
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>
-#include "passwd.h"
-#include <opie/odevice.h>
using namespace Opie;
@@ -29,160 +34,168 @@ using namespace Opie;
* UserDialog constructor. Setup the dialog, fill the groupComboBox & groupsListView with all groups.
*
*/
-UserDialog::UserDialog(int viewmode, QWidget* parent, const char* name, bool modal, WFlags fl) : QDialog(parent, name, modal, fl) {
- vm=viewmode;
- QVBoxLayout *layout = new QVBoxLayout(this);
- myTabWidget=new QTabWidget(this,"User Tab Widget");
- layout->addWidget(myTabWidget);
- setupTab1();
- setupTab2();
-
- accounts->groupStringList.sort();
- // And also fill the listview & the combobox with all available groups.
- for( QStringList::Iterator it = accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) {
- accounts->splitGroupEntry(*it);
- if(accounts->gr_name.find(QRegExp("^#"),0)) { // Skip commented lines.
- new QCheckListItem(groupsListView,accounts->gr_name,QCheckListItem::CheckBox);
- groupComboBox->insertItem(accounts->gr_name);
- }
- }
- showMaximized();
+UserDialog::UserDialog(int viewmode, QWidget* parent, const char* name, bool modal, WFlags fl) : QDialog(parent, name, modal, fl)
+{
+ vm=viewmode;
+ QVBoxLayout *layout = new QVBoxLayout(this);
+ myTabWidget=new QTabWidget(this,"User Tab Widget");
+ layout->addWidget(myTabWidget);
+ setupTab1();
+ setupTab2();
+
+ accounts->groupStringList.sort();
+ // And also fill the listview & the combobox with all available groups.
+ for( QStringList::Iterator it = accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it)
+ {
+ accounts->splitGroupEntry(*it);
+ if(accounts->gr_name.find(QRegExp("^#"),0))
+ { // Skip commented lines.
+ new QCheckListItem(groupsListView,accounts->gr_name,QCheckListItem::CheckBox);
+ groupComboBox->insertItem(accounts->gr_name);
+ }
+ }
+ QPEApplication::showDialog( this );
}
/**
* Empty destructor.
*
*/
-UserDialog::~UserDialog() {
-}
+UserDialog::~UserDialog()
+{}
/**
* Creates the first tab, all userinfo is here.
*
*/
-void UserDialog::setupTab1() {
- QPixmap mypixmap;
- QWidget *tabpage = new QWidget(myTabWidget,"page1");
- QVBoxLayout *layout = new QVBoxLayout(tabpage);
- layout->setMargin(5);
-
- // Picture
- picturePushButton = new QPushButton(tabpage,"Label");
- picturePushButton->setMinimumSize(48,48);
- picturePushButton->setMaximumSize(48,48);
- picturePushButton->setPixmap(Resource::loadPixmap("usermanager/usericon")); // Load default usericon.
- connect(picturePushButton,SIGNAL(clicked()),this,SLOT(clickedPicture())); // Clicking the picture should invoke pictureselector.
-
- // Login
- QLabel *loginLabel=new QLabel(tabpage,"Login: ");
- loginLabel->setText("Login: ");
- loginLineEdit=new QLineEdit(tabpage,"Login: ");
-
- // UID
- QLabel *uidLabel=new QLabel(tabpage,"uid: ");
- uidLabel->setText("UserID: ");
- uidLineEdit=new QLineEdit(tabpage,"uid: ");
- uidLineEdit->setEnabled(false);
-
- // Username (gecos)
- QLabel *gecosLabel=new QLabel(tabpage,"gecos");
- gecosLabel->setText("Username: ");
- gecosLineEdit=new QLineEdit(tabpage,"gecos");
-
- // Password
- QLabel *passwordLabel=new QLabel(tabpage,"password");
- passwordLabel->setText("Password: ");
- passwordLineEdit=new QLineEdit(tabpage,"password");
- passwordLineEdit->setEchoMode(QLineEdit::Password);
-
- // Shell
- QLabel *shellLabel=new QLabel(tabpage,"shell");
- shellLabel->setText("Shell: ");
- shellComboBox=new QComboBox(tabpage,"shell");
- shellComboBox->setEditable(true);
- shellComboBox->insertItem("/bin/sh");
- shellComboBox->insertItem("/bin/ash");
- shellComboBox->insertItem("/bin/false");
-
- // Primary Group
- QLabel *groupLabel=new QLabel(tabpage,"group");
- groupLabel->setText("Primary group: ");
- groupComboBox=new QComboBox(tabpage,"PrimaryGroup");
-
- if(vm==VIEWMODE_NEW) {
- // Copy /etc/skel
- skelLabel=new QLabel(tabpage,"skel");
- skelLabel->setText("Copy /etc/skel: ");
- skelCheckBox=new QCheckBox(tabpage);
- skelCheckBox->setChecked(true);
- }
-
- // Widget layout
- QHBoxLayout *hlayout=new QHBoxLayout(-1,"hlayout");
- layout->addWidget(picturePushButton);
- layout->addSpacing(5);
- layout->addLayout(hlayout);
- QVBoxLayout *vlayout1=new QVBoxLayout(-1,"vlayout1");
- QVBoxLayout *vlayout2=new QVBoxLayout(-1,"vlayout2");
- // First column, labels
- vlayout1->addWidget(loginLabel);
- vlayout1->addSpacing(5);
- vlayout1->addWidget(uidLabel);
- vlayout1->addSpacing(5);
- vlayout1->addWidget(gecosLabel);
- vlayout1->addSpacing(5);
- vlayout1->addWidget(passwordLabel);
- vlayout1->addSpacing(5);
- vlayout1->addWidget(shellLabel);
- vlayout1->addSpacing(5);
- vlayout1->addWidget(groupLabel);
- if(vm==VIEWMODE_NEW) {
- vlayout1->addSpacing(5);
- vlayout1->addWidget(skelLabel);
- }
- // Second column, data
- vlayout2->addWidget(loginLineEdit);
- vlayout2->addSpacing(5);
- vlayout2->addWidget(uidLineEdit);
- vlayout2->addSpacing(5);
- vlayout2->addWidget(gecosLineEdit);
- vlayout2->addSpacing(5);
- vlayout2->addWidget(passwordLineEdit);
- vlayout2->addSpacing(5);
- vlayout2->addWidget(shellComboBox);
- vlayout2->addSpacing(5);
- vlayout2->addWidget(groupComboBox);
- if(vm==VIEWMODE_NEW) {
- vlayout2->addSpacing(5);
- vlayout2->addWidget(skelCheckBox);
- }
- hlayout->addLayout(vlayout1);
- hlayout->addLayout(vlayout2);
-
- myTabWidget->addTab(tabpage,"User Info");
+void UserDialog::setupTab1()
+{
+ QPixmap mypixmap;
+ QWidget *tabpage = new QWidget(myTabWidget,"page1");
+ QVBoxLayout *layout = new QVBoxLayout(tabpage);
+ layout->setMargin(5);
+
+ // Picture
+ picturePushButton = new QPushButton(tabpage,"Label");
+ picturePushButton->setMinimumSize(48,48);
+ picturePushButton->setMaximumSize(48,48);
+ picturePushButton->setPixmap(Resource::loadPixmap("usermanager/usericon")); // Load default usericon.
+ connect(picturePushButton,SIGNAL(clicked()),this,SLOT(clickedPicture())); // Clicking the picture should invoke pictureselector.
+
+ // Login
+ QLabel *loginLabel=new QLabel(tabpage,"Login: ");
+ loginLabel->setText("Login: ");
+ loginLineEdit=new QLineEdit(tabpage,"Login: ");
+
+ // UID
+ QLabel *uidLabel=new QLabel(tabpage,"uid: ");
+ uidLabel->setText("UserID: ");
+ uidLineEdit=new QLineEdit(tabpage,"uid: ");
+ uidLineEdit->setEnabled(false);
+
+ // Username (gecos)
+ QLabel *gecosLabel=new QLabel(tabpage,"gecos");
+ gecosLabel->setText("Username: ");
+ gecosLineEdit=new QLineEdit(tabpage,"gecos");
+
+ // Password
+ QLabel *passwordLabel=new QLabel(tabpage,"password");
+ passwordLabel->setText("Password: ");
+ passwordLineEdit=new QLineEdit(tabpage,"password");
+ passwordLineEdit->setEchoMode(QLineEdit::Password);
+
+ // Shell
+ QLabel *shellLabel=new QLabel(tabpage,"shell");
+ shellLabel->setText("Shell: ");
+ shellComboBox=new QComboBox(tabpage,"shell");
+ shellComboBox->setEditable(true);
+ shellComboBox->insertItem("/bin/sh");
+ shellComboBox->insertItem("/bin/ash");
+ shellComboBox->insertItem("/bin/false");
+
+ // Primary Group
+ QLabel *groupLabel=new QLabel(tabpage,"group");
+ groupLabel->setText("Primary group: ");
+ groupComboBox=new QComboBox(tabpage,"PrimaryGroup");
+
+ if(vm==VIEWMODE_NEW)
+ {
+ // Copy /etc/skel
+ skelLabel=new QLabel(tabpage,"skel");
+ skelLabel->setText("Copy /etc/skel: ");
+ skelCheckBox=new QCheckBox(tabpage);
+ skelCheckBox->setChecked(true);
+ }
+
+ // Widget layout
+ QHBoxLayout *hlayout=new QHBoxLayout(-1,"hlayout");
+ layout->addWidget(picturePushButton);
+ layout->addSpacing(5);
+ layout->addLayout(hlayout);
+ QVBoxLayout *vlayout1=new QVBoxLayout(-1,"vlayout1");
+ QVBoxLayout *vlayout2=new QVBoxLayout(-1,"vlayout2");
+ // First column, labels
+ vlayout1->addWidget(loginLabel);
+ vlayout1->addSpacing(5);
+ vlayout1->addWidget(uidLabel);
+ vlayout1->addSpacing(5);
+ vlayout1->addWidget(gecosLabel);
+ vlayout1->addSpacing(5);
+ vlayout1->addWidget(passwordLabel);
+ vlayout1->addSpacing(5);
+ vlayout1->addWidget(shellLabel);
+ vlayout1->addSpacing(5);
+ vlayout1->addWidget(groupLabel);
+ if(vm==VIEWMODE_NEW)
+ {
+ vlayout1->addSpacing(5);
+ vlayout1->addWidget(skelLabel);
+ }
+ // Second column, data
+ vlayout2->addWidget(loginLineEdit);
+ vlayout2->addSpacing(5);
+ vlayout2->addWidget(uidLineEdit);
+ vlayout2->addSpacing(5);
+ vlayout2->addWidget(gecosLineEdit);
+ vlayout2->addSpacing(5);
+ vlayout2->addWidget(passwordLineEdit);
+ vlayout2->addSpacing(5);
+ vlayout2->addWidget(shellComboBox);
+ vlayout2->addSpacing(5);
+ vlayout2->addWidget(groupComboBox);
+ if(vm==VIEWMODE_NEW)
+ {
+ vlayout2->addSpacing(5);
+ vlayout2->addWidget(skelCheckBox);
+ }
+ hlayout->addLayout(vlayout1);
+ hlayout->addLayout(vlayout2);
+
+ myTabWidget->addTab(tabpage,"User Info");
}
/**
* Creates the second tab containing additional groups for the user.
*
*/
-void UserDialog::setupTab2() {
- QWidget *tabpage = new QWidget(myTabWidget,"page2");
- QVBoxLayout *layout = new QVBoxLayout(tabpage);
- layout->setMargin(5);
-
- // Additional groups
- groupsListView=new QListView(tabpage,"groups");
- groupsListView->addColumn("Additional groups");
- groupsListView->setColumnWidthMode(0,QListView::Maximum);
- groupsListView->setMultiSelection(false);
- groupsListView->setAllColumnsShowFocus(false);
-
- layout->addSpacing(5);
- // Grouplist
- layout->addWidget(groupsListView);
-
- myTabWidget->addTab(tabpage,"User Groups");
+void UserDialog::setupTab2()
+{
+ QWidget *tabpage = new QWidget(myTabWidget,"page2");
+ QVBoxLayout *layout = new QVBoxLayout(tabpage);
+ layout->setMargin(5);
+
+ // Additional groups
+ groupsListView=new QListView(tabpage,"groups");
+ groupsListView->addColumn("Additional groups");
+ groupsListView->setColumnWidthMode(0,QListView::Maximum);
+ groupsListView->setMultiSelection(false);
+ groupsListView->setAllColumnsShowFocus(false);
+
+ layout->addSpacing(5);
+ // Grouplist
+ layout->addWidget(groupsListView);
+
+ myTabWidget->addTab(tabpage,"User Groups");
}
/**
@@ -195,81 +208,90 @@ void UserDialog::setupTab2() {
* @return <code>true</code> if the user was successfully added, otherwise <code>false</code>.
*
*/
-bool UserDialog::addUser(int uid, int gid) {
- QCheckListItem *temp;
- QFile ozTest;
- int oz=false;
- if(ODevice::inst()->system()==System_OpenZaurus) oz=true;
- // viewmode is a workaround for a bug in qte-2.3.4 that gives bus error on manipulating adduserDialog's widgets here.
- UserDialog *adduserDialog=new UserDialog(VIEWMODE_NEW);
- adduserDialog->setCaption(tr("Add User"));
- adduserDialog->userID=uid; // Set next available UID as default uid.
- adduserDialog->groupID=gid; // Set next available GID as default gid.
- // Insert default group into groupComboBox
- adduserDialog->groupComboBox->insertItem("<create new group>",0);
- adduserDialog->uidLineEdit->setText(QString::number(uid));
- // If we're running on OZ, add new users to some default groups.
- if(oz) {
- QListViewItemIterator iter( adduserDialog->groupsListView );
- for ( ; iter.current(); ++iter ) {
- temp=(QCheckListItem*)iter.current();
- if (temp->text()=="video") temp->setOn(true);
- if (temp->text()=="audio") temp->setOn(true);
- if (temp->text()=="time") temp->setOn(true);
- if (temp->text()=="power") temp->setOn(true);
- if (temp->text()=="input") temp->setOn(true);
- if (temp->text()=="sharp") temp->setOn(true);
- if (temp->text()=="tty") temp->setOn(true);
- }
- }
- // Show the dialog!
- if(!(adduserDialog->exec())) return false;
- if((adduserDialog->groupComboBox->currentItem()!=0)) {
- accounts->findGroup(adduserDialog->groupComboBox->currentText());
- adduserDialog->groupID=accounts->gr_gid;
- qWarning(QString::number(accounts->gr_gid));
- }
- if(!(accounts->addUser(adduserDialog->loginLineEdit->text(), adduserDialog->passwordLineEdit->text(),
- adduserDialog->uidLineEdit->text().toInt(), adduserDialog->groupID, adduserDialog->gecosLineEdit->text(),
- QString("/home/")+adduserDialog->loginLineEdit->text() , adduserDialog->shellComboBox->currentText()))) {
- QMessageBox::information(0,"Ooops!","Something went wrong!\nUnable to add user.");
- return false;
- }
-
- // Add User to additional groups.
- QListViewItemIterator it( adduserDialog->groupsListView );
- for ( ; it.current(); ++it ) {
- temp=(QCheckListItem*)it.current();
- if (temp->isOn() )
- accounts->addGroupMember(it.current()->text(0),adduserDialog->loginLineEdit->text());
- }
- // Copy image to pics/users/
- if(!(adduserDialog->userImage.isNull())) {
- QDir d;
- if(!(d.exists("/opt/QtPalmtop/pics/users"))) {
- d.mkdir("/opt/QtPalmtop/pics/users");
- }
- QString filename="/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png";
-// adduserDialog->userImage=adduserDialog->userImage.smoothScale(48,48);
- adduserDialog->userImage.save(filename,"PNG");
- }
-
- // Should we copy the skeleton homedirectory /etc/skel to the user's homedirectory?
- accounts->findUser(adduserDialog->loginLineEdit->text());
- if(adduserDialog->skelCheckBox->isChecked()) {
- QString command_cp;
- QString command_chown;
- command_cp.sprintf("cp -a /etc/skel/* %s/",accounts->pw_dir.latin1());
- system(command_cp);
-
- command_cp.sprintf("cp -a /etc/skel/.[!.]* %s/",accounts->pw_dir.latin1()); // Bug in busybox, ".*" includes parent directory, does this work as a workaround?
- system(command_cp);
-
- command_chown.sprintf("chown -R %d:%d %s",accounts->pw_uid,accounts->pw_gid,accounts->pw_dir.latin1());
- system(command_chown);
- }
-
- return true;
+bool UserDialog::addUser(int uid, int gid)
+{
+ QCheckListItem *temp;
+ QFile ozTest;
+ int oz=false;
+ if(ODevice::inst()->system()==System_OpenZaurus) oz=true;
+ // viewmode is a workaround for a bug in qte-2.3.4 that gives bus error on manipulating adduserDialog's widgets here.
+ UserDialog *adduserDialog=new UserDialog(VIEWMODE_NEW);
+ adduserDialog->setCaption(tr("Add User"));
+ adduserDialog->userID=uid; // Set next available UID as default uid.
+ adduserDialog->groupID=gid; // Set next available GID as default gid.
+ // Insert default group into groupComboBox
+ adduserDialog->groupComboBox->insertItem("<create new group>",0);
+ adduserDialog->uidLineEdit->setText(QString::number(uid));
+ // If we're running on OZ, add new users to some default groups.
+ if(oz)
+ {
+ QListViewItemIterator iter( adduserDialog->groupsListView );
+ for ( ; iter.current(); ++iter )
+ {
+ temp=(QCheckListItem*)iter.current();
+ if (temp->text()=="video") temp->setOn(true);
+ if (temp->text()=="audio") temp->setOn(true);
+ if (temp->text()=="time") temp->setOn(true);
+ if (temp->text()=="power") temp->setOn(true);
+ if (temp->text()=="input") temp->setOn(true);
+ if (temp->text()=="sharp") temp->setOn(true);
+ if (temp->text()=="tty") temp->setOn(true);
+ }
+ }
+ // Show the dialog!
+ if(!(adduserDialog->exec())) return false;
+ if((adduserDialog->groupComboBox->currentItem()!=0))
+ {
+ accounts->findGroup(adduserDialog->groupComboBox->currentText());
+ adduserDialog->groupID=accounts->gr_gid;
+ qWarning(QString::number(accounts->gr_gid));
+ }
+ if(!(accounts->addUser(adduserDialog->loginLineEdit->text(), adduserDialog->passwordLineEdit->text(),
+ adduserDialog->uidLineEdit->text().toInt(), adduserDialog->groupID, adduserDialog->gecosLineEdit->text(),
+ QString("/home/")+adduserDialog->loginLineEdit->text() , adduserDialog->shellComboBox->currentText())))
+ {
+ QMessageBox::information(0,"Ooops!","Something went wrong!\nUnable to add user.");
+ return false;
+ }
+
+ // Add User to additional groups.
+ QListViewItemIterator it( adduserDialog->groupsListView );
+ for ( ; it.current(); ++it )
+ {
+ temp=(QCheckListItem*)it.current();
+ if (temp->isOn() )
+ accounts->addGroupMember(it.current()->text(0),adduserDialog->loginLineEdit->text());
+ }
+ // Copy image to pics/users/
+ if(!(adduserDialog->userImage.isNull()))
+ {
+ QDir d;
+ if(!(d.exists("/opt/QtPalmtop/pics/users")))
+ {
+ d.mkdir("/opt/QtPalmtop/pics/users");
+ }
+ QString filename="/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png";
+ // adduserDialog->userImage=adduserDialog->userImage.smoothScale(48,48);
+ adduserDialog->userImage.save(filename,"PNG");
+ }
+
+ // Should we copy the skeleton homedirectory /etc/skel to the user's homedirectory?
+ accounts->findUser(adduserDialog->loginLineEdit->text());
+ if(adduserDialog->skelCheckBox->isChecked())
+ {
+ QString command_cp;
+ QString command_chown;
+ command_cp.sprintf("cp -a /etc/skel/* %s/",accounts->pw_dir.latin1());
+ system(command_cp);
+
+ command_cp.sprintf("cp -a /etc/skel/.[!.]* %s/",accounts->pw_dir.latin1()); // Bug in busybox, ".*" includes parent directory, does this work as a workaround?
+ system(command_cp);
+
+ command_chown.sprintf("chown -R %d:%d %s",accounts->pw_uid,accounts->pw_gid,accounts->pw_dir.latin1());
+ system(command_chown);
+ }
+
+ return true;
}
/**
@@ -280,16 +302,21 @@ bool UserDialog::addUser(int uid, int gid) {
* @return <code>true</code> if the user was successfully deleted, otherwise <code>false</code>.
*
*/
-bool UserDialog::delUser(const char *username) {
- if((accounts->findUser(username))) { // Does that user exist?
- if(!(accounts->delUser(username))) { // Delete the user.
- QMessageBox::information(0,"Ooops!","Something went wrong\nUnable to delete user: "+QString(username)+".");
- }
- } else {
- QMessageBox::information(0,"Invalid Username","That username ("+QString(username)+")does not exist.");
- return false;
- }
- return true;
+bool UserDialog::delUser(const char *username)
+{
+ if((accounts->findUser(username)))
+ { // Does that user exist?
+ if(!(accounts->delUser(username)))
+ { // Delete the user.
+ QMessageBox::information(0,"Ooops!","Something went wrong\nUnable to delete user: "+QString(username)+".");
+ }
+ }
+ else
+ {
+ QMessageBox::information(0,"Invalid Username","That username ("+QString(username)+")does not exist.");
+ return false;
+ }
+ return true;
}
/**
@@ -301,138 +328,162 @@ bool UserDialog::delUser(const char *username) {
* @return <code>true</code> if the user was successfully deleted, otherwise <code>false</code>.
*
*/
-bool UserDialog::editUser(const char *username) {
- int invalid_group=0;
- // viewmode is a workaround for a bug in qte-2.3.4 that gives bus error on manipulating edituserDialog's widgets here.
- UserDialog *edituserDialog=new UserDialog(VIEWMODE_EDIT); // Create Dialog
- edituserDialog->setCaption(tr("Edit User"));
- accounts->findUser(username); // Locate user in database and fill variables in 'accounts' object.
- if(!(accounts->findGroup(accounts->pw_gid))) { // Locate the user's primary group, and fill group variables in 'accounts' object.
- invalid_group=1;
- }
- // Fill widgets with userinfo.
- edituserDialog->loginLineEdit->setText(accounts->pw_name);
- edituserDialog->uidLineEdit->setText(QString::number(accounts->pw_uid));
- edituserDialog->gecosLineEdit->setText(accounts->pw_gecos);
- // Set password to '........', we will later check if this still is the contents, if not, the password has been changed.
- edituserDialog->passwordLineEdit->setText("........");
- // If this user is not using /bin/sh,/bin/ash or /bin/false as shell, add that entry to the shell-combobox.
- if(accounts->pw_shell!="/bin/sh" && accounts->pw_shell!="/bin/ash" && accounts->pw_shell!="/bin/false") {
- edituserDialog->shellComboBox->insertItem(accounts->pw_shell,0);
- edituserDialog->shellComboBox->setCurrentItem(0);
- }
- // Select the primary group for this user.
- for(int i=0;i<edituserDialog->groupComboBox->count();++i) {
- if(accounts->gr_name==edituserDialog->groupComboBox->text(i)) {
- edituserDialog->groupComboBox->setCurrentItem(i);
- break;
- }
- }
- if(invalid_group) {
- edituserDialog->groupComboBox->insertItem("<Undefined group>",0);
- edituserDialog->groupComboBox->setCurrentItem(0);
- }
-
- // Select the groups in the listview, to which the user belongs.
- QCheckListItem *temp;
- // 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.
- QRegExp userRegExp(QString("[:,]%1$").arg(username)); // The end of line variant.
- QStringList tempList=accounts->groupStringList.grep(userRegExp); // Find all entries in the group database, that the user is a member of.
- for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) { // Iterate over all of them.
- qWarning(*it);
- QListViewItemIterator lvit( edituserDialog->groupsListView ); // Compare to all groups.
- for ( ; lvit.current(); ++lvit ) {
- if(lvit.current()->text(0)==(*it).left((*it).find(":"))) {
- temp=(QCheckListItem*)lvit.current();
- temp->setOn(true); // If we find a line with that groupname, select it.;
- }
- }
- }
- userRegExp=QRegExp(QString("[:,]%1,").arg(username)); // And the other one. (not end of line.)
- tempList=accounts->groupStringList.grep(userRegExp); // Find all entries in the group database, that the user is a member of.
- for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) { // Iterate over all of them.
- qWarning(*it);
- QListViewItemIterator lvit( edituserDialog->groupsListView ); // Compare to all groups.
- for ( ; lvit.current(); ++lvit ) {
- if(lvit.current()->text(0)==(*it).left((*it).find(":"))) {
- temp=(QCheckListItem*)lvit.current();
- temp->setOn(true); // If we find a line with that groupname, select it.;
- }
- }
- }
-
- if(!(edituserDialog->exec())) return false; // SHOW THE DIALOG!
-
- accounts->findUser(username); // Fill user variables in 'acccounts' object.
- accounts->pw_name=edituserDialog->loginLineEdit->text();
- // Has the password been changed ? Make a new "crypt":ed password.
- if(edituserDialog->passwordLineEdit->text()!="........") accounts->pw_passwd=crypt(edituserDialog->passwordLineEdit->text(), accounts->crypt_make_salt());
-
- // Set all variables in accounts object, that will be used when calling 'updateUser()'
- accounts->pw_uid=edituserDialog->uidLineEdit->text().toInt();
- if(accounts->findGroup(edituserDialog->groupComboBox->currentText())) { // Fill all group variables in 'accounts' object.
- accounts->pw_gid=accounts->gr_gid; // Only do this if the group is a valid group (ie. "<Undefined group>"), otherwise keep the old group.
- }
- accounts->pw_gecos=edituserDialog->gecosLineEdit->text();
- accounts->pw_shell=edituserDialog->shellComboBox->currentText();
- // Update userinfo, using the information stored in the user variables stored in the accounts object.
- accounts->updateUser(username);
-
- // Remove user from all groups he/she is a member of. (could be done in a better way I guess, this was simple though.)
- for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it) {
- accounts->delGroupMember((*it).left((*it).find(":")),username);
- }
-
- // Add User to additional groups that he/she is a member of.
- QListViewItemIterator it( edituserDialog->groupsListView );
- for ( ; it.current(); ++it ) {
- temp=(QCheckListItem*)it.current();
- if ( temp->isOn() )
- accounts->addGroupMember(it.current()->text(0),edituserDialog->loginLineEdit->text());
- }
-
- // Copy image to pics/users/
- if(!(edituserDialog->userImage.isNull())) {
- QDir d;
- if(!(d.exists("/opt/QtPalmtop/pics/users"))) {
- d.mkdir("/opt/QtPalmtop/pics/users");
- }
- QString filename="/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png";
-// edituserDialog->userImage=edituserDialog->userImage.smoothScale(48,48);
- edituserDialog->userImage.save(filename,"PNG");
- }
- return true;
+bool UserDialog::editUser(const char *username)
+{
+ int invalid_group=0;
+ // viewmode is a workaround for a bug in qte-2.3.4 that gives bus error on manipulating edituserDialog's widgets here.
+ UserDialog *edituserDialog=new UserDialog(VIEWMODE_EDIT); // Create Dialog
+ edituserDialog->setCaption(tr("Edit User"));
+ accounts->findUser(username); // Locate user in database and fill variables in 'accounts' object.
+ if(!(accounts->findGroup(accounts->pw_gid)))
+ { // Locate the user's primary group, and fill group variables in 'accounts' object.
+ invalid_group=1;
+ }
+ // Fill widgets with userinfo.
+ edituserDialog->loginLineEdit->setText(accounts->pw_name);
+ edituserDialog->uidLineEdit->setText(QString::number(accounts->pw_uid));
+ edituserDialog->gecosLineEdit->setText(accounts->pw_gecos);
+ // Set password to '........', we will later check if this still is the contents, if not, the password has been changed.
+ edituserDialog->passwordLineEdit->setText("........");
+ // If this user is not using /bin/sh,/bin/ash or /bin/false as shell, add that entry to the shell-combobox.
+ if(accounts->pw_shell!="/bin/sh" && accounts->pw_shell!="/bin/ash" && accounts->pw_shell!="/bin/false")
+ {
+ edituserDialog->shellComboBox->insertItem(accounts->pw_shell,0);
+ edituserDialog->shellComboBox->setCurrentItem(0);
+ }
+ // Select the primary group for this user.
+ for(int i=0;i<edituserDialog->groupComboBox->count();++i)
+ {
+ if(accounts->gr_name==edituserDialog->groupComboBox->text(i))
+ {
+ edituserDialog->groupComboBox->setCurrentItem(i);
+ break;
+ }
+ }
+ if(invalid_group)
+ {
+ edituserDialog->groupComboBox->insertItem("<Undefined group>",0);
+ edituserDialog->groupComboBox->setCurrentItem(0);
+ }
+
+ // Select the groups in the listview, to which the user belongs.
+ QCheckListItem *temp;
+ // 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.
+ QRegExp userRegExp(QString("[:,]%1$").arg(username)); // The end of line variant.
+ QStringList tempList=accounts->groupStringList.grep(userRegExp); // Find all entries in the group database, that the user is a member of.
+ for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it)
+ { // Iterate over all of them.
+ qWarning(*it);
+ QListViewItemIterator lvit( edituserDialog->groupsListView ); // Compare to all groups.
+ for ( ; lvit.current(); ++lvit )
+ {
+ if(lvit.current()->text(0)==(*it).left((*it).find(":")))
+ {
+ temp=(QCheckListItem*)lvit.current();
+ temp->setOn(true); // If we find a line with that groupname, select it.;
+ }
+ }
+ }
+ userRegExp=QRegExp(QString("[:,]%1,").arg(username)); // And the other one. (not end of line.)
+ tempList=accounts->groupStringList.grep(userRegExp); // Find all entries in the group database, that the user is a member of.
+ for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it)
+ { // Iterate over all of them.
+ qWarning(*it);
+ QListViewItemIterator lvit( edituserDialog->groupsListView ); // Compare to all groups.
+ for ( ; lvit.current(); ++lvit )
+ {
+ if(lvit.current()->text(0)==(*it).left((*it).find(":")))
+ {
+ temp=(QCheckListItem*)lvit.current();
+ temp->setOn(true); // If we find a line with that groupname, select it.;
+ }
+ }
+ }
+
+ if(!(edituserDialog->exec())) return false; // SHOW THE DIALOG!
+
+ accounts->findUser(username); // Fill user variables in 'acccounts' object.
+ accounts->pw_name=edituserDialog->loginLineEdit->text();
+ // Has the password been changed ? Make a new "crypt":ed password.
+ if(edituserDialog->passwordLineEdit->text()!="........") accounts->pw_passwd=crypt(edituserDialog->passwordLineEdit->text(), accounts->crypt_make_salt());
+
+ // Set all variables in accounts object, that will be used when calling 'updateUser()'
+ accounts->pw_uid=edituserDialog->uidLineEdit->text().toInt();
+ if(accounts->findGroup(edituserDialog->groupComboBox->currentText()))
+ { // Fill all group variables in 'accounts' object.
+ accounts->pw_gid=accounts->gr_gid; // Only do this if the group is a valid group (ie. "<Undefined group>"), otherwise keep the old group.
+ }
+ accounts->pw_gecos=edituserDialog->gecosLineEdit->text();
+ accounts->pw_shell=edituserDialog->shellComboBox->currentText();
+ // Update userinfo, using the information stored in the user variables stored in the accounts object.
+ accounts->updateUser(username);
+
+ // Remove user from all groups he/she is a member of. (could be done in a better way I guess, this was simple though.)
+ for(QStringList::Iterator it=tempList.begin(); it!=tempList.end(); ++it)
+ {
+ accounts->delGroupMember((*it).left((*it).find(":")),username);
+ }
+
+ // Add User to additional groups that he/she is a member of.
+ QListViewItemIterator it( edituserDialog->groupsListView );
+ for ( ; it.current(); ++it )
+ {
+ temp=(QCheckListItem*)it.current();
+ if ( temp->isOn() )
+ accounts->addGroupMember(it.current()->text(0),edituserDialog->loginLineEdit->text());
+ }
+
+ // Copy image to pics/users/
+ if(!(edituserDialog->userImage.isNull()))
+ {
+ QDir d;
+ if(!(d.exists("/opt/QtPalmtop/pics/users")))
+ {
+ d.mkdir("/opt/QtPalmtop/pics/users");
+ }
+ QString filename="/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png";
+ // edituserDialog->userImage=edituserDialog->userImage.smoothScale(48,48);
+ edituserDialog->userImage.save(filename,"PNG");
+ }
+ return true;
}
/**
* "OK" has been clicked. Verify some information before closing the dialog.
*
*/
-void UserDialog::accept() {
- // Add checking... valid username? username taken?
- if(loginLineEdit->text().isEmpty()) {
- QMessageBox::information(0,"Empty Login","Please enter a login.");
- return;
- }
- QDialog::accept();
+void UserDialog::accept()
+{
+ // Add checking... valid username? username taken?
+ if(loginLineEdit->text().isEmpty())
+ {
+ QMessageBox::information(0,"Empty Login","Please enter a login.");
+ return;
+ }
+ QDialog::accept();
}
/**
* This slot is called when the usericon is clicked, this loads (should) the iconselector.
*
*/
-void UserDialog::clickedPicture() {
- QString filename=OFileDialog::getOpenFileName(OFileSelector::EXTENDED, QString::null);
- if(!(filename.isEmpty())) {
- userImage.reset();
- if(!(userImage.load(filename))) {
- QMessageBox::information(0,"Sorry!","That icon could not be loaded.\nLoading failed on: "+filename);
- } else {
-// userImage=userImage.smoothScale(48,48);
- QPixmap *picture;
- picture=(QPixmap *)picturePushButton->pixmap();
- picture->convertFromImage(userImage,0);
- picturePushButton->update();
- }
- }
+void UserDialog::clickedPicture()
+{
+ QString filename=OFileDialog::getOpenFileName(OFileSelector::EXTENDED, QString::null);
+ if(!(filename.isEmpty()))
+ {
+ userImage.reset();
+ if(!(userImage.load(filename)))
+ {
+ QMessageBox::information(0,"Sorry!","That icon could not be loaded.\nLoading failed on: "+filename);
+ }
+ else
+ {
+ // userImage=userImage.smoothScale(48,48);
+ QPixmap *picture;
+ picture=(QPixmap *)picturePushButton->pixmap();
+ picture->convertFromImage(userImage,0);
+ picturePushButton->update();
+ }
+ }
}