summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/usermanager/passwd.cpp23
-rw-r--r--noncore/settings/usermanager/userdialog.cpp35
-rw-r--r--noncore/settings/usermanager/userdialog.h9
3 files changed, 51 insertions, 16 deletions
diff --git a/noncore/settings/usermanager/passwd.cpp b/noncore/settings/usermanager/passwd.cpp
index 5063661..0a2bfba 100644
--- a/noncore/settings/usermanager/passwd.cpp
+++ b/noncore/settings/usermanager/passwd.cpp
@@ -50,8 +50,9 @@ char *Passwd::crypt_make_salt() {
result[2] = '\0';
return result;
}
+// opens the files /etc/passwd & /etc/group and loads the contents into passwdStringList & groupStringList
bool Passwd::open() {
int returnvalue=false;
QFile passwd_file("/etc/passwd");
@@ -75,8 +76,9 @@ bool Passwd::open() {
}
return returnvalue;
}
+// Writes back the contents of passwdStringList to /etc/passwd & groupStringList to /etc/group
bool Passwd::close() {
int returnvalue=false;
QFile passwd_file("/etc/passwd");
QFile group_file("/etc/group");
@@ -97,8 +99,9 @@ bool Passwd::close() {
}
return returnvalue;
}
+// Splits a "passwd" line into the components and stores them in the pw_* variables.
void Passwd::splitPasswdEntry(QString &userString) {
userdataStringList=QStringList::split(":",userString,true);
QStringList::Iterator it=userdataStringList.begin();
pw_name=(*it++);
@@ -109,8 +112,9 @@ void Passwd::splitPasswdEntry(QString &userString) {
pw_dir=(*it++);
pw_shell=(*it++);
}
+// Splits a "group" line into the components and stores them in the gr_* variables.
void Passwd::splitGroupEntry(QString &groupString) {
groupdataStringList=QStringList::split(":",groupString,true);
QStringList::Iterator it=groupdataStringList.begin();
gr_name=(*it++);
@@ -118,8 +122,9 @@ void Passwd::splitGroupEntry(QString &groupString) {
gr_gid=(*it++).toInt();
gr_mem=QStringList::split(" ",(*it++));
}
+// Find a user in the passwdStringList. Return true if found and also fill the pw_* variables.
bool Passwd::searchUser(QRegExp &userRegExp) {
QStringList tempStringList(passwdStringList.grep(userRegExp));
if((tempStringList.isEmpty())) {
return false;
@@ -129,18 +134,21 @@ bool Passwd::searchUser(QRegExp &userRegExp) {
}
return true;
}
+// Find a user by login.
bool Passwd::findUser(const char *username) {
QRegExp userRegExp(QString("^%1\\:").arg(username));
return searchUser(userRegExp);
}
+// Find a user by uid.
bool Passwd::findUser(int uid) {
QRegExp userRegExp(QString(":%1\\:").arg(uid));
return searchUser(userRegExp);
}
+// Add a user to the passwdStringList, create home directory, and optionally create a group for the user.
bool Passwd::addUser(QString pw_name, QString pw_passwd, int pw_uid, int pw_gid, QString pw_gecos,QString pw_dir, QString pw_shell, bool createGroup) {
QString tempString;
if((createGroup) && (!(findGroup(pw_gid)))) addGroup(pw_name,pw_gid);
pw_passwd = crypt(pw_passwd, crypt_make_salt());
@@ -155,8 +163,9 @@ bool Passwd::addUser(QString pw_name, QString pw_passwd, int pw_uid, int pw_gid,
}
return 1;
}
+// Update info for a user in passwdStringList, take info from the pw_* fields.
bool Passwd::updateUser(QString login) {
QRegExp userRegExp(QString("^%1\\:").arg(login));
for(QStringList::Iterator it=passwdStringList.begin(); it!=passwdStringList.end(); ++it) {
if(userRegExp.find((*it),0)!=-1) {
@@ -166,8 +175,9 @@ bool Passwd::updateUser(QString login) {
}
return false;
}
+// Delete a user from passwdStringList.
bool Passwd::deleteUser(QRegExp &userRegExp, bool delGroup) {
for(QStringList::Iterator it=passwdStringList.begin(); it!=passwdStringList.end(); ++it) {
if(userRegExp.find((*it),0)!=-1) {
splitPasswdEntry(*it);
@@ -178,18 +188,21 @@ bool Passwd::deleteUser(QRegExp &userRegExp, bool delGroup) {
}
return false;
}
+// Delete a user by login, and optionally also delete group.
bool Passwd::delUser(const char *username, bool delGroup) {
QRegExp userRegExp(QString("^%1\\:").arg(username));
return deleteUser(userRegExp,delGroup);
}
+// Delete a user by uid, and optionally also delete group.
bool Passwd::delUser(int uid, bool delGroup) {
QRegExp userRegExp(QString(":%1\\:").arg(uid));
return deleteUser(userRegExp,delGroup);
}
+// Locate a group in the groupStringList, fill out the gr_* variables and return "true" if found.
bool Passwd::searchGroup(QRegExp &groupRegExp) {
QStringList tempStringList(groupStringList.grep(groupRegExp));
if((tempStringList.isEmpty())) {
return false;
@@ -199,25 +212,29 @@ bool Passwd::searchGroup(QRegExp &groupRegExp) {
}
return true;
}
+// Find a group by groupname.
bool Passwd::findGroup(const char *groupname) {
QRegExp groupRegExp(QString("^%1\\:").arg(groupname));
return searchGroup(groupRegExp);
}
+// Find a group by gid.
bool Passwd::findGroup(int gid) {
QRegExp groupRegExp(QString(":%1\\:").arg(gid));
return searchGroup(groupRegExp);
}
+// Add a group to groupStringList
bool Passwd::addGroup(QString gr_name, int gr_gid) {
QString tempString;
tempString=gr_name+":*:"+QString::number(gr_gid)+":";
groupStringList.append(tempString);
return 1;
}
+// Update fields for a group in groupStringList, take info from the gr_* variables.
bool Passwd::updateGroup(int gid) {
QRegExp groupRegExp(QString(":%1\\:").arg(QString::number(gid)));
for(QStringList::Iterator it=groupStringList.begin(); it!=groupStringList.end(); ++it) {
if(groupRegExp.find((*it),0)!=-1) {
@@ -231,8 +248,9 @@ bool Passwd::updateGroup(int gid) {
}
return false;
}
+// Delete a group from groupStringList.
bool Passwd::deleteGroup(QRegExp &groupRegExp) {
for(QStringList::Iterator it=groupStringList.begin(); it!=groupStringList.end(); ++it) {
if(groupRegExp.find((*it),0)!=-1) {
groupStringList.remove(it);
@@ -241,25 +259,29 @@ bool Passwd::deleteGroup(QRegExp &groupRegExp) {
}
return false;
}
+// Delete a group by groupname.
bool Passwd::delGroup(const char *groupname) {
QRegExp groupRegExp(QString("^%1\\:").arg(groupname));
return deleteGroup(groupRegExp);
}
+// Delete a group by gid.
bool Passwd::delGroup(int gid) {
QRegExp groupRegExp(QString(":%1\\:").arg(gid));
return deleteGroup(groupRegExp);
}
+// Add a user as a member to a group in groupStringList.
bool Passwd::addGroupMember(QString groupname, QString member) {
if(!(findGroup(groupname))) return false;
gr_mem << member;
if(!(updateGroup(gr_gid))) return false;
return true;
}
+// Delete a user as a groupmember from a group in groupStringList.
bool Passwd::delGroupMember(QString groupname, QString member) {
if(!(findGroup(groupname))) return false;
for(QStringList::Iterator it=gr_mem.begin(); it!=gr_mem.end(); ++it) {
if(*it==member) {
@@ -270,5 +292,6 @@ bool Passwd::delGroupMember(QString groupname, QString member) {
if(!(updateGroup(gr_gid))) return false;
return true;
}
+// Global Object
Passwd *accounts;
diff --git a/noncore/settings/usermanager/userdialog.cpp b/noncore/settings/usermanager/userdialog.cpp
index 36bcf86..c82cc9d 100644
--- a/noncore/settings/usermanager/userdialog.cpp
+++ b/noncore/settings/usermanager/userdialog.cpp
@@ -31,9 +31,10 @@ using namespace Opie;
/**
* UserDialog constructor. Setup the dialog, fill the groupComboBox & groupsListView with all groups.
*
*/
-UserDialog::UserDialog(QWidget* parent, const char* name, bool modal, WFlags fl) : QDialog(parent, name, modal, fl) {
+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();
@@ -108,15 +109,15 @@ void UserDialog::setupTab1() {
QLabel *groupLabel=new QLabel(tabpage,"group");
groupLabel->setText("Primary group: ");
groupComboBox=new QComboBox(tabpage,"PrimaryGroup");
- // Copy /etc/skel
- QLabel *skelLabel=new QLabel(tabpage,"skel");
- skelLabel->setText("Copy /etc/skel: ");
- skelCheckBox=new QCheckBox(tabpage);
- skelCheckBox->setChecked(true);
-// skelLabel->setDisabled(true);
-// skelCheckBox->setDisabled(true);
+ 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);
@@ -135,10 +136,12 @@ void UserDialog::setupTab1() {
vlayout1->addSpacing(5);
vlayout1->addWidget(shellLabel);
vlayout1->addSpacing(5);
vlayout1->addWidget(groupLabel);
- vlayout1->addSpacing(5);
- vlayout1->addWidget(skelLabel);
+ if(vm==VIEWMODE_NEW) {
+ vlayout1->addSpacing(5);
+ vlayout1->addWidget(skelLabel);
+ }
// Second column, data
vlayout2->addWidget(loginLineEdit);
vlayout2->addSpacing(5);
vlayout2->addWidget(uidLineEdit);
@@ -149,10 +152,12 @@ void UserDialog::setupTab1() {
vlayout2->addSpacing(5);
vlayout2->addWidget(shellComboBox);
vlayout2->addSpacing(5);
vlayout2->addWidget(groupComboBox);
- vlayout2->addSpacing(5);
- vlayout2->addWidget(skelCheckBox);
+ if(vm==VIEWMODE_NEW) {
+ vlayout2->addSpacing(5);
+ vlayout2->addWidget(skelCheckBox);
+ }
hlayout->addLayout(vlayout1);
hlayout->addLayout(vlayout2);
myTabWidget->addTab(tabpage,"User Info");
@@ -195,9 +200,10 @@ bool UserDialog::addUser(int uid, int gid) {
QCheckListItem *temp;
QFile ozTest;
int oz=false;
if(ODevice::inst()->system()==System_OpenZaurus) oz=true;
- UserDialog *adduserDialog=new UserDialog();
+ // 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
@@ -297,9 +303,10 @@ bool UserDialog::delUser(const char *username) {
*
*/
bool UserDialog::editUser(const char *username) {
int invalid_group=0;
- UserDialog *edituserDialog=new UserDialog(); // Create Dialog
+ // 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;
diff --git a/noncore/settings/usermanager/userdialog.h b/noncore/settings/usermanager/userdialog.h
index 133b35d..b7b925d 100644
--- a/noncore/settings/usermanager/userdialog.h
+++ b/noncore/settings/usermanager/userdialog.h
@@ -41,18 +41,23 @@ private:
QString pictureLocation;
QImage userImage;
int groupID;
int userID;
-
+ int vm;
+ enum VIEWMODE {
+ VIEWMODE_NEW,
+ VIEWMODE_EDIT
+ };
+
void setupTab1(void);
void setupTab2(void);
void accept(void);
private slots:
void clickedPicture(void);
public:
- UserDialog( QWidget* parent = 0, const char* name = 0, bool modal=true, WFlags fl = 0 );
+ UserDialog( int viewmode=VIEWMODE_NEW, QWidget* parent = 0, const char* name = 0, bool modal=true, WFlags fl = 0 );
~UserDialog();
static bool addUser(int uid, int gid);
static bool editUser(const char *username);
static bool delUser(const char *username);