X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fsession.c;h=473e51e1912f63074eb7c1d058a601f17fc2749e;hb=ad3937a0a38a696eb1a37dbf8f92e8e6072cdccb;hp=32901a24546f5913b67cdced816f002de9edc6e3;hpb=5ab66a84426007d5da830b4ffe35067e25fe54f1;p=ppp.git diff --git a/pppd/session.c b/pppd/session.c index 32901a2..473e51e 100644 --- a/pppd/session.c +++ b/pppd/session.c @@ -178,6 +178,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 +349,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 +384,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); }