summaryrefslogtreecommitdiff
authorumopapisdn <umopapisdn>2002-09-28 06:36:30 (UTC)
committer umopapisdn <umopapisdn>2002-09-28 06:36:30 (UTC)
commit8a95ca149ff5eedc9215bb012c8d7d09cdcaf96c (patch) (side-by-side diff)
tree50aed468fa8888266c589ce47131d0acaf7f82b7
parent996c0d02d16c185acc3190baa5b4a1fc934e730c (diff)
downloadopie-8a95ca149ff5eedc9215bb012c8d7d09cdcaf96c.zip
opie-8a95ca149ff5eedc9215bb012c8d7d09cdcaf96c.tar.gz
opie-8a95ca149ff5eedc9215bb012c8d7d09cdcaf96c.tar.bz2
Now actually makes the homedirectories owned by the user they belong to. :)
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/settings/usermanager/passwd.cpp5
-rw-r--r--noncore/settings/usermanager/userdialog.cpp10
-rw-r--r--noncore/settings/usermanager/userdialog.h2
-rw-r--r--noncore/settings/usermanager/usermanager.pro2
4 files changed, 15 insertions, 4 deletions
diff --git a/noncore/settings/usermanager/passwd.cpp b/noncore/settings/usermanager/passwd.cpp
index 310cef8..5063661 100644
--- a/noncore/settings/usermanager/passwd.cpp
+++ b/noncore/settings/usermanager/passwd.cpp
@@ -1,29 +1,30 @@
/***************************************************************************
* *
* 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 "passwd.h"
// Needed for crypt_make_salt();
#include <sys/types.h>
+#include <sys/stat.h>
#include <unistd.h>
#include <time.h>
Passwd::Passwd() {
}
Passwd::~Passwd() {
}
// This function is taken from 'busybox'.
int Passwd::i64c(int i)
{
if (i <= 0)
return ('.');
if (i == 1)
return ('/');
@@ -126,42 +127,44 @@ bool Passwd::searchUser(QRegExp &userRegExp) {
userString=(*(tempStringList.begin()));
splitPasswdEntry(userString);
}
return true;
}
bool Passwd::findUser(const char *username) {
QRegExp userRegExp(QString("^%1\\:").arg(username));
return searchUser(userRegExp);
}
bool Passwd::findUser(int uid) {
QRegExp userRegExp(QString(":%1\\:").arg(uid));
return searchUser(userRegExp);
}
-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=true) {
+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());
tempString=pw_name+":"+pw_passwd+":"+QString::number(pw_uid)+":"+QString::number(pw_gid)+":"+pw_gecos+":"+pw_dir+":"+pw_shell;
passwdStringList.append(tempString);
// Make home dir.
QDir d;
if(!(d.exists(pw_dir))) {
d.mkdir(pw_dir);
+ chown(pw_dir,pw_uid,pw_gid);
+ chmod(pw_dir,S_IRUSR|S_IWUSR|S_IXUSR);
}
return 1;
}
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) {
*it=QString(pw_name+":"+pw_passwd+":"+QString::number(pw_uid)+":"+QString::number(pw_gid)+":"+pw_gecos+":"+pw_dir+":"+pw_shell);
return true;
}
}
return false;
}
bool Passwd::deleteUser(QRegExp &userRegExp, bool delGroup) {
diff --git a/noncore/settings/usermanager/userdialog.cpp b/noncore/settings/usermanager/userdialog.cpp
index f31775d..6940a3b 100644
--- a/noncore/settings/usermanager/userdialog.cpp
+++ b/noncore/settings/usermanager/userdialog.cpp
@@ -24,33 +24,34 @@
#include "passwd.h"
/**
* 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) {
QVBoxLayout *layout = new QVBoxLayout(this);
myTabWidget=new QTabWidget(this,"User Tab Widget");
layout->addWidget(myTabWidget);
setupTab1();
setupTab2();
// 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);
- new QListViewItem(groupsListView,accounts->gr_name);
+ //new QListViewItem(groupsListView,accounts->gr_name);
+ new QCheckListItem(groupsListView,accounts->gr_name,QCheckListItem::CheckBox);
groupComboBox->insertItem(accounts->gr_name);
}
showMaximized();
}
/**
* Empty destructor.
*
*/
UserDialog::~UserDialog() {
}
/**
* Creates the first tab, all userinfo is here.
*
@@ -142,32 +143,33 @@ void UserDialog::setupTab1() {
}
/**
* 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(true);
+ 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.
*
* @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>.
@@ -302,18 +304,22 @@ bool UserDialog::editUser(const char *username) {
*
*/
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() {
- QMessageBox::information(0,"Sorry!","Icon selection not yet implemented.\nComming real soon now! (tm)");
+ QString filename=OFileDialog::getOpenFileName(OFileSelector::EXTENDED,"/opt/QtPalmtop/pics");
+ // OFileDialog *fd=new OFileDialog("Select Icon",this, OFileSelector::OPEN, OFileSelector::EXTENDED,"/");
+ //fd->showMaximized();
+ //fd->exec();
+ QMessageBox::information(0,"Sorry!","Icon selection not yet implemented.\nComming real soon now! (tm)\n"+filename);
}
diff --git a/noncore/settings/usermanager/userdialog.h b/noncore/settings/usermanager/userdialog.h
index b44de9e..df54269 100644
--- a/noncore/settings/usermanager/userdialog.h
+++ b/noncore/settings/usermanager/userdialog.h
@@ -5,32 +5,34 @@
* 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 <qpe/resource.h>
+#include <opie/ofiledialog.h>
+
class UserDialog : public QDialog
{
Q_OBJECT
private:
QTabWidget *myTabWidget;
QPushButton *picturePushButton;
QLineEdit *loginLineEdit;
QLineEdit *uidLineEdit;
QLineEdit *gecosLineEdit;
QLineEdit *passwordLineEdit;
QComboBox *shellComboBox;
QComboBox *groupComboBox;
QListView *groupsListView;
QStringList groupMembers;
QString pictureLocation;
diff --git a/noncore/settings/usermanager/usermanager.pro b/noncore/settings/usermanager/usermanager.pro
index fc45f93..2f3212f 100644
--- a/noncore/settings/usermanager/usermanager.pro
+++ b/noncore/settings/usermanager/usermanager.pro
@@ -1,10 +1,10 @@
TEMPLATE = app
#CONFIG = qt warn_on debug
CONFIG = qt warn_on release
HEADERS = usermanager.h userdialog.h groupdialog.h passwd.h
SOURCES = usermanager.cpp userdialog.cpp groupdialog.cpp passwd.h main.cpp
INCLUDEPATH += $(OPIEDIR)/include
DEPENDPATH += $(OPIEDIR)/include
-LIBS += -lqpe -lcrypt
+LIBS += -lqpe -lopie -lcrypt
TARGET = usermanager
DESTDIR = $(OPIEDIR)/bin