--- fcgi_protocol.c.orig	2008-08-27 21:37:58.000000000 +0200
+++ fcgi_protocol.c	2008-08-27 21:40:01.000000000 +0200
@@ -169,6 +169,54 @@
     }
 }
 
+/*******************************************************************************
+ * Taken from server/util_script.c. Unfortunately, this function is not defined
+ * in any header file.
+ */
+#ifndef APACHE2
+static char *fcgi_http2env(pool *a, char *w)
+{
+    char *res = ap_pstrcat(a, "HTTP_", w, NULL);
+    char *cp = res;
+
+    while (*++cp) {
+        if (!ap_isalnum(*cp) && *cp != '_') {
+            *cp = '_';
+        }
+        else {
+            *cp = ap_toupper(*cp);
+        }
+    }
+
+    return res;
+}
+#else
+static char *fcgi_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;
+}
+#endif
+
 static void add_pass_header_vars(fcgi_request *fr)
 {
     const array_header *ph = fr->dynamic ? dynamic_pass_headers : fr->fs->pass_headers;
@@ -180,7 +228,7 @@
         for ( ; i; --i, ++elt) {
             const char *val = ap_table_get(fr->r->headers_in, *elt);
             if (val) {
-                ap_table_setn(fr->r->subprocess_env, *elt, val);
+                ap_table_setn(fr->r->subprocess_env, fcgi_http2env (fr->r->pool, *elt), val);
             }
         }
     }
