From 367648d24a0e92080322a3f2cdd4948a473a0335 Mon Sep 17 00:00:00 2001 From: Steve Holme Date: Wed, 18 Dec 2013 07:05:11 +0000 Subject: [PATCH] pop3: Moved the sending of the AUTH command into a separate function --- lib/pop3.c | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/lib/pop3.c b/lib/pop3.c index c2c6bc734..b0bf7f179 100644 --- a/lib/pop3.c +++ b/lib/pop3.c @@ -572,6 +572,39 @@ static CURLcode pop3_perform_apop(struct connectdata *conn) } #endif +/*********************************************************************** + * + * pop3_perform_auth() + * + * Sends an AUTH command allowing the client to login with the given SASL + * authentication mechanism. + */ +static CURLcode pop3_perform_auth(struct connectdata *conn, + const char *mech, + const char *initresp, size_t len, + pop3state state1, pop3state state2) +{ + CURLcode result = CURLE_OK; + struct pop3_conn *pop3c = &conn->proto.pop3c; + + if(initresp && 8 + strlen(mech) + len <= 255) { /* AUTH ... */ + /* Send the AUTH command with the initial response */ + result = Curl_pp_sendf(&pop3c->pp, "AUTH %s %s", mech, initresp); + + if(!result) + state(conn, state2); + } + else { + /* Send the AUTH command */ + result = Curl_pp_sendf(&pop3c->pp, "AUTH %s", mech); + + if(!result) + state(conn, state1); + } + + return result; +} + /*********************************************************************** * * pop3_perform_authentication() @@ -673,19 +706,7 @@ static CURLcode pop3_perform_authentication(struct connectdata *conn) if(!result) { if(mech && (pop3c->preftype & POP3_TYPE_SASL)) { /* Perform SASL based authentication */ - if(initresp && - 8 + strlen(mech) + len <= 255) { /* AUTH ... */ - result = Curl_pp_sendf(&pop3c->pp, "AUTH %s %s", mech, initresp); - - if(!result) - state(conn, state2); - } - else { - result = Curl_pp_sendf(&pop3c->pp, "AUTH %s", mech); - - if(!result) - state(conn, state1); - } + result = pop3_perform_auth(conn, mech, initresp, len, state1, state2); Curl_safefree(initresp); }