PolarSSL: Fixed build with backend
PolarSSL does not support HTTPS proxies yet (ssl_connect_init_proxy returns CURLE_NOT_BUILT_IN).
This commit is contained in:
		
				
					committed by
					
						
						Daniel Stenberg
					
				
			
			
				
	
			
			
			
						parent
						
							68a7d38aa0
						
					
				
				
					commit
					f956ebf252
				
			@@ -132,6 +132,10 @@ polarssl_connect_step1(struct connectdata *conn,
 | 
			
		||||
{
 | 
			
		||||
  struct SessionHandle *data = conn->data;
 | 
			
		||||
  struct ssl_connect_data* connssl = &conn->ssl[sockindex];
 | 
			
		||||
  const char *capath = SSL_CONN_CONFIG(CApath);
 | 
			
		||||
  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
 | 
			
		||||
    conn->host.name;
 | 
			
		||||
  const long int port = SSL_IS_PROXY() ? conn->port : conn->remote_port;
 | 
			
		||||
 | 
			
		||||
  bool sni = TRUE; /* default is SNI enabled */
 | 
			
		||||
  int ret = -1;
 | 
			
		||||
@@ -146,11 +150,11 @@ polarssl_connect_step1(struct connectdata *conn,
 | 
			
		||||
  errorbuf[0]=0;
 | 
			
		||||
 | 
			
		||||
  /* PolarSSL only supports SSLv3 and TLSv1 */
 | 
			
		||||
  if(conn->ssl_config.version == CURL_SSLVERSION_SSLv2) {
 | 
			
		||||
  if(SSL_CONN_CONFIG(version) == CURL_SSLVERSION_SSLv2) {
 | 
			
		||||
    failf(data, "PolarSSL does not support SSLv2");
 | 
			
		||||
    return CURLE_SSL_CONNECT_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
  else if(conn->ssl_config.version == CURL_SSLVERSION_SSLv3)
 | 
			
		||||
  else if(SSL_CONN_CONFIG(version) == CURL_SSLVERSION_SSLv3)
 | 
			
		||||
    sni = FALSE; /* SSLv3 has no SNI */
 | 
			
		||||
 | 
			
		||||
#ifdef THREADING_SUPPORT
 | 
			
		||||
@@ -180,34 +184,33 @@ polarssl_connect_step1(struct connectdata *conn,
 | 
			
		||||
  /* Load the trusted CA */
 | 
			
		||||
  memset(&connssl->cacert, 0, sizeof(x509_crt));
 | 
			
		||||
 | 
			
		||||
  if(conn->ssl_config.CAfile) {
 | 
			
		||||
  if(SSL_CONN_CONFIG(CAfile)) {
 | 
			
		||||
    ret = x509_crt_parse_file(&connssl->cacert,
 | 
			
		||||
                              conn->ssl_config.CAfile);
 | 
			
		||||
                              SSL_CONN_CONFIG(CAfile));
 | 
			
		||||
 | 
			
		||||
    if(ret<0) {
 | 
			
		||||
#ifdef POLARSSL_ERROR_C
 | 
			
		||||
      error_strerror(ret, errorbuf, sizeof(errorbuf));
 | 
			
		||||
#endif /* POLARSSL_ERROR_C */
 | 
			
		||||
      failf(data, "Error reading ca cert file %s - PolarSSL: (-0x%04X) %s",
 | 
			
		||||
            conn->ssl_config.CAfile, -ret, errorbuf);
 | 
			
		||||
            SSL_CONN_CONFIG(CAfile), -ret, errorbuf);
 | 
			
		||||
 | 
			
		||||
      if(conn->ssl_config.verifypeer)
 | 
			
		||||
      if(SSL_CONN_CONFIG(verifypeer))
 | 
			
		||||
        return CURLE_SSL_CACERT_BADFILE;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if(data->set.str[STRING_SSL_CAPATH]) {
 | 
			
		||||
    ret = x509_crt_parse_path(&connssl->cacert,
 | 
			
		||||
                              data->set.str[STRING_SSL_CAPATH]);
 | 
			
		||||
  if(capath) {
 | 
			
		||||
    ret = x509_crt_parse_path(&connssl->cacert, capath);
 | 
			
		||||
 | 
			
		||||
    if(ret<0) {
 | 
			
		||||
#ifdef POLARSSL_ERROR_C
 | 
			
		||||
      error_strerror(ret, errorbuf, sizeof(errorbuf));
 | 
			
		||||
#endif /* POLARSSL_ERROR_C */
 | 
			
		||||
      failf(data, "Error reading ca cert path %s - PolarSSL: (-0x%04X) %s",
 | 
			
		||||
            data->set.str[STRING_SSL_CAPATH], -ret, errorbuf);
 | 
			
		||||
            capath, -ret, errorbuf);
 | 
			
		||||
 | 
			
		||||
      if(data->set.ssl.verifypeer)
 | 
			
		||||
      if(SSL_CONN_CONFIG(verifypeer))
 | 
			
		||||
        return CURLE_SSL_CACERT_BADFILE;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@@ -215,27 +218,27 @@ polarssl_connect_step1(struct connectdata *conn,
 | 
			
		||||
  /* Load the client certificate */
 | 
			
		||||
  memset(&connssl->clicert, 0, sizeof(x509_crt));
 | 
			
		||||
 | 
			
		||||
  if(data->set.ssl.cert) {
 | 
			
		||||
  if(SSL_SET_OPTION(cert)) {
 | 
			
		||||
    ret = x509_crt_parse_file(&connssl->clicert,
 | 
			
		||||
                              data->set.ssl.cert);
 | 
			
		||||
                              SSL_SET_OPTION(cert));
 | 
			
		||||
 | 
			
		||||
    if(ret) {
 | 
			
		||||
#ifdef POLARSSL_ERROR_C
 | 
			
		||||
      error_strerror(ret, errorbuf, sizeof(errorbuf));
 | 
			
		||||
#endif /* POLARSSL_ERROR_C */
 | 
			
		||||
      failf(data, "Error reading client cert file %s - PolarSSL: (-0x%04X) %s",
 | 
			
		||||
            data->set.ssl.cert, -ret, errorbuf);
 | 
			
		||||
            SSL_SET_OPTION(cert), -ret, errorbuf);
 | 
			
		||||
 | 
			
		||||
      return CURLE_SSL_CERTPROBLEM;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Load the client private key */
 | 
			
		||||
  if(data->set.ssl.key) {
 | 
			
		||||
  if(SSL_SET_OPTION(key)) {
 | 
			
		||||
    pk_context pk;
 | 
			
		||||
    pk_init(&pk);
 | 
			
		||||
    ret = pk_parse_keyfile(&pk, data->set.ssl.key,
 | 
			
		||||
                           data->set.ssl.key_passwd);
 | 
			
		||||
    ret = pk_parse_keyfile(&pk, SSL_SET_OPTION(key),
 | 
			
		||||
                           SSL_SET_OPTION(key_passwd));
 | 
			
		||||
    if(ret == 0 && !pk_can_do(&pk, POLARSSL_PK_RSA))
 | 
			
		||||
      ret = POLARSSL_ERR_PK_TYPE_MISMATCH;
 | 
			
		||||
    if(ret == 0)
 | 
			
		||||
@@ -249,7 +252,7 @@ polarssl_connect_step1(struct connectdata *conn,
 | 
			
		||||
      error_strerror(ret, errorbuf, sizeof(errorbuf));
 | 
			
		||||
#endif /* POLARSSL_ERROR_C */
 | 
			
		||||
      failf(data, "Error reading private key %s - PolarSSL: (-0x%04X) %s",
 | 
			
		||||
            data->set.ssl.key, -ret, errorbuf);
 | 
			
		||||
            SSL_SET_OPTION(key), -ret, errorbuf);
 | 
			
		||||
 | 
			
		||||
      return CURLE_SSL_CERTPROBLEM;
 | 
			
		||||
    }
 | 
			
		||||
@@ -258,30 +261,29 @@ polarssl_connect_step1(struct connectdata *conn,
 | 
			
		||||
  /* Load the CRL */
 | 
			
		||||
  memset(&connssl->crl, 0, sizeof(x509_crl));
 | 
			
		||||
 | 
			
		||||
  if(data->set.ssl.CRLfile) {
 | 
			
		||||
  if(SSL_SET_OPTION(CRLfile)) {
 | 
			
		||||
    ret = x509_crl_parse_file(&connssl->crl,
 | 
			
		||||
                              data->set.ssl.CRLfile);
 | 
			
		||||
                              SSL_SET_OPTION(CRLfile));
 | 
			
		||||
 | 
			
		||||
    if(ret) {
 | 
			
		||||
#ifdef POLARSSL_ERROR_C
 | 
			
		||||
      error_strerror(ret, errorbuf, sizeof(errorbuf));
 | 
			
		||||
#endif /* POLARSSL_ERROR_C */
 | 
			
		||||
      failf(data, "Error reading CRL file %s - PolarSSL: (-0x%04X) %s",
 | 
			
		||||
            data->set.ssl.CRLfile, -ret, errorbuf);
 | 
			
		||||
            SSL_SET_OPTION(CRLfile), -ret, errorbuf);
 | 
			
		||||
 | 
			
		||||
      return CURLE_SSL_CRL_BADFILE;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  infof(data, "PolarSSL: Connecting to %s:%d\n",
 | 
			
		||||
        conn->host.name, conn->remote_port);
 | 
			
		||||
  infof(data, "PolarSSL: Connecting to %s:%d\n", hostname, port);
 | 
			
		||||
 | 
			
		||||
  if(ssl_init(&connssl->ssl)) {
 | 
			
		||||
    failf(data, "PolarSSL: ssl_init failed");
 | 
			
		||||
    return CURLE_SSL_CONNECT_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  switch(data->set.ssl.version) {
 | 
			
		||||
  switch(SSL_CONN_CONFIG(version)) {
 | 
			
		||||
  default:
 | 
			
		||||
  case CURL_SSLVERSION_DEFAULT:
 | 
			
		||||
  case CURL_SSLVERSION_TLSv1:
 | 
			
		||||
@@ -340,16 +342,16 @@ polarssl_connect_step1(struct connectdata *conn,
 | 
			
		||||
  ssl_set_ca_chain(&connssl->ssl,
 | 
			
		||||
                   &connssl->cacert,
 | 
			
		||||
                   &connssl->crl,
 | 
			
		||||
                   conn->host.name);
 | 
			
		||||
                   hostname);
 | 
			
		||||
 | 
			
		||||
  ssl_set_own_cert_rsa(&connssl->ssl,
 | 
			
		||||
                       &connssl->clicert, &connssl->rsa);
 | 
			
		||||
 | 
			
		||||
  if(!Curl_inet_pton(AF_INET, conn->host.name, &addr) &&
 | 
			
		||||
  if(!Curl_inet_pton(AF_INET, hostname, &addr) &&
 | 
			
		||||
#ifdef ENABLE_IPV6
 | 
			
		||||
     !Curl_inet_pton(AF_INET6, conn->host.name, &addr) &&
 | 
			
		||||
     !Curl_inet_pton(AF_INET6, hostname, &addr) &&
 | 
			
		||||
#endif
 | 
			
		||||
     sni && ssl_set_hostname(&connssl->ssl, conn->host.name)) {
 | 
			
		||||
     sni && ssl_set_hostname(&connssl->ssl, hostname)) {
 | 
			
		||||
     infof(data, "WARNING: failed to configure "
 | 
			
		||||
                 "server name indication (SNI) TLS extension\n");
 | 
			
		||||
  }
 | 
			
		||||
@@ -427,7 +429,7 @@ polarssl_connect_step2(struct connectdata *conn,
 | 
			
		||||
 | 
			
		||||
  ret = ssl_get_verify_result(&conn->ssl[sockindex].ssl);
 | 
			
		||||
 | 
			
		||||
  if(ret && conn->ssl_config.verifypeer) {
 | 
			
		||||
  if(ret && SSL_CONN_CONFIG(verifypeer)) {
 | 
			
		||||
    if(ret & BADCERT_EXPIRED)
 | 
			
		||||
      failf(data, "Cert verify failed: BADCERT_EXPIRED");
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user