[BACK]Return to id.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / id

Diff for /src/usr.bin/id/id.c between version 1.13 and 1.14

version 1.13, 2003/06/10 22:20:47 version 1.14, 2004/01/07 22:18:14
Line 64 
Line 64 
 {  {
         struct group *gr;          struct group *gr;
         struct passwd *pw;          struct passwd *pw;
         int Gflag, ch, gflag, id, nflag, pflag, rflag, uflag;          int Gflag, ch, gflag, nflag, pflag, rflag, uflag;
           uid_t uid;
           gid_t gid;
   
         Gflag = gflag = nflag = pflag = rflag = uflag = 0;          Gflag = gflag = nflag = pflag = rflag = uflag = 0;
         while ((ch = getopt(argc, argv, "Ggnpru")) != -1)          while ((ch = getopt(argc, argv, "Ggnpru")) != -1)
Line 108 
Line 110 
         pw = *argv ? who(*argv) : NULL;          pw = *argv ? who(*argv) : NULL;
   
         if (gflag) {          if (gflag) {
                 id = pw ? pw->pw_gid : rflag ? getgid() : getegid();                  gid = pw ? pw->pw_gid : rflag ? getgid() : getegid();
                 if (nflag && (gr = getgrgid(id)))                  if (nflag && (gr = getgrgid(gid)))
                         (void)printf("%s\n", gr->gr_name);                          (void)printf("%s\n", gr->gr_name);
                 else                  else
                         (void)printf("%u\n", id);                          (void)printf("%u\n", gid);
                 exit(0);                  exit(0);
         }          }
   
         if (uflag) {          if (uflag) {
                 id = pw ? pw->pw_uid : rflag ? getuid() : geteuid();                  uid = pw ? pw->pw_uid : rflag ? getuid() : geteuid();
                 if (nflag && (pw = getpwuid(id)))                  if (nflag && (pw = getpwuid(uid)))
                         (void)printf("%s\n", pw->pw_name);                          (void)printf("%s\n", pw->pw_name);
                 else                  else
                         (void)printf("%u\n", id);                          (void)printf("%u\n", uid);
                 exit(0);                  exit(0);
         }          }
   
Line 188 
Line 190 
         struct group *gr;          struct group *gr;
         struct passwd *pw;          struct passwd *pw;
         int cnt, ngroups;          int cnt, ngroups;
         uid_t id, eid;          uid_t uid, euid;
         gid_t groups[NGROUPS], gid, lastgid;          gid_t groups[NGROUPS], gid, egid, lastgid;
         char *fmt;          char *fmt;
   
         id = getuid();          uid = getuid();
         (void)printf("uid=%u", id);          (void)printf("uid=%u", uid);
         if ((pw = getpwuid(id)))          if ((pw = getpwuid(uid)))
                 (void)printf("(%s)", pw->pw_name);                  (void)printf("(%s)", pw->pw_name);
         if ((eid = geteuid()) != id) {          if ((euid = geteuid()) != uid) {
                 (void)printf(" euid=%u", eid);                  (void)printf(" euid=%u", euid);
                 if ((pw = getpwuid(eid)))                  if ((pw = getpwuid(euid)))
                         (void)printf("(%s)", pw->pw_name);                          (void)printf("(%s)", pw->pw_name);
         }          }
         id = getgid();          gid = getgid();
         (void)printf(" gid=%u", id);          (void)printf(" gid=%u", gid);
         if ((gr = getgrgid(id)))          if ((gr = getgrgid(gid)))
                 (void)printf("(%s)", gr->gr_name);                  (void)printf("(%s)", gr->gr_name);
         if ((eid = getegid()) != id) {          if ((egid = getegid()) != gid) {
                 (void)printf(" egid=%u", eid);                  (void)printf(" egid=%u", egid);
                 if ((gr = getgrgid(eid)))                  if ((gr = getgrgid(egid)))
                         (void)printf("(%s)", gr->gr_name);                          (void)printf("(%s)", gr->gr_name);
         }          }
         if ((ngroups = getgroups(NGROUPS, groups))) {          if ((ngroups = getgroups(NGROUPS, groups))) {
Line 227 
Line 229 
 void  void
 user(struct passwd *pw)  user(struct passwd *pw)
 {  {
           gid_t gid, groups[NGROUPS + 1];
           int cnt, ngroups;
           uid_t uid;
         struct group *gr;          struct group *gr;
         char *fmt;          char *fmt;
         int cnt, id, lastid, ngroups, groups[NGROUPS + 1];  
   
         id = pw->pw_uid;          uid = pw->pw_uid;
         (void)printf("uid=%u(%s)", id, pw->pw_name);          (void)printf("uid=%u(%s)", uid, pw->pw_name);
         (void)printf(" gid=%u", pw->pw_gid);          (void)printf(" gid=%u", pw->pw_gid);
         if ((gr = getgrgid(pw->pw_gid)))          if ((gr = getgrgid(pw->pw_gid)))
                 (void)printf("(%s)", gr->gr_name);                  (void)printf("(%s)", gr->gr_name);
         ngroups = NGROUPS + 1;          ngroups = NGROUPS + 1;
         (void) getgrouplist(pw->pw_name, pw->pw_gid, groups, &ngroups);          (void) getgrouplist(pw->pw_name, pw->pw_gid, groups, &ngroups);
         fmt = " groups=%u";          fmt = " groups=%u";
         for (lastid = -1, cnt = 0; cnt < ngroups; ++cnt) {          for (cnt = 0; cnt < ngroups;) {
                 if (lastid == (id = groups[cnt]))                  gid = groups[cnt];
                         continue;                  (void)printf(fmt, gid);
                 (void)printf(fmt, id);  
                 fmt = ", %u";                  fmt = ", %u";
                 if ((gr = getgrgid(id)))                  if ((gr = getgrgid(gid)))
                         (void)printf("(%s)", gr->gr_name);                          (void)printf("(%s)", gr->gr_name);
                 lastid = id;                  /* Skip same gid entries. */
                   while (++cnt < ngroups && gid == groups[cnt]);
         }          }
         (void)printf("\n");          (void)printf("\n");
 }  }
Line 254 
Line 258 
 void  void
 group(struct passwd *pw, int nflag)  group(struct passwd *pw, int nflag)
 {  {
           int cnt, ngroups;
           gid_t gid, groups[NGROUPS + 1];
           uid_t uid;
         struct group *gr;          struct group *gr;
         int cnt, id, lastid, ngroups;  
         gid_t groups[NGROUPS + 1];  
         char *fmt;          char *fmt;
   
         if (pw) {          if (pw) {
Line 267 
Line 272 
                 ngroups = getgroups(NGROUPS, groups + 1) + 1;                  ngroups = getgroups(NGROUPS, groups + 1) + 1;
         }          }
         fmt = nflag ? "%s" : "%u";          fmt = nflag ? "%s" : "%u";
         for (lastid = -1, cnt = 0; cnt < ngroups; ++cnt) {          for (cnt = 0; cnt < ngroups;) {
                 if (lastid == (id = groups[cnt]))                  gid = groups[cnt];
                         continue;  
                 if (nflag) {                  if (nflag) {
                         if ((gr = getgrgid(id)))                          if ((gr = getgrgid(gid)))
                                 (void)printf(fmt, gr->gr_name);                                  (void)printf(fmt, gr->gr_name);
                         else                          else
                                 (void)printf(*fmt == ' ' ? " %u" : "%u",                                  (void)printf(*fmt == ' ' ? " %u" : "%u",
                                     id);                                      gid);
                         fmt = " %s";                          fmt = " %s";
                 } else {                  } else {
                         (void)printf(fmt, id);                          (void)printf(fmt, gid);
                         fmt = " %u";                          fmt = " %u";
                 }                  }
                 lastid = id;                  /* Skip same gid entries. */
                   while (++cnt < ngroups && gid == groups[cnt]);
         }          }
         (void)printf("\n");          (void)printf("\n");
 }  }
Line 290 
Line 295 
 who(char *u)  who(char *u)
 {  {
         struct passwd *pw;          struct passwd *pw;
         uid_t id;          uid_t uid;
         char *ep;          char *ep;
   
         /*          /*
Line 299 
Line 304 
          */           */
         if ((pw = getpwnam(u)))          if ((pw = getpwnam(u)))
                 return(pw);                  return(pw);
         id = strtoul(u, &ep, 10);          uid = strtoul(u, &ep, 10);
         if (*u && !*ep && (pw = getpwuid(id)))          if (*u && !*ep && (pw = getpwuid(uid)))
                 return(pw);                  return(pw);
         errx(1, "%s: No such user", u);          errx(1, "%s: No such user", u);
         /* NOTREACHED */          /* NOTREACHED */

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.14