mirror of
https://github.com/postgres/postgres.git
synced 2026-03-09 17:50:43 -04:00
This commit fixes an issue related to the way password verifiers hashed
with MD5 are detected, leading to possibly detect that plain passwords
are legit MD5 hashes. A MD5-hashed entry was checked based on if its
header uses "md5" and if the string length matches what is expected.
Unfortunately the code never checked if the hash only used hexadecimal
characters after the three-character prefix.
Fix 9.6 down to 9.4, where this code is present. This area of the code
has changed in 10 and upwards with the introduction of SCRAM, which led
to a different fix committed as of ccae190.
Reported-by: Tom Lane
Author: Michael Paquier
Reviewed-by: Jonathan Katz
Discussion: https://postgr.es/m/016deb6b-1f0a-8e9f-1833-a8675b170aa9@postgresql.org
Backpatch-through: 9.4
32 lines
1,020 B
C
32 lines
1,020 B
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* md5.h
|
|
* Interface to libpq/md5.c
|
|
*
|
|
* These definitions are needed by both frontend and backend code to work
|
|
* with MD5-encrypted passwords.
|
|
*
|
|
* Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/libpq/md5.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef PG_MD5_H
|
|
#define PG_MD5_H
|
|
|
|
#define MD5_PASSWD_CHARSET "0123456789abcdef"
|
|
#define MD5_PASSWD_LEN 35
|
|
|
|
#define isMD5(passwd) (strncmp(passwd, "md5", 3) == 0 && \
|
|
strlen(passwd) == MD5_PASSWD_LEN && \
|
|
strspn(passwd + 3, MD5_PASSWD_CHARSET) == MD5_PASSWD_LEN - 3)
|
|
|
|
|
|
extern bool pg_md5_hash(const void *buff, size_t len, char *hexsum);
|
|
extern bool pg_md5_binary(const void *buff, size_t len, void *outbuf);
|
|
extern bool pg_md5_encrypt(const char *passwd, const char *salt,
|
|
size_t salt_len, char *buf);
|
|
|
|
#endif
|