Provide parse_http_url() with a third parameter to specify
authorFabian Keil <fk@fabiankeil.de>
Sun, 4 May 2008 16:18:32 +0000 (16:18 +0000)
committerFabian Keil <fk@fabiankeil.de>
Sun, 4 May 2008 16:18:32 +0000 (16:18 +0000)
whether or not URLs without protocol are acceptable.

cgisimple.c
urlmatch.c
urlmatch.h

index a93e7bb..cdb96e8 100644 (file)
@@ -1,4 +1,4 @@
-const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.78 2008/05/03 16:50:11 fabiankeil Exp $";
+const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.79 2008/05/04 13:30:56 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/cgisimple.c,v $
@@ -36,6 +36,9 @@ const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.78 2008/05/03 16:50:11 fabian
  *
  * Revisions   :
  *    $Log: cgisimple.c,v $
+ *    Revision 1.79  2008/05/04 13:30:56  fabiankeil
+ *    Streamline parse_http_url()'s prototype.
+ *
  *    Revision 1.78  2008/05/03 16:50:11  fabiankeil
  *    Leverage content_filters_enabled() in cgi_show_url_info().
  *
@@ -1473,7 +1476,7 @@ jb_err cgi_show_url_info(struct client_state *csp,
       }
 
       memset(url_to_query, '\0', sizeof(url_to_query));
-      err = parse_http_url(url_param, url_to_query);
+      err = parse_http_url(url_param, url_to_query, REQUIRE_PROTOCOL);
       assert(url_to_query->ssl == !strncmp(url_param, "https://", 8));
 
       free(url_param);
index 4ba17cf..98cecf2 100644 (file)
@@ -1,4 +1,4 @@
-const char urlmatch_rcs[] = "$Id: urlmatch.c,v 1.42 2008/05/04 13:24:16 fabiankeil Exp $";
+const char urlmatch_rcs[] = "$Id: urlmatch.c,v 1.43 2008/05/04 13:30:55 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/urlmatch.c,v $
@@ -33,6 +33,9 @@ const char urlmatch_rcs[] = "$Id: urlmatch.c,v 1.42 2008/05/04 13:24:16 fabianke
  *
  * Revisions   :
  *    $Log: urlmatch.c,v $
+ *    Revision 1.43  2008/05/04 13:30:55  fabiankeil
+ *    Streamline parse_http_url()'s prototype.
+ *
  *    Revision 1.42  2008/05/04 13:24:16  fabiankeil
  *    If the method isn't CONNECT, reject URLs without protocol.
  *
@@ -371,6 +374,8 @@ jb_err init_domain_components(struct http_request *http)
  *          1  :  url = URL (or is it URI?) to break down
  *          2  :  http = pointer to the http structure to hold elements.
  *                       Must be initialized with valid values (like NULLs).
+ *          3  :  require_protocol = Whether or not URLs without
+ *                                   protocol are acceptable.
  *
  * Returns     :  JB_ERR_OK on success
  *                JB_ERR_MEMORY on out of memory
@@ -378,7 +383,7 @@ jb_err init_domain_components(struct http_request *http)
  *                             or >100 domains deep.
  *
  *********************************************************************/
-jb_err parse_http_url(const char * url, struct http_request *http)
+jb_err parse_http_url(const char *url, struct http_request *http, int require_protocol)
 {
    int host_available = 1; /* A proxy can dream. */
 
@@ -448,7 +453,7 @@ jb_err parse_http_url(const char * url, struct http_request *http)
          http->host = NULL;
          host_available = 0;
       }
-      else if (!http->ssl)
+      else if (require_protocol)
       {
          freez(buf);
          return JB_ERR_PARSE;
@@ -668,7 +673,7 @@ jb_err parse_http_request(const char *req,
 
    http->ssl = !strcmpic(v[0], "CONNECT");
 
-   err = parse_http_url(v[1], http);
+   err = parse_http_url(v[1], http, !http->ssl);
    if (err)
    {
       freez(buf);
index b83ae72..10edcba 100644 (file)
@@ -1,6 +1,6 @@
 #ifndef URLMATCH_H_INCLUDED
 #define URLMATCH_H_INCLUDED
-#define URLMATCH_H_VERSION "$Id: urlmatch.h,v 1.10 2008/04/14 18:11:21 fabiankeil Exp $"
+#define URLMATCH_H_VERSION "$Id: urlmatch.h,v 1.11 2008/05/04 13:30:55 fabiankeil Exp $"
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/urlmatch.h,v $
@@ -35,6 +35,9 @@
  *
  * Revisions   :
  *    $Log: urlmatch.h,v $
+ *    Revision 1.11  2008/05/04 13:30:55  fabiankeil
+ *    Streamline parse_http_url()'s prototype.
+ *
  *    Revision 1.10  2008/04/14 18:11:21  fabiankeil
  *    The compiler might not notice it, but the buffer passed to
  *    create_url_spec() is modified later on and thus shouldn't
@@ -97,7 +100,10 @@ extern jb_err init_domain_components(struct http_request *http);
 extern jb_err parse_http_request(const char *req,
                                  struct http_request *http,
                                  const struct client_state *csp);
-extern jb_err parse_http_url(const char *url, struct http_request *http);
+extern jb_err parse_http_url(const char *url,
+                             struct http_request *http,
+                             int require_protocol);
+#define REQUIRE_PROTOCOL 1
 
 extern int url_match(const struct url_spec *pattern,
                      const struct http_request *http);