From 2b8837b7efb2b94cf3c9d0e1a1a941050188badd Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Sat, 3 Aug 2019 08:20:04 -0400 Subject: more style --- id.c | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) (limited to 'id.c') diff --git a/id.c b/id.c index ea755a0..3d07c4a 100644 --- a/id.c +++ b/id.c @@ -17,6 +17,7 @@ * */ +#define _XOPEN_SOURCE 500 #include #include #include @@ -24,10 +25,6 @@ #include #include -const char *id_desc = "return user identity"; -const char *id_inv = - "id [user]\nid -G [-n] [user]\nid -g [-nr] user\nid -u [-nr] [user]"; - #define FULL 0 #define NAMES 1 #define NUMS 2 @@ -61,22 +58,29 @@ void id_printgids(char *user, int mode) } while (i < num_groups) { - if (i > 0) + if (i > 0) { putchar(sep); + } + switch (mode) { case NAMES: printf("%s", gr[i].gr_name); break; + case NUMS: printf("%u", gr[i].gr_gid); break; + default: printf("%u(%s)", gr[i].gr_gid, gr[i].gr_name); break; + } + free(gr[i].gr_name); i++; } + free(gr); } @@ -88,7 +92,7 @@ int main(int argc, char **argv) struct passwd pw; struct group gr; - while ((c = getopt(argc, argv, ":Ggunr")) != -1) { + while ((c = getopt(argc, argv, "Ggunr")) != -1) { switch (c) { case 'G': case 'g': @@ -97,44 +101,54 @@ int main(int argc, char **argv) return 1; mode = c; break; + case 'n': n = 1; break; + case 'r': r = 1; break; + default: return 1; } } - if ((mode == 0 && (n == 1 || r == 1)) || (mode == 'G' && r == 1)) + if ((mode == 0 && (n == 1 || r == 1)) || (mode == 'G' && r == 1)) { return 1; + } - if (optind >= argc) + if (optind >= argc) { pw = *getpwuid(mode == 'u' && r == 0 ? geteuid() : getuid()); - else if (optind == argc - 1) + } else if (optind == argc - 1) { pw = *getpwnam(argv[optind]); - else + } else { return 1; + } switch (mode) { case 'G': id_printgids(pw.pw_name, n ? NAMES : NUMS); break; + case 'g': gr = *getgrgid(r ? getgid() : getegid()); - if (n) + if (n) { printf("%s", gr.gr_name); - else + } else { printf("%u", gr.gr_gid); + } break; + case 'u': - if (n) + if (n) { printf("%s", pw.pw_name); - else + } else { printf("%u", pw.pw_uid); + } break; + default: gr = *getgrgid(pw.pw_uid == getuid()? getgid() : pw.pw_gid); printf("uid=%u(%s) gid=%u(%s)", pw.pw_uid, pw.pw_name, @@ -149,6 +163,7 @@ int main(int argc, char **argv) } id_printgids(pw.pw_name, FULL); } + printf("\n"); return 0; } -- cgit v1.2.1