diff options
Diffstat (limited to '')
-rw-r--r-- | src/transparent-proxy.c | 144 |
1 files changed, 72 insertions, 72 deletions
diff --git a/src/transparent-proxy.c b/src/transparent-proxy.c index 5bffa31..b089030 100644 --- a/src/transparent-proxy.c +++ b/src/transparent-proxy.c @@ -36,86 +36,86 @@ * Build a URL from parts. */ static int -build_url(char **url, const char *host, int port, const char *path) +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) +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; - - 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; - } - 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); - } - 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; - } + socklen_t length; + char *data; - return 1; + 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; + } + 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); + } + 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; } |