diff options
Diffstat (limited to 'src/backend/libpq/md5.c')
-rw-r--r-- | src/backend/libpq/md5.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/backend/libpq/md5.c b/src/backend/libpq/md5.c index 846202a7b17..76d54d50b0d 100644 --- a/src/backend/libpq/md5.c +++ b/src/backend/libpq/md5.c @@ -295,16 +295,18 @@ md5_hash(const void *buff, size_t len, char *hexsum) * puts md5(username+passwd) in buf provided buflen is at least 36 bytes * returns 1 on success, 0 on any kind of failure and sets errno accordingly */ -bool EncryptMD5(const char *passwd, const char *salt, char *buf) +bool EncryptMD5(const char *passwd, const char *salt, size_t salt_len, + char *buf) { char crypt_buf[128]; - if (strlen(salt) + strlen(passwd) > 127) + if (salt_len + strlen(passwd) > 127) return false; strcpy(buf, "md5"); memset(crypt_buf, 0, 128); - sprintf(crypt_buf,"%s%s", salt, passwd); + memcpy(crypt_buf, salt, salt_len); + memcpy(crypt_buf+salt_len, passwd, strlen(passwd)); - return md5_hash(crypt_buf, strlen(crypt_buf), buf + 3); + return md5_hash(crypt_buf, salt_len + strlen(passwd), buf + 3); } |