home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V6 / usr / source / s2 / su.c < prev    next >
Encoding:
C/C++ Source or Header  |  1975-05-13  |  741 b   |  47 lines

  1. /* su -- become super-user */
  2.  
  3. char    password[100];
  4. char    pwbuf[100];
  5. int    ttybuf[3];
  6. main()
  7. {
  8.     register char *p, *q;
  9.     extern fin;
  10.  
  11.     if(getpw(0, pwbuf))
  12.         goto badpw;
  13.     (&fin)[1] = 0;
  14.     p = pwbuf;
  15.     while(*p != ':')
  16.         if(*p++ == '\0')
  17.             goto badpw;
  18.     if(*++p == ':')
  19.         goto ok;
  20.     gtty(0, ttybuf);
  21.     ttybuf[2] =& ~010;
  22.     stty(0, ttybuf);
  23.     printf("password: ");
  24.     q = password;
  25.     while((*q = getchar()) != '\n')
  26.         if(*q++ == '\0')
  27.             return;
  28.     *q = '\0';
  29.     ttybuf[2] =| 010;
  30.     stty(0, ttybuf);
  31.     printf("\n");
  32.     q = crypt(password);
  33.     while(*q++ == *p++);
  34.     if(*--q == '\0' && *--p == ':')
  35.         goto ok;
  36.     goto error;
  37.  
  38. badpw:
  39.     printf("bad password file\n");
  40. ok:
  41.     setuid(0);
  42.     execl("/bin/sh", "-", 0);
  43.     printf("cannot execute shell\n");
  44. error:
  45.     printf("sorry\n");
  46. }
  47.