static char *sccsid
= "@(#)su.c 4.1 (Berkeley) %G%";
struct passwd
*pwd
,*getpwnam();
if((pwd
=getpwnam(nptr
)) == NULL
) {
printf("Unknown id: %s\n",nptr
);
if(pwd
->pw_passwd
[0] == '\0' || getuid() == 0)
password
= getpass("Password:");
if(badsw
|| (strcmp(pwd
->pw_passwd
, crypt(password
, pwd
->pw_passwd
)) != 0)) {
FILE *console
= fopen("/dev/console", "w");
fprintf(console
, "BADSU: %s %s\r\n", getlogin(), ttyname(2));
FILE *console
= fopen("/dev/console", "w");
fprintf(console
, "SU: %s %s\r\n", getlogin(), ttyname(2));
if (pwd
->pw_shell
&& *pwd
->pw_shell
)
register char **ep
= environ
;
static char homebuf
[128];
for (cp
= "HOME"; *cp
== *dp
&& *cp
; cp
++, dp
++)
if (*cp
== 0 && (*dp
== '=' || *dp
== 0)) {
strcpy(homebuf
, "HOME=");
register char **ep
= environ
;
static char shellbuf
[128];
for (cp
= "SHELL"; *cp
== *dp
&& *cp
; cp
++, dp
++)
if (*cp
== 0 && (*dp
== '=' || *dp
== 0)) {
strcpy(shellbuf
, "SHELL=");