#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pwd.h>
char* win32getlogin();
static char *lookup_env (char **);
static char *login_strings[] =
{
"LOGIN", "USER", "MAILNAME", (char *) 0
};
static char *group_strings[] =
{
"GROUP", (char *) 0
};
static char *anonymous = "anonymous";
static char *home_dir = ".";
static char *login_shell = "not command.com!";
static char *login = (char *) 0;
static char *group = (char *) 0;
static struct passwd pw;
static struct group gr;
struct passwd *
getpwuid (int uid)
{
pw.pw_name = getlogin ();
pw.pw_dir = home_dir;
pw.pw_shell = login_shell;
pw.pw_uid = 0;
return &pw;
}
struct passwd *
getpwnam (char *name)
{
return (struct passwd *) 0;
}
struct group *
getgrgid (int uid)
{
gr.gr_name = getgr_name ();
gr.gr_gid = 0;
return &gr;
}
struct group *
getgrnam (char *name)
{
return (struct group *) 0;
}
char *
getlogin ()
{
if (!login)
login = win32getlogin();
if (!login)
login = lookup_env (login_strings);
if (!login)
login = anonymous;
return login;
}
char *
getgr_name ()
{
if (!group)
group = lookup_env (group_strings);
if (!group)
group = anonymous;
return group;
}
int
getuid ()
{
return 0;
}
int
getgid ()
{
return 0;
}
int
geteuid ()
{
return 0;
}
int
getegid ()
{
return 0;
}
struct passwd *
getpwent ()
{
return (struct passwd *) 0;
}
void
setpwent ()
{
}
void
endpwent ()
{
}
void
endgrent ()
{
}
int
getgroups (int ngroups, int *groups)
{
*groups = 0;
return 1;
}
static char *
lookup_env (char *table[])
{
char *ptr;
char *entry;
size_t len;
while (*table && !(ptr = getenv (*table++))) ;
if (!ptr)
return (char *) 0;
len = strcspn (ptr, " \n\t\n\r");
if (!(entry = malloc (len + 1)))
{
fprintf (stderr, "Out of memory.\nStop.");
exit (-1);
}
strncpy (entry, ptr, len);
entry[len] = '\0';
return entry;
}