kdelibs/kdecore/util/kuser.h

368 lines
10 KiB
C
Raw Normal View History

2014-11-13 01:04:59 +02:00
/*
* 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 <kdecore_export.h>
#include <ksharedptr.h>
#include <QString>
#include <QStringList>
#include <QList>
2014-11-13 01:04:59 +02:00
#include <sys/types.h>
class KUserGroup;
2014-11-13 01:04:59 +02:00
typedef uid_t K_UID;
typedef gid_t K_GID;
struct passwd;
struct group;
/**
* \class KUser kuser.h <KUser>
*
* @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>
*/
class KDECORE_EXPORT KUser
{
2014-11-13 01:04:59 +02:00
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.
*/
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
*/
explicit KUser(K_UID 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
*/
explicit KUser(const QString &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
*/
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
*/
explicit KUser(const 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 the uid() are identical.
* Invalid users never compare equal.
*/
bool operator==(const KUser &user) const;
/**
* Two KUser objects are not equal if uid() are not identical.
* Invalid users always compare unequal.
*/
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
*/
K_UID uid() const;
/**
* Returns the group id of the user.
* @return the id of the group or -1 if user is invalid
*/
K_GID gid() const;
/**
* Checks whether the user is 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 QString() if user is invalid
*/
QString loginName() const;
/**
* The path to the user's home directory.
* @return the home directory of the user or QString() if the
* user is invalid
*/
QString homeDir() const;
/**
* The path to the user's face file.
* @return the path to the user's face file or QString() if no
* face has been set
*/
QString faceIconPath() const;
/**
* The path to the user's login shell.
* @return the login shell of the user or QString() if the
* user is invalid
*/
QString shell() const;
/**
* Returns all groups of the user
* @return all groups of the user
*/
QList<KUserGroup> groups() const;
/**
* Returns all group names of the user
* @return all group names of the user
*/
QStringList groupNames() const;
enum UserProperty {
FullName = 0,
RoomNumber = 1,
WorkPhone = 2,
HomePhone = 3
};
/**
* Returns an extended property.
*
* @return a QString with the value of the property or an empty QString,
* if the property is not set
*/
QString property(UserProperty which) const;
/**
* Destructor.
*/
~KUser();
/**
* Returns all users of the system.
* @return all users of the system.
*/
static QList<KUser> allUsers();
/**
* Returns all user names of the system.
* @return all user names of the system.
*/
static QStringList allUserNames();
2014-11-13 01:04:59 +02:00
private:
class Private;
KSharedPtr<Private> d;
2014-11-13 01:04:59 +02:00
};
/**
* \class KUserGroup kuser.h <KUserGroup>
*
* @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>
*/
class KDECORE_EXPORT KUserGroup
{
2014-11-13 01:04:59 +02:00
public:
/**
* 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 QString &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);
/**
* 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
*/
explicit KUserGroup(K_GID gid);
/**
* 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(const 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 their gid()s are identical.
* Invalid groups never compare equal.
* @return true if the groups are identical
*/
bool operator==(const KUserGroup &group) const;
/**
* Two KUserGroup objects are not equal if their gid()s are not identical.
* Invalid groups always compare unequal.
* @return true if the groups are not identical
*/
bool operator!=(const KUserGroup &group) const;
/**
* Returns whether 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
*/
K_GID gid() const;
/**
* The name of the group.
* @return the name of the group
*/
QString name() const;
/**
* Returns a list of all users of the group.
* @return a list of all users of the group
*/
QList<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
*/
QStringList userNames() const;
/**
* Destructor.
*/
~KUserGroup();
/**
* Returns a list of all groups on this system
*/
static QList<KUserGroup> allGroups();
/**
* Returns a list of all group names on this system
*/
static QStringList allGroupNames();
2014-11-13 01:04:59 +02:00
private:
class Private;
KSharedPtr<Private> d;
2014-11-13 01:04:59 +02:00
};
#endif // KUSER_H