-rw-r--r-- | noncore/settings/usermanager/main.cpp | 4 | ||||
-rw-r--r-- | noncore/settings/usermanager/opie-usermanager.control | 2 | ||||
-rw-r--r-- | noncore/settings/usermanager/userdialog.cpp | 60 | ||||
-rw-r--r-- | noncore/settings/usermanager/userdialog.h | 70 | ||||
-rw-r--r-- | noncore/settings/usermanager/usermanager.pro | 16 |
5 files changed, 76 insertions, 76 deletions
diff --git a/noncore/settings/usermanager/main.cpp b/noncore/settings/usermanager/main.cpp index 515ea9a..d7147d1 100644 --- a/noncore/settings/usermanager/main.cpp +++ b/noncore/settings/usermanager/main.cpp @@ -1,14 +1,14 @@ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "usermanager.h" -#include <qpe/qpeapplication.h> -#include <opie/oapplicationfactory.h> + +#include <opie2/oapplicationfactory.h> OPIE_EXPORT_APP( OApplicationFactory<UserConfig> ) diff --git a/noncore/settings/usermanager/opie-usermanager.control b/noncore/settings/usermanager/opie-usermanager.control index 5061366..52930d2 100644 --- a/noncore/settings/usermanager/opie-usermanager.control +++ b/noncore/settings/usermanager/opie-usermanager.control @@ -1,10 +1,10 @@ Package: opie-usermanager Files: plugins/application/libusermanager.so* bin/usermanager apps/Settings/usermanager.desktop pics/usermanager/* Priority: optional Section: opie/settings -Depends: task-opie-minimal +Depends: task-opie-minimal, libopiecore2, libopieui2 Architecture: arm Maintainer: Ted Parnefors <zaurus@bredband.net> License: GPL Description: User/Group manager for Opie. Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/settings/usermanager/userdialog.cpp b/noncore/settings/usermanager/userdialog.cpp index 08de352..eb9a289 100644 --- a/noncore/settings/usermanager/userdialog.cpp +++ b/noncore/settings/usermanager/userdialog.cpp @@ -1,107 +1,107 @@ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "userdialog.h" #include "passwd.h" /* OPIE */ -#include <opie/odevice.h> +#include <opie2/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> 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. + { // Skip commented lines. new QCheckListItem(groupsListView,accounts->gr_name,QCheckListItem::CheckBox); groupComboBox->insertItem(accounts->gr_name); } } QPEApplication::showDialog( this ); } /** * Empty destructor. * */ 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. + 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 @@ -179,67 +179,67 @@ void UserDialog::setupTab1() * */ 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"); } /** * Static function that creates the userinfo dialog. - * The user will be prompted to add a user. + * The user will be prompted to add a user. * * @param uid This is a suggested available UID. * @param gid This is a suggested available GID. * * @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. + 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()); @@ -250,240 +250,240 @@ bool UserDialog::addUser(int uid, int gid) 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=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? + 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; } /** * Deletes the user account. * * @param username User to be deleted. * * @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? + { // Does that user exist? if(!(accounts->delUser(username))) - { // Delete the user. + { // 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; } /** * This displays a confirmation dialog wether a user should be deleted or not. * (And also deletes the account) * * @param username User to be deleted. * * @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 + 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. + 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. + { // 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. + 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. + { // Iterate over all of them. qWarning(*it); - QListViewItemIterator lvit( edituserDialog->groupsListView ); // Compare to all groups. + 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.; + 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. + 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. + { // Iterate over all of them. qWarning(*it); - QListViewItemIterator lvit( edituserDialog->groupsListView ); // Compare to all groups. + 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.; + temp->setOn(true); // If we find a line with that groupname, select it.; } } } - if(!(edituserDialog->exec())) return false; // SHOW THE DIALOG! + if(!(edituserDialog->exec())) return false; // SHOW THE DIALOG! - accounts->findUser(username); // Fill user variables in 'acccounts' object. + 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. + { // 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=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(); } /** * 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); + // userImage=userImage.smoothScale(48,48); QPixmap *picture; picture=(QPixmap *)picturePushButton->pixmap(); picture->convertFromImage(userImage,0); picturePushButton->update(); } } } diff --git a/noncore/settings/usermanager/userdialog.h b/noncore/settings/usermanager/userdialog.h index 3272afc..a94e49b 100644 --- a/noncore/settings/usermanager/userdialog.h +++ b/noncore/settings/usermanager/userdialog.h @@ -1,67 +1,67 @@ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef USERDIALOG_H #define USERDIALOG_H #include <qdialog.h> #include <qlineedit.h> #include <qcombobox.h> #include <qlistview.h> #include <qtabwidget.h> #include <qpushbutton.h> #include <qcheckbox.h> #include <qlabel.h> #include <qpe/resource.h> -#include <opie/ofiledialog.h> +#include <opie2/ofiledialog.h> -class UserDialog : public QDialog +class UserDialog : public QDialog { - Q_OBJECT + Q_OBJECT private: - QTabWidget *myTabWidget; - QPushButton *picturePushButton; - QLineEdit *loginLineEdit; - QLineEdit *uidLineEdit; - QLineEdit *gecosLineEdit; - QLineEdit *passwordLineEdit; - QComboBox *shellComboBox; - QComboBox *groupComboBox; - QLabel *skelLabel; - QCheckBox *skelCheckBox; - QListView *groupsListView; - - QStringList groupMembers; - 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); + QTabWidget *myTabWidget; + QPushButton *picturePushButton; + QLineEdit *loginLineEdit; + QLineEdit *uidLineEdit; + QLineEdit *gecosLineEdit; + QLineEdit *passwordLineEdit; + QComboBox *shellComboBox; + QComboBox *groupComboBox; + QLabel *skelLabel; + QCheckBox *skelCheckBox; + QListView *groupsListView; + + QStringList groupMembers; + 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); + void clickedPicture(void); public: - 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); + 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); }; #endif diff --git a/noncore/settings/usermanager/usermanager.pro b/noncore/settings/usermanager/usermanager.pro index 0b2f056..f20c9c3 100644 --- a/noncore/settings/usermanager/usermanager.pro +++ b/noncore/settings/usermanager/usermanager.pro @@ -1,10 +1,10 @@ -#CONFIG = qt warn_on debug -CONFIG = qt warn_on release quick-app -HEADERS = usermanager.h userdialog.h groupdialog.h passwd.h -SOURCES = usermanager.cpp userdialog.cpp groupdialog.cpp passwd.cpp main.cpp -INCLUDEPATH += $(OPIEDIR)/include -DEPENDPATH += $(OPIEDIR)/include -LIBS += -lqpe -lopie -lcrypt -TARGET = usermanager +#CONFIG = qt warn_on debug +CONFIG = qt warn_on release quick-app +HEADERS = usermanager.h userdialog.h groupdialog.h passwd.h +SOURCES = usermanager.cpp userdialog.cpp groupdialog.cpp passwd.cpp main.cpp +INCLUDEPATH += $(OPIEDIR)/include +DEPENDPATH += $(OPIEDIR)/include +LIBS += -lqpe -lopiecore2 -lopieui2 -lcrypt +TARGET = usermanager include ( $(OPIEDIR)/include.pro ) |