f2801bcfd9
We shouldn't call strcmp directly on return value of crypt() because it might return NULL. Resolves: #815617
48 lines
1.8 KiB
Diff
48 lines
1.8 KiB
Diff
diff -up ppp-2.4.5/pppd/auth.c.crypt ppp-2.4.5/pppd/auth.c
|
|
--- ppp-2.4.5/pppd/auth.c.crypt 2013-07-04 16:10:27.338463397 +0200
|
|
+++ ppp-2.4.5/pppd/auth.c 2013-07-04 16:15:00.204471203 +0200
|
|
@@ -1515,11 +1515,19 @@ check_passwd(unit, auser, userlen, apass
|
|
ret = UPAP_AUTHNAK;
|
|
}
|
|
}
|
|
+
|
|
if (secret[0] != 0 && !login_secret) {
|
|
- /* password given in pap-secrets - must match */
|
|
- if ((cryptpap || strcmp(passwd, secret) != 0)
|
|
- && strcmp(crypt(passwd, secret), secret) != 0)
|
|
- ret = UPAP_AUTHNAK;
|
|
+ /* password given in pap-secrets - must match */
|
|
+ char *cryptbuf = NULL;
|
|
+ cryptbuf = crypt(passwd, secret);
|
|
+
|
|
+ if (cryptpap) {
|
|
+ if ((cryptbuf == NULL) || (strcmp(cryptbuf, secret) != 0))
|
|
+ ret = UPAP_AUTHNAK;
|
|
+ } else {
|
|
+ if ((strcmp(passwd, secret) != 0) && (cryptbuf == NULL || strcmp(cryptbuf, secret) != 0))
|
|
+ ret = UPAP_AUTHNAK;
|
|
+ }
|
|
}
|
|
}
|
|
fclose(f);
|
|
diff -up ppp-2.4.5/pppd/session.c.crypt ppp-2.4.5/pppd/session.c
|
|
--- ppp-2.4.5/pppd/session.c.crypt 2009-11-16 23:26:07.000000000 +0100
|
|
+++ ppp-2.4.5/pppd/session.c 2013-07-04 16:10:27.354463397 +0200
|
|
@@ -348,9 +348,14 @@ session_start(flags, user, passwd, ttyNa
|
|
/*
|
|
* 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;
|
|
+ } else {
|
|
+ char *cryptbuf = NULL;
|
|
+ cryptbuf = crypt(passwd, pw->pw_passwd);
|
|
+ if ((cryptbuf == NULL) || (strcmp(cryptbuf, pw->pw_passwd) != 0))
|
|
+ return SESSION_FAILED;
|
|
+ }
|
|
}
|
|
|
|
#endif /* #ifdef USE_PAM */
|