Allow numeric uid & gid in chown

This makes it more like the POSIX version which accepts number or name.
This commit is contained in:
Andrew Stadler 2010-02-12 13:46:58 -08:00
parent 9b0bf52944
commit 715c889713
1 changed files with 18 additions and 9 deletions

View File

@ -35,19 +35,29 @@ int chown_main(int argc, char **argv)
gid_t gid = -1; // passing -1 to chown preserves current group
pw = getpwnam(user);
if (pw == NULL) {
fprintf(stderr, "No such user '%s'\n", user);
return 10;
if (pw != NULL) {
uid = pw->pw_uid;
} else {
char* endptr;
uid = (int) strtoul(user, &endptr, 0);
if (endptr == user) { // no conversion
fprintf(stderr, "No such user '%s'\n", user);
return 10;
}
}
uid = pw->pw_uid;
if (group != NULL) {
grp = getgrnam(group);
if (grp == NULL) {
fprintf(stderr, "No such group '%s'\n", group);
return 10;
if (grp != NULL) {
gid = grp->gr_gid;
} else {
char* endptr;
gid = (int) strtoul(group, &endptr, 0);
if (endptr == group) { // no conversion
fprintf(stderr, "No such group '%s'\n", group);
return 10;
}
}
gid = grp->gr_gid;
}
for (i = 2; i < argc; i++) {
@ -59,4 +69,3 @@ int chown_main(int argc, char **argv)
return 0;
}