* libmisc/salt.c: Add prototype for l64a(), gensalt(),
SHA_salt_size(), and SHA_salt_rounds(). * libmisc/salt.c: l64a() and gensalt() are static. * libmisc/salt.c: The `meth' parameter of crypt_make_salt() is a const. (ditto for the method variable). * libmisc/salt.c: SHA_salt_rounds returns a const string. * libmisc/salt.c: Avoid warnings with cast of random() to double. * libmisc/salt.c: Replace rand() by random().
This commit is contained in:
parent
8a1abbe80b
commit
e663f6c0b4
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
|||||||
|
2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
|
||||||
|
|
||||||
|
* libmisc/salt.c: Add prototype for l64a(), gensalt(),
|
||||||
|
SHA_salt_size(), and SHA_salt_rounds().
|
||||||
|
* libmisc/salt.c: l64a() and gensalt() are static.
|
||||||
|
* libmisc/salt.c: The `meth' parameter of crypt_make_salt() is a
|
||||||
|
const. (ditto for the method variable).
|
||||||
|
* libmisc/salt.c: SHA_salt_rounds returns a const string.
|
||||||
|
* libmisc/salt.c: Avoid warnings with cast of random() to double.
|
||||||
|
* libmisc/salt.c: Replace rand() by random().
|
||||||
|
|
||||||
2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
|
2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
|
||||||
|
|
||||||
* lib/Makefile.am: Do not link libshadow.la with the intl, crypt,
|
* lib/Makefile.am: Do not link libshadow.la with the intl, crypt,
|
||||||
|
@ -18,8 +18,18 @@
|
|||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "getdef.h"
|
#include "getdef.h"
|
||||||
|
|
||||||
|
/* local function prototypes */
|
||||||
#ifndef HAVE_L64A
|
#ifndef HAVE_L64A
|
||||||
char *l64a(long value)
|
char *l64a(long value);
|
||||||
|
#endif
|
||||||
|
static char *gensalt (unsigned int salt_size);
|
||||||
|
#ifdef USE_SHA_CRYPT
|
||||||
|
static unsigned int SHA_salt_size (void);
|
||||||
|
static const char *SHA_salt_rounds (int *prefered_rounds);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_L64A
|
||||||
|
static char *l64a(long value)
|
||||||
{
|
{
|
||||||
static char buf[8];
|
static char buf[8];
|
||||||
char *s = buf;
|
char *s = buf;
|
||||||
@ -66,8 +76,9 @@ char *l64a(long value)
|
|||||||
*/
|
*/
|
||||||
static unsigned int SHA_salt_size (void)
|
static unsigned int SHA_salt_size (void)
|
||||||
{
|
{
|
||||||
srandom ((unsigned int)time (NULL));
|
double rand_rounds = 9 * random ();
|
||||||
return 8 + (double)random () * 9 / RAND_MAX;
|
rand_rounds /= RAND_MAX;
|
||||||
|
return 8 + rand_rounds;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ! Arguments evaluated twice ! */
|
/* ! Arguments evaluated twice ! */
|
||||||
@ -84,7 +95,7 @@ static unsigned int SHA_salt_size (void)
|
|||||||
/*
|
/*
|
||||||
* Return a salt prefix specifying the rounds number for the SHA crypt methods.
|
* Return a salt prefix specifying the rounds number for the SHA crypt methods.
|
||||||
*/
|
*/
|
||||||
static char *SHA_salt_rounds (int *prefered_rounds)
|
static const char *SHA_salt_rounds (int *prefered_rounds)
|
||||||
{
|
{
|
||||||
static char rounds_prefix[18];
|
static char rounds_prefix[18];
|
||||||
long rounds;
|
long rounds;
|
||||||
@ -92,6 +103,7 @@ static char *SHA_salt_rounds (int *prefered_rounds)
|
|||||||
if (NULL == prefered_rounds) {
|
if (NULL == prefered_rounds) {
|
||||||
long min_rounds = getdef_long ("SHA_CRYPT_MIN_ROUNDS", -1);
|
long min_rounds = getdef_long ("SHA_CRYPT_MIN_ROUNDS", -1);
|
||||||
long max_rounds = getdef_long ("SHA_CRYPT_MAX_ROUNDS", -1);
|
long max_rounds = getdef_long ("SHA_CRYPT_MAX_ROUNDS", -1);
|
||||||
|
double rand_rounds;
|
||||||
|
|
||||||
if (-1 == min_rounds && -1 == max_rounds)
|
if (-1 == min_rounds && -1 == max_rounds)
|
||||||
return "";
|
return "";
|
||||||
@ -106,8 +118,9 @@ static char *SHA_salt_rounds (int *prefered_rounds)
|
|||||||
max_rounds = min_rounds;
|
max_rounds = min_rounds;
|
||||||
|
|
||||||
srand (time (NULL));
|
srand (time (NULL));
|
||||||
rounds = min_rounds +
|
rand_rounds = (max_rounds-min_rounds+1) * random ();
|
||||||
(double)rand () * (max_rounds-min_rounds+1)/RAND_MAX;
|
rand_rounds /= RAND_MAX;
|
||||||
|
rounds = min_rounds + rand_rounds;
|
||||||
} else if (0 == *prefered_rounds)
|
} else if (0 == *prefered_rounds)
|
||||||
return "";
|
return "";
|
||||||
else
|
else
|
||||||
@ -138,7 +151,8 @@ static char *SHA_salt_rounds (int *prefered_rounds)
|
|||||||
#define MAX_SALT_SIZE 16
|
#define MAX_SALT_SIZE 16
|
||||||
#define MIN_SALT_SIZE 8
|
#define MIN_SALT_SIZE 8
|
||||||
|
|
||||||
char *gensalt (unsigned int salt_size) {
|
static char *gensalt (unsigned int salt_size)
|
||||||
|
{
|
||||||
static char salt[32];
|
static char salt[32];
|
||||||
|
|
||||||
salt[0] = '\0';
|
salt[0] = '\0';
|
||||||
@ -170,7 +184,7 @@ char *gensalt (unsigned int salt_size) {
|
|||||||
* * For the SHA256 and SHA512 method, this specifies the number of rounds
|
* * For the SHA256 and SHA512 method, this specifies the number of rounds
|
||||||
* (if not NULL).
|
* (if not NULL).
|
||||||
*/
|
*/
|
||||||
char *crypt_make_salt (char *meth, void *arg)
|
char *crypt_make_salt (const char *meth, void *arg)
|
||||||
{
|
{
|
||||||
/* Max result size for the SHA methods:
|
/* Max result size for the SHA methods:
|
||||||
* +3 $5$
|
* +3 $5$
|
||||||
@ -180,7 +194,7 @@ char *crypt_make_salt (char *meth, void *arg)
|
|||||||
*/
|
*/
|
||||||
static char result[40];
|
static char result[40];
|
||||||
size_t salt_len = 8;
|
size_t salt_len = 8;
|
||||||
char *method;
|
const char *method;
|
||||||
|
|
||||||
result[0] = '\0';
|
result[0] = '\0';
|
||||||
|
|
||||||
@ -220,3 +234,4 @@ char *crypt_make_salt (char *meth, void *arg)
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user