summaryrefslogtreecommitdiff
authorumopapisdn <umopapisdn>2003-03-28 13:12:09 (UTC)
committer umopapisdn <umopapisdn>2003-03-28 13:12:09 (UTC)
commitb271d575fa05cf570a1a829136517761bd47e69b (patch) (unidiff)
treee82c8e348b3b926fb365c42454d12a56dda0adc6
parent8e8803488d2c11b12449e785802da4a5a9adad0f (diff)
downloadopie-b271d575fa05cf570a1a829136517761bd47e69b.zip
opie-b271d575fa05cf570a1a829136517761bd47e69b.tar.gz
opie-b271d575fa05cf570a1a829136517761bd47e69b.tar.bz2
Bugfix: (bug #0000765) Lines in /etc/passwd & /etc/group starting with a "#" are comments and should not be editable.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/usermanager/opie-usermanager.control2
-rw-r--r--noncore/settings/usermanager/passwd.cpp11
-rw-r--r--noncore/settings/usermanager/userdialog.cpp6
-rw-r--r--noncore/settings/usermanager/usermanager.cpp26
4 files changed, 28 insertions, 17 deletions
diff --git a/noncore/settings/usermanager/opie-usermanager.control b/noncore/settings/usermanager/opie-usermanager.control
index f971fdc..e1c7762 100644
--- a/noncore/settings/usermanager/opie-usermanager.control
+++ b/noncore/settings/usermanager/opie-usermanager.control
@@ -1,9 +1,9 @@
1Files: bin/usermanager apps/Settings/usermanager.desktop pics/usermanager/* 1Files: bin/usermanager apps/Settings/usermanager.desktop pics/usermanager/*
2Priority: optional 2Priority: optional
3Section: opie/settings 3Section: opie/settings
4Version: $QPE_VERSION-$SUB_VERSION 4Version: $QPE_VERSION-$SUB_VERSION
5Depends: opie-base 5Depends: opie-base
6Architecture: arm 6Architecture: arm
7Maintainer: Ted Parnefors <zaurus@bredband.net> 7Maintainer: Ted Parnefors <zaurus@bredband.net>
8License: GPL 8License: GPL
9Description: User/Group manager for OPIE. 9Description: User/Group manager for Opie.
diff --git a/noncore/settings/usermanager/passwd.cpp b/noncore/settings/usermanager/passwd.cpp
index 1e98778..f8e6d17 100644
--- a/noncore/settings/usermanager/passwd.cpp
+++ b/noncore/settings/usermanager/passwd.cpp
@@ -162,100 +162,105 @@ bool Passwd::addUser(QString pw_name, QString pw_passwd, int pw_uid, int pw_gid,
162 chmod(pw_dir,S_IRUSR|S_IWUSR|S_IXUSR); 162 chmod(pw_dir,S_IRUSR|S_IWUSR|S_IXUSR);
163 } 163 }
164 return 1; 164 return 1;
165} 165}
166 166
167// Update info for a user in passwdStringList, take info from the pw_* fields. 167// Update info for a user in passwdStringList, take info from the pw_* fields.
168bool Passwd::updateUser(QString login) { 168bool Passwd::updateUser(QString login) {
169 QRegExp userRegExp(QString("^%1\\:").arg(login)); 169 QRegExp userRegExp(QString("^%1\\:").arg(login));
170 for(QStringList::Iterator it=passwdStringList.begin(); it!=passwdStringList.end(); ++it) { 170 for(QStringList::Iterator it=passwdStringList.begin(); it!=passwdStringList.end(); ++it) {
171 if(userRegExp.find((*it),0)!=-1) { 171 if(userRegExp.find((*it),0)!=-1) {
172 *it=QString(pw_name+":"+pw_passwd+":"+QString::number(pw_uid)+":"+QString::number(pw_gid)+":"+pw_gecos+":"+pw_dir+":"+pw_shell); 172 *it=QString(pw_name+":"+pw_passwd+":"+QString::number(pw_uid)+":"+QString::number(pw_gid)+":"+pw_gecos+":"+pw_dir+":"+pw_shell);
173 return true; 173 return true;
174 } 174 }
175 } 175 }
176 return false; 176 return false;
177} 177}
178 178
179// Delete a user from passwdStringList. 179// Delete a user from passwdStringList.
180bool Passwd::deleteUser(QRegExp &userRegExp, bool delGroup) { 180bool Passwd::deleteUser(QRegExp &userRegExp, bool delGroup) {
181 for(QStringList::Iterator it=passwdStringList.begin(); it!=passwdStringList.end(); ++it) { 181 for(QStringList::Iterator it=passwdStringList.begin(); it!=passwdStringList.end(); ++it) {
182 if(userRegExp.find((*it),0)!=-1) { 182 if(userRegExp.find((*it),0)!=-1) {
183 splitPasswdEntry(*it); 183 splitPasswdEntry(*it);
184 if(delGroup) this->delGroup(pw_gid); 184 if(delGroup) this->delGroup(pw_gid);
185 passwdStringList.remove(it); 185 passwdStringList.remove(it);
186 return true; 186 return true;
187 } 187 }
188 } 188 }
189 return false; 189 return false;
190} 190}
191 191
192// Delete a user by login, and optionally also delete group. 192// Delete a user by login, and optionally also delete group.
193bool Passwd::delUser(const char *username, bool delGroup) { 193bool Passwd::delUser(const char *username, bool delGroup) {
194 QRegExp userRegExp(QString("^%1\\:").arg(username)); 194 QRegExp userRegExp(QString("^%1\\:").arg(username));
195 return deleteUser(userRegExp,delGroup); 195 return deleteUser(userRegExp,delGroup);
196} 196}
197 197
198// Delete a user by uid, and optionally also delete group. 198// Delete a user by uid, and optionally also delete group.
199bool Passwd::delUser(int uid, bool delGroup) { 199bool Passwd::delUser(int uid, bool delGroup) {
200 QRegExp userRegExp(QString(":%1\\:").arg(uid)); 200 QRegExp userRegExp(QString(":%1\\:").arg(uid));
201 return deleteUser(userRegExp,delGroup); 201 return deleteUser(userRegExp,delGroup);
202} 202}
203 203
204// Locate a group in the groupStringList, fill out the gr_* variables and return "true" if found. 204// Locate a group in the groupStringList, fill out the gr_* variables and return "true" if found.
205bool Passwd::searchGroup(QRegExp &groupRegExp) { 205bool Passwd::searchGroup(QRegExp &groupRegExp) {
206 QStringList tempStringList(groupStringList.grep(groupRegExp)); 206 QStringList tempStringList(groupStringList.grep(groupRegExp));
207 if((tempStringList.isEmpty())) { 207 if((tempStringList.isEmpty())) {
208 return false; 208 return false;
209 } else { 209 } else {
210 groupString=(*(tempStringList.begin())); 210 for(QStringList::Iterator it=tempStringList.begin(); it!=tempStringList.end(); it++) {
211 splitGroupEntry(groupString); 211 groupString=*it;
212 if(!groupString.find(QRegExp("^#"),0)) {// Skip commented lines.
213 splitGroupEntry(groupString);
214 return true;
215 }
216 }
212 } 217 }
213 return true; 218 return false;
214} 219}
215 220
216// Find a group by groupname. 221// Find a group by groupname.
217bool Passwd::findGroup(const char *groupname) { 222bool Passwd::findGroup(const char *groupname) {
218 QRegExp groupRegExp(QString("^%1\\:").arg(groupname)); 223 QRegExp groupRegExp(QString("^%1\\:").arg(groupname));
219 return searchGroup(groupRegExp); 224 return searchGroup(groupRegExp);
220} 225}
221 226
222// Find a group by gid. 227// Find a group by gid.
223bool Passwd::findGroup(int gid) { 228bool Passwd::findGroup(int gid) {
224 QRegExp groupRegExp(QString(":%1\\:").arg(gid)); 229 QRegExp groupRegExp(QString(":%1\\:").arg(gid));
225 return searchGroup(groupRegExp); 230 return searchGroup(groupRegExp);
226} 231}
227 232
228// Add a group to groupStringList 233// Add a group to groupStringList
229bool Passwd::addGroup(QString gr_name, int gr_gid) { 234bool Passwd::addGroup(QString gr_name, int gr_gid) {
230 QString tempString; 235 QString tempString;
231 tempString=gr_name+":*:"+QString::number(gr_gid)+":"; 236 tempString=gr_name+":*:"+QString::number(gr_gid)+":";
232 groupStringList.append(tempString); 237 groupStringList.append(tempString);
233 return 1; 238 return 1;
234} 239}
235 240
236// Update fields for a group in groupStringList, take info from the gr_* variables. 241// Update fields for a group in groupStringList, take info from the gr_* variables.
237bool Passwd::updateGroup(int gid) { 242bool Passwd::updateGroup(int gid) {
238 QRegExp groupRegExp(QString(":%1\\:").arg(QString::number(gid))); 243 QRegExp groupRegExp(QString(":%1\\:").arg(QString::number(gid)));
239 for(QStringList::Iterator it=groupStringList.begin(); it!=groupStringList.end(); ++it) { 244 for(QStringList::Iterator it=groupStringList.begin(); it!=groupStringList.end(); ++it) {
240 if(groupRegExp.find((*it),0)!=-1) { 245 if(groupRegExp.find((*it),0)!=-1) {
241 *it=QString(gr_name+":*:"+QString::number(gr_gid)+":"); 246 *it=QString(gr_name+":*:"+QString::number(gr_gid)+":");
242 for(QStringList::Iterator member=gr_mem.begin(); member!=gr_mem.end();) { 247 for(QStringList::Iterator member=gr_mem.begin(); member!=gr_mem.end();) {
243 *it+=*member; 248 *it+=*member;
244 ++member; 249 ++member;
245 if(member!=gr_mem.end()) *it+=","; 250 if(member!=gr_mem.end()) *it+=",";
246 } 251 }
247 return true; 252 return true;
248 } 253 }
249 } 254 }
250 return false; 255 return false;
251} 256}
252 257
253// Delete a group from groupStringList. 258// Delete a group from groupStringList.
254bool Passwd::deleteGroup(QRegExp &groupRegExp) { 259bool Passwd::deleteGroup(QRegExp &groupRegExp) {
255 for(QStringList::Iterator it=groupStringList.begin(); it!=groupStringList.end(); ++it) { 260 for(QStringList::Iterator it=groupStringList.begin(); it!=groupStringList.end(); ++it) {
256 if(groupRegExp.find((*it),0)!=-1) { 261 if(groupRegExp.find((*it),0)!=-1) {
257 groupStringList.remove(it); 262 groupStringList.remove(it);
258 return true; 263 return true;
259 } 264 }
260 } 265 }
261 return false; 266 return false;
diff --git a/noncore/settings/usermanager/userdialog.cpp b/noncore/settings/usermanager/userdialog.cpp
index 0d2122b..c06f639 100644
--- a/noncore/settings/usermanager/userdialog.cpp
+++ b/noncore/settings/usermanager/userdialog.cpp
@@ -1,96 +1,98 @@
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 11
12#include <qlayout.h> 12#include <qlayout.h>
13#include <qlabel.h> 13#include <qlabel.h>
14#include <qmessagebox.h> 14#include <qmessagebox.h>
15#include <qfile.h> 15#include <qfile.h>
16 16
17#include <stdlib.h> 17#include <stdlib.h>
18 18
19#include <stdio.h> 19#include <stdio.h>
20#include <sys/types.h> 20#include <sys/types.h>
21#include <sys/wait.h> 21#include <sys/wait.h>
22#include <unistd.h> 22#include <unistd.h>
23#include <signal.h> 23#include <signal.h>
24 24
25#include "passwd.h" 25#include "passwd.h"
26 26
27#include <opie/odevice.h> 27#include <opie/odevice.h>
28using namespace Opie; 28using namespace Opie;
29 29
30 30
31/** 31/**
32 * UserDialog constructor. Setup the dialog, fill the groupComboBox & groupsListView with all groups. 32 * UserDialog constructor. Setup the dialog, fill the groupComboBox & groupsListView with all groups.
33 * 33 *
34 */ 34 */
35UserDialog::UserDialog(int viewmode, QWidget* parent, const char* name, bool modal, WFlags fl) : QDialog(parent, name, modal, fl) { 35UserDialog::UserDialog(int viewmode, QWidget* parent, const char* name, bool modal, WFlags fl) : QDialog(parent, name, modal, fl) {
36 vm=viewmode; 36 vm=viewmode;
37 QVBoxLayout *layout = new QVBoxLayout(this); 37 QVBoxLayout *layout = new QVBoxLayout(this);
38 myTabWidget=new QTabWidget(this,"User Tab Widget"); 38 myTabWidget=new QTabWidget(this,"User Tab Widget");
39 layout->addWidget(myTabWidget); 39 layout->addWidget(myTabWidget);
40 setupTab1(); 40 setupTab1();
41 setupTab2(); 41 setupTab2();
42 42
43 accounts->groupStringList.sort(); 43 accounts->groupStringList.sort();
44 // And also fill the listview & the combobox with all available groups. 44 // And also fill the listview & the combobox with all available groups.
45 for( QStringList::Iterator it = accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) { 45 for( QStringList::Iterator it = accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) {
46 accounts->splitGroupEntry(*it); 46 accounts->splitGroupEntry(*it);
47 new QCheckListItem(groupsListView,accounts->gr_name,QCheckListItem::CheckBox); 47 if(accounts->gr_name.find(QRegExp("^#"),0)) {// Skip commented lines.
48 groupComboBox->insertItem(accounts->gr_name); 48 new QCheckListItem(groupsListView,accounts->gr_name,QCheckListItem::CheckBox);
49 groupComboBox->insertItem(accounts->gr_name);
50 }
49 } 51 }
50 showMaximized(); 52 showMaximized();
51} 53}
52 54
53/** 55/**
54 * Empty destructor. 56 * Empty destructor.
55 * 57 *
56 */ 58 */
57UserDialog::~UserDialog() { 59UserDialog::~UserDialog() {
58} 60}
59 61
60/** 62/**
61 * Creates the first tab, all userinfo is here. 63 * Creates the first tab, all userinfo is here.
62 * 64 *
63 */ 65 */
64void UserDialog::setupTab1() { 66void UserDialog::setupTab1() {
65 QPixmap mypixmap; 67 QPixmap mypixmap;
66 QWidget *tabpage = new QWidget(myTabWidget,"page1"); 68 QWidget *tabpage = new QWidget(myTabWidget,"page1");
67 QVBoxLayout *layout = new QVBoxLayout(tabpage); 69 QVBoxLayout *layout = new QVBoxLayout(tabpage);
68 layout->setMargin(5); 70 layout->setMargin(5);
69 71
70 // Picture 72 // Picture
71 picturePushButton = new QPushButton(tabpage,"Label"); 73 picturePushButton = new QPushButton(tabpage,"Label");
72 picturePushButton->setMinimumSize(48,48); 74 picturePushButton->setMinimumSize(48,48);
73 picturePushButton->setMaximumSize(48,48); 75 picturePushButton->setMaximumSize(48,48);
74 picturePushButton->setPixmap(Resource::loadPixmap("usermanager/usericon"));// Load default usericon. 76 picturePushButton->setPixmap(Resource::loadPixmap("usermanager/usericon"));// Load default usericon.
75 connect(picturePushButton,SIGNAL(clicked()),this,SLOT(clickedPicture()));// Clicking the picture should invoke pictureselector. 77 connect(picturePushButton,SIGNAL(clicked()),this,SLOT(clickedPicture()));// Clicking the picture should invoke pictureselector.
76 78
77 // Login 79 // Login
78 QLabel *loginLabel=new QLabel(tabpage,"Login: "); 80 QLabel *loginLabel=new QLabel(tabpage,"Login: ");
79 loginLabel->setText("Login: "); 81 loginLabel->setText("Login: ");
80 loginLineEdit=new QLineEdit(tabpage,"Login: "); 82 loginLineEdit=new QLineEdit(tabpage,"Login: ");
81 83
82 // UID 84 // UID
83 QLabel *uidLabel=new QLabel(tabpage,"uid: "); 85 QLabel *uidLabel=new QLabel(tabpage,"uid: ");
84 uidLabel->setText("UserID: "); 86 uidLabel->setText("UserID: ");
85 uidLineEdit=new QLineEdit(tabpage,"uid: "); 87 uidLineEdit=new QLineEdit(tabpage,"uid: ");
86 uidLineEdit->setEnabled(false); 88 uidLineEdit->setEnabled(false);
87 89
88 // Username (gecos) 90 // Username (gecos)
89 QLabel *gecosLabel=new QLabel(tabpage,"gecos"); 91 QLabel *gecosLabel=new QLabel(tabpage,"gecos");
90 gecosLabel->setText("Username: "); 92 gecosLabel->setText("Username: ");
91 gecosLineEdit=new QLineEdit(tabpage,"gecos"); 93 gecosLineEdit=new QLineEdit(tabpage,"gecos");
92 94
93 // Password 95 // Password
94 QLabel *passwordLabel=new QLabel(tabpage,"password"); 96 QLabel *passwordLabel=new QLabel(tabpage,"password");
95 passwordLabel->setText("Password: "); 97 passwordLabel->setText("Password: ");
96 passwordLineEdit=new QLineEdit(tabpage,"password"); 98 passwordLineEdit=new QLineEdit(tabpage,"password");
diff --git a/noncore/settings/usermanager/usermanager.cpp b/noncore/settings/usermanager/usermanager.cpp
index 57efa71..1946013 100644
--- a/noncore/settings/usermanager/usermanager.cpp
+++ b/noncore/settings/usermanager/usermanager.cpp
@@ -81,174 +81,178 @@ void UserConfig::setupTabAccounts() {
81 connect(usersIconView,SIGNAL(returnPressed(QListViewItem *)),this,SLOT(showUserMenu(QListViewItem *))); 81 connect(usersIconView,SIGNAL(returnPressed(QListViewItem *)),this,SLOT(showUserMenu(QListViewItem *)));
82 82
83 myTabWidget->addTab(tabpage,"Users"); 83 myTabWidget->addTab(tabpage,"Users");
84} 84}
85 85
86void UserConfig::setupTabAllUsers() { 86void UserConfig::setupTabAllUsers() {
87 QWidget *tabpage = new QWidget(this); 87 QWidget *tabpage = new QWidget(this);
88 QVBoxLayout *layout = new QVBoxLayout(tabpage); 88 QVBoxLayout *layout = new QVBoxLayout(tabpage);
89 layout->setMargin(5); 89 layout->setMargin(5);
90 90
91 usersListView=new QListView(tabpage,"allusers"); 91 usersListView=new QListView(tabpage,"allusers");
92 usersListView->addColumn("UID"); 92 usersListView->addColumn("UID");
93 usersListView->addColumn("Login"); 93 usersListView->addColumn("Login");
94 usersListView->addColumn("Username"); 94 usersListView->addColumn("Username");
95 layout->addWidget(usersListView); 95 layout->addWidget(usersListView);
96 usersListView->setSorting(1,1); 96 usersListView->setSorting(1,1);
97 usersListView->setAllColumnsShowFocus(true); 97 usersListView->setAllColumnsShowFocus(true);
98 98
99 myTabWidget->addTab(tabpage,"All Users"); 99 myTabWidget->addTab(tabpage,"All Users");
100} 100}
101 101
102void UserConfig::setupTabAllGroups() { 102void UserConfig::setupTabAllGroups() {
103 QWidget *tabpage = new QWidget(this); 103 QWidget *tabpage = new QWidget(this);
104 QVBoxLayout *layout = new QVBoxLayout(tabpage); 104 QVBoxLayout *layout = new QVBoxLayout(tabpage);
105 layout->setMargin(5); 105 layout->setMargin(5);
106 106
107 groupsListView=new QListView(tabpage,"groups"); 107 groupsListView=new QListView(tabpage,"groups");
108 groupsListView->addColumn("GID"); 108 groupsListView->addColumn("GID");
109 groupsListView->addColumn("Groupname"); 109 groupsListView->addColumn("Groupname");
110 layout->addWidget(groupsListView); 110 layout->addWidget(groupsListView);
111 groupsListView->setSorting(1,1); 111 groupsListView->setSorting(1,1);
112 groupsListView->setAllColumnsShowFocus(true); 112 groupsListView->setAllColumnsShowFocus(true);
113 113
114 myTabWidget->addTab(tabpage,"All Groups"); 114 myTabWidget->addTab(tabpage,"All Groups");
115} 115}
116void UserConfig::getUsers() { 116void UserConfig::getUsers() {
117 QString mytext; 117 QString mytext;
118 QPixmap mypixmap; 118 QPixmap mypixmap;
119 QListViewItem *listviewitem; 119 QListViewItem *listviewitem;
120 120
121 // Empty the iconview & the listview. 121 // Empty the iconview & the listview.
122 usersIconView->clear(); 122 usersIconView->clear();
123 usersListView->clear(); 123 usersListView->clear();
124 124
125 // availableUID is used as a deposite for the next available UID on the system, this should start at an ID over 500. 125 // availableUID is used as a deposite for the next available UID on the system, this should start at an ID over 500.
126 availableUID=500; 126 availableUID=500;
127 for(QStringList::Iterator it=accounts->passwdStringList.begin(); it!=accounts->passwdStringList.end(); ++it) { 127 for(QStringList::Iterator it=accounts->passwdStringList.begin(); it!=accounts->passwdStringList.end(); ++it) {
128 accounts->splitPasswdEntry(*it); // Split the string into it's components and store in variables in the accounts object. ("pr_name" and so on.) 128 accounts->splitPasswdEntry(*it); // Split the string into it's components and store in variables in the accounts object. ("pr_name" and so on.)
129 new QListViewItem(usersListView,QString::number(accounts->pw_uid),accounts->pw_name,accounts->pw_gecos); 129 if(accounts->pw_name.find(QRegExp("^#"),0)) {// Skip commented lines.
130 if((accounts->pw_uid>=500) && (accounts->pw_uid<65000)) {// Is this user a "normal" user ? 130 new QListViewItem(usersListView,QString::number(accounts->pw_uid),accounts->pw_name,accounts->pw_gecos);
131 mytext=QString(accounts->pw_name)+" - ("+QString(accounts->pw_gecos)+")"; // The string displayed next to the icon. 131 if((accounts->pw_uid>=500) && (accounts->pw_uid<65000)) {// Is this user a "normal" user ?
132 if(!(mypixmap.load("/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png"))) { // Is there an icon for this user? Resource::loadPixmap is caching, doesn't work. 132 mytext=QString(accounts->pw_name)+" - ("+QString(accounts->pw_gecos)+")"; // The string displayed next to the icon.
133 mypixmap=Resource::loadPixmap(QString("usermanager/usericon"));// If this user has no icon, load the default icon. 133 if(!(mypixmap.load("/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png"))) { // Is there an icon for this user? Resource::loadPixmap is caching, doesn't work.
134 mypixmap=Resource::loadPixmap(QString("usermanager/usericon"));// If this user has no icon, load the default icon.
135 }
136 listviewitem=new QListViewItem(usersIconView,"",mytext);// Add the icon+text to the qiconview.
137 listviewitem->setPixmap(0,mypixmap);
134 } 138 }
135 listviewitem=new QListViewItem(usersIconView,"",mytext);// Add the icon+text to the qiconview. 139 if((accounts->pw_uid>=availableUID) && (accounts->pw_uid<65000)) availableUID=accounts->pw_uid+1; // Increase 1 to the latest know UID to get a free uid.
136 listviewitem->setPixmap(0,mypixmap);
137 } 140 }
138 if((accounts->pw_uid>=availableUID) && (accounts->pw_uid<65000)) availableUID=accounts->pw_uid+1; // Increase 1 to the latest know UID to get a free uid.
139 } 141 }
140 usersIconView->sort(); 142 usersIconView->sort();
141} 143}
142 144
143void UserConfig::addUser() { 145void UserConfig::addUser() {
144 if(UserDialog::addUser(availableUID,availableGID)) {// Add the user to the system, also send next available UID and GID. 146 if(UserDialog::addUser(availableUID,availableGID)) {// Add the user to the system, also send next available UID and GID.
145 getUsers(); // Update users views. 147 getUsers(); // Update users views.
146 getGroups(); // Update groups view. 148 getGroups(); // Update groups view.
147 } 149 }
148} 150}
149 151
150void UserConfig::editUser() { 152void UserConfig::editUser() {
151 QString username; 153 QString username;
152 if(myTabWidget->currentPageIndex()==0) {// Users 154 if(myTabWidget->currentPageIndex()==0) {// Users
153 if(usersIconView->currentItem()) {// Any icon selected? 155 if(usersIconView->currentItem()) {// Any icon selected?
154 username=usersIconView->currentItem()->text(1);// Get the text associated with the icon. 156 username=usersIconView->currentItem()->text(1);// Get the text associated with the icon.
155 username=username.left(username.find(" - (",0,true));// Strip out the username. 157 username=username.left(username.find(" - (",0,true));// Strip out the username.
156 if(UserDialog::editUser(username)) {// Bring up the userinfo dialog. 158 if(UserDialog::editUser(username)) {// Bring up the userinfo dialog.
157 // If there were any changed also update the views. 159 // If there were any changed also update the views.
158 getUsers(); 160 getUsers();
159 getGroups(); 161 getGroups();
160 } 162 }
161 } else { 163 } else {
162 QMessageBox::information(this,"No selection.","No user has been selected."); 164 QMessageBox::information(this,"No selection.","No user has been selected.");
163 } 165 }
164 } 166 }
165 if(myTabWidget->currentPageIndex()==1) {// All users 167 if(myTabWidget->currentPageIndex()==1) {// All users
166 if(usersListView->currentItem()) {// Anything changed!? 168 if(usersListView->currentItem()) {// Anything changed!?
167 username=usersListView->currentItem()->text(1);// Get the username. 169 username=usersListView->currentItem()->text(1);// Get the username.
168 if(UserDialog::editUser(username)) {// Bring up the userinfo dialog. 170 if(UserDialog::editUser(username)) {// Bring up the userinfo dialog.
169 // And again update the views if there were any changes. 171 // And again update the views if there were any changes.
170 getUsers(); 172 getUsers();
171 getGroups(); 173 getGroups();
172 } 174 }
173 } else { 175 } else {
174 QMessageBox::information(this,"No selection.","No user has been selected."); 176 QMessageBox::information(this,"No selection.","No user has been selected.");
175 } 177 }
176 } 178 }
177} 179}
178 180
179void UserConfig::delUser() { 181void UserConfig::delUser() {
180 QString username; 182 QString username;
181 183
182 if(myTabWidget->currentPageIndex()==0) {// Users, Iconview. 184 if(myTabWidget->currentPageIndex()==0) {// Users, Iconview.
183 if(usersIconView->currentItem()) {// Anything selected? 185 if(usersIconView->currentItem()) {// Anything selected?
184 username=usersIconView->currentItem()->text(1);// Get string associated with icon. 186 username=usersIconView->currentItem()->text(1);// Get string associated with icon.
185 username=username.left(username.find(" - (",0,true));// Strip out the username. 187 username=username.left(username.find(" - (",0,true));// Strip out the username.
186 if(QMessageBox::warning(this,"Delete user","Are you sure you want to\ndelete this user? \""+QString(username)+"\" ?","&No","&Yes",0,0,1)) { 188 if(QMessageBox::warning(this,"Delete user","Are you sure you want to\ndelete this user? \""+QString(username)+"\" ?","&No","&Yes",0,0,1)) {
187 if(UserDialog::delUser(username)) {// Delete the user if possible. 189 if(UserDialog::delUser(username)) {// Delete the user if possible.
188 // Update views. 190 // Update views.
189 getUsers(); 191 getUsers();
190 getGroups(); 192 getGroups();
191 } 193 }
192 } 194 }
193 } else { 195 } else {
194 QMessageBox::information(this,"No selection","No user has been selected."); 196 QMessageBox::information(this,"No selection","No user has been selected.");
195 } 197 }
196 } 198 }
197 if(myTabWidget->currentPageIndex()==1) {// All users 199 if(myTabWidget->currentPageIndex()==1) {// All users
198 if(usersListView->currentItem()) {// Anything changed!? 200 if(usersListView->currentItem()) {// Anything changed!?
199 username=usersListView->currentItem()->text(1);// Get the username. 201 username=usersListView->currentItem()->text(1);// Get the username.
200 if(QMessageBox::warning(this,"Delete user","Are you sure you want to\ndelete this user? \""+QString(username)+"\" ?","&No","&Yes",0,0,1)) { 202 if(QMessageBox::warning(this,"Delete user","Are you sure you want to\ndelete this user? \""+QString(username)+"\" ?","&No","&Yes",0,0,1)) {
201 if(UserDialog::delUser(username)) {// Try to delete the user. 203 if(UserDialog::delUser(username)) {// Try to delete the user.
202 // Update views. 204 // Update views.
203 getUsers(); 205 getUsers();
204 getGroups(); 206 getGroups();
205 } 207 }
206 } 208 }
207 } else { 209 } else {
208 QMessageBox::information(this,"No selection","No user has been selected."); 210 QMessageBox::information(this,"No selection","No user has been selected.");
209 } 211 }
210 } 212 }
211 213
212} 214}
213 215
214void UserConfig::getGroups() { 216void UserConfig::getGroups() {
215 groupsListView->clear();// Empty the listview. 217 groupsListView->clear();// Empty the listview.
216 availableGID=500;// We need to find the next free GID, and are only interested in values between 500 & 65000. 218 availableGID=500;// We need to find the next free GID, and are only interested in values between 500 & 65000.
217 for(QStringList::Iterator it=accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) {// Split the list into lines. 219 for(QStringList::Iterator it=accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) {// Split the list into lines.
218 accounts->splitGroupEntry(*it);// Split the line into its components and fill the variables of 'accounts'. (gr_name, gr_uid & gr_mem). 220 accounts->splitGroupEntry(*it);// Split the line into its components and fill the variables of 'accounts'. (gr_name, gr_uid & gr_mem).
219 new QListViewItem(groupsListView,QString::number(accounts->gr_gid),accounts->gr_name); 221 if(accounts->gr_name.find(QRegExp("^#"),0)) {// Skip commented lines.
220 if((accounts->gr_gid>=availableGID) && (accounts->gr_gid<65000)) availableGID=accounts->gr_gid+1;// Maybe a new free GID. 222 new QListViewItem(groupsListView,QString::number(accounts->gr_gid),accounts->gr_name);
223 if((accounts->gr_gid>=availableGID) && (accounts->gr_gid<65000)) availableGID=accounts->gr_gid+1;// Maybe a new free GID.
224 }
221 } 225 }
222} 226}
223 227
224void UserConfig::addGroup() { 228void UserConfig::addGroup() {
225 if(GroupDialog::addGroup(availableGID)) getGroups();// Bring up the add group dialog. 229 if(GroupDialog::addGroup(availableGID)) getGroups();// Bring up the add group dialog.
226} 230}
227 231
228void UserConfig::editGroup() { 232void UserConfig::editGroup() {
229 int gid; 233 int gid;
230 if(groupsListView->currentItem()) {// Any group selected? 234 if(groupsListView->currentItem()) {// Any group selected?
231 gid=groupsListView->currentItem()->text(0).toInt();// Get the GID from the listview. 235 gid=groupsListView->currentItem()->text(0).toInt();// Get the GID from the listview.
232 if(GroupDialog::editGroup(gid)) getGroups();// Bring up the edit group dialog. 236 if(GroupDialog::editGroup(gid)) getGroups();// Bring up the edit group dialog.
233 } else { 237 } else {
234 QMessageBox::information(this,"No selection","No group has been selected."); 238 QMessageBox::information(this,"No selection","No group has been selected.");
235 } 239 }
236} 240}
237 241
238void UserConfig::delGroup() { 242void UserConfig::delGroup() {
239 const char *groupname; 243 const char *groupname;
240 if(groupsListView->currentItem()) {// Any group selected? 244 if(groupsListView->currentItem()) {// Any group selected?
241 groupname=groupsListView->currentItem()->text(1);// Get the groupname from the listview. 245 groupname=groupsListView->currentItem()->text(1);// Get the groupname from the listview.
242 if(QMessageBox::warning(this,"Delete group","Are you sure you want to\ndelete the group \""+QString(groupname)+"\" ?","&No","&Yes",0,0,1)) { 246 if(QMessageBox::warning(this,"Delete group","Are you sure you want to\ndelete the group \""+QString(groupname)+"\" ?","&No","&Yes",0,0,1)) {
243 // If confirmed, try to delete the group. 247 // If confirmed, try to delete the group.
244 if(GroupDialog::delGroup(groupname)) getGroups(); // And also update the view afterwards if the user was deleted. 248 if(GroupDialog::delGroup(groupname)) getGroups(); // And also update the view afterwards if the user was deleted.
245 } 249 }
246 } else { 250 } else {
247 QMessageBox::information(this,"No selection","No group has been selected."); 251 QMessageBox::information(this,"No selection","No group has been selected.");
248 } 252 }
249} 253}
250 254
251void UserConfig::showUserMenu(QListViewItem *item) { 255void UserConfig::showUserMenu(QListViewItem *item) {
252 //userPopupMenu.exec(item->mapToGlobal(QPoint(0,0))); 256 //userPopupMenu.exec(item->mapToGlobal(QPoint(0,0)));
253 qWarning("Pressed!"); 257 qWarning("Pressed!");
254} 258}