diff --git a/usr.sbin/chown/chgrp.1 b/usr.sbin/chown/chgrp.1 index 9abff113096e..67122c4277da 100644 --- a/usr.sbin/chown/chgrp.1 +++ b/usr.sbin/chown/chgrp.1 @@ -1,129 +1,133 @@ .\" Copyright (c) 1983, 1990, 1993, 1994 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" the Institute of Electrical and Electronics Engineers, Inc. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)chgrp.1 8.3 (Berkeley) 3/31/94 .\" .Dd March 31, 1994 .Dt CHGRP 1 .Os BSD 4.2 .Sh NAME .Nm chgrp .Nd change group .Sh SYNOPSIS .Nm chgrp .Oo .Fl R .Op Fl H | Fl L | Fl P .Oc .Op Fl f .Op Fl h .Ar group .Ar files ... .Sh DESCRIPTION -The chgrp utility sets the group ID of the file named by each +The +.Nm +utility sets the group ID of the file named by each .Ar file operand to the .Ar group ID specified by the group operand. .Pp Options: .Bl -tag -width Ds .It Fl H If the .Fl R option is specified, symbolic links on the command line are followed. -(Symbolic links encountered in the tree traversal are not followed.) +(Symbolic links encountered in the tree traversal are not followed). .It Fl L If the .Fl R option is specified, all symbolic links are followed. .It Fl P If the .Fl R option is specified, no symbolic links are followed. .It Fl R Change the group ID for the file hierarchies rooted in the files instead of just the files themselves. .It Fl f The force option ignores errors, except for usage errors and doesn't query about strange modes (unless the user does not have proper permissions). .It Fl h If the file is a symbolic link, the group ID of the link itself is changed rather than the file that is pointed to. .El .Pp The .Fl H , .Fl L and .Fl P options are ignored unless the .Fl R option is specified. In addition, these options override each other and the command's actions are determined by the last one specified. .Pp The .Ar group operand can be either a group name from the group database, or a numeric group ID. If a group name is also a numeric group ID, the operand is used as a group name. .Pp The user invoking -.Nm chgrp +.Nm must belong to the specified group and be the owner of the file, or be the super-user. .Pp The -.Nm chgrp +.Nm utility exits 0 on success, and >0 if an error occurs. .Sh COMPATIBILITY In previous versions of this system, symbolic links did not have groups. .Sh FILES .Bl -tag -width /etc/group -compact .It Pa /etc/group Group ID file .El .Sh SEE ALSO .Xr chown 2 , .Xr fts 3 , .Xr group 5 , .Xr passwd 5 , .Xr symlink 7 , .Xr chown 8 .Sh STANDARDS The -.Nm chgrp -utility is expected to be POSIX 1003.2 compatible. +.Nm +utility is expected to be +.St -p1003.2 +compatible. diff --git a/usr.sbin/chown/chown.8 b/usr.sbin/chown/chown.8 index 7546a4e944ea..38372c240f25 100644 --- a/usr.sbin/chown/chown.8 +++ b/usr.sbin/chown/chown.8 @@ -1,150 +1,152 @@ .\" Copyright (c) 1990, 1991, 1993, 1994 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)chown.8 8.3 (Berkeley) 3/31/94 -.\" $Id: chown.8,v 1.4 1997/02/22 16:04:35 peter Exp $ +.\" $Id: chown.8,v 1.5 1997/03/31 13:03:47 peter Exp $ .\" .Dd March 31, 1994 .Dt CHOWN 8 .Os BSD 4 .Sh NAME .Nm chown .Nd change file owner and group .Sh SYNOPSIS .Nm chown .Oo .Fl R .Op Fl H | Fl L | Fl P .Oc .Op Fl f .Op Fl h .Ar owner Op Ar :group .Ar file ... .Nm chown .Oo .Fl R .Op Fl H | Fl L | Fl P .Oc .Op Fl f .Op Fl h .Ar :group -.Ar file ... +.Ar .Sh DESCRIPTION .Nm Chown sets the user ID and/or the group ID of the specified files. .Pp The options are as follows: .Bl -tag -width Ds .It Fl H If the .Fl R option is specified, symbolic links on the command line are followed. -(Symbolic links encountered in the tree traversal are not followed.) +(Symbolic links encountered in the tree traversal are not followed). .It Fl L If the .Fl R option is specified, all symbolic links are followed. .It Fl P If the .Fl R option is specified, no symbolic links are followed. .It Fl R Change the user ID and/or the group ID for the file hierarchies rooted in the files instead of just the files themselves. .It Fl f Don't report any failure to change file owner or group, nor modify the exit status to reflect such failures. .It Fl h If the file is a symbolic link, change the user ID and/or the group ID of the link itself rather than the file that the link points to. .El .Pp The .Fl H , .Fl L and .Fl P options are ignored unless the .Fl R option is specified. In addition, these options override each other and the command's actions are determined by the last one specified. .Pp The .Ar owner and .Ar group operands are both optional, however, one must be specified. If the .Ar group operand is specified, it must be preceded by a colon (``:'') character. .Pp The .Ar owner may be either a numeric user ID or a user name. If a user name is also a numeric user ID, the operand is used as a user name. The .Ar group may be either a numeric group ID or a group name. If a group name is also a numeric group ID, the operand is used as a group name. .Pp The ownership of a file may only be altered by a super-user for obvious security reasons. .Pp The -.Nm chown +.Nm utility exits 0 on success, and >0 if an error occurs. .Sh COMPATIBILITY Previous versions of the -.Nm chown +.Nm utility used the dot (``.'') character to distinguish the group name. This has been changed to be a colon (``:'') character so that user and group names may contain the dot character. .Pp On previous versions of this system, symbolic links did not have owners. .Sh SEE ALSO .Xr chgrp 1 , .Xr find 1 , .Xr chown 2 , .Xr fts 3 , .Xr symlink 7 .Sh STANDARDS The -.Nm chown -command is expected to be POSIX 1003.2 compliant. +.Nm +command is expected to be +.St -p1003.2 +compliant. .Sh HISTORY A .Nm command appeared in .At v1 . diff --git a/usr.sbin/chown/chown.c b/usr.sbin/chown/chown.c index c7b171b1c605..b3b78763a08c 100644 --- a/usr.sbin/chown/chown.c +++ b/usr.sbin/chown/chown.c @@ -1,273 +1,273 @@ /* * Copyright (c) 1988, 1993, 1994 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #ifndef lint static const char copyright[] = "@(#) Copyright (c) 1988, 1993, 1994\n\ The Regents of the University of California. All rights reserved.\n"; #endif /* not lint */ #ifndef lint #if 0 static char sccsid[] = "@(#)chown.c 8.8 (Berkeley) 4/4/94"; #else static const char rcsid[] = - "$Id$"; + "$Id: chown.c,v 1.7 1997/08/24 02:10:29 steve Exp $"; #endif #endif /* not lint */ #include #include #include #include #include #include #include #include #include #include #include #include #include void a_gid __P((char *)); void a_uid __P((char *)); void chownerr __P((char *)); u_long id __P((char *, char *)); void usage __P((void)); uid_t uid; gid_t gid; int Rflag, ischown, fflag, hflag; char *gname, *myname; int main(argc, argv) int argc; char *argv[]; { FTS *ftsp; FTSENT *p; int Hflag, Lflag, Pflag, ch, fts_options, hflag, rval; char *cp; myname = (cp = rindex(*argv, '/')) ? cp + 1 : *argv; ischown = myname[2] == 'o'; Hflag = Lflag = Pflag = hflag = 0; while ((ch = getopt(argc, argv, "HLPRfh")) != -1) switch (ch) { case 'H': Hflag = 1; Lflag = Pflag = 0; break; case 'L': Lflag = 1; Hflag = Pflag = 0; break; case 'P': Pflag = 1; Hflag = Lflag = 0; break; case 'R': Rflag = 1; break; case 'f': fflag = 1; break; case 'h': hflag = 1; break; case '?': default: usage(); } argv += optind; argc -= optind; if (argc < 2) usage(); fts_options = FTS_PHYSICAL; if (Rflag) { if (hflag) - errx(1, - "the -R and -h options may not be specified together."); + errx(1, "the -R and -h options may not be specified together"); if (Hflag) fts_options |= FTS_COMFOLLOW; if (Lflag) { fts_options &= ~FTS_PHYSICAL; fts_options |= FTS_LOGICAL; } } uid = gid = -1; if (ischown) { #ifdef SUPPORT_DOT if ((cp = strchr(*argv, '.')) != NULL) { *cp++ = '\0'; a_gid(cp); } else #endif if ((cp = strchr(*argv, ':')) != NULL) { *cp++ = '\0'; a_gid(cp); } a_uid(*argv); } else a_gid(*argv); if ((ftsp = fts_open(++argv, fts_options, 0)) == NULL) err(1, NULL); for (rval = 0; (p = fts_read(ftsp)) != NULL;) { switch (p->fts_info) { case FTS_D: /* Change it at FTS_DP. */ if (!Rflag) fts_set(ftsp, p, FTS_SKIP); continue; case FTS_DNR: /* Warn, chown, continue. */ warnx("%s: %s", p->fts_path, strerror(p->fts_errno)); rval = 1; break; case FTS_ERR: /* Warn, continue. */ case FTS_NS: warnx("%s: %s", p->fts_path, strerror(p->fts_errno)); rval = 1; continue; case FTS_SL: /* Ignore. */ case FTS_SLNONE: /* * The only symlinks that end up here are ones that * don't point to anything and ones that we found * doing a physical walk. */ if (hflag) break; else continue; default: break; } if (hflag) { if (lchown(p->fts_accpath, uid, gid) && !fflag) { chownerr(p->fts_path); rval = 1; } } else { if (chown(p->fts_accpath, uid, gid) && !fflag) { chownerr(p->fts_path); rval = 1; } } } if (errno) err(1, "fts_read"); exit(rval); } void a_gid(s) char *s; { struct group *gr; if (*s == '\0') /* Argument was "uid[:.]". */ return; gname = s; gid = ((gr = getgrnam(s)) == NULL) ? id(s, "group") : gr->gr_gid; } void a_uid(s) char *s; { struct passwd *pw; if (*s == '\0') /* Argument was "[:.]gid". */ return; uid = ((pw = getpwnam(s)) == NULL) ? id(s, "user") : pw->pw_uid; } u_long id(name, type) char *name, *type; { u_long val; char *ep; /* * XXX * We know that uid_t's and gid_t's are unsigned longs. */ errno = 0; val = strtoul(name, &ep, 10); if (errno) err(1, "%s", name); if (*ep != '\0') errx(1, "%s: illegal %s name", name, type); return (val); } void chownerr(file) char *file; { static int euid = -1, ngroups = -1; gid_t groups[NGROUPS]; /* Check for chown without being root. */ if (errno != EPERM || (uid != -1 && euid == -1 && (euid = geteuid()) != 0)) err(1, "%s", file); /* Check group membership; kernel just returns EPERM. */ if (gid != -1 && ngroups == -1 && euid == -1 && (euid = geteuid()) != 0) { ngroups = getgroups(NGROUPS, groups); while (--ngroups >= 0 && gid != groups[ngroups]); if (ngroups < 0) errx(1, "you are not a member of group %s", gname); } warn("%s", file); } void usage() { - (void)fprintf(stderr, - "usage: %s [-R [-H | -L | -P]] [-f] [-h] %s file ...\n", - myname, ischown ? "[owner][:group]" : "group"); + (void)fprintf(stderr, "%s\n%s\n%s\n", + "usage: chown [-R [-H | -L | -P]] [-f] [-h] owner[:group] file ...", + " chown [-R [-H | -L | -P]] [-f] [-h] :group file ...", + " chgrp [-R [-H | -L | -P]] [-f] [-h] group file ..."); exit(1); }