]> granicus.if.org Git - apache/commitdiff
Merged /httpd/httpd/trunk:r1515403,1515411,1515420,1517175,1521909,1526647,1541181...
authorJeff Trawick <trawick@apache.org>
Wed, 16 Apr 2014 20:44:14 +0000 (20:44 +0000)
committerJeff Trawick <trawick@apache.org>
Wed, 16 Apr 2014 20:44:14 +0000 (20:44 +0000)
mod_authnz_fcgi: New module to enable FastCGI authorizer
applications to authenticate and/or authorize clients.

Submitted by: trawick, jailletc36, gsmith
Approved by: trawick, jim, gsmith

(Thanks gsmith for the Windows build bits!)

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1588064 13f79535-47bb-0310-9956-ffa450edef68

145 files changed:
Apache-apr2.dsw
Apache.dsw
CHANGES
CMakeLists.txt
STATUS
build/installwinconf.awk
docs/manual/mod/allmodules.xml
docs/manual/mod/allmodules.xml.de
docs/manual/mod/allmodules.xml.es
docs/manual/mod/allmodules.xml.fr
docs/manual/mod/allmodules.xml.ja
docs/manual/mod/allmodules.xml.ko
docs/manual/mod/allmodules.xml.tr
docs/manual/mod/allmodules.xml.zh-cn
docs/manual/mod/core.html.de
docs/manual/mod/core.html.en
docs/manual/mod/core.html.es
docs/manual/mod/core.html.fr
docs/manual/mod/core.html.ja.utf8
docs/manual/mod/core.html.tr.utf8
docs/manual/mod/core.xml.de
docs/manual/mod/core.xml.es
docs/manual/mod/core.xml.fr
docs/manual/mod/core.xml.ja
docs/manual/mod/core.xml.tr
docs/manual/mod/directives.html.de
docs/manual/mod/directives.html.en
docs/manual/mod/directives.html.es
docs/manual/mod/directives.html.fr
docs/manual/mod/directives.html.ja.utf8
docs/manual/mod/directives.html.ko.euc-kr
docs/manual/mod/directives.html.tr.utf8
docs/manual/mod/directives.html.zh-cn.utf8
docs/manual/mod/index.html.de
docs/manual/mod/index.html.en
docs/manual/mod/index.html.es
docs/manual/mod/index.html.fr
docs/manual/mod/index.html.ja.utf8
docs/manual/mod/index.html.ko.euc-kr
docs/manual/mod/index.html.tr.utf8
docs/manual/mod/index.html.zh-cn.utf8
docs/manual/mod/mod_authnz_fcgi.html [new file with mode: 0644]
docs/manual/mod/mod_authnz_fcgi.html.en [new file with mode: 0644]
docs/manual/mod/mod_authnz_fcgi.xml [new file with mode: 0644]
docs/manual/mod/mod_authnz_fcgi.xml.meta [new file with mode: 0644]
docs/manual/mod/mod_authnz_ldap.html.en
docs/manual/mod/mod_authnz_ldap.html.fr
docs/manual/mod/mod_authnz_ldap.xml.fr
docs/manual/mod/mod_authnz_ldap.xml.meta
docs/manual/mod/mod_authz_dbd.html.en
docs/manual/mod/mod_authz_dbd.html.fr
docs/manual/mod/mod_authz_dbd.xml.fr
docs/manual/mod/mod_authz_dbd.xml.meta
docs/manual/mod/mod_authz_dbm.html.en
docs/manual/mod/mod_authz_dbm.html.fr
docs/manual/mod/mod_authz_dbm.xml.fr
docs/manual/mod/mod_authz_dbm.xml.ko
docs/manual/mod/mod_authz_dbm.xml.meta
docs/manual/mod/mod_authz_groupfile.html.en
docs/manual/mod/mod_authz_groupfile.html.fr
docs/manual/mod/mod_authz_groupfile.xml.fr
docs/manual/mod/mod_authz_groupfile.xml.ja
docs/manual/mod/mod_authz_groupfile.xml.ko
docs/manual/mod/mod_authz_groupfile.xml.meta
docs/manual/mod/mod_authz_host.html.en
docs/manual/mod/mod_authz_host.html.fr
docs/manual/mod/mod_authz_host.xml.fr
docs/manual/mod/mod_authz_host.xml.meta
docs/manual/mod/mod_authz_user.html.en
docs/manual/mod/mod_authz_user.html.fr
docs/manual/mod/mod_authz_user.xml.fr
docs/manual/mod/mod_authz_user.xml.ja
docs/manual/mod/mod_authz_user.xml.ko
docs/manual/mod/mod_authz_user.xml.meta
docs/manual/mod/mod_dir.html.en
docs/manual/mod/mod_dir.html.fr
docs/manual/mod/mod_dir.xml.fr
docs/manual/mod/mod_dir.xml.ja
docs/manual/mod/mod_dir.xml.ko
docs/manual/mod/mod_dir.xml.meta
docs/manual/mod/mod_dir.xml.tr
docs/manual/mod/mod_filter.html.fr
docs/manual/mod/mod_headers.html.en
docs/manual/mod/mod_headers.html.fr
docs/manual/mod/mod_headers.xml.fr
docs/manual/mod/mod_headers.xml.ja
docs/manual/mod/mod_headers.xml.ko
docs/manual/mod/mod_isapi.html.fr
docs/manual/mod/mod_isapi.xml.meta
docs/manual/mod/mod_ldap.html.en
docs/manual/mod/mod_log_config.html.fr
docs/manual/mod/mod_log_config.html.tr.utf8
docs/manual/mod/mod_log_config.xml.meta
docs/manual/mod/mod_logio.html.en
docs/manual/mod/mod_logio.html.fr
docs/manual/mod/mod_logio.html.tr.utf8
docs/manual/mod/mod_logio.xml.fr
docs/manual/mod/mod_logio.xml.ja
docs/manual/mod/mod_logio.xml.ko
docs/manual/mod/mod_logio.xml.meta
docs/manual/mod/mod_logio.xml.tr
docs/manual/mod/mod_lua.html.en
docs/manual/mod/mod_lua.html.fr
docs/manual/mod/mod_lua.xml.fr
docs/manual/mod/mod_lua.xml.meta
docs/manual/mod/mod_proxy.html.en
docs/manual/mod/mod_proxy.html.fr
docs/manual/mod/mod_proxy.html.ja.utf8
docs/manual/mod/mod_proxy.xml.fr
docs/manual/mod/mod_proxy.xml.ja
docs/manual/mod/mod_rewrite.html.en
docs/manual/mod/mod_rewrite.html.fr
docs/manual/mod/mod_rewrite.xml.fr
docs/manual/mod/mod_rewrite.xml.meta
docs/manual/mod/mod_session_crypto.html.en
docs/manual/mod/mod_session_crypto.html.fr
docs/manual/mod/mod_session_crypto.xml.fr
docs/manual/mod/mod_session_crypto.xml.meta
docs/manual/mod/mod_ssl.html.fr
docs/manual/mod/mod_suexec.html.fr
docs/manual/mod/mod_suexec.html.tr.utf8
docs/manual/mod/mod_suexec.xml.meta
docs/manual/mod/mod_unixd.html.fr
docs/manual/mod/mod_unixd.html.tr.utf8
docs/manual/mod/mod_unixd.xml.meta
docs/manual/mod/quickreference.html.de
docs/manual/mod/quickreference.html.en
docs/manual/mod/quickreference.html.es
docs/manual/mod/quickreference.html.fr
docs/manual/mod/quickreference.html.ja.utf8
docs/manual/mod/quickreference.html.ko.euc-kr
docs/manual/mod/quickreference.html.tr.utf8
docs/manual/mod/quickreference.html.zh-cn.utf8
docs/manual/sitemap.html.de
docs/manual/sitemap.html.en
docs/manual/sitemap.html.es
docs/manual/sitemap.html.fr
docs/manual/sitemap.html.ja.utf8
docs/manual/sitemap.html.ko.euc-kr
docs/manual/sitemap.html.tr.utf8
docs/manual/sitemap.html.zh-cn.utf8
modules/aaa/config.m4
modules/aaa/mod_authnz_fcgi.c [new file with mode: 0644]
modules/aaa/mod_authnz_fcgi.dsp [new file with mode: 0644]
os/win32/BaseAddr.ref

index da295a5dd3bf11268fbbdc2f444e4cbcf3a79083..44b193e1d7b2a2423cea5a1a06ef73cb3b250c86 100644 (file)
@@ -132,6 +132,9 @@ Package=<4>
     Project_Dep_Name mod_authn_socache
     End Project Dependency
     Begin Project Dependency
+    Project_Dep_Name mod_authnz_fcgi
+    End Project Dependency
+    Begin Project Dependency
     Project_Dep_Name mod_authz_core
     End Project Dependency
     Begin Project Dependency
@@ -1033,6 +1036,24 @@ Package=<4>
 
 ###############################################################################
 
+Project: "mod_authnz_fcgi"=.\modules\aaa\mod_authnz_fcgi.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name libapr
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name libhttpd
+    End Project Dependency
+}}}
+
+###############################################################################
+
 Project: "mod_authnz_ldap"=.\modules\aaa\mod_authnz_ldap.dsp - Package Owner=<4>
 
 Package=<5>
index 9ea521ca3377efd2632dd873b7adc169c8fcc76d..6ac0075f81ef70b46dcd8820d94ded794062d2e6 100644 (file)
@@ -144,6 +144,9 @@ Package=<4>
     Project_Dep_Name mod_authn_socache
     End Project Dependency
     Begin Project Dependency
+    Project_Dep_Name mod_authnz_fcgi
+    End Project Dependency
+    Begin Project Dependency
     Project_Dep_Name mod_authnz_ldap
     End Project Dependency
     Begin Project Dependency
@@ -1243,6 +1246,27 @@ Package=<4>
 
 ###############################################################################
 
+Project: "mod_authnz_fcgi"=.\modules\aaa\mod_authnz_fcgi.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name libapr
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name libaprutil
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name libhttpd
+    End Project Dependency
+}}}
+
+###############################################################################
+
 Project: "mod_authnz_ldap"=.\modules\aaa\mod_authnz_ldap.dsp - Package Owner=<4>
 
 Package=<5>
diff --git a/CHANGES b/CHANGES
index f7c791375ad81aaf6d60793e11468c2da1ecfe7c..f6f725f6a51817198f99bad90eddacd7dc46e483 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,10 @@
 
 Changes with Apache 2.4.10
 
+  *) mod_authnz_fcgi: New module to enable FastCGI authorizer
+     applications to authenticate and/or authorize clients.
+     [Jeff Trawick]
+
   *) mod_proxy: Do not try to parse the regular expressions passed by
      ProxyPassMatch as URL as they do not follow their syntax.
      PR 56074. [Ruediger Pluem]
index 9a4c1181ae0fc10cfe146eb5e3f8138e2185b49d..d3d16e5a4ab0439e8d5355a6bd8791fe01662e69 100644 (file)
@@ -203,6 +203,7 @@ SET(MODULE_LIST
   "modules/aaa/mod_authn_dbm+I+DBM-based authentication control"
   "modules/aaa/mod_authn_file+A+file-based authentication control"
   "modules/aaa/mod_authn_socache+I+Cached authentication control"
+  "modules/aaa/mod_authnz_fcgi+I+FastCGI authorizer-based authentication and authorization"
   "modules/aaa/mod_authnz_ldap+i+LDAP based authentication"
   "modules/aaa/mod_authz_core+A+core authorization provider vector module"
   "modules/aaa/mod_authz_dbd+I+SQL based authorization and Login/Session support"
diff --git a/STATUS b/STATUS
index 1d5741348bddeda7c18c7da24a5b34c585965395..8d9c8bd7f333dd7ae1bbec23c2ada4c920771851 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -110,19 +110,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
      trunk patch: http://svn.apache.org/r1587255
      +1: druggeri, ylavic, covener
 
-   * Merge mod_authnz_fcgi from trunk.
-     trunk:
-       http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/aaa/mod_authnz_fcgi.c
-       http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/mod/mod_authnz_fcgi.xml
-         and a line each in CMakeLists.txt and modules/aaa/config.m4
-         (It was never added to other build systems.)
-       See the 2.4.x patch mergeinfo for trunk revisions.  I've also added a tiny
-       part of r1522544 to create an entry in os/win32/BaseAddr.ref.
-     2.4.x patch: http://people.apache.org/~trawick/authnz_fcgi-2.4.txt
-       The patch includes generated doc changes in order to carry eol-style.
-     +1: trawick, jim
-     +1: gsmith, please include r1588054 (tradional Win build) 
-
 PATCHES PROPOSED TO BACKPORT FROM TRUNK:
   [ New proposals should be added at the end of the list ]
 
index d8db0fc603db1850a99693b5d459393bda9d6d45..33627341292f5a5acbcfefe3318337304c129f40 100644 (file)
@@ -106,6 +106,7 @@ BEGIN {
           print "#LoadModule authn_dbm_module modules/mod_authn_dbm.so" > dstfl;
           print "LoadModule authn_file_module modules/mod_authn_file.so" > dstfl;
           print "#LoadModule authn_socache_module modules/mod_authn_socache.so" > dstfl;
+          print "#LoadModule authnz_fcgi_module modules/mod_authnz_fcgi.so" > dstfl;
           print "#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so" > dstfl;
           print "LoadModule authz_core_module modules/mod_authz_core.so" > dstfl;
           print "#LoadModule authz_dbd_module modules/mod_authz_dbd.so" > dstfl;
index 7b6dddb5ea4c5e4739fc76e732e9e5b074b88425..592dce2a02ef03c2973d72d12d30531496804279 100644 (file)
@@ -17,6 +17,7 @@
   <modulefile>mod_authn_dbm.xml</modulefile>
   <modulefile>mod_authn_file.xml</modulefile>
   <modulefile>mod_authn_socache.xml</modulefile>
+  <modulefile>mod_authnz_fcgi.xml</modulefile>
   <modulefile>mod_authnz_ldap.xml</modulefile>
   <modulefile>mod_authz_core.xml</modulefile>
   <modulefile>mod_authz_dbd.xml</modulefile>
index bfb4670af1f06b0484e45e86a929949c6870f56a..9918fdf7591f2bbbb93096d9a88d385e6d16ebb6 100644 (file)
@@ -17,6 +17,7 @@
   <modulefile>mod_authn_dbm.xml</modulefile>
   <modulefile>mod_authn_file.xml</modulefile>
   <modulefile>mod_authn_socache.xml</modulefile>
+  <modulefile>mod_authnz_fcgi.xml</modulefile>
   <modulefile>mod_authnz_ldap.xml</modulefile>
   <modulefile>mod_authz_core.xml</modulefile>
   <modulefile>mod_authz_dbd.xml</modulefile>
index 13464adb3da81e0b1209d6df7cb238b6a4196a3f..42ed94fb4c73a50b405903dcdeef5bd83a3039e8 100644 (file)
@@ -17,6 +17,7 @@
   <modulefile>mod_authn_dbm.xml</modulefile>
   <modulefile>mod_authn_file.xml</modulefile>
   <modulefile>mod_authn_socache.xml</modulefile>
+  <modulefile>mod_authnz_fcgi.xml</modulefile>
   <modulefile>mod_authnz_ldap.xml</modulefile>
   <modulefile>mod_authz_core.xml</modulefile>
   <modulefile>mod_authz_dbd.xml</modulefile>
index 8089a956c6770f4adac4d9bfbacf73a1c79e7525..df497e7de18bea4f0f9637b40a7cd041e4ead4e6 100644 (file)
@@ -17,6 +17,7 @@
   <modulefile>mod_authn_dbm.xml.fr</modulefile>
   <modulefile>mod_authn_file.xml.fr</modulefile>
   <modulefile>mod_authn_socache.xml.fr</modulefile>
+  <modulefile>mod_authnz_fcgi.xml</modulefile>
   <modulefile>mod_authnz_ldap.xml.fr</modulefile>
   <modulefile>mod_authz_core.xml.fr</modulefile>
   <modulefile>mod_authz_dbd.xml.fr</modulefile>
index 689232048a80dc94cf8f4c746391a2681c889bf5..2df837f0a40b453d45e8d12c7a1cb77e7263d52a 100644 (file)
@@ -17,6 +17,7 @@
   <modulefile>mod_authn_dbm.xml.ja</modulefile>
   <modulefile>mod_authn_file.xml.ja</modulefile>
   <modulefile>mod_authn_socache.xml</modulefile>
+  <modulefile>mod_authnz_fcgi.xml</modulefile>
   <modulefile>mod_authnz_ldap.xml</modulefile>
   <modulefile>mod_authz_core.xml</modulefile>
   <modulefile>mod_authz_dbd.xml</modulefile>
index ad0e81aebcdacbc2fcc3f573dd2023218c217be3..e49c185a0080d8625ffafabba244dc3d84b36e10 100644 (file)
@@ -17,6 +17,7 @@
   <modulefile>mod_authn_dbm.xml.ko</modulefile>
   <modulefile>mod_authn_file.xml.ko</modulefile>
   <modulefile>mod_authn_socache.xml</modulefile>
+  <modulefile>mod_authnz_fcgi.xml</modulefile>
   <modulefile>mod_authnz_ldap.xml</modulefile>
   <modulefile>mod_authz_core.xml</modulefile>
   <modulefile>mod_authz_dbd.xml</modulefile>
index 2b75cac3b98bc6cf1247b79d93ae1e21af09253b..1079ac8f19763d93b8dd519782db2ce481175fe0 100644 (file)
@@ -17,6 +17,7 @@
   <modulefile>mod_authn_dbm.xml</modulefile>
   <modulefile>mod_authn_file.xml</modulefile>
   <modulefile>mod_authn_socache.xml</modulefile>
+  <modulefile>mod_authnz_fcgi.xml</modulefile>
   <modulefile>mod_authnz_ldap.xml</modulefile>
   <modulefile>mod_authz_core.xml</modulefile>
   <modulefile>mod_authz_dbd.xml</modulefile>
index 7b6dddb5ea4c5e4739fc76e732e9e5b074b88425..592dce2a02ef03c2973d72d12d30531496804279 100644 (file)
@@ -17,6 +17,7 @@
   <modulefile>mod_authn_dbm.xml</modulefile>
   <modulefile>mod_authn_file.xml</modulefile>
   <modulefile>mod_authn_socache.xml</modulefile>
+  <modulefile>mod_authnz_fcgi.xml</modulefile>
   <modulefile>mod_authnz_ldap.xml</modulefile>
   <modulefile>mod_authz_core.xml</modulefile>
   <modulefile>mod_authz_dbd.xml</modulefile>
index 4a0ea71f17939c4d0b24fbacaebb2fbad532b3e2..0f1a99d81bb413acd9e3edf5ff614e7c17a6f1f0 100644 (file)
@@ -575,6 +575,7 @@ HTTP-Response-Headern</td></tr>
 <tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Available in Apache 2.4.2 and later</td></tr>
 </table><p>Die Dokumentation zu dieser Direktive wurde
             noch nicht übersetzt. Bitte schauen Sie in die englische
             Version.</p><h3>Siehe auch</h3>
@@ -1226,7 +1227,6 @@ Fehlermeldungen</a></li>
 <tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Available in Apache httpd 2.3.9 and later</td></tr>
 </table><p>Die Dokumentation zu dieser Direktive wurde
             noch nicht übersetzt. Bitte schauen Sie in die englische
             Version.</p><h3>Siehe auch</h3>
index ec3702b2b5761a17ffc07a236d9f34a3a574e56c..1082d68f11617556ec61ab188989eeafc2624a7d 100644 (file)
@@ -667,6 +667,7 @@ headers</td></tr>
 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.4.2 and later</td></tr>
 </table>
     <p>The <code class="directive">DefaultRuntimeDir</code> directive sets the
     directory in which the server will create various run-time files
@@ -1750,9 +1751,9 @@ filenames</td></tr>
     <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. In order to prevent confusion, numbered
     (unnamed) backreferences are ignored. Use named groups instead.</p>
 
-<pre class="prettyprint lang-config">&lt;FileMatch ^(?&lt;sitename&gt;[^/]+)&gt;
+<pre class="prettyprint lang-config">&lt;FilesMatch ^(?&lt;sitename&gt;[^/]+)&gt;
     require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
-&lt;/FileMatch&gt;</pre>
+&lt;/FilesMatch&gt;</pre>
 
 
 <h3>See also</h3>
index 7879ea04094d1999717265d398f7e3ca47fc2bba..414bab462a3a21f411f9b8885760e862d82b7d5c 100644 (file)
@@ -594,6 +594,7 @@ headers</td></tr>
 <tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>server config</td></tr>
 <tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>core</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilidad:</a></th><td>Available in Apache 2.4.2 and later</td></tr>
 </table><p>The documentation for this directive has
             not been translated yet. Please have a look at the English
             version.</p><h3>Consulte también</h3>
index 43e5b7bf2dbbd7aeffb3294bfcd8ab16562cd5da..c8ee75680c8dc3ca318908eb4951e7488c1c5ec8 100644 (file)
@@ -31,6 +31,8 @@
 <a href="../ja/mod/core.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../tr/mod/core.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
 </div>
+<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
+            anglaise pour les changements récents.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Fonctionnalités de base du serveur HTTP Apache toujours
 disponibles</td></tr>
 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Core</td></tr></table>
@@ -127,8 +129,6 @@ d'acceptation</var></code></td></tr>
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.3 sous Windows et 2.1.5
-sur les autres plates-formes.</td></tr>
 </table>
     <p>Cette directive permet d'effectuer une optimisation de la socket
     d'écoute d'un type de protocole en fonction du système
@@ -695,6 +695,7 @@ dans la r
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.4.2 du serveur HTTP Apache</td></tr>
 </table>
     <p>La directive <code class="directive">DefaultRuntimeDir</code> permet de
     définir le répertoire dans lequel le serveur va créer les différents
@@ -1470,7 +1471,6 @@ personnalisation des r
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.9 d'Apache</td></tr>
 </table>
     <p>La directive <code class="directive">ErrorLogFormat</code> permet de
     spécifier quelles informations supplémentaires vont être enregistrées
@@ -1873,9 +1873,9 @@ sp
     nommées) sont ignorées. Vous devez utiliser à la place des groupes
     nommés.</p>
 
-<pre class="prettyprint lang-config">&lt;FileMatch ^(?&lt;sitename&gt;[^/]+)&gt;
+<pre class="prettyprint lang-config">&lt;FilesMatch ^(?&lt;sitename&gt;[^/]+)&gt;
     require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
-&lt;/FileMatch&gt;</pre>
+&lt;/FilesMatch&gt;</pre>
 
 
 
@@ -2331,8 +2331,6 @@ avant de fermer une connexion persistante</td></tr>
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>La spécification d'une valeur en millisecondes est
-possible depuis les versions 2.3.2 et supérieures d'Apache httpd</td></tr>
 </table>
     <p>Le nombre de secondes pendant lesquelles Apache httpd va attendre une
     requête avant de fermer la connexion. Le délai peut être défini en
index 16a31051973f48cdfe649823fe38310772b745a2..6089e054926e8b07b5261b8a8c6a65e00284d719 100644 (file)
 <tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル</td></tr>
 <tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>core</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>Available in Apache 2.4.2 and later</td></tr>
 </table><p>このディレクティブの解説文書は
             まだ翻訳されていません。英語版をご覧ください。
             </p><h3>参照</h3>
@@ -1169,7 +1170,6 @@ for a complete reference and more examples.</li>
 <tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
 <tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>Available in Apache httpd 2.3.9 and later</td></tr>
 </table><p>このディレクティブの解説文書は
             まだ翻訳されていません。英語版をご覧ください。
             </p><h3>参照</h3>
index 2e91a2f0204fa74e037318990c748c819834aeba..058498b3eb45aa46e77a850d5df1482df9463944 100644 (file)
@@ -31,6 +31,7 @@
 <a href="../ja/mod/core.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../tr/mod/core.html" title="Türkçe">&nbsp;tr&nbsp;</a></p>
 </div>
+<div class="outofdate">Bu çeviri güncel olmayabilir. Son değişiklikler için İngilizce sürüm geçerlidir.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Açıklama:</a></th><td>Apache HTTP Sunucusunda daima mevcut olan çekirdek
  özellikler</td></tr>
 <tr><th><a href="module-dict.html#Status">Durum:</a></th><td>Çekirdek</td></tr></table>
index e92ffab752b367a39da2d93d93dd7c8a7c61622a..bbee8f3c568e8751e63aff54ccef736d165ddc01 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 344972:1584704 (outdated) -->
+<!-- English Revision: 344972:1587884 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index 7f05b1bbab54b4fe0418522e04d4ffb7b6a17266..6b7df8793f607be314dcbbef8b095f74b65358fb 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- English Revision: 1040494:1584704 (outdated) -->
+<!-- English Revision: 1040494:1587884 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index bcc49ee5ff97be41f93ec9f4be035d4981976643..715c915972939cd97f88f9c0fd373766cb4af369 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision : 1585830 -->
+<!-- English Revision: 1585830:1587884 (outdated) -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
index 9cffc713a88759bf007f339d4d20b277553ecce0..1bd86215d01ee412cec9a67b39983ced6fd27d3d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 669847:1584704 (outdated) -->
+<!-- English Revision: 669847:1587884 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index 088b65734d4ca481e9bbfbe4b2995fcb8d2ac897..1a29a5023611fd30975f5fdc6759c947e5867bab 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.tr.xsl"?>
-<!-- English Revision: 1562488:1584704 (outdated) -->
+<!-- English Revision: 1562488:1587884 (outdated) -->
 <!-- =====================================================
  Translated by: Nilgün Belma Bugüner <nilgun belgeler.gen.tr>
    Reviewed by: Orhan Berent <berent belgeler.gen.tr>
index 974e9430df2f34674c77e97fb0042b09f732a53d..e3fd688816e21d20adf93717dbd508332790fa59 100644 (file)
 <li><a href="mod_authn_socache.html#authncachesocache">AuthnCacheSOCache</a></li>
 <li><a href="mod_authn_socache.html#authncachetimeout">AuthnCacheTimeout</a></li>
 <li><a href="mod_authn_core.html#authnprovideralias">&lt;AuthnProviderAlias&gt;</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider</a></li>
 <li><a href="mod_authn_core.html#authtype">AuthType</a></li>
 <li><a href="mod_authn_file.html#authuserfile">AuthUserFile</a></li>
 <li><a href="mod_authz_dbd.html#authzdbdlogintoreferer">AuthzDBDLoginToReferer</a></li>
index 3191bee5e93eb86db2ac0c0bd871964e5ab0c045..82944fe48555d9e083f604d17ffba282a4526e91 100644 (file)
 <li><a href="mod_authn_socache.html#authncachesocache">AuthnCacheSOCache</a></li>
 <li><a href="mod_authn_socache.html#authncachetimeout">AuthnCacheTimeout</a></li>
 <li><a href="mod_authn_core.html#authnprovideralias">&lt;AuthnProviderAlias&gt;</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider</a></li>
 <li><a href="mod_authn_core.html#authtype">AuthType</a></li>
 <li><a href="mod_authn_file.html#authuserfile">AuthUserFile</a></li>
 <li><a href="mod_authz_dbd.html#authzdbdlogintoreferer">AuthzDBDLoginToReferer</a></li>
index d2e8a4c1a275c7742cc8c09f1b0376dca79bd5ba..eb8614ca2daa2081d03f30133534db2da244c9e9 100644 (file)
 <li><a href="mod_authn_socache.html#authncachesocache">AuthnCacheSOCache</a></li>
 <li><a href="mod_authn_socache.html#authncachetimeout">AuthnCacheTimeout</a></li>
 <li><a href="mod_authn_core.html#authnprovideralias">&lt;AuthnProviderAlias&gt;</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider</a></li>
 <li><a href="mod_authn_core.html#authtype">AuthType</a></li>
 <li><a href="mod_authn_file.html#authuserfile">AuthUserFile</a></li>
 <li><a href="mod_authz_dbd.html#authzdbdlogintoreferer">AuthzDBDLoginToReferer</a></li>
index 5e6643cd3f783f1e366cf3d196d4b2e77369a791..d9ea45e73400d090bf5272cc48d413084f5df146 100644 (file)
 <li><a href="mod_authn_socache.html#authncachesocache">AuthnCacheSOCache</a></li>
 <li><a href="mod_authn_socache.html#authncachetimeout">AuthnCacheTimeout</a></li>
 <li><a href="mod_authn_core.html#authnprovideralias">&lt;AuthnProviderAlias&gt;</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider</a></li>
 <li><a href="mod_authn_core.html#authtype">AuthType</a></li>
 <li><a href="mod_authn_file.html#authuserfile">AuthUserFile</a></li>
 <li><a href="mod_authz_dbd.html#authzdbdlogintoreferer">AuthzDBDLoginToReferer</a></li>
index 8df22d7b129d4c1bdfdf7b467f76208855853aab..0d4b135bd37df99878bf28420cdaeec468875b6a 100644 (file)
 <li><a href="mod_authn_socache.html#authncachesocache">AuthnCacheSOCache</a></li>
 <li><a href="mod_authn_socache.html#authncachetimeout">AuthnCacheTimeout</a></li>
 <li><a href="mod_authn_core.html#authnprovideralias">&lt;AuthnProviderAlias&gt;</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider</a></li>
 <li><a href="mod_authn_core.html#authtype">AuthType</a></li>
 <li><a href="mod_authn_file.html#authuserfile">AuthUserFile</a></li>
 <li><a href="mod_authz_dbd.html#authzdbdlogintoreferer">AuthzDBDLoginToReferer</a></li>
index af96649826176a4bb93e7ad021a60470a6ee8c1f..8e98c6150fd45d85a3d92de7ad3ae4f12ba78b26 100644 (file)
 <li><a href="mod_authn_socache.html#authncachesocache">AuthnCacheSOCache</a></li>
 <li><a href="mod_authn_socache.html#authncachetimeout">AuthnCacheTimeout</a></li>
 <li><a href="mod_authn_core.html#authnprovideralias">&lt;AuthnProviderAlias&gt;</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider</a></li>
 <li><a href="mod_authn_core.html#authtype">AuthType</a></li>
 <li><a href="mod_authn_file.html#authuserfile">AuthUserFile</a></li>
 <li><a href="mod_authz_dbd.html#authzdbdlogintoreferer">AuthzDBDLoginToReferer</a></li>
index d99a7a03c2e4d351532555c6d0f6a205e20575b0..41af73a7e262909994066aa9ba541524a39c8cab 100644 (file)
 <li><a href="mod_authn_socache.html#authncachesocache">AuthnCacheSOCache</a></li>
 <li><a href="mod_authn_socache.html#authncachetimeout">AuthnCacheTimeout</a></li>
 <li><a href="mod_authn_core.html#authnprovideralias">&lt;AuthnProviderAlias&gt;</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider</a></li>
 <li><a href="mod_authn_core.html#authtype">AuthType</a></li>
 <li><a href="mod_authn_file.html#authuserfile">AuthUserFile</a></li>
 <li><a href="mod_authz_dbd.html#authzdbdlogintoreferer">AuthzDBDLoginToReferer</a></li>
index 2358ae7173e69a98ee40caea8f8020db940054e4..f4b5d70adad7e39ffe71650b545b920581c1112a 100644 (file)
 <li><a href="mod_authn_socache.html#authncachesocache">AuthnCacheSOCache</a></li>
 <li><a href="mod_authn_socache.html#authncachetimeout">AuthnCacheTimeout</a></li>
 <li><a href="mod_authn_core.html#authnprovideralias">&lt;AuthnProviderAlias&gt;</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider</a></li>
+<li><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider</a></li>
 <li><a href="mod_authn_core.html#authtype">AuthType</a></li>
 <li><a href="mod_authn_file.html#authuserfile">AuthUserFile</a></li>
 <li><a href="mod_authz_dbd.html#authzdbdlogintoreferer">AuthzDBDLoginToReferer</a></li>
index e11e54ec57383826a6413a42a0a7f6f925e013df..18fbe0885e470ae1f65034d9cb2a7c9ec25c3c3d 100644 (file)
@@ -92,6 +92,8 @@ HTTP headers</dd>
 <dt><a href="mod_authn_file.html">mod_authn_file</a></dt><dd>User authentication using text files</dd>
 <dt><a href="mod_authn_socache.html">mod_authn_socache</a></dt><dd>Manages a cache of authentication credentials to relieve
 the load on backends</dd>
+<dt><a href="mod_authnz_fcgi.html">mod_authnz_fcgi</a></dt><dd>Allows a FastCGI authorizer application to handle Apache
+httpd authentication and authorization</dd>
 <dt><a href="mod_authnz_ldap.html">mod_authnz_ldap</a></dt><dd>Allows an LDAP directory to be used to store the database
 for HTTP Basic authentication.</dd>
 <dt><a href="mod_authz_core.html">mod_authz_core</a></dt><dd>Core Authorization</dd>
index 126a5a67de3608ab63ebfb458298a3d73708b533..63582b0b638875ee0934aa735dcc87dd5241c8d1 100644 (file)
@@ -88,6 +88,8 @@ HTTP headers</dd>
 <dt><a href="mod_authn_file.html">mod_authn_file</a></dt><dd>User authentication using text files</dd>
 <dt><a href="mod_authn_socache.html">mod_authn_socache</a></dt><dd>Manages a cache of authentication credentials to relieve
 the load on backends</dd>
+<dt><a href="mod_authnz_fcgi.html">mod_authnz_fcgi</a></dt><dd>Allows a FastCGI authorizer application to handle Apache
+httpd authentication and authorization</dd>
 <dt><a href="mod_authnz_ldap.html">mod_authnz_ldap</a></dt><dd>Allows an LDAP directory to be used to store the database
 for HTTP Basic authentication.</dd>
 <dt><a href="mod_authz_core.html">mod_authz_core</a></dt><dd>Core Authorization</dd>
index cdb70dede6cd49585f5cfe50c9a4d5c8ad3c4658..ecb69788b529376e8bfab2f1d8cce09c700fe9d4 100644 (file)
@@ -93,6 +93,8 @@ HTTP headers</dd>
 <dt><a href="mod_authn_file.html">mod_authn_file</a></dt><dd>User authentication using text files</dd>
 <dt><a href="mod_authn_socache.html">mod_authn_socache</a></dt><dd>Manages a cache of authentication credentials to relieve
 the load on backends</dd>
+<dt><a href="mod_authnz_fcgi.html">mod_authnz_fcgi</a></dt><dd>Allows a FastCGI authorizer application to handle Apache
+httpd authentication and authorization</dd>
 <dt><a href="mod_authnz_ldap.html">mod_authnz_ldap</a></dt><dd>Allows an LDAP directory to be used to store the database
 for HTTP Basic authentication.</dd>
 <dt><a href="mod_authz_core.html">mod_authz_core</a></dt><dd>Core Authorization</dd>
index 456060b9c57d9f9ee4270a0fad9ab967e4bc0dd6..49b10a0d882df92f9b1780c7f01eb2509e4c14dd 100644 (file)
@@ -95,6 +95,8 @@ DBM</dd>
 texte</dd>
 <dt><a href="mod_authn_socache.html">mod_authn_socache</a></dt><dd>Gère un cache des données d'authentification pour diminuer
 la charge des serveurs d'arrière-plan</dd>
+<dt><a href="mod_authnz_fcgi.html">mod_authnz_fcgi</a></dt><dd>Allows a FastCGI authorizer application to handle Apache
+httpd authentication and authorization</dd>
 <dt><a href="mod_authnz_ldap.html">mod_authnz_ldap</a></dt><dd>Permet d'utiliser un annuaire LDAP pour l'authentification
 HTTP de base.</dd>
 <dt><a href="mod_authz_core.html">mod_authz_core</a></dt><dd>Autorisation basique</dd>
@@ -168,7 +170,7 @@ HTTP</dd>
 Includes ou SSI)</dd>
 <dt><a href="mod_info.html">mod_info</a></dt><dd>Affiche une présentation complète de la configuration du
 serveur</dd>
-<dt><a href="mod_isapi.html">mod_isapi</a></dt><dd>Extensions ISAPI au coeur d'Apache pour Windows</dd>
+<dt><a href="mod_isapi.html">mod_isapi</a></dt><dd>Extensions ISAPI dans Apache pour Windows</dd>
 <dt><a href="mod_lbmethod_bybusyness.html" id="L" name="L">mod_lbmethod_bybusyness</a></dt><dd>Algorithme de planification avec répartition de charge de
 l'attribution des requêtes en attente pour le module
 <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code></dd>
index 48934d00d1384512a6a1afae9d09867287476812..912ba03a3fd96c7965ad676726cd9e462e46aac5 100644 (file)
@@ -86,6 +86,8 @@ CGI スクリプトを実行する機能を提供</dd>
 <dt><a href="mod_authn_file.html">mod_authn_file</a></dt><dd>テキストファイルを用いたユーザ認証</dd>
 <dt><a href="mod_authn_socache.html">mod_authn_socache</a></dt><dd>Manages a cache of authentication credentials to relieve
 the load on backends</dd>
+<dt><a href="mod_authnz_fcgi.html">mod_authnz_fcgi</a></dt><dd>Allows a FastCGI authorizer application to handle Apache
+httpd authentication and authorization</dd>
 <dt><a href="mod_authnz_ldap.html">mod_authnz_ldap</a></dt><dd>Allows an LDAP directory to be used to store the database
 for HTTP Basic authentication.</dd>
 <dt><a href="mod_authz_core.html">mod_authz_core</a></dt><dd>Core Authorization</dd>
index 8ce388fe8329601ef943df115b3ce1280a9ec20e..dc5846c070ae39313a549cf5414357bbbfb17f2f 100644 (file)
@@ -85,6 +85,8 @@ address)</dd>
 <dt><a href="mod_authn_file.html">mod_authn_file</a></dt><dd>¹®ÀÚÆÄÀÏÀ» ÀÌ¿ëÇÑ »ç¿ëÀÚ ÀÎÁõ</dd>
 <dt><a href="mod_authn_socache.html">mod_authn_socache</a></dt><dd>Manages a cache of authentication credentials to relieve
 the load on backends</dd>
+<dt><a href="mod_authnz_fcgi.html">mod_authnz_fcgi</a></dt><dd>Allows a FastCGI authorizer application to handle Apache
+httpd authentication and authorization</dd>
 <dt><a href="mod_authnz_ldap.html">mod_authnz_ldap</a></dt><dd>Allows an LDAP directory to be used to store the database
 for HTTP Basic authentication.</dd>
 <dt><a href="mod_authz_core.html">mod_authz_core</a></dt><dd>Core Authorization</dd>
index db2ceb6002606734a62f7939b54ec1de7b679556..a660060c1fb07d784cb847410fc943ff939e2c4a 100644 (file)
@@ -84,6 +84,8 @@ HTTP headers</dd>
 <dt><a href="mod_authn_file.html">mod_authn_file</a></dt><dd>User authentication using text files</dd>
 <dt><a href="mod_authn_socache.html">mod_authn_socache</a></dt><dd>Manages a cache of authentication credentials to relieve
 the load on backends</dd>
+<dt><a href="mod_authnz_fcgi.html">mod_authnz_fcgi</a></dt><dd>Allows a FastCGI authorizer application to handle Apache
+httpd authentication and authorization</dd>
 <dt><a href="mod_authnz_ldap.html">mod_authnz_ldap</a></dt><dd>Allows an LDAP directory to be used to store the database
 for HTTP Basic authentication.</dd>
 <dt><a href="mod_authz_core.html">mod_authz_core</a></dt><dd>Core Authorization</dd>
index c1afbfcdaba7a80bc5a0d43f6114071d65cce12b..016ce922c332c2ccf768b82553141570db106d2d 100644 (file)
@@ -83,6 +83,8 @@ HTTP headers</dd>
 <dt><a href="mod_authn_file.html">mod_authn_file</a></dt><dd>User authentication using text files</dd>
 <dt><a href="mod_authn_socache.html">mod_authn_socache</a></dt><dd>Manages a cache of authentication credentials to relieve
 the load on backends</dd>
+<dt><a href="mod_authnz_fcgi.html">mod_authnz_fcgi</a></dt><dd>Allows a FastCGI authorizer application to handle Apache
+httpd authentication and authorization</dd>
 <dt><a href="mod_authnz_ldap.html">mod_authnz_ldap</a></dt><dd>Allows an LDAP directory to be used to store the database
 for HTTP Basic authentication.</dd>
 <dt><a href="mod_authz_core.html">mod_authz_core</a></dt><dd>Core Authorization</dd>
diff --git a/docs/manual/mod/mod_authnz_fcgi.html b/docs/manual/mod/mod_authnz_fcgi.html
new file mode 100644 (file)
index 0000000..b45dc4a
--- /dev/null
@@ -0,0 +1,5 @@
+# GENERATED FROM XML -- DO NOT EDIT
+
+URI: mod_authnz_fcgi.html.en
+Content-Language: en
+Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_authnz_fcgi.html.en b/docs/manual/mod/mod_authnz_fcgi.html.en
new file mode 100644 (file)
index 0000000..c59aeeb
--- /dev/null
@@ -0,0 +1,556 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
+        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+              This file is generated from xml source: DO NOT EDIT
+        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+      -->
+<title>mod_authnz_fcgi - Apache HTTP Server</title>
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
+<script src="../style/scripts/prettify.min.js" type="text/javascript">
+</script>
+
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body>
+<div id="page-header">
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
+<p class="apache">Apache HTTP Server Version 2.4</p>
+<img alt="" src="../images/feather.gif" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.4</a> &gt; <a href="./">Modules</a></div>
+<div id="page-content">
+<div id="preamble"><h1>Apache Module mod_authnz_fcgi</h1>
+<div class="toplang">
+<p><span>Available Languages: </span><a href="../en/mod/mod_authnz_fcgi.html" title="English">&nbsp;en&nbsp;</a></p>
+</div>
+<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Allows a FastCGI authorizer application to handle Apache
+httpd authentication and authorization</td></tr>
+<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>authnz_fcgi_module</td></tr>
+<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_authnz_fcgi.c</td></tr></table>
+<h3>Summary</h3>
+
+    <p>This module allows FastCGI authorizer applications to
+    authenticate users and authorize access to resources.  It supports
+    generic FastCGI authorizers which participate in a single phase
+    for authentication and authorization as well as Apache httpd-specific
+    authenticators and authorizors which participate in one or both
+    phases.</p>
+
+    <p>FastCGI authorizers can authenticate using user id and password, 
+    such as for Basic authentication, or can authenticate using arbitrary
+    mechanisms.</p>
+</div>
+<div id="quickview"><h3 class="directives">Directives</h3>
+<ul id="toc">
+<li><img alt="" src="../images/down.gif" /> <a href="#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#authnzfcgidefineprovider">AuthnzFcgiDefineProvider</a></li>
+</ul>
+<h3>Topics</h3>
+<ul id="topics">
+<li><img alt="" src="../images/down.gif" /> <a href="#invocations">Invocation modes</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#examples">Additional examples</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#limitations">Limitations</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#logging">Logging</a></li>
+</ul><h3>See also</h3>
+<ul class="seealso">
+<li><a href="../howto/auth.html">Authentication, Authorization,
+and Access Control</a></li>
+<li><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code></li>
+<li><code class="program"><a href="../programs/fcgistarter.html">fcgistarter</a></code></li>
+</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="invocations" id="invocations">Invocation modes</a></h2>
+
+    <p>The invocation modes for FastCGI authorizers supported by this 
+    module are distinguished by two characteristics, <em>type</em> and
+    auth <em>mechanism</em>.</p>
+
+    <p><em>Type</em> is simply <code>authn</code> for authentication,
+    <code>authz</code> for authorization, or <code>authnz</code> for
+    combined authentication and authorization.</p>
+
+    <p>Auth <em>mechanism</em> refers to the Apache httpd configuration
+    mechanisms and processing phases, and can be <code>
+    AuthBasicProvider</code>, <code>Require</code>, or <code>
+    check_user_id</code>.  The first two of these
+    correspond to the directives used to enable participation in the
+    appropriate processing phase.</p>
+
+    <p>Descriptions of each mode:</p>
+
+    <dl>
+      <dt><em>Type</em> <code>authn</code>, <em>mechanism</em>
+      <code>AuthBasicProvider</code></dt>
+
+      <dd>In this mode, 
+      <code>FCGI_ROLE</code> is set to <code>AUTHORIZER</code> and
+      <code>FCGI_APACHE_ROLE</code> is set to <code>AUTHENTICATOR</code>.
+      The application must be defined as provider type <em>authn</em>
+      using <code class="directive"><a href="#authnzfcgidefineprovider">
+      AuthnzFcgiDefineProvider</a></code> and enabled with
+      <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>.
+      When invoked, the application is
+      expected to authenticate the client using the provided user id and
+      password.  Example application:
+
+<pre class="prettyprint lang-perl">#!/usr/bin/perl
+use FCGI;
+while (FCGI::accept &gt;= 0) {
+    die if $ENV{'FCGI_APACHE_ROLE'} ne "AUTHENTICATOR";
+    die if $ENV{'FCGI_ROLE'}        ne "AUTHORIZER";
+    die if !$ENV{'REMOTE_PASSWD'};
+    die if !$ENV{'REMOTE_USER'};
+
+    print STDERR "This text is written to the web server error log.\n";
+
+    if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") &amp;&amp;
+        $ENV{'REMOTE_PASSWD'} eq "bar" ) {
+        print "Status: 200\n";
+        print "Variable-AUTHN_1: authn_01\n";
+        print "Variable-AUTHN_2: authn_02\n";
+        print "\n";
+    }
+    else {
+        print "Status: 401\n\n";
+    }
+}</pre>
+
+
+      Example configuration:
+<pre class="prettyprint lang-config">AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10102/
+&lt;Location /protected/&gt;
+  AuthType Basic
+  AuthName "Restricted"
+  AuthBasicProvider FooAuthn
+  Require ...
+&lt;/Location&gt;</pre>
+
+      </dd>
+
+      <dt><em>Type</em> <code>authz</code>, <em>mechanism</em>
+      <code>Require</code></dt>
+      <dd>In this mode, <code>FCGI_ROLE</code> is set to <code>
+      AUTHORIZER</code> and <code>FCGI_APACHE_ROLE</code> is set to
+      <code>AUTHORIZER</code>.  The application must be defined as
+      provider type <em>authz</em> using <code class="directive"><a href="#authnzfcgidefineprovider">
+      AuthnzFcgiDefineProvider</a></code>.  When invoked, the application 
+      is expected to authorize the client using the provided user id and other
+      request data.  Example application:
+<pre class="prettyprint lang-perl">#!/usr/bin/perl
+use FCGI;
+while (FCGI::accept &gt;= 0) {
+    die if $ENV{'FCGI_APACHE_ROLE'} ne "AUTHORIZER";
+    die if $ENV{'FCGI_ROLE'}        ne "AUTHORIZER";
+    die if $ENV{'REMOTE_PASSWD'};
+
+    print STDERR "This text is written to the web server error log.\n";
+
+    if ($ENV{'REMOTE_USER'} eq "foo1") {
+        print "Status: 200\n";
+        print "Variable-AUTHZ_1: authz_01\n";
+        print "Variable-AUTHZ_2: authz_02\n";
+        print "\n";
+    }
+    else {
+        print "Status: 403\n\n";
+    }
+}</pre>
+
+
+      Example configuration:
+<pre class="prettyprint lang-config">AuthnzFcgiDefineProvider authz FooAuthz fcgi://localhost:10103/
+&lt;Location /protected/&gt;
+  AuthType ...
+  AuthName ...
+  AuthBasicProvider ...
+  Require FooAuthz
+&lt;/Location&gt;</pre>
+
+      </dd>
+
+      <dt><em>Type</em> <code>authnz</code>, <em>mechanism</em>
+      <code>AuthBasicProvider</code> <em>+</em> <code>Require</code></dt>
+
+      <dd>In this mode, which supports the web server-agnostic FastCGI
+      <code>AUTHORIZER</code> protocol, <code>FCGI_ROLE</code> is set to
+      <code>AUTHORIZER</code> and <code>FCGI_APACHE_ROLE</code> is not set.
+      The application must be defined as provider type <em>authnz</em>
+      using <code class="directive"><a href="#authnzfcgidefineprovider">
+      AuthnzFcgiDefineProvider</a></code>.  The application is expected to
+      handle both authentication and authorization in the same invocation
+      using the user id, password, and other request data.  The invocation 
+      occurs during the Apache httpd API authentication phase.  If the 
+      application returns 200 and the same provider is invoked during the
+      authorization phase (via <code class="directive">Require</code>), mod_authnz_fcgi
+      will return success for the authorization phase without invoking the
+      application.  Example application:
+<pre class="prettyprint lang-perl">#!/usr/bin/perl
+use FCGI;
+while (FCGI::accept &gt;= 0) {
+    die if $ENV{'FCGI_APACHE_ROLE'};
+    die if $ENV{'FCGI_ROLE'} ne "AUTHORIZER";
+    die if !$ENV{'REMOTE_PASSWD'};
+    die if !$ENV{'REMOTE_USER'};
+
+    print STDERR "This text is written to the web server error log.\n";
+
+    if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") &amp;&amp;
+        $ENV{'REMOTE_PASSWD'} eq "bar" &amp;&amp;
+        $ENV{'REQUEST_URI'} =~ m%/bar/.*%) {
+        print "Status: 200\n";
+        print "Variable-AUTHNZ_1: authnz_01\n";
+        print "Variable-AUTHNZ_2: authnz_02\n";
+        print "\n";
+    }
+    else {
+        print "Status: 401\n\n";
+    }
+}</pre>
+
+
+      Example configuration:
+<pre class="prettyprint lang-config">AuthnzFcgiDefineProvider authnz FooAuthnz fcgi://localhost:10103/
+&lt;Location /protected/&gt;
+  AuthType Basic
+  AuthName "Restricted"
+  AuthBasicProvider FooAuthnz
+  Require FooAuthnz
+&lt;/Location&gt;</pre>
+
+      </dd>
+
+      <dt><em>Type</em> <code>authn</code>, <em>mechanism</em>
+      <code>check_user_id</code></dt>
+
+      <dd>In this mode, <code>FCGI_ROLE</code> is set to <code>
+      AUTHORIZER</code> and <code>FCGI_APACHE_ROLE</code> is set to
+      <code>AUTHENTICATOR</code>.  The application must be defined as
+      provider type <em>authn</em> using <code class="directive"><a href="#authnzfcgidefineprovider">
+      AuthnzFcgiDefineProvider</a></code>.  <code class="directive"><a href="#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider</a></code>
+      specifies when it is called.  Example application:
+<pre class="prettyprint lang-perl">#!/usr/bin/perl
+use FCGI;
+while (FCGI::accept &gt;= 0) {
+    die if $ENV{'FCGI_APACHE_ROLE'} ne "AUTHENTICATOR";
+    die if $ENV{'FCGI_ROLE'} ne "AUTHORIZER";
+
+    # This authorizer assumes that the RequireBasicAuth option of 
+    # AuthnzFcgiCheckAuthnProvider is On:
+    die if !$ENV{'REMOTE_PASSWD'};
+    die if !$ENV{'REMOTE_USER'};
+
+    print STDERR "This text is written to the web server error log.\n";
+
+    if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") &amp;&amp;
+        $ENV{'REMOTE_PASSWD'} eq "bar" ) {
+        print "Status: 200\n";
+        print "Variable-AUTHNZ_1: authnz_01\n";
+        print "Variable-AUTHNZ_2: authnz_02\n";
+        print "\n";
+    }
+    else {
+        print "Status: 401\n\n";
+        # If a response body is written here, it will be returned to
+        # the client.
+    }
+}</pre>
+
+
+      Example configuration:
+<pre class="prettyprint lang-config">AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10103/
+&lt;Location /protected/&gt;
+  AuthType ...
+  AuthName ...
+  AuthnzFcgiCheckAuthnProvider FooAuthn \
+                               Authoritative On \
+                               RequireBasicAuth Off \
+                               UserExpr "%{reqenv:REMOTE_USER}"
+  Require ...
+&lt;/Location&gt;</pre>
+
+      </dd>
+
+    </dl>
+    
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="examples" id="examples">Additional examples</a></h2>
+
+  <ol>
+    <li>If your application supports the separate authentication and
+    authorization roles (<code>AUTHENTICATOR</code> and <code>AUTHORIZER</code>), define 
+    separate providers as follows, even if they map to the same
+    application:
+
+<pre class="prettyprint lang-config">AuthnzFcgiDefineProvider authn  FooAuthn  fcgi://localhost:10102/
+AuthnzFcgiDefineProvider authz  FooAuthz  fcgi://localhost:10102/</pre>
+
+
+    Specify the authn provider on 
+    <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
+    and the authz provider on
+    <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>:
+
+<pre class="prettyprint lang-config">AuthType Basic
+AuthName "Restricted"
+AuthBasicProvider FooAuthn
+Require FooAuthz</pre>
+
+    </li>
+
+    <li>If your application supports the generic <code>AUTHORIZER</code> role 
+    (authentication and authorizer in one invocation), define a
+    single provider as follows:
+
+<pre class="prettyprint lang-config">AuthnzFcgiDefineProvider authnz FooAuthnz fcgi://localhost:10103/</pre>
+
+
+    Specify the authnz provider on both <code class="directive">AuthBasicProvider</code>
+    and <code class="directive">Require</code>:
+
+<pre class="prettyprint lang-config">AuthType Basic
+AuthName "Restricted"
+AuthBasicProvider FooAuthnz
+Require FooAuthnz</pre>
+
+    </li>
+</ol>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="limitations" id="limitations">Limitations</a></h2>
+
+    <p>The following are potential features which are not currently
+    implemented:</p>
+
+    <dl>
+      <dt>Apache httpd access checker</dt>
+      <dd>The Apache httpd API <em>access check</em> phase is a separate
+      phase from authentication and authorization.  Some other FastCGI
+      implementations implement this phase, which is denoted by the 
+      setting of <code>FCGI_APACHE_ROLE</code> to <code>ACCESS_CHECKER</code>.</dd>
+
+      <dt>Local (Unix) sockets or pipes</dt>
+      <dd>Only TCP sockets are currently supported.</dd>
+
+      <dt>Support for mod_authn_socache</dt>
+      <dd>mod_authn_socache interaction should be implemented for
+      applications which participate in Apache httpd-style
+      authentication.</dd>
+
+      <dt>Support for digest authentication using AuthDigestProvider</dt>
+      <dd>This is expected to be a permanent limitation as there is
+      no authorizer flow for retrieving a hash.</dd>
+
+      <dt>Application process management</dt>
+      <dd>This is expected to be permanently out of scope for
+      this module.  Application processes must be controlled by
+      other means.  For example, <code class="program"><a href="../programs/fcgistarter.html">fcgistarter</a></code> can be used to
+      start them.</dd>
+
+      <dt>AP_AUTH_INTERNAL_PER_URI</dt>
+      <dd>All providers are currently registered as 
+      AP_AUTH_INTERNAL_PER_CONF, which means that checks are not
+      performed again for internal subrequests with the same
+      access control configuration as the initial request.</dd>
+
+      <dt>Protocol data charset conversion</dt>
+      <dd>If mod_authnz_fcgi runs in an EBCDIC compilation
+      environment, all FastCGI protocol data is written in EBCDIC
+      and expected to be received in EBCDIC.</dd>
+
+      <dt>Multiple requests per connection</dt>
+      <dd>Currently the connection to the FastCGI authorizer is
+      closed after every phase of processing.  For example, if the
+      authorizer handles separate <em>authn</em> and <em>authz</em>
+      phases then two connections will be used.</dd>
+
+      <dt>URI Mapping</dt>
+      <dd>URIs from clients can't be mapped, such as with the <code class="directive">
+      ProxyPass</code> used with FastCGI responders.</dd>
+
+    </dl>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="logging" id="logging">Logging</a></h2>
+
+    <ol>
+        <li>Processing errors are logged at log level <code>error</code>
+        and higher.</li>
+        <li>Messages written by the application are logged at log
+        level <code>warn</code>.</li>
+        <li>General messages for debugging are logged at log level
+        <code>debug</code>.</li>
+        <li>Environment variables passed to the application are
+        logged at log level <code>trace2</code>. The value of the 
+        <code>REMOTE_PASSWD</code> variable will be obscured,
+        but <strong>any other sensitive data will be visible in the 
+        log</strong>.</li>
+        <li>All I/O between the module and the FastCGI application,
+        including all environment variables, will be logged in printable
+        and hex format at log level <code>trace5</code>.  <strong>All
+        sensitive data will be visible in the log.</strong></li>
+    </ol>
+
+    <p><code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> can be used
+    to configure a log level specific to mod_authnz_fcgi.  For
+    example:</p>
+
+<pre class="prettyprint lang-config">LogLevel info authnz_fcgi:trace8</pre>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthnzFcgiCheckAuthnProvider" id="AuthnzFcgiCheckAuthnProvider">AuthnzFcgiCheckAuthnProvider</a> <a name="authnzfcgicheckauthnprovider" id="authnzfcgicheckauthnprovider">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables a FastCGI application to handle the check_authn
+authentication hook.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthnzFcgiCheckAuthnProvider <em>provider-name</em>|<code>None</code>
+<em>option</em> ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_fcgi</td></tr>
+</table>
+    <p>This directive is used to enable a FastCGI authorizer to
+    handle a specific processing phase of authentication or
+    authorization.</p>
+
+    <p>Some capabilities of FastCGI authorizers require enablement
+    using this directive instead of
+    <code class="directive">AuthBasicProvider</code>:</p>
+
+    <ul>
+      <li>Non-Basic authentication; generally, determining the user
+      id of the client and returning it from the authorizer; see the
+      <code>UserExpr</code> option below</li>
+      <li>Selecting a custom response code; for a non-200 response
+      from the authorizer, the code from the authorizer will be the
+      status of the response</li>
+      <li>Setting the body of a non-200 response; if the authorizer
+      provides a response body with a non-200 response, that body
+      will be returned to the client; up to 8192 bytes of text are
+      supported</li>
+    </ul>
+
+    <dl>
+      <dt><em>provider-name</em></dt>
+      <dd>This is the name of a provider defined with <code class="directive">
+      AuthnzFcgiDefineProvider</code>.</dd>
+
+      <dt><code>None</code></dt>
+      <dd>Specify <code>None</code> to disable a provider enabled
+      with this directive in an outer scope, such as in a parent
+      directory.</dd>
+
+      <dt><em>option</em></dt>
+      <dd>The following options are supported:
+      
+      <dl>
+         <dt>Authoritative On|Off (default On)</dt>
+         <dd>This controls whether or not other modules are allowed
+         to run when this module has a FastCGI authorizer configured
+         and it fails the request.</dd>
+
+         <dt>DefaultUser <em>userid</em></dt>
+         <dd>When the authorizer returns success and <code>UserExpr</code>
+         is configured and evaluates to an empty string (e.g., authorizer
+         didn't return a variable), this value will be used as the user
+         id.  This is typically used when the authorizer has a concept of
+         guest, or unauthenticated, users and guest users are mapped to
+         some specific user id for logging and other purposes.</dd>
+
+         <dt>RequireBasicAuth On|Off (default Off)</dt>
+         <dd>This controls whether or not Basic auth is required
+         before passing the request to the authorizer.  If required,
+         the authorizer won't be invoked without a user id and
+         password; 401 will be returned for a request without that.</dd>
+
+         <dt>UserExpr <em>expr</em> (no default)</dt>
+         <dd>When Basic authentication isn't provided by the client
+         and the authorizer determines the user, this expression,
+         evaluated after calling the authorizer, determines the
+         user.  The expression follows <a href="../expr.html">
+         ap_expr syntax</a> and must resolve to a string.  A typical
+         use is to reference a <code>Variable-<em>XXX</em></code> 
+         setting returned by the authorizer using an option like
+         <code>UserExpr "%{reqenv:<em>XXX</em>}"</code>.  If
+         this option is specified and the user id can't be retrieved
+         using the expression after a successful authentication, the
+         request will be rejected with a 500 error.</dd>
+
+       </dl>
+      </dd>
+     </dl>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AuthnzFcgiDefineProvider" id="AuthnzFcgiDefineProvider">AuthnzFcgiDefineProvider</a> <a name="authnzfcgidefineprovider" id="authnzfcgidefineprovider">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Defines a FastCGI application as a provider for
+authentication and/or authorization</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthnzFcgiDefineProvider <em>type</em> <em>provider-name</em>
+<em>backend-address</em></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_fcgi</td></tr>
+</table>
+    <p>This directive is used to define a FastCGI application as
+    a provider for a particular phase of authentication or
+    authorization.</p>
+
+    <dl>
+      <dt><em>type</em></dt>
+      <dd>This must be set to <em>authn</em> for authentication,
+      <em>authz</em> for authentication, or <em>authnz</em> for
+      a generic FastCGI authorizer which performs both checks.</dd>
+
+      <dt><em>provider-name</em></dt>
+      <dd>This is used to assign a name to the provider which is
+      used in other directives such as 
+      <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
+      and 
+      <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>.</dd>
+
+      <dt><em>backend-address</em></dt>
+      <dd>This specifies the address of the application, in the form
+      <em>fcgi://hostname:port/</em>.  The application process(es)
+      must be managed independently, such as with
+      <code class="program"><a href="../programs/fcgistarter.html">fcgistarter</a></code>.</dd>
+    </dl>
+
+</div>
+</div>
+<div class="bottomlang">
+<p><span>Available Languages: </span><a href="../en/mod/mod_authnz_fcgi.html" title="English">&nbsp;en&nbsp;</a></p>
+</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
+<script type="text/javascript"><!--//--><![CDATA[//><!--
+var comments_shortname = 'httpd';
+var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_authnz_fcgi.html';
+(function(w, d) {
+    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
+        d.write('<div id="comments_thread"><\/div>');
+        var s = d.createElement('script');
+        s.type = 'text/javascript';
+        s.async = true;
+        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
+        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
+    }
+    else { 
+        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
+    }
+})(window, document);
+//--><!]]></script></div><div id="footer">
+<p class="apache">Copyright 2014 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
+if (typeof(prettyPrint) !== 'undefined') {
+    prettyPrint();
+}
+//--><!]]></script>
+</body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_authnz_fcgi.xml b/docs/manual/mod/mod_authnz_fcgi.xml
new file mode 100644 (file)
index 0000000..e04e0d0
--- /dev/null
@@ -0,0 +1,523 @@
+<?xml version="1.0"?>
+<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
+<!-- $LastChangedRevision:$ -->
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<modulesynopsis metafile="mod_authnz_fcgi.xml.meta">
+
+<name>mod_authnz_fcgi</name>
+<description>Allows a FastCGI authorizer application to handle Apache
+httpd authentication and authorization</description>
+<status>Extension</status>
+<sourcefile>mod_authnz_fcgi.c</sourcefile>
+<identifier>authnz_fcgi_module</identifier>
+
+<summary>
+    <p>This module allows FastCGI authorizer applications to
+    authenticate users and authorize access to resources.  It supports
+    generic FastCGI authorizers which participate in a single phase
+    for authentication and authorization as well as Apache httpd-specific
+    authenticators and authorizors which participate in one or both
+    phases.</p>
+
+    <p>FastCGI authorizers can authenticate using user id and password, 
+    such as for Basic authentication, or can authenticate using arbitrary
+    mechanisms.</p>
+</summary>
+
+<seealso><a href="../howto/auth.html">Authentication, Authorization,
+and Access Control</a></seealso>
+<seealso><module>mod_auth_basic</module></seealso>
+<seealso><program>fcgistarter</program></seealso>
+
+<section id="invocations"><title>Invocation modes</title>
+
+    <p>The invocation modes for FastCGI authorizers supported by this 
+    module are distinguished by two characteristics, <em>type</em> and
+    auth <em>mechanism</em>.</p>
+
+    <p><em>Type</em> is simply <code>authn</code> for authentication,
+    <code>authz</code> for authorization, or <code>authnz</code> for
+    combined authentication and authorization.</p>
+
+    <p>Auth <em>mechanism</em> refers to the Apache httpd configuration
+    mechanisms and processing phases, and can be <code>
+    AuthBasicProvider</code>, <code>Require</code>, or <code>
+    check_user_id</code>.  The first two of these
+    correspond to the directives used to enable participation in the
+    appropriate processing phase.</p>
+
+    <p>Descriptions of each mode:</p>
+
+    <dl>
+      <dt><em>Type</em> <code>authn</code>, <em>mechanism</em>
+      <code>AuthBasicProvider</code></dt>
+
+      <dd>In this mode, 
+      <code>FCGI_ROLE</code> is set to <code>AUTHORIZER</code> and
+      <code>FCGI_APACHE_ROLE</code> is set to <code>AUTHENTICATOR</code>.
+      The application must be defined as provider type <em>authn</em>
+      using <directive module="mod_authnz_fcgi">
+      AuthnzFcgiDefineProvider</directive> and enabled with
+      <directive module="mod_auth_basic">AuthBasicProvider</directive>.
+      When invoked, the application is
+      expected to authenticate the client using the provided user id and
+      password.  Example application:
+
+<highlight language="perl">
+#!/usr/bin/perl
+use FCGI;
+while (FCGI::accept >= 0) {
+    die if $ENV{'FCGI_APACHE_ROLE'} ne "AUTHENTICATOR";
+    die if $ENV{'FCGI_ROLE'}        ne "AUTHORIZER";
+    die if !$ENV{'REMOTE_PASSWD'};
+    die if !$ENV{'REMOTE_USER'};
+
+    print STDERR "This text is written to the web server error log.\n";
+
+    if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") &amp;&amp;
+        $ENV{'REMOTE_PASSWD'} eq "bar" ) {
+        print "Status: 200\n";
+        print "Variable-AUTHN_1: authn_01\n";
+        print "Variable-AUTHN_2: authn_02\n";
+        print "\n";
+    }
+    else {
+        print "Status: 401\n\n";
+    }
+}
+</highlight>
+
+      Example configuration:
+<highlight language="config">
+AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10102/
+&lt;Location /protected/&gt;
+  AuthType Basic
+  AuthName "Restricted"
+  AuthBasicProvider FooAuthn
+  Require ...
+&lt;/Location&gt;
+</highlight>
+      </dd>
+
+      <dt><em>Type</em> <code>authz</code>, <em>mechanism</em>
+      <code>Require</code></dt>
+      <dd>In this mode, <code>FCGI_ROLE</code> is set to <code>
+      AUTHORIZER</code> and <code>FCGI_APACHE_ROLE</code> is set to
+      <code>AUTHORIZER</code>.  The application must be defined as
+      provider type <em>authz</em> using <directive module="mod_authnz_fcgi">
+      AuthnzFcgiDefineProvider</directive>.  When invoked, the application 
+      is expected to authorize the client using the provided user id and other
+      request data.  Example application:
+<highlight language="perl">
+#!/usr/bin/perl
+use FCGI;
+while (FCGI::accept >= 0) {
+    die if $ENV{'FCGI_APACHE_ROLE'} ne "AUTHORIZER";
+    die if $ENV{'FCGI_ROLE'}        ne "AUTHORIZER";
+    die if $ENV{'REMOTE_PASSWD'};
+
+    print STDERR "This text is written to the web server error log.\n";
+
+    if ($ENV{'REMOTE_USER'} eq "foo1") {
+        print "Status: 200\n";
+        print "Variable-AUTHZ_1: authz_01\n";
+        print "Variable-AUTHZ_2: authz_02\n";
+        print "\n";
+    }
+    else {
+        print "Status: 403\n\n";
+    }
+}
+</highlight>
+
+      Example configuration:
+<highlight language="config">
+AuthnzFcgiDefineProvider authz FooAuthz fcgi://localhost:10103/
+&lt;Location /protected/&gt;
+  AuthType ...
+  AuthName ...
+  AuthBasicProvider ...
+  Require FooAuthz
+&lt;/Location&gt;
+</highlight>
+      </dd>
+
+      <dt><em>Type</em> <code>authnz</code>, <em>mechanism</em>
+      <code>AuthBasicProvider</code> <em>+</em> <code>Require</code></dt>
+
+      <dd>In this mode, which supports the web server-agnostic FastCGI
+      <code>AUTHORIZER</code> protocol, <code>FCGI_ROLE</code> is set to
+      <code>AUTHORIZER</code> and <code>FCGI_APACHE_ROLE</code> is not set.
+      The application must be defined as provider type <em>authnz</em>
+      using <directive module="mod_authnz_fcgi">
+      AuthnzFcgiDefineProvider</directive>.  The application is expected to
+      handle both authentication and authorization in the same invocation
+      using the user id, password, and other request data.  The invocation 
+      occurs during the Apache httpd API authentication phase.  If the 
+      application returns 200 and the same provider is invoked during the
+      authorization phase (via <directive>Require</directive>), mod_authnz_fcgi
+      will return success for the authorization phase without invoking the
+      application.  Example application:
+<highlight language="perl">
+#!/usr/bin/perl
+use FCGI;
+while (FCGI::accept >= 0) {
+    die if $ENV{'FCGI_APACHE_ROLE'};
+    die if $ENV{'FCGI_ROLE'} ne "AUTHORIZER";
+    die if !$ENV{'REMOTE_PASSWD'};
+    die if !$ENV{'REMOTE_USER'};
+
+    print STDERR "This text is written to the web server error log.\n";
+
+    if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") &amp;&amp;
+        $ENV{'REMOTE_PASSWD'} eq "bar" &amp;&amp;
+        $ENV{'REQUEST_URI'} =~ m%/bar/.*%) {
+        print "Status: 200\n";
+        print "Variable-AUTHNZ_1: authnz_01\n";
+        print "Variable-AUTHNZ_2: authnz_02\n";
+        print "\n";
+    }
+    else {
+        print "Status: 401\n\n";
+    }
+}
+</highlight>
+
+      Example configuration:
+<highlight language="config">
+AuthnzFcgiDefineProvider authnz FooAuthnz fcgi://localhost:10103/
+&lt;Location /protected/&gt;
+  AuthType Basic
+  AuthName "Restricted"
+  AuthBasicProvider FooAuthnz
+  Require FooAuthnz
+&lt;/Location&gt;
+</highlight>
+      </dd>
+
+      <dt><em>Type</em> <code>authn</code>, <em>mechanism</em>
+      <code>check_user_id</code></dt>
+
+      <dd>In this mode, <code>FCGI_ROLE</code> is set to <code>
+      AUTHORIZER</code> and <code>FCGI_APACHE_ROLE</code> is set to
+      <code>AUTHENTICATOR</code>.  The application must be defined as
+      provider type <em>authn</em> using <directive module="mod_authnz_fcgi">
+      AuthnzFcgiDefineProvider</directive>.  <directive 
+      module="mod_authnz_fcgi">AuthnzFcgiCheckAuthnProvider</directive>
+      specifies when it is called.  Example application:
+<highlight language="perl">
+#!/usr/bin/perl
+use FCGI;
+while (FCGI::accept >= 0) {
+    die if $ENV{'FCGI_APACHE_ROLE'} ne "AUTHENTICATOR";
+    die if $ENV{'FCGI_ROLE'} ne "AUTHORIZER";
+
+    # This authorizer assumes that the RequireBasicAuth option of 
+    # AuthnzFcgiCheckAuthnProvider is On:
+    die if !$ENV{'REMOTE_PASSWD'};
+    die if !$ENV{'REMOTE_USER'};
+
+    print STDERR "This text is written to the web server error log.\n";
+
+    if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") &amp;&amp;
+        $ENV{'REMOTE_PASSWD'} eq "bar" ) {
+        print "Status: 200\n";
+        print "Variable-AUTHNZ_1: authnz_01\n";
+        print "Variable-AUTHNZ_2: authnz_02\n";
+        print "\n";
+    }
+    else {
+        print "Status: 401\n\n";
+        # If a response body is written here, it will be returned to
+        # the client.
+    }
+}
+</highlight>
+
+      Example configuration:
+<highlight language="config">
+AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10103/
+&lt;Location /protected/&gt;
+  AuthType ...
+  AuthName ...
+  AuthnzFcgiCheckAuthnProvider FooAuthn \
+                               Authoritative On \
+                               RequireBasicAuth Off \
+                               UserExpr "%{reqenv:REMOTE_USER}"
+  Require ...
+&lt;/Location&gt;
+</highlight>
+      </dd>
+
+    </dl>
+    
+</section>
+
+<section id="examples"><title>Additional examples</title>
+
+  <ol>
+    <li>If your application supports the separate authentication and
+    authorization roles (<code>AUTHENTICATOR</code> and <code>AUTHORIZER</code>), define 
+    separate providers as follows, even if they map to the same
+    application:
+
+<highlight language="config">
+AuthnzFcgiDefineProvider authn  FooAuthn  fcgi://localhost:10102/
+AuthnzFcgiDefineProvider authz  FooAuthz  fcgi://localhost:10102/
+</highlight>
+
+    Specify the authn provider on 
+    <directive module="mod_auth_basic">AuthBasicProvider</directive>
+    and the authz provider on
+    <directive module="mod_authz_core">Require</directive>:
+
+<highlight language="config">
+AuthType Basic
+AuthName "Restricted"
+AuthBasicProvider FooAuthn
+Require FooAuthz
+</highlight>
+    </li>
+
+    <li>If your application supports the generic <code>AUTHORIZER</code> role 
+    (authentication and authorizer in one invocation), define a
+    single provider as follows:
+
+<highlight language="config">
+AuthnzFcgiDefineProvider authnz FooAuthnz fcgi://localhost:10103/
+</highlight>
+
+    Specify the authnz provider on both <directive>AuthBasicProvider</directive>
+    and <directive>Require</directive>:
+
+<highlight language="config">
+AuthType Basic
+AuthName "Restricted"
+AuthBasicProvider FooAuthnz
+Require FooAuthnz
+</highlight>
+    </li>
+</ol>
+</section>
+
+<section id="limitations"><title>Limitations</title>
+
+    <p>The following are potential features which are not currently
+    implemented:</p>
+
+    <dl>
+      <dt>Apache httpd access checker</dt>
+      <dd>The Apache httpd API <em>access check</em> phase is a separate
+      phase from authentication and authorization.  Some other FastCGI
+      implementations implement this phase, which is denoted by the 
+      setting of <code>FCGI_APACHE_ROLE</code> to <code>ACCESS_CHECKER</code>.</dd>
+
+      <dt>Local (Unix) sockets or pipes</dt>
+      <dd>Only TCP sockets are currently supported.</dd>
+
+      <dt>Support for mod_authn_socache</dt>
+      <dd>mod_authn_socache interaction should be implemented for
+      applications which participate in Apache httpd-style
+      authentication.</dd>
+
+      <dt>Support for digest authentication using AuthDigestProvider</dt>
+      <dd>This is expected to be a permanent limitation as there is
+      no authorizer flow for retrieving a hash.</dd>
+
+      <dt>Application process management</dt>
+      <dd>This is expected to be permanently out of scope for
+      this module.  Application processes must be controlled by
+      other means.  For example, <program>fcgistarter</program> can be used to
+      start them.</dd>
+
+      <dt>AP_AUTH_INTERNAL_PER_URI</dt>
+      <dd>All providers are currently registered as 
+      AP_AUTH_INTERNAL_PER_CONF, which means that checks are not
+      performed again for internal subrequests with the same
+      access control configuration as the initial request.</dd>
+
+      <dt>Protocol data charset conversion</dt>
+      <dd>If mod_authnz_fcgi runs in an EBCDIC compilation
+      environment, all FastCGI protocol data is written in EBCDIC
+      and expected to be received in EBCDIC.</dd>
+
+      <dt>Multiple requests per connection</dt>
+      <dd>Currently the connection to the FastCGI authorizer is
+      closed after every phase of processing.  For example, if the
+      authorizer handles separate <em>authn</em> and <em>authz</em>
+      phases then two connections will be used.</dd>
+
+      <dt>URI Mapping</dt>
+      <dd>URIs from clients can't be mapped, such as with the <directive>
+      ProxyPass</directive> used with FastCGI responders.</dd>
+
+    </dl>
+
+</section>
+
+<section id="logging"><title>Logging</title>
+
+    <ol>
+        <li>Processing errors are logged at log level <code>error</code>
+        and higher.</li>
+        <li>Messages written by the application are logged at log
+        level <code>warn</code>.</li>
+        <li>General messages for debugging are logged at log level
+        <code>debug</code>.</li>
+        <li>Environment variables passed to the application are
+        logged at log level <code>trace2</code>. The value of the 
+        <code>REMOTE_PASSWD</code> variable will be obscured,
+        but <strong>any other sensitive data will be visible in the 
+        log</strong>.</li>
+        <li>All I/O between the module and the FastCGI application,
+        including all environment variables, will be logged in printable
+        and hex format at log level <code>trace5</code>.  <strong>All
+        sensitive data will be visible in the log.</strong></li>
+    </ol>
+
+    <p><directive module="core">LogLevel</directive> can be used
+    to configure a log level specific to mod_authnz_fcgi.  For
+    example:</p>
+
+<highlight language="config">
+LogLevel info authnz_fcgi:trace8
+</highlight>
+
+</section>
+
+<directivesynopsis>
+<name>AuthnzFcgiDefineProvider</name>
+<description>Defines a FastCGI application as a provider for
+authentication and/or authorization</description>
+<syntax>AuthnzFcgiDefineProvider <em>type</em> <em>provider-name</em>
+<em>backend-address</em></syntax>
+<default>none</default>
+<contextlist><context>server config</context></contextlist>
+<usage>
+    <p>This directive is used to define a FastCGI application as
+    a provider for a particular phase of authentication or
+    authorization.</p>
+
+    <dl>
+      <dt><em>type</em></dt>
+      <dd>This must be set to <em>authn</em> for authentication,
+      <em>authz</em> for authentication, or <em>authnz</em> for
+      a generic FastCGI authorizer which performs both checks.</dd>
+
+      <dt><em>provider-name</em></dt>
+      <dd>This is used to assign a name to the provider which is
+      used in other directives such as 
+      <directive module="mod_auth_basic">AuthBasicProvider</directive>
+      and 
+      <directive module="mod_authz_core">Require</directive>.</dd>
+
+      <dt><em>backend-address</em></dt>
+      <dd>This specifies the address of the application, in the form
+      <em>fcgi://hostname:port/</em>.  The application process(es)
+      must be managed independently, such as with
+      <program>fcgistarter</program>.</dd>
+    </dl>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>AuthnzFcgiCheckAuthnProvider</name>
+<description>Enables a FastCGI application to handle the check_authn
+authentication hook.</description>
+<syntax>AuthnzFcgiCheckAuthnProvider <em>provider-name</em>|<code>None</code>
+<em>option</em> ...</syntax>
+<default>none</default>
+<contextlist><context>directory</context></contextlist>
+<usage>
+    <p>This directive is used to enable a FastCGI authorizer to
+    handle a specific processing phase of authentication or
+    authorization.</p>
+
+    <p>Some capabilities of FastCGI authorizers require enablement
+    using this directive instead of
+    <directive>AuthBasicProvider</directive>:</p>
+
+    <ul>
+      <li>Non-Basic authentication; generally, determining the user
+      id of the client and returning it from the authorizer; see the
+      <code>UserExpr</code> option below</li>
+      <li>Selecting a custom response code; for a non-200 response
+      from the authorizer, the code from the authorizer will be the
+      status of the response</li>
+      <li>Setting the body of a non-200 response; if the authorizer
+      provides a response body with a non-200 response, that body
+      will be returned to the client; up to 8192 bytes of text are
+      supported</li>
+    </ul>
+
+    <dl>
+      <dt><em>provider-name</em></dt>
+      <dd>This is the name of a provider defined with <directive>
+      AuthnzFcgiDefineProvider</directive>.</dd>
+
+      <dt><code>None</code></dt>
+      <dd>Specify <code>None</code> to disable a provider enabled
+      with this directive in an outer scope, such as in a parent
+      directory.</dd>
+
+      <dt><em>option</em></dt>
+      <dd>The following options are supported:
+      
+      <dl>
+         <dt>Authoritative On|Off (default On)</dt>
+         <dd>This controls whether or not other modules are allowed
+         to run when this module has a FastCGI authorizer configured
+         and it fails the request.</dd>
+
+         <dt>DefaultUser <em>userid</em></dt>
+         <dd>When the authorizer returns success and <code>UserExpr</code>
+         is configured and evaluates to an empty string (e.g., authorizer
+         didn't return a variable), this value will be used as the user
+         id.  This is typically used when the authorizer has a concept of
+         guest, or unauthenticated, users and guest users are mapped to
+         some specific user id for logging and other purposes.</dd>
+
+         <dt>RequireBasicAuth On|Off (default Off)</dt>
+         <dd>This controls whether or not Basic auth is required
+         before passing the request to the authorizer.  If required,
+         the authorizer won't be invoked without a user id and
+         password; 401 will be returned for a request without that.</dd>
+
+         <dt>UserExpr <em>expr</em> (no default)</dt>
+         <dd>When Basic authentication isn't provided by the client
+         and the authorizer determines the user, this expression,
+         evaluated after calling the authorizer, determines the
+         user.  The expression follows <a href="../expr.html">
+         ap_expr syntax</a> and must resolve to a string.  A typical
+         use is to reference a <code>Variable-<em>XXX</em></code> 
+         setting returned by the authorizer using an option like
+         <code>UserExpr "%{reqenv:<em>XXX</em>}"</code>.  If
+         this option is specified and the user id can't be retrieved
+         using the expression after a successful authentication, the
+         request will be rejected with a 500 error.</dd>
+
+       </dl>
+      </dd>
+     </dl>
+</usage>
+</directivesynopsis>
+
+</modulesynopsis>
diff --git a/docs/manual/mod/mod_authnz_fcgi.xml.meta b/docs/manual/mod/mod_authnz_fcgi.xml.meta
new file mode 100644 (file)
index 0000000..9ce8794
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- GENERATED FROM XML: DO NOT EDIT -->
+
+<metafile reference="mod_authnz_fcgi.xml">
+  <basename>mod_authnz_fcgi</basename>
+  <path>/mod/</path>
+  <relpath>..</relpath>
+
+  <variants>
+    <variant>en</variant>
+  </variants>
+</metafile>
index 58bf9c3c4b891f145c8a83aa9957ff82314b45c2..c32bab5c2e997d00d44c6534eb467215e794198c 100644 (file)
@@ -35,7 +35,7 @@ for HTTP Basic authentication.</td></tr>
 <tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.1 and later</td></tr></table>
 <h3>Summary</h3>
 
-    <p>This module provides authentication front-ends such as
+    <p>This module allows authentication front-ends such as
     <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> to authenticate users through
     an ldap directory.</p>
 
@@ -350,7 +350,7 @@ for HTTP Basic authentication.</td></tr>
     <code>ldap-filter</code>.  Other authorization types may also be
     used but may require that additional authorization modules be loaded.</p>
 
-    <p>Since v2.5.0, <a href="../expr.html">expressions</a> are supported
+    <p>Since v2.4.8, <a href="../expr.html">expressions</a> are supported
     within the LDAP require directives.</p>
 
 <h3><a name="requser" id="requser">Require ldap-user</a></h3>
@@ -848,7 +848,7 @@ authorization</td></tr>
 <tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authnz_ldap</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td><em>exec:</em> was added in 2.4.6.</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td><em>exec:</em> was added in 2.4.5.</td></tr>
 </table>
     <p>A bind password to use in conjunction with the bind DN. Note
     that the bind password is probably sensitive data, and should be
@@ -858,14 +858,15 @@ authorization</td></tr>
     <p>If the value begins with exec: the resulting command will be
     executed and the first line returned to standard output by the
     program will be used as the password.</p>
-<div class="example"><pre>#Password used as-is
+<pre class="prettyprint lang-config">#Password used as-is
 AuthLDAPBindPassword secret
 
 #Run /path/to/program to get my password
 AuthLDAPBindPassword exec:/path/to/program
 
 #Run /path/to/otherProgram and provide arguments
-AuthLDAPBindPassword "exec:/path/to/otherProgram argument1"</pre></div>
+AuthLDAPBindPassword "exec:/path/to/otherProgram argument1"</pre>
+
 
 
 </div>
index 1fe91d3031933446348b9f8db565794ac1cff951..dcecb930d57bcd0a02acfe1f5506df7cf7eb337f 100644 (file)
@@ -27,6 +27,8 @@
 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_authnz_ldap.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
 <a href="../fr/mod/mod_authnz_ldap.html" title="Français">&nbsp;fr&nbsp;</a></p>
 </div>
+<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
+            anglaise pour les changements récents.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Permet d'utiliser un annuaire LDAP pour l'authentification
 HTTP de base.</td></tr>
 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
index 0549a1b45417d1139c27826e8494b30dca48aa02..2a84e2840e853f59cc8b6501a32d4841f9066de5 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision : 1555539 -->
+<!-- English Revision: 1555539:1587324 (outdated) -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
index 4ec661a32dd5046d4535dedae299bc720b9734f6..7a6a237d9a1fa816284676c7782fd5bc9431d6d0 100644 (file)
@@ -8,6 +8,6 @@
 
   <variants>
     <variant>en</variant>
-    <variant>fr</variant>
+    <variant outdated="yes">fr</variant>
   </variants>
 </metafile>
index 431ad7e25a216d836f70ca6cf919e67a5528768c..4ed0fe46c13a8631361e3917c0a16fb7bdd3e218 100644 (file)
@@ -58,7 +58,7 @@
 <ul id="topics">
 <li><img alt="" src="../images/down.gif" /> <a href="#requiredirectives">The Require Directives</a></li>
 <li><img alt="" src="../images/down.gif" /> <a href="#login">Database Login</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#client">Client Login</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#client">Client Login integration</a></li>
 <li><img alt="" src="../images/down.gif" /> <a href="#example">Configuration example</a></li>
 </ul><h3>See also</h3>
 <ul class="seealso">
@@ -79,7 +79,7 @@
     authorization types with <code>dbd-group</code>, <code>dbd-login</code> and
     <code>dbd-logout</code>.</p>
 
-    <p>Since v2.5.0, <a href="../expr.html">expressions</a> are supported
+    <p>Since v2.4.8, <a href="../expr.html">expressions</a> are supported
     within the DBD require directives.</p>
 
 <h3><a name="reqgroup" id="reqgroup">Require dbd-group</a></h3>
@@ -132,13 +132,13 @@ supplying the necessary credentials).</p>
 For usage details, see the configuration example below.</p>
 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 <div class="section">
-<h2><a name="client" id="client">Client Login</a></h2>
+<h2><a name="client" id="client">Client Login integration</a></h2>
 
 <p>Some administrators may wish to implement client-side session
 management that works in concert with the server-side login/logout
 capabilities offered by this module, for example, by setting or unsetting
-an HTTP cookie or other such token when a user logs in or out.
-To support such integration, <code class="module"><a href="../mod/mod_authz_dbd.html">mod_authz_dbd</a></code> exports an
+an HTTP cookie or other such token when a user logs in or out.</p>
+<p>To support such integration, <code class="module"><a href="../mod/mod_authz_dbd.html">mod_authz_dbd</a></code> exports an
 optional hook that will be run whenever a user's status is updated in
 the database.  Other session management modules can then use the hook
 to implement functions that start and end client-side sessions.</p>
index c8ac9d977e99dcafc9bd065c616ce1228c153514..ad9d39ab6e46e9d14ca91f4cec8707e2b96c90a7 100644 (file)
@@ -27,6 +27,8 @@
 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_authz_dbd.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
 <a href="../fr/mod/mod_authz_dbd.html" title="Français">&nbsp;fr&nbsp;</a></p>
 </div>
+<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
+            anglaise pour les changements récents.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Autorisation en groupe et reconnaissance d'identité avec base
 SQL</td></tr>
 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
index f924484b8bdf492c59d5f56fd1ad46fc62199fdb..9fe54645bfbda989891d88e0d13eb1d9f8433e2d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision : 1555540 -->
+<!-- English Revision: 1555540:1587031 (outdated) -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
index 691db29ca9024c0c19f963e615ad139730651409..8789f3f9ef20dbd6e05ee627c5db725f6c237477 100644 (file)
@@ -8,6 +8,6 @@
 
   <variants>
     <variant>en</variant>
-    <variant>fr</variant>
+    <variant outdated="yes">fr</variant>
   </variants>
 </metafile>
index 0ff0316b1b5158a29f9ad5b6889f16415fc2833f..3e2531e7515dd8a712ed286b2677aab00680ab4a 100644 (file)
@@ -62,7 +62,7 @@
     a user is allowed to access a resource.  mod_authz_dbm extends the
     authorization types with <code>dbm-group</code>.</p>
 
-    <p>Since v2.5.0, <a href="../expr.html">expressions</a> are supported
+    <p>Since v2.4.8, <a href="../expr.html">expressions</a> are supported
     within the DBM require directives.</p>
 
 <h3><a name="reqgroup" id="reqgroup">Require dbm-group</a></h3>
index e5c6a360be2dcafe216cb920edb8a001a356576d..62181aba89277de1ab89c66a545c3812487df515 100644 (file)
@@ -28,6 +28,8 @@
 <a href="../fr/mod/mod_authz_dbm.html" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ko/mod/mod_authz_dbm.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
 </div>
+<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
+            anglaise pour les changements récents.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Autorisation basée sur les groupes à l'aide de fichiers
 DBM</td></tr>
 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
index 07c70b09e669bbc78d770e61ef1d046c7555cd37..2d46650f0e1720add98de82838ea47d6fe11c92e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1555541 -->
+<!-- English Revision: 1555541:1587031 (outdated) -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
index 46642da37516cd3c564cf6257b5216e8d8d95e1d..3debe195930ef0487c8a196214eb6644aec6e085 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="EUC-KR" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 111480:1555541 (outdated) -->
+<!-- English Revision: 111480:1587031 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index c1c330875b6cf13bfb3d8c0f9c697e7dae662b37..17b39854176b23bf39876f47e4fe47869fe8ed5c 100644 (file)
@@ -8,7 +8,7 @@
 
   <variants>
     <variant>en</variant>
-    <variant>fr</variant>
+    <variant outdated="yes">fr</variant>
     <variant outdated="yes">ko</variant>
   </variants>
 </metafile>
index ae495f7bdc31ae64280cc78725a8cf6726a39bd6..db9b01df5c6435ac1b79ed0b4a2b86d5c4de2585 100644 (file)
@@ -62,7 +62,7 @@
     authorization types with <code>group</code> and <code>group-file</code>.
     </p>
 
-    <p>Since v2.5.0, <a href="../expr.html">expressions</a> are supported
+    <p>Since v2.4.8, <a href="../expr.html">expressions</a> are supported
     within the groupfile require directives.</p>
 
 <h3><a name="reqgroup" id="reqgroup">Require group</a></h3>
index 7d5925983dbb8ca7020dd9980dd07d6ea48e37da..ce402d67e37ef4f22116f874807627aa61942104 100644 (file)
@@ -29,6 +29,8 @@
 <a href="../ja/mod/mod_authz_groupfile.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_authz_groupfile.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
 </div>
+<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
+            anglaise pour les changements récents.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Autorisation basée sur les groupes à l'aide de fichiers
 textes</td></tr>
 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Base</td></tr>
index a0ac51d178490e34f4f5540faed90a49d8f1d189..7dc4bffdc01ada02adf23e577ddd7a4cba18f48c 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision : 1555543 -->
+<!-- English Revision: 1555543:1587031 (outdated) -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
index a7d725591e7250df4e63952dc44e3bc28163f808..563b7d19ed1c3870c3084aa4315a30a61c474873 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 574882:1555543 (outdated) -->
+<!-- English Revision: 574882:1587031 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index e86d9490c0e1230726ed164b11ed56ff4fa61672..9df5c9d87d2bfcf193a24ca7426fae2fecf6763e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="EUC-KR" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 151408:1555543 (outdated) -->
+<!-- English Revision: 151408:1587031 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index 89964f81c048e8c75352c49704029a3c89aa1de9..b0b9f93f29e080069b39b75bfebb8b51fbd0e066 100644 (file)
@@ -8,7 +8,7 @@
 
   <variants>
     <variant>en</variant>
-    <variant>fr</variant>
+    <variant outdated="yes">fr</variant>
     <variant outdated="yes">ja</variant>
     <variant outdated="yes">ko</variant>
   </variants>
index 74048f28816ec991964afa2e894d69574ae172e5..4a4559374b2f282b0240e5c79fdc9ed71497bed0 100644 (file)
@@ -79,7 +79,7 @@ address)</td></tr>
     access an area of the server. Access can be controlled by
     hostname, IP Address, or IP Address range.</p>
 
-    <p>Since v2.5.0, <a href="../expr.html">expressions</a> are supported
+    <p>Since v2.4.8, <a href="../expr.html">expressions</a> are supported
     within the host require directives.</p>
 
 <h3><a name="reqip" id="reqip">Require ip</a></h3>
@@ -162,6 +162,7 @@ Require host .net example.edu</pre>
 
 
 <h3><a name="reqlocal" id="reqlocal">Require local</a></h3>
+
     <p>The <code>local</code> provider allows access to the server if any
     of the following conditions is true:</p>
 
@@ -179,6 +180,7 @@ Require host .net example.edu</pre>
 
 
 
+
 <h3><a name="proxy" id="proxy">Security Note</a></h3>
 
     <p>If you are proxying content to your server, you need to be aware
index 2e209342ee0ddb4d35a0cf765877ecf271b5b662..ff8a9e485593cfb94444c4ea316f916f7e21f759 100644 (file)
@@ -27,6 +27,8 @@
 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_authz_host.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
 <a href="../fr/mod/mod_authz_host.html" title="Français">&nbsp;fr&nbsp;</a></p>
 </div>
+<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
+            anglaise pour les changements récents.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Autorisations de groupe basées sur l'hôte (nom ou adresse
 IP)</td></tr>
 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Base</td></tr>
index 2ea3f655885a33a942b17d49f5ea971f6a775748..e77ae868f3bbd727fb86701a81f45652c35a448e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision : 1555545 -->
+<!-- English Revision: 1555545:1587031 (outdated) -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
index 2df68a979b0d1d79d1cda3a6eaee040a4f4fb627..c67d019aa9fe49acde923b7af494e25a615d3173 100644 (file)
@@ -8,6 +8,6 @@
 
   <variants>
     <variant>en</variant>
-    <variant>fr</variant>
+    <variant outdated="yes">fr</variant>
   </variants>
 </metafile>
index d53afe878aa36d97fc91f429b346f1661d19d611..dc2056f7943db828b1e05e05b64069ee7692fcb7 100644 (file)
@@ -63,7 +63,7 @@
     authorization types with <code>user</code> and <code>valid-user</code>.
     </p>
 
-    <p>Since v2.5.0, <a href="../expr.html">expressions</a> are supported
+    <p>Since v2.4.8, <a href="../expr.html">expressions</a> are supported
     within the user require directives.</p>
 
 <h3><a name="requser" id="requser">Require user</a></h3>
index 4afd8ee73c6ec4d35c5f914fce0f514369ab81a2..da7a81568e38986abcd382789f56738c012b61bb 100644 (file)
@@ -29,6 +29,8 @@
 <a href="../ja/mod/mod_authz_user.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_authz_user.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
 </div>
+<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
+            anglaise pour les changements récents.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Autorisation basée sur l'utilisateur</td></tr>
 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Base</td></tr>
 <tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>authz_user_module</td></tr>
index 56e20baf0118b75f4cb17335154c89cf128ac140..b66ed557d35cbd900fc1d26f9aea816e170153b3 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1555548 -->
+<!-- English Revision: 1555548:1587031 (outdated) -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
index 0aa2348285cc74e017bab2098f02c4c547b4b3fc..467ec87a2bdd9ec013dfff3a91336db3edddda58 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 635137:1555548 (outdated) -->
+<!-- English Revision: 635137:1587031 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index 27016539127798310b2e553f62f6ca02f90bc726..f602e175e9f231323b100dec9254ce6e92e8c429 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="EUC-KR" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 151408:1555548 (outdated) -->
+<!-- English Revision: 151408:1587031 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index d99cf96cb47a1bd53c0b0df719375b4da33bb332..1798fdd837566197addbdaa9314a6dde3479739a 100644 (file)
@@ -8,7 +8,7 @@
 
   <variants>
     <variant>en</variant>
-    <variant>fr</variant>
+    <variant outdated="yes">fr</variant>
     <variant outdated="yes">ja</variant>
     <variant outdated="yes">ko</variant>
   </variants>
index aefd203022af2a1cc909ddc389e557330e8f5ea4..128b5f881cdf9501d01e18fd47c9cf02a357d945 100644 (file)
@@ -266,7 +266,7 @@ a directory</td></tr>
 <table class="directive">
 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define a default URL for requests that don't map to a file</td></tr>
 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>FallbackResource disabled | <var>local-url</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>None - httpd will return 404 (Not Found)</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>disabled - httpd will return 404 (Not Found)</code></td></tr>
 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
 <tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
index ca0cc54901002106dd93326dd1b17894313ee8d3..a3f17ac58eef2ea4e561f6a55db604ae4fb84438 100644 (file)
@@ -30,6 +30,8 @@
 <a href="../ko/mod/mod_dir.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
 <a href="../tr/mod/mod_dir.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
 </div>
+<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
+            anglaise pour les changements récents.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Permet la redirection des adresses se terminant par un
 répertoire sans slash de fin et la mise à disposition des fichiers index
 de répertoire</td></tr>
@@ -292,8 +294,8 @@ fin"</td></tr>
 <table class="directive">
 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une URL par défaut pour les requêtes qui ne ciblent
 aucun fichier</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>FallbackResource disabled <var>url-locale</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>Aucune - httpd renvoie un code d'erreur 404 (Not Found)</code></td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>FallbackResource disabled <var>url-locale</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>disabled - httpd renvoie un code d'erreur 404 (Not Found)</code></td></tr>
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>Indexes</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
index 14e254f65938c608747ba15eaeed2d5259569ef0..22d8999c62a0abdb9b47fcf489705f14cbd7cbc1 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1577905 -->
+<!-- English Revision: 1577905:1586470 (outdated) -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
index 7bb5f766f956afe0cd5e5900b0ad3226c73d156c..edb7e8543303d533b1f513dd0676d5c820e36058 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 420990:1577905 (outdated) -->
+<!-- English Revision: 420990:1586470 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index ee529a3a8fd090c77ed40cdd21b3a2006d378762..57df6ee4d69d95e244be6078538ebf927558641b 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="EUC-KR" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 151408:1577905 (outdated) -->
+<!-- English Revision: 151408:1586470 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index e8a3ce0549251bd4366fc92d6eb4794dc559d7a5..0fa52ec5c84b59e2da1b3614244a2f2ea058f911 100644 (file)
@@ -8,7 +8,7 @@
 
   <variants>
     <variant>en</variant>
-    <variant>fr</variant>
+    <variant outdated="yes">fr</variant>
     <variant outdated="yes">ja</variant>
     <variant outdated="yes">ko</variant>
     <variant outdated="yes">tr</variant>
index 537b8f9c2c2794390ead86e2270d96d74c696c53..909302e02a88ef9e84c7f7c33adf75c026a05bff 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.tr.xsl"?>
-<!-- English Revision: 1554501:1577905 (outdated) -->
+<!-- English Revision: 1554501:1586470 (outdated) -->
 <!-- =====================================================
  Translated by: Nilgün Belma Bugüner <nilgun belgeler.gen.tr>
    Reviewed by: Orhan Berent <berent belgeler.gen.tr>
index 117ce61ee8aa9e7fd303172e407dca94f1ee9640..8dd75f9e5eda9535db2e62c44a73871aab51a6e2 100644 (file)
@@ -435,7 +435,7 @@ particulier</td></tr>
     en spécifiant <code>change=no</code>.
     </p>
 
-    <p><var>drapeaux protocole</var> peut contenir un ou plusieurs
+    <p><var>drapeaux_protocole</var> peut contenir un ou plusieurs
     drapeaux parmi les suivants :</p>
 
     <dl>
@@ -444,7 +444,7 @@ particulier</td></tr>
     taille</dd>
 
     <dt><code>change=1:1</code></dt>
-    <dd>&gt;Le filtre modifie le contenu, mais pas sa taille</dd>
+    <dd>Le filtre modifie le contenu, mais pas sa taille</dd>
 
     <dt><code>byteranges=no</code></dt>
     <dd>Le filtre ne peut pas traiter de réponses à des sous-requêtes et
index 8feb6873b9fc52e239a21d25cff2248392d7585c..a9274ab4ccef33faac081c44f45922b9bdd3ecb0 100644 (file)
@@ -214,7 +214,8 @@ Header merge Cache-Control no-store env=NO_STORE</pre>
 <tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_headers</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Default condition was temporarily changed to "always" in 2.3.9 and 2.3.10.  SetIfEmpty available since 2.4.7.</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Default condition was temporarily changed to "always" in 2.3.9 and 2.3.10.<br />
+SetIfEmpty and note available in 2.4.7 and later.</td></tr>
 </table>
     <p>This directive can replace, merge or remove HTTP response
     headers. The header is modified just after the content handler
@@ -303,7 +304,8 @@ Header merge Cache-Control no-store env=NO_STORE</pre>
 
     <dt><code>setifempty</code></dt>
     <dd>The request header is set, but only if there is no previous header
-    with this name. Available in 2.4.7 and later.</dd>
+    with this name.<br />
+    Available in 2.4.7 and later.</dd>
 
     <dt><code>unset</code></dt>
     <dd>The response header of this name is removed, if it exists.
@@ -314,7 +316,8 @@ Header merge Cache-Control no-store env=NO_STORE</pre>
     <dd>The value of the named response <var>header</var> is copied into an
     internal note whose name is given by <var>value</var>.  This is useful
     if a header sent by a CGI or proxied resource is configured to be unset
-    but should also be logged.</dd>
+    but should also be logged.<br />
+    Available in 2.4.7 and later.</dd>
 
     </dl>
 
@@ -351,15 +354,18 @@ Header merge Cache-Control no-store env=NO_STORE</pre>
         designed to expose the values obtained by <code>getloadavg()</code>
         and this represents the current load average, the 5 minute average, and
         the 15 minute average. The value is preceded by <code>l=</code> with each
-        average separated by <code>/</code>.
+        average separated by <code>/</code>.<br />
+        Available in 2.4.4 and later.
         </td></tr>
 <tr><td><code>%i</code></td>
         <td>The current idle percentage of httpd (0 to 100) based on available
-        processes and threads. The value is preceded by <code>i=</code>.
+        processes and threads. The value is preceded by <code>i=</code>.<br />
+        Available in 2.4.4 and later.
         </td></tr>
 <tr class="odd"><td><code>%b</code></td>
         <td>The current busy percentage of httpd (0 to 100) based on available
-        processes and threads. The value is preceded by <code>b=</code>.
+        processes and threads. The value is preceded by <code>b=</code>.<br />
+        Available in 2.4.4 and later.
         </td></tr>
 <tr><td><code>%{VARNAME}e</code></td>
         <td>The contents of the <a href="../env.html">environment
@@ -470,7 +476,8 @@ Header merge Cache-Control no-store env=NO_STORE</pre>
 
     <dt><code>setifempty</code></dt>
     <dd>The request header is set, but only if there is no previous header
-    with this name. Available in 2.4.7 and later.</dd>
+    with this name.<br />
+    Available in 2.4.7 and later.</dd>
 
     <dt><code>unset</code></dt>
     <dd>The request header of this name is removed, if it exists. If
index 5aac11ac8f8d239b8e79b13a9748ba4124b30220..05511fcc7908abdcce4d286c1fef63bcceb8d849 100644 (file)
@@ -29,6 +29,8 @@
 <a href="../ja/mod/mod_headers.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_headers.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
 </div>
+<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
+            anglaise pour les changements récents.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Personnalisation des en-têtes de requêtes et de réponses
 HTTP</td></tr>
 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
@@ -211,6 +213,12 @@ Header merge Cache-Control no-store env=NO_STORE</pre>
         <pre class="prettyprint lang-config">Header set Set-Cookie testcookie "expr=-z %{req:Cookie}"</pre>
 
       </li>
+      <li>
+        Ajoute un en-tête de mise en cache pour les réponses avec un
+       code d'état HTTP de 200
+        <pre class="prettyprint lang-config">Header append Cache-Control s-maxage=600 "expr=%{REQUEST_STATUS} == 200"</pre>
+
+      </li>
     </ol>
 </div>
 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
@@ -237,24 +245,28 @@ disponible depuis la version 2.4.7 du serveur HTTP Apache.</td></tr>
 
     <p>L'argument optionnel <var>condition</var> permet de déterminer
     sur quelle table interne d'en-têtes de réponses cette directive va
-    opérer. D'autres composants du serveur peuvent avoir stocké leurs
-    en-têtes de réponses dans la table correspondant à
-    <code>onsuccess</code> ou dans celle correspondant à
-    <code>always</code>. Dans ce contexte, "Always" fait référence au
-    choix d'envoyer les en-têtes que vous ajoutez aux réponses, qu'elle
-    soient avec succès ou échouées ; par contre, si votre action est une
-    fonction d'un en-tête existant, vous devrez lire la documentation de
-    manière plus approfondie car dans ce cas, les choses se compliquent.</p>
-
-    <p>Vous pouvez avoir à changer la valeur par défaut
-    <code>onsuccess</code> en <code>always</code> dans des circonstances
-    similaires à celles exposées plus loin. Notez aussi que la répétition
+    opérer. En dépit du nom, la valeur par défaut de
+    <code>onsuccess</code> ne limite <em>pas</em> une <var>action</var>
+    aux réponses avec un code d'état de 2xx. Les en-têtes définis sous
+    cette condition sont encore utilisés quand par exemple une requête
+    est mandatée ou générée par un programme CGI avec <em>succès</em>,
+    et ceci même dans le cas où ils ont généré un code d'échec.</p>
+
+    <p>Lorsque votre action est une fonction agissant sur un en-tête
+    existant, vous pourrez être amené à spécifier une condition
+    <code>always</code>, en fonction de la table interne dans laquelle
+    l'en-tête original a été défini. La table qui correspond à
+    <code>always</code> est utilisée pour les réponses d'erreur générées
+    localement ainsi que pour les réponses qui ont abouti.
+    Notez aussi que la répétition
     de cette directive avec les deux conditions peut être pertinente
     dans certains scénarios, car <code>always</code> n'englobe pas
     <code>onsuccess</code> en ce qui concerne les en-têtes existants :</p>
 
     <ul>
-       <li>Vous ajoutez un en-tête à une réponse échouée (non-2xx),
+       <li>Vous ajoutez un en-tête à une réponse
+       générée localement et échouée
+       (non-2xx),
        une redirection par exemple, et dans ce cas, seule la table
        correspondant à <code>always</code> est utilisée dans la réponse
        définitive.</li>
@@ -267,6 +279,12 @@ disponible depuis la version 2.4.7 du serveur HTTP Apache.</td></tr>
        condition par défaut <code>onsuccess</code>.</li>
     </ul>
 
+    <p>Outre le paramètre <var>condition</var> décrit ci-dessus, vous
+    pouvez limiter une action en fonction de codes d'état HTTP, par
+    exemple pour les requêtes mandatées ou générées par un programme
+    CGI. Voir l'exemple qui utilise %{REQUEST_STATUS} dans la section
+    ci-dessus.</p>
+
     <p>L'action que cette directive provoque est déterminée par le
     premier argument (ou par le second argument si une
     <var>condition</var> est spécifiée). Il peut prendre
@@ -377,17 +395,20 @@ disponible depuis la version 2.4.7 du serveur HTTP Apache.</td></tr>
        courante, ainsi que la charge moyenne pendant les cinq et les
        quinze dernières minutes. Chaque valeur est précédée de
        <code>l=</code> et séparée des autres par un slash
-       <code>/</code>.
+       <code>/</code>.<br />
+       Disponible depuis la version 2.4.4 du serveur HTTP Apache.
         </td></tr>
 <tr><td><code>%i</code></td>
         <td>Le pourcentage de disponibilité de httpd (0 à 100) basé sur
        le nombre de threads et de processus disponibles. La valeur est
-       précédée de <code>i=</code>.
+       précédée de <code>i=</code>.<br />
+       Disponible depuis la version 2.4.4 du serveur HTTP Apache.
         </td></tr>
 <tr class="odd"><td><code>%b</code></td>
         <td>Le pourcentage d'utilisation de httpd (0 à 100) basé sur
        le nombre de threads et de processus disponibles. La valeur est
-       précédée de <code>b=</code>.
+       précédée de <code>b=</code>.<br />
+       Disponible depuis la version 2.4.4 du serveur HTTP Apache.
         </td></tr>
 <tr><td><code>%{NOM_VARIABLE}e</code></td>
         <td>Le contenu de la <a href="../env.html">variable
@@ -435,8 +456,9 @@ disponible depuis la version 2.4.7 du serveur HTTP Apache.</td></tr>
     directives <code class="directive">Header</code> sont traitées juste avant
     l'envoi de la réponse sur le réseau. Cela signifie qu'il est
     possible de définir et/ou modifier la plupart des en-têtes, à
-    l'exception de ceux qui sont ajoutés par le filtre HTTP
-    d'en-tête, comme Content-Type.</p>
+    l'exception de certains en-têtes qui sont ajoutés par le filtre
+    d'en-tête HTTP. Avant la version 2.2.12, il n'était pas
+    possible de modifier l'en-tête Content-Type avec cette directive.</p>
 
 </div>
 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
index d8cc35046a4e704e949194e5a843e92008cd5e2d..7ed1791bd2e89665985968964b79c91f2dc44b74 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision : 1586470 -->
+<!-- English Revision: 1586470:1587098 (outdated) -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
index ce24d804c0d3b81ddeae49ed73ca5ef316002d37..42c30ac6b59b2c07c4b38910b437b0f48400deab 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 151408:1584082 (outdated) -->
+<!-- English Revision: 151408:1587098 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index fad4547432043e8f361245464687c6def34fa42c..ae7eeb45e29b0fd832356909c2c16449765dceee 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="EUC-KR" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 151408:1584082 (outdated) -->
+<!-- English Revision: 151408:1587098 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index 81a0164dca03c541dd1f489cbfc77d02adf7e314..b4c66b59bc0e047559b4ba929dfac8cd2600e63e 100644 (file)
 <a href="../fr/mod/mod_isapi.html" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ko/mod/mod_isapi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
 </div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Extensions ISAPI au coeur d'Apache pour Windows</td></tr>
+<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Extensions ISAPI dans Apache pour Windows</td></tr>
 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Base</td></tr>
 <tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>isapi_module</td></tr>
 <tr><th><a href="module-dict.html#SourceFile">Fichier Source:</a></th><td>mod_isapi.c</td></tr>
 <tr><th><a href="module-dict.html#Compatibility">Compatibilité:</a></th><td>Win32 only</td></tr></table>
 <h3>Sommaire</h3>
 
-    <p>Ce module implémente l'API des extensions <strong>Internet Server</strong>
-    (l'application IIS de Microsoft). Il
-    permet à Apache pour Windows de servir les extensions <strong>Internet Server</strong>
-    (par exemple les modules .dll ISAPI), compte tenu des
+    <p>Ce module implémente l'API des extensions du Serveur Internet. Il
+    permet à Apache pour Windows de servir les extensions du Serveur
+    Internet (par exemple les modules .dll ISAPI), compte tenu des
     restrictions spécifiées.</p>
 
     <p>Les modules d'extension ISAPI (fichiers .dll) sont des modules
@@ -82,8 +81,8 @@
     gestionnaire était <code>isapi-isa</code> au lieu de
     <code>isapi-handler</code>. Depuis les versions de développement 2.3
     du serveur Apache, <code>isapi-isa</code> n'est plus valide, et vous
-    devrez modifier votre configuration pour utiliser
-    <code>isapi-handler</code> à sa place.</div>
+    devrez éventuellement modifier votre configuration pour utiliser
+    <code>isapi-handler</code> à la place.</div>
 
     <p>Le serveur Apache ne propose aucun moyen de conserver en mémoire
     un module chargé. Vous pouvez cependant précharger et garder un
@@ -93,7 +92,7 @@
 
 
     <p>Que vous ayez ou non préchargé une extension ISAPI, ces dernières
-    sont toutes soumises aux mêmes restrictions et possèdent les mêmes
+    sont toutes soumises au mêmes restrictions et possèdent les mêmes
     permissions que les scripts CGI. En d'autres termes, <code class="directive"><a href="../mod/core.html#options">Options</a></code> <code>ExecCGI</code> doit être
     défini pour le répertoire qui contient le fichier .dll ISAPI.</p>
 
     <p>Si aucune option de configuration particulière n'est spécifiée,
     certains serveurs, comme Microsoft IIS, chargent l'extension ISAPI
     dans le serveur et la conservent en mémoire jusqu'à ce que
-    l'utilisation de cette dernière devienne trop élevée. Apache, en
-    revanche, charge et décharge réellement l'extension ISAPI chaque fois
+    l'utilisation de cette dernière devienne trop élevée. Apache, par
+    contre, charge et décharge réellement l'extension ISAPI chaque fois
     qu'elle est invoquée, si la directive <code class="directive"><a href="#isapicachefile">ISAPICacheFile</a></code> n'a pas été spécifiée.
     Ce n'est pas très performant, mais le modèle de mémoire d'Apache
     fait que cette méthode est la plus efficace. De nombreux modules
     <code>GetServerVariable</code>, ainsi que les valeurs
     <code>ALL_HTTP</code> et <code>ALL_RAW</code>.</p>
 
-    <p>Depuis Apache httpd 2.0+, <code class="module"><a href="../mod/mod_isapi.html">mod_isapi</a></code> propose des
+    <p>Depuis httpd 2.0, <code class="module"><a href="../mod/mod_isapi.html">mod_isapi</a></code> propose des
     fonctionnalités supplémentaires introduites dans les versions
     actualisées de la spécification ISAPI, ainsi qu'une émulation
     limitée des entrées/sorties asynchrones et la sémantique
-    <code>TransmitFile</code>. Apache httpd supporte également le préchargement
+    <code>TransmitFile</code>. Apache httpd supporte aussi le préchargement
     des .dlls ISAPI à des fins de performances.</p>
 </div>
 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
@@ -293,8 +292,8 @@ d
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
 </table>
-    <p>Cette directive permet de spécifier une liste de noms de fichiers, séparés par des
-    espaces, devant être chargés au démarrage
+    <p>Cette directive permet de spécifier une liste, séparés par des
+    espaces, de noms de fichiers devant être chargés au démarrage
     du serveur Apache, et rester en mémoire jusqu'à l'arrêt du serveur.
     Cette directive peut être répétée pour chaque fichier .dll ISAPI
     souhaité. Le chemin complet du fichier doit être spécifié. Si le
@@ -305,7 +304,7 @@ d
 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 <div class="directive-section"><h2><a name="ISAPIFakeAsync" id="ISAPIFakeAsync">ISAPIFakeAsync</a> <a name="isapifakeasync" id="isapifakeasync">Directive</a></h2>
 <table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Émulation du support des entrées/sorties asynchrones pour
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Emulation du support des entrées/sorties asynchrones pour
 les appels ISAPI</td></tr>
 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ISAPIFakeAsync on|off</code></td></tr>
 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ISAPIFakeAsync off</code></td></tr>
index 913ae2ac735f653056674bf90efa933273679160..b25e2edfdfc7a63e2249dfe7d862e6df6056fe35 100644 (file)
@@ -8,7 +8,7 @@
 
   <variants>
     <variant>en</variant>
-    <variant outdated="yes">fr</variant>
+    <variant>fr</variant>
     <variant outdated="yes">ko</variant>
   </variants>
 </metafile>
index b8f3d102264e4f3cc4f08be835143a54142f2bd4..2af457b7ff442c6e38e92ca76324450fbfd0f841 100644 (file)
@@ -582,7 +582,7 @@ valid</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
 </table>
-    <p>This directive, if enabled by the <code>LDAPReferrals</code> directive,
+    <p>This directive, if enabled by the <code class="directive">LDAPReferrals</code> directive,
     limits the number of referral hops that are followed before terminating an
     LDAP query.</p>
 
@@ -601,6 +601,7 @@ valid</td></tr>
 <tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>The <var>default</var> parameter is available in Apache 2.4.7 and later</td></tr>
 </table>
     <p>Some LDAP servers divide their directory among multiple domains and use referrals
     to direct a client when a domain boundary is crossed. This is similar to a HTTP redirect.
@@ -608,8 +609,7 @@ valid</td></tr>
     explicitly configures the referral chasing in the underlying SDK.</p>
 
 
-    <p><code class="directive">LDAPReferrals</code> takes the takes the following values:
-    </p>
+    <p><code class="directive">LDAPReferrals</code> takes the following values:</p>
     <dl>
      <dt>"on"</dt>
      <dd> <p> When set to "on", the underlying SDK's referral chasing state
@@ -626,10 +626,10 @@ valid</td></tr>
               registered.</p></dd>
     </dl>
 
-    <p> The directive <code>LDAPReferralHopLimit</code> works in conjunction with
+    <p>The directive <code class="directive">LDAPReferralHopLimit</code> works in conjunction with
     this directive to limit the number of referral hops to follow before terminating the LDAP query.
     When referral processing is enabled by a value of "On", client credentials will be provided,
-    via a rebind callback, for any LDAP server requiring them. </p>
+    via a rebind callback, for any LDAP server requiring them.</p>
 
 </div>
 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
index 2b9249827fc28ad89ddc542b0169b02630cd8a47..d91a4575790c88fe366b216f1a1229a3b435b0e0 100644 (file)
@@ -307,7 +307,7 @@ d'Apache</a></li>
       fallait être très prudent lors de l'exploitation des journaux
       bruts.</p>
 
-      <p>A la différence de la version 1.3, dans httpd 2.0, les chaînes
+      <p>A la différence de la version 1.3, depuis httpd 2.0, les chaînes
       de format <code>%b</code> et <code>%B</code> ne représentent pas
       le nombre d'octets envoyés au client, mais simplement la taille en
       octets de la réponse HTTP (les deux étant différents, par exemple,
index ef30b5777e35f8043cdc1f445175791124edf172..d46587ddd100eebf1b8cb47a18702ee1fea54c9d 100644 (file)
@@ -30,6 +30,7 @@
 <a href="../ko/mod/mod_log_config.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
 <a href="../tr/mod/mod_log_config.html" title="Türkçe">&nbsp;tr&nbsp;</a></p>
 </div>
+<div class="outofdate">Bu çeviri güncel olmayabilir. Son değişiklikler için İngilizce sürüm geçerlidir.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Açıklama:</a></th><td>Sunucuya yapılan isteklerin günlük kayıtlarının tutulması
 </td></tr>
 <tr><th><a href="module-dict.html#Status">Durum:</a></th><td>Temel</td></tr>
index 483caf85ed3d15b3f67bd734feb1b5a3086e1c7e..d3f68096ba3c77b6ba107f4856e955d93c450ce7 100644 (file)
@@ -8,7 +8,7 @@
 
   <variants>
     <variant>en</variant>
-    <variant outdated="yes">fr</variant>
+    <variant>fr</variant>
     <variant outdated="yes">ja</variant>
     <variant outdated="yes">ko</variant>
     <variant outdated="yes">tr</variant>
index 1774eaef2e8f6d05b1b1b7bce75c9bb71b6bf63b..ce708a1f0c628d9e76f229c2c73d57f7c0c8a627 100644 (file)
@@ -82,7 +82,8 @@
         <td>Bytes sent, including headers, cannot be zero.</td></tr>
 <tr><td><code>%S</code></td>
         <td>Bytes transferred (received and sent), including request and headers,
-        cannot be zero. This is the combination of %I and %O.</td></tr>
+        cannot be zero. This is the combination of %I and %O.<br />
+        Available in Apache 2.4.7 and later</td></tr>
 </table>
 
     <p>Usually, the functionality is used like this:</p>
index 1df6c0dc3ba3eae08cb1fcded3cca1679c290a9f..cc4b0dc7853a5acdea9393cfc7ed35b83f98eb97 100644 (file)
@@ -30,6 +30,8 @@
 <a href="../ko/mod/mod_logio.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
 <a href="../tr/mod/mod_logio.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
 </div>
+<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
+            anglaise pour les changements récents.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Journalisation des octets en entrée et en sortie pour
 chaque requête</td></tr>
 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
index 31304fe857b3420b4046d5942fc1d604037f3da2..f5e07cffa65f325b6852a1da6c6052be425c95ca 100644 (file)
@@ -30,6 +30,7 @@
 <a href="../ko/mod/mod_logio.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
 <a href="../tr/mod/mod_logio.html" title="Türkçe">&nbsp;tr&nbsp;</a></p>
 </div>
+<div class="outofdate">Bu çeviri güncel olmayabilir. Son değişiklikler için İngilizce sürüm geçerlidir.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Açıklama:</a></th><td>Her isteğin girdi ve çıktı uzunluklarının günlüklenmesi.
 </td></tr>
 <tr><th><a href="module-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
index f6d341702b63c7df6dae0be7d4a6bafc753bd50e..5a948848660de589a9b717aa3f005b91a790bbc2 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision : 1523269 -->
+<!-- English Revision: 1523269:1587098 (outdated) -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
index 88fcbb9c352dd1e2df62b5255874729eb3e7e900..b7d7e34abed2cfa9461be2d342f14ca663eeb327 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 420990:1523269 (outdated) -->
+<!-- English Revision: 420990:1587098 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index 1fa28a7ad6db6f9e160e7049157071dc91d405ba..92792ff9f9ac609ac073400516a523c913d8639c 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding='EUC-KR' ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 420990:1523269 (outdated) -->
+<!-- English Revision: 420990:1587098 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index ed5503c1329ee95edf7b7c666cdc24919097bc66..8ad0562e0ef41b4bb8a810c9d371fb57d52e1626 100644 (file)
@@ -8,9 +8,9 @@
 
   <variants>
     <variant>en</variant>
-    <variant>fr</variant>
+    <variant outdated="yes">fr</variant>
     <variant outdated="yes">ja</variant>
     <variant outdated="yes">ko</variant>
-    <variant>tr</variant>
+    <variant outdated="yes">tr</variant>
   </variants>
 </metafile>
index befdffffdf9a0209a340f6ac4f3dc91897dd635f..8d36c055d1b4e3e7691092f32cf28185b924c708 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.tr.xsl"?>
-<!-- English Revision: 1523269 -->
+<!-- English Revision: 1523269:1587098 (outdated) -->
 <!-- =====================================================
  Translated by: Nilgün Belma Bugüner <nilgun belgeler.gen.tr>
    Reviewed by: Orhan Berent <berent belgeler.gen.tr>
index 8fbe093f7f87cda444615b9ae4af2624c7e72654..1935ff9f181c060223cd5808210c04a7dfa96df8 100644 (file)
@@ -1603,7 +1603,7 @@ end</pre>
 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>2.5.0 and later</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>2.4.5 and later</td></tr>
 </table>
 <p>Provides a means of adding a Lua function as an input filter. 
 As with output filters, input filters work as coroutines, 
@@ -1688,7 +1688,7 @@ filters</a>" for more information.
 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>2.5.0 and later</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>2.4.5 and later</td></tr>
 </table>
 <p>Provides a means of adding a Lua function as an output filter. 
 As with input filters, output filters work as coroutines, 
index d7b7b3fb0479ff723973927e994bfedba5e42e94..da0697b0fdfcc2f15aebf9dcb4f74943c0c4823d 100644 (file)
@@ -27,6 +27,8 @@
 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_lua.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
 <a href="../fr/mod/mod_lua.html" title="Français">&nbsp;fr&nbsp;</a></p>
 </div>
+<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
+            anglaise pour les changements récents.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Fournit des points d'entrée Lua dans différentes parties du
 traitement des requêtes httpd</td></tr>
 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
index f07cd6bf9ff4c37a2e08079122c4943caa9be85a..6f98a84de0137a78271f6dca360ee7e6d36c7903 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision : 1576896 -->
+<!-- English Revision: 1576896:1587324 (outdated) -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
index b55c7710e95c9f695fe435d176007bdf28716825..8fc1a0efdf34e8b8870065a1ce5d7c523d3f652c 100644 (file)
@@ -8,6 +8,6 @@
 
   <variants>
     <variant>en</variant>
-    <variant>fr</variant>
+    <variant outdated="yes">fr</variant>
   </variants>
 </metafile>
index bdb02ec5062d791f013e1844455520a0d157da3f..1b7636601cc7330c7be764dfc8a60ab3c657b6c1 100644 (file)
@@ -482,8 +482,7 @@ ProxyPass /examples http://backend.example.com/examples timeout=10</pre>
 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerInherit is only available in Apache HTTP Server 2.5.0
-        and later.</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerInherit is only available in Apache HTTP Server 2.4.5 and later.</td></tr>
 </table>
         <p>This directive will cause the current server/vhost to "inherit" ProxyPass
             Balancers and Workers defined in the main server. This can cause issues and
@@ -530,8 +529,7 @@ ProxyPass /examples http://backend.example.com/examples timeout=10</pre>
 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerPersist is only available in Apache HTTP Server 2.4.4 and later.
-        and later.</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerPersist is only available in Apache HTTP Server 2.4.4 and later.</td></tr>
 </table>
         <p>This directive will cause the shared memory storage associated
         with the balancers and balancer members to be persisted across
@@ -883,7 +881,7 @@ proxied resources</td></tr>
     identical to the <code class="directive"><a href="#proxy">&lt;Proxy&gt;</a></code> directive, except it matches URLs
     using <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expressions</a>.</p>
 
-    <p>From 2.5.0 onwards, named groups and backreferences are captured and
+    <p>From 2.4.8 onwards, named groups and backreferences are captured and
     written to the environment with the corresponding name prefixed with
     "MATCH_" and in upper case. This allows elements of URLs to be referenced
     from within <a href="../expr.html">expressions</a> and modules like
@@ -949,7 +947,7 @@ through</td></tr>
 
     <div class="note"><strong>Note: </strong>This directive cannot be used within a 
     <code>&lt;Directory&gt;</code> context.</div>
-    
+
     <div class="warning">The <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive should
     usually be set <strong>off</strong> when using
     <code class="directive">ProxyPass</code>.</div>
@@ -1264,7 +1262,8 @@ ProxyPass /mirror/foo http://backend.example.com</pre>
         and it depends on the backend application server that support sessions.
         If the backend application server uses different name for cookies
         and url encoded id (like servlet containers) use | to to separate them.
-        The first part is for the cookie the second for the path.
+        The first part is for the cookie the second for the path.<br />
+        Available in Apache HTTP Server 2.4.4 and later.
     </td></tr>
     <tr><td>stickysessionsep</td>
         <td>"."</td>
@@ -1295,7 +1294,7 @@ ProxyPass /mirror/foo http://backend.example.com</pre>
         <td>Off</td>
         <td>If set, an IO read timeout after a request is sent to the backend will
         force the worker into error state. Worker recovery behaves the same as other
-        worker errors.
+        worker errors.<br />
         Available in Apache HTTP Server 2.4.5 and later.
     </td></tr>
     <tr><td>nonce</td>
@@ -1322,7 +1321,8 @@ ProxyPass /mirror/foo http://backend.example.com</pre>
         in error state. There might be cases where an already overloaded backend
         can get into deeper trouble if the recovery of all workers is enforced
         without considering the retry parameter of each worker. In this case
-        set to <code>Off</code>.
+        set to <code>Off</code>.<br />
+        Available in Apache HTTP Server 2.4.2 and later.
     </td></tr>
 
     </table>
@@ -1407,7 +1407,7 @@ ProxyPassReverse  /mirror/foo/ https://backend.example.com/</pre>
 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>ProxyPassInherit is only available in Apache HTTP Server 2.5.0 and later.
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>ProxyPassInherit is only available in Apache HTTP Server 2.4.5 and later.
         and later.</td></tr>
 </table>
         <p>This directive will cause the current server/vhost to "inherit"
index 09642669ea41ee3c43b87ca0f4ecccabfbf18198..6007fdaf65a0d5534c01f38ec98bbab2ec7fb7f0 100644 (file)
@@ -28,6 +28,8 @@
 <a href="../fr/mod/mod_proxy.html" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_proxy.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
 </div>
+<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
+            anglaise pour les changements récents.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Serveur mandataire/passerelle multi-protocole</td></tr>
 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>proxy_module</td></tr>
@@ -537,7 +539,7 @@ serveur HTTP Apache</td></tr>
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.5.0 du serveur
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.5 du serveur
     HTTP Apache.</td></tr>
 </table>
         <p>Cette directive permet d'attribuer au serveur virtuel courant
@@ -595,7 +597,7 @@ charge</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>BalancerPersist n'est disponible qu'à partir de la
-    version 2.5.0 du serveur HTTP Apache.</td></tr>
+    version 2.4.4 du serveur HTTP Apache.</td></tr>
 </table>
         <p>Cette directive permet de conserver le contenu de l'espace
        mémoire partagé associé aux répartiteurs de charge et à leurs
@@ -1428,7 +1430,8 @@ ProxyPass /mirror/foo http://backend.example.com</pre>
        d'application d'arrière-plan utilise des noms différents pour
        les cookies et les identifiants codés d'URL (comme les
        conteneurs de servlet), séparez-les par le caractère '|'. La
-       première partie contient le cookie et la seconde le chemin.
+       première partie contient le cookie et la seconde le chemin.<br />
+       Disponible depuis la version 2.4.4 du serveur HTTP Apache.
     </td></tr>
     <tr><td>stickysessionsep</td>
         <td>"."</td>
@@ -1469,7 +1472,7 @@ ProxyPass /mirror/foo http://backend.example.com</pre>
        dépassé en entrée/sortie après envoi d'une requête au serveur
        d'arrière-plan va mettre le processus en état d'erreur. La
        sortie de cet état d'erreur se passe de la même façon que pour
-       les autres erreurs.
+       les autres erreurs.<br />
        Disponible à partir de la version 2.4.5 du serveur HTTP Apache.
     </td></tr>
     <tr><td>nonce</td>
@@ -1500,7 +1503,8 @@ ProxyPass /mirror/foo http://backend.example.com</pre>
        surchargé entre dans une situation critique si la relance de
        tous les membres est forcée sans tenir compte du paramètre retry
        de chaque membre. Dans ce cas, définissez ce paramètre à
-       <code>Off</code>.
+       <code>Off</code>.<br />
+       Disponible depuis la version 2.4.2 du serveur HTTP Apache.
     </td></tr>
 
     </table>
@@ -1559,8 +1563,7 @@ ProxyPass / balancer://mycluster/ stickysession=JSESSIONID|jsessionid nofailover
     souple, reportez-vous à la documentaion de la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> et son drapeau
     <code>[P]</code>.</p>
 
-    <p>Le mot-clé optionnel <var>interpolate</var> (disponible depuis
-    httpd 2.2.9), en combinaison avec la directive
+    <p>Le mot-clé optionnel <var>interpolate</var>, en combinaison avec la directive
     <code class="directive">ProxyPassInterpolateEnv</code>, permet à ProxyPass
     d'interpoler les variables d'environnement à l'aide de la syntaxe
     <var>${VARNAME}</var>. Notez que de nombreuses variables
@@ -1775,8 +1778,8 @@ ProxyPassReverseCookiePath  /  /mirror/foo/</pre>
     <code class="directive"><a href="#proxypass">ProxyPass</a></code>
     correspondante.</p>
 
-    <p>Le mot-clé optionnel <var>interpolate</var> (disponible depuis
-    httpd 2.2.9), utilisé en combinaison avec la directive
+    <p>Le mot-clé optionnel <var>interpolate</var>, en
+    combinaison avec la directive
     <code class="directive">ProxyPassInterpolateEnv</code>, permet
     l'interpolation des variables d'environnement spécifiées en
     utilisant le format <var>${VARNAME}</var> Notez que l'interpolation
index 4108dd77b1450db3d20b09676f4ee5bbce2a4345..a4612de716c1852ffd6428695c5a79a34ad81b72 100644 (file)
 <tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
 <tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>BalancerInherit is only available in Apache HTTP Server 2.5.0
-        and later.</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>BalancerInherit is only available in Apache HTTP Server 2.4.5 and later.</td></tr>
 </table><p>このディレクティブの解説文書は
             まだ翻訳されていません。英語版をご覧ください。
             </p></div>
 <tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
 <tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>BalancerPersist is only available in Apache HTTP Server 2.4.4 and later.
-        and later.</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>BalancerPersist is only available in Apache HTTP Server 2.4.4 and later.</td></tr>
 </table><p>このディレクティブの解説文書は
             まだ翻訳されていません。英語版をご覧ください。
             </p></div>
 <tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr>
 <tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>ProxyPassInherit is only available in Apache HTTP Server 2.5.0 and later.
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>ProxyPassInherit is only available in Apache HTTP Server 2.4.5 and later.
         and later.</td></tr>
 </table><p>このディレクティブの解説文書は
             まだ翻訳されていません。英語版をご覧ください。
index 40d9c0fabd28c171f402fc622df600034200d8c3..6da4d554eb7fb6b1f5eac511286931a06d8abb34 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1586470 -->
+<!-- English Revision: 1586470:1587324 (outdated) -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
index b6c2249c7e174a5d257909dd908928ce0463f0e2..be1a4114181c2afd42ef77dec2e185a9b13ee1d4 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 344971:1584684 (outdated) -->
+<!-- English Revision: 344971:1587324 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index 2bfeb6b3f8bfe711c2f87e6822adc02fc04a1a2d..fd376dd1b8e2d18a6fb1b6ca21b906c89074313f 100644 (file)
@@ -269,6 +269,8 @@ Alias /myapp /opt/myapp-1.2.3
                  IS_SUBREQ<br />
                  HTTPS<br />
                  REQUEST_SCHEME<br />
+                 REMOTE_ADDR<br />
+                 CONN_REMOTE_ADDR<br />
               </td>
             </tr>
           </table>
@@ -873,7 +875,7 @@ later</td></tr>
       <dt><code>InheritBefore</code></dt>
       <dd>
       <p> Like <code>Inherit</code> above, but the rules from the parent scope
-      are applied <strong>before</strong> rules specified in the child scope.
+      are applied <strong>before</strong> rules specified in the child scope.<br />
       Available in Apache HTTP Server 2.3.10 and later.</p>
       </dd>
 
@@ -884,8 +886,8 @@ later</td></tr>
       the configuration of the current configuration. It is equivalent to
       specifying <code>RewriteOptions Inherit</code> in all child
       configurations. See the <code>Inherit</code> option for more details
-      on how the parent-child relationships are handled. Available in Apache
-      HTTP Server 2.4.8 and later.</p>
+      on how the parent-child relationships are handled.<br />
+      Available in Apache HTTP Server 2.4.8 and later.</p>
       </dd>
 
       <dt><code>InheritDownBefore</code></dt>
@@ -893,7 +895,8 @@ later</td></tr>
 
       <p>Like <code>InheritDown</code> above, but the rules from the current
       scope are applied <strong>before</strong> rules specified in any child's
-      scope. Available in Apache HTTP Server 2.4.8 and later.</p>
+      scope.<br />
+      Available in Apache HTTP Server 2.4.8 and later.</p>
       </dd>
 
       <dt><code>IgnoreInherit</code></dt>
@@ -901,8 +904,8 @@ later</td></tr>
 
       <p>This option forces the current and child configurations to ignore
       all rules that would be inherited from a parent specifying
-      <code>InheritDown</code> or <code>InheritDownBefore</code>. Available
-      in Apache HTTP Server 2.4.8 and later.</p>
+      <code>InheritDown</code> or <code>InheritDownBefore</code>.<br />
+      Available in Apache HTTP Server 2.4.8 and later.</p>
       </dd>
 
       <dt><code>AllowNoSlash</code></dt>
@@ -916,8 +919,8 @@ later</td></tr>
       is set to off, the <code>AllowNoSlash</code> option can be enabled to ensure
       that rewrite rules are no longer ignored. This option makes it possible to
       apply rewrite rules within .htaccess files that match the directory without
-      a trailing slash, if so desired. Available in Apache HTTP Server 2.4.0 and
-      later.</p>
+      a trailing slash, if so desired.<br />
+      Available in Apache HTTP Server 2.4.0 and later.</p>
       </dd>
 
       <dt><code>AllowAnyURI</code></dt>
@@ -926,7 +929,7 @@ later</td></tr>
       <p>When <code class="directive"><a href="#rewriterule">RewriteRule</a></code>
       is used in <code>VirtualHost</code> or server context with
       version 2.2.22 or later of httpd, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
-      will only process the rewrite rules if the request URI is a <a href="./directive-dict.html#Syntax">URL-path</a>.  This avoids
+      will only process the rewrite rules if the request URI is a <a href="directive-dict.html#Syntax">URL-path</a>.  This avoids
       some security issues where particular rules could allow
       "surprising" pattern expansions (see <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3368">CVE-2011-3368</a>
       and <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-4317">CVE-2011-4317</a>).
@@ -934,7 +937,8 @@ later</td></tr>
       <code>AllowAnyURI</code> option can be enabled, and
       <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> will apply the rule set to any
       request URI string, regardless of whether that string matches
-      the URL-path grammar required by the HTTP specification.</p>
+      the URL-path grammar required by the HTTP specification.<br />
+      Available in Apache HTTP Server 2.4.3 and later.</p>
 
       <div class="warning">
       <h3>Security Warning</h3> 
index 7153f24e5016d96286e08702a89e098bacff8aba..5a305802f141a66922c519121cf70de095a541af 100644 (file)
@@ -744,28 +744,18 @@ RewriteRule ...r
        l'en-tête ``<code>User-Agent:</code>'' de la requête, vous
        pouvez utiliser ce qui suit : </p>
 
-<pre class="prettyprint lang-config">RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla
-RewriteRule  ^/$                 /homepage.max.html  [L]
-
-RewriteCond  %{HTTP_USER_AGENT}  ^Lynx
-RewriteRule  ^/$                 /homepage.min.html  [L]
+<pre class="prettyprint lang-config">RewriteCond  %{HTTP_USER_AGENT}  (iPhone|Blackberry|Android)
+RewriteRule  ^/$                 /homepage.mobile.html  [L]
 
 RewriteRule  ^/$                 /homepage.std.html  [L]</pre>
 
 
         <p>Explications : si vous utilisez un navigateur
-       (Netscape Navigator, Mozilla etc) qui s'identifie comme
-       'Mozilla', vous accèderez à la page d'accueil max (qui
-       peut contenir des frames, ou d'autres ressources
-       particulières).
-       Si vous utilisez le navigateur Lynx (qui est un navigateur
-       en mode texte), vous accèderez à une page d'accueil min
-       (qui peut être une version conçue pour une navigation simple
-       basée sur le texte).
-       Si aucune de ces conditions n'est satisfaite (vous utilisez tout
-       autre navigateur, ou votre navigateur s'identifie de manière non
-       standard), vous accèderez à la page d'accueil std
-       (standard).</p>
+       qui s'identifie comme un navigateur de mobile (notez que cet
+       exemple est incomplet car il existe de nombreuses autres
+       plateformes mobiles), c'est la version mobile de la page
+       d'accueil qui sera servie. Dans le cas contraire, vous verrez
+       s'afficher la page d'accueil standard.</p>
 
 
 </div>
@@ -951,7 +941,8 @@ la version version 2.1</td></tr>
       <p>Même effet que l'option <code>Inherit</code> ci-dessus, mais
       les règles spécifiées dans le niveau parent s'appliquent
       <strong>avant</strong> les règles spécifiées dans le niveau
-      enfant. Disponible depuis la version 2.3.10 du serveur HTTP
+      enfant.<br />
+      Disponible depuis la version 2.3.10 du serveur HTTP
       Apache.</p>
       </dd>
 
@@ -963,7 +954,8 @@ la version version 2.1</td></tr>
       spécifie <code>RewriteOptions Inherit</code> dans toutes les
       configurations enfants. Voir l'option <code>Inherit</code> pour
       plus de détails à propos de la manière dont les relations
-      parent-enfants sont traitées. Cette option est disponible à partir
+      parent-enfants sont traitées.<br />
+      Cette option est disponible à partir
       de la version 2.4.8 du serveur HTTP Apache.</p>
       </dd>
 
@@ -973,7 +965,8 @@ la version version 2.1</td></tr>
       <p>L'effet de cette option est équivalent à celui de l'option
       <code>InheritDown</code> ci-dessus, mais les règles de la
       configuration parente s'appliquent <strong>avant</strong> toute
-      règle de la configuration enfant. Cette option est disponible à partir
+      règle de la configuration enfant.<br />
+      Cette option est disponible à partir
       de la version 2.4.8 du serveur HTTP Apache.</p>
       </dd>
 
@@ -983,7 +976,8 @@ la version version 2.1</td></tr>
       <p>Si cette option est activée, les configurations courante et
       enfants ignoreront toute règle héritée d'une configuration parente
       via les options <code>InheritDown</code> ou
-      <code>InheritDownBefore</code>. Cette option est disponible à partir
+      <code>InheritDownBefore</code>.<br />
+      Cette option est disponible à partir
       de la version 2.4.8 du serveur HTTP Apache.</p>
       </dd>
 
@@ -999,7 +993,8 @@ la version version 2.1</td></tr>
       s'assurer que les règles de réécriture ne soient plus ignorées.
       Si on le souhaite, cette option permet de faire s'appliquer des
       règles de réécriture qui correspondent à un répertoire sans slash
-      final au sein de fichiers .htaccess. Elle est disponible à
+      final au sein de fichiers .htaccess.<br />
+      Elle est disponible à
       partir de la version 2.4.0 du serveur HTTP Apache.</p>
       </dd>
 
@@ -1009,7 +1004,7 @@ la version version 2.1</td></tr>
       <p>A partir de la version 2.2.22 de httpd, lorsqu'une directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code> se situe dans un
       contexte de <code>serveur virtuel</code> ou de serveur principal,
       <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> ne traitera les règles de réécriture
-      que si l'URI de la requête respecte la syntaxe d'un <a href="./directive-dict.html#Syntax">chemin URL</a>. Ceci permet
+      que si l'URI de la requête respecte la syntaxe d'un <a href="directive-dict.html#Syntax">chemin URL</a>. Ceci permet
       d'éviter certains problèmes de sécurité où des règles
       particulières pourraient permettre  des développements de modèles
       inattendus (voir <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3368">CVE-2011-3368</a>
@@ -1018,7 +1013,8 @@ la version version 2.1</td></tr>
       utiliser l'option <code>AllowAnyURI</code>, afin de permettre à
       <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> d'appliquer le jeu de règles à toute
       chaîne de requête URI, sans vérifier si cette dernière respecte la
-      grammaire des chemins URL définie dans la spécification HTTP.</p>
+      grammaire des chemins URL définie dans la spécification HTTP.<br />
+      Disponible depuis la version 2.4.3 du serveur HTTP Apache.</p>
 
       <div class="warning">
       <h3>Avertissement à propos de la sécurité</h3> 
index 1682d0a83373c5d6801cd54d3843a6e3f79c4c3c..28d765abedc19301d570d8582460df4fd4ee9c6a 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision : 1586447 -->
+<!-- English Revision: 1586447:1587031 (outdated) -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
index decc0a7b1e85192770cea6f795335aaa7841b0f0..0be21e86f4d3e241aa6b35fcdd36de7efe6541b7 100644 (file)
@@ -8,6 +8,6 @@
 
   <variants>
     <variant>en</variant>
-    <variant>fr</variant>
+    <variant outdated="yes">fr</variant>
   </variants>
 </metafile>
index 19079e6911a2401545e4cb98243828f837ac1d90..a11857cfc1bf1e3c77c939f996e832e537511fa4 100644 (file)
@@ -190,8 +190,9 @@ SessionCryptoPassphrase secret</pre>
     secret to the end of the list, and once rolled out completely to all servers, remove
     the first key from the start of the list.</p>
 
-    <p>If the value begins with exec: the resulting command will be executed and the
-    first line returned to standard output by the program will be used as the key.</p>
+    <p>As of version 2.4.7 if the value begins with <var>exec:</var> the resulting command
+    will be executed and the first line returned to standard output by the program will be
+    used as the key.</p>
 <div class="example"><pre>#key used as-is
 SessionCryptoPassphrase secret
 
index 13a0ed59f721032ba02db3173096b9ed5ce36190..15bbdb62016cc482dc9d27449179580169e2eaae 100644 (file)
@@ -27,6 +27,8 @@
 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_session_crypto.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
 <a href="../fr/mod/mod_session_crypto.html" title="Français">&nbsp;fr&nbsp;</a></p>
 </div>
+<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
+            anglaise pour les changements récents.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Support du chiffrement des sessions</td></tr>
 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
 <tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>session_crypto_module</td></tr>
index 92cb9061d946055be0ceb21702874913caa85de8..3744b5e8add1ff83e35589274f9244faf093936e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision : 1562488 -->
+<!-- English Revision: 1562488:1587098 (outdated) -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
index 56dc35d438e5f377bba4ebde254f356014d71a3e..13199c7d6cdf1497faff231495682df84d3611ac 100644 (file)
@@ -8,6 +8,6 @@
 
   <variants>
     <variant>en</variant>
-    <variant>fr</variant>
+    <variant outdated="yes">fr</variant>
   </variants>
 </metafile>
index ea5edf1c125e5ad226bcf93f70d8b088ef86b137..4c9691ba9c29c1c55d0b4dab9b55536a206a5563 100644 (file)
@@ -1041,8 +1041,6 @@ du serveur par ordre de pr
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.1 d'Apache, à condition
-d'utiliser une version 0.9.7 ou supérieure d'OpenSSL</td></tr>
 </table>
 <p>Normalement, ce sont les préférences du client qui sont prises en
 compte lors du choix d'un algorithme de chiffrement au cours d'une
@@ -1103,8 +1101,6 @@ OCSP</td></tr>
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3 de httpd, à condition
-d'utiliser une version 0.9.7 ou supérieure d'OpenSSL</td></tr>
 </table>
 <p>Cette directive permet de définir le répondeur OCSP par défaut. Si la
 directive <code class="directive"><a href="#sslocspoverrideresponder">SSLOCSPOverrideResponder</a></code> n'est pas activée,
@@ -1122,8 +1118,6 @@ client</td></tr>
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3 de httpd, à condition
-d'utiliser une version 0.9.7 ou supérieure d'OpenSSL</td></tr>
 </table>
 <p>Cette directive permet d'activer la validation OCSP de la chaîne de
 certificats du client. Si elle est activée, les certificats de la chaîne
@@ -1151,8 +1145,6 @@ la validation OCSP</td></tr>
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3 de httpd, à condition
-d'utiliser une version 0.9.7 ou supérieure d'OpenSSL</td></tr>
 </table>
 <p>Force l'utilisation, au cours d'une validation OCSP de certificat, du
 répondeur OCSP par défaut spécifié dans la configuration, que le
@@ -1169,8 +1161,6 @@ non.</p>
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3 de httpd, sous réserve
-d'utiliser une version 0.9.7 ou supérieure d'OpenSSL</td></tr>
 </table>
 <p>Cette option permet de définir le délai d'attente pour les requêtes à
 destination des répondeurs OCSP, lorsque la directive <code class="directive"><a href="#sslocspenable">SSLOCSPEnable</a></code> est à on.</p>
@@ -1185,8 +1175,6 @@ destination des r
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3 de httpd, sous réserve
-d'utiliser une version 0.9.7 ou supérieure d'OpenSSL</td></tr>
 </table>
 <p>Cette option permet de définir l'âge maximum autorisé (la
 "fraicheur") des réponses OCSP. La valeur par défault (<code>-1</code>)
@@ -1205,8 +1193,6 @@ r
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3 de httpd, sous réserve
-d'utiliser une version 0.9.7 ou supérieure d'OpenSSL</td></tr>
 </table>
 <p>Cette option permet de définir la dérive temporelle maximale
 autorisée pour les réponses OCSP (lors de la vérification des champs
@@ -1441,12 +1427,17 @@ cette demande peut 
 <li><code>exec:/chemin/vers/programme</code>
     <p>
     Ici, un programme externe est appelé au démarrage du serveur pour
-    chaque fichier de clé privée chiffré. Il est appelé avec deux
-    arguments (le premier est de la forme
+    chaque fichier de clé privée chiffré. Jusqu'à
+    la version 2.4.7, il était appelé avec deux
+    arguments (le premier était de la forme
     ``<code>nom-serveur:port</code>'', le second
     est ``<code>RSA</code>'', ``<code>DSA</code>'' ou ``<code>ECC</code>''), qui
     indiquent pour quels serveur et algorithme il doit écrire le mot de
-    passe correspondant sur <code>stdout</code>. Le but recherché est
+    passe correspondant sur <code>stdout</code>. Depuis la version
+    2.4.9, il est appelé avec un seul argument, une chaîne de la forme
+    "<code>servername:portnumber:index</code>" (où <code>index</code>
+    est un numéro d'ordre commençant à zéro), qui spécifie le serveur,
+    le port TCP et un numéro de certificat. Le but recherché est
     l'exécution de vérifications de sécurité préalables permettant de
     s'assurer que le système n'est pas victime d'une attaque, et de ne
     fournir le mot de passe que si toutes les vérifications ont été
@@ -2468,8 +2459,7 @@ enregistr
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.3 du serveur HTTP
-Apache, si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
 </table>
 <p>Si <code class="directive"><a href="#sslusestapling">SSLUseStapling</a></code> est à "on",
 cette directive permet de configurer le cache destiné à stocker les
@@ -2490,8 +2480,7 @@ agrafage OCSP</td></tr>
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.3 du serveur HTTP
-Apache, si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
 </table>
 <p>Cette directive permet de définir la durée de vie des réponses
 <em>invalides</em> dans le cache pour agrafage OCSP configuré via la
@@ -2509,8 +2498,7 @@ d
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.3 du serveur HTTP
-Apache, si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
 </table>
 <p>Lorsque cette directive est activée, et si une requête vers un
 serveur OCSP à des fins d'inclusion dans une négociation TLS échoue,
@@ -2527,8 +2515,7 @@ AIA du certificat</td></tr>
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.3 du serveur HTTP
-Apache, si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
 </table>
 <p>Cette directive permet de remplacer l'URI du serveur OCSP extraite de
 l'extension authorityInfoAccess (AIA) du certificat. Elle peut s'avérer
@@ -2545,8 +2532,7 @@ OCSP</td></tr>
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.3 du serveur HTTP
-Apache, si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
 </table>
 <p>Cette directive permet de définir le temps d'attente maximum lorsque
 mod_ssl envoie une requête vers un serveur OCSP afin d'obtenir une
@@ -2565,8 +2551,7 @@ n
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.3 du serveur HTTP
-Apache, si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
 </table>
 <p>Cette directive permet de définir l'âge maximum autorisé
 ("fraîcheur") des réponses OCSP incluses dans la négociation TLS
@@ -2587,8 +2572,7 @@ n
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.3 du serveur HTTP
-Apache, si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
 </table>
 <p>Cette directive permet de spécifier l'intervalle de temps maximum que
 mod_ssl va calculer en faisant la différence entre les contenus des
@@ -2608,8 +2592,7 @@ OCSP</td></tr>
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.3 du serveur HTTP
-Apache, si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
 </table>
 <p>Lorsque cette directive est activée, mod_ssl va transmettre au client les
 réponses concernant les requêtes OCSP échouées (erreurs d'état, réponses
@@ -2627,8 +2610,7 @@ n
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.3 du serveur HTTP
-Apache, si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
 </table>
 <p>Cette directive permet de définir la durée de vie des réponses OCSP
 dans le cache configuré via la directive <code class="directive"><a href="#sslstaplingcache">SSLStaplingCache</a></code>. Elle ne s'applique qu'aux
@@ -2705,8 +2687,7 @@ La valeur de l'argument <em>nom-var</em> peut correspondre 
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.3 du serveur HTTP
-Apache, si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible si on utilise OpenSSL version 0.9.8h ou supérieure</td></tr>
 </table>
 <p>Cette directive permet d'activer l'"Agrafage OCSP" (OCSP stapling)
 selon la définition de l'extension TLS "Certificate Status Request"
index d57fe728e3785929db92b99b119ba375f7f7230c..eedfd3ec38fe990971d3fb640647e358c55f4fe6 100644 (file)
@@ -68,7 +68,7 @@ doivent s'ex
     <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">SuexecUserGroup nobody nogroup</pre>
 </div>
 
-    <p>Depuis la version 2.3.9, le démarrage va échouer si cette
+    <p>Le démarrage échouera si cette
     directive est spécifiée et si la fonctionnalité suEXEC est
     désactivée.</p>
 
index 93d0911a23a6c0b21a50755a416ad639ac75b7ec..5df4e71b2474eec8b146b880fc076ecca645dbc6 100644 (file)
@@ -30,6 +30,7 @@
 <a href="../ko/mod/mod_suexec.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
 <a href="../tr/mod/mod_suexec.html" title="Türkçe">&nbsp;tr&nbsp;</a></p>
 </div>
+<div class="outofdate">Bu çeviri güncel olmayabilir. Son değişiklikler için İngilizce sürüm geçerlidir.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Açıklama:</a></th><td>CGI betiklerinin belli bir kullanıcı ve grubun aidiyetinde
 çalışmasını mümkün kılar.</td></tr>
 <tr><th><a href="module-dict.html#Status">Durum:</a></th><td>Eklenti</td></tr>
index a36cfe3e4cabb5fa0cc2a279b98821364fbfa367..e906e43a734a647811b3894b93da8766aea851ed 100644 (file)
@@ -8,7 +8,7 @@
 
   <variants>
     <variant>en</variant>
-    <variant outdated="yes">fr</variant>
+    <variant>fr</variant>
     <variant outdated="yes">ja</variant>
     <variant outdated="yes">ko</variant>
     <variant outdated="yes">tr</variant>
index 22635fa886fd2f4891394df19d8625b529554996..e2e8e2d4b98612782e3009a3b056a57b0b9dac91 100644 (file)
@@ -128,7 +128,6 @@ appropri
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_unixd</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.9 d'Apache httpd</td></tr>
 </table>
     <p>Lorsque cette directive est définie à On, le démarrage échouera si
     le binaire suexec n'existe pas, ou possède un propriétaire ou mode
index c04b239fc0b7413f4279a9e5cc755f5e1d1241b1..c572e61cb9931e9b0977cb9b9bfff1c2f7056d95 100644 (file)
@@ -28,6 +28,7 @@
 <a href="../fr/mod/mod_unixd.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../tr/mod/mod_unixd.html" title="Türkçe">&nbsp;tr&nbsp;</a></p>
 </div>
+<div class="outofdate">Bu çeviri güncel olmayabilir. Son değişiklikler için İngilizce sürüm geçerlidir.</div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Açıklama:</a></th><td>Unix ailesi platformlar için temel (gerekli) güvenlik.</td></tr>
 <tr><th><a href="module-dict.html#Status">Durum:</a></th><td>Temel</td></tr>
 <tr><th><a href="module-dict.html#ModuleIdentifier">Modül Betimleyici:</a></th><td>unixd_module</td></tr>
index 4fa182e03436af9fd8430b33aa66d93821427446..a29d129e5ff80d1e38846d81477a039107dffbbe 100644 (file)
@@ -8,7 +8,7 @@
 
   <variants>
     <variant>en</variant>
-    <variant outdated="yes">fr</variant>
+    <variant>fr</variant>
     <variant outdated="yes">tr</variant>
   </variants>
 </metafile>
index 10e3423f42582f2325687751bb695761689b73b2..597327b3d637f2af61a35c1fb16f00a3c9d79190 100644 (file)
@@ -237,6 +237,12 @@ authentication</td></tr>
 ... &lt;/AuthnProviderAlias&gt;</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Enclose a group of directives that represent an
 extension of a base authentication provider and referenced by
 the specified alias</td></tr>
+<tr class="odd"><td><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider <em>provider-name</em>|<code>None</code>
+<em>option</em> ...</a></td><td></td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables a FastCGI application to handle the check_authn
+authentication hook.</td></tr>
+<tr><td><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider <em>type</em> <em>provider-name</em>
+<em>backend-address</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a FastCGI application as a provider for
+authentication and/or authorization</td></tr>
 <tr class="odd"><td><a href="mod_authn_core.html#authtype">AuthType None|Basic|Digest|Form</a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Type of user authentication</td></tr>
 <tr><td><a href="mod_authn_file.html#authuserfile">AuthUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets the name of a text file containing the list of users and
 passwords for authentication</td></tr>
index d1da1942f33bf20d5b2a22724e4978b68b92cc22..4fcdee19564f77c51b3da2eeaf85bd0c2941225b 100644 (file)
@@ -233,6 +233,12 @@ authentication</td></tr>
 ... &lt;/AuthnProviderAlias&gt;</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Enclose a group of directives that represent an
 extension of a base authentication provider and referenced by
 the specified alias</td></tr>
+<tr class="odd"><td><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider <em>provider-name</em>|<code>None</code>
+<em>option</em> ...</a></td><td></td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables a FastCGI application to handle the check_authn
+authentication hook.</td></tr>
+<tr><td><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider <em>type</em> <em>provider-name</em>
+<em>backend-address</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a FastCGI application as a provider for
+authentication and/or authorization</td></tr>
 <tr class="odd"><td><a href="mod_authn_core.html#authtype">AuthType None|Basic|Digest|Form</a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Type of user authentication</td></tr>
 <tr><td><a href="mod_authn_file.html#authuserfile">AuthUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets the name of a text file containing the list of users and
 passwords for authentication</td></tr>
index 37d4be59e7dc0d8813f45b93b7f057f0c6caaf7c..8687ed5628dd929806659db480c643b0c2750b22 100644 (file)
@@ -240,6 +240,12 @@ authentication</td></tr>
 ... &lt;/AuthnProviderAlias&gt;</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Enclose a group of directives that represent an
 extension of a base authentication provider and referenced by
 the specified alias</td></tr>
+<tr class="odd"><td><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider <em>provider-name</em>|<code>None</code>
+<em>option</em> ...</a></td><td></td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables a FastCGI application to handle the check_authn
+authentication hook.</td></tr>
+<tr><td><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider <em>type</em> <em>provider-name</em>
+<em>backend-address</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a FastCGI application as a provider for
+authentication and/or authorization</td></tr>
 <tr class="odd"><td><a href="mod_authn_core.html#authtype">AuthType None|Basic|Digest|Form</a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Type of user authentication</td></tr>
 <tr><td><a href="mod_authn_file.html#authuserfile">AuthUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets the name of a text file containing the list of users and
 passwords for authentication</td></tr>
index e710cfbd28092b7c0d03b7d89f48a7648ab7f8bf..a97835480e76042a2a9e3fea25693a587ec11241 100644 (file)
@@ -293,6 +293,12 @@ utiliser</td></tr>
 ... &lt;/AuthnProviderAlias&gt;</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Regroupe un ensemble de directives qui constituent une
 extension d'un fournisseur d'authentification de base et lui attribue
 l'alias spécifié</td></tr>
+<tr class="odd"><td><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider <em>provider-name</em>|<code>None</code>
+<em>option</em> ...</a></td><td></td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables a FastCGI application to handle the check_authn
+authentication hook.</td></tr>
+<tr><td><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider <em>type</em> <em>provider-name</em>
+<em>backend-address</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a FastCGI application as a provider for
+authentication and/or authorization</td></tr>
 <tr class="odd"><td><a href="mod_authn_core.html#authtype">AuthType None|Basic|Digest|Form</a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Type d'authentification utilisateur</td></tr>
 <tr><td><a href="mod_authn_file.html#authuserfile">AuthUserFile <var>chemin-fichier</var></a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Définit le nom d'un fichier texte pour l'authentification
 contenant la liste des utilisateurs et de leurs mots de
@@ -534,7 +540,7 @@ requ
 <tr><td><a href="mod_ext_filter.html#extfilterdefine">ExtFilterDefine <var>nom filtre</var> <var>paramètres</var></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Définit un filtre externe</td></tr>
 <tr class="odd"><td><a href="mod_ext_filter.html#extfilteroptions">ExtFilterOptions <var>option</var> [<var>option</var>] ...</a></td><td> NoLogStderr </td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure les options de
 <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code></td></tr>
-<tr><td><a href="mod_dir.html#fallbackresource" id="F" name="F">FallbackResource disabled <var>url-locale</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Définit une URL par défaut pour les requêtes qui ne ciblent
+<tr><td><a href="mod_dir.html#fallbackresource" id="F" name="F">FallbackResource disabled <var>url-locale</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Définit une URL par défaut pour les requêtes qui ne ciblent
 aucun fichier</td></tr>
 <tr class="odd"><td><a href="core.html#fileetag">FileETag <var>composant</var> ...</a></td><td> MTime Size </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Caractéristiques de fichier utilisées lors de la génération
 de l'en-tête de réponse HTTP ETag pour les fichiers statiques</td></tr>
@@ -630,7 +636,7 @@ dans la partie arguments de la requ
 [<var>chemin-fichier</var>]
 ...</a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Fichiers .dll ISAPI devant être chargés au
 démarrage</td></tr>
-<tr><td><a href="mod_isapi.html#isapifakeasync">ISAPIFakeAsync on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Émulation du support des entrées/sorties asynchrones pour
+<tr><td><a href="mod_isapi.html#isapifakeasync">ISAPIFakeAsync on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Emulation du support des entrées/sorties asynchrones pour
 les appels ISAPI</td></tr>
 <tr class="odd"><td><a href="mod_isapi.html#isapilognotsupported">ISAPILogNotSupported on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Journalisation des demandes de fonctionnalités non
 supportées de la part des extensions ISAPI</td></tr>
index 34c49efe12064389d24ca32ae1f82cc9d2632362..b03a17ca14f100c8eef95b664e652120ef9fa5fc 100644 (file)
@@ -232,6 +232,12 @@ authentication</td></tr>
 ... &lt;/AuthnProviderAlias&gt;</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Enclose a group of directives that represent an
 extension of a base authentication provider and referenced by
 the specified alias</td></tr>
+<tr class="odd"><td><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider <em>provider-name</em>|<code>None</code>
+<em>option</em> ...</a></td><td></td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables a FastCGI application to handle the check_authn
+authentication hook.</td></tr>
+<tr><td><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider <em>type</em> <em>provider-name</em>
+<em>backend-address</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a FastCGI application as a provider for
+authentication and/or authorization</td></tr>
 <tr class="odd"><td><a href="mod_authn_core.html#authtype">AuthType None|Basic|Digest|Form</a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Type of user authentication</td></tr>
 <tr><td><a href="mod_authn_file.html#authuserfile">AuthUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">認証に使用するユーザとパスワードの一覧が格納されている、
 テキストファイルの名前を設定する</td></tr>
index 7f2ec5e6e8f90495bbc34d9dc1d7c44719f15cb0..60c3ede2055c1c2d82aaf48764d8890f0f41e0cd 100644 (file)
@@ -226,6 +226,12 @@ authentication</td></tr>
 ... &lt;/AuthnProviderAlias&gt;</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Enclose a group of directives that represent an
 extension of a base authentication provider and referenced by
 the specified alias</td></tr>
+<tr class="odd"><td><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider <em>provider-name</em>|<code>None</code>
+<em>option</em> ...</a></td><td></td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables a FastCGI application to handle the check_authn
+authentication hook.</td></tr>
+<tr><td><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider <em>type</em> <em>provider-name</em>
+<em>backend-address</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a FastCGI application as a provider for
+authentication and/or authorization</td></tr>
 <tr class="odd"><td><a href="mod_authn_core.html#authtype">AuthType None|Basic|Digest|Form</a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Type of user authentication</td></tr>
 <tr><td><a href="mod_authn_file.html#authuserfile">AuthUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">ÀÎÁõÇÒ »ç¿ëÀÚ¸í¿Í ¾ÏÈ£ ¸ñ·ÏÀ» ÀúÀåÇϴ ¹®ÀÚÆÄÀϸíÀ»
 ÁöÁ¤ÇÑ´Ù</td></tr>
index d796f39464eb1a339e8ea20fba764dfe346a8ab6..5d47f4dc937994885e03b10a6e6bf6e9cb11a231 100644 (file)
@@ -236,6 +236,12 @@ authentication</td></tr>
 ... &lt;/AuthnProviderAlias&gt;</a></td><td></td><td>s</td><td>T</td></tr><tr><td class="descr" colspan="4">Enclose a group of directives that represent an
 extension of a base authentication provider and referenced by
 the specified alias</td></tr>
+<tr class="odd"><td><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider <em>provider-name</em>|<code>None</code>
+<em>option</em> ...</a></td><td></td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables a FastCGI application to handle the check_authn
+authentication hook.</td></tr>
+<tr><td><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider <em>type</em> <em>provider-name</em>
+<em>backend-address</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a FastCGI application as a provider for
+authentication and/or authorization</td></tr>
 <tr class="odd"><td><a href="mod_authn_core.html#authtype">AuthType None|Basic|Digest|Form</a></td><td></td><td>dh</td><td>T</td></tr><tr class="odd"><td class="descr" colspan="4">Type of user authentication</td></tr>
 <tr><td><a href="mod_authn_file.html#authuserfile">AuthUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>T</td></tr><tr><td class="descr" colspan="4">Sets the name of a text file containing the list of users and
 passwords for authentication</td></tr>
index 62d555bb9e7e790f78a3ddcda872d11fdf0f7847..c9ee3fd4b186dd61b5c387ae24bc2be6094bf8c3 100644 (file)
@@ -228,6 +228,12 @@ authentication</td></tr>
 ... &lt;/AuthnProviderAlias&gt;</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Enclose a group of directives that represent an
 extension of a base authentication provider and referenced by
 the specified alias</td></tr>
+<tr class="odd"><td><a href="mod_authnz_fcgi.html#authnzfcgicheckauthnprovider">AuthnzFcgiCheckAuthnProvider <em>provider-name</em>|<code>None</code>
+<em>option</em> ...</a></td><td></td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables a FastCGI application to handle the check_authn
+authentication hook.</td></tr>
+<tr><td><a href="mod_authnz_fcgi.html#authnzfcgidefineprovider">AuthnzFcgiDefineProvider <em>type</em> <em>provider-name</em>
+<em>backend-address</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a FastCGI application as a provider for
+authentication and/or authorization</td></tr>
 <tr class="odd"><td><a href="mod_authn_core.html#authtype">AuthType None|Basic|Digest|Form</a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Type of user authentication</td></tr>
 <tr><td><a href="mod_authn_file.html#authuserfile">AuthUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets the name of a text file containing the list of users and
 passwords for authentication</td></tr>
index 362b8632afc7e36aec9481a62fc1fa7ae08d632b..a820a1f130ea87ea74dcfcc0088b760140068cd4 100644 (file)
@@ -201,6 +201,7 @@ HPUX betreiben</a></li>
 <li><a href="mod/mod_authn_dbm.html">Apache-Modul mod_authn_dbm</a></li>
 <li><a href="mod/mod_authn_file.html">Apache-Modul mod_authn_file</a></li>
 <li><a href="mod/mod_authn_socache.html">Apache-Modul mod_authn_socache</a></li>
+<li><a href="mod/mod_authnz_fcgi.html">Apache-Modul mod_authnz_fcgi</a></li>
 <li><a href="mod/mod_authnz_ldap.html">Apache-Modul mod_authnz_ldap</a></li>
 <li><a href="mod/mod_authz_core.html">Apache-Modul mod_authz_core</a></li>
 <li><a href="mod/mod_authz_dbd.html">Apache-Modul mod_authz_dbd</a></li>
index 1c575c85614dd6d4daf0ce2479663f8d060ceb7a..4d661f2047470b96501f90a884003da73c0cf1c3 100644 (file)
@@ -201,6 +201,7 @@ log_server_status</a></li>
 <li><a href="mod/mod_authn_dbm.html">Apache Module mod_authn_dbm</a></li>
 <li><a href="mod/mod_authn_file.html">Apache Module mod_authn_file</a></li>
 <li><a href="mod/mod_authn_socache.html">Apache Module mod_authn_socache</a></li>
+<li><a href="mod/mod_authnz_fcgi.html">Apache Module mod_authnz_fcgi</a></li>
 <li><a href="mod/mod_authnz_ldap.html">Apache Module mod_authnz_ldap</a></li>
 <li><a href="mod/mod_authz_core.html">Apache Module mod_authz_core</a></li>
 <li><a href="mod/mod_authz_dbd.html">Apache Module mod_authz_dbd</a></li>
index 567674cae7d7223a4ec831205c9e567f14497916..3d3a0f210c15994b91f0f8d022aff07a207a1217 100644 (file)
@@ -183,6 +183,7 @@ usados para describir las directivas de Apache</a></li>
 <li><a href="mod/mod_authn_dbm.html">Módulo Apache mod_authn_dbm</a></li>
 <li><a href="mod/mod_authn_file.html">Módulo Apache mod_authn_file</a></li>
 <li><a href="mod/mod_authn_socache.html">Módulo Apache mod_authn_socache</a></li>
+<li><a href="mod/mod_authnz_fcgi.html">Módulo Apache mod_authnz_fcgi</a></li>
 <li><a href="mod/mod_authnz_ldap.html">Módulo Apache mod_authnz_ldap</a></li>
 <li><a href="mod/mod_authz_core.html">Módulo Apache mod_authz_core</a></li>
 <li><a href="mod/mod_authz_dbd.html">Módulo Apache mod_authz_dbd</a></li>
index 04adda8931be9d19f543744c347c7837f21f9d60..9c62f0a30a9749546d079a5d80ec89c95e6b48d7 100644 (file)
@@ -216,6 +216,7 @@ pour d
 <li><a href="mod/mod_authn_dbm.html">Module Apache mod_authn_dbm</a></li>
 <li><a href="mod/mod_authn_file.html">Module Apache mod_authn_file</a></li>
 <li><a href="mod/mod_authn_socache.html">Module Apache mod_authn_socache</a></li>
+<li><a href="mod/mod_authnz_fcgi.html">Module Apache mod_authnz_fcgi</a></li>
 <li><a href="mod/mod_authnz_ldap.html">Module Apache mod_authnz_ldap</a></li>
 <li><a href="mod/mod_authz_core.html">Module Apache mod_authz_core</a></li>
 <li><a href="mod/mod_authz_dbd.html">Module Apache mod_authz_dbd</a></li>
index 549f8b9690e46384b17cf2d7c29549e5913b6982..6c3e5295bc1449a88149eff77aa709c0453063b0 100644 (file)
 <li><a href="mod/mod_authn_dbm.html">Apache モジュール mod_authn_dbm</a></li>
 <li><a href="mod/mod_authn_file.html">Apache モジュール mod_authn_file</a></li>
 <li><a href="mod/mod_authn_socache.html">Apache モジュール mod_authn_socache</a></li>
+<li><a href="mod/mod_authnz_fcgi.html">Apache モジュール mod_authnz_fcgi</a></li>
 <li><a href="mod/mod_authnz_ldap.html">Apache モジュール mod_authnz_ldap</a></li>
 <li><a href="mod/mod_authz_core.html">Apache モジュール mod_authz_core</a></li>
 <li><a href="mod/mod_authz_dbd.html">Apache モジュール mod_authz_dbd</a></li>
index a2f0aea9ff86f61af07fe2f10312c224a9af0770..8a264d6aea74368fc00e39cac6488b84c1138e7f 100644 (file)
 <li><a href="mod/mod_authn_dbm.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authn_dbm</a></li>
 <li><a href="mod/mod_authn_file.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authn_file</a></li>
 <li><a href="mod/mod_authn_socache.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authn_socache</a></li>
+<li><a href="mod/mod_authnz_fcgi.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authnz_fcgi</a></li>
 <li><a href="mod/mod_authnz_ldap.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authnz_ldap</a></li>
 <li><a href="mod/mod_authz_core.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authz_core</a></li>
 <li><a href="mod/mod_authz_dbd.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authz_dbd</a></li>
index 82c6cc3351d2a807fb28e2254f6dc831acfeb229..016a64d43a19ff91a57e701f9ab3b4800a3e77dd 100644 (file)
@@ -196,6 +196,7 @@ Windows ile Apache Kullanımı</a></li>
 <li><a href="mod/mod_authn_dbm.html">Apache Modülü mod_authn_dbm</a></li>
 <li><a href="mod/mod_authn_file.html">Apache Modülü mod_authn_file</a></li>
 <li><a href="mod/mod_authn_socache.html">Apache Modülü mod_authn_socache</a></li>
+<li><a href="mod/mod_authnz_fcgi.html">Apache Modülü mod_authnz_fcgi</a></li>
 <li><a href="mod/mod_authnz_ldap.html">Apache Modülü mod_authnz_ldap</a></li>
 <li><a href="mod/mod_authz_core.html">Apache Modülü mod_authz_core</a></li>
 <li><a href="mod/mod_authz_dbd.html">Apache Modülü mod_authz_dbd</a></li>
index 739c08a5f1fca612257b51d76827a60ae9314f2f..10662e2e3dad4ea2293f076cd5fe7ebda9500bcd 100644 (file)
 <li><a href="mod/mod_authn_dbm.html">Apache 模块 mod_authn_dbm</a></li>
 <li><a href="mod/mod_authn_file.html">Apache 模块 mod_authn_file</a></li>
 <li><a href="mod/mod_authn_socache.html">Apache 模块 mod_authn_socache</a></li>
+<li><a href="mod/mod_authnz_fcgi.html">Apache 模块 mod_authnz_fcgi</a></li>
 <li><a href="mod/mod_authnz_ldap.html">Apache 模块 mod_authnz_ldap</a></li>
 <li><a href="mod/mod_authz_core.html">Apache 模块 mod_authz_core</a></li>
 <li><a href="mod/mod_authz_dbd.html">Apache 模块 mod_authz_dbd</a></li>
index 4f3ba4f73914d3df89e7ee1861cb91df80f17061..b443761d2b5338c8b63077ad860b5586ad62bcb9 100644 (file)
@@ -55,6 +55,10 @@ APACHE_MODULE(authnz_ldap, LDAP based authentication, , , most, [
   fi
 ])
 
+dnl FastCGI authorizer interface, supporting authn and authz.
+APACHE_MODULE(authnz_fcgi,
+              FastCGI authorizer-based authentication and authorization, , , no)
+
 dnl - host access control compatibility modules. Implements Order, Allow,
 dnl Deny, Satisfy for backward compatibility.  These directives have been
 dnl deprecated in 2.4.
diff --git a/modules/aaa/mod_authnz_fcgi.c b/modules/aaa/mod_authnz_fcgi.c
new file mode 100644 (file)
index 0000000..673b0e7
--- /dev/null
@@ -0,0 +1,1358 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "apr_hash.h"
+#include "apr_lib.h"
+#include "apr_strings.h"
+
+#include "ap_provider.h"
+#include "httpd.h"
+#include "http_config.h"
+#include "http_core.h"
+#include "http_protocol.h"
+#include "http_request.h"
+#include "http_log.h"
+#include "util_script.h"
+#include "ap_provider.h"
+#include "mod_auth.h"
+#include "util_fcgi.h"
+#include "ap_mmn.h"
+
+module AP_MODULE_DECLARE_DATA authnz_fcgi_module;
+
+typedef struct {
+    const char *name; /* provider name */
+    const char *backend; /* backend address, as configured */
+    const char *host;
+    apr_port_t port;
+    apr_sockaddr_t *backend_addrs;
+    int is_authn;
+    int is_authz;
+} fcgi_provider_conf;
+
+typedef struct {
+    const char *name; /* provider name */
+    const char *default_user; /* this is user if authorizer returns
+                               * success and a user expression yields
+                               * empty string
+                               */
+    ap_expr_info_t *user_expr; /* expr to evaluate to set r->user */
+    char authoritative; /* fail request if user is rejected? */
+    char require_basic_auth; /* fail if client didn't send credentials? */
+} fcgi_dir_conf;
+
+typedef struct {
+    /* If an "authnz" provider successfully authenticates, record
+     * the provider name here for checking during authz.
+     */
+    const char *successful_authnz_provider;
+} fcgi_request_notes;
+
+static apr_hash_t *fcgi_authn_providers, *fcgi_authz_providers;
+
+#define FCGI_IO_TIMEOUT apr_time_from_sec(30)
+
+#ifndef NON200_RESPONSE_BUF_LEN
+#define NON200_RESPONSE_BUF_LEN 8192
+#endif
+
+/* fcgi://{hostname|IPv4|IPv6}:port[/] */
+#define FCGI_BACKEND_REGEX_STR "m%^fcgi://(.*):(\\d{1,5})/?$%"
+
+/*
+ * utility function to connect to a peer; generally useful, but 
+ * wait for AF_UNIX support in this mod before thinking about how
+ * to make it available to other modules
+ */
+static apr_status_t connect_to_peer(apr_socket_t **newsock,
+                                    request_rec *r,
+                                    apr_sockaddr_t *backend_addrs,
+                                    const char *backend_name,
+                                    apr_interval_time_t timeout)
+{
+    apr_status_t rv = APR_EINVAL; /* returned if no backend addr was provided
+                                   */
+    int connected = 0;
+    apr_sockaddr_t *addr = backend_addrs;
+
+    while (addr && !connected) {
+        int loglevel = addr->next ? APLOG_DEBUG : APLOG_ERR;
+        rv = apr_socket_create(newsock, addr->family,
+                               SOCK_STREAM, 0, r->pool);
+        if (rv != APR_SUCCESS) {
+            ap_log_rerror(APLOG_MARK, loglevel, rv, r,
+                          APLOGNO(02494) "error creating family %d socket "
+                          "for target %s",
+                          addr->family, backend_name);
+            addr = addr->next;
+            continue;
+        }
+
+        apr_socket_opt_set(*newsock, APR_TCP_NODELAY, 1);
+        apr_socket_timeout_set(*newsock,
+                               timeout ? timeout : r->server->timeout);
+
+        rv = apr_socket_connect(*newsock, addr);
+        if (rv != APR_SUCCESS) {
+            apr_socket_close(*newsock);
+            ap_log_rerror(APLOG_MARK, loglevel, rv, r,
+                          APLOGNO(02495) "attempt to connect to %pI (%s) "
+                          "failed", addr, backend_name);
+            addr = addr->next;
+            continue;
+        }
+
+        connected = 1;
+    }
+
+    return rv;
+#undef FN_LOG_MARK
+}
+
+static void log_provider_info(const fcgi_provider_conf *conf, request_rec *r)
+{
+    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+                  APLOGNO(02496) "name %s, backend %s, host %s, port %d, "
+                  "first address %pI, %c%c",
+                  conf->name,
+                  conf->backend,
+                  conf->host,
+                  (int)conf->port,
+                  conf->backend_addrs,
+                  conf->is_authn ? 'N' : '_',
+                  conf->is_authz ? 'Z' : '_');
+}
+
+static void setupenv(request_rec *r, const char *password, const char *apache_role)
+{
+    ap_add_common_vars(r);
+    ap_add_cgi_vars(r);
+    apr_table_setn(r->subprocess_env, "FCGI_ROLE", AP_FCGI_AUTHORIZER_STR);
+    if (apache_role) {
+        apr_table_setn(r->subprocess_env, "FCGI_APACHE_ROLE", apache_role);
+    }
+    if (password) {
+        apr_table_setn(r->subprocess_env, "REMOTE_PASSWD", password);
+    }
+    /* Drop the variables CONTENT_LENGTH, PATH_INFO, PATH_TRANSLATED,
+     * SCRIPT_NAME and most Hop-By-Hop headers - EXCEPT we will pass
+     * PROXY_AUTH to allow CGI to perform proxy auth for httpd
+     */
+    apr_table_unset(r->subprocess_env, "CONTENT_LENGTH");
+    apr_table_unset(r->subprocess_env, "PATH_INFO");
+    apr_table_unset(r->subprocess_env, "PATH_TRANSLATED");
+    apr_table_unset(r->subprocess_env, "SCRIPT_NAME");
+    apr_table_unset(r->subprocess_env, "HTTP_KEEP_ALIVE");
+    apr_table_unset(r->subprocess_env, "HTTP_TE");
+    apr_table_unset(r->subprocess_env, "HTTP_TRAILER");
+    apr_table_unset(r->subprocess_env, "HTTP_TRANSFER_ENCODING");
+    apr_table_unset(r->subprocess_env, "HTTP_UPGRADE");
+
+    /* Connection hop-by-hop header to prevent the CGI from hanging */
+    apr_table_setn(r->subprocess_env, "HTTP_CONNECTION", "close");
+}
+
+static apr_status_t recv_data(const fcgi_provider_conf *conf,
+                              request_rec *r,
+                              apr_socket_t *s,
+                              char *buf,
+                              apr_size_t *buflen)
+{
+    apr_status_t rv;
+
+    rv = apr_socket_recv(s, buf, buflen);
+    if (rv != APR_SUCCESS) {
+        ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+                      APLOGNO(02497) "Couldn't read from backend %s",
+                      conf->backend);
+        return rv;
+    }
+
+#if AP_MODULE_MAGIC_AT_LEAST(20130702,2) 
+    ap_log_rdata(APLOG_MARK, APLOG_TRACE5, r, "FastCGI data received",
+                 buf, *buflen, AP_LOG_DATA_SHOW_OFFSET);
+#endif
+    return APR_SUCCESS;
+}
+
+static apr_status_t recv_data_full(const fcgi_provider_conf *conf,
+                                   request_rec *r,
+                                   apr_socket_t *s,
+                                   char *buf,
+                                   apr_size_t buflen)
+{
+    apr_size_t readlen;
+    apr_size_t cumulative_len = 0;
+    apr_status_t rv;
+
+    do {
+        readlen = buflen - cumulative_len;
+        rv = recv_data(conf, r, s, buf + cumulative_len, &readlen);
+        if (rv != APR_SUCCESS) {
+            return rv;
+        }
+        cumulative_len += readlen;
+    } while (cumulative_len < buflen);
+
+    return APR_SUCCESS;
+}
+
+static apr_status_t sendv_data(const fcgi_provider_conf *conf,
+                               request_rec *r,
+                               apr_socket_t *s,
+                               struct iovec *vec,
+                               int nvec,
+                               apr_size_t *len)
+{
+    apr_size_t to_write = 0, written = 0;
+    apr_status_t rv = APR_SUCCESS;
+    int i, offset;
+
+    for (i = 0; i < nvec; i++) {
+        to_write += vec[i].iov_len;
+#if AP_MODULE_MAGIC_AT_LEAST(20130702,2) 
+        ap_log_rdata(APLOG_MARK, APLOG_TRACE5, r, "FastCGI data sent",
+                     vec[i].iov_base, vec[i].iov_len, AP_LOG_DATA_SHOW_OFFSET);
+#endif
+    }
+
+    offset = 0;
+    while (to_write) {
+        apr_size_t n = 0;
+        rv = apr_socket_sendv(s, vec + offset, nvec - offset, &n);
+        if (rv != APR_SUCCESS) {
+            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
+                          APLOGNO(02498) "Sending data to %s failed",
+                          conf->backend);
+            break;
+        }
+        if (n > 0) {
+            written += n;
+            if (written >= to_write)
+                break;                 /* short circuit out */
+            for (i = offset; i < nvec; ) {
+                if (n >= vec[i].iov_len) {
+                    offset++;
+                    n -= vec[i++].iov_len;
+                } else {
+                    vec[i].iov_len -= n;
+                    vec[i].iov_base = (char *) vec[i].iov_base + n;
+                    break;
+                }
+            }
+        }
+    }
+
+    *len = written;
+
+    return rv;
+}
+
+static apr_status_t send_begin_request(request_rec *r,
+                                       const fcgi_provider_conf *conf,
+                                       apr_socket_t *s, int role,
+                                       apr_uint16_t request_id)
+{
+    struct iovec vec[2];
+    ap_fcgi_header header;
+    unsigned char farray[AP_FCGI_HEADER_LEN];
+    ap_fcgi_begin_request_body brb;
+    unsigned char abrb[AP_FCGI_HEADER_LEN];
+    apr_size_t len;
+
+    ap_fcgi_fill_in_header(&header, AP_FCGI_BEGIN_REQUEST, request_id,
+                           sizeof(abrb), 0);
+    ap_fcgi_fill_in_request_body(&brb, role, 0 /* *NOT* AP_FCGI_KEEP_CONN */);
+
+    ap_fcgi_header_to_array(&header, farray);
+    ap_fcgi_begin_request_body_to_array(&brb, abrb);
+
+    vec[0].iov_base = (void *)farray;
+    vec[0].iov_len = sizeof(farray);
+    vec[1].iov_base = (void *)abrb;
+    vec[1].iov_len = sizeof(abrb);
+
+    return sendv_data(conf, r, s, vec, 2, &len);
+}
+
+static apr_status_t send_environment(apr_socket_t *s,
+                                     const fcgi_provider_conf *conf,
+                                     request_rec *r, apr_uint16_t request_id,
+                                     apr_pool_t *temp_pool)
+{
+    const char *fn = "send_environment";
+    const apr_array_header_t *envarr;
+    const apr_table_entry_t *elts;
+    struct iovec vec[2];
+    ap_fcgi_header header;
+    unsigned char farray[AP_FCGI_HEADER_LEN];
+    char *body;
+    apr_status_t rv;
+    apr_size_t avail_len, len, required_len;
+    int i, next_elem, starting_elem;
+
+    envarr = apr_table_elts(r->subprocess_env);
+    elts = (const apr_table_entry_t *) envarr->elts;
+
+    if (APLOG_R_IS_LEVEL(r, APLOG_TRACE2)) {
+
+        for (i = 0; i < envarr->nelts; ++i) {
+            if (!elts[i].key) {
+                continue;
+            }
+            ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r,
+                          "%s: '%s': '%s'",
+                          fn, elts[i].key, 
+                          !strcmp(elts[i].key, "REMOTE_PASSWD") ?
+                              "XXXXXXXX" : elts[i].val);
+        }
+    }
+
+    /* Send envvars over in as many FastCGI records as it takes, */
+    next_elem = 0; /* starting with the first one */
+
+    avail_len = 16 * 1024; /* our limit per record, which could have been up
+                            * to AP_FCGI_MAX_CONTENT_LEN
+                            */
+
+    while (next_elem < envarr->nelts) {
+        starting_elem = next_elem;
+        required_len = ap_fcgi_encoded_env_len(r->subprocess_env,
+                                               avail_len,
+                                               &next_elem);
+
+        if (!required_len) {
+            if (next_elem < envarr->nelts) {
+                ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
+                              APLOGNO(02499) "couldn't encode envvar '%s' in %"
+                              APR_SIZE_T_FMT " bytes",
+                              elts[next_elem].key, avail_len);
+                /* skip this envvar and continue */
+                ++next_elem;
+                continue;
+            }
+            /* only an unused element at the end of the array */
+            break;
+        }
+
+        ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+                      APLOGNO(02500) "required len for encoding envvars: %"
+                      APR_SIZE_T_FMT ", %d/%d elems processed so far",
+                      required_len, next_elem, envarr->nelts);
+
+        body = apr_palloc(temp_pool, required_len);
+        rv = ap_fcgi_encode_env(r, r->subprocess_env, body, required_len,
+                                &starting_elem);
+        /* we pre-compute, so we can't run out of space */
+        ap_assert(rv == APR_SUCCESS);
+        /* compute and encode must be in sync */
+        ap_assert(starting_elem == next_elem);
+
+        ap_fcgi_fill_in_header(&header, AP_FCGI_PARAMS, request_id,
+                               (apr_uint16_t)required_len, 0);
+        ap_fcgi_header_to_array(&header, farray);
+
+        vec[0].iov_base = (void *)farray;
+        vec[0].iov_len = sizeof(farray);
+        vec[1].iov_base = body;
+        vec[1].iov_len = required_len;
+
+        rv = sendv_data(conf, r, s, vec, 2, &len);
+        apr_pool_clear(temp_pool);
+
+        if (rv) {
+            return rv;
+        }
+    }
+
+    /* Envvars sent, so say we're done */
+    ap_fcgi_fill_in_header(&header, AP_FCGI_PARAMS, request_id, 0, 0);
+    ap_fcgi_header_to_array(&header, farray);
+
+    vec[0].iov_base = (void *)farray;
+    vec[0].iov_len = sizeof(farray);
+
+    return sendv_data(conf, r, s, vec, 1, &len);
+}
+
+/*
+ * This header-state logic is from mod_proxy_fcgi.
+ */
+enum {
+  HDR_STATE_READING_HEADERS,
+  HDR_STATE_GOT_CR,
+  HDR_STATE_GOT_CRLF,
+  HDR_STATE_GOT_CRLFCR,
+  HDR_STATE_GOT_LF,
+  HDR_STATE_DONE_WITH_HEADERS
+};
+
+/* Try to find the end of the script headers in the response from the back
+ * end fastcgi server. STATE holds the current header parsing state for this
+ * request.
+ *
+ * Returns 0 if it can't find the end of the headers, and 1 if it found the
+ * end of the headers. */
+static int handle_headers(request_rec *r,
+                          int *state,
+                          char *readbuf)
+{
+    const char *itr = readbuf;
+
+    while (*itr) {
+        if (*itr == '\r') {
+            switch (*state) {
+                case HDR_STATE_GOT_CRLF:
+                    *state = HDR_STATE_GOT_CRLFCR;
+                    break;
+
+                default:
+                    *state = HDR_STATE_GOT_CR;
+                    break;
+            }
+        }
+        else if (*itr == '\n') {
+            switch (*state) {
+                 case HDR_STATE_GOT_LF:
+                     *state = HDR_STATE_DONE_WITH_HEADERS;
+                     break;
+
+                 case HDR_STATE_GOT_CR:
+                     *state = HDR_STATE_GOT_CRLF;
+                     break;
+
+                 case HDR_STATE_GOT_CRLFCR:
+                     *state = HDR_STATE_DONE_WITH_HEADERS;
+                     break;
+
+                 default:
+                     *state = HDR_STATE_GOT_LF;
+                     break;
+            }
+        }
+        else {
+            *state = HDR_STATE_READING_HEADERS;
+        }
+
+        if (*state == HDR_STATE_DONE_WITH_HEADERS)
+            break;
+
+        ++itr;
+    }
+
+    if (*state == HDR_STATE_DONE_WITH_HEADERS) {
+        return 1;
+    }
+
+    return 0;
+}
+
+/*
+ * handle_response() is based on mod_proxy_fcgi's dispatch()
+ */
+static apr_status_t handle_response(const fcgi_provider_conf *conf,
+                                    request_rec *r, apr_socket_t *s,
+                                    apr_pool_t *temp_pool,
+                                    apr_uint16_t request_id,
+                                    char *rspbuf,
+                                    apr_size_t *rspbuflen)
+{
+    apr_bucket *b;
+    apr_bucket_brigade *ob;
+    apr_size_t orspbuflen;
+    apr_status_t rv = APR_SUCCESS;
+    const char *fn = "handle_response";
+    int header_state = HDR_STATE_READING_HEADERS;
+    int seen_end_of_headers = 0, done = 0;
+
+    if (rspbuflen) {
+        orspbuflen = *rspbuflen;
+        *rspbuflen = 0; /* unless we actually read something */
+    }
+
+    ob = apr_brigade_create(r->pool, r->connection->bucket_alloc);
+
+    while (!done && rv == APR_SUCCESS) { /* Keep reading FastCGI records until
+                                          * we get AP_FCGI_END_REQUEST (done)
+                                          * or an error occurs.
+                                          */
+        apr_size_t readbuflen;
+        apr_uint16_t clen;
+        apr_uint16_t rid;
+        char readbuf[AP_IOBUFSIZE + 1];
+        unsigned char farray[AP_FCGI_HEADER_LEN];
+        unsigned char plen;
+        unsigned char type;
+        unsigned char version;
+
+        rv = recv_data_full(conf, r, s, (char *)farray, AP_FCGI_HEADER_LEN);
+        if (rv != APR_SUCCESS) {
+            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
+                          APLOGNO(02501) "%s: Error occurred before reading "
+                          "entire header", fn);
+            break;
+        }
+
+        ap_fcgi_header_fields_from_array(&version, &type, &rid, &clen, &plen,
+                                         farray);
+
+        if (version != AP_FCGI_VERSION_1) {
+            ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+                          APLOGNO(02502) "%s: Got bogus FastCGI header "
+                          "version %d", fn, (int)version);
+            rv = APR_EINVAL;
+            break;
+        }
+
+        if (rid != request_id) {
+            ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+                          APLOGNO(02503) "%s: Got bogus FastCGI header "
+                          "request id %d, expected %d",
+                          fn, rid, request_id);
+            rv = APR_EINVAL;
+            break;
+        }
+
+    recv_again: /* if we need to keep reading more of a record's content */
+
+        if (clen > sizeof(readbuf) - 1) {
+            readbuflen = sizeof(readbuf) - 1;
+        } else {
+            readbuflen = clen;
+        }
+
+        /*
+         * Now get the actual content of the record.
+         */
+        if (readbuflen != 0) {
+            rv = recv_data(conf, r, s, readbuf, &readbuflen);
+            if (rv != APR_SUCCESS) {
+                break;
+            }
+            readbuf[readbuflen] = '\0';
+        }
+
+        switch (type) {
+        case AP_FCGI_STDOUT: /* Response headers and optional body */
+            if (clen != 0) {
+                b = apr_bucket_transient_create(readbuf,
+                                                readbuflen,
+                                                r->connection->bucket_alloc);
+
+                APR_BRIGADE_INSERT_TAIL(ob, b);
+
+                if (!seen_end_of_headers) {
+                    int st = handle_headers(r, &header_state, readbuf);
+
+                    if (st == 1) {
+                        int status;
+
+                        seen_end_of_headers = 1;
+
+                        status =
+                            ap_scan_script_header_err_brigade_ex(r, ob,
+                                                                 NULL, 
+                                                                 APLOG_MODULE_INDEX);
+                        ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+                                      APLOGNO(02504) "%s: script header "
+                                      "parsing -> %d/%d",
+                                      fn, status, r->status);
+
+                        if (rspbuf) { /* caller wants to see response body,
+                                       * if any
+                                       */
+                            apr_status_t tmprv;
+
+                            if (rspbuflen) {
+                                *rspbuflen = orspbuflen;
+                            }
+                            tmprv = apr_brigade_flatten(ob, rspbuf, rspbuflen);
+                            if (tmprv != APR_SUCCESS) {
+                                /* should not occur for these bucket types;
+                                 * does not indicate overflow
+                                 */
+                                ap_log_rerror(APLOG_MARK, APLOG_ERR, tmprv, r,
+                                              APLOGNO(02505) "%s: error "
+                                              "flattening response body",
+                                              fn);
+                            }
+                        }
+
+                        if (status != OK) {
+                            r->status = status;
+                            ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+                                          APLOGNO(02506) "%s: Error parsing "
+                                          "script headers from %s",
+                                          fn, conf->backend);
+                            rv = APR_EINVAL;
+                            break;
+                        }
+                        apr_pool_clear(temp_pool);
+                    }
+                    else {
+                        /* We're still looking for the end of the
+                         * headers, so this part of the data will need
+                         * to persist. */
+                        apr_bucket_setaside(b, temp_pool);
+                    }
+                }
+
+                /* If we didn't read all the data go back and get the
+                 * rest of it. */
+                if (clen > readbuflen) {
+                    clen -= readbuflen;
+                    goto recv_again;
+                }
+            }
+            break;
+
+        case AP_FCGI_STDERR: /* Text to log */
+            if (clen) {
+                ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
+                              APLOGNO(02507) "%s: Logged from %s: '%s'",
+                              fn, conf->backend, readbuf);
+            }
+
+            if (clen > readbuflen) {
+                clen -= readbuflen;
+                goto recv_again; /* continue reading this record */
+            }
+            break;
+
+        case AP_FCGI_END_REQUEST:
+            done = 1;
+            break;
+
+        default:
+            ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+                          APLOGNO(02508) "%s: Got bogus FastCGI record type "
+                          "%d", fn, type);
+            break;
+        }
+
+        /*
+         * Read/discard any trailing padding.
+         */
+        if (plen) {
+            rv = recv_data_full(conf, r, s, readbuf, plen);
+            if (rv != APR_SUCCESS) {
+                ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
+                              APLOGNO(02509) "%s: Error occurred reading "
+                              "padding",
+                              fn);
+                break;
+            }
+        }
+    }
+
+    apr_brigade_cleanup(ob);
+
+    if (rv == APR_SUCCESS && !seen_end_of_headers) {
+        rv = APR_EINVAL;
+        ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+                      APLOGNO(02510) "%s: Never reached end of script headers",
+                      fn);
+    }
+
+    return rv;
+}
+
+/* almost from mod_fcgid */
+static int mod_fcgid_modify_auth_header(void *vars,
+                                        const char *key, const char *val)
+{
+    /* When the application gives a 200 response, the server ignores response
+       headers whose names aren't prefixed with Variable- prefix, and ignores
+       any response content */
+    if (strncasecmp(key, "Variable-", 9) == 0)
+        apr_table_setn(vars, key, val);
+    return 1;
+}
+
+static int fix_auth_header(void *vr, const char *key, const char *val)
+{
+    request_rec *r = vr;
+
+    ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r, "moving %s->%s", key, val);
+    apr_table_unset(r->err_headers_out, key);
+    apr_table_setn(r->subprocess_env, key + 9, val);
+    return 1;
+}
+
+static void req_rsp(request_rec *r, const fcgi_provider_conf *conf,
+                    const char *password, const char *apache_role,
+                    char *rspbuf, apr_size_t *rspbuflen)
+{
+    const char *fn = "req_rsp";
+    apr_pool_t *temp_pool;
+    apr_size_t orspbuflen;
+    apr_socket_t *s;
+    apr_status_t rv;
+    apr_table_t *saved_subprocess_env = 
+      apr_table_copy(r->pool, r->subprocess_env);
+
+    if (rspbuflen) {
+        orspbuflen = *rspbuflen;
+        *rspbuflen = 0; /* unless we actually read something */
+    }
+
+    apr_pool_create(&temp_pool, r->pool);
+
+    setupenv(r, password, apache_role);
+
+    rv = connect_to_peer(&s, r, conf->backend_addrs,
+                         conf->backend, FCGI_IO_TIMEOUT);
+    if (rv == APR_SUCCESS) {
+        apr_uint16_t request_id = 1;
+
+        rv = send_begin_request(r, conf, s, AP_FCGI_AUTHORIZER, request_id);
+        if (rv != APR_SUCCESS) {
+            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
+                          APLOGNO(02511) "%s: Failed writing request to %s",
+                          fn, conf->backend);
+        }
+
+        if (rv == APR_SUCCESS) {
+            rv = send_environment(s, conf, r, request_id, temp_pool);
+            if (rv != APR_SUCCESS) {
+                ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
+                              APLOGNO(02512) "%s: Failed writing environment "
+                              "to %s", fn, conf->backend);
+            }
+        }
+
+        /* The responder owns the request body, not the authorizer.
+         * Don't even send an empty AP_FCGI_STDIN block.  libfcgi doesn't care,
+         * but it wasn't sent to authorizers by mod_fastcgi or mod_fcgi and
+         * may be unhandled by the app.  Additionally, the FastCGI spec does
+         * not mention FCGI_STDIN in the Authorizer description, though it
+         * does describe FCGI_STDIN elsewhere in more general terms than
+         * simply a wrapper for the client's request body.
+         */
+
+        if (rv == APR_SUCCESS) {
+            if (rspbuflen) {
+                *rspbuflen = orspbuflen;
+            }
+            rv = handle_response(conf, r, s, temp_pool, request_id, rspbuf,
+                                 rspbuflen);
+            if (rv != APR_SUCCESS) {
+                ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
+                              APLOGNO(02514) "%s: Failed handling response "
+                              "from %s", fn, conf->backend);
+            }
+        }
+
+        apr_socket_close(s);
+    }
+
+    if (rv != APR_SUCCESS) {
+        /* some sort of mechanical problem */
+        r->status = HTTP_INTERNAL_SERVER_ERROR;
+    }
+    else {
+        ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+                      APLOGNO(02515) "%s: Received HTTP status %d",
+                      fn, r->status);
+    }
+
+    r->subprocess_env = saved_subprocess_env;
+
+    if (r->status == HTTP_OK) {
+        /* An Authorizer application's 200 response may include headers
+         * whose names are prefixed with Variable-, and they should be
+         * available to subsequent phases via subprocess_env (and yanked
+         * from the client response).
+         */
+        apr_table_t *vars = apr_table_make(temp_pool, /* not used to allocate
+                                                       * any values that end up
+                                                       * in r->(anything)
+                                                       */
+                                           10);
+        apr_table_do(mod_fcgid_modify_auth_header, vars,
+                     r->err_headers_out, NULL);
+        apr_table_do(fix_auth_header, r, vars, NULL);
+    }
+
+    apr_pool_destroy(temp_pool);
+}
+
+static int fcgi_check_authn(request_rec *r)
+{
+    const char *fn = "fcgi_check_authn";
+    fcgi_dir_conf *dconf = ap_get_module_config(r->per_dir_config,
+                                                &authnz_fcgi_module);
+    const char *password = NULL;
+    const fcgi_provider_conf *conf;
+    const char *prov;
+    const char *auth_type;
+    char rspbuf[NON200_RESPONSE_BUF_LEN + 1]; /* extra byte for '\0' */
+    apr_size_t rspbuflen = sizeof rspbuf - 1;
+    int res;
+
+    prov = dconf && dconf->name ? dconf->name : NULL;
+
+    if (!prov || !strcasecmp(prov, "None")) {
+        return DECLINED;
+    }
+
+    auth_type = ap_auth_type(r);
+
+    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+                  APLOGNO(02516) "%s, prov %s, authoritative %s, "
+                  "require-basic %s, user expr? %s type %s",
+                  fn, prov,
+                  dconf->authoritative ? "yes" : "no",
+                  dconf->require_basic_auth ? "yes" : "no",
+                  dconf->user_expr ? "yes" : "no",
+                  auth_type);
+
+    if (auth_type && !strcasecmp(auth_type, "Basic")) {
+        if ((res = ap_get_basic_auth_pw(r, &password))) {
+            ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+                          APLOGNO(02517) "%s: couldn't retrieve basic auth "
+                          "password", fn);
+            if (dconf->require_basic_auth) {
+                return res;
+            }
+            password = NULL;
+        }
+    }
+
+    conf = apr_hash_get(fcgi_authn_providers, prov, APR_HASH_KEY_STRING);
+    if (!conf) {
+        ap_log_rerror(APLOG_MARK, APLOG_CRIT, 0, r,
+                      APLOGNO(02518) "%s: can't find config for provider %s",
+                      fn, prov);
+        return HTTP_INTERNAL_SERVER_ERROR;
+    }
+
+    if (APLOGrdebug(r)) {
+        log_provider_info(conf, r);
+    }
+
+    req_rsp(r, conf, password, AP_FCGI_APACHE_ROLE_AUTHENTICATOR_STR,
+            rspbuf, &rspbuflen);
+
+    if (r->status == HTTP_OK) {
+        if (dconf->user_expr) {
+            const char *err;
+            const char *user = ap_expr_str_exec(r, dconf->user_expr,
+                                                &err);
+            if (user && strlen(user)) {
+                r->user = apr_pstrdup(r->pool, user);
+                ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+                              APLOGNO(02519) "%s: Setting user to '%s'",
+                              fn, r->user);
+            }
+            else if (user && dconf->default_user) {
+                r->user = apr_pstrdup(r->pool, dconf->default_user);
+            }
+            else if (user) {
+                ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+                              APLOGNO(02520) "%s: Failure extracting user "
+                              "after calling authorizer: user expression "
+                              "yielded empty string (variable not set?)",
+                              fn);
+                r->status = HTTP_INTERNAL_SERVER_ERROR;
+            }
+            else {
+                /* unexpected error, not even an empty string was returned */
+                ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+                              APLOGNO(02521) "%s: Failure extracting user "
+                              "after calling authorizer: %s",
+                              fn, err);
+                r->status = HTTP_INTERNAL_SERVER_ERROR;
+            }
+        }
+        if (conf->is_authz) {
+            /* combined authn/authz phase, so app won't be invoked for authz
+             *
+             * Remember that the request was successfully authorized by this
+             * provider.
+             */
+            fcgi_request_notes *rnotes = apr_palloc(r->pool, sizeof(*rnotes));
+            rnotes->successful_authnz_provider = conf->name;
+            ap_set_module_config(r->request_config, &authnz_fcgi_module,
+                                 rnotes);
+        }
+    }
+    else {
+        /* From the spec:
+         *   For Authorizer response status values other than "200" (OK), the 
+         *   Web server denies access and sends the response status, headers,
+         *   and content back to the HTTP client.
+         * But:
+         *   This only makes sense if this authorizer is authoritative.
+         */
+        if (rspbuflen > 0 && !dconf->authoritative) {
+            ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
+                          APLOGNO(02522) "%s: Ignoring response body from non-"
+                          "authoritative authorizer", fn);
+        }
+        else if (rspbuflen > 0) {
+            if (rspbuflen == sizeof rspbuf - 1) {
+                /* apr_brigade_flatten() interface :( */
+                ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
+                              APLOGNO(02523) "%s: possible overflow handling "
+                              "response body", fn);
+            }
+            rspbuf[rspbuflen] = '\0'; /* we reserved an extra byte for '\0' */
+            ap_custom_response(r, r->status, rspbuf); /* API makes a copy */
+        }
+    }
+
+    return r->status == HTTP_OK ? 
+        OK : dconf->authoritative ? r->status : DECLINED;
+}
+
+static authn_status fcgi_check_password(request_rec *r, const char *user,
+                                        const char *password)
+{
+    const char *fn = "fcgi_check_password";
+    const char *prov = apr_table_get(r->notes, AUTHN_PROVIDER_NAME_NOTE);
+    const fcgi_provider_conf *conf;
+
+    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+                  APLOGNO(02524) "%s(%s, XXX): provider %s",
+                  fn, user, prov);
+
+    if (!prov) {
+        ap_log_rerror(APLOG_MARK, APLOG_CRIT, 0, r,
+                      APLOGNO(02525) "%s: provider note isn't set", fn);
+        return AUTH_GENERAL_ERROR;
+    }
+
+    conf = apr_hash_get(fcgi_authn_providers, prov, APR_HASH_KEY_STRING);
+    if (!conf) {
+        ap_log_rerror(APLOG_MARK, APLOG_CRIT, 0, r,
+                      APLOGNO(02526) "%s: can't find config for provider %s",
+                      fn, prov);
+        return AUTH_GENERAL_ERROR;
+    }
+
+    if (APLOGrdebug(r)) {
+        log_provider_info(conf, r);
+    }
+
+    req_rsp(r, conf, password, 
+            /* combined authn and authz: FCGI_APACHE_ROLE not set */
+            conf->is_authz ? NULL : AP_FCGI_APACHE_ROLE_AUTHENTICATOR_STR,
+            NULL, NULL);
+
+    if (r->status == HTTP_OK) {
+        if (conf->is_authz) {
+            /* combined authn/authz phase, so app won't be invoked for authz
+             *
+             * Remember that the request was successfully authorized by this
+             * provider.
+             */
+            fcgi_request_notes *rnotes = apr_palloc(r->pool, sizeof(*rnotes));
+            rnotes->successful_authnz_provider = conf->name;
+            ap_set_module_config(r->request_config, &authnz_fcgi_module,
+                                 rnotes);
+        }
+        return AUTH_GRANTED;
+    }
+    else if (r->status == HTTP_INTERNAL_SERVER_ERROR) {
+        return AUTH_GENERAL_ERROR;
+    }
+    else {
+        return AUTH_DENIED;
+    }
+}
+
+static const authn_provider fcgi_authn_provider = {
+    &fcgi_check_password,
+    NULL /* get-realm-hash not supported */
+};
+
+static authz_status fcgi_authz_check(request_rec *r,
+                                     const char *require_line,
+                                     const void *parsed_require_line)
+{
+    const char *fn = "fcgi_authz_check";
+    const char *prov = apr_table_get(r->notes, AUTHZ_PROVIDER_NAME_NOTE);
+    const fcgi_provider_conf *conf;
+
+    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+                  APLOGNO(02527) "%s(%s)", fn, require_line);
+
+    if (!prov) {
+        ap_log_rerror(APLOG_MARK, APLOG_CRIT, 0, r,
+                      APLOGNO(02528) "%s: provider note isn't set", fn);
+        return AUTHZ_GENERAL_ERROR;
+    }
+
+    conf = apr_hash_get(fcgi_authz_providers, prov, APR_HASH_KEY_STRING);
+    if (!conf) {
+        ap_log_rerror(APLOG_MARK, APLOG_CRIT, 0, r,
+                      APLOGNO(02529) "%s: can't find config for provider %s",
+                      fn, prov);
+        return AUTHZ_GENERAL_ERROR;
+    }
+
+    if (APLOGrdebug(r)) {
+        log_provider_info(conf, r);
+    }
+
+    if (!r->user) {
+        return AUTHZ_DENIED_NO_USER;
+    }
+
+    if (conf->is_authn) {
+        /* combined authn/authz phase, so app won't be invoked for authz
+         *
+         * If the provider already successfully authorized this request, 
+         * success.
+         */
+        fcgi_request_notes *rnotes = ap_get_module_config(r->request_config,
+                                                        &authnz_fcgi_module);
+        if (rnotes
+            && rnotes->successful_authnz_provider
+            && !strcmp(rnotes->successful_authnz_provider, conf->name)) {
+            return AUTHZ_GRANTED;
+        }
+        else {
+            return AUTHZ_DENIED;
+        }
+    }
+    else {
+        req_rsp(r, conf, NULL, AP_FCGI_APACHE_ROLE_AUTHORIZER_STR, NULL, NULL);
+
+        if (r->status == HTTP_OK) {
+            return AUTHZ_GRANTED;
+        }
+        else if (r->status == HTTP_INTERNAL_SERVER_ERROR) {
+            return AUTHZ_GENERAL_ERROR;
+        }
+        else {
+            return AUTHZ_DENIED;
+        }
+    }
+}
+
+static const char *fcgi_authz_parse(cmd_parms *cmd, const char *require_line,
+                                    const void **parsed_require_line)
+{
+    /* Allowed form: Require [not] registered-provider-name<EOS>
+     */
+    if (strcmp(require_line, "")) {
+        return "mod_authnz_fcgi doesn't support restrictions on providers "
+               "(i.e., multiple require args)";
+    }
+
+    return NULL;
+}
+
+static const authz_provider fcgi_authz_provider = {
+    &fcgi_authz_check,
+    &fcgi_authz_parse,
+};
+
+static const char *fcgi_check_authn_provider(cmd_parms *cmd,
+                                        void *d,
+                                        int argc,
+                                        char *const argv[])
+{
+    const char *dname = "AuthnzFcgiCheckAuthnProvider";
+    fcgi_dir_conf *dc = d;
+    int ca = 0;
+
+    if (ca >= argc) {
+        return apr_pstrcat(cmd->pool, dname, ": No provider given", NULL);
+    }
+
+    dc->name = argv[ca];
+    ca++;
+
+    if (!strcasecmp(dc->name, "None")) {
+        if (ca < argc) {
+            return "Options aren't supported with \"None\"";
+        }
+    }
+
+    while (ca < argc) {
+        const char *var = argv[ca], *val;
+        int badarg = 0;
+
+        ca++;
+
+        /* at present, everything needs an argument */
+        if (ca >= argc) {
+            return apr_pstrcat(cmd->pool, dname, ": ", var,
+                               "needs an argument", NULL);
+        }
+
+        val = argv[ca];
+        ca++;
+
+        if (!strcasecmp(var, "Authoritative")) {
+            if (!strcasecmp(val, "On")) {
+                dc->authoritative = 1;
+            }
+            else if (!strcasecmp(val, "Off")) {
+                dc->authoritative = 0;
+            }
+            else {
+                badarg = 1;
+            }
+        }
+        else if (!strcasecmp(var, "DefaultUser")) {
+            dc->default_user = val;
+        }
+        else if (!strcasecmp(var, "RequireBasicAuth")) {
+            if (!strcasecmp(val, "On")) {
+                dc->require_basic_auth = 1;
+            }
+            else if (!strcasecmp(val, "Off")) {
+                dc->require_basic_auth = 0;
+            }
+            else {
+                badarg = 1;
+            }
+        }
+        else if (!strcasecmp(var, "UserExpr")) {
+            const char *err;
+            int flags = AP_EXPR_FLAG_DONT_VARY | AP_EXPR_FLAG_RESTRICTED
+                | AP_EXPR_FLAG_STRING_RESULT;
+
+            dc->user_expr = ap_expr_parse_cmd(cmd, val,
+                                              flags, &err, NULL);
+            if (err) {
+                return apr_psprintf(cmd->pool, "%s: Error parsing '%s': '%s'",
+                                    dname, val, err);
+            }
+        }
+        else {
+            return apr_pstrcat(cmd->pool, dname, ": Unexpected option '",
+                               var, "'", NULL);
+        }
+        if (badarg) {
+            return apr_pstrcat(cmd->pool, dname, ": Bad argument '",
+                               val, "' to option '", var, "'", NULL);
+        }
+    }
+
+    return NULL;
+}
+
+/* AuthnzFcgiAuthDefineProvider {authn|authz|authnz} provider-name \
+ *   fcgi://backendhost:backendport/
+ */
+static const char *fcgi_define_provider(cmd_parms *cmd,
+                                        void *d,
+                                        int argc,
+                                        char *const argv[])
+{
+    const char *dname = "AuthnzFcgiDefineProvider";
+    ap_rxplus_t *fcgi_backend_regex;
+    apr_status_t rv;
+    char *host;
+    const char *err, *stype;
+    fcgi_provider_conf *conf = apr_pcalloc(cmd->pool, sizeof(*conf));
+    int ca = 0, rc;
+
+    fcgi_backend_regex = ap_rxplus_compile(cmd->pool, FCGI_BACKEND_REGEX_STR);
+    if (!fcgi_backend_regex) {
+        return apr_psprintf(cmd->pool,
+                            "%s: failed to compile regexec '%s'",
+                            dname, FCGI_BACKEND_REGEX_STR);
+    }
+
+    err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
+    if (err)
+        return err;
+
+    if (ca >= argc) {
+        return apr_pstrcat(cmd->pool, dname, ": No type given", NULL);
+    }
+
+    stype = argv[ca];
+    ca++;
+
+    if (!strcasecmp(stype, "authn")) {
+        conf->is_authn = 1;
+    }
+    else if (!strcasecmp(stype, "authz")) {
+        conf->is_authz = 1;
+    }
+    else if (!strcasecmp(stype, "authnz")) {
+        conf->is_authn = conf->is_authz = 1;
+    }
+    else {
+        return apr_pstrcat(cmd->pool,
+                           dname,
+                           ": Invalid provider type ",
+                           stype,
+                           NULL);
+    }
+
+    if (ca >= argc) {
+        return apr_pstrcat(cmd->pool, dname, ": No provider name given", NULL);
+    }
+    conf->name = argv[ca];
+    ca++;
+
+    if (ca >= argc) {
+        return apr_pstrcat(cmd->pool, dname, ": No backend-address given",
+                           NULL);
+    }
+
+    rc = ap_rxplus_exec(cmd->pool, fcgi_backend_regex, argv[ca], NULL);
+    if (!rc || ap_rxplus_nmatch(fcgi_backend_regex) != 3) {
+        return apr_pstrcat(cmd->pool,
+                           dname, ": backend-address '",
+                           argv[ca],
+                           "' has invalid form",
+                           NULL);
+    }
+
+    host = ap_rxplus_pmatch(cmd->pool, fcgi_backend_regex, 1);
+    if (host[0] == '[' && host[strlen(host) - 1] == ']') {
+        host += 1;
+        host[strlen(host) - 1] = '\0';
+    }
+
+    conf->port = atoi(ap_rxplus_pmatch(cmd->pool, fcgi_backend_regex, 2));
+    if (conf->port > 65535) {
+        return apr_pstrcat(cmd->pool,
+                           dname, ": backend-address '",
+                           argv[ca],
+                           "' has invalid port",
+                           NULL);
+    }
+
+    conf->backend = argv[ca];
+    conf->host = host;
+    ca++;
+
+    rv = apr_sockaddr_info_get(&conf->backend_addrs, conf->host,
+                               APR_UNSPEC, conf->port, 0, cmd->pool);
+    if (rv != APR_SUCCESS) {
+        ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_CRIT, rv, NULL,
+                     APLOGNO(02530) "Address %s could not be resolved",
+                     conf->backend);
+        return apr_pstrcat(cmd->pool,
+                           dname,
+                           ": Error resolving backend address",
+                           NULL);
+    }
+
+    if (ca != argc) {
+        return apr_pstrcat(cmd->pool,
+                           dname,
+                           ": Unexpected parameter ",
+                           argv[ca],
+                           NULL);
+    }
+
+    if (conf->is_authn) {
+        apr_hash_set(fcgi_authn_providers, conf->name, APR_HASH_KEY_STRING,
+                     conf);
+        ap_register_auth_provider(cmd->pool, AUTHN_PROVIDER_GROUP,
+                                  conf->name,
+                                  AUTHN_PROVIDER_VERSION,
+                                  &fcgi_authn_provider,
+                                  AP_AUTH_INTERNAL_PER_CONF);
+    }
+
+    if (conf->is_authz) {
+        apr_hash_set(fcgi_authz_providers, conf->name, APR_HASH_KEY_STRING,
+                     conf);
+        ap_register_auth_provider(cmd->pool, AUTHZ_PROVIDER_GROUP,
+                                  conf->name,
+                                  AUTHZ_PROVIDER_VERSION,
+                                  &fcgi_authz_provider,
+                                  AP_AUTH_INTERNAL_PER_CONF);
+    }
+
+    return NULL;
+}
+
+static const command_rec fcgi_cmds[] = {
+    AP_INIT_TAKE_ARGV("AuthnzFcgiDefineProvider", 
+                      fcgi_define_provider,
+                      NULL,
+                      RSRC_CONF,
+                      "Define a FastCGI authn and/or authz provider"),
+
+    AP_INIT_TAKE_ARGV("AuthnzFcgiCheckAuthnProvider",
+                      fcgi_check_authn_provider,
+                      NULL,
+                      OR_FILEINFO,
+                      "Enable/disable a FastCGI authorizer to handle "
+                      "check_authn phase"),
+
+    {NULL}
+};
+
+static int fcgi_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
+                           apr_pool_t *ptemp)
+{
+    fcgi_authn_providers = apr_hash_make(pconf);
+    fcgi_authz_providers = apr_hash_make(pconf);
+
+    return OK;
+}
+
+static void fcgi_register_hooks(apr_pool_t *p)
+{
+    static const char * const auth_basic_runs_after_me[] = 
+        {"mod_auth_basic.c", NULL}; /* to allow for custom response */
+
+    ap_hook_pre_config(fcgi_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
+    ap_hook_check_authn(fcgi_check_authn, NULL, auth_basic_runs_after_me,
+                        APR_HOOK_MIDDLE, AP_AUTH_INTERNAL_PER_CONF);
+}
+
+static void *create_dir_conf(apr_pool_t *p, char *dummy)
+{
+    fcgi_dir_conf *dconf = apr_pcalloc(p, sizeof(fcgi_dir_conf));
+
+    dconf->authoritative = 1;
+    return dconf;
+}
+
+static void *merge_dir_conf(apr_pool_t *p, void *basev, void *overridesv)
+{
+    fcgi_dir_conf *a = (fcgi_dir_conf *)apr_pcalloc(p, sizeof(*a));
+    fcgi_dir_conf *base = (fcgi_dir_conf *)basev, 
+        *over = (fcgi_dir_conf *)overridesv;
+
+    /* currently we just have a single directive applicable to a 
+     * directory, so if it is set then grab all fields from fcgi_dir_conf
+     */
+    if (over->name) {
+        memcpy(a, over, sizeof(*a));
+    }
+    else {
+        memcpy(a, base, sizeof(*a));
+    }
+    
+    return a;
+}
+
+AP_DECLARE_MODULE(authnz_fcgi) =
+{
+    STANDARD20_MODULE_STUFF,
+    create_dir_conf,                 /* dir config creater */
+    merge_dir_conf,                  /* dir merger */
+    NULL,                            /* server config */
+    NULL,                            /* merge server config */
+    fcgi_cmds,                       /* command apr_table_t */
+    fcgi_register_hooks              /* register hooks */
+};
diff --git a/modules/aaa/mod_authnz_fcgi.dsp b/modules/aaa/mod_authnz_fcgi.dsp
new file mode 100644 (file)
index 0000000..a809e65
--- /dev/null
@@ -0,0 +1,119 @@
+# Microsoft Developer Studio Project File - Name="mod_authnz_fcgi" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102\r
+\r
+CFG=mod_authnz_fcgi - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "mod_authnz_fcgi.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "mod_authnz_fcgi.mak" CFG="mod_authnz_fcgi - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "mod_authnz_fcgi - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "mod_authnz_fcgi - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+MTL=midl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "mod_authnz_fcgi - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c\r
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../database" /D "authnz_fcgi_DECLARE_EXPORT" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_authnz_fcgi_src" /FD /c\r
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"\r
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /fo"Release/mod_authnz_fcgi.res" /i "../../include" /i "../../srclib/apr/include" /d "NDEBUG" /d BIN_NAME="mod_authnz_fcgi.so" /d LONG_NAME="authnz_fcgi_module for Apache"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /out:".\Release\mod_authnz_fcgi.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authnz_fcgi.so\r
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /out:".\Release\mod_authnz_fcgi.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authnz_fcgi.so /opt:ref\r
+# Begin Special Build Tool\r
+TargetPath=.\Release\mod_authnz_fcgi.so\r
+SOURCE="$(InputPath)"\r
+PostBuild_Desc=Embed .manifest\r
+PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2\r
+# End Special Build Tool\r
+\r
+!ELSEIF  "$(CFG)" == "mod_authnz_fcgi - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c\r
+# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../database" /D "authnz_fcgi_DECLARE_EXPORT" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_authnz_fcgi_src" /FD /c\r
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"\r
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /fo"Debug/mod_authnz_fcgi.res" /i "../../include" /i "../../srclib/apr/include" /d "_DEBUG" /d BIN_NAME="mod_authnz_fcgi.so" /d LONG_NAME="authnz_fcgi_module for Apache"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /out:".\Debug\mod_authnz_fcgi.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authnz_fcgi.so\r
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /out:".\Debug\mod_authnz_fcgi.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authnz_fcgi.so\r
+# Begin Special Build Tool\r
+TargetPath=.\Debug\mod_authnz_fcgi.so\r
+SOURCE="$(InputPath)"\r
+PostBuild_Desc=Embed .manifest\r
+PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2\r
+# End Special Build Tool\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "mod_authnz_fcgi - Win32 Release"\r
+# Name "mod_authnz_fcgi - Win32 Debug"\r
+# Begin Source File\r
+\r
+SOURCE=.\mod_authnz_fcgi.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\mod_auth.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\util_fcgi.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\build\win32\httpd.rc\r
+# End Source File\r
+# End Target\r
+# End Project\r
index 26d545a10a90c6c73907db93b18eba07508612d7..678e7be1d6ff8a08dd034e4b1018f93f93da9a95 100644 (file)
@@ -126,3 +126,4 @@ mod_optional_fn_export.so   0x70BB0000    0x00010000
 mod_optional_fn_import.so   0x70BC0000    0x00010000
 mod_optional_hook_export.so 0x70BD0000    0x00010000
 mod_optional_hook_import.so 0x70BE0000    0x00010000
+mod_authnz_fcgi.so          0x70BF0000    0x00020000