Esempio n. 1
0
/* for EHLO responses */
static CURLcode smtp_state_ehlo_resp(struct connectdata *conn,
                                     int smtpcode,
                                     smtpstate instate)
{
    CURLcode result = CURLE_OK;
    struct SessionHandle *data = conn->data;

    (void)instate; /* no use for this yet */

    if(smtpcode/100 != 2) {
        if((data->set.ftp_ssl <= CURLUSESSL_TRY || conn->ssl[FIRSTSOCKET].use) &&
                !conn->bits.user_passwd)
            result = smtp_state_helo(conn);
        else {
            failf(data, "Access denied: %d", smtpcode);
            result = CURLE_LOGIN_DENIED;
        }
    }
    else if(data->set.ftp_ssl && !conn->ssl[FIRSTSOCKET].use) {
        /* We don't have a SSL/TLS connection yet, but SSL is requested. Switch
           to TLS connection now */
        result = Curl_pp_sendf(&conn->proto.smtpc.pp, "STARTTLS");
        state(conn, SMTP_STARTTLS);
    }
    else
        result = smtp_authenticate(conn);

    return result;
}
Esempio n. 2
0
/* For EHLO responses */
static CURLcode smtp_state_ehlo_resp(struct connectdata *conn, int smtpcode,
                                     smtpstate instate)
{
  CURLcode result = CURLE_OK;
  struct SessionHandle *data = conn->data;
  struct smtp_conn *smtpc = &conn->proto.smtpc;

  (void)instate; /* no use for this yet */

  if(smtpcode/100 != 2) {
    if((data->set.use_ssl <= CURLUSESSL_TRY || conn->ssl[FIRSTSOCKET].use) &&
     !conn->bits.user_passwd)
      result = smtp_state_helo(conn);
    else {
      failf(data, "Remote access denied: %d", smtpcode);
      result = CURLE_REMOTE_ACCESS_DENIED;
    }
  }
  else if(data->set.use_ssl && !conn->ssl[FIRSTSOCKET].use) {
    /* We don't have a SSL/TLS connection yet, but SSL is requested */
    if(smtpc->tls_supported)
      /* Switch to TLS connection now */
      result = smtp_state_starttls(conn);
    else if(data->set.use_ssl == CURLUSESSL_TRY)
      /* Fallback and carry on with authentication */
      result = smtp_authenticate(conn);
    else {
      failf(data, "STARTTLS not supported.");
      result = CURLE_USE_SSL_FAILED;
    }
  }
  else
    result = smtp_authenticate(conn);

  return result;
}