[Privoxy-commits] [privoxy] 09/16: Let get_destination_from_headers() handle the https case as well to reduce code duplication
User Git
git at git.privoxy.org
Thu Oct 9 11:51:31 CEST 2025
This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository privoxy.
commit 8ef5ce257c52f74a8b810f3535f59def55867ed9
Author: Fabian Keil <fk at fabiankeil.de>
AuthorDate: Thu Sep 11 14:44:38 2025 +0200
Let get_destination_from_headers() handle the https case as well to reduce code duplication
---
jcc.c | 4 +-
parsers.c | 126 +++++---------------------------------------------------------
parsers.h | 5 +--
3 files changed, 13 insertions(+), 122 deletions(-)
diff --git a/jcc.c b/jcc.c
index 3aecb084..a3ebcf4f 100644
--- a/jcc.c
+++ b/jcc.c
@@ -589,7 +589,7 @@ static jb_err get_request_destination_elsewhere(struct client_state *csp, struct
return JB_ERR_PARSE;
}
- else if (JB_ERR_OK == get_destination_from_headers(headers, csp->http))
+ else if (JB_ERR_OK == get_destination_from_headers(headers, csp->http, FALSE))
{
/* Split the domain we just got for pattern matching */
init_domain_components(csp->http);
@@ -2760,7 +2760,7 @@ static jb_err process_encrypted_request_headers(struct client_state *csp)
freez(p);
}
- if (JB_ERR_OK != get_destination_from_https_headers(headers, csp->http))
+ if (JB_ERR_OK != get_destination_from_headers(headers, csp->http, TRUE))
{
/*
* Our attempts to get the request destination
diff --git a/parsers.c b/parsers.c
index 2ab405fa..e962c14b 100644
--- a/parsers.c
+++ b/parsers.c
@@ -4889,13 +4889,14 @@ static jb_err parse_time_header(const char *header, time_t *result)
* 1 : headers = List of headers (one of them hopefully being
* the "Host:" header)
* 2 : http = storage for the result (host, port and hostport).
+ * 3 : https_request = Whether or not the request was received through https
*
* Returns : JB_ERR_MEMORY (or terminates) in case of memory problems,
* JB_ERR_PARSE if the host header couldn't be found or parsed,
* JB_ERR_OK otherwise.
*
*********************************************************************/
-jb_err get_destination_from_headers(const struct list *headers, struct http_request *http)
+jb_err get_destination_from_headers(const struct list *headers, struct http_request *http, int https_request)
{
char *q;
char *p;
@@ -4958,132 +4959,26 @@ jb_err get_destination_from_headers(const struct list *headers, struct http_requ
}
else
{
- http->port = 80;
+ http->port = https_request ? 443 : 80;
}
/* Rebuild request URL */
freez(http->url);
- http->url = strdup("http://");
- string_append(&http->url, http->hostport);
- string_append(&http->url, http->path);
- if (http->url == NULL)
- {
- return JB_ERR_MEMORY;
- }
-
- log_error(LOG_LEVEL_HEADER,
- "Destination extracted from \"Host\" header. New request URL: %s",
- http->url);
-
- /*
- * Regenerate request line in "proxy format"
- * to make rewrites more convenient.
- */
- assert(http->cmd != NULL);
- freez(http->cmd);
- http->cmd = strdup_or_die(http->gpc);
- string_append(&http->cmd, " ");
- string_append(&http->cmd, http->url);
- string_append(&http->cmd, " ");
- string_append(&http->cmd, http->version);
- if (http->cmd == NULL)
- {
- return JB_ERR_MEMORY;
- }
-
- return JB_ERR_OK;
-
-}
-
-
-#ifdef FEATURE_HTTPS_INSPECTION
-/*********************************************************************
- *
- * Function : get_destination_from_https_headers
- *
- * Description : Parse the previously encrypted "Host:" header to
- * get the request's destination.
- *
- * Parameters :
- * 1 : headers = List of headers (one of them hopefully being
- * the "Host:" header)
- * 2 : http = storage for the result (host, port and hostport).
- *
- * Returns : JB_ERR_MEMORY (or terminates) in case of memory problems,
- * JB_ERR_PARSE if the host header couldn't be found,
- * JB_ERR_OK otherwise.
- *
- *********************************************************************/
-jb_err get_destination_from_https_headers(const struct list *headers, struct http_request *http)
-{
- char *q;
- char *p;
- char *host;
-
- host = get_header_value(headers, "Host:");
-
- if (NULL == host)
- {
- log_error(LOG_LEVEL_ERROR, "No \"Host:\" header found.");
- return JB_ERR_PARSE;
- }
-
- p = string_tolower(host);
- if (p == NULL)
+ if (https_request)
{
- return JB_ERR_MEMORY;
- }
- chomp(p);
- q = strdup_or_die(p);
-
- freez(http->hostport);
- http->hostport = p;
- freez(http->host);
- http->host = q;
- if (*p == '[')
- {
- /* Numeric IPv6 address delimited by brackets */
- p++;
-
- q = strchr(p, ']');
- if (q == NULL)
- {
- /* Missing closing bracket */
- return JB_ERR_PARSE;
- }
-
- *q++ = '\0';
-
- if (*q == '\0')
- {
- q = NULL;
- }
- else if (*q != ':')
- {
- /* Garbage after closing bracket */
- return JB_ERR_PARSE;
- }
+ http->url = strdup(http->path);
}
else
{
- /* Plain non-escaped hostname */
- q = strchr(http->host, ':');
- }
- if (q != NULL)
- {
- /* Terminate hostname and evaluate port string */
- *q++ = '\0';
- http->port = atoi(q);
+ http->url = strdup("http://");
+ string_append(&http->url, http->hostport);
+ string_append(&http->url, http->path);
}
- else
+ if (http->url == NULL)
{
- http->port = 443;
+ return JB_ERR_MEMORY;
}
- /* Rebuild request URL */
- freez(http->url);
- http->url = strdup_or_die(http->path);
-
log_error(LOG_LEVEL_HEADER,
"Destination extracted from \"Host\" header. New request URL: %s",
http->url);
@@ -5107,7 +5002,6 @@ jb_err get_destination_from_https_headers(const struct list *headers, struct htt
return JB_ERR_OK;
}
-#endif /* def FEATURE_HTTPS_INSPECTION */
/*********************************************************************
diff --git a/parsers.h b/parsers.h
index 802133f0..e0e55414 100644
--- a/parsers.h
+++ b/parsers.h
@@ -63,10 +63,7 @@ extern jb_err sed_https(struct client_state *csp);
extern jb_err header_adjust_content_length(char **header, size_t content_length);
extern jb_err update_server_headers(struct client_state *csp);
extern void get_http_time(int time_offset, char *buf, size_t buffer_size);
-extern jb_err get_destination_from_headers(const struct list *headers, struct http_request *http);
-#ifdef FEATURE_HTTPS_INSPECTION
-extern jb_err get_destination_from_https_headers(const struct list *headers, struct http_request *http);
-#endif
+extern jb_err get_destination_from_headers(const struct list *headers, struct http_request *http, int https_request);
extern unsigned long long get_expected_content_length(struct list *headers);
extern jb_err client_transfer_encoding(struct client_state *csp, char **header);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Privoxy-commits
mailing list