rpms/curl/F-12 curl-7.19.7-bz589132.patch,1.1,1.2

Kamil Dudka kdudka at fedoraproject.org
Thu Jun 17 09:54:09 UTC 2010


Author: kdudka

Update of /cvs/extras/rpms/curl/F-12
In directory cvs01.phx2.fedoraproject.org:/tmp/cvs-serv568

Modified Files:
	curl-7.19.7-bz589132.patch 
Log Message:
curl-7.19.7-bz589132.patch follow-up

curl-7.19.7-bz589132.patch:
 CHANGES                |   25 +++++++++
 lib/url.c              |  133 +++++++++++++++++++++++++++++--------------------
 tests/data/Makefile.am |    2 
 tests/data/test1106    |   56 ++++++++++++++++++++
 4 files changed, 161 insertions(+), 55 deletions(-)

Index: curl-7.19.7-bz589132.patch
===================================================================
RCS file: /cvs/extras/rpms/curl/F-12/curl-7.19.7-bz589132.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- curl-7.19.7-bz589132.patch	17 Jun 2010 08:49:30 -0000	1.1
+++ curl-7.19.7-bz589132.patch	17 Jun 2010 09:54:09 -0000	1.2
@@ -1,17 +1,32 @@
- CHANGES                |   10 ++++++++
- lib/url.c              |   44 +++++++++++++++++++++----------------
+ CHANGES                |   25 +++++++++
+ lib/url.c              |  133 ++++++++++++++++++++++++++++-------------------
  tests/data/Makefile.am |    2 +-
- tests/data/test1106    |   56 ++++++++++++++++++++++++++++++++++++++++++++++++
- 4 files changed, 92 insertions(+), 20 deletions(-)
+ tests/data/test1106    |   56 ++++++++++++++++++++
+ 4 files changed, 161 insertions(+), 55 deletions(-)
 
 diff --git a/CHANGES b/CHANGES
-index 1f299ed..d227309 100644
+index 1f299ed..c412066 100644
 --- a/CHANGES
 +++ b/CHANGES
-@@ -34,6 +34,16 @@ Björn Stenberg (23 Jan 2010)
+@@ -34,6 +34,31 @@ Björn Stenberg (23 Jan 2010)
    -O/--remote-name option to use the server-specified Content-Disposition
    filename instead of extracting a filename from the URL.
  
++Daniel Stenberg (17 Dec 2009)
++- Follow-up fix for the proxy fix I did for Jon Nelson's bug. It turned out I
++  was a bit too quick and broke test case 1101 with that change. The order of
++  some of the setups is sensitive. I now changed it slightly again to make
++  sure we do them in this order:
++
++  1 - parse URL and figure out what protocol is used in the URL
++  2 - prepend protocol:// to URL if missing
++  3 - parse name+password off URL, which needs to know what protocol is used
++      (since only some allows for name+password in the URL)
++  4 - figure out if a proxy should be used set by an option
++  5 - if no proxy option, check proxy environment variables
++  6 - run the protocol-specific setup function, which needs to have the proxy
++      already set
++
 +Daniel Stenberg (15 Dec 2009)
 +- Jon Nelson found a regression that turned out to be a flaw in how libcurl
 +  detects and uses proxies based on the environment variables. If the proxy
@@ -26,7 +41,7 @@ index 1f299ed..d227309 100644
  - Kevin Baughman provided a fix preventing libcurl-NSS from crash on doubly
    closed NSPR descriptor. The issue was hard to find, reported several times
 diff --git a/lib/url.c b/lib/url.c
-index c13d7ff..023c442 100644
+index c13d7ff..d4d4adf 100644
 --- a/lib/url.c
 +++ b/lib/url.c
 @@ -3198,6 +3198,7 @@ static struct connectdata *allocate_conn(void)
@@ -37,7 +52,67 @@ index c13d7ff..023c442 100644
  
    /* Default protocol-independent behavior doesn't support persistent
       connections, so we set this to force-close. Protocols that support
-@@ -3452,7 +3453,8 @@ static CURLcode setup_range(struct SessionHandle *data)
+@@ -3210,6 +3211,48 @@ static struct connectdata *allocate_conn(void)
+   return conn;
+ }
+ 
++static CURLcode findprotocol(struct SessionHandle *data,
++                             struct connectdata *conn)
++{
++  const struct Curl_handler * const *pp;
++  const struct Curl_handler *p;
++
++  /* Scan protocol handler table and match against 'protostr' to set a few
++     variables based on the URL. Now that the handler may be changed later
++     when the protocol specific setup function is called. */
++  for (pp = protocols; (p = *pp) != NULL; pp++) {
++    if(Curl_raw_equal(p->scheme, conn->protostr)) {
++      /* Protocol found in table. Check if allowed */
++      if(!(data->set.allowed_protocols & p->protocol))
++        /* nope, get out */
++        break;
++
++      /* it is allowed for "normal" request, now do an extra check if this is
++         the result of a redirect */
++      if(data->state.this_is_a_follow &&
++         !(data->set.redir_protocols & p->protocol))
++        /* nope, get out */
++        break;
++
++      /* Perform setup complement if some. */
++      conn->handler = p;
++      conn->protocol |= p->protocol;
++
++      /* 'port' and 'remote_port' are set in setup_connection_internals() */
++      return CURLE_OK;
++    }
++  }
++
++
++  /* The protocol was not found in the table, but we don't have to assign it
++     to anything since it is already assigned to a dummy-struct in the
++     create_conn() function when the connectdata struct is allocated. */
++  failf(data, "Protocol %s not supported or disabled in " LIBCURL_NAME,
++        conn->protostr);
++
++  return CURLE_UNSUPPORTED_PROTOCOL;
++}
++
+ /*
+  * Parse URL and fill in the relevant members of the connection struct.
+  */
+@@ -3408,8 +3451,8 @@ static CURLcode ParseURLAndFillConnection(struct SessionHandle *data,
+    *   conn->host.name is B
+    *   data->state.path is /C
+    */
+-  (void)rc;
+-  return CURLE_OK;
++
++  return findprotocol(data, conn);
+ }
+ 
+ static void llist_dtor(void *user, void *element)
+@@ -3452,12 +3495,11 @@ static CURLcode setup_range(struct SessionHandle *data)
  
  
  /***************************************************************
@@ -45,25 +120,78 @@ index c13d7ff..023c442 100644
 +* Setup connection internals specific to the requested protocol.
 +* This MUST get called after proxy magic has been figured out.
  ***************************************************************/
- static CURLcode setup_connection_internals(struct SessionHandle *data,
-                                            struct connectdata *conn)
-@@ -3491,7 +3493,10 @@ static CURLcode setup_connection_internals(struct SessionHandle *data,
-         p = conn->handler;              /* May have changed. */
-       }
+-static CURLcode setup_connection_internals(struct SessionHandle *data,
+-                                           struct connectdata *conn)
++static CURLcode setup_connection_internals(struct connectdata *conn)
+ {
+-  const struct Curl_handler * const * pp;
+   const struct Curl_handler * p;
+   CURLcode result;
+ 
+@@ -3465,44 +3507,26 @@ static CURLcode setup_connection_internals(struct SessionHandle *data,
+ 
+   /* Scan protocol handler table. */
+ 
+-  for (pp = protocols; (p = *pp) != NULL; pp++)
+-    if(Curl_raw_equal(p->scheme, conn->protostr)) {
+-      /* Protocol found in table. Check if allowed */
+-      if(!(data->set.allowed_protocols & p->protocol))
+-        /* nope, get out */
+-        break;
++  /* Perform setup complement if some. */
++  p = conn->handler;
+ 
+-      /* it is allowed for "normal" request, now do an extra check if this is
+-         the result of a redirect */
+-      if(data->state.this_is_a_follow &&
+-         !(data->set.redir_protocols & p->protocol))
+-        /* nope, get out */
+-        break;
++  if(p->setup_connection) {
++    result = (*p->setup_connection)(conn);
+ 
+-      /* Perform setup complement if some. */
+-      conn->handler = p;
+-
+-      if(p->setup_connection) {
+-        result = (*p->setup_connection)(conn);
+-
+-        if(result != CURLE_OK)
+-          return result;
++    if(result != CURLE_OK)
++      return result;
+ 
+-        p = conn->handler;              /* May have changed. */
+-      }
++    p = conn->handler;              /* May have changed. */
++  }
  
 -      conn->port = p->defport;
-+      if(conn->port < 0)
-+        /* we check for -1 here since if proxy was detected already, this
-+           was very likely already set to the proxy port */
-+        conn->port = p->defport;
-       conn->remote_port = (unsigned short)p->defport;
-       conn->protocol |= p->protocol;
-       return CURLE_OK;
-@@ -4401,23 +4406,6 @@ static CURLcode create_conn(struct SessionHandle *data,
-     conn->protocol &= ~PROT_MISSING; /* switch that one off again */
+-      conn->remote_port = (unsigned short)p->defport;
+-      conn->protocol |= p->protocol;
+-      return CURLE_OK;
+-    }
++  if(conn->port < 0)
++    /* we check for -1 here since if proxy was detected already, this
++       was very likely already set to the proxy port */
++    conn->port = p->defport;
++  conn->remote_port = (unsigned short)p->defport;
++  conn->protocol |= p->protocol;
+ 
+-  /* The protocol was not found in the table, but we don't have to assign it
+-     to anything since it is already assigned to a dummy-struct in the
+-     create_conn() function when the connectdata struct is allocated. */
+-  failf(data, "Protocol %s not supported or disabled in " LIBCURL_NAME,
+-        conn->protostr);
+-  return CURLE_UNSUPPORTED_PROTOCOL;
++  return CURLE_OK;
+ }
+ 
+ #ifndef CURL_DISABLE_PROXY
+@@ -4402,15 +4426,6 @@ static CURLcode create_conn(struct SessionHandle *data,
    }
  
--  /*************************************************************
+   /*************************************************************
 -   * Setup internals depending on protocol
 -   *************************************************************/
 -  result = setup_connection_internals(data, conn);
@@ -73,17 +201,10 @@ index c13d7ff..023c442 100644
 -  }
 -
 -  /*************************************************************
--   * Parse a user name and password in the URL and strip it out
--   * of the host name
--   *************************************************************/
--  result = parse_url_userpass(data, conn, user, passwd);
--  if(result != CURLE_OK)
--    return result;
--
- #ifndef CURL_DISABLE_PROXY
-   /*************************************************************
-    * Extract the user and password from the authentication string
-@@ -4491,6 +4479,24 @@ static CURLcode create_conn(struct SessionHandle *data,
+    * Parse a user name and password in the URL and strip it out
+    * of the host name
+    *************************************************************/
+@@ -4491,6 +4506,16 @@ static CURLcode create_conn(struct SessionHandle *data,
    }
  #endif /* CURL_DISABLE_PROXY */
  
@@ -91,23 +212,41 @@ index c13d7ff..023c442 100644
 +   * Setup internals depending on protocol. Needs to be done after
 +   * we figured out what/if proxy to use.
 +   *************************************************************/
-+  result = setup_connection_internals(data, conn);
++  result = setup_connection_internals(conn);
 +  if(result != CURLE_OK) {
 +    Curl_safefree(proxy);
 +    return result;
 +  }
 +
-+  /*************************************************************
-+   * Parse a user name and password in the URL and strip it out
-+   * of the host name
-+   *************************************************************/
-+  result = parse_url_userpass(data, conn, user, passwd);
-+  if(result != CURLE_OK)
-+    return result;
-+
    /***********************************************************************
     * file: is a special case in that it doesn't need a network connection
     ***********************************************************************/
+@@ -4552,12 +4577,6 @@ static CURLcode create_conn(struct SessionHandle *data,
+   if(result != CURLE_OK)
+     return result;
+ 
+-  /*************************************************************
+-   * Check the current list of connections to see if we can
+-   * re-use an already existing one or if we have to create a
+-   * new one.
+-   *************************************************************/
+-
+   /* Get a cloned copy of the SSL config situation stored in the
+      connection struct. But to get this going nicely, we must first make
+      sure that the strings in the master copy are pointing to the correct
+@@ -4578,6 +4597,12 @@ static CURLcode create_conn(struct SessionHandle *data,
+   if(!Curl_clone_ssl_config(&data->set.ssl, &conn->ssl_config))
+     return CURLE_OUT_OF_MEMORY;
+ 
++  /*************************************************************
++   * Check the current list of connections to see if we can
++   * re-use an already existing one or if we have to create a
++   * new one.
++   *************************************************************/
++
+   /* reuse_fresh is TRUE if we are told to use a new connection by force, but
+      we only acknowledge this option if this is not a re-used connection
+      already (which happens due to follow-location or during a HTTP
 diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
 index d6dc4f3..8fdd58f 100644
 --- a/tests/data/Makefile.am



More information about the scm-commits mailing list