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 2010/04/23 19:04:40 UTC
svn commit: r937378 - in /httpd/mod_fcgid/trunk: CHANGES-FCGID
docs/manual/mod/mod_fcgid.xml modules/fcgid/mod_fcgid.c
Author: trawick
Date: Fri Apr 23 17:04:40 2010
New Revision: 937378
URL: http://svn.apache.org/viewvc?rev=937378&view=rev
Log:
FcgidPassHeader now maps header names to environment variable names
in the usual manner: The header name is converted to upper case and
is prefixed with HTTP_. An additional environment variable is
created with the legacy name.
PR: 48964
Solution suggested by: wrowe
Modified:
httpd/mod_fcgid/trunk/CHANGES-FCGID
httpd/mod_fcgid/trunk/docs/manual/mod/mod_fcgid.xml
httpd/mod_fcgid/trunk/modules/fcgid/mod_fcgid.c
Modified: httpd/mod_fcgid/trunk/CHANGES-FCGID
URL: http://svn.apache.org/viewvc/httpd/mod_fcgid/trunk/CHANGES-FCGID?rev=937378&r1=937377&r2=937378&view=diff
==============================================================================
--- httpd/mod_fcgid/trunk/CHANGES-FCGID [utf8] (original)
+++ httpd/mod_fcgid/trunk/CHANGES-FCGID [utf8] Fri Apr 23 17:04:40 2010
@@ -1,6 +1,11 @@
-*- coding: utf-8 -*-
Changes with mod_fcgid 2.3.6
+ *) FcgidPassHeader now maps header names to environment variable names
+ in the usual manner: The header name is converted to upper case and
+ is prefixed with HTTP_. An additional environment variable is
+ created with the legacy name. PR 48964. [Jeff Trawick]
+
*) Allow processes to be reused within multiple phases of a request
by releasing them into the free list as soon as possible.
[Chris Darroch]
Modified: httpd/mod_fcgid/trunk/docs/manual/mod/mod_fcgid.xml
URL: http://svn.apache.org/viewvc/httpd/mod_fcgid/trunk/docs/manual/mod/mod_fcgid.xml?rev=937378&r1=937377&r2=937378&view=diff
==============================================================================
--- httpd/mod_fcgid/trunk/docs/manual/mod/mod_fcgid.xml (original)
+++ httpd/mod_fcgid/trunk/docs/manual/mod/mod_fcgid.xml Fri Apr 23 17:04:40 2010
@@ -937,9 +937,17 @@
<usage>
<p>This directive specifies the name of a request header which
will be passed to the FastCGI application as an environment
- variable. The environment variable name will match the name
- specified on this directive, with hyphens converted to
- underscores, and no case conversion performed.</p>
+ variable. The name of the environment variable is derived from
+ the value specified on this directive, as discussed below:</p>
+
+ <p>The legacy behavior is to use the value specified on this directive
+ as the environment variable name, converting hyphens to underscores.
+ No case conversion is performed.</p>
+
+ <p>Beginning with release 2.3.6-dev, an additional environment variable
+ is created. The value specified on this directive is converted to
+ upper case, prefixed with <code>HTTP_</code>, and hyphens are
+ converted to underscores.</p>
<note type="hint"><title>Note</title>
<p>Most request headers are already available to the application
Modified: httpd/mod_fcgid/trunk/modules/fcgid/mod_fcgid.c
URL: http://svn.apache.org/viewvc/httpd/mod_fcgid/trunk/modules/fcgid/mod_fcgid.c?rev=937378&r1=937377&r2=937378&view=diff
==============================================================================
--- httpd/mod_fcgid/trunk/modules/fcgid/mod_fcgid.c (original)
+++ httpd/mod_fcgid/trunk/modules/fcgid/mod_fcgid.c Fri Apr 23 17:04:40 2010
@@ -19,6 +19,7 @@
#include "http_request.h"
#include "http_protocol.h"
#include "ap_mmn.h"
+#include "apr_lib.h"
#include "apr_buckets.h"
#include "apr_strings.h"
#include "apr_thread_proc.h"
@@ -105,6 +106,32 @@ default_build_command(const char **cmd,
return APR_SUCCESS;
}
+/* http2env stolen from util_script.c */
+static char *http2env(apr_pool_t *a, const char *w)
+{
+ char *res = (char *)apr_palloc(a, sizeof("HTTP_") + strlen(w));
+ char *cp = res;
+ char c;
+
+ *cp++ = 'H';
+ *cp++ = 'T';
+ *cp++ = 'T';
+ *cp++ = 'P';
+ *cp++ = '_';
+
+ while ((c = *w++) != 0) {
+ if (!apr_isalnum(c)) {
+ *cp++ = '_';
+ }
+ else {
+ *cp++ = apr_toupper(c);
+ }
+ }
+ *cp = 0;
+
+ return res;
+}
+
static void fcgid_add_cgi_vars(request_rec * r)
{
apr_array_header_t *passheaders = get_pass_headers(r);
@@ -117,8 +144,15 @@ static void fcgid_add_cgi_vars(request_r
for (i = 0; i < hdrcnt; i++, ++hdr) {
const char *val = apr_table_get(r->headers_in, *hdr);
- if (val)
+ if (val) {
+ /* no munging of header name to create envvar name;
+ * consistent with legacy mod_fcgid behavior and mod_fastcgi
+ * prior to 2.4.7
+ */
apr_table_setn(r->subprocess_env, *hdr, val);
+ /* standard munging of header name (upcase, HTTP_, etc.) */
+ apr_table_setn(r->subprocess_env, http2env(r->pool, *hdr), val);
+ }
}
}
Re: svn commit: r937378 - in /httpd/mod_fcgid/trunk: CHANGES-FCGID
docs/manual/mod/mod_fcgid.xml modules/fcgid/mod_fcgid.c
Posted by Jeff Trawick <tr...@gmail.com>.
On Fri, Apr 23, 2010 at 1:04 PM, <tr...@apache.org> wrote:
> Author: trawick
> Date: Fri Apr 23 17:04:40 2010
> New Revision: 937378
>
> URL: http://svn.apache.org/viewvc?rev=937378&view=rev
> Log:
> FcgidPassHeader now maps header names to environment variable names
> in the usual manner: The header name is converted to upper case and
> is prefixed with HTTP_. An additional environment variable is
> created with the legacy name.
> Modified: httpd/mod_fcgid/trunk/modules/fcgid/mod_fcgid.c
> URL: http://svn.apache.org/viewvc/httpd/mod_fcgid/trunk/modules/fcgid/mod_fcgid.c?rev=937378&r1=937377&r2=937378&view=diff
> ==============================================================================
> --- httpd/mod_fcgid/trunk/modules/fcgid/mod_fcgid.c (original)
> +++ httpd/mod_fcgid/trunk/modules/fcgid/mod_fcgid.c Fri Apr 23 17:04:40 2010
> @@ -19,6 +19,7 @@
> #include "http_request.h"
> #include "http_protocol.h"
> #include "ap_mmn.h"
> +#include "apr_lib.h"
> #include "apr_buckets.h"
> #include "apr_strings.h"
> #include "apr_thread_proc.h"
> @@ -105,6 +106,32 @@ default_build_command(const char **cmd,
> return APR_SUCCESS;
> }
>
> +/* http2env stolen from util_script.c */
> +static char *http2env(apr_pool_t *a, const char *w)
a few modules out there have duplicated this function, which is bad;
but as-is it hardly seems like a good API; I guess a function to take
a header name and return the corresponding envvar name would be more
appropriate; it would contain the special logic for
CONTENT_TYPE/CONTENT_LENGTH
mod_fcgid and mod_fastcgi would theoretically have to work around the
CONTENT_TYPE/CONTENT_LENGTH situation to preserve the legacy behavior,
or just slap any script writer that looked at HTTP_CONTENT_TYPE
instead of CONTENT_TYPE
perhaps the whole FcgidPassHeader issue would have been avoided had
there been a config option to pass through [Proxy-]Authorization to
CGIs
(no hurry here to worry about the duplicated code given the other concerns)