diff options
Diffstat (limited to 'usr/src/cmd/chown/chown.c')
-rw-r--r-- | usr/src/cmd/chown/chown.c | 64 |
1 files changed, 34 insertions, 30 deletions
diff --git a/usr/src/cmd/chown/chown.c b/usr/src/cmd/chown/chown.c index d5912c9aa3..f5d637b1ea 100644 --- a/usr/src/cmd/chown/chown.c +++ b/usr/src/cmd/chown/chown.c @@ -171,7 +171,6 @@ main(int argc, char *argv[]) break; } } - /* * Check for sufficient arguments * or a usage error. @@ -192,49 +191,54 @@ main(int argc, char *argv[]) */ if ((grpp = strchr(argv[0], ':')) != NULL) { *grpp++ = 0; + if ((grp = getgrnam(grpp)) != NULL) { + gid = grp->gr_gid; + } else { + if (isnumber(grpp)) { + errno = 0; + gid = (gid_t)strtol(grpp, NULL, 10); + if (errno != 0) { + if (errno == ERANGE) { + (void) fprintf(stderr, gettext( + "chown: group id too large\n")); + exit(2); + } else { + (void) fprintf(stderr, gettext( + "chown: invalid group id\n")); + exit(2); + } + } + } else { + (void) fprintf(stderr, gettext( + "chown: unknown group id %s\n"), grpp); + exit(2); + } + } + } - if (isnumber(grpp)) { + if ((pwd = getpwnam(argv[0])) != NULL) { + uid = pwd->pw_uid; + } else { + if (isnumber(argv[0])) { errno = 0; - gid = (gid_t)strtol(grpp, NULL, 10); + uid = (uid_t)strtol(argv[0], NULL, 10); if (errno != 0) { if (errno == ERANGE) { (void) fprintf(stderr, gettext( - "chown: group id too large\n")); + "chown: user id too large\n")); exit(2); } else { (void) fprintf(stderr, gettext( - "chown: invalid group id\n")); + "chown: invalid user id\n")); exit(2); } } - } else if ((grp = getgrnam(grpp)) == NULL) { + } else { (void) fprintf(stderr, gettext( - "chown: unknown group id %s\n"), grpp); + "chown: unknown user id %s\n"), argv[0]); exit(2); - } else - gid = grp->gr_gid; - } - - if (isnumber(argv[0])) { - errno = 0; - uid = (uid_t)strtol(argv[0], NULL, 10); - if (errno != 0) { - if (errno == ERANGE) { - (void) fprintf(stderr, gettext( - "chown: user id too large\n")); - exit(2); - } else { - (void) fprintf(stderr, gettext( - "chown: invalid user id\n")); - exit(2); - } } - } else if ((pwd = getpwnam(argv[0])) == NULL) { - (void) fprintf(stderr, gettext( - "chown: unknown user id %s\n"), argv[0]); - exit(2); - } else - uid = pwd->pw_uid; + } for (c = 1; c < argc; c++) { tree = NULL; |