// Copyright (c) 2002 David Muse
// See the COPYING file for more information.
#ifndef RUDIMENTS_SHADOWENTRY_H
#define RUDIMENTS_SHADOWENTRY_H
#include <rudiments/private/shadowentryincludes.h>
// The shadowentry class provides methods for retrieving
// entries from /etc/shadow
#ifdef RUDIMENTS_NAMESPACE
namespace rudiments {
#endif
class shadowentryprivate;
class shadowentry {
public:
// If you need to quickly look up ap specific field, use one
// of these mthods.
//
// These methods return true on success and false on failure.
static bool getEncryptedPassword(const char *username,
char **password);
static bool getLastChangeDate(
const char *username,
long *lstchg);
static bool getDaysBeforeChangeAllowed(
const char *username,
int *min);
static bool getDaysBeforeChangeRequired(
const char *username,
int *max);
static bool getDaysBeforeExpirationWarning(
const char *username,
int *warn);
static bool getDaysOfInactivityAllowed(
const char *username,
int *inact);
static bool getExpirationDate(
const char *username,
int *expire);
static bool getFlag(const char *username, int *flag);
// If you need to look up a shadow entry and refer to multiple
// fields, use these methods.
shadowentry();
shadowentry(const shadowentry &s);
shadowentry &operator=(const shadowentry &s);
~shadowentry();
bool initialize(const char *username);
// Looks up a shadow entry by name.
// Returns true on success and false on failure.
const char *getName() const;
const char *getEncryptedPassword() const;
long getLastChangeDate() const;
int getDaysBeforeChangeAllowed() const;
int getDaysBeforeChangeRequired() const;
int getDaysBeforeExpirationWarning() const;
int getDaysOfInactivityAllowed() const;
int getExpirationDate() const;
int getFlag() const;
void print() const;
// Prints out the shadow entry.
static bool needsMutex();
// If your system doesn't support getpwnam_r() and
// getpwuid_r() then this class needs a mutex to assure
// thread safety.
//
// This method returns true if this class needs a mutex
// to operate safely in a threaded environment and false
// otherwise.
static void setMutex(mutex *mtx);
// 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/shadowentry.h>
};
#ifdef RUDIMENTS_NAMESPACE
}
#endif
#endif