* Copyright (c) 1980 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
static char sccsid
[] = "@(#)chgrp.c 5.5 (Berkeley) %G%";
struct group
*gr
, *getgrnam(), *getgrgid();
struct passwd
*getpwuid(), *pwd
;
while (argc
> 0 && argv
[0][0] == '-') {
for (cp
= &argv
[0][1]; *cp
; cp
++) switch (*cp
) {
fatal(255, "unknown option: %c", *cp
);
fprintf(stderr
, "usage: chgrp [-fR] gid file ...\n");
fatal(255, "%s: unknown group", argv
[0]);
fatal(255, "%s: unknown group", argv
[0]);
fatal(255, "Who are you?");
if (uid
&& pwd
->pw_gid
!= gid
) {
for (i
=0; gr
->gr_mem
[i
]; i
++)
if (!(strcmp(pwd
->pw_name
, gr
->gr_mem
[i
])))
fatal(255, "You are not a member of the %s group", argv
[0]);
for (c
= 1; c
< argc
; c
++) {
/* do stat for directory arguments */
if (stat(argv
[c
], &stbuf
)) {
status
+= error("can't access %s", argv
[c
]);
if (uid
&& uid
!= stbuf
.st_uid
) {
status
+= error("You are not the owner of %s", argv
[c
]);
if (rflag
&& stbuf
.st_mode
& S_IFDIR
) {
status
+= chownr(argv
[c
], stbuf
.st_uid
, gid
);
if (chown(argv
[c
], stbuf
.st_uid
, gid
)) {
status
+= error("can't change %s", argv
[c
]);
register struct direct
*dp
;
fatal(255, "%s", savedir
);
* Change what we are given before doing its contents.
if (chown(dir
, uid
, gid
) < 0 && error("can't change %s", dir
))
if ((dirp
= opendir(".")) == NULL
)
dp
= readdir(dirp
); /* read "." and ".." */
for (dp
= readdir(dirp
); dp
!= NULL
; dp
= readdir(dirp
)) {
if (stat(dp
->d_name
, &st
) < 0) {
ecode
= error("can't access %s", dp
->d_name
);
if (uid
&& uid
!= st
.st_uid
) {
ecode
= error("You are not the owner of %s",
if (st
.st_mode
&S_IFDIR
) {
ecode
= chownr(dp
->d_name
, st
.st_uid
, gid
);
if (chown(dp
->d_name
, st
.st_uid
, gid
) < 0 &&
(ecode
= error("can't change %s", dp
->d_name
)))
fatal(255, "can't change back to %s", savedir
);
fprintf(stderr
, "chgrp: ");
fprintf(stderr
, "chgrp: ");