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:
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);