[packages] tinyproxy: import fix for upstream bug #95 - fix url filters in transparent mode
git-svn-id: svn://svn.openwrt.org/openwrt/packages@27135 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
cec4dee317
commit
fa3e65e97a
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=tinyproxy
|
PKG_NAME:=tinyproxy
|
||||||
PKG_VERSION:=1.8.2
|
PKG_VERSION:=1.8.2
|
||||||
PKG_RELEASE:=3
|
PKG_RELEASE:=4
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
||||||
PKG_SOURCE_URL:=http://www.banu.com/pub/tinyproxy/1.8/
|
PKG_SOURCE_URL:=http://www.banu.com/pub/tinyproxy/1.8/
|
||||||
|
@ -0,0 +1,110 @@
|
|||||||
|
From e0cf6d4b0c84da6273c127a8c87076aac3b51588 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daniel Egger <daniel.egger@sphairon.com>
|
||||||
|
Date: Mon, 16 Aug 2010 22:36:20 +0200
|
||||||
|
Subject: [PATCH 3/3] 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
|
||||||
|
---
|
||||||
|
src/reqs.c | 2 +-
|
||||||
|
src/transparent-proxy.c | 20 ++++++++++----------
|
||||||
|
src/transparent-proxy.h | 2 +-
|
||||||
|
3 files changed, 12 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
--- 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
|
||||||
|
--- a/src/transparent-proxy.c
|
||||||
|
+++ b/src/transparent-proxy.c
|
||||||
|
@@ -55,11 +55,11 @@ static int build_url (char **url, const
|
||||||
|
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 *con
|
||||||
|
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 *con
|
||||||
|
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 *con
|
||||||
|
}
|
||||||
|
|
||||||
|
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 *con
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
--- 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
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user