=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/id/id.c,v retrieving revision 1.19 retrieving revision 1.20 diff -c -r1.19 -r1.20 *** src/usr.bin/id/id.c 2009/10/27 23:59:39 1.19 --- src/usr.bin/id/id.c 2013/09/06 19:48:46 1.20 *************** *** 1,4 **** ! /* $OpenBSD: id.c,v 1.19 2009/10/27 23:59:39 deraadt Exp $ */ /*- * Copyright (c) 1991, 1993 --- 1,4 ---- ! /* $OpenBSD: id.c,v 1.20 2013/09/06 19:48:46 okan Exp $ */ /*- * Copyright (c) 1991, 1993 *************** *** 31,36 **** --- 31,37 ---- #include + #include #include #include #include *************** *** 38,44 **** #include #include #include - #include void current(void); void pretty(struct passwd *); --- 39,44 ---- *************** *** 56,64 **** int Gflag, ch, gflag, nflag, pflag, rflag, uflag; uid_t uid; gid_t gid; Gflag = gflag = nflag = pflag = rflag = uflag = 0; ! while ((ch = getopt(argc, argv, "Ggnpru")) != -1) switch(ch) { case 'G': Gflag = 1; --- 56,81 ---- int Gflag, ch, gflag, nflag, pflag, rflag, uflag; uid_t uid; gid_t gid; + const char *opts; Gflag = gflag = nflag = pflag = rflag = uflag = 0; ! ! if (strcmp(getprogname(), "groups") == 0) { ! Gflag = 1; ! nflag = 1; ! opts = ""; ! if (argc > 2) ! usage(); ! } else if (strcmp(getprogname(), "whoami") == 0) { ! uflag = 1; ! nflag = 1; ! opts = ""; ! if (argc > 1) ! usage(); ! } else ! opts = "Ggnpru"; ! ! while ((ch = getopt(argc, argv, opts)) != -1) switch(ch) { case 'G': Gflag = 1; *************** *** 85,91 **** argc -= optind; argv += optind; ! switch(Gflag + gflag + pflag + uflag) { case 1: break; case 0: --- 102,108 ---- argc -= optind; argv += optind; ! switch (Gflag + gflag + pflag + uflag) { case 1: break; case 0: *************** *** 96,101 **** --- 113,121 ---- usage(); } + if (strcmp(opts, "") != 0 && argc > 1) + usage(); + pw = *argv ? who(*argv) : NULL; if (gflag) { *************** *** 155,161 **** (void)printf("uid\t%s\n", pw->pw_name); else (void)printf("uid\t%u\n", rid); ! if ((eid = geteuid()) != rid) { if ((pw = getpwuid(eid))) (void)printf("euid\t%s\n", pw->pw_name); --- 175,181 ---- (void)printf("uid\t%s\n", pw->pw_name); else (void)printf("uid\t%u\n", rid); ! if ((eid = geteuid()) != rid) { if ((pw = getpwuid(eid))) (void)printf("euid\t%s\n", pw->pw_name); *************** *** 302,311 **** void usage(void) { ! (void)fprintf(stderr, "usage: id [user]\n" ! " id -G [-n] [user]\n" ! " id -g [-nr] [user]\n" ! " id -p [user]\n" ! " id -u [-nr] [user]\n"); exit(1); } --- 322,337 ---- void usage(void) { ! if (strcmp(getprogname(), "groups") == 0) { ! (void)fprintf(stderr, "usage: groups [user]\n"); ! } else if (strcmp(getprogname(), "whoami") == 0) { ! (void)fprintf(stderr, "usage: whoami\n"); ! } else { ! (void)fprintf(stderr, "usage: id [user]\n"); ! (void)fprintf(stderr, " id -G [-n] [user]\n"); ! (void)fprintf(stderr, " id -g [-nr] [user]\n"); ! (void)fprintf(stderr, " id -p [user]\n"); ! (void)fprintf(stderr, " id -u [-nr] [user]\n"); ! } exit(1); }