diff options
| -rw-r--r-- | lib/imap.c | 45 | 
1 files changed, 33 insertions, 12 deletions
diff --git a/lib/imap.c b/lib/imap.c index 547b7904f..23b020be4 100644 --- a/lib/imap.c +++ b/lib/imap.c @@ -557,6 +557,38 @@ static CURLcode imap_perform_login(struct connectdata *conn)  /***********************************************************************   * + * imap_perform_authenticate() + * + * Sends an AUTHENTICATE command allowing the client to login with the given + * SASL authentication mechanism. + */ +static CURLcode imap_perform_authenticate(struct connectdata *conn, +                                          const char *mech, +                                          const char *initresp, +                                          imapstate state1, imapstate state2) +{ +  CURLcode result = CURLE_OK; + +  if(initresp) { +    /* Send the AUTHENTICATE command with the initial response */ +    result = imap_sendf(conn, "AUTHENTICATE %s %s", mech, initresp); + +    if(!result) +      state(conn, state2); +  } +  else { +    /* Send the AUTHENTICATE command */ +    result = imap_sendf(conn, "AUTHENTICATE %s", mech); + +    if(!result) +      state(conn, state1); +  } + +  return result; +} + +/*********************************************************************** + *   * imap_perform_authentication()   *   * Initiates the authentication sequence, with the appropriate SASL @@ -653,18 +685,7 @@ static CURLcode imap_perform_authentication(struct connectdata *conn)    if(!result) {      if(mech && (imapc->preftype & IMAP_TYPE_SASL)) {        /* Perform SASL based authentication */ -      if(initresp) { -        result = imap_sendf(conn, "AUTHENTICATE %s %s", mech, initresp); - -        if(!result) -          state(conn, state2); -      } -      else { -        result = imap_sendf(conn, "AUTHENTICATE %s", mech); - -        if(!result) -          state(conn, state1); -      } +      result = imap_perform_authenticate(conn, mech, initresp, state1, state2);        Curl_safefree(initresp);      }  | 
