summaryrefslogtreecommitdiff
path: root/usr/src/cmd/chown/chown.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/chown/chown.c')
-rw-r--r--usr/src/cmd/chown/chown.c64
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;