| From: | Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com> |
|---|---|
| To: | PostgreSQL-development <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
| Cc: | Nathan Bossart <nathandbossart(at)gmail(dot)com>, Gilles Darold <gilles(at)darold(dot)net> |
| Subject: | Fix md5_password_warnings for role/database settings |
| Date: | 2026-06-10 06:26:19 |
| Message-ID: | AE46E42D-5966-4D76-9E64-95EAB01B9FB5@gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hi,
While testing “[bc60ee860] Warn upon successful MD5 password authentication”, I found a small issue.
This feature emits a warning based on the existing GUC md5_password_warnings, but it queues the message in md5_crypt_verify(), before GUC values are loaded by process_startup_options() and process_settings(). As a result, settings loaded later during connection startup, such as startup options or ALTER ROLE/ALTER DATABASE settings, are not honored for this warning.
Here is a repro:
1. Edit pg_hba.conf, add this line:
```
local postgres md5_role md5
```
2. Setup in session 1:
```
evantest=# set password_encryption='md5';
SET
evantest=# create role md5_role login password 'pass';
WARNING: setting an MD5-encrypted password
DETAIL: MD5 password support is deprecated and will be removed in a future release of PostgreSQL.
HINT: Refer to the PostgreSQL documentation for details about migrating to another password type.
CREATE ROLE
evantest=#
evantest=# alter role md5_role set md5_password_warnings =0;
ALTER ROLE
evantest=# select pg_reload_conf(); -- reload pg_hba.conf as I didn’t restart the server
pg_reload_conf
----------------
t
(1 row)
```
3. Connect as md5_role:
```
% PGPASSWORD=pass psql -d postgres -U md5_role -X -qAt -c “show md5_password_warnings"
WARNING: authenticated with an MD5-encrypted password
DETAIL: MD5 password support is deprecated and will be removed in a future release of PostgreSQL.
off
```
As we can see, although the role’s md5_password_warnings setting is off, the warning message is still shown.
This feature uses the connection warning infrastructure introduced by 1d92e0c2cc, so fixing the problem requires enhancing that infrastructure.
In the current implementation, there are two lists: ConnectionWarningMessages and ConnectionWarningDetails. The attached patch combines them into one list and adds a filter function to each list member, so the filter can be applied in EmitConnectionWarnings(). With this mechanism, the warning emitted upon successful MD5 authentication is checked against the final value of md5_password_warnings, while 1d92e0c2cc’s password expiration warning logic remains unchanged.
See the attached patch for details.
Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/
| Attachment | Content-Type | Size |
|---|---|---|
| v1-0001-Fix-md5_password_warnings-for-role-and-database-s.patch | application/octet-stream | 8.4 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Nisha Moond | 2026-06-10 06:44:52 | Re: DOCS - Add missing EXCEPT parameter description to ALTER PUBLICATION |
| Previous Message | Mohamed ALi | 2026-06-10 06:24:53 | Re: [PATCH] vacuumdb: Add --exclude-database option |