Commit 5c52cacc authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

- Frank Ticheler provided a patch that fixes how libcurl connects to multiple

  addresses, if one of them fails (ipv4-code).
parent e612f733
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -7,6 +7,10 @@
                                  Changelog


Daniel (8 October)
- Frank Ticheler provided a patch that fixes how libcurl connects to multiple
  addresses, if one of them fails (ipv4-code).

Daniel (7 October)
- Neil Dunbar provided a patch that now makes libcurl check SSL
  subjectAltNames when matching certs. This is apparently detailed in RFC2818
+3 −2
Original line number Diff line number Diff line
@@ -19,7 +19,8 @@ This release includes the following changes:

This release includes the following bugfixes:

 o libcurl checks subjectAltNames when matching certs
 o fixed the ipv4 connect code when a DNS entry has multiple IPs
 o now checks subjectAltNames when matching certs
 o HTTP POST using read callback works again
 o builds fine on BeOS now
 o CURLOPT_COOKIE set to NULL no longer sends the previously set cookie
@@ -64,6 +65,6 @@ advice from friends like these:
 Early Ehlinger, Kevin Fisk, Jurij Smakov, Bjorn Reese, Tim Bartley, David
 Kimdon, Dominick Meglio, Markus Moeller, Giuseppe Attardi, James MacMillan,
 Neil Spring, Siddhartha Prakash Jain, Jon Turner, Vincent Bronner, Shard,
 Jeremy Friesner, Florian Schoppmann, Neil Dunbar
 Jeremy Friesner, Florian Schoppmann, Neil Dunbar, Frank Ticheler
 
        Thanks! (and sorry if I forgot to mention someone)
+20 −18
Original line number Diff line number Diff line
@@ -620,6 +620,14 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
    failf(data, "no address available");
    return CURLE_COULDNT_CONNECT;
  }

  /* This is the loop that attempts to connect to all IP-addresses we
     know for the given host. One by one. */
  for(rc=-1, aliasindex=0;
      rc && (struct in_addr *)remotehost->addr->h_addr_list[aliasindex];
      aliasindex++) {
    struct sockaddr_in serv_addr;

    /* create an IPv4 TCP socket */
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if(-1 == sockfd) {
@@ -638,13 +646,6 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
    /* Convert socket to non-blocking type */
    Curl_nonblock(sockfd, TRUE);

  /* This is the loop that attempts to connect to all IP-addresses we
     know for the given host. One by one. */
  for(rc=-1, aliasindex=0;
      rc && (struct in_addr *)remotehost->addr->h_addr_list[aliasindex];
      aliasindex++) {
    struct sockaddr_in serv_addr;

    /* do this nasty work to do the connect */
    memset((char *) &serv_addr, '\0', sizeof(serv_addr));
    memcpy((char *)&(serv_addr.sin_addr),
@@ -706,6 +707,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */

    if(0 != rc) {
      /* get a new timeout for next attempt */
      sclose(sockfd);
      after = Curl_tvnow();
      timeout_ms -= Curl_tvdiff(after, before);
      if(timeout_ms < 0) {
@@ -717,9 +719,9 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
    }
    break;
  }

  if(0 != rc) {
    /* no good connect was made */
    sclose(sockfd);
    *sockconn = -1;
    failf(data, "Connect failed");
    return CURLE_COULDNT_CONNECT;