diff options
author | Daniel Egger <daniel.egger@sphairon.com> | 2010-08-16 22:36:20 +0200 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2010-12-01 22:25:44 +0100 |
commit | 62443a63918e7c3ccb02fd4522c012a06a36644b (patch) | |
tree | 1b8a67d733955fbb8ca01aa3d7e51f3b03fe5ed9 | |
parent | 58ac635a17dcfe8add856fea5af9faacf56aca16 (diff) |
[BB#95] Fix FilterURLs with transparent proxy support.
Pass a pointer to a char pointer to do_transparent_proxy so the reassembled URL
will actually end up back in the caller where it is needed for filtering
decisions. This fixes the problem that a tinyproxy configured with the
transparent proxy functionality and "FilterURLs Yes" would filter on everything
but the domain.
Signed-off-by: daniel.egger@sphairon.com
Signed-off-by: Michael Adam <obnox@samba.org>
-rw-r--r-- | src/reqs.c | 2 | ||||
-rw-r--r-- | src/transparent-proxy.c | 20 | ||||
-rw-r--r-- | src/transparent-proxy.h | 2 |
3 files changed, 12 insertions, 12 deletions
@@ -418,7 +418,7 @@ BAD_REQUEST_ERROR: } else { #ifdef TRANSPARENT_PROXY if (!do_transparent_proxy - (connptr, hashofheaders, request, &config, url)) { + (connptr, hashofheaders, request, &config, &url)) { goto fail; } #else diff --git a/src/transparent-proxy.c b/src/transparent-proxy.c index 426db17..d34fa4e 100644 --- a/src/transparent-proxy.c +++ b/src/transparent-proxy.c @@ -55,11 +55,11 @@ static int build_url (char **url, const char *host, int port, const char *path) int do_transparent_proxy (struct conn_s *connptr, hashmap_t hashofheaders, struct request_s *request, struct config_s *conf, - char *url) + char **url) { socklen_t length; char *data; - size_t ulen = strlen (url); + size_t ulen = strlen (*url); length = hashmap_entry_by_key (hashofheaders, "host", (void **) &data); if (length <= 0) { @@ -73,7 +73,7 @@ do_transparent_proxy (struct conn_s *connptr, hashmap_t hashofheaders, connptr->client_fd); indicate_http_error (connptr, 400, "Bad Request", "detail", "Unknown destination", - "url", url, NULL); + "url", *url, NULL); return 0; } @@ -83,15 +83,15 @@ do_transparent_proxy (struct conn_s *connptr, hashmap_t hashofheaders, request->port = ntohs (dest_addr.sin_port); request->path = (char *) safemalloc (ulen + 1); - strlcpy (request->path, url, ulen + 1); + strlcpy (request->path, *url, ulen + 1); /* url overwritten by the call below is the url passed * to this function, and is not the url variable in the * caller. */ - build_url (&url, request->host, request->port, request->path); + build_url (url, request->host, request->port, request->path); log_message (LOG_INFO, "process_request: trans IP %s %s for %d", - request->method, url, connptr->client_fd); + request->method, *url, connptr->client_fd); } else { request->host = (char *) safemalloc (length + 1); if (sscanf (data, "%[^:]:%hu", request->host, &request->port) != @@ -101,15 +101,15 @@ do_transparent_proxy (struct conn_s *connptr, hashmap_t hashofheaders, } request->path = (char *) safemalloc (ulen + 1); - strlcpy (request->path, url, ulen + 1); + strlcpy (request->path, *url, ulen + 1); /* url overwritten by the call below is the url passed * to this function, and is not the url variable in the * caller. */ - build_url (&url, request->host, request->port, request->path); + build_url (url, request->host, request->port, request->path); log_message (LOG_INFO, "process_request: trans Host %s %s for %d", - request->method, url, connptr->client_fd); + request->method, *url, connptr->client_fd); } if (conf->ipAddr && strcmp (request->host, conf->ipAddr) == 0) { log_message (LOG_ERR, @@ -118,7 +118,7 @@ do_transparent_proxy (struct conn_s *connptr, hashmap_t hashofheaders, indicate_http_error (connptr, 400, "Bad Request", "detail", "You tried to connect to the machine " - "the proxy is running on", "url", url, + "the proxy is running on", "url", *url, NULL); return 0; } diff --git a/src/transparent-proxy.h b/src/transparent-proxy.h index 6e77d51..4fc3a4d 100644 --- a/src/transparent-proxy.h +++ b/src/transparent-proxy.h @@ -32,7 +32,7 @@ extern int do_transparent_proxy (struct conn_s *connptr, hashmap_t hashofheaders, struct request_s *request, - struct config_s *config, char *url); + struct config_s *config, char **url); #endif |