1: #include <stdio.h>
2: #include <grp.h>
3: #include <pwd.h>
4:
5: struct group *getgrnam(), *grp;
6: struct passwd *getpwuid(), *pwd;
7: char *getpass(), *crypt();
8:
9: main(argc,argv)
10: int argc;
11: char **argv;
12: {
13: register i;
14: if(argc != 2) {
15: printf("usage: newgrp groupname\n");
16: done();
17: }
18: if((grp=getgrnam(argv[1])) == NULL) {
19: printf("%s: no such group\n", argv[1]);
20: done();
21: }
22: if((pwd=getpwuid(getuid())) == NULL) {
23: printf("You do not exist!\n");
24: done();
25: }
26: for(i=0;grp->gr_mem[i];i++)
27: if(strcmp(grp->gr_mem[i], pwd->pw_name) == 0)
28: break;
29: if(grp->gr_mem[i] == 0 && strcmp(grp->gr_name,"other")) {
30: printf("Sorry\n");
31: done();
32: }
33:
34: if(grp->gr_passwd[0] != '\0' && pwd->pw_passwd[0] == '\0') {
35: if(strcmp(grp->gr_passwd, crypt(getpass("Password:"),grp->gr_passwd)) != 0) {
36: printf("Sorry\n");
37: done();
38: }
39: }
40: if(setgid(grp->gr_gid) < 0)
41: perror("setgid");
42: done();
43: }
44:
45: done()
46: {
47: register i;
48:
49: setuid(getuid());
50: for (i=3; i<15; i++)
51: close(i);
52: execl("/bin/sh", "sh", 0);
53: printf("No shell!\n");
54: exit(0);
55: }
Defined functions
done
defined in line
45; used 6 times
main
defined in line
9;
never used
Defined variables
grp
defined in line
5; used 9 times
pwd
defined in line
6; used 3 times