* 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.1 (Berkeley) %G%";
struct group
*gr
, *getgrnam(), *getgrgid();
struct passwd
*getpwuid(), *pwd
;
for (flags
= argv
[0]; *flags
; ++flags
)
case 'f': fflag
++; break;
case 'R': rflag
++; break;
printf("chgrp: unknown option: %s\n", *flags
);
fprintf(stderr
, "usage: chgrp [-fR] gid file ...\n");
fprintf(stderr
, "%s: unknown group\n", argv
[0]);
fprintf(stderr
, "%s: unknown group\n", argv
[0]);
fprintf(stderr
, "Who are you?\n");
if (uid
&& pwd
->pw_gid
!= gid
) {
for (i
=0; gr
->gr_mem
[i
]; i
++)
if (!(strcmp(pwd
->pw_name
, gr
->gr_mem
[i
])))
fprintf(stderr
, "You are not a member of the %s group.\n",
for (c
= 1; c
< argc
; c
++) {
if (lstat(argv
[c
], &stbuf
)) {
if (uid
&& uid
!= stbuf
.st_uid
) {
fprintf(stderr
, "You are not the owner of %s\n"
if (rflag
&& stbuf
.st_mode
& S_IFDIR
)
status
+= chownr(argv
[c
], stbuf
.st_uid
, gid
);
else if (chown(argv
[c
], stbuf
.st_uid
, gid
) && !fflag
)
register struct direct
*dp
;
if (getwd(savedir
) == 0) {
fprintf(stderr
, "chgrp: %s\n", savedir
);
if (chown(dir
, uid
, gid
) < 0 && !fflag
) {
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) {
fprintf(stderr
, "chgrp: can't access %s\n", dp
->d_name
);
if (st
.st_mode
& S_IFDIR
)
chownr(dp
->d_name
, st
.st_uid
, gid
);
if (chown(dp
->d_name
, st
.st_uid
, gid
) < 0 && !fflag
) {