diff options
Diffstat (limited to 'usr.sbin/chown')
-rw-r--r-- | usr.sbin/chown/Makefile | 8 | ||||
-rw-r--r-- | usr.sbin/chown/chgrp.1 | 145 | ||||
-rw-r--r-- | usr.sbin/chown/chown.8 | 170 | ||||
-rw-r--r-- | usr.sbin/chown/chown.c | 315 |
4 files changed, 0 insertions, 638 deletions
diff --git a/usr.sbin/chown/Makefile b/usr.sbin/chown/Makefile deleted file mode 100644 index 97972e5..0000000 --- a/usr.sbin/chown/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# @(#)Makefile 8.1 (Berkeley) 6/6/93 -# $FreeBSD$ - -PROG= chown -LINKS= ${BINDIR}/chown /usr/bin/chgrp -MAN= chgrp.1 chown.8 - -.include <bsd.prog.mk> diff --git a/usr.sbin/chown/chgrp.1 b/usr.sbin/chown/chgrp.1 deleted file mode 100644 index 8a4c271..0000000 --- a/usr.sbin/chown/chgrp.1 +++ /dev/null @@ -1,145 +0,0 @@ -.\" 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. -.\" 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 -.\" $FreeBSD$ -.\" -.Dd February 21, 2010 -.Dt CHGRP 1 -.Os -.Sh NAME -.Nm chgrp -.Nd change group -.Sh SYNOPSIS -.Nm -.Op Fl fhvx -.Oo -.Fl R -.Op Fl H | Fl L | Fl P -.Oc -.Ar group -.Ar -.Sh DESCRIPTION -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 -The following options are available: -.Bl -tag -width indent -.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.) -.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. -This is the default. -.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 does not -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. -.It Fl v -Cause -.Nm -to be verbose, showing files as the group is modified. -If the -.Fl v -flag is specified more than once, -.Nm -will print the filename, followed by the old and new numeric group ID. -.It Fl x -File system mount points are not traversed. -.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 -must belong to the specified group and be the owner of the file, -or be the super-user. -.Sh FILES -.Bl -tag -width /etc/group -compact -.It Pa /etc/group -group ID file -.El -.Sh EXIT STATUS -.Ex -std -.Sh COMPATIBILITY -In previous versions of this system, symbolic links did not have groups. -.Pp -The -.Fl v -and -.Fl x -options are non-standard and their use in scripts is not recommended. -.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 -utility is expected to be -.St -p1003.2 -compatible. diff --git a/usr.sbin/chown/chown.8 b/usr.sbin/chown/chown.8 deleted file mode 100644 index b5882a3..0000000 --- a/usr.sbin/chown/chown.8 +++ /dev/null @@ -1,170 +0,0 @@ -.\" 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. -.\" 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 -.\" $FreeBSD$ -.\" -.Dd February 21, 2010 -.Dt CHOWN 8 -.Os -.Sh NAME -.Nm chown -.Nd change file owner and group -.Sh SYNOPSIS -.Nm -.Op Fl fhvx -.Oo -.Fl R -.Op Fl H | Fl L | Fl P -.Oc -.Ar owner Ns Op : Ns Ar group -.Ar -.Nm -.Op Fl fhvx -.Oo -.Fl R -.Op Fl H | Fl L | Fl P -.Oc -.No : Ns Ar group -.Ar -.Sh DESCRIPTION -The -.Nm -utility changes the user ID and/or the group ID of the specified files. -Symbolic links named by arguments are silently left unchanged unless -.Fl h -is used. -.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.) -.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. -This is the default. -.It Fl R -Change the user ID and/or the group ID of the specified directory trees -(recursively, including their contents) and files. -Beware of unintentionally matching the -.Dq Pa ".." -hard link to the parent directory when using wildcards like -.Dq Li ".*" . -.It Fl f -Do not 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. -.It Fl v -Cause -.Nm -to be verbose, showing files as the owner is modified. -If the -.Fl v -flag is specified more than once, -.Nm -will print the filename, followed by the old and new numeric user/group ID. -.It Fl x -File system mount points are not traversed. -.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. -.Sh EXIT STATUS -.Ex -std -.Sh COMPATIBILITY -Previous versions of the -.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. -.Pp -The -.Fl v -and -.Fl x -options are non-standard and their use in scripts is not recommended. -.Sh SEE ALSO -.Xr chgrp 1 , -.Xr find 1 , -.Xr chown 2 , -.Xr fts 3 , -.Xr symlink 7 -.Sh STANDARDS -The -.Nm -utility is expected to be -.St -p1003.2 -compliant. -.Sh HISTORY -A -.Nm -utility appeared in -.At v1 . diff --git a/usr.sbin/chown/chown.c b/usr.sbin/chown/chown.c deleted file mode 100644 index e13235c..0000000 --- a/usr.sbin/chown/chown.c +++ /dev/null @@ -1,315 +0,0 @@ -/* - * 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. - * 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. - */ - -#if 0 -#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 -static char sccsid[] = "@(#)chown.c 8.8 (Berkeley) 4/4/94"; -#endif /* not lint */ -#endif - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/param.h> -#include <sys/stat.h> - -#include <err.h> -#include <errno.h> -#include <fts.h> -#include <grp.h> -#include <libgen.h> -#include <pwd.h> -#include <stdint.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -void a_gid(const char *); -void a_uid(const char *); -void chownerr(const char *); -uid_t id(const char *, const char *); -void usage(void); - -uid_t uid; -gid_t gid; -int ischown; -const char *gname; - -int -main(int argc, char **argv) -{ - FTS *ftsp; - FTSENT *p; - int Hflag, Lflag, Rflag, fflag, hflag, vflag, xflag; - int ch, fts_options, rval; - char *cp; - - ischown = (strcmp(basename(argv[0]), "chown") == 0); - - Hflag = Lflag = Rflag = fflag = hflag = vflag = xflag = 0; - while ((ch = getopt(argc, argv, "HLPRfhvx")) != -1) - switch (ch) { - case 'H': - Hflag = 1; - Lflag = 0; - break; - case 'L': - Lflag = 1; - Hflag = 0; - break; - case 'P': - Hflag = Lflag = 0; - break; - case 'R': - Rflag = 1; - break; - case 'f': - fflag = 1; - break; - case 'h': - hflag = 1; - break; - case 'v': - vflag++; - break; - case 'x': - xflag = 1; - break; - case '?': - default: - usage(); - } - argv += optind; - argc -= optind; - - if (argc < 2) - usage(); - - if (Rflag) { - fts_options = FTS_PHYSICAL; - if (hflag && (Hflag || Lflag)) - errx(1, "the -R%c and -h options may not be " - "specified together", Hflag ? 'H' : 'L'); - if (Hflag) - fts_options |= FTS_COMFOLLOW; - else if (Lflag) { - fts_options &= ~FTS_PHYSICAL; - fts_options |= FTS_LOGICAL; - } - } else - fts_options = hflag ? FTS_PHYSICAL : FTS_LOGICAL; - if (xflag) - fts_options |= FTS_XDEV; - - uid = (uid_t)-1; - gid = (gid_t)-1; - if (ischown) { - if ((cp = strchr(*argv, ':')) != NULL) { - *cp++ = '\0'; - a_gid(cp); - } -#ifdef SUPPORT_DOT - else if ((cp = strchr(*argv, '.')) != NULL) { - warnx("separation of user and group with a period is deprecated"); - *cp++ = '\0'; - a_gid(cp); - } -#endif - 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. */ - 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: - 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 ((uid == (uid_t)-1 || uid == p->fts_statp->st_uid) && - (gid == (gid_t)-1 || gid == p->fts_statp->st_gid)) - continue; - if ((hflag ? lchown : chown)(p->fts_accpath, uid, gid) == -1) { - if (!fflag) { - chownerr(p->fts_path); - rval = 1; - } - } else { - if (vflag) { - printf("%s", p->fts_path); - if (vflag > 1) { - if (ischown) { - printf(": %ju:%ju -> %ju:%ju", - (uintmax_t) - p->fts_statp->st_uid, - (uintmax_t) - p->fts_statp->st_gid, - (uid == (uid_t)-1) ? - (uintmax_t) - p->fts_statp->st_uid : - (uintmax_t)uid, - (gid == (gid_t)-1) ? - (uintmax_t) - p->fts_statp->st_gid : - (uintmax_t)gid); - } else { - printf(": %ju -> %ju", - (uintmax_t) - p->fts_statp->st_gid, - (gid == (gid_t)-1) ? - (uintmax_t) - p->fts_statp->st_gid : - (uintmax_t)gid); - } - } - printf("\n"); - } - } - } - if (errno) - err(1, "fts_read"); - exit(rval); -} - -void -a_gid(const char *s) -{ - struct group *gr; - - if (*s == '\0') /* Argument was "uid[:.]". */ - return; - gname = s; - gid = ((gr = getgrnam(s)) != NULL) ? gr->gr_gid : id(s, "group"); -} - -void -a_uid(const char *s) -{ - struct passwd *pw; - - if (*s == '\0') /* Argument was "[:.]gid". */ - return; - uid = ((pw = getpwnam(s)) != NULL) ? pw->pw_uid : id(s, "user"); -} - -uid_t -id(const char *name, const char *type) -{ - uid_t 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 || *ep != '\0') - errx(1, "%s: illegal %s name", name, type); - return (val); -} - -void -chownerr(const char *file) -{ - static uid_t euid = -1; - static int ngroups = -1; - static long ngroups_max; - gid_t *groups; - - /* Check for chown without being root. */ - if (errno != EPERM || (uid != (uid_t)-1 && - euid == (uid_t)-1 && (euid = geteuid()) != 0)) { - warn("%s", file); - return; - } - - /* Check group membership; kernel just returns EPERM. */ - if (gid != (gid_t)-1 && ngroups == -1 && - euid == (uid_t)-1 && (euid = geteuid()) != 0) { - ngroups_max = sysconf(_SC_NGROUPS_MAX) + 1; - if ((groups = malloc(sizeof(gid_t) * ngroups_max)) == NULL) - err(1, "malloc"); - ngroups = getgroups(ngroups_max, groups); - while (--ngroups >= 0 && gid != groups[ngroups]); - free(groups); - if (ngroups < 0) { - warnx("you are not a member of group %s", gname); - return; - } - } - warn("%s", file); -} - -void -usage(void) -{ - - if (ischown) - (void)fprintf(stderr, "%s\n%s\n", - "usage: chown [-fhvx] [-R [-H | -L | -P]] owner[:group]" - " file ...", - " chown [-fhvx] [-R [-H | -L | -P]] :group file ..."); - else - (void)fprintf(stderr, "%s\n", - "usage: chgrp [-fhvx] [-R [-H | -L | -P]] group file ..."); - exit(1); -} |