Add original unix v6
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
/* su -- become super-user */
|
||||
|
||||
char password[100];
|
||||
char pwbuf[100];
|
||||
int ttybuf[3];
|
||||
main()
|
||||
{
|
||||
register char *p, *q;
|
||||
extern fin;
|
||||
|
||||
if(getpw(0, pwbuf))
|
||||
goto badpw;
|
||||
(&fin)[1] = 0;
|
||||
p = pwbuf;
|
||||
while(*p != ':')
|
||||
if(*p++ == '\0')
|
||||
goto badpw;
|
||||
if(*++p == ':')
|
||||
goto ok;
|
||||
gtty(0, ttybuf);
|
||||
ttybuf[2] =& ~010;
|
||||
stty(0, ttybuf);
|
||||
printf("password: ");
|
||||
q = password;
|
||||
while((*q = getchar()) != '\n')
|
||||
if(*q++ == '\0')
|
||||
return;
|
||||
*q = '\0';
|
||||
ttybuf[2] =| 010;
|
||||
stty(0, ttybuf);
|
||||
printf("\n");
|
||||
q = crypt(password);
|
||||
while(*q++ == *p++);
|
||||
if(*--q == '\0' && *--p == ':')
|
||||
goto ok;
|
||||
goto error;
|
||||
|
||||
badpw:
|
||||
printf("bad password file\n");
|
||||
ok:
|
||||
setuid(0);
|
||||
execl("/bin/sh", "-", 0);
|
||||
printf("cannot execute shell\n");
|
||||
error:
|
||||
printf("sorry\n");
|
||||
}
|
||||
Reference in New Issue
Block a user