]> granicus.if.org Git - curl/commitdiff
imap.c: Fixed bad state error when logging in with invalid credentials
authorSteve Holme <steve_holme@hotmail.com>
Sat, 29 Dec 2012 19:23:10 +0000 (19:23 +0000)
committerSteve Holme <steve_holme@hotmail.com>
Sat, 29 Dec 2012 19:23:10 +0000 (19:23 +0000)
Fixed a problem with the state machine when attempting to log in with
invalid credentials. The server would report login failure but libcurl
would not read the response due to inappropriate IMAP_STOP states being
set after the login was sent.

lib/imap.c

index 18a4b16f2fd03c91446843d748628aba57682b5e..72ede7e45f59aba79f79f6c4e1f0c02c198e2df9 100644 (file)
@@ -462,7 +462,7 @@ static CURLcode imap_state_starttls_resp(struct connectdata *conn,
   else {
     if(data->state.used_interface == Curl_if_multi) {
       state(conn, IMAP_UPGRADETLS);
-      return imap_state_upgrade_tls(conn);
+      result = imap_state_upgrade_tls(conn);
     }
     else {
       result = Curl_ssl_connect(conn, FIRSTSOCKET);
@@ -473,8 +473,6 @@ static CURLcode imap_state_starttls_resp(struct connectdata *conn,
     }
   }
 
-  state(conn, IMAP_STOP);
-
   return result;
 }
 
@@ -488,7 +486,6 @@ static CURLcode imap_state_upgrade_tls(struct connectdata *conn)
   if(imapc->ssldone) {
     imap_to_imaps(conn);
     result = imap_state_login(conn);
-    state(conn, IMAP_STOP);
   }
 
   return result;
@@ -508,9 +505,9 @@ static CURLcode imap_state_login_resp(struct connectdata *conn,
     failf(data, "Access denied. %c", imapcode);
     result = CURLE_LOGIN_DENIED;
   }
-
-  /* End of connect phase */
-  state(conn, IMAP_STOP);
+  else
+    /* End of connect phase */
+    state(conn, IMAP_STOP);
 
   return result;
 }
@@ -655,6 +652,7 @@ static CURLcode imap_state_fetch_resp(struct connectdata *conn,
     /* We don't know how to parse this line */
     result = CURLE_FTP_WEIRD_SERVER_REPLY; /* TODO: fix this code */
 
+  /* End of do phase */
   state(conn, IMAP_STOP);
 
   return result;