http://code.google.com/p/modwsgi/source/detail?r=8906fb52b6b23455320c848216f6120c979e57f5 http://code.google.com/p/modwsgi/source/detail?r=25deb4b94536c96d63505b2a6d4dfb5be1b38195 diff -r 21f4dac5959a -r 8906fb52b6b2 mod_wsgi/mod_wsgi.c --- mod_wsgi-3.3/mod_wsgi.c.httpd24 +++ mod_wsgi-3.3/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 @@ -5637,7 +5640,7 @@ static void wsgi_python_version(void) } } -static apr_status_t wsgi_python_term() +static apr_status_t wsgi_python_term(void) { PyInterpreterState *interp = NULL; PyThreadState *tstate = NULL; @@ -7851,6 +7854,7 @@ static const char *wsgi_set_auth_group_s return NULL; } +#if !defined(MOD_WSGI_WITH_AUTHN_PROVIDER) static const char *wsgi_set_user_authoritative(cmd_parms *cmd, void *mconfig, const char *f) { @@ -7866,6 +7870,7 @@ static const char *wsgi_set_user_authori return NULL; } +#endif static const char *wsgi_set_group_authoritative(cmd_parms *cmd, void *mconfig, const char *f) @@ -10092,6 +10097,17 @@ static void wsgi_process_socket(apr_pool } 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, @@ -10101,6 +10117,7 @@ static void wsgi_process_socket(apr_pool return; } apr_sockaddr_ip_get(&c->remote_ip, c->remote_addr); +#endif c->base_server = daemon->group->server; @@ -10183,7 +10200,7 @@ static apr_status_t wsgi_worker_acquire( } } -static apr_status_t wsgi_worker_release() +static apr_status_t wsgi_worker_release(void) { WSGIThreadStack *stack = wsgi_worker_stack; @@ -10232,7 +10249,7 @@ static apr_status_t wsgi_worker_release( } } -static apr_status_t wsgi_worker_shutdown() +static apr_status_t wsgi_worker_shutdown(void) { int i; apr_status_t rv; @@ -11008,8 +11025,9 @@ static int wsgi_start_process(apr_pool_t * shared memory segments or memory mapped files not * available to code in daemon processes. */ - +#if !AP_MODULE_MAGIC_AT_LEAST(20071023, 0) ap_cleanup_scoreboard(0); +#endif /* * Wipe out random value used in magic token so that not @@ -12739,8 +12757,13 @@ static int wsgi_hook_daemon_handler(conn * 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, @@ -13259,6 +13282,18 @@ static PyObject *Auth_environ(AuthObject 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 @@ -13269,6 +13304,7 @@ static PyObject *Auth_environ(AuthObject PyDict_SetItemString(vars, "REMOTE_ADDR", object); Py_DECREF(object); } +#endif #if PY_MAJOR_VERSION >= 3 value = ap_document_root(r); @@ -13292,6 +13328,17 @@ static PyObject *Auth_environ(AuthObject 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 @@ -13301,6 +13348,7 @@ static PyObject *Auth_environ(AuthObject #endif PyDict_SetItemString(vars, "REMOTE_PORT", object); Py_DECREF(object); +#endif value = r->protocol; #if PY_MAJOR_VERSION >= 3 @@ -14391,8 +14439,13 @@ static int wsgi_hook_access_checker(requ 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); @@ -14645,8 +14698,14 @@ static int wsgi_hook_check_user_id(reque #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; @@ -14695,6 +14754,9 @@ static authz_status wsgi_check_authoriza static const authz_provider wsgi_authz_provider = { &wsgi_check_authorization, +#if MOD_WSGI_WITH_AUTHZ_PROVIDER_PARSED + NULL, +#endif }; #else