/* Copyright (C) 2015 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 2002 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 2001 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ #include #include #include #include static int init = 0; static char *grp = 0; static struct group g; static char *mem[2]; static char def_name[] = "user"; static char def_grp[] = "dos"; static char def_passwd[] = ""; static void grp_init(void) { char *p; p = getenv("USER"); if (p == 0) p = getenv("LOGNAME"); if (p) { mem[0] = (char *)malloc(strlen(p) + 1); if (mem[0] == 0) mem[0] = def_name; else strcpy(mem[0], p); } else mem[0] = def_name; mem[1] = 0; p = getenv("GROUP"); if (p) { grp = (char *)malloc(strlen(p)+1); if (grp == 0) grp = def_grp; else strcpy(grp, p); } else grp = def_grp; g.gr_gid = getgid(); g.gr_mem = mem; g.gr_name = grp; g.gr_passwd = def_passwd; } struct group * getgrgid(gid_t gid) { if (gid != getgid()) return 0; if (init == 0) grp_init(); return &g; } struct group * getgrnam(const char *name) { if (init == 0) grp_init(); if (strcmp(name, grp)) return 0; return &g; }