summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraham Dumpleton <Graham.Dumpleton@gmail.com>2012-04-15 10:50:05 +1000
committerGraham Dumpleton <Graham.Dumpleton@gmail.com>2012-04-15 10:50:05 +1000
commit449715e3a79e0b0d30b25dba3569f0449667b9d0 (patch)
tree5c16afb11c3f6c6bd18feb3de0639e019b6b52b4
parent4dbed55a8dfc1901e999df1bce62861b7e8eec2c (diff)
downloadmod_wsgi-449715e3a79e0b0d30b25dba3569f0449667b9d0.tar.gz
Support for Apache 2.4.
-rw-r--r--mod_wsgi.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/mod_wsgi.c b/mod_wsgi.c
index 8ce5715..8e12f03 100644
--- a/mod_wsgi.c
+++ b/mod_wsgi.c
@@ -193,6 +193,9 @@ static PyTypeObject Auth_Type;
#endif
#if AP_MODULE_MAGIC_AT_LEAST(20060110,0)
#define MOD_WSGI_WITH_AUTHZ_PROVIDER 1
+#if AP_MODULE_MAGIC_AT_LEAST(20100919,0)
+#define MOD_WSGI_WITH_AUTHZ_PROVIDER_PARSED 1
+#endif
#endif
#endif
@@ -10141,6 +10144,17 @@ static void wsgi_process_socket(apr_pool_t *p, apr_socket_t *sock,
}
apr_sockaddr_ip_get(&c->local_ip, c->local_addr);
+#if AP_MODULE_MAGIC_AT_LEAST(20111130,0)
+ if ((rv = apr_socket_addr_get(&c->client_addr, APR_REMOTE, sock))
+ != APR_SUCCESS) {
+ ap_log_error(APLOG_MARK, APLOG_INFO, rv, wsgi_server,
+ "mod_wsgi (pid=%d): Failed call "
+ "apr_socket_addr_get(APR_REMOTE).", getpid());
+ apr_socket_close(sock);
+ return;
+ }
+ apr_sockaddr_ip_get(&c->client_ip, c->client_addr);
+#else
if ((rv = apr_socket_addr_get(&c->remote_addr, APR_REMOTE, sock))
!= APR_SUCCESS) {
ap_log_error(APLOG_MARK, WSGI_LOG_INFO(rv), wsgi_server,
@@ -10150,6 +10164,7 @@ static void wsgi_process_socket(apr_pool_t *p, apr_socket_t *sock,
return;
}
apr_sockaddr_ip_get(&c->remote_ip, c->remote_addr);
+#endif
c->base_server = daemon->group->server;
@@ -12794,8 +12809,13 @@ static int wsgi_hook_daemon_handler(conn_rec *c)
* file for the host.
*/
+#if AP_MODULE_MAGIC_AT_LEAST(20111130,0)
+ r->connection->client_ip = (char *)apr_table_get(r->subprocess_env,
+ "REMOTE_ADDR");
+#else
r->connection->remote_ip = (char *)apr_table_get(r->subprocess_env,
"REMOTE_ADDR");
+#endif
key = apr_psprintf(p, "%s|%s",
apr_table_get(r->subprocess_env,
@@ -13314,6 +13334,18 @@ static PyObject *Auth_environ(AuthObject *self, const char *group)
Py_DECREF(object);
}
+#if AP_MODULE_MAGIC_AT_LEAST(20111130,0)
+ if (r->useragent_ip) {
+ value = r->useragent_ip;
+#if PY_MAJOR_VERSION >= 3
+ object = PyUnicode_DecodeLatin1(value, strlen(value), NULL);
+#else
+ object = PyString_FromString(value);
+#endif
+ PyDict_SetItemString(vars, "REMOTE_ADDR", object);
+ Py_DECREF(object);
+ }
+#else
if (c->remote_ip) {
value = c->remote_ip;
#if PY_MAJOR_VERSION >= 3
@@ -13324,6 +13356,7 @@ static PyObject *Auth_environ(AuthObject *self, const char *group)
PyDict_SetItemString(vars, "REMOTE_ADDR", object);
Py_DECREF(object);
}
+#endif
#if PY_MAJOR_VERSION >= 3
value = ap_document_root(r);
@@ -13347,6 +13380,17 @@ static PyObject *Auth_environ(AuthObject *self, const char *group)
Py_DECREF(object);
}
+#if AP_MODULE_MAGIC_AT_LEAST(20111130,0)
+ rport = c->client_addr->port;
+ value = apr_itoa(r->pool, rport);
+#if PY_MAJOR_VERSION >= 3
+ object = PyUnicode_DecodeLatin1(value, strlen(value), NULL);
+#else
+ object = PyString_FromString(value);
+#endif
+ PyDict_SetItemString(vars, "REMOTE_PORT", object);
+ Py_DECREF(object);
+#else
rport = c->remote_addr->port;
value = apr_itoa(r->pool, rport);
#if PY_MAJOR_VERSION >= 3
@@ -13356,6 +13400,7 @@ static PyObject *Auth_environ(AuthObject *self, const char *group)
#endif
PyDict_SetItemString(vars, "REMOTE_PORT", object);
Py_DECREF(object);
+#endif
value = r->protocol;
#if PY_MAJOR_VERSION >= 3
@@ -14450,8 +14495,13 @@ static int wsgi_hook_access_checker(request_rec *r)
host = ap_get_remote_host(r->connection, r->per_dir_config,
REMOTE_HOST, NULL);
+#if AP_MODULE_MAGIC_AT_LEAST(20111130,0)
+ if (!host)
+ host = r->useragent_ip;
+#else
if (!host)
host = r->connection->remote_ip;
+#endif
allow = wsgi_allow_access(r, config, host);
@@ -14704,8 +14754,14 @@ static int wsgi_hook_check_user_id(request_rec *r)
#if defined(MOD_WSGI_WITH_AUTHZ_PROVIDER)
+#if MOD_WSGI_WITH_AUTHZ_PROVIDER_PARSED
+static authz_status wsgi_check_authorization(request_rec *r,
+ const char *require_args,
+ const void *parsed_require_line)
+#else
static authz_status wsgi_check_authorization(request_rec *r,
const char *require_args)
+#endif
{
WSGIRequestConfig *config;
@@ -14754,6 +14810,9 @@ static authz_status wsgi_check_authorization(request_rec *r,
static const authz_provider wsgi_authz_provider =
{
&wsgi_check_authorization,
+#if MOD_WSGI_WITH_AUTHZ_PROVIDER_PARSED
+ NULL,
+#endif
};
#else