• Heikki Linnakangas's avatar
    Don't use SCRAM-specific "e=invalid-proof" on invalid password. · 344a1130
    Heikki Linnakangas authored
    Instead, send the same FATAL message as with other password-based
    authentication mechanisms. This gives a more user-friendly message:
    
    psql: FATAL:  password authentication failed for user "test"
    
    instead of:
    
    psql: error received from server in SASL exchange: invalid-proof
    
    Even before this patch, the server sent that FATAL message, after the
    SCRAM-specific "e=invalid-proof" message. But libpq would stop at the
    SCRAM error message, and not process the ErrorResponse that would come
    after that. We could've taught libpq to check for an ErrorResponse after
    failed authentication, but it's simpler to modify the server to send only
    the ErrorResponse. The SCRAM specification allows for aborting the
    authentication at any point, using an application-defined error mechanism,
    like PostgreSQL's ErrorResponse. Using the e=invalid-proof message is
    optional.
    
    Reported by Jeff Janes.
    
    Discussion: https://www.postgresql.org/message-id/CAMkU%3D1w3jQ53M1OeNfN8Cxd9O%2BA_9VONJivTbYoYRRdRsLT6vA@mail.gmail.com
    344a1130
auth-scram.c 33.7 KB