[mod_wsgi] prepare for httpd 2.4.x

jorton jorton at fedoraproject.org
Tue Mar 13 13:41:01 UTC 2012


commit c7d01a6e5663492842d47efe1e4a2f8bdb088732
Author: Joe Orton <jorton at redhat.com>
Date:   Tue Mar 13 13:40:47 2012 +0000

    prepare for httpd 2.4.x

 .gitignore                 |    1 +
 mod_wsgi-3.3-httpd24.patch |  192 ++++++++++++++++++++++++++++++++++++++++++++
 mod_wsgi.spec              |   15 +++-
 3 files changed, 205 insertions(+), 3 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index b57e77c..82dff90 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 mod_wsgi-3.2.tar.gz
 /mod_wsgi-3.3.tar.gz
+/mod_wsgi-?.?
diff --git a/mod_wsgi-3.3-httpd24.patch b/mod_wsgi-3.3-httpd24.patch
new file mode 100644
index 0000000..1e9a8b4
--- /dev/null
+++ b/mod_wsgi-3.3-httpd24.patch
@@ -0,0 +1,192 @@
+
+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;
+@@ -12739,8 +12756,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 +13281,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 +13303,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 +13327,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 +13347,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 +14438,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 +14697,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 +14753,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
diff --git a/mod_wsgi.spec b/mod_wsgi.spec
index 54e2d3b..3458be0 100644
--- a/mod_wsgi.spec
+++ b/mod_wsgi.spec
@@ -1,6 +1,10 @@
+
+%{!?_httpd_apxs: %{expand: %%global _httpd_apxs %%{_sbindir}/apxs}}
+%{!?_httpd_mmn: %{expand: %%global _httpd_mmn %%(cat %{_includedir}/httpd/.mmn || echo missing-httpd-devel)}}
+
 Name:           mod_wsgi
 Version:        3.3
-Release:        2%{?dist}
+Release:        3%{?dist}
 Summary:        A WSGI interface for Python web applications in Apache
 
 Group:          System Environment/Libraries
@@ -8,10 +12,12 @@ License:        ASL 2.0
 URL:            http://modwsgi.org
 Source0:        http://modwsgi.googlecode.com/files/%{name}-%{version}.tar.gz
 Source1:        wsgi.conf
+Patch0:         mod_wsgi-3.3-httpd24.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 BuildRequires:  httpd-devel
 BuildRequires:  python-devel
+Requires: httpd-mmn = %{_httpd_mmn}
 
 %description
 The mod_wsgi adapter is an Apache module that provides a WSGI compliant
@@ -23,10 +29,10 @@ existing WSGI adapters for mod_python or CGI.
 
 %prep
 %setup -q
-
+%patch0 -p1 -b .httpd24
 
 %build
-%configure --enable-shared
+%configure --enable-shared --with-apxs=%{_httpd_apxs}
 make LDFLAGS="-L%{_libdir}" %{?_smp_mflags}
 
 
@@ -50,6 +56,9 @@ rm -rf $RPM_BUILD_ROOT
 
 
 %changelog
+* Tue Mar 13 2012 Joe Orton <jorton at redhat.com> - 3.3-3
+- prepare for httpd 2.4.x
+
 * Fri Jan 13 2012 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 3.3-2
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
 


More information about the scm-commits mailing list