Commit 488245f9 authored by Steve Holme's avatar Steve Holme
Browse files

imap.c: Fixed bad state error when logging in with invalid credentials

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.
parent 27f90c09
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -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,7 +505,7 @@ static CURLcode imap_state_login_resp(struct connectdata *conn,
    failf(data, "Access denied. %c", imapcode);
    result = CURLE_LOGIN_DENIED;
  }

  else
    /* End of connect phase */
    state(conn, IMAP_STOP);

@@ -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;