summaryrefslogtreecommitdiff
path: root/source4/web_server/http.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/web_server/http.c')
-rw-r--r--source4/web_server/http.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/source4/web_server/http.c b/source4/web_server/http.c
index 18a1f61c1c..8779007f86 100644
--- a/source4/web_server/http.c
+++ b/source4/web_server/http.c
@@ -225,9 +225,10 @@ static void http_redirect(EspHandle handle, int code, char *url)
/* form the full url, unless it already looks like a url */
if (strchr(url, ':') == NULL) {
if (host == NULL) {
+ struct socket_address *socket_address = socket_get_my_addr(web->conn->socket, web);
+ if (socket_address == NULL) goto internal_error;
host = talloc_asprintf(web, "%s:%u",
- socket_get_my_addr(web->conn->socket, web),
- socket_get_my_port(web->conn->socket));
+ socket_address->addr, socket_address->port);
}
if (host == NULL) goto internal_error;
if (url[0] != '/') {
@@ -399,6 +400,8 @@ static void http_setup_arrays(struct esp_state *esp)
struct websrv_context *web = esp->web;
struct esp_data *edata = talloc_get_type(web->task->private, struct esp_data);
struct EspRequest *req = esp->req;
+ struct socket_address *socket_address = socket_get_my_addr(web->conn->socket, esp);
+ struct socket_address *peer_address = socket_get_my_addr(web->conn->socket, esp);
char *p;
#define SETVAR(type, name, value) do { \
@@ -414,8 +417,9 @@ static void http_setup_arrays(struct esp_state *esp)
p = strrchr(web->input.url, '/');
SETVAR(ESP_REQUEST_OBJ, "SCRIPT_NAME", p+1);
SETVAR(ESP_REQUEST_OBJ, "SCRIPT_FILENAME", web->input.url);
- p = socket_get_peer_addr(web->conn->socket, esp);
- SETVAR(ESP_REQUEST_OBJ, "REMOTE_ADDR", p);
+ if (peer_address) {
+ SETVAR(ESP_REQUEST_OBJ, "REMOTE_ADDR", peer_address->addr);
+ }
p = socket_get_peer_name(web->conn->socket, esp);
SETVAR(ESP_REQUEST_OBJ, "REMOTE_HOST", p);
SETVAR(ESP_REQUEST_OBJ, "REMOTE_USER", "");
@@ -433,12 +437,15 @@ static void http_setup_arrays(struct esp_state *esp)
SETVAR(ESP_HEADERS_OBJ, "COOKIE", web->input.cookie);
SETVAR(ESP_HEADERS_OBJ, "USER_AGENT", web->input.user_agent);
- SETVAR(ESP_SERVER_OBJ, "SERVER_ADDR", socket_get_my_addr(web->conn->socket, esp));
- SETVAR(ESP_SERVER_OBJ, "SERVER_NAME", socket_get_my_addr(web->conn->socket, esp));
- SETVAR(ESP_SERVER_OBJ, "SERVER_HOST", socket_get_my_addr(web->conn->socket, esp));
+ if (socket_address) {
+ SETVAR(ESP_SERVER_OBJ, "SERVER_ADDR", socket_address->addr);
+ SETVAR(ESP_SERVER_OBJ, "SERVER_NAME", socket_address->addr);
+ SETVAR(ESP_SERVER_OBJ, "SERVER_HOST", socket_address->addr);
+ SETVAR(ESP_SERVER_OBJ, "SERVER_PORT",
+ talloc_asprintf(esp, "%u", socket_address->port));
+ }
+
SETVAR(ESP_SERVER_OBJ, "DOCUMENT_ROOT", lp_swat_directory());
- SETVAR(ESP_SERVER_OBJ, "SERVER_PORT",
- talloc_asprintf(esp, "%u", socket_get_my_port(web->conn->socket)));
SETVAR(ESP_SERVER_OBJ, "SERVER_PROTOCOL", tls_enabled(web->tls)?"https":"http");
SETVAR(ESP_SERVER_OBJ, "SERVER_SOFTWARE", "SWAT");
SETVAR(ESP_SERVER_OBJ, "GATEWAY_INTERFACE", "CGI/1.1");