Fix typos
[privoxy.git] / urlmatch.c
index 37802c5..2bd5a8f 100644 (file)
@@ -1,4 +1,3 @@
-const char urlmatch_rcs[] = "$Id: urlmatch.c,v 1.88 2016/03/17 10:40:53 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/urlmatch.c,v $
@@ -7,7 +6,7 @@ const char urlmatch_rcs[] = "$Id: urlmatch.c,v 1.88 2016/03/17 10:40:53 fabianke
  *                patterns.
  *
  * Copyright   :  Written by and Copyright (C) 2001-2014
- *                the Privoxy team. http://www.privoxy.org/
+ *                the Privoxy team. https://www.privoxy.org/
  *
  *                Based on the Internet Junkbuster originally written
  *                by and Copyright (C) 1997 Anonymous Coders and
@@ -56,8 +55,6 @@ const char urlmatch_rcs[] = "$Id: urlmatch.c,v 1.88 2016/03/17 10:40:53 fabianke
 #include "miscutil.h"
 #include "errlog.h"
 
-const char urlmatch_h_rcs[] = URLMATCH_H_VERSION;
-
 enum regex_anchoring
 {
    NO_ANCHORING,
@@ -90,7 +87,7 @@ void free_http_request(struct http_request *http)
    freez(http->url);
    freez(http->hostport);
    freez(http->path);
-   freez(http->ver);
+   freez(http->version);
    freez(http->host_ip_addr_str);
 #ifndef FEATURE_EXTENDED_HOST_PATTERNS
    freez(http->dbuffer);
@@ -494,7 +491,7 @@ static int unknown_method(const char *method)
  *                JB_ERR_PARSE if the HTTP version is unsupported
  *
  *********************************************************************/
-jb_err static normalize_http_version(char *http_version)
+static jb_err normalize_http_version(char *http_version)
 {
    unsigned int major_version;
    unsigned int minor_version;
@@ -590,7 +587,7 @@ jb_err parse_http_request(const char *req, struct http_request *http)
     */
    http->cmd = strdup_or_die(req);
    http->gpc = strdup_or_die(v[0]);
-   http->ver = strdup_or_die(v[2]);
+   http->version = strdup_or_die(v[2]);
    http->ocmd = strdup_or_die(http->cmd);
 
    freez(buf);
@@ -1423,31 +1420,53 @@ int match_portlist(const char *portlist, int port)
  *
  * Function    :  parse_forwarder_address
  *
- * Description :  Parse out the host and port from a forwarder address.
+ * Description :  Parse out the username, password, host and port from
+ *                a forwarder address.
  *
  * Parameters  :
  *          1  :  address = The forwarder address to parse.
  *          2  :  hostname = Used to return the hostname. NULL on error.
  *          3  :  port = Used to return the port. Untouched if no port
  *                       is specified.
+ *          4  :  username = Used to return the username if any.
+ *          5  :  password = Used to return the password if any.
  *
  * Returns     :  JB_ERR_OK on success
  *                JB_ERR_MEMORY on out of memory
  *                JB_ERR_PARSE on malformed address.
  *
  *********************************************************************/
-jb_err parse_forwarder_address(char *address, char **hostname, int *port)
+jb_err parse_forwarder_address(char *address, char **hostname, int *port,
+                               char **username, char **password)
 {
-   char *p = address;
+   char *p;
+   char *tmp;
+
+   tmp = *hostname = strdup_or_die(address);
 
-   if ((*address == '[') && (NULL == strchr(address, ']')))
+   /* Parse username and password */
+   if (username && password && (NULL != (p = strchr(*hostname, '@'))))
+   {
+      *p++ = '\0';
+      *username = strdup_or_die(*hostname);
+      *hostname = strdup_or_die(p);
+
+      if (NULL != (p = strchr(*username, ':')))
+      {
+         *p++ = '\0';
+         *password = strdup_or_die(p);
+      }
+      freez(tmp);
+   }
+
+   /* Parse hostname and port */
+   p = *hostname;
+   if ((*p == '[') && (NULL == strchr(p, ']')))
    {
       /* XXX: Should do some more validity checks here. */
       return JB_ERR_PARSE;
    }
 
-   *hostname = strdup_or_die(address);
-
    if ((**hostname == '[') && (NULL != (p = strchr(*hostname, ']'))))
    {
       *p++ = '\0';