aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2016-08-18 13:41:17 +0300
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2016-08-18 13:41:17 +0300
commitfa878703f456b804b01b61a9d94008f57967cdd0 (patch)
treed170f3046c0fcd9f62ab6932c0846fac3f6c535c /src
parenta79a68562240c58f21680483a8d2e137803bd48f (diff)
downloadpostgresql-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.c20
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;
+ }
}
/*