// Copyright (c) 2002 David Muse // See the COPYING file for more information. #ifndef RUDIMENTS_GROUPENTRY_H #define RUDIMENTS_GROUPENTRY_H #include <rudiments/private/config.h> #if !defined(HAVE_GETGRNAM_R) || !defined(HAVE_GETGRUID_R) #include <pthread.h> #endif #include <sys/types.h> #include <grp.h> // The groupentry class provides methods for retrieving entries from /etc/group class groupentry { public: // if you need to quickly look up a specific field, use one of // these methods static int getPassword(const char *groupname, char **password); static int getGroupId(const char *groupname, gid_t *groupid); static int getMembers(const char *groupname, char ***members); static int getName(gid_t groupid, char **name); static int getPassword(gid_t groupid, char **password); static int getMembers(gid_t groupid, char ***members); // if you need to look up a group entry and refer to multiple // fields, use these methods groupentry(); ~groupentry(); int initialize(const char *groupname); // looks up a group entry by name int initialize(gid_t groupid); // looks up a group entry by group id char *getName() const; char *getPassword() const; gid_t getGroupId() const; char **getMembers() const; void print() const; // prints out the group entry static int needsMutex(); // If your system doesn't support getgrnam_r() and // getgrgid_r() then this class needs a mutex to assure // thread safety. // // This method returns 1 if this class needs a mutex to // operate safely in a threaded environment and 0 // otherwise. static void setMutex(pthread_mutex_t *mutex); // Allows you to supply a mutex is the class needs it. // If your application is not multithreaded, then // there is no need to supply a mutex. #include <rudiments/private/groupentry.h> }; #ifdef ENABLE_RUDIMENTS_INLINES #include <rudiments/private/groupentryinlines.h> #endif #endif