-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 $
* 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
#include "miscutil.h"
#include "errlog.h"
-const char urlmatch_h_rcs[] = URLMATCH_H_VERSION;
-
enum regex_anchoring
{
NO_ANCHORING,
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);
/*
* Got a path.
*
- * NOTE: The following line ignores the path for HTTPS URLS.
- * This means that you get consistent behaviour if you type a
- * https URL in and it's parsed by the function. (When the
- * URL is actually retrieved, SSL hides the path part).
+ * If FEATURE_HTTPS_INSPECTION isn't available, ignore the
+ * path for https URLs so that we get consistent behaviour
+ * if a https URL is parsed. When the URL is actually
+ * retrieved, https hides the path part.
*/
- http->path = strdup_or_die(http->ssl ? "/" : url_path);
+ http->path = strdup_or_die(
+#ifndef FEATURE_HTTPS_INSPECTION
+ http->ssl ? "/" :
+#endif
+ url_path
+ );
*url_path = '\0';
http->hostport = strdup_or_die(url_noproto);
}
* 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;
*/
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);
*
* 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);
+
+ /* 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);
+ }
- if ((*address == '[') && (NULL == strchr(address, ']')))
+ /* 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';