Le 07/08/2017 à 18:30, Martin Ågren a écrit : > On 7 August 2017 at 16:03, Nicolas Morey-Chaisemartin > <nicolas@xxxxxxxxxxxxxxxxxxxxxx> wrote: >> Signed-off-by: Nicolas Morey-Chaisemartin <nicolas@xxxxxxxxxxxxxxxxxxxxxx> >> --- >> imap-send.c | 38 ++++++++++++++++++++++++-------------- >> 1 file changed, 24 insertions(+), 14 deletions(-) >> >> diff --git a/imap-send.c b/imap-send.c >> index b2d0b849b..38b3c817e 100644 >> --- a/imap-send.c >> +++ b/imap-send.c >> @@ -926,6 +926,29 @@ static int auth_cram_md5(struct imap_store *ctx, struct imap_cmd *cmd, const cha >> return 0; >> } >> >> +static void server_fill_credential(struct imap_server_conf *srvc) >> +{ >> + struct credential cred = CREDENTIAL_INIT; >> + >> + if (srvc->user && srvc->pass) >> + return; >> + >> + cred.protocol = xstrdup(srvc->use_ssl ? "imaps" : "imap"); >> + cred.host = xstrdup(srvc->host); >> + >> + cred.username = xstrdup_or_null(srvc->user); >> + cred.password = xstrdup_or_null(srvc->pass); >> + >> + credential_fill(&cred); >> + >> + if (!srvc->user) >> + srvc->user = xstrdup(cred.username); >> + if (!srvc->pass) >> + srvc->pass = xstrdup(cred.password); >> + >> + credential_clear(&cred); >> +} >> + >> static struct imap_store *imap_open_store(struct imap_server_conf *srvc, char *folder) >> { >> struct credential cred = CREDENTIAL_INIT; >> @@ -1078,20 +1101,7 @@ static struct imap_store *imap_open_store(struct imap_server_conf *srvc, char *f >> } >> #endif >> imap_info("Logging in...\n"); >> - if (!srvc->user || !srvc->pass) { >> - cred.protocol = xstrdup(srvc->use_ssl ? "imaps" : "imap"); >> - cred.host = xstrdup(srvc->host); >> - >> - cred.username = xstrdup_or_null(srvc->user); >> - cred.password = xstrdup_or_null(srvc->pass); >> - >> - credential_fill(&cred); >> - >> - if (!srvc->user) >> - srvc->user = xstrdup(cred.username); >> - if (!srvc->pass) >> - srvc->pass = xstrdup(cred.password); >> - } >> + server_fill_credential(srvc); >> >> if (srvc->auth_method) { >> struct imap_cmd_cb cb; > "cred.username" is checked further down, but now it will always be NULL, > no? You're right I missed this. Not sure if this is needed though. >From what I understand this means the username/password are store for the next access to credential. but in the current state, there is only one. Maybe the credential_approved can be dropped ? Nicolas