Le 08/08/2017 à 12:09, Martin Ågren a écrit : > On 8 August 2017 at 09:48, Nicolas Morey-Chaisemartin > <nicolas@xxxxxxxxxxxxxxxxxxxxxx> wrote: >> Up to this point, the curl mode only supported getting the username >> and password from the gitconfig file while the legacy mode could also >> fetch them using the credential API. >> >> Signed-off-by: Nicolas Morey-Chaisemartin <nicolas@xxxxxxxxxxxxxxxxxxxxxx> >> --- >> imap-send.c | 10 ++++++++-- >> 1 file changed, 8 insertions(+), 2 deletions(-) >> >> diff --git a/imap-send.c b/imap-send.c >> index 448a4a0b3..5e80edaff 100644 >> --- a/imap-send.c >> +++ b/imap-send.c >> @@ -1398,7 +1398,7 @@ static int append_msgs_to_imap(struct imap_server_conf *server, >> } >> >> #ifdef USE_CURL_FOR_IMAP_SEND >> -static CURL *setup_curl(struct imap_server_conf *srvc) >> +static CURL *setup_curl(struct imap_server_conf *srvc, struct credential *cred) > Hmm, yeah, that really did pollute the interface. :) > >> { >> CURL *curl; >> struct strbuf path = STRBUF_INIT; >> @@ -1411,6 +1411,7 @@ static CURL *setup_curl(struct imap_server_conf *srvc) >> if (!curl) >> die("curl_easy_init failed"); >> >> + server_fill_credential(&server, cred); >> curl_easy_setopt(curl, CURLOPT_USERNAME, server.user); >> curl_easy_setopt(curl, CURLOPT_PASSWORD, server.pass); >> >> @@ -1460,8 +1461,9 @@ static int curl_append_msgs_to_imap(struct imap_server_conf *server, >> struct buffer msgbuf = { STRBUF_INIT, 0 }; >> CURL *curl; >> CURLcode res = CURLE_OK; >> + struct credential cred = CREDENTIAL_INIT; >> >> - curl = setup_curl(server); >> + curl = setup_curl(server, &cred); >> curl_easy_setopt(curl, CURLOPT_READDATA, &msgbuf); >> >> fprintf(stderr, "sending %d message%s\n", total, (total != 1) ? "s" : ""); >> @@ -1496,6 +1498,10 @@ static int curl_append_msgs_to_imap(struct imap_server_conf *server, >> curl_easy_cleanup(curl); >> curl_global_cleanup(); >> >> + if (res == CURLE_OK && cred.username) >> + credential_approve(&cred); > Maybe a similar call to credential_reject(&cred) here? I guess all we'll > know is that some sort of error happened, possibly credentials-related, > possibly not. Just a thought. Checking the doc, there is actually a CURLE_LOGIN_DENIED return code which means authentication failed. I'll fix this in v3 Nicolas