diff options
author | Erik Andersen <andersen@codepoet.org> | 2000-02-07 05:29:42 +0000 |
---|---|---|
committer | Erik Andersen <andersen@codepoet.org> | 2000-02-07 05:29:42 +0000 |
commit | fac10d7c59f7db0facd5fb94de273310b9ec86e6 (patch) | |
tree | dccf8f905fc5807239883da9fca6597037d487fc /chmod_chown_chgrp.c | |
parent | 50bc101b7d6e847a9a0621ca3eb28c7117d095e5 (diff) | |
download | busybox-w32-fac10d7c59f7db0facd5fb94de273310b9ec86e6.tar.gz busybox-w32-fac10d7c59f7db0facd5fb94de273310b9ec86e6.tar.bz2 busybox-w32-fac10d7c59f7db0facd5fb94de273310b9ec86e6.zip |
A few minor updates. ;-)
Seriously though, read the Changelog for busybox 0.42,
which this is about to become...
-Erik
Diffstat (limited to 'chmod_chown_chgrp.c')
-rw-r--r-- | chmod_chown_chgrp.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/chmod_chown_chgrp.c b/chmod_chown_chgrp.c index 773f4b0c0..b4c5da936 100644 --- a/chmod_chown_chgrp.c +++ b/chmod_chown_chgrp.c | |||
@@ -21,10 +21,14 @@ | |||
21 | * | 21 | * |
22 | */ | 22 | */ |
23 | 23 | ||
24 | #include "internal.h" | ||
25 | #define BB_DECLARE_EXTERN | ||
26 | #define bb_need_invalid_option | ||
27 | #include "messages.c" | ||
28 | |||
24 | #include <stdio.h> | 29 | #include <stdio.h> |
25 | #include <grp.h> | 30 | #include <grp.h> |
26 | #include <pwd.h> | 31 | #include <pwd.h> |
27 | #include "internal.h" | ||
28 | 32 | ||
29 | 33 | ||
30 | static uid_t uid = -1; | 34 | static uid_t uid = -1; |
@@ -69,7 +73,7 @@ static int fileAction(const char *fileName, struct stat* statbuf) | |||
69 | case CHMOD_APP: | 73 | case CHMOD_APP: |
70 | /* Parse the specified modes */ | 74 | /* Parse the specified modes */ |
71 | if ( parse_mode(theMode, &(statbuf->st_mode)) == FALSE ) { | 75 | if ( parse_mode(theMode, &(statbuf->st_mode)) == FALSE ) { |
72 | fprintf(stderr, "%s: Unknown mode: %s\n", invocationName, theMode); | 76 | fprintf(stderr, "%s: unknown mode: %s\n", invocationName, theMode); |
73 | exit( FALSE); | 77 | exit( FALSE); |
74 | } | 78 | } |
75 | if (chmod(fileName, statbuf->st_mode) == 0) | 79 | if (chmod(fileName, statbuf->st_mode) == 0) |
@@ -84,6 +88,7 @@ int chmod_chown_chgrp_main(int argc, char **argv) | |||
84 | { | 88 | { |
85 | int recursiveFlag=FALSE; | 89 | int recursiveFlag=FALSE; |
86 | char *groupName; | 90 | char *groupName; |
91 | char *p; | ||
87 | const char *appUsage; | 92 | const char *appUsage; |
88 | 93 | ||
89 | whichApp = (strcmp(*argv, "chown")==0)? CHOWN_APP : (strcmp(*argv, "chmod")==0)? CHMOD_APP : CHGRP_APP; | 94 | whichApp = (strcmp(*argv, "chown")==0)? CHOWN_APP : (strcmp(*argv, "chmod")==0)? CHMOD_APP : CHGRP_APP; |
@@ -103,7 +108,7 @@ int chmod_chown_chgrp_main(int argc, char **argv) | |||
103 | recursiveFlag = TRUE; | 108 | recursiveFlag = TRUE; |
104 | break; | 109 | break; |
105 | default: | 110 | default: |
106 | fprintf(stderr, "Unknown option: %c\n", **argv); | 111 | fprintf(stderr, invalid_option, invocationName, **argv); |
107 | usage( appUsage); | 112 | usage( appUsage); |
108 | } | 113 | } |
109 | argc--; | 114 | argc--; |
@@ -117,14 +122,18 @@ int chmod_chown_chgrp_main(int argc, char **argv) | |||
117 | /* Find the selected group */ | 122 | /* Find the selected group */ |
118 | if ( whichApp==CHGRP_APP ) { | 123 | if ( whichApp==CHGRP_APP ) { |
119 | groupName = *argv; | 124 | groupName = *argv; |
120 | gid = my_getgrnam(groupName); | 125 | gid = strtoul(groupName, &p, 10); /* maybe it's already numeric */ |
126 | if (groupName == p) | ||
127 | gid = my_getgrnam(groupName); | ||
121 | if (gid == -1) | 128 | if (gid == -1) |
122 | goto bad_group; | 129 | goto bad_group; |
123 | } else { | 130 | } else { |
124 | groupName = strchr(*argv, '.'); | 131 | groupName = strchr(*argv, '.'); |
125 | if (groupName) { | 132 | if (groupName) { |
126 | *groupName++ = '\0'; | 133 | *groupName++ = '\0'; |
127 | gid = my_getgrnam(groupName); | 134 | gid = strtoul(groupName, &p, 10); |
135 | if (groupName == p) | ||
136 | gid = my_getgrnam(groupName); | ||
128 | if (gid == -1) | 137 | if (gid == -1) |
129 | goto bad_group; | 138 | goto bad_group; |
130 | } else | 139 | } else |
@@ -134,9 +143,11 @@ int chmod_chown_chgrp_main(int argc, char **argv) | |||
134 | 143 | ||
135 | /* Find the selected user (if appropriate) */ | 144 | /* Find the selected user (if appropriate) */ |
136 | if (whichApp==CHOWN_APP) { | 145 | if (whichApp==CHOWN_APP) { |
137 | uid = my_getpwnam(*argv); | 146 | uid = strtoul(*argv, &p, 10); /* if numeric ...*/ |
147 | if (*argv == p) | ||
148 | uid = my_getpwnam(*argv); | ||
138 | if (uid == -1) { | 149 | if (uid == -1) { |
139 | fprintf(stderr, "%s: Unknown user name: %s\n", invocationName, *argv); | 150 | fprintf(stderr, "%s: unknown user name: %s\n", invocationName, *argv); |
140 | exit( FALSE); | 151 | exit( FALSE); |
141 | } | 152 | } |
142 | } | 153 | } |
@@ -144,7 +155,7 @@ int chmod_chown_chgrp_main(int argc, char **argv) | |||
144 | 155 | ||
145 | /* Ok, ready to do the deed now */ | 156 | /* Ok, ready to do the deed now */ |
146 | if (argc <= 1) { | 157 | if (argc <= 1) { |
147 | fprintf(stderr, "%s: too few arguments", invocationName); | 158 | fprintf(stderr, "%s: too few arguments\n", invocationName); |
148 | exit( FALSE); | 159 | exit( FALSE); |
149 | } | 160 | } |
150 | while (argc-- > 1) { | 161 | while (argc-- > 1) { |
@@ -154,7 +165,7 @@ int chmod_chown_chgrp_main(int argc, char **argv) | |||
154 | exit(TRUE); | 165 | exit(TRUE); |
155 | 166 | ||
156 | bad_group: | 167 | bad_group: |
157 | fprintf(stderr, "%s: Unknown group name: %s\n", invocationName, groupName); | 168 | fprintf(stderr, "%s: unknown group name: %s\n", invocationName, groupName); |
158 | exit( FALSE); | 169 | exit( FALSE); |
159 | } | 170 | } |
160 | 171 | ||