summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDaniel Egger <daniel.egger@sphairon.com>2010-08-16 22:36:20 +0200
committerMichael Adam <obnox@samba.org>2010-12-01 22:25:44 +0100
commit62443a63918e7c3ccb02fd4522c012a06a36644b (patch)
tree1b8a67d733955fbb8ca01aa3d7e51f3b03fe5ed9
parent58ac635a17dcfe8add856fea5af9faacf56aca16 (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.c2
-rw-r--r--src/transparent-proxy.c20
-rw-r--r--src/transparent-proxy.h2
3 files changed, 12 insertions, 12 deletions
diff --git a/src/reqs.c b/src/reqs.c
index 0fc46b4..ead54ff 100644
--- a/src/reqs.c
+++ b/src/reqs.c
@@ -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