You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
310 lines
8.2 KiB
310 lines
8.2 KiB
/*
|
|
* Copyright (c) 1998 Denis Perchine <dyp@perchine.com>
|
|
* Copyright (c) 2004 Szombathelyi György <gyurco@freemail.hu>
|
|
* Maintained by Adriaan de Groot <groot@kde.org>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public
|
|
* License version 2 as published by the Free Software Foundation.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public License
|
|
* along with this library; see the file COPYING.LIB. If not, write to
|
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301, USA.
|
|
**/
|
|
|
|
#ifndef _KU_USER_H_
|
|
#define _KU_USER_H_
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <tqstring.h>
|
|
#include <tqptrlist.h>
|
|
|
|
#include "globals.h"
|
|
#include "sid.h"
|
|
|
|
namespace KU {
|
|
|
|
class KUsers;
|
|
|
|
class KUser {
|
|
public:
|
|
enum Cap {
|
|
Cap_POSIX = 1,
|
|
Cap_Samba = 2
|
|
};
|
|
KUser();
|
|
KUser(const KUser *user);
|
|
~KUser();
|
|
|
|
void copy(const KUser *user);
|
|
void setCaps( int data );
|
|
int getCaps();
|
|
|
|
//General
|
|
const TQString &getName() const;
|
|
const TQString &getSurname() const;
|
|
const TQString &getEmail() const;
|
|
const TQString &getPwd() const;
|
|
const TQString &getHomeDir() const;
|
|
const TQString &getShell() const;
|
|
const TQString &getFullName() const;
|
|
|
|
uid_t getUID() const;
|
|
uid_t getGID() const;
|
|
bool getDisabled() const;
|
|
|
|
void setName(const TQString &data);
|
|
void setSurname(const TQString &data);
|
|
void setEmail(const TQString &data);
|
|
void setPwd(const TQString &data);
|
|
void setHomeDir(const TQString &data);
|
|
void setShell(const TQString &data);
|
|
void setFullName(const TQString &data);
|
|
|
|
void setUID(uid_t data);
|
|
void setGID(uid_t data);
|
|
void setDisabled(bool data);
|
|
|
|
//gecos
|
|
//--BSD gecos
|
|
const TQString &getOffice() const;
|
|
const TQString &getWorkPhone() const;
|
|
const TQString &getHomePhone() const;
|
|
const TQString &getClass() const;
|
|
//--BSD end
|
|
const TQString &getOffice1() const;
|
|
const TQString &getOffice2() const;
|
|
const TQString &getAddress() const;
|
|
|
|
//--BSD
|
|
void setOffice(const TQString &data);
|
|
void setWorkPhone(const TQString &data);
|
|
void setHomePhone(const TQString &data);
|
|
void setClass(const TQString &data);
|
|
//--BSD end
|
|
void setOffice1(const TQString &data);
|
|
void setOffice2(const TQString &data);
|
|
void setAddress(const TQString &data);
|
|
|
|
//shadow
|
|
const TQString &getSPwd() const;
|
|
time_t getExpire() const;
|
|
time_t getLastChange() const;
|
|
int getMin() const;
|
|
int getMax() const;
|
|
int getWarn() const;
|
|
int getInactive() const;
|
|
int getFlag() const;
|
|
|
|
void setSPwd(const TQString &data);
|
|
void setLastChange(time_t data);
|
|
void setMin(int data);
|
|
void setMax(int data);
|
|
void setWarn(int data);
|
|
void setInactive(int data);
|
|
void setExpire(time_t data);
|
|
void setFlag(int data);
|
|
|
|
//samba
|
|
const TQString &getLMPwd() const; // sam_lmpwd,
|
|
const TQString &getNTPwd() const; //sam_ntpwd,
|
|
const TQString &getLoginScript() const; //sam_loginscript,
|
|
const TQString &getProfilePath() const; // sam_profile,
|
|
const TQString &getHomeDrive() const; //sam_homedrive,
|
|
const TQString &getHomePath() const; //sam_homepath;
|
|
const TQString &getWorkstations() const; //sam_workstations
|
|
const TQString &getDomain() const; //sam_domain
|
|
const SID &getSID() const; //sid,
|
|
const SID &getPGSID() const; //pgroup_sid;
|
|
|
|
void setLMPwd( const TQString &data ); // sam_lmpwd,
|
|
void setNTPwd( const TQString &data ); //sam_ntpwd,
|
|
void setLoginScript( const TQString &data ); //sam_loginscript,
|
|
void setProfilePath( const TQString &data); // sam_profile,
|
|
void setHomeDrive( const TQString &data ); //sam_homedrive,
|
|
void setHomePath( const TQString &data ); //sam_homepath;
|
|
void setWorkstations( const TQString &data ); //sam_workstations
|
|
void setDomain( const TQString &data ); //sam_domain
|
|
void setSID( const SID &data ); //sid,
|
|
void setPGSID( const SID &data ); //pgroup_sid;
|
|
|
|
//Administrative
|
|
bool getCreateHome();
|
|
bool getCreateMailBox();
|
|
bool getCopySkel();
|
|
bool getDeleteHome();
|
|
bool getDeleteMailBox();
|
|
|
|
void setCreateHome(bool data);
|
|
void setCreateMailBox(bool data);
|
|
void setCopySkel(bool data);
|
|
void setDeleteHome(bool data);
|
|
void setDeleteMailBox(bool data);
|
|
|
|
protected:
|
|
friend class KUsers;
|
|
|
|
int createHome();
|
|
int tryCreate(const TQString &dir);
|
|
int createMailBox();
|
|
int copySkel();
|
|
|
|
int removeHome();
|
|
int removeCrontabs();
|
|
int removeMailBox();
|
|
int removeProcesses();
|
|
|
|
void copyDir(const TQString &srcPath, const TQString &dstPath);
|
|
|
|
int caps;
|
|
TQString
|
|
p_name, // parsed pw information
|
|
p_surname,
|
|
p_email,
|
|
p_pwd,
|
|
p_dir,
|
|
p_shell,
|
|
p_fname, // parsed comment information
|
|
p_office1,
|
|
p_office2,
|
|
p_address,
|
|
//BSD
|
|
p_office,
|
|
p_ophone,
|
|
p_hphone,
|
|
p_class;
|
|
time_t
|
|
p_change,
|
|
p_expire;
|
|
//BSD end
|
|
uid_t p_uid;
|
|
gid_t p_gid;
|
|
|
|
TQString
|
|
s_pwd, // parsed shadow password
|
|
sam_lmpwd,
|
|
sam_ntpwd,
|
|
sam_loginscript,
|
|
sam_profile,
|
|
sam_homedrive,
|
|
sam_homepath,
|
|
sam_workstations,
|
|
sam_domain;
|
|
SID
|
|
sid,
|
|
pgroup_sid;
|
|
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_flag; // reserved for future use
|
|
bool
|
|
isDisabled, // account disabled?
|
|
isCreateHome, // create homedir
|
|
isCreateMailBox, // create mailbox
|
|
isCopySkel, // copy skeleton
|
|
isDeleteHome, // delete home dir
|
|
isDeleteMailBox; // delete mailbox
|
|
};
|
|
|
|
class KUsers {
|
|
public:
|
|
enum Cap {
|
|
Cap_ReadOnly = 1,
|
|
Cap_Passwd = 2,
|
|
Cap_Shadow = 4,
|
|
Cap_InetOrg = 8,
|
|
Cap_Samba = 16,
|
|
Cap_Disable_POSIX = 32,
|
|
Cap_BSD = 64
|
|
};
|
|
typedef TQPtrListIterator<KUser> DelIt;
|
|
typedef TQPtrListIterator<KUser> AddIt;
|
|
typedef TQMapIterator<KUser*, KUser> ModIt;
|
|
|
|
TQPtrList<KUser> mDelSucc;
|
|
TQPtrList<KUser> mAddSucc;
|
|
TQMap<KUser*, KUser> mModSucc;
|
|
|
|
KUsers(KUserPrefsBase *cfg);
|
|
virtual ~KUsers();
|
|
KUser *lookup(const TQString & name);
|
|
KUser *lookup(uid_t uid);
|
|
KUser *lookup_sam( const SID &sid );
|
|
KUser *lookup_sam( const TQString &sid );
|
|
KUser *lookup_sam( uint rid );
|
|
|
|
int getCaps() { return caps; }
|
|
const TQString &getDOMSID() const;
|
|
|
|
KUser *first();
|
|
KUser *next();
|
|
uint count() const;
|
|
KUser *operator[](uint num);
|
|
|
|
void add( KUser *user );
|
|
void del( KUser *user );
|
|
void mod( KUser *uold, const KUser &unew );
|
|
void commit();
|
|
void cancelMods();
|
|
|
|
enum {
|
|
NO_FREE = (uid_t) -1
|
|
};
|
|
|
|
/**
|
|
* May be reimplemented in descendant classes.
|
|
* It should return the first available UID, or KUsers::NO_FREE if no more UID.
|
|
*/
|
|
virtual uid_t first_free();
|
|
/**
|
|
* May be reimplemented in descendant classes.
|
|
* It should return the first available user RID, or 0 if no more RID.
|
|
*/
|
|
virtual uint first_free_sam();
|
|
/**
|
|
* Must be reimplemented in various backends. It should encode @param password
|
|
* into the appropriate fields in @param user.
|
|
*/
|
|
virtual void createPassword( KUser *user, const TQString &password ) = 0;
|
|
/**
|
|
* Must load the users from the storage backend.
|
|
*/
|
|
virtual bool reload() = 0;
|
|
/**
|
|
* Must write changes (in mDel, mAdd and mMod) to the storage backend. It must
|
|
* write successful modifications into mDelSucc, mAddSucc and mModSucc.
|
|
*/
|
|
virtual bool dbcommit() = 0;
|
|
|
|
protected:
|
|
TQPtrList<KUser> mUsers;
|
|
int caps;
|
|
KUserPrefsBase *mCfg;
|
|
|
|
TQPtrList<KUser> mDel;
|
|
TQPtrList<KUser> mAdd;
|
|
TQMap<KUser*, KUser> mMod;
|
|
|
|
TQString domsid;
|
|
|
|
bool doCreate( KUser *user );
|
|
bool doDelete( KUser *user );
|
|
void parseGecos( const char *gecos, TQString &name,
|
|
TQString &field1, TQString &field2, TQString &field3 );
|
|
void fillGecos( KUser *user, const char *gecos );
|
|
|
|
};
|
|
|
|
} //namespace KU
|
|
|
|
#endif // _KU_USER_H_
|