aboutsummaryrefslogtreecommitdiff
path: root/coreutils/chown.c
diff options
context:
space:
mode:
Diffstat (limited to 'coreutils/chown.c')
-rw-r--r--coreutils/chown.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/coreutils/chown.c b/coreutils/chown.c
index fddce7cf1..a45348a24 100644
--- a/coreutils/chown.c
+++ b/coreutils/chown.c
@@ -54,32 +54,38 @@ static int fileAction(const char *fileName, struct stat *statbuf,
54 54
55int chown_main(int argc, char **argv) 55int chown_main(int argc, char **argv)
56{ 56{
57 int retval = EXIT_SUCCESS;
58 char *groupName; 57 char *groupName;
58 int retval = EXIT_SUCCESS;
59 59
60 opt_complementary = "-2"; 60 opt_complementary = "-2";
61 getopt32(argc, argv, OPT_STR); 61 getopt32(argc, argv, OPT_STR);
62 argv += optind;
62 63
63 if (OPT_NODEREF) chown_func = lchown; 64 if (OPT_NODEREF) chown_func = lchown;
64 65
65 argv += optind;
66
67 /* First, check if there is a group name here */ 66 /* First, check if there is a group name here */
68 groupName = strchr(*argv, '.'); 67 groupName = strchr(*argv, '.'); /* deprecated? */
69 if (!groupName) { 68 if (!groupName) {
70 groupName = strchr(*argv, ':'); 69 groupName = strchr(*argv, ':');
71 } 70 }
72 71
73 /* Check for the username and groupname */ 72 /* First, try parsing "user[:[group]]" */
74 if (groupName) { 73 if (!groupName) { /* "user" */
75 *groupName++ = '\0'; 74 uid = get_ug_id(*argv, xuname2uid);
76 gid = get_ug_id(groupName, bb_xgetgrnam); 75 } else if (groupName == *argv) { /* ":group" */
76 gid = get_ug_id(groupName + 1, xgroup2gid);
77 } else {
78 struct bb_uidgid_t ugid;
79 if (!groupName[1]) /* "user:" */
80 *groupName = '\0';
81 if (!get_uidgid(&ugid, *argv, 1))
82 bb_error_msg_and_die("unknown user/group %s", *argv);
83 uid = ugid.uid;
84 gid = ugid.gid;
77 } 85 }
78 if (--groupName != *argv)
79 uid = get_ug_id(*argv, bb_xgetpwnam);
80 ++argv;
81 86
82 /* Ok, ready to do the deed now */ 87 /* Ok, ready to do the deed now */
88 argv++;
83 do { 89 do {
84 if (!recursive_action(*argv, 90 if (!recursive_action(*argv,
85 OPT_RECURSE, // recurse 91 OPT_RECURSE, // recurse