sasl: make login option string override http auth

- Use http authentication mechanisms as a default, not a preset.

Consider http authentication options which are mapped to SASL options as
a default (overriding the hardcoded default mask for the protocol) that
is ignored if a login option string is given.

Prior to this change, if some HTTP auth options were given, sasl mapped
http authentication options to sasl ones but merged them with the login
options.

That caused problems with the cli tool that sets the http login option
CURLAUTH_BEARER as a side-effect of --oauth2-bearer, because this flag
maps to more than one sasl mechanisms and the latter cannot be cleared
individually by the login options string.

New test 992 checks this.

Fixes https://github.com/curl/curl/issues/10259
Closes https://github.com/curl/curl/pull/12790
This commit is contained in:
Patrick Monnerat 2024-01-25 13:58:19 +01:00 committed by Jay Satiro
parent 65c7e4f92b
commit 7b2d98dfad
3 changed files with 65 additions and 8 deletions

52
tests/data/test992 Normal file
View file

@ -0,0 +1,52 @@
<testcase>
<info>
<keywords>
SASL
</keywords>
</info>
#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER XOAUTH2
REPLY AUTH 334 XOAUTH2 supported
REPLY dXNlcj11c2VyAWF1dGg9QmVhcmVyIG1GXzkuQjVmLTQuMUpxTQEB 235 Authenticated
</servercmd>
</reply>
#
# Client-side
<client>
<server>
smtp
</server>
<name>
SASL verify default mechanisms are reset by login options
</name>
<stdin>
mail body
</stdin>
<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user --oauth2-bearer mF_9.B5f-4.1JqM --login-options "AUTH=XOAUTH2" -T -
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO %TESTNUMBER
AUTH XOAUTH2
dXNlcj11c2VyAWF1dGg9QmVhcmVyIG1GXzkuQjVmLTQuMUpxTQEB
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
mail body
.
</upload>
</verify>
</testcase>