static char *sccsid = "@(#)chgrp.c 4.2 82/03/05"; /* * chgrp gid file ... */ #include #include #include #include #include #include struct group *gr, *getgrnam(), *getgrgid(); struct passwd *getpwuid(), *pwd; struct stat stbuf; int gid, uid; int status; char ingroup; main(argc, argv) char *argv[]; { register c, i; char *getlogin(), *name; if(argc < 3) { printf("usage: chgrp gid file ...\n"); exit(4); } uid = getuid(); if(isnumber(argv[1])) { gid = atoi(argv[1]); if (uid && (gr=getgrgid(gid)) == NULL) { printf("unknown group: %s\n",argv[1]); exit(4); } } else { if((gr=getgrnam(argv[1])) == NULL) { printf("unknown group: %s\n",argv[1]); exit(4); } gid = gr->gr_gid; } if (!(name = getlogin())) { pwd = getpwuid(uid); name = pwd->pw_name; } for (i=0; uid && gr->gr_mem[i]; i++) if (!(strcmp(name, gr->gr_mem[i]))) ingroup = 1; if (!ingroup && uid) { printf("illegal group: %s\n",argv[1]); exit(4); } for(c=2; c