X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fsession.c;h=2f1c83e5552cd3afd59813e82d6b8bdf3de6294b;hb=61821b9b6106a1e834ce14783a0b03b8c5301328;hp=bb7c5fa1cb5b20de096317b2467e7898f97b909c;hpb=ee12d1706604759d25cd1508bd7e0fbf47ea536a;p=ppp.git diff --git a/pppd/session.c b/pppd/session.c index bb7c5fa..2f1c83e 100644 --- a/pppd/session.c +++ b/pppd/session.c @@ -73,7 +73,7 @@ #include #include #include -#ifdef USE_SHADOW +#ifdef HAS_SHADOW #include #endif #include @@ -116,10 +116,7 @@ static pam_handle_t *pamh = NULL; */ static int conversation (int num_msg, -#ifndef SOL2 - const -#endif - struct pam_message **msg, + const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr) { int replies = 0; @@ -164,12 +161,7 @@ static struct pam_conv pam_conv_data = { #endif /* #ifdef USE_PAM */ int -session_start(flags, user, passwd, ttyName, msg) - const int flags; - const char *user; - const char *passwd; - const char *ttyName; - char **msg; +session_start(const int flags, const char *user, const char *passwd, const char *ttyName, char **msg) { #ifdef USE_PAM bool ok = 1; @@ -178,6 +170,7 @@ session_start(flags, user, passwd, ttyName, msg) bool try_session = 0; #else /* #ifdef USE_PAM */ struct passwd *pw; + char *cbuf; #ifdef HAS_SHADOW struct spwd *spwd; struct spwd *getspnam(); @@ -348,8 +341,10 @@ session_start(flags, user, passwd, ttyName, msg) /* * If no passwd, don't let them login if we're authenticating. */ - if (pw->pw_passwd == NULL || strlen(pw->pw_passwd) < 2 - || strcmp(crypt(passwd, pw->pw_passwd), pw->pw_passwd) != 0) + if (pw->pw_passwd == NULL || strlen(pw->pw_passwd) < 2) + return SESSION_FAILED; + cbuf = crypt(passwd, pw->pw_passwd); + if (!cbuf || strcmp(cbuf, pw->pw_passwd) != 0) return SESSION_FAILED; } @@ -381,8 +376,8 @@ session_start(flags, user, passwd, ttyName, msg) memset((void *)&ll, 0, sizeof(ll)); (void)time(&tnow); ll.ll_time = tnow; - (void)strncpy(ll.ll_line, ttyName, sizeof(ll.ll_line)); - (void)strncpy(ll.ll_host, ifname, sizeof(ll.ll_host)); + strlcpy(ll.ll_line, ttyName, sizeof(ll.ll_line)); + strlcpy(ll.ll_host, ifname, sizeof(ll.ll_host)); (void)write(fd, (char *)&ll, sizeof(ll)); (void)close(fd); }