Linux.


- 2


*/

tty = strrchr(devname, '/');

if (tty == NULL)

tty = devname;

else

tty++;

logwtmp(tty, user, ""); /* wtmp */

logged_in = TRUE;

return (UPAP_AUTHACK);

}

pw->pw_passwd, getspnam, spwd->sp_pwdp.

pwauth, , .

auth.c , :

/*

* login -

* /etc/passwd.

*

*

*

* Linux Shadow Password Suite USE_SHADOW

*

* :

* UPAP_AUTHNAK: .

* UPAP_AUTHACK: .

* msg .

*/

static int

login(user, passwd, msg, msglen)

char *user;

char *passwd;

char **msg;

int *msglen;

{

struct passwd *pw;

char *epasswd;

char *tty;

#ifdef USE_SHADOW

struct spwd *spwd;

struct spwd *getspnam();

#endif

if ((pw = getpwnam(user)) == NULL) {

return (UPAP_AUTHNAK);

}

#ifdef USE_SHADOW

spwd = getspnam(user);

if (spwd)

pw->pw_passwd = spwd->sp-pwdp;

#endif

/*

* XXX , !

*/

if (pw->pw_passwd == '\0') {

return (UPAP_AUTHNAK);

}

#ifdef HAS_SHADOW

if ((pw->pw_passwd && pw->pw_passwd[0] == '@'

&& pw_auth (pw->pw_passwd+1, pw->pw_name, PW_LOGIN, NULL))

|| !valid (passwd, pw)) {