X-Git-Url: https://git.saurik.com/apple/shell_cmds.git/blobdiff_plain/f14763b62d364f4921ecf13fcfdc9e2996b8e35e..06a885f378573fb30cd55792407f220c85a43ae5:/id/id.c?ds=sidebyside diff --git a/id/id.c b/id/id.c index 5c5647f..2567770 100644 --- a/id/id.c +++ b/id/id.c @@ -67,6 +67,7 @@ void id_print(struct passwd *, int, int, int); void pline(struct passwd *); void pretty(struct passwd *); void auditid(void); +void fullname(struct passwd *); void group(struct passwd *, int); void maclabel(void); void usage(void); @@ -86,10 +87,12 @@ main(int argc, char *argv[]) struct passwd *pw; int Gflag, Mflag, Pflag, ch, gflag, id, nflag, pflag, rflag, uflag; int Aflag; + int Fflag; const char *myname; Gflag = Mflag = Pflag = gflag = nflag = pflag = rflag = uflag = 0; Aflag = 0; + Fflag = 0; myname = strrchr(argv[0], '/'); myname = (myname != NULL) ? myname + 1 : argv[0]; @@ -103,13 +106,16 @@ main(int argc, char *argv[]) } while ((ch = getopt(argc, argv, - (isgroups || iswhoami) ? "" : "APGMagnpru")) != -1) + (isgroups || iswhoami) ? "" : "AFPGMagnpru")) != -1) switch(ch) { #ifdef USE_BSM_AUDIT case 'A': Aflag = 1; break; #endif + case 'F': + Fflag = 1; + break; case 'G': Gflag = 1; break; @@ -146,7 +152,7 @@ main(int argc, char *argv[]) if (iswhoami && argc > 0) usage(); - switch(Aflag + Gflag + Mflag + Pflag + gflag + pflag + uflag) { + switch(Aflag + Fflag + Gflag + Mflag + Pflag + gflag + pflag + uflag) { case 1: break; case 0: @@ -169,6 +175,11 @@ main(int argc, char *argv[]) } #endif + if (Fflag) { + fullname(pw); + exit(0); + } + if (gflag) { id = pw ? pw->pw_gid : rflag ? getgid() : getegid(); if (nflag && (gr = getgrgid(id))) @@ -359,13 +370,25 @@ auditid(void) } #endif +void +fullname(struct passwd *pw) +{ + + if (!pw) { + if ((pw = getpwuid(getuid())) == NULL) + err(1, "getpwuid"); + } + + (void)printf("%s\n", pw->pw_gecos); +} + void group(struct passwd *pw, int nflag) { struct group *gr; int cnt, id, lastid, ngroups; #ifdef __APPLE__ - gid_t *groups; + gid_t *groups = NULL; #else gid_t groups[NGROUPS + 1]; #endif @@ -387,7 +410,7 @@ group(struct passwd *pw, int nflag) #endif } else { #ifdef __APPLE__ - groups = malloc(NGROUPS + 1); + groups = malloc((NGROUPS + 1) * sizeof(gid_t)); #endif groups[0] = getgid(); ngroups = getgroups(NGROUPS, groups + 1) + 1; @@ -488,13 +511,14 @@ usage(void) else if (iswhoami) (void)fprintf(stderr, "usage: whoami\n"); else - (void)fprintf(stderr, "%s\n%s%s\n%s\n%s\n%s\n%s\n%s\n", + (void)fprintf(stderr, "%s\n%s%s\n%s\n%s\n%s\n%s\n%s\n%s\n", "usage: id [user]", #ifdef USE_BSM_AUDIT " id -A\n", #else "", #endif + " id -F [user]", " id -G [-n] [user]", " id -M", " id -P [user]",