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
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 596
Valid CSS Valid XHTML 1.0 Strict