work around eglibc bug that returns NULL for crypt(3) often enough
authortg <tg@mirbsd.org>
Thu, 18 Jul 2013 20:08:25 +0000 (20:08 +0000)
committertg <tg@mirbsd.org>
Thu, 18 Jul 2013 20:08:25 +0000 (20:08 +0000)
(e.g. triggered in the testsuite)

configure.in
debian/README.source
src/server.c

index d845ce4..e09fe3d 100644 (file)
@@ -15,7 +15,7 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.])
 
-AC_INIT([Concurrent Versions System (CVS)],[1.12.13-MirDebian-10],
+AC_INIT([Concurrent Versions System (CVS)],[1.12.13-MirDebian-11],
        [bug-cvs@nongnu.org],[cvs])
 AC_CONFIG_SRCDIR(src/cvs.h)
 AC_CONFIG_AUX_DIR(build-aux)
index eb6eb63..d6f0312 100644 (file)
@@ -1,5 +1,5 @@
 #!/bin/sh
-# $MirOS: contrib/hosted/tg/deb/cvs/debian/README.source,v 1.16 2013/06/26 19:57:30 tg Exp $
+# $MirOS: contrib/hosted/tg/deb/cvs/debian/README.source,v 1.17 2013/07/18 20:08:25 tg Exp $
 #-
 # The extracted .orig.tar.gz is kept in CVS, in the origtgz branch
 # with appropriate tags. Changes are directly applied to the code,
@@ -11,7 +11,7 @@
 # sudo apt-get install autoconf2.59 automake1.9
 #
 # The patchlevel is kept in configure.in (and regenerated as below).
-# MirDebian-10 is in sync with MirOS-0AB2.1 revision.
+# MirDebian-11 is in sync with MirOS-0AB3.1 revision.
 #
 # The patches should be kept in sync with those in The MirPorts Framework:
 # Vcs-CVS: :ext:_anoncvs@anoncvs.mirbsd.org:/cvs ports/devel/cvs/patches
index 024102b..ee2cedb 100644 (file)
@@ -6694,6 +6694,22 @@ error 0 %s: no such system user\n", username);
 
 extern char *crypt (const char *, const char *);
 
+char *crypt_trad(const char *, const char *);
+
+char *
+crypt_trad(const char *key, const char *setting)
+{
+       char *rv;
+       static char buf[2];
+
+       if ((rv = crypt(key, setting)) == NULL) {
+               buf[0] = setting && (*setting == 'x') ? '*' : 'x';
+               buf[1] = '\0';
+               rv = buf;
+       }
+
+       return (rv);
+}
 \f
 /*
  * 0 means no entry found for this user.
@@ -6822,7 +6838,7 @@ check_repository_password (char *username, char *password, char *repository, cha
 
        /* Verify blank passwords directly, otherwise use crypt(). */
        if ((found_password == NULL)
-           || ((strcmp (found_password, crypt (password, found_password))
+           || ((strcmp (found_password, crypt_trad (password, found_password))
                 == 0)))
        {
            /* Give host_user_ptr permanent storage. */
@@ -6834,7 +6850,7 @@ check_repository_password (char *username, char *password, char *repository, cha
 #ifdef LOG_AUTHPRIV
        syslog (LOG_AUTHPRIV | LOG_NOTICE,
                "password mismatch for %s in %s: %s vs. %s", username,
-               repository, crypt(password, found_password), found_password);
+               repository, crypt_trad(password, found_password), found_password);
 #endif
            *host_user_ptr = NULL;
            retval       = 2;
@@ -6999,14 +7015,14 @@ error 0 %s: no such user\n", username);
     if (*found_passwd)
     {
        /* user exists and has a password */
-       if (strcmp (found_passwd, crypt (password, found_passwd)) == 0)
+       if (strcmp (found_passwd, crypt_trad (password, found_passwd)) == 0)
            return 1;
        else
        {
 #ifdef LOG_AUTHPRIV
            syslog (LOG_AUTHPRIV | LOG_NOTICE,
                    "password mismatch for %s: %s vs. %s", username,
-                   crypt(password, found_passwd), found_passwd);
+                   crypt_trad(password, found_passwd), found_passwd);
 #endif
            return 0;
        }