chown: fix user:group option parsing

Check that either user or group is correctly passed, and adapt
documention according to that.
This commit is contained in:
Quentin Rameau 2015-12-21 19:37:10 +01:00 committed by sin
parent 6e7743eb56
commit a02d66b8fc
2 changed files with 17 additions and 5 deletions

14
chown.1
View File

@ -11,15 +11,23 @@
.Fl R
.Op Fl H | L | P
.Oc
.Op Ar owner Op Ar :group
.Ar owner Ns Op Pf : Op Ar group
.Op Ar file ...
.Nm
.Op Fl h
.Oo
.Fl R
.Op Fl H | L | P
.Oc
.Pf : Ar group
.Op Ar file ...
.Sh DESCRIPTION
.Nm
sets the user or group id of each
sets the user and/or group id of each
.Ar file
to the uid of
.Ar owner
or the gid of
and/or the gid of
.Ar group
respectively.
.Sh OPTIONS

View File

@ -40,8 +40,9 @@ chownpwgr(const char *path, struct stat *st, void *data, struct recursor *r)
static void
usage(void)
{
eprintf("usage: %s [-h] [-R [-H | -L | -P]] [owner][:[group]] "
"file ...\n", argv0);
eprintf("usage: %s [-h] [-R [-H | -L | -P]] owner[:[group]] file ...\n"
" %s [-h] [-R [-H | -L | -P]] :group file ...\n",
argv0, argv0);
}
int
@ -99,6 +100,9 @@ main(int argc, char *argv[])
gid = estrtonum(group, 0, UINT_MAX);
}
}
if (uid == (uid_t)-1 && gid == (gid_t)-1)
usage();
for (argc--, argv++; *argv; argc--, argv++)
recurse(*argv, NULL, &r);