]> granicus.if.org Git - shadow/commitdiff
Do not seed the random number generator each time, and use the time in
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sun, 3 Feb 2008 17:23:58 +0000 (17:23 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sun, 3 Feb 2008 17:23:58 +0000 (17:23 +0000)
microseconds to avoid having the same salt for different passwords
generated in the same second.  This permits to avoid using the same salt
for different passwords in newusers.

ChangeLog
NEWS
libmisc/salt.c

index cc8ceed805256dad6e4e402cd25ae6aad0c1faad..a6d24c272ffd66136c30def9ad58a13771c2bee6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-02-03  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, libmisc/salt.c: Do not seed the random number generator
+       each time, and use the time in microseconds to avoid having the
+       same salt for different passwords generated in the same second.
+       This permits to avoid using the same salt for different passwords
+       in newusers.
+
 2008-02-03  Nicolas François  <nicolas.francois@centraliens.net>
 
        * lib/pwio.c, lib/pwio.h: New function to find an user by
diff --git a/NEWS b/NEWS
index f3cec99652c3fe3b26cfbf2b738c523fcc6f21d8..73b9d87c5be35b7736f28078601e2ba709dc5086 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,10 @@ $Id$
 shadow-4.1.0 -> shadow-4.1.1                                           UNRELEASED
 
 *** general:
+- security
+  * Do not seed the random number generator each time, and use the time in
+    microseconds to avoid having the same salt for different passwords
+    generated in the same second.
 - packaging
   * Do not install the shadow library per default.
 - chage
@@ -29,6 +33,7 @@ shadow-4.1.0 -> shadow-4.1.1                                          UNRELEASED
   * The new users are no more added to the list of members of their groups
     because the membership is already set by their primary group.
   * Added support for gshadow.
+  * Avoid using the same salt for different passwords.
 - passwd
   * Make sure that no more than one username argument was provided.
 - pwck
index c61d3e190a806e5e4c1ca5862eddb5f71c89049e..4d931558ad7e6a362c37af83f97a9080d8017b6a 100644 (file)
@@ -23,6 +23,7 @@
 #ifndef HAVE_L64A
 char *l64a(long value);
 #endif
+static void seedRNG (void);
 static char *gensalt (unsigned int salt_size);
 #ifdef USE_SHA_CRYPT
 static unsigned int SHA_salt_size (void);
@@ -64,6 +65,18 @@ static char *l64a(long value)
 }
 #endif /* !HAVE_L64A */
 
+static void seedRNG (void)
+{
+       struct timeval tv;
+       static int seeded = 0;
+
+       if (0 == seeded) {
+               gettimeofday(&tv, NULL);
+               srandom (tv.tv_sec + tv.tv_usec);
+               seeded = 1;
+       }
+}
+
 /*
  * Add the salt prefix.
  */
@@ -160,7 +173,7 @@ static char *gensalt (unsigned int salt_size)
 
        assert (salt_size >= MIN_SALT_SIZE &&
                salt_size <= MAX_SALT_SIZE);
-       srandom ((unsigned int)time(NULL));
+       seedRNG ();
        strcat (salt, l64a (random()));
        do {
                strcat (salt, l64a (random()));