* Copyright (c) 1980 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
"@(#) Copyright (c) 1980 Regents of the University of California.\n\
static char sccsid
[] = "@(#)chown.c 5.6 (Berkeley) 5/29/86";
* chown [-fR] uid[.gid] file ...
struct passwd
*getpwnam();
register char *cp
, *group
;
while (argc
> 0 && argv
[0][0] == '-') {
for (cp
= &argv
[0][1]; *cp
; cp
++) switch (*cp
) {
fatal(255, "unknown option: %c", *cp
);
fprintf(stderr
, "usage: chown [-fR] owner[.group] file ...\n");
group
= index(argv
[0], '.');
if ((grp
= getgrnam(group
)) == NULL
)
fatal(255, "unknown group: %s",group
);
} else if (*group
!= '\0')
if (!isnumber(argv
[0])) {
if ((pwd
= getpwnam(argv
[0])) == NULL
)
fatal(255, "unknown user id: %s",argv
[0]);
for (c
= 1; c
< argc
; c
++) {
/* do stat for directory arguments */
if (lstat(argv
[c
], &stbuf
) < 0) {
status
+= Perror(argv
[c
]);
if (rflag
&& ((stbuf
.st_mode
&S_IFMT
) == S_IFDIR
)) {
status
+= chownr(argv
[c
], uid
, gid
);
if (chown(argv
[c
], uid
, gid
)) {
status
+= Perror(argv
[c
]);
register struct direct
*dp
;
if (getwd(savedir
) == (char *)0)
fatal(255, "%s", savedir
);
* Change what we are given before doing it's contents.
if (chown(dir
, uid
, gid
) < 0 && Perror(dir
))
if ((dirp
= opendir(".")) == NULL
) {
dp
= readdir(dirp
); /* read "." and ".." */
for (dp
= readdir(dirp
); dp
!= NULL
; dp
= readdir(dirp
)) {
if (lstat(dp
->d_name
, &st
) < 0) {
ecode
= Perror(dp
->d_name
);
if ((st
.st_mode
&S_IFMT
) == S_IFDIR
) {
ecode
= chownr(dp
->d_name
, uid
, gid
);
if (chown(dp
->d_name
, uid
, gid
) < 0 &&
(ecode
= Perror(dp
->d_name
)))
fatal(255, "can't change back to %s", savedir
);
fprintf(stderr
, "chown: ");
fprintf(stderr
, "chown: ");