Re: Password identifiers, protocol aging and SCRAM protocol

Heikki Linnakangas <hlinnaka@iki.fi>

From: Heikki Linnakangas <hlinnaka@iki.fi>
To: Michael Paquier <michael.paquier@gmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, David Steele <david@pgmasters.net>, Robert Haas <robertmhaas@gmail.com>, David Fetter <david@fetter.org>, Alvaro Herrera <alvherre@2ndquadrant.com>, Magnus Hagander <magnus@hagander.net>, Peter Eisentraut <peter.eisentraut@2ndquadrant.com>, Julian Markwort <julian.markwort@uni-muenster.de>, Stephen Frost <sfrost@snowman.net>, PostgreSQL mailing lists <pgsql-hackers@postgresql.org>, Valery Popov <v.popov@postgrespro.ru>
Date: 2016-09-02T10:57:30Z
Lists: pgsql-hackers
On 08/19/2016 09:46 AM, Michael Paquier wrote:
> On Fri, Aug 19, 2016 at 1:51 AM, Heikki Linnakangas <hlinnaka@iki.fi> wrote:
>> On 08/18/2016 03:45 PM, Michael Paquier wrote:
>>>
>>> On Thu, Aug 18, 2016 at 9:28 PM, Heikki Linnakangas <hlinnaka@iki.fi>
>>> wrote:
>>> For the current ip.c, I don't have a better idea than putting in
>>> src/common/ip.c the set of routines used by both the frontend and
>>> backend, and have fe_ip.c the new file that has the frontend-only
>>> things. Need a patch?
>>
>> Yes, please. I don't think there's anything there that's needed by only the
>> frontend, but some of the functions are needed by only the backend. So I
>> think we'll end up with src/common/ip.c, and src/backend/libpq/be-ip.c. (Not
>> sure about those names, pick something that makes sense, given what's left
>> in the files.)
>
> OK, so let's do that first correctly. Attached are two patches:
> - 0001 moves md5 to src/common
> - 0002 that does the same for ip.c.
> By the way, it seems to me that having be-ip.c is not that much worth
> it. I am noticing that only pg_range_sockaddr could be marked as
> backend-only. pg_foreach_ifaddr is being used as well by
> tools/ifaddrs/, and this one calls as well pg_sockaddr_cidr_mask. Or
> is there still some utility in having src/tools/ifaddrs? If not we
> could move pg_sockaddr_cidr_mask and pg_foreach_ifaddr to be
> backend-only. With pg_range_sockaddr that would make half the routines
> to be marked as backend-only.

I decided to split ip.c anyway. I'd like to keep the files in 
src/common/ip.c as small as possible, so I think it makes sense to be 
quite surgical when moving things there. I kept the pg_foreach_ifaddr() 
function in src/backend/libpq/ifaddr.c (I renamed the file to avoid 
confusion with the ip.c that got moved), even though it means that 
test_ifaddr will have to continue to copy the file directly from 
src/backend/libpq. I'm OK with that, because test_ifaddrs is just a 
little test program that mimics the backend's behaviour of enumerating 
interfaces. I don't consider it to be a "real" frontend application.

Pushed, after splitting. Thanks! Now let's move on to the more 
substantial patches.

- Heikki



Commits

  1. Support SCRAM-SHA-256 authentication (RFC 5802 and 7677).

  2. Refactor SHA2 functions and move them to src/common/.

  3. Replace isMD5() with a more future-proof way to check if pw is encrypted.

  4. Remove bogus notice that older clients might not work with MD5 passwords.

  5. Refactor the code for verifying user's password.

  6. Replace PostmasterRandom() with a stronger source, second attempt.

  7. Remove support for (insecure) crypt authentication.