You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by tr...@apache.org on 2009/10/12 15:55:32 UTC

svn commit: r824337 - in /httpd/mod_fcgid/trunk: CHANGES-FCGID modules/fcgid/fcgid_bridge.c

Author: trawick
Date: Mon Oct 12 13:55:32 2009
New Revision: 824337

URL: http://svn.apache.org/viewvc?rev=824337&view=rev
Log:
Fix handling of the request body when a FastCGI access checker/
authenticator/authorizer (AAA) was configured.  The body wasn't available
for the request handler.

PR: 47973
Submitted by: Jeff Trawick and Barry Scott <barry.scott onelan.co.uk>

Modified:
    httpd/mod_fcgid/trunk/CHANGES-FCGID
    httpd/mod_fcgid/trunk/modules/fcgid/fcgid_bridge.c

Modified: httpd/mod_fcgid/trunk/CHANGES-FCGID
URL: http://svn.apache.org/viewvc/httpd/mod_fcgid/trunk/CHANGES-FCGID?rev=824337&r1=824336&r2=824337&view=diff
==============================================================================
--- httpd/mod_fcgid/trunk/CHANGES-FCGID [utf8] (original)
+++ httpd/mod_fcgid/trunk/CHANGES-FCGID [utf8] Mon Oct 12 13:55:32 2009
@@ -1,6 +1,11 @@
                                                          -*- coding: utf-8 -*-
 Changes with mod_fcgid 2.3.5
 
+  *) Fix handling of the request body when a FastCGI access checker/
+     authenticator/authorizer (AAA) was configured.  The body wasn't available
+     for the request handler.  PR 47973.
+     [Jeff Trawick, Barry Scott <barry.scott onelan.co.uk>]
+
   *) Fix handling of FcgidCmdOptions so that it can apply to wrapper scripts
      which were defined with command-line arguments on the FcgidWrapper
      directive.  [Jeff Trawick]

Modified: httpd/mod_fcgid/trunk/modules/fcgid/fcgid_bridge.c
URL: http://svn.apache.org/viewvc/httpd/mod_fcgid/trunk/modules/fcgid/fcgid_bridge.c?rev=824337&r1=824336&r2=824337&view=diff
==============================================================================
--- httpd/mod_fcgid/trunk/modules/fcgid/fcgid_bridge.c (original)
+++ httpd/mod_fcgid/trunk/modules/fcgid/fcgid_bridge.c Mon Oct 12 13:55:32 2009
@@ -437,38 +437,18 @@
     return cond_status;
 }
 
-int bridge_request(request_rec * r, int role, const char *argv0,
-                   fcgid_wrapper_conf * wrapper_conf)
+static int add_request_body(request_rec *r, apr_pool_t *request_pool,
+                            apr_bucket_brigade *output_brigade)
 {
-    apr_pool_t *request_pool = r->main ? r->main->pool : r->pool;
-    server_rec *s = r->server;
-    fcgid_server_conf *sconf = ap_get_module_config(s->module_config,
+    apr_bucket *bucket_input, *bucket_header;
+    apr_file_t *fd = NULL;
+    apr_off_t cur_pos = 0, request_size = 0;
+    apr_status_t rv;
+    FCGI_Header *stdin_request_header;
+    fcgid_server_conf *sconf = ap_get_module_config(r->server->module_config,
                                                     &fcgid_module);
-    apr_status_t rv = APR_SUCCESS;
     int seen_eos;
-    apr_off_t request_size = 0;
-    apr_file_t *fd = NULL;
     int need_truncate = 1;
-    apr_off_t cur_pos = 0;
-    FCGI_Header *stdin_request_header;
-    apr_bucket_brigade *output_brigade;
-    apr_bucket *bucket_input, *bucket_header, *bucket_eos;
-    char **envp = ap_create_environment(request_pool,
-                                        r->subprocess_env);
-
-    /* Create brigade for the request to fastcgi server */
-    output_brigade =
-        apr_brigade_create(request_pool, r->connection->bucket_alloc);
-
-    /* Build the begin request and environ request, append them to output_brigade */
-    if (!build_begin_block
-        (role, r, r->connection->bucket_alloc, output_brigade)
-        || !build_env_block(r, envp, r->connection->bucket_alloc,
-                            output_brigade)) {
-        ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
-                      "mod_fcgid: can't build begin or env request");
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
 
     /* Stdin header and body */
     /* XXX HACK: I have to read all the request into memory before sending it 
@@ -640,6 +620,40 @@
     }
     APR_BRIGADE_INSERT_TAIL(output_brigade, bucket_header);
 
+    return 0;
+}
+
+int bridge_request(request_rec * r, int role, const char *argv0,
+                   fcgid_wrapper_conf * wrapper_conf)
+{
+    apr_pool_t *request_pool = r->main ? r->main->pool : r->pool;
+    apr_bucket_brigade *output_brigade;
+    apr_bucket *bucket_eos;
+    char **envp = ap_create_environment(request_pool,
+                                        r->subprocess_env);
+    int rc;
+
+    /* Create brigade for the request to fastcgi server */
+    output_brigade =
+        apr_brigade_create(request_pool, r->connection->bucket_alloc);
+
+    /* Build the begin request and environ request, append them to output_brigade */
+    if (!build_begin_block
+        (role, r, r->connection->bucket_alloc, output_brigade)
+        || !build_env_block(r, envp, r->connection->bucket_alloc,
+                            output_brigade)) {
+        ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
+                      "mod_fcgid: can't build begin or env request");
+        return HTTP_INTERNAL_SERVER_ERROR;
+    }
+
+    if (role == FCGI_RESPONDER) {
+        rc = add_request_body(r, request_pool, output_brigade);
+        if (rc) {
+            return rc;
+        }
+    }
+
     /* The eos bucket now */
     bucket_eos = apr_bucket_eos_create(r->connection->bucket_alloc);
     APR_BRIGADE_INSERT_TAIL(output_brigade, bucket_eos);