summaryrefslogtreecommitdiffstats
path: root/mod_wsgi-3.3-httpd24.patch
blob: 1e9a8b47ccc127d113c8b93ce654a33d603a1c35 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
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