Project

General

Profile

Feature #1545 » lighttpd-1.4.19-extforward.patch

1.4.19 version of patch - spillgroup, 2008-03-17 12:57

View differences:

lighttpd-1.4.19/src/mod_extforward.c 2008-03-12 15:18:28.000000000 +0100
typedef struct {
array *forwarder;
array *headers;
} plugin_config;
typedef struct {
......
if (!s) continue;
array_free(s->forwarder);
array_free(s->headers);
free(s);
}
......
size_t i = 0;
config_values_t cv[] = {
{ "extforward.forwarder", NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION }, /* 0 */
{ "extforward.forwarder", NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION }, /* 0 */
{ "extforward.headers", NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION }, /* 1 */
{ NULL, NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
};
......
s = calloc(1, sizeof(plugin_config));
s->forwarder = array_init();
s->headers = array_init();
cv[0].destination = s->forwarder;
cv[1].destination = s->headers;
p->config_storage[i] = s;
......
plugin_config *s = p->config_storage[0];
PATCH(forwarder);
PATCH(headers);
/* skip the first, the global context */
for (i = 1; i < srv->config_context->used; i++) {
......
if (buffer_is_equal_string(du->key, CONST_STR_LEN("extforward.forwarder"))) {
PATCH(forwarder);
} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("extforward.headers"))) {
PATCH(headers);
}
}
}
......
URIHANDLER_FUNC(mod_extforward_uri_handler) {
plugin_data *p = p_d;
data_string *forwarded = NULL;
data_string *ds;
size_t k;
#ifdef HAVE_IPV6
char b2[INET6_ADDRSTRLEN + 1];
struct addrinfo *addrlist = NULL;
......
"-- mod_extforward_uri_handler called");
}
if ((NULL == (forwarded = (data_string *) array_get_element(con->request.headers,"X-Forwarded-For")) &&
NULL == (forwarded = (data_string *) array_get_element(con->request.headers, "Forwarded-For")))) {
for(k=0; k<p->conf.headers->used; k++) {
ds = (data_string *)p->conf.headers->data[k];
if (NULL != (forwarded = (data_string*)array_get_element(con->request.headers, ds->value->ptr))) break;
}
if (con->conf.log_request_handling) {
log_error_write(srv, __FILE__, __LINE__, "s",
"no X-Forwarded-For|Forwarded-For: found, skipping");
}
if(NULL == forwarded) {
if ((NULL == (forwarded = (data_string *) array_get_element(con->request.headers,"X-Forwarded-For")) &&
NULL == (forwarded = (data_string *) array_get_element(con->request.headers, "Forwarded-For"))) ||
(p->conf.headers->used > 0)) {
return HANDLER_GO_ON;
if (con->conf.log_request_handling) {
log_error_write(srv, __FILE__, __LINE__, "s", "no forward header found, skipping");
}
return HANDLER_GO_ON;
}
}
#ifdef HAVE_IPV6
(2-2/2)