Source Code (Use browser search to find items of interest.)
Class Index
kuser'KUser (./kdeadmin/kuser/kuser.h:21)
class KUser {
public:
KUser();
KUser(const KUser *user);
~KUser();
void copy(const KUser *user);
const QString &getName() const;
const QString &getPwd() const;
const QString &getHomeDir() const;
const QString &getShell() const;
const QString &getFullName() const;
uid_t getUID() const;
uid_t getGID() const;
#ifdef __FreeBSD__
const QString &getOffice() const;
const QString &getWorkPhone() const;
const QString &getHomePhone() const;
const QString &getClass() const;
time_t getLastChange() const;
time_t getExpire() const;
#else
const QString &getOffice1() const;
const QString &getOffice2() const;
const QString &getAddress() const;
#endif
#ifdef _KU_SHADOW
const QString &getSPwd() const;
long getLastChange() const;
int getMin() const;
int getMax() const;
int getWarn() const;
int getInactive() const;
int getExpire() const;
int getFlag() const;
#endif
void setName(const QString &data);
void setPwd(const QString &data);
void setHomeDir(const QString &data);
void setShell(const QString &data);
void setFullName(const QString &data);
void setUID(uid_t data);
void setGID(uid_t data);
#ifdef __FreeBSD__
void setOffice(const QString &data);
void setWorkPhone(const QString &data);
void setHomePhone(const QString &data);
void setClass(const QString &data);
void setExpire(time_t data);
void setLastChange(time_t data);
#else
void setOffice1(const QString &data);
void setOffice2(const QString &data);
void setAddress(const QString &data);
#endif
#ifdef _KU_SHADOW
void setSPwd(const QString &data);
void setLastChange(long data);
void setMin(int data);
void setMax(int data);
void setWarn(int data);
void setInactive(int data);
void setExpire(int data);
void setFlag(int data);
#endif
int getCreateHome();
int getCreateMailBox();
int getCopySkel();
void setCreateHome(int data);
void setCreateMailBox(int data);
void setCopySkel(int data);
protected:
friend KUsers;
void createHome();
int createMailBox();
int copySkel();
int removeHome();
int removeCrontabs();
int removeMailBox();
int removeProcesses();
void copyDir(const QString &srcPath, const QString &dstPath);
QString
p_name, // parsed pw information
p_pwd,
p_dir,
p_shell,
p_fname, // parsed comment information
#ifdef __FreeBSD__
p_office,
p_ophone,
p_hphone,
p_class;
time_t
p_change,
p_expire;
#else
p_office1,
p_office2,
p_address;
#endif
uid_t p_uid;
gid_t p_gid;
#ifdef _KU_SHADOW
QString
s_pwd; // parsed shadow information
long
s_lstchg; // last password change
signed int
s_min, // days until pwchange allowed.
s_max, // days before change required
s_warn, // days warning for expiration
s_inact, // days before account inactive
s_expire, // date when account expires
s_flag; // reserved for future use
#endif
int
isCreateHome, // create homedir
isCreateMailBox, // create mailbox
isCopySkel; // copy skeleton
};
kuser'KUser::KUser() (./kdeadmin/kuser/kuser.cpp:52)
KUser::KUser() : p_pwd("*") {
#ifdef __FreeBSD__
p_change = 0;
p_expire = 0;
#endif
p_uid = 0;
p_gid = 100;
#ifdef _KU_SHADOW
s_lstchg = 0;
s_min = 0;
s_max = -1;
s_warn = 7;
s_inact = -1;
s_expire = 99999;
s_flag = 0;
#endif
isCreateHome = 0;
isCreateMailBox = 0;
isCopySkel = 0;
}
kuser'KUser::KUser() (./kdeadmin/kuser/kuser.cpp:75)
KUser::KUser(const KUser *user) {
copy(user);
}
kuser'KUser::copy() (./kdeadmin/kuser/kuser.cpp:79)
void KUser::copy(const KUser *user) {
p_name = user->p_name;
p_pwd = user->p_pwd;
p_dir = user->p_dir;
p_shell = user->p_shell;
p_fname = user->p_fname;
#ifdef __FreeBSD__
p_office = user->p_office;
p_ophone = user->p_ophone;
p_hphone = user->p_hphone;
p_class = user->p_class;
p_change = user->p_change;
p_expire = user->p_expire;
#else
p_office1 = user->p_office1;
p_office2 = user->p_office2;
p_address = user->p_address;
#endif
p_uid = user->p_uid;
p_gid = user->p_gid;
#ifdef _KU_SHADOW
s_pwd = user->s_pwd;
s_lstchg = user->s_lstchg;
s_min = user->s_min;
s_max = user->s_max;
s_warn = user->s_warn;
s_inact = user->s_inact;
s_expire = user->s_expire;
s_flag = user->s_flag;
#endif
isCreateHome = user->isCreateHome;
isCreateMailBox = user->isCreateMailBox;
isCopySkel = user->isCopySkel;
}
kuser'KUser::~KUser() (./kdeadmin/kuser/kuser.cpp:116)
KUser::~KUser() {
}
kuser'KUser::getCreateHome() (./kdeadmin/kuser/kuser.cpp:119)
int KUser::getCreateHome() {
return isCreateHome;
}
kuser'KUser::getCreateMailBox() (./kdeadmin/kuser/kuser.cpp:123)
int KUser::getCreateMailBox() {
return isCreateMailBox;
}
kuser'KUser::getCopySkel() (./kdeadmin/kuser/kuser.cpp:127)
int KUser::getCopySkel() {
return isCopySkel;
}
kuser'KUser::getName() (./kdeadmin/kuser/kuser.cpp:131)
const QString &KUser::getName() const {
return p_name;
}
kuser'KUser::getPwd() (./kdeadmin/kuser/kuser.cpp:135)
const QString &KUser::getPwd() const {
return p_pwd;
}
kuser'KUser::getHomeDir() (./kdeadmin/kuser/kuser.cpp:139)
const QString &KUser::getHomeDir() const {
return p_dir;
}
kuser'KUser::getShell() (./kdeadmin/kuser/kuser.cpp:143)
const QString &KUser::getShell() const {
return p_shell;
}
kuser'KUser::getFullName() (./kdeadmin/kuser/kuser.cpp:147)
const QString &KUser::getFullName() const {
return p_fname;
}
#ifdef __FreeBSD__
// FreeBSD apparently uses the GECOS fields differently than other Unices.
// Create some better named functions to make the FreeBSD code clear
kuser'KUser::getOffice() (./kdeadmin/kuser/kuser.cpp:154)
const QString &KUser::getOffice() const {
return p_office;
}
kuser'KUser::getWorkPhone() (./kdeadmin/kuser/kuser.cpp:158)
const QString &KUser::getWorkPhone() const {
return p_ophone;
}
kuser'KUser::getHomePhone() (./kdeadmin/kuser/kuser.cpp:162)
const QString &KUser::getHomePhone() const {
return p_hphone;
}
// New fields needed for the FreeBSD /etc/master.passwd file
kuser'KUser::getClass() (./kdeadmin/kuser/kuser.cpp:167)
const QString &KUser::getClass() const {
return p_class;
}
kuser'KUser::getLastChange() (./kdeadmin/kuser/kuser.cpp:171)
time_t KUser::getLastChange() const {
return p_change;
}
kuser'KUser::getExpire() (./kdeadmin/kuser/kuser.cpp:175)
time_t KUser::getExpire() const {
return p_expire;
}
kuser'KUser::getOffice1() (./kdeadmin/kuser/kuser.cpp:181)
const QString &KUser::getOffice1() const {
return p_office1;
}
kuser'KUser::getOffice2() (./kdeadmin/kuser/kuser.cpp:185)
const QString &KUser::getOffice2() const {
return p_office2;
}
kuser'KUser::getAddress() (./kdeadmin/kuser/kuser.cpp:189)
const QString &KUser::getAddress() const {
return p_address;
}
kuser'KUser::getUID() (./kdeadmin/kuser/kuser.cpp:195)
uid_t KUser::getUID() const {
return p_uid;
}
kuser'KUser::getGID() (./kdeadmin/kuser/kuser.cpp:199)
gid_t KUser::getGID() const {
return p_gid;
}
kuser'KUser::getSPwd() (./kdeadmin/kuser/kuser.cpp:204)
const QString &KUser::getSPwd() const {
return s_pwd;
}
kuser'KUser::getLastChange() (./kdeadmin/kuser/kuser.cpp:208)
long KUser::getLastChange() const {
return s_lstchg;
}
kuser'KUser::getMin() (./kdeadmin/kuser/kuser.cpp:212)
int KUser::getMin() const {
return s_min;
}
kuser'KUser::getMax() (./kdeadmin/kuser/kuser.cpp:216)
int KUser::getMax() const {
return s_max;
}
kuser'KUser::getWarn() (./kdeadmin/kuser/kuser.cpp:220)
int KUser::getWarn() const {
return s_warn;
}
kuser'KUser::getInactive() (./kdeadmin/kuser/kuser.cpp:224)
int KUser::getInactive() const {
return s_inact;
}
kuser'KUser::getExpire() (./kdeadmin/kuser/kuser.cpp:228)
int KUser::getExpire() const {
return s_expire;
}
kuser'KUser::getFlag() (./kdeadmin/kuser/kuser.cpp:232)
int KUser::getFlag() const {
return s_flag;
}
kuser'KUser::setName() (./kdeadmin/kuser/kuser.cpp:237)
void KUser::setName(const QString &data) {
p_name = data;
}
kuser'KUser::setPwd() (./kdeadmin/kuser/kuser.cpp:241)
void KUser::setPwd(const QString &data) {
p_pwd = data;
}
kuser'KUser::setHomeDir() (./kdeadmin/kuser/kuser.cpp:245)
void KUser::setHomeDir(const QString &data) {
p_dir = data;
}
kuser'KUser::setShell() (./kdeadmin/kuser/kuser.cpp:249)
void KUser::setShell(const QString &data) {
p_shell = data;
}
kuser'KUser::setFullName() (./kdeadmin/kuser/kuser.cpp:253)
void KUser::setFullName(const QString &data) {
p_fname = data;
}
#ifdef __FreeBSD__
// FreeBSD apparently uses the GECOS fields differently than other Unices.
// Create some better named functions to make the FreeBSD code clear
kuser'KUser::setOffice() (./kdeadmin/kuser/kuser.cpp:260)
void KUser::setOffice(const QString &data) {
p_office = data;
}
kuser'KUser::setWorkPhone() (./kdeadmin/kuser/kuser.cpp:264)
void KUser::setWorkPhone(const QString &data) {
p_ophone = data;
}
kuser'KUser::setHomePhone() (./kdeadmin/kuser/kuser.cpp:268)
void KUser::setHomePhone(const QString &data) {
p_hphone = data;
}
// New fields needed for the FreeBSD /etc/master.passwd file
kuser'KUser::setClass() (./kdeadmin/kuser/kuser.cpp:273)
void KUser::setClass(const QString &data) {
p_class = data;
}
kuser'KUser::setLastChange() (./kdeadmin/kuser/kuser.cpp:277)
void KUser::setLastChange(time_t data) {
p_change = data;
}
kuser'KUser::setExpire() (./kdeadmin/kuser/kuser.cpp:281)
void KUser::setExpire(time_t data) {
p_expire = data;
}
kuser'KUser::setOffice1() (./kdeadmin/kuser/kuser.cpp:287)
void KUser::setOffice1(const QString &data) {
p_office1 = data;
}
kuser'KUser::setOffice2() (./kdeadmin/kuser/kuser.cpp:291)
void KUser::setOffice2(const QString &data) {
p_office2 = data;
}
kuser'KUser::setAddress() (./kdeadmin/kuser/kuser.cpp:295)
void KUser::setAddress(const QString &data) {
p_address = data;
}
kuser'KUser::setUID() (./kdeadmin/kuser/kuser.cpp:301)
void KUser::setUID(uid_t data) {
p_uid = data;
}
kuser'KUser::setGID() (./kdeadmin/kuser/kuser.cpp:305)
void KUser::setGID(gid_t data) {
p_gid = data;
}
kuser'KUser::setSPwd() (./kdeadmin/kuser/kuser.cpp:310)
void KUser::setSPwd(const QString &data) {
s_pwd = data;
}
kuser'KUser::setLastChange() (./kdeadmin/kuser/kuser.cpp:314)
void KUser::setLastChange(long data) {
s_lstchg = data;
}
kuser'KUser::setMin() (./kdeadmin/kuser/kuser.cpp:318)
void KUser::setMin(int data) {
s_min = data;
}
kuser'KUser::setMax() (./kdeadmin/kuser/kuser.cpp:322)
void KUser::setMax(int data) {
s_max = data;
}
kuser'KUser::setWarn() (./kdeadmin/kuser/kuser.cpp:326)
void KUser::setWarn(int data) {
s_warn = data;
}
kuser'KUser::setInactive() (./kdeadmin/kuser/kuser.cpp:330)
void KUser::setInactive(int data) {
s_inact = data;
}
kuser'KUser::setExpire() (./kdeadmin/kuser/kuser.cpp:334)
void KUser::setExpire(int data) {
s_expire = data;
}
kuser'KUser::setFlag() (./kdeadmin/kuser/kuser.cpp:338)
void KUser::setFlag(int data) {
s_flag = data;
}
kuser'KUser::setCreateHome() (./kdeadmin/kuser/kuser.cpp:344)
void KUser::setCreateHome(int data) {
isCreateHome = data;
}
kuser'KUser::setCreateMailBox() (./kdeadmin/kuser/kuser.cpp:348)
void KUser::setCreateMailBox(int data) {
isCreateMailBox = data;
}
kuser'KUser::setCopySkel() (./kdeadmin/kuser/kuser.cpp:352)
void KUser::setCopySkel(int data) {
isCopySkel = data;
}
kuser'KUser::createHome() (./kdeadmin/kuser/kuser.cpp:783)
void KUser::createHome() {
QDir d = QDir::root();
if (d.cd(p_dir)) {
err->addMsg(i18n("Directory %1 already exists").arg(p_dir));
err->display();
}
if (mkdir((const char *)p_dir, 0700) != 0) {
err->addMsg(i18n("Cannot create home directory\nError: %1").arg(strerror(errno)));
err->display();
}
if (chown((const char *)p_dir, p_uid, p_gid) != 0) {
err->addMsg(i18n("Cannot change owner of home directory\nError: %1").arg(strerror(errno)));
err->display();
}
if (chmod((const char *)p_dir, KU_HOMEDIR_PERM) != 0) {
err->addMsg(i18n("Cannot change permissions on home directory\nError: %1").arg(strerror(errno)));
err->display();
}
}
kuser'KUser::createMailBox() (./kdeadmin/kuser/kuser.cpp:807)
int KUser::createMailBox() {
QString mailboxpath;
int fd;
mailboxpath = QString("%1/%2").arg(MAIL_SPOOL_DIR).arg(p_name);
if((fd = open((const char *)mailboxpath, O_CREAT|O_EXCL|O_WRONLY,
S_IRUSR|S_IWUSR)) < 0) {
err->addMsg(i18n("Cannot create %1: %2")
.arg(mailboxpath)
.arg(strerror(errno)));
err->display();
return -1;
}
close(fd);
if (chown((const char *)mailboxpath, p_uid, KU_MAILBOX_GID) != 0) {
err->addMsg(i18n("Cannot change owner on mailbox: %1\nError: %2")
.arg(mailboxpath).arg(strerror(errno)));
err->display();
return -1;
}
if (chmod((const char *)mailboxpath, KU_MAILBOX_PERM) != 0) {
err->addMsg(i18n("Cannot change permissions on mailbox: %1\nError: %2")
.arg(mailboxpath).arg(strerror(errno)));
err->display();
}
return 0;
}
kuser'KUser::copyDir() (./kdeadmin/kuser/kuser.cpp:838)
void KUser::copyDir(const QString &srcPath, const QString &dstPath) {
struct stat st;
QDir s(srcPath);
QDir d(dstPath);
QString prefix(SKEL_FILE_PREFIX);
int len = prefix.length();
s.setFilter(QDir::Dirs);
for (uint i=0; i<s.count(); i++) {
QString name(s[i]);
if (name == ".")
continue;
if (name == "..")
continue;
QString filename(s.filePath(name));
QDir dir(filename);
if (stat(filename, &st) != 0)
printf("errno = %d, '%s'\n", errno, strerror(errno));
if (name.left(len) == prefix)
name = name.remove(0, len);
d.mkdir(name, FALSE);
if (chown(d.filePath(name), p_uid, p_gid) != 0) {
err->addMsg(i18n("Cannot change owner of directory %1\nError: %2")
.arg(d.filePath(s[i])).arg(strerror(errno)));
err->display();
}
if (chmod(d.filePath(name), st.st_mode & 07777) != 0) {
err->addMsg(i18n("Cannot change permissions on directory %1\nError: %2")
.arg(d.filePath(s[i])).arg(strerror(errno)));
err->display();
}
copyDir(s.filePath(name), d.filePath(name));
}
s.setFilter(QDir::Files | QDir::Hidden);
for (uint i=0; i<s.count(); i++) {
QString name(s[i]);
QString filename(s.filePath(name));
stat(filename, &st);
if (name.left(len) == prefix)
name = name.remove(0, len);
if (copyFile(filename, d.filePath(name)) == -1) {
err->display();
continue;
}
if (chown(d.filePath(name), p_uid, p_gid) != 0) {
err->addMsg(i18n("Cannot change owner of file %1\nError: %2")
.arg(d.filePath(s[i])).arg(strerror(errno)));
err->display();
}
if (chmod(d.filePath(name), st.st_mode & 07777) != 0) {
err->addMsg(i18n("Cannot change permissions on file %1\nError: %2")
.arg(d.filePath(s[i])).arg(strerror(errno)));
err->display();
}
}
}
kuser'KUser::copySkel() (./kdeadmin/kuser/kuser.cpp:911)
int KUser::copySkel() {
QDir s(SKELDIR);
QDir d(p_dir);
umask(0777);
if (!s.exists()) {
err->addMsg(i18n("Directory %1 does not exist").arg(s.dirName()));
err->display();
return (-1);
}
if (!d.exists()) {
err->addMsg(i18n("Directory %1 does not exist").arg(d.dirName()));
err->display();
return (-1);
}
copyDir(s.absPath(), d.absPath());
return 0;
}
// Temporarily use rm
//TODO: replace by our own procedure cause calling other programs
// for things we are know how to do is not a good idea
kuser'KUser::removeHome() (./kdeadmin/kuser/kuser.cpp:938)
int KUser::removeHome() {
struct stat sb;
QString command;
if (!stat((const char *)p_dir, &sb))
if (S_ISDIR(sb.st_mode) && sb.st_uid == p_uid) {
#ifdef MINIX
command = QString("/usr/bin/rm -rf -- %1").arg(p_dir);
#else
command = QString("/bin/rm -rf -- %1").arg(p_dir);
#endif
if (system((const char *)command) != 0) {
err->addMsg(i18n("Cannot remove home directory %1\nError: %2")
.arg(command).arg(strerror(errno)));
err->display();
}
}
return 0;
}
//TODO: remove at jobs too.
kuser'KUser::removeCrontabs() (./kdeadmin/kuser/kuser.cpp:961)
int KUser::removeCrontabs() {
QString file;
QString command;
file = QString("/var/cron/tabs/%1").arg(p_name);
if (access((const char *)file, F_OK) == 0) {
command = QString("crontab -u %1 -r").arg(p_name);
if (system((const char *)command) != 0) {
err->addMsg(i18n("Cannot remove crontab %1\nError: %2")
.arg(command).arg(strerror(errno)));
err->display();
}
}
return 0;
}
kuser'KUser::removeMailBox() (./kdeadmin/kuser/kuser.cpp:978)
int KUser::removeMailBox() {
QString file;
file = QString("%1/%2").arg(MAIL_SPOOL_DIR).arg(p_name);
if (remove((const char *)file) != 0) {
err->addMsg(i18n("Cannot remove mailbox %1\nError: %2")
.arg(file).arg(strerror(errno)));
err->display();
}
return 0;
}
kuser'KUser::removeProcesses() (./kdeadmin/kuser/kuser.cpp:991)
int KUser::removeProcesses() {
// be paranoid -- kill all processes owned by that user, if not root.
if (p_uid != 0)
switch (fork()) {
case 0:
setuid(p_uid);
kill(-1, 9);
_exit(0);
break;
case -1:
err->addMsg(i18n("Cannot fork()"));
err->display();
perror("fork");
break;
}
return 0;
}