diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2016-08-18 13:41:17 +0300 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2016-08-18 13:41:17 +0300 |
commit | fa878703f456b804b01b61a9d94008f57967cdd0 (patch) | |
tree | d170f3046c0fcd9f62ab6932c0846fac3f6c535c /src | |
parent | a79a68562240c58f21680483a8d2e137803bd48f (diff) | |
download | postgresql-fa878703f456b804b01b61a9d94008f57967cdd0.tar.gz postgresql-fa878703f456b804b01b61a9d94008f57967cdd0.zip |
Refactor RandomSalt to handle salts of different lengths.
All we need is 4 bytes at the moment, for MD5 authentication. But in
upcomint patches for SCRAM authentication, SCRAM will need a salt of
different length. It's less scary for the caller to pass the buffer
length anyway, than assume a certain-sized output buffer.
Author: Michael Paquier
Discussion: <CAB7nPqQvO4sxLFeS9D+NM3wpy08ieZdAj_6e117MQHZAfxBFsg@mail.gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/postmaster/postmaster.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index f5c8e9d812c..05f3f14e35b 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -404,7 +404,7 @@ static int initMasks(fd_set *rmask); static void report_fork_failure_to_client(Port *port, int errnum); static CAC_state canAcceptConnections(void); static long PostmasterRandom(void); -static void RandomSalt(char *md5Salt); +static void RandomSalt(char *salt, int len); static void signal_child(pid_t pid, int signal); static bool SignalSomeChildren(int signal, int targets); static void TerminateChildren(int signal); @@ -2342,7 +2342,7 @@ ConnCreate(int serverFd) * after. Else the postmaster's random sequence won't get advanced, and * all backends would end up using the same salt... */ - RandomSalt(port->md5Salt); + RandomSalt(port->md5Salt, sizeof(port->md5Salt)); /* * Allocate GSSAPI specific state struct @@ -5083,23 +5083,21 @@ StartupPacketTimeoutHandler(void) * RandomSalt */ static void -RandomSalt(char *md5Salt) +RandomSalt(char *salt, int len) { long rand; + int i; /* * We use % 255, sacrificing one possible byte value, so as to ensure that * all bits of the random() value participate in the result. While at it, * add one to avoid generating any null bytes. */ - rand = PostmasterRandom(); - md5Salt[0] = (rand % 255) + 1; - rand = PostmasterRandom(); - md5Salt[1] = (rand % 255) + 1; - rand = PostmasterRandom(); - md5Salt[2] = (rand % 255) + 1; - rand = PostmasterRandom(); - md5Salt[3] = (rand % 255) + 1; + for (i = 0; i < len; i++) + { + rand = PostmasterRandom(); + salt[i] = (rand % 255) + 1; + } } /* |