Blame SOURCES/yp-tools-2.12-crypt.patch

b588fa
diff -up yp-tools-2.12/src/yppasswd.c.crypt yp-tools-2.12/src/yppasswd.c
b588fa
--- yp-tools-2.12/src/yppasswd.c.crypt	2012-04-23 13:01:35.599721168 +0200
b588fa
+++ yp-tools-2.12/src/yppasswd.c	2012-04-23 13:16:18.251261293 +0200
b588fa
@@ -448,13 +448,19 @@ verifypassword (struct passwd *pwd, char
b588fa
     }
b588fa
 
b588fa
   passwdlen = get_passwd_len (pwd->pw_passwd);
b588fa
-  if (pwd->pw_passwd[0]
b588fa
+  if (pwd->pw_passwd[0] 
b588fa
       && 0 != strcmp (pwd->pw_passwd, "x") /* don't check shadow passwords */
b588fa
-      && !strncmp (pwd->pw_passwd, crypt (pwdstr, pwd->pw_passwd), passwdlen)
b588fa
       && uid)
b588fa
     {
b588fa
-      fputs (_("You cannot reuse the old password.\n"), stderr);
b588fa
-      return 0;
b588fa
+      char *crypted = crypt(pwdstr, pwd->pw_passwd);
b588fa
+      if(crypted == NULL) {
b588fa
+        fputs (_("crypt() call failed.\n"), stderr);
b588fa
+        return 0;
b588fa
+      }
b588fa
+      if(!strncmp (pwd->pw_passwd, crypted, passwdlen)) {
b588fa
+        fputs (_("You cannot reuse the old password.\n"), stderr);
b588fa
+        return 0;
b588fa
+      }
b588fa
     }
b588fa
 
b588fa
   r = 0;
b588fa
@@ -772,9 +778,16 @@ main (int argc, char **argv)
b588fa
 	{
b588fa
 	  int passwdlen = get_passwd_len (pwd->pw_passwd);
b588fa
 	  char *sane_passwd = alloca (passwdlen + 1);
b588fa
+	  char *crypted;
b588fa
 	  strncpy (sane_passwd, pwd->pw_passwd, passwdlen);
b588fa
 	  sane_passwd[passwdlen] = 0;
b588fa
-	  if (strcmp (crypt (s, sane_passwd), sane_passwd))
b588fa
+	  crypted = crypt (s, sane_passwd);
b588fa
+	  if(crypted == NULL)
b588fa
+	    {
b588fa
+	      fprintf (stderr, _("Sorry - crypt() failed.\n"));
b588fa
+	      return 1;
b588fa
+	    }
b588fa
+	  if (strcmp (crypted, sane_passwd))
b588fa
 	    {
b588fa
 	      fprintf (stderr, _("Sorry.\n"));
b588fa
 	      return 1;
b588fa
@@ -789,6 +802,7 @@ main (int argc, char **argv)
b588fa
       char *error_msg;
b588fa
 #endif /* USE_CRACKLIB */
b588fa
       char *buf, salt[37], *p = NULL;
b588fa
+      char *crypted;
b588fa
       int tries = 0;
b588fa
 
b588fa
       buf = (char *) malloc (129);
b588fa
@@ -869,7 +883,13 @@ main (int argc, char **argv)
b588fa
 	  break;
b588fa
 	}
b588fa
 
b588fa
-      yppwd.newpw.pw_passwd = strdup (crypt (buf, salt));
b588fa
+      crypted = crypt (buf, salt);
b588fa
+      if(crypted == NULL) {
b588fa
+	fprintf (stderr, _("Sorry - crypt() failed.\n"));
b588fa
+	return 1;
b588fa
+      } else {
b588fa
+	yppwd.newpw.pw_passwd = strdup (crypted);
b588fa
+      }
b588fa
     }
b588fa
 
b588fa
   if (f_flag)