95 lines
1.9 KiB
C
95 lines
1.9 KiB
C
|
/*
|
||
|
* grotesque hack to get these functions working.
|
||
|
*/
|
||
|
|
||
|
#include <sys/types.h>
|
||
|
#include <compat/pwd.h>
|
||
|
#include <string.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <unistd.h>
|
||
|
#include <fcntl.h>
|
||
|
#include <pwd.h>
|
||
|
#include <grp.h>
|
||
|
|
||
|
/*
|
||
|
* group_from_gid()
|
||
|
* caches the name (if any) for the gid. If noname clear, we always
|
||
|
* return the stored name (if valid or invalid match).
|
||
|
* We use a simple hash table.
|
||
|
* Return
|
||
|
* Pointer to stored name (or a empty string)
|
||
|
*/
|
||
|
const char *
|
||
|
group_from_gid(gid_t gid, int noname)
|
||
|
{
|
||
|
static char buf[16];
|
||
|
struct group *g = getgrgid(gid);
|
||
|
if (g == NULL) {
|
||
|
if (noname) {
|
||
|
return NULL;
|
||
|
} else {
|
||
|
sprintf(buf, "%d", gid);
|
||
|
return buf;
|
||
|
}
|
||
|
}
|
||
|
return g->gr_name;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* user_from_uid()
|
||
|
* caches the name (if any) for the uid. If noname clear, we always
|
||
|
* return the stored name (if valid or invalid match).
|
||
|
* We use a simple hash table.
|
||
|
* Return
|
||
|
* Pointer to stored name (or a empty string)
|
||
|
*/
|
||
|
const char *
|
||
|
user_from_uid(uid_t uid, int noname)
|
||
|
{
|
||
|
static char buf[16];
|
||
|
struct passwd *p = getpwuid(uid);
|
||
|
if (p == NULL) {
|
||
|
if (noname) {
|
||
|
return NULL;
|
||
|
} else {
|
||
|
sprintf(buf, "%d", uid);
|
||
|
return buf;
|
||
|
}
|
||
|
}
|
||
|
return p->pw_name;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* uid_from_user()
|
||
|
* caches the uid for a given user name. We use a simple hash table.
|
||
|
* Return
|
||
|
* the uid (if any) for a user name, or a -1 if no match can be found
|
||
|
*/
|
||
|
int
|
||
|
uid_from_user(const char *name, uid_t *uid)
|
||
|
{
|
||
|
struct passwd *p = getpwnam(name);
|
||
|
if (p == NULL) {
|
||
|
return -1;
|
||
|
}
|
||
|
*uid = p->pw_uid;
|
||
|
return *uid;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* gid_from_group()
|
||
|
* caches the gid for a given group name. We use a simple hash table.
|
||
|
* Return
|
||
|
* the gid (if any) for a group name, or a -1 if no match can be found
|
||
|
*/
|
||
|
int
|
||
|
gid_from_group(const char *name, gid_t *gid)
|
||
|
{
|
||
|
struct group *g = getgrnam(name);
|
||
|
if (g == NULL) {
|
||
|
return -1;
|
||
|
}
|
||
|
*gid = g->gr_gid;
|
||
|
return *gid;
|
||
|
}
|