diff options
Diffstat (limited to 'tdecore/kuser.h')
-rw-r--r-- | tdecore/kuser.h | 384 |
1 files changed, 384 insertions, 0 deletions
diff --git a/tdecore/kuser.h b/tdecore/kuser.h new file mode 100644 index 000000000..5c43b6b69 --- /dev/null +++ b/tdecore/kuser.h @@ -0,0 +1,384 @@ +/* + * KUser - represent a user/account + * Copyright (C) 2002-2003 Tim Jansen <tim@tjansen.de> + * Copyright (C) 2003 Oswald Buddenhagen <ossi@kde.org> + * Copyright (C) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * 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 KUSER_H +#define KUSER_H + +#include "ksharedptr.h" + +class KUserGroup; +class TQString; +class TQStringList; +class KUserPrivate; +struct passwd; +template <class T> class TQValueList; + +/** + * @short Represents a user on your system + * + * This class represents a user on your system. You can either get + * information about the current user, of fetch information about + * a user on the system. Instances of this class will be explicitly shared, + * so copying objects is very cheap and you can safely pass objects by value. + * + * @author Tim Jansen <tim@tjansen.de> + * @since 3.2 + */ +class KDECORE_EXPORT KUser { + +public: + + enum UIDMode { + UseEffectiveUID, ///< Use the effective user id. + UseRealUserID ///< Use the real user id. + }; + + /** + * Creates an object that contains information about the current user. + * (as returned by getuid(2) or geteuid(2), taking $LOGNAME/$USER into + * account). + * @param mode if #UseEffectiveUID is passed the effective + * user is returned. + * If #UseRealUserID is passed the real user will be + * returned. + * The real UID will be different than the effective UID in setuid + * programs; in + * such a case use the effective UID for checking permissions, and + * the real UID for displaying information about the user. + */ + // XXX KDE4: Make this explicit + KUser(UIDMode mode = UseEffectiveUID); + + /** + * Creates an object for the user with the given user id. + * If the user does not exist isValid() will return false. + * @param uid the user id + */ + // XXX KDE4: Make this explicit; give parameter as uid_t instead of "long" + KUser(long uid); + + /** + * Creates an object that contains information about the user with the given + * name. If the user does not exist isValid() will return false. + * + * @param name the name of the user + */ + // XXX KDE4: Make this explicit + KUser(const TQString& name); + + /** + * Creates an object that contains information about the user with the given + * name. If the user does not exist isValid() will return false. + * + * @param name the name of the user + */ + // XXX KDE4: Make this explicit + KUser(const char *name); + + /** + * Creates an object from a passwd structure. + * If the pointer is null isValid() will return false. + * + * @param p the passwd structure to create the user from + */ + // XXX KDE4: Make this explicit + KUser(struct passwd *p); + + /** + * Creates an object from another KUser object + * @param user the user to create the new object from + */ + KUser(const KUser & user); + + /** + * Copies a user + * @param user the user to copy + * @return this object + */ + KUser& operator =(const KUser& user); + + /** + * Two KUser objects are equal if isValid() is true + * and the uid() are identical. + */ + bool operator ==(const KUser& user) const; + + /** + * Two KUser objects are not equal if either isValid() is + * not true or uid() are not identical. + */ + bool operator !=(const KUser &user) const; + + /** + * Returns true if the user is valid. A KUser object can be invalid if + * you created it with an non-existing uid or name. + * @return true if the user is valid + */ + bool isValid() const; + + /** + * Returns the user id of the user. + * @return the id of the user or -1 if user is invalid + */ + // XXX KDE4: Make this return uid_t + long uid() const; + + + /** + * Returns the group id of the user. + * @return the id of the group or -1 if user is invalid + */ + // XXX KDE4: Make this return gid_t + long gid() const; + + /** + * Checks whether the user it the super user (root). + * @return true if the user is root + */ + bool isSuperUser() const; + + /** + * The login name of the user. + * @return the login name of the user or TQString::null if user is invalid + */ + TQString loginName() const; + + /** + * The full name of the user. + * @return the full name of the user or TQString::null if user is invalid + */ + TQString fullName() const; + + /** + * The user's room number. + * @return the room number of the user or TQString::null if not set or the + * user is invalid + */ + TQString roomNumber() const; + + /** + * The user's work phone. + * @return the work phone of the user or TQString::null if not set or the + * user is invalid + */ + TQString workPhone() const; + + /** + * The user's home phone. + * @return the home phone of the user or TQString::null if not set or the + * user is invalid + */ + TQString homePhone() const; + + /** + * The path to the user's home directory. + * @return the home directory of the user or TQString::null if the + * user is invalid + */ + TQString homeDir() const; + + /** + * The path to the user's login shell. + * @return the login shell of the user or TQString::null if the + * user is invalid + */ + TQString shell() const; + + /** + * Returns all groups of the user + * @return all groups of the user + */ + TQValueList<KUserGroup> groups() const; + + /** + * Returns all group names of the user + * @return all group names of the user + */ + TQStringList groupNames() const; + + + /** + * Destructor. + */ + ~KUser(); + + /** + * Returns all users of the system. + * @return all users of the system. + */ + static TQValueList<KUser> allUsers(); + + /** + * Returns all user names of the system. + * @return all user names of the system. + */ + static TQStringList allUserNames(); + +private: + KSharedPtr<KUserPrivate> d; + void fillPasswd(struct passwd* p); + void fillName(const char* name); +}; + +class KUserGroupPrivate; + +struct group; + +/** + * @short Represents a group on your system + * + * This class represents a group on your system. You can either get + * information about the group of the current user, of fetch information about + * a group on the system. Instances of this class will be explicitly shared, + * so copying objects is very cheap and you can safely pass objects by value. + * + * @author Jan Schaefer <j_schaef@informatik.uni-kl.de> + * @since 3.3 + */ +class KDECORE_EXPORT KUserGroup { + +public: + + /** + * Create an object from the group of the current user. + * @param mode if #KUser::UseEffectiveUID is passed the effective user + * will be used. If #KUser::UseRealUserID is passed the real user + * will be used. + * The real UID will be different than the effective UID in setuid + * programs; in such a case use the effective UID for checking + * permissions, and the real UID for displaying information about + * the group associated with the user. + */ + explicit KUserGroup(KUser::UIDMode mode = KUser::UseEffectiveUID); + + /** + * Create an object from a group id. + * If the group does not exist, isValid() will return false. + * @param gid the group id + */ + // XXX KDE4: Give parameter as gid_t instead of "long" + explicit KUserGroup(long gid); + + /** + * Create an object from a group name. + * If the group does not exist, isValid() will return false. + * @param name the name of the group + */ + explicit KUserGroup(const TQString& name); + + /** + * Create an object from a group name. + * If the group does not exist, isValid() will return false. + * @param name the name of the group + */ + explicit KUserGroup(const char *name); + + /** + * Creates an object from a group structure. + * If the pointer is null, isValid() will return false. + * @param g the group structure to create the group from. + */ + explicit KUserGroup(struct group *g); + + /** + * Creates a new KUserGroup instance from another KUserGroup object + * @param group the KUserGroup to copy + */ + KUserGroup(const KUserGroup & group); + + /** + * Copies a group + * @param group the group that should be copied + * @return this group + */ + KUserGroup& operator =(const KUserGroup& group); + + /** + * Two KUserGroup objects are equal if isValid() is true + * and gid() are identical + * @return true if the groups are identical + */ + bool operator ==(const KUserGroup& group) const; + + /** + * Two KUserGroup objects are not equal if either + * isValid() is not true or gid() are not identical + * @return true if the groups are not identical + */ + bool operator !=(const KUserGroup& group) const; + + /** + * Returns wether the group is valid. + * A KUserGroup object can be invalid if it is + * created with a non-existing gid or name. + * @return true if the group is valid + */ + bool isValid() const; + + /** + * Returns the group id of the group. + * @return the group id of the group or -1 if the group is invalid + */ + // XXX KDE4: Return gid_t instead of "long" + long gid() const; + + /** + * The name of the group. + * @return the name of the group + */ + TQString name() const; + + /** + * Returns a list of all users of the group. + * @return a list of all users of the group + */ + const TQValueList<KUser>& users() const; + + /** + * Returns a list of all user login names of the group. + * @return a list of all user login names of the group + */ + TQStringList userNames() const; + + + /** + * Destructor. + */ + ~KUserGroup(); + + /** + * Returns a list of all groups on this system + */ + static TQValueList<KUserGroup> allGroups(); + + /** + * Returns a list of all group names on this system + */ + static TQStringList allGroupNames(); + +private: + KSharedPtr<KUserGroupPrivate> d; + void fillGroup(struct group* g); + void fillName(const char* name); +}; + + +#endif |