- //mode &= andWithMode;
- fprintf(stderr, "mode %d\n", mode);
- } else {
-
- /* Find the selected group */
- groupName = strchr(*argv, '.');
- if ( whichApp==TRUE && groupName )
- *groupName++ = '\0';
- else
- groupName = *argv;
- grp = getgrnam(groupName);
- if (grp == NULL) {
- fprintf(stderr, "%s: Unknown group name: %s\n", invocationName, groupName);
- exit( FALSE);
+
+ if (whichApp == CHMOD_APP) {
+ if (theMode==NULL)
+ theMode = *argv;
+ } else {
+
+ /* Find the selected group */
+ if (whichApp == CHGRP_APP) {
+ groupName = *argv;
+ gid = strtoul(groupName, &p, 10); /* maybe it's already numeric */
+ if (groupName == p)
+ gid = my_getgrnam(groupName);
+ } else {
+ groupName = strchr(*argv, '.');
+ if (groupName == NULL)
+ groupName = strchr(*argv, ':');
+ if (groupName) {
+ *groupName++ = '\0';
+ gid = strtoul(groupName, &p, 10);
+ if (groupName == p)
+ gid = my_getgrnam(groupName);
+ } else
+ gid = -1;
+ }
+
+
+ /* Find the selected user (if appropriate) */
+ if (whichApp == CHOWN_APP) {
+ uid = strtoul(*argv, &p, 10); /* if numeric ... */
+ if (*argv == p)
+ uid = my_getpwnam(*argv);
+ }
+ }
+
+ /* Ok, ready to do the deed now */
+ if (argc < 1) {
+ error_msg_and_die(too_few_args);