summaryrefslogtreecommitdiff
path: root/src/transparent-proxy.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/transparent-proxy.c')
-rw-r--r--src/transparent-proxy.c129
1 files changed, 62 insertions, 67 deletions
diff --git a/src/transparent-proxy.c b/src/transparent-proxy.c
index 7318697..81c35ef 100644
--- a/src/transparent-proxy.c
+++ b/src/transparent-proxy.c
@@ -35,87 +35,82 @@
/*
* Build a URL from parts.
*/
-static int
-build_url (char **url, const char *host, int port, const char *path)
+static int build_url (char **url, const char *host, int port, const char *path)
{
- int len;
+ int len;
- assert (url != NULL);
- assert (host != NULL);
- assert (port > 0 && port < 32768);
- assert (path != NULL);
+ assert (url != NULL);
+ assert (host != NULL);
+ assert (port > 0 && port < 32768);
+ assert (path != NULL);
- len = strlen (host) + strlen (path) + 14;
- *url = safemalloc (len);
- if (*url == NULL)
- return -1;
+ len = strlen (host) + strlen (path) + 14;
+ *url = safemalloc (len);
+ if (*url == NULL)
+ return -1;
- return snprintf (*url, len, "http://%s:%d%s", host, port, path);
+ return snprintf (*url, len, "http://%s:%d%s", host, port, path);
}
-
int
do_transparent_proxy (struct conn_s *connptr, hashmap_t hashofheaders,
struct request_s *request, struct config_s *conf,
char *url)
{
- socklen_t length;
- char *data;
+ socklen_t length;
+ char *data;
- length = hashmap_entry_by_key (hashofheaders, "host", (void **) &data);
- if (length <= 0)
- {
- struct sockaddr_in dest_addr;
+ length = hashmap_entry_by_key (hashofheaders, "host", (void **) &data);
+ if (length <= 0) {
+ struct sockaddr_in dest_addr;
- if (getsockname
- (connptr->client_fd, (struct sockaddr *) &dest_addr, &length) < 0)
- {
- log_message (LOG_ERR,
- "process_request: cannot get destination IP for %d",
- connptr->client_fd);
- indicate_http_error (connptr, 400, "Bad Request",
- "detail",
- "Unknown destination", "url", url, NULL);
- return 0;
+ if (getsockname
+ (connptr->client_fd, (struct sockaddr *) &dest_addr,
+ &length) < 0) {
+ log_message (LOG_ERR,
+ "process_request: cannot get destination IP for %d",
+ connptr->client_fd);
+ indicate_http_error (connptr, 400, "Bad Request",
+ "detail", "Unknown destination",
+ "url", url, NULL);
+ return 0;
+ }
+ request->host = safemalloc (17);
+ strcpy (request->host, inet_ntoa (dest_addr.sin_addr));
+ request->port = ntohs (dest_addr.sin_port);
+ request->path = safemalloc (strlen (url) + 1);
+ strcpy (request->path, url);
+ safefree (url);
+ 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);
+ } else {
+ request->host = safemalloc (length + 1);
+ if (sscanf (data, "%[^:]:%hu", request->host, &request->port) !=
+ 2) {
+ strcpy (request->host, data);
+ request->port = HTTP_PORT;
+ }
+ request->path = safemalloc (strlen (url) + 1);
+ strcpy (request->path, url);
+ safefree (url);
+ 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->host = safemalloc (17);
- strcpy (request->host, inet_ntoa (dest_addr.sin_addr));
- request->port = ntohs (dest_addr.sin_port);
- request->path = safemalloc (strlen (url) + 1);
- strcpy (request->path, url);
- safefree (url);
- 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);
- }
- else
- {
- request->host = safemalloc (length + 1);
- if (sscanf (data, "%[^:]:%hu", request->host, &request->port) != 2)
- {
- strcpy (request->host, data);
- request->port = HTTP_PORT;
+ if (conf->ipAddr && strcmp (request->host, conf->ipAddr) == 0) {
+ log_message (LOG_ERR,
+ "process_request: destination IP is localhost %d",
+ connptr->client_fd);
+ indicate_http_error (connptr, 400, "Bad Request",
+ "detail",
+ "You tried to connect to the machine "
+ "the proxy is running on", "url", url,
+ NULL);
+ return 0;
}
- request->path = safemalloc (strlen (url) + 1);
- strcpy (request->path, url);
- safefree (url);
- 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);
- }
- if (conf->ipAddr && strcmp (request->host, conf->ipAddr) == 0)
- {
- log_message (LOG_ERR,
- "process_request: destination IP is localhost %d",
- connptr->client_fd);
- indicate_http_error (connptr, 400, "Bad Request",
- "detail",
- "You tried to connect to the machine "
- "the proxy is running on", "url", url, NULL);
- return 0;
- }
- return 1;
+ return 1;
}