sbase

suckless unix tools
git clone git://git.suckless.org/sbase
Log | Files | Refs | README | LICENSE

commit a02d66b8fc651979b7f905f78722a6192896eb90
parent 6e7743eb5673683d81e8de3d04a9e0d1f33f979f
Author: Quentin Rameau <quinq@fifth.space>
Date:   Mon, 21 Dec 2015 19:37:10 +0100

chown: fix user:group option parsing

Check that either user or group is correctly passed, and adapt
documention according to that.

Diffstat:
Mchown.1 | 14+++++++++++---
Mchown.c | 8++++++--
2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/chown.1 b/chown.1 @@ -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 diff --git a/chown.c b/chown.c @@ -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);