]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
merge mod_version_for_2.0.x branch back to branches/2.0.x
authorAndré Malo <nd@apache.org>
Tue, 18 Oct 2005 15:51:57 +0000 (15:51 +0000)
committerAndré Malo <nd@apache.org>
Tue, 18 Oct 2005 15:51:57 +0000 (15:51 +0000)
* merge 160788 to 326121 from branches/mod_version_for_2.0.x, but leave out
  generated docs files (will cleanly rebuild later)

Reviewed by: Paul Querna, Bill Rowe, (Justin Erenkrantz), me

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

22 files changed:
Apache.dsw
CHANGES
Makefile.win
build/mkconfNW.awk
docs/manual/mod/mod_version.html [new file with mode: 0644]
docs/manual/mod/mod_version.html.en [new file with mode: 0644]
docs/manual/mod/mod_version.html.ja.euc-jp [new file with mode: 0644]
docs/manual/mod/mod_version.html.ko.euc-kr [new file with mode: 0644]
docs/manual/mod/mod_version.xml [new file with mode: 0644]
docs/manual/mod/mod_version.xml.ja [new file with mode: 0644]
docs/manual/mod/mod_version.xml.ko [new file with mode: 0644]
docs/manual/mod/mod_version.xml.meta [new file with mode: 0644]
include/ap_mmn.h
include/ap_release.h
include/httpd.h
modules/metadata/NWGNUmakefile
modules/metadata/NWGNUmodversion [new file with mode: 0644]
modules/metadata/config.m4
modules/metadata/mod_version.c [new file with mode: 0644]
modules/metadata/mod_version.dsp [new file with mode: 0644]
modules/metadata/mod_version.exp [new file with mode: 0644]
server/core.c

index 6f0f2dbe955d9db9ee5dc182bcb6b9b5de504376..ce42ea6ee695da5091155a3c1d2712acd149db96 100644 (file)
@@ -180,6 +180,9 @@ Package=<4>
     Project_Dep_Name mod_usertrack
     End Project Dependency
     Begin Project Dependency
+    Project_Dep_Name mod_version
+    End Project Dependency
+    Begin Project Dependency
     Project_Dep_Name mod_vhost_alias
     End Project Dependency
     Begin Project Dependency
@@ -1587,6 +1590,27 @@ Package=<4>
 
 ###############################################################################
 
+Project: "mod_version"=".\modules\metadata\mod_version.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_vhost_alias"=".\modules\mappers\mod_vhost_alias.dsp" - Package Owner=<4>
 
 Package=<5>
diff --git a/CHANGES b/CHANGES
index 36e89e1ebe67406d6eb907b2f1c1f444724ba11d..4d17685c15580de793702e9ec4428e007b5b5598 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,7 +1,12 @@
                                                          -*- coding: utf-8 -*-
-Changes with Apache 2.0.56-dev
+Changes with Apache 2.0.56
 
+  *) Added new module mod_version, which provides version dependent
+     configuration containers.  [André Malo]
 
+  *) Add core version query function (ap_get_server_revision) and
+     accompanying ap_version_t structure (minor MMN bump).
+     [André Malo]
 
 Changes with Apache 2.0.55
 
index ab7d7c89e6716e8ee64f5c2d91c283f4ee80a4d8..bd3770f2fce10b681a4c4b407c048f60e4441cbc 100644 (file)
@@ -278,6 +278,7 @@ _build:
         $(MAKE) $(MAKEOPT) -f mod_setenvif.mak    CFG="mod_setenvif - Win32 $(LONG)" RECURSE=0 $(CTARGET)
         $(MAKE) $(MAKEOPT) -f mod_unique_id.mak   CFG="mod_unique_id - Win32 $(LONG)" RECURSE=0 $(CTARGET)
         $(MAKE) $(MAKEOPT) -f mod_usertrack.mak   CFG="mod_usertrack - Win32 $(LONG)" RECURSE=0 $(CTARGET)
+        $(MAKE) $(MAKEOPT) -f mod_version.mak     CFG="mod_version - Win32 $(LONG)" RECURSE=0 $(CTARGET)
        cd ..\..
        cd modules\proxy
         $(MAKE) $(MAKEOPT) -f mod_proxy.mak       CFG="mod_proxy - Win32 $(LONG)" RECURSE=0 $(CTARGET)
@@ -408,6 +409,7 @@ _copybin:
        copy modules\metadata\$(LONG)\mod_setenvif.$(src_so)    "$(inst_so)" <.y
        copy modules\metadata\$(LONG)\mod_unique_id.$(src_so)   "$(inst_so)" <.y
        copy modules\metadata\$(LONG)\mod_usertrack.$(src_so)   "$(inst_so)" <.y
+       copy modules\metadata\$(LONG)\mod_version.$(src_so)     "$(inst_so)" <.y
        copy modules\proxy\$(LONG)\mod_proxy.$(src_so)          "$(inst_so)" <.y
        copy modules\proxy\$(LONG)\mod_proxy_connect.$(src_so)  "$(inst_so)" <.y
        copy modules\proxy\$(LONG)\mod_proxy_ftp.$(src_so)      "$(inst_so)" <.y
index 22a37521eab2d6820ae954f3d99f35511b622373..2728ecaa38e7c4b780e3fa371ab55784b50e990e 100644 (file)
@@ -61,6 +61,7 @@ BEGIN {
     print "#LoadModule status_module modules/status.nlm"
     print "#LoadModule unique_id_module modules/uniqueid.nlm"
     print "#LoadModule usertrack_module modules/usertrk.nlm"
+    print "#LoadModule version_module modules/modversion.nlm"
     print "#LoadModule vhost_alias_module modules/vhost.nlm"
     print ""
     next
diff --git a/docs/manual/mod/mod_version.html b/docs/manual/mod/mod_version.html
new file mode 100644 (file)
index 0000000..ee3abd1
--- /dev/null
@@ -0,0 +1,11 @@
+URI: mod_version.html.en
+Content-Language: en
+Content-type: text/html; charset=ISO-8859-1
+
+URI: mod_version.html.ja.euc-jp
+Content-Language: ja
+Content-type: text/html; charset=EUC-JP
+
+URI: mod_version.html.ko.euc-kr
+Content-Language: ko
+Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_version.html.en b/docs/manual/mod/mod_version.html.en
new file mode 100644 (file)
index 0000000..14e077f
--- /dev/null
@@ -0,0 +1,150 @@
+<?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_version - 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 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="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
+<p class="apache">Apache HTTP Server Version 2.0</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-project/">Documentation</a> &gt; <a href="../">Version 2.0</a> &gt; <a href="./">Modules</a></div>
+<div id="page-content">
+<div id="preamble"><h1>Apache Module mod_version</h1>
+<div class="toplang">
+<p><span>Available Languages: </span><a href="../en/mod/mod_version.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../ja/mod/mod_version.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="../ko/mod/mod_version.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>Version dependent configuration</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>version_module</td></tr>
+<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_version.c</td></tr>
+<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.54 and later</td></tr></table>
+<h3>Summary</h3>
+
+    <p>This module is designed for the use in test suites and large
+    networks which have to deal with different httpd versions and
+    different configurations. It provides a new container -- <code class="directive"><a href="#ifversion">&lt;IfVersion&gt;</a></code>, which
+    allows a flexible version checking including numeric comparisons and
+    regular expressions.</p>
+
+    <div class="example"><h3>Examples</h3><p><code>
+      &lt;IfVersion 2.1.0&gt;<br />
+      <span class="indent">
+        # current httpd version is exactly 2.1.0<br />
+      </span>
+      &lt;/IfVersion&gt;<br />
+      <br />
+      &lt;IfVersion &gt;= 2.2&gt;<br />
+      <span class="indent">
+        # use really new features :-)<br />
+      </span>
+      &lt;/IfVersion&gt;
+    </code></p></div>
+
+    <p>See below for further possibilities.</p>
+</div>
+<div id="quickview"><h3 class="directives">Directives</h3>
+<ul id="toc">
+<li><img alt="" src="../images/down.gif" /> <a href="#ifversion">&lt;IfVersion&gt;</a></li>
+</ul>
+</div>
+
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="IfVersion" id="IfVersion">&lt;IfVersion&gt;</a> <a name="ifversion" id="ifversion">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>contains version dependent configuration</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
+&lt;/IfVersion&gt;</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>All</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_version</td></tr>
+</table>
+    <p>The <code class="directive">&lt;IfVersion&gt;</code> section encloses
+    configuration directives which are executed only if the
+    <code class="program"><a href="../programs/httpd.html">httpd</a></code> version
+    matches the desired criteria. For normal (numeric) comparisons the
+    <var>version</var> argument has the format
+    <code><var>major</var>[.<var>minor</var>[.<var>patch</var>]]</code>, e.g.
+    <code>2.1.0</code> or <code>2.2</code>. <var>minor</var> and
+    <var>patch</var> are optional. If these numbers are omitted, they are
+    assumed to be zero. The following numerical <var>operator</var>s are
+    possible:</p>
+
+    <table class="bordered"><tr class="header"><th><var>operator</var></th><th>description</th></tr>
+<tr><td><code>=</code> or <code>==</code></td>
+        <td>httpd version is equal</td></tr>
+<tr class="odd"><td><code>&gt;</code></td>
+        <td>httpd version is greater than</td></tr>
+<tr><td><code>&gt;=</code></td>
+        <td>httpd version is greater or equal</td></tr>
+<tr class="odd"><td><code>&lt;</code></td>
+        <td>httpd version is less than</td></tr>
+<tr><td><code>&lt;=</code></td>
+        <td>httpd version is less or equal</td></tr>
+</table>
+
+    <div class="example"><h3>Example</h3><p><code>
+      &lt;IfVersion &gt;= 2.1&gt;<br />
+      <span class="indent">
+        # this happens only in versions greater or<br />
+        # equal 2.1.0.<br />
+      </span>
+      &lt;/IfVersion&gt;
+    </code></p></div>
+
+    <p>Besides the numerical comparison it is possible to match a regular
+    expression against the httpd version. There are two ways to write it:</p>
+
+    <table class="bordered"><tr class="header"><th><var>operator</var></th><th>description</th></tr>
+<tr><td><code>=</code> or <code>==</code></td>
+        <td><var>version</var> has the form
+            <code>/<var>regex</var>/</code></td></tr>
+<tr class="odd"><td><code>~</code></td>
+        <td><var>version</var> has the form
+            <code><var>regex</var></code></td></tr>
+</table>
+
+    <div class="example"><h3>Example</h3><p><code>
+      &lt;IfVersion = /^2.1.[01234]$/&gt;<br />
+      <span class="indent">
+        # e.g. workaround for buggy versions
+      </span>
+      &lt;/IfVersion&gt;
+    </code></p></div>
+
+    <p>In order to reverse the meaning, all operators can be preceded by an
+    exclamation mark (<code>!</code>):</p>
+
+    <div class="example"><p><code>
+      &lt;IfVersion !~ ^2.1.[01234]$&gt;<br />
+      <span class="indent">
+        # not for those versions<br />
+      </span>
+      &lt;/IfVersion&gt;
+    </code></p></div>
+
+    <p>If the <var>operator</var> is omitted, it is assumed to be
+    <code>=</code>.</p>
+
+</div>
+</div>
+<div class="bottomlang">
+<p><span>Available Languages: </span><a href="../en/mod/mod_version.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../ja/mod/mod_version.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="../ko/mod/mod_version.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div><div id="footer">
+<p class="apache">Copyright 1995-2005 The Apache Software Foundation or its licensors, as applicable.<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="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
+</body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_version.html.ja.euc-jp b/docs/manual/mod/mod_version.html.ja.euc-jp
new file mode 100644 (file)
index 0000000..13da6bc
--- /dev/null
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="EUC-JP"?>
+<!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="ja" xml:lang="ja"><head><!--
+        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+              This file is generated from xml source: DO NOT EDIT
+        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+      -->
+<title>mod_version - Apache HTTP ¥µ¡¼¥Ð</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 href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body>
+<div id="page-header">
+<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
+<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.0</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 ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.0</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
+<div id="page-content">
+<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_version</h1>
+<div class="toplang">
+<p><span>Available Languages: </span><a href="../en/mod/mod_version.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../ja/mod/mod_version.html" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="../ko/mod/mod_version.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div>
+<div class="outofdate">This translation may be out of date. Check the
+            English version for recent changes.</div>
+<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥Ð¡¼¥¸¥ç¥ó°Í¸¤ÎÀßÄê</td></tr>
+<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
+<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>version_module</td></tr>
+<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_version.c</td></tr>
+<tr><th><a href="module-dict.html#Compatibility">¸ß´¹À­:</a></th><td>¥Ð¡¼¥¸¥ç¥ó 2.0.54 °Ê¹ß</td></tr></table>
+<h3>³µÍ×</h3>
+
+    <p>ÍÍ¡¹¤Ê¥Ð¡¼¥¸¥ç¥ó¤Î httpd ¤Î°Û¤Ê¤ëÀßÄê¤ò°·¤¦¤³¤È¤Ë¤Ê¤ë¡¢
+    ¥Æ¥¹¥È¥¹¥¤¡¼¥È¤äÂ絬Ìϥͥåȥ¥¯¤Ç¤Î»ÈÍѤΤ¿¤á¤ËÀ߷פµ¤ì¤Æ¤¤¤Þ¤¹¡£
+    ¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¿·¤·¤¤¥³¥ó¥Æ¥Ê ¡½ <code class="directive"><a href="#ifversion">&lt;IfVersion&gt;</a></code> ¤ò
+    Ä󶡤·¤Þ¤¹¡£¤³¤ì¤ò»È¤¦¤È¡¢¿ô»ú¤ÎÈæ³Ó¤äÀµµ¬É½¸½¤Ë¤è¤ë½ÀÆð¤Ê
+    ¥Ð¡¼¥¸¥ç¥ó¥Á¥§¥Ã¥¯¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
+
+    <div class="example"><h3>Îã</h3><p><code>
+      &lt;IfVersion 2.1.0&gt;<br />
+      <span class="indent">
+        # current httpd version is exactly 2.1.0<br />
+      </span>
+      &lt;/IfVersion&gt;<br />
+      <br />
+      &lt;IfVersion &gt;= 2.2&gt;<br />
+      <span class="indent">
+        # use really new features :-)<br />
+      </span>
+      &lt;/IfVersion&gt;
+    </code></p></div>
+
+    <p>¾ÜºÙ¤Ï°Ê²¼¤òÆÉ¤ó¤Ç¤¯¤À¤µ¤¤¡£</p>
+</div>
+<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
+<ul id="toc">
+<li><img alt="" src="../images/down.gif" /> <a href="#ifversion">&lt;IfVersion&gt;</a></li>
+</ul>
+</div>
+
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="IfVersion" id="IfVersion">&lt;IfVersion&gt;</a> <a name="ifversion" id="ifversion">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Ð¡¼¥¸¥ç¥ó°Í¸¤ÎÀßÄê¤òÆþ¤ì¤ë</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
+&lt;/IfVersion&gt;</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</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_version</td></tr>
+</table>
+    <p><code class="directive">&lt;IfVersion&gt;</code> ¤Ï <code class="program"><a href="../programs/httpd.html">httpd</a></code> ¤Î¥Ð¡¼¥¸¥ç¥ó
+    ¤¬´ð½à¤òËþ¤¿¤·¤¿¤È¤­¤Ë¤Î¤ß¼Â¹Ô¤µ¤»¤¿¤¤¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò°Ï¤ß¤Þ¤¹¡£
+    Ä̾ï¤Î (¿ôÃÍ) Èæ³Ó¤Î¤È¤­¤Ï <var>version</var> °ú¿ô¤Ï
+    <code><var>major</var>[.<var>minor</var>[.<var>patch</var>]]</code> ¤È¤¤¤¦
+    ·Á¼°¡¢Î㤨¤Ð¡¢<code>2.1.0</code> ¤ä <code>2.2</code> ¤È¤Ê¤ê¤Þ¤¹¡£
+    <var>minor</var> ¤È <var>patch</var> ¤Ï¾Êά²Äǽ¤Ç¤¹¡£¾Êά¤µ¤ì¤¿¾ì¹ç¤Ï¡¢
+    0 ¤ò»ØÄꤷ¤¿¤â¤Î¤È¤ß¤Ê¤µ¤ì¤Þ¤¹¡£Èæ³Ó¤Ë¤Ï¼¡¤Î¿ôÃÍ <var>operator</var> ¤ò
+    »ØÄê¤Ç¤­¤Þ¤¹:</p>
+
+    <table class="bordered"><tr class="header"><th><var>operator</var></th><th>ÀâÌÀ</th></tr>
+<tr><td><code>=</code> ¤È <code>==</code></td>
+        <td>Ʊ¤¸ httpd ¥Ð¡¼¥¸¥ç¥ó</td></tr>
+<tr class="odd"><td><code>&gt;</code></td>
+        <td>¤è¤êÂ礭¤¤ httpd ¥Ð¡¼¥¸¥ç¥ó</td></tr>
+<tr><td><code>&gt;=</code></td>
+        <td>»ØÄê°Ê¾å¤Î httpd ¥Ð¡¼¥¸¥ç¥ó</td></tr>
+<tr class="odd"><td><code>&lt;</code></td>
+        <td>»ØÄê̤Ëþ¤Î httpd ¥Ð¡¼¥¸¥ç¥ó</td></tr>
+<tr><td><code>&lt;=</code></td>
+        <td>»ØÄê°Ê²¼¤Î httpd ¥Ð¡¼¥¸¥ç¥ó</td></tr>
+</table>
+
+    <div class="example"><h3>Îã</h3><p><code>
+      &lt;IfVersion &gt;= 2.1&gt;<br />
+      <span class="indent">
+        # this happens only in versions greater or<br />
+        # equal 2.1.0.<br />
+      </span>
+      &lt;/IfVersion&gt;
+    </code></p></div>
+
+    <p>¿ôÃÍÈæ³Ó¤Ë²Ã¤¨¤Æ¡¢http ¤Î¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤ËÂФ·¤ÆÀµµ¬É½¸½¤Ë¤è¤ë
+    ¥Þ¥Ã¥Á¥ó¥°¤¬¤Ç¤­¤Þ¤¹¡£Æó¼ïÎà¤Î½ñ¤­Êý¤¬¤¢¤ê¤Þ¤¹:</p>
+
+    <table class="bordered"><tr class="header"><th><var>operator</var></th><th>ÀâÌÀ</th></tr>
+<tr><td><code>=</code> or <code>==</code></td>
+        <td><var>version</var> ¤Ï
+            <code>/<var>regex</var>/</code> ·Á¼°</td></tr>
+<tr class="odd"><td><code>~</code></td>
+        <td><var>version</var> ¤Ï
+            <code><var>regex</var></code> ·Á¼°</td></tr>
+</table>
+
+    <div class="example"><h3>Îã</h3><p><code>
+      &lt;IfVersion = /^2.1.[01234]$/&gt;<br />
+      <span class="indent">
+        # e.g. workaround for buggy versions
+      </span>
+      &lt;/IfVersion&gt;
+    </code></p></div>
+
+    <p>¥Þ¥Ã¥Á¥ó¥°¤ÎÈÝÄê¤òɽ¸½¤¹¤ë¤¿¤á¤Ë¡¢¤¹¤Ù¤Æ¤Î¥ª¥Ú¥ì¡¼¥¿¤ÏÁ°¤Ë
+    ´¶Ã²Éä (<code>!</code>)¤òÉÕ¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
+
+    <div class="example"><p><code>
+      &lt;IfVersion !~ ^2.1.[01234]$&gt;<br />
+      <span class="indent">
+        # not for those versions<br />
+      </span>
+      &lt;/IfVersion&gt;
+    </code></p></div>
+
+    <p><var>operator</var> ¤¬¾Êά¤µ¤ì¤¿¤È¤­¤Ï <code>=</code> ¤È
+    ¤ß¤Ê¤µ¤ì¤Þ¤¹¡£</p>
+
+</div>
+</div>
+<div class="bottomlang">
+<p><span>Available Languages: </span><a href="../en/mod/mod_version.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../ja/mod/mod_version.html" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="../ko/mod/mod_version.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div><div id="footer">
+<p class="apache">Copyright 1995-2005 The Apache Software Foundation or its licensors, as applicable.<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/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
+</body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_version.html.ko.euc-kr b/docs/manual/mod/mod_version.html.ko.euc-kr
new file mode 100644 (file)
index 0000000..075bef7
--- /dev/null
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="EUC-KR"?>
+<!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="ko" xml:lang="ko"><head><!--
+        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+              This file is generated from xml source: DO NOT EDIT
+        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+      -->
+<title>mod_version - 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 href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body>
+<div id="page-header">
+<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
+<p class="apache">Apache HTTP Server Version 2.0</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-project/">Documentation</a> &gt; <a href="../">Version 2.0</a> &gt; <a href="./">¸ðµâ</a></div>
+<div id="page-content">
+<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_version</h1>
+<div class="toplang">
+<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_version.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../ja/mod/mod_version.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="../ko/mod/mod_version.html" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div>
+<div class="outofdate">ÀÌ ¹®¼­´Â ÃÖ½ÅÆÇ ¹ø¿ªÀÌ ¾Æ´Õ´Ï´Ù.
+            ÃÖ±Ù¿¡ º¯°æµÈ ³»¿ëÀº ¿µ¾î ¹®¼­¸¦ Âü°íÇϼ¼¿ä.</div>
+<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>¹öÀüº° ¼³Á¤</td></tr>
+<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
+<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>version_module</td></tr>
+<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_version.c</td></tr>
+<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.0.54 ÀÌÈĺÎÅÍ</td></tr></table>
+<h3>¿ä¾à</h3>
+
+    <p>¿©·¯ ´Ù¸¥ À¥¼­¹ö ¹öÀü°ú ±¸¼ºÀ» ´Ù·ç¾î¾ß ÇÒ Å« ³×Æ®¿÷°ú
+    Å×½ºÆ®¿ëÀ¸·Î »ç¿ëÇϱâÀ§ÇØ ÀÌ ¸ðµâÀ» ¸¸µé¾ú´Ù. ÀÌ ¸ðµâÀº
+    ¼ýÀÚ ºñ±³³ª Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© ÀÚÀ¯·Î¿î ¹öÀü °Ë»ç°¡ °¡´ÉÇÑ
+    <code class="directive"><a href="#ifversion">&lt;IfVersion&gt;</a></code>À»
+    Á¦°øÇÑ´Ù.</p>
+
+    <div class="example"><h3>¿¹Á¦</h3><p><code>
+      &lt;IfVersion 2.1.0&gt;<br />
+      <span class="indent">
+        # ÇöÀç À¥¼­¹ö ¹öÀüÀº Á¤È®È÷ 2.1.0ÀÌ´Ù<br />
+      </span>
+      &lt;/IfVersion&gt;<br />
+      <br />
+      &lt;IfVersion &gt;= 2.2&gt;<br />
+      <span class="indent">
+        # ÁøÂ¥ »õ·Î¿î ±â´ÉÀ» »ç¿ëÇÑ´Ù :-)<br />
+      </span>
+      &lt;/IfVersion&gt;
+    </code></p></div>
+
+    <p>´Ù¸¥ »ç¿ë¹ýÀº ¾Æ·¡¸¦ Âü°íÇÑ´Ù.</p>
+</div>
+<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
+<ul id="toc">
+<li><img alt="" src="../images/down.gif" /> <a href="#ifversion">&lt;IfVersion&gt;</a></li>
+</ul>
+</div>
+
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="IfVersion" id="IfVersion">&lt;IfVersion&gt;</a> <a name="ifversion" id="ifversion">Áö½Ã¾î</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¹öÀüº° ¼³Á¤À» ¹­´Â´Ù</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
+&lt;/IfVersion&gt;</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>All</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_version</td></tr>
+</table>
+    <p><code class="directive">&lt;IfVersion&gt;</code> ¼½¼ÇÀº
+    À¥¼­¹ö ¹öÀüÀÌ ¿øÇϴ Á¶°ÇÀ» ¸¸Á·ÇÒ¶§¸¸ ½ÇÇàÇÒ ¼³Á¤ Áö½Ã¾î¸¦
+    ¹­´Â´Ù. ÀϹÝÀûÀΠ(¼ýÀÚ) ºñ±³ÀÇ °æ¿ì <var>version</var> ¾Æ±Ô¸ÕÆ®´Â
+    <code>2.1.0</code>À̳ª <code>2.2</code>¿Í °°ÀÌ
+    <code><var>major</var>[.<var>minor</var>[.<var>patch</var>]]</code>
+    Çü½ÄÀÌ´Ù. <var>minor</var>¿Í <var>patch</var>´Â ¾ø¾îµµ µÈ´Ù.
+    À̵頼ýÀÚ°¡ ¾ø´Ù¸é 0À̶ó°í °¡Á¤ÇÑ´Ù. ´ÙÀ½°ú °°Àº ¼ýÀÚ
+    <var>operator</var>°¡ °¡´ÉÇÏ´Ù.</p>
+
+    <table class="bordered"><tr class="header"><th><var>operator</var></th><th>¼³¸í</th></tr>
+<tr><td><code>=</code> È¤Àº <code>==</code></td>
+        <td>µ¿ÀÏÇÑ À¥¼­¹ö ¹öÀü</td></tr>
+<tr class="odd"><td><code>&gt;</code></td>
+        <td>º¸´Ù Å« À¥¼­¹ö ¹öÀü</td></tr>
+<tr><td><code>&gt;=</code></td>
+        <td>Å©°Å³ª °°Àº À¥¼­¹ö ¹öÀü</td></tr>
+<tr class="odd"><td><code>&lt;</code></td>
+        <td>º¸´Ù ÀÛÀº À¥¼­¹ö ¹öÀü</td></tr>
+<tr><td><code>&lt;=</code></td>
+        <td>À۰ųª °°Àº À¥¼­¹ö ¹öÀü</td></tr>
+</table>
+
+    <div class="example"><h3>¿¹Á¦</h3><p><code>
+      &lt;IfVersion &gt;= 2.1&gt;<br />
+      <span class="indent">
+        # ¹öÀüÀÌ 2.1.0 º¸´Ù Å©°Å³ª °°À»¶§¸¸<br />
+        # ½ÇÇàÇÑ´Ù.<br />
+      </span>
+      &lt;/IfVersion&gt;
+    </code></p></div>
+
+    <p>¼ýÀÚ ºñ±³¿Ü¿¡µµ Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© À¥¼­¹ö ¹öÀüÀ» ÁöÁ¤ÇÒ
+    ¼ö ÀÖ´Ù. ¿©±â¿¡´Â µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.</p>
+
+    <table class="bordered"><tr class="header"><th><var>operator</var></th><th>¼³¸í</th></tr>
+<tr><td><code>=</code> È¤Àº <code>==</code></td>
+        <td><var>version</var>Àº
+            <code>/<var>regex</var>/</code> Çü½ÄÀÌ´Ù</td></tr>
+<tr class="odd"><td><code>~</code></td>
+        <td><var>version</var>Àº
+            <code><var>regex</var></code> Çü½ÄÀÌ´Ù</td></tr>
+</table>
+
+    <div class="example"><h3>¿¹Á¦</h3><p><code>
+      &lt;IfVersion = /^2.1.[01234]$/&gt;<br />
+      <span class="indent">
+        # ¿¹¸¦ µé¾î, ¿©±â¿¡ ¹ö±×°¡ Àִ ƯÁ¤ ¹öÀü¿¡ ´ëÇÑ ÇØ°áÃ¥ÀÌ ³ª¿Â´Ù
+      </span>
+      &lt;/IfVersion&gt;
+    </code></p></div>
+
+    <p>¿¬»êÀÚ ¾Õ¿¡ ´À³¦Ç¥(<code>!</code>)¸¦ ¾²¸é Àǹ̸¦ ¹Ý´ë·Î
+    Çؼ®ÇÑ´Ù.</p>
+
+    <div class="example"><p><code>
+      &lt;IfVersion !~ ^2.1.[01234]$&gt;<br />
+      <span class="indent">
+        # ÀÌ ¹öÀüÀÌ ¾Æ´Ï¸é<br />
+      </span>
+      &lt;/IfVersion&gt;
+    </code></p></div>
+
+    <p><var>operator</var>¸¦ »ý·«Çϸé <code>=</code>À̶ó°í
+    »ý°¢ÇÑ´Ù.</p>
+
+</div>
+</div>
+<div class="bottomlang">
+<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_version.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../ja/mod/mod_version.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="../ko/mod/mod_version.html" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div><div id="footer">
+<p class="apache">Copyright 1995-2005 The Apache Software Foundation or its licensors, as applicable.<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/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
+</body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_version.xml b/docs/manual/mod/mod_version.xml
new file mode 100644 (file)
index 0000000..a504951
--- /dev/null
@@ -0,0 +1,137 @@
+<?xml version="1.0"?>
+<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
+<!-- $LastChangedRevision$ -->
+
+<!--
+ Copyright 2004-2005 The Apache Software Foundation or its licensors, as
+ applicable.
+
+ Licensed 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_version.xml.meta">
+<name>mod_version</name>
+<description>Version dependent configuration</description>
+<status>Extension</status>
+<sourcefile>mod_version.c</sourcefile>
+<identifier>version_module</identifier>
+<compatibility>Available in version 2.0.54 and later</compatibility>
+
+<summary>
+    <p>This module is designed for the use in test suites and large
+    networks which have to deal with different httpd versions and
+    different configurations. It provides a new container -- <directive
+    type="section" module="mod_version">IfVersion</directive>, which
+    allows a flexible version checking including numeric comparisons and
+    regular expressions.</p>
+
+    <example><title>Examples</title>
+      &lt;IfVersion 2.1.0&gt;<br />
+      <indent>
+        # current httpd version is exactly 2.1.0<br />
+      </indent>
+      &lt;/IfVersion&gt;<br />
+      <br />
+      &lt;IfVersion >= 2.2&gt;<br />
+      <indent>
+        # use really new features :-)<br />
+      </indent>
+      &lt;/IfVersion&gt;
+    </example>
+
+    <p>See below for further possibilities.</p>
+</summary>
+
+<directivesynopsis type="section">
+<name>IfVersion</name>
+<description>contains version dependent configuration</description>
+<syntax>&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
+&lt;/IfVersion&gt;</syntax>
+<contextlist><context>server config</context><context>virtual host</context>
+<context>directory</context><context>.htaccess</context></contextlist>
+<override>All</override>
+
+<usage>
+    <p>The <directive type="section">IfVersion</directive> section encloses
+    configuration directives which are executed only if the
+    <program>httpd</program> version
+    matches the desired criteria. For normal (numeric) comparisons the
+    <var>version</var> argument has the format
+    <code><var>major</var>[.<var>minor</var>[.<var>patch</var>]]</code>, e.g.
+    <code>2.1.0</code> or <code>2.2</code>. <var>minor</var> and
+    <var>patch</var> are optional. If these numbers are omitted, they are
+    assumed to be zero. The following numerical <var>operator</var>s are
+    possible:</p>
+
+    <table style="zebra" border="1">
+    <tr><th><var>operator</var></th><th>description</th></tr>
+    <tr><td><code>=</code> or <code>==</code></td>
+        <td>httpd version is equal</td></tr>
+    <tr><td><code>&gt;</code></td>
+        <td>httpd version is greater than</td></tr>
+    <tr><td><code>&gt;=</code></td>
+        <td>httpd version is greater or equal</td></tr>
+    <tr><td><code>&lt;</code></td>
+        <td>httpd version is less than</td></tr>
+    <tr><td><code>&lt;=</code></td>
+        <td>httpd version is less or equal</td></tr>
+    </table>
+
+    <example><title>Example</title>
+      &lt;IfVersion >= 2.1&gt;<br />
+      <indent>
+        # this happens only in versions greater or<br />
+        # equal 2.1.0.<br />
+      </indent>
+      &lt;/IfVersion&gt;
+    </example>
+
+    <p>Besides the numerical comparison it is possible to match a regular
+    expression against the httpd version. There are two ways to write it:</p>
+
+    <table style="zebra" border="1">
+    <tr><th><var>operator</var></th><th>description</th></tr>
+    <tr><td><code>=</code> or <code>==</code></td>
+        <td><var>version</var> has the form
+            <code>/<var>regex</var>/</code></td></tr>
+    <tr><td><code>~</code></td>
+        <td><var>version</var> has the form
+            <code><var>regex</var></code></td></tr>
+    </table>
+
+    <example><title>Example</title>
+      &lt;IfVersion = /^2.1.[01234]$/&gt;<br />
+      <indent>
+        # e.g. workaround for buggy versions
+      </indent>
+      &lt;/IfVersion&gt;
+    </example>
+
+    <p>In order to reverse the meaning, all operators can be preceded by an
+    exclamation mark (<code>!</code>):</p>
+
+    <example>
+      &lt;IfVersion !~ ^2.1.[01234]$&gt;<br />
+      <indent>
+        # not for those versions<br />
+      </indent>
+      &lt;/IfVersion&gt;
+    </example>
+
+    <p>If the <var>operator</var> is omitted, it is assumed to be
+    <code>=</code>.</p>
+</usage>
+</directivesynopsis>
+
+</modulesynopsis>
diff --git a/docs/manual/mod/mod_version.xml.ja b/docs/manual/mod/mod_version.xml.ja
new file mode 100644 (file)
index 0000000..dbd0c49
--- /dev/null
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="iso-2022-jp"?>
+<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
+<!-- English Revision: 151408:160791 (outdated) -->
+
+<!--
+ Copyright 2004-2005 The Apache Software Foundation or its licensors,
+                     as applicable.
+
+ Licensed 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_version.xml.meta">
+<name>mod_version</name>
+<description>\e$B%P!<%8%g%s0MB8$N@_Dj\e(B</description>
+<status>Extension</status>
+<sourcefile>mod_version.c</sourcefile>
+<identifier>version_module</identifier>
+<compatibility>\e$B%P!<%8%g%s\e(B 2.0.54 \e$B0J9_\e(B</compatibility>
+
+<summary>
+    <p>\e$BMM!9$J%P!<%8%g%s$N\e(B httpd \e$B$N0[$J$k@_Dj$r07$&$3$H$K$J$k!"\e(B
+    \e$B%F%9%H%9%$!<%H$dBg5,LO%M%C%H%o!<%/$G$N;HMQ$N$?$a$K@_7W$5$l$F$$$^$9!#\e(B
+    \e$B$3$N%b%8%e!<%k$O?7$7$$%3%s%F%J\e(B \e$B!=\e(B <directive
+    type="section" module="mod_version">IfVersion</directive> \e$B$r\e(B
+    \e$BDs6!$7$^$9!#$3$l$r;H$&$H!"?t;z$NHf3S$d@55,I=8=$K$h$k=@Fp$J\e(B
+    \e$B%P!<%8%g%s%A%'%C%/$,$G$-$k$h$&$K$J$j$^$9!#\e(B</p>
+
+    <example><title>\e$BNc\e(B</title>
+      &lt;IfVersion 2.1.0&gt;<br />
+      <indent>
+        # current httpd version is exactly 2.1.0<br />
+      </indent>
+      &lt;/IfVersion&gt;<br />
+      <br />
+      &lt;IfVersion >= 2.2&gt;<br />
+      <indent>
+        # use really new features :-)<br />
+      </indent>
+      &lt;/IfVersion&gt;
+    </example>
+
+    <p>\e$B>\:Y$O0J2<$rFI$s$G$/$@$5$$!#\e(B</p>
+</summary>
+
+<directivesynopsis type="section">
+<name>IfVersion</name>
+<description>\e$B%P!<%8%g%s0MB8$N@_Dj$rF~$l$k\e(B</description>
+<syntax>&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
+&lt;/IfVersion&gt;</syntax>
+<contextlist><context>server config</context><context>virtual host</context>
+<context>directory</context><context>.htaccess</context></contextlist>
+<override>All</override>
+
+<usage>
+    <p><directive type="section">IfVersion</directive> \e$B$O\e(B <program>httpd</program> \e$B$N%P!<%8%g%s\e(B
+    \e$B$,4p=`$rK~$?$7$?$H$-$K$N$_<B9T$5$;$?$$%G%#%l%/%F%#%V$r0O$_$^$9!#\e(B
+    \e$BDL>o$N\e(B (\e$B?tCM\e(B) \e$BHf3S$N$H$-$O\e(B <var>version</var> \e$B0z?t$O\e(B
+    <code><var>major</var>[.<var>minor</var>[.<var>patch</var>]]</code> \e$B$H$$$&\e(B
+    \e$B7A<0!"Nc$($P!"\e(B<code>2.1.0</code> \e$B$d\e(B <code>2.2</code> \e$B$H$J$j$^$9!#\e(B
+    <var>minor</var> \e$B$H\e(B <var>patch</var> \e$B$O>JN,2DG=$G$9!#>JN,$5$l$?>l9g$O!"\e(B
+    0 \e$B$r;XDj$7$?$b$N$H$_$J$5$l$^$9!#Hf3S$K$O<!$N?tCM\e(B <var>operator</var> \e$B$r\e(B
+    \e$B;XDj$G$-$^$9\e(B:</p>
+
+    <table style="zebra" border="1">
+    <tr><th><var>operator</var></th><th>\e$B@bL@\e(B</th></tr>
+    <tr><td><code>=</code> \e$B$H\e(B <code>==</code></td>
+        <td>\e$BF1$8\e(B httpd \e$B%P!<%8%g%s\e(B</td></tr>
+    <tr><td><code>&gt;</code></td>
+        <td>\e$B$h$jBg$-$$\e(B httpd \e$B%P!<%8%g%s\e(B</td></tr>
+    <tr><td><code>&gt;=</code></td>
+        <td>\e$B;XDj0J>e$N\e(B httpd \e$B%P!<%8%g%s\e(B</td></tr>
+    <tr><td><code>&lt;</code></td>
+        <td>\e$B;XDjL$K~$N\e(B httpd \e$B%P!<%8%g%s\e(B</td></tr>
+    <tr><td><code>&lt;=</code></td>
+        <td>\e$B;XDj0J2<$N\e(B httpd \e$B%P!<%8%g%s\e(B</td></tr>
+    </table>
+
+    <example><title>\e$BNc\e(B</title>
+      &lt;IfVersion >= 2.1&gt;<br />
+      <indent>
+        # this happens only in versions greater or<br />
+        # equal 2.1.0.<br />
+      </indent>
+      &lt;/IfVersion&gt;
+    </example>
+
+    <p>\e$B?tCMHf3S$K2C$($F!"\e(Bhttp \e$B$N%P!<%8%g%sHV9f$KBP$7$F@55,I=8=$K$h$k\e(B
+    \e$B%^%C%A%s%0$,$G$-$^$9!#Fs<oN`$N=q$-J}$,$"$j$^$9\e(B:</p>
+
+    <table style="zebra" border="1">
+    <tr><th><var>operator</var></th><th>\e$B@bL@\e(B</th></tr>
+    <tr><td><code>=</code> or <code>==</code></td>
+        <td><var>version</var> \e$B$O\e(B
+            <code>/<var>regex</var>/</code> \e$B7A<0\e(B</td></tr>
+    <tr><td><code>~</code></td>
+        <td><var>version</var> \e$B$O\e(B
+            <code><var>regex</var></code> \e$B7A<0\e(B</td></tr>
+    </table>
+
+    <example><title>\e$BNc\e(B</title>
+      &lt;IfVersion = /^2.1.[01234]$/&gt;<br />
+      <indent>
+        # e.g. workaround for buggy versions
+      </indent>
+      &lt;/IfVersion&gt;
+    </example>
+
+    <p>\e$B%^%C%A%s%0$NH]Dj$rI=8=$9$k$?$a$K!"$9$Y$F$N%*%Z%l!<%?$OA0$K\e(B
+    \e$B46C2Id\e(B (<code>!</code>)\e$B$rIU$1$k$3$H$,$G$-$^$9\e(B:</p>
+
+    <example>
+      &lt;IfVersion !~ ^2.1.[01234]$&gt;<br />
+      <indent>
+        # not for those versions<br />
+      </indent>
+      &lt;/IfVersion&gt;
+    </example>
+
+    <p><var>operator</var> \e$B$,>JN,$5$l$?$H$-$O\e(B <code>=</code> \e$B$H\e(B
+    \e$B$_$J$5$l$^$9!#\e(B</p>
+</usage>
+</directivesynopsis>
+
+</modulesynopsis>
diff --git a/docs/manual/mod/mod_version.xml.ko b/docs/manual/mod/mod_version.xml.ko
new file mode 100644 (file)
index 0000000..b705963
--- /dev/null
@@ -0,0 +1,134 @@
+<?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: 105989:160791 (outdated) -->
+
+<!--
+ Copyright 2004-2005 The Apache Software Foundation or its licensors,
+                     as applicable.
+
+ Licensed 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_version.xml.meta">
+<name>mod_version</name>
+<description>¹öÀüº° ¼³Á¤</description>
+<status>Extension</status>
+<sourcefile>mod_version.c</sourcefile>
+<identifier>version_module</identifier>
+<compatibility>¾ÆÆÄÄ¡ 2.0.54 ÀÌÈĺÎÅÍ</compatibility>
+
+<summary>
+    <p>¿©·¯ ´Ù¸¥ À¥¼­¹ö ¹öÀü°ú ±¸¼ºÀ» ´Ù·ç¾î¾ß ÇÒ Å« ³×Æ®¿÷°ú
+    Å×½ºÆ®¿ëÀ¸·Î »ç¿ëÇϱâÀ§ÇØ ÀÌ ¸ðµâÀ» ¸¸µé¾ú´Ù. ÀÌ ¸ðµâÀº
+    ¼ýÀÚ ºñ±³³ª Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© ÀÚÀ¯·Î¿î ¹öÀü °Ë»ç°¡ °¡´ÉÇÑ
+    <directive type="section" module="mod_version">IfVersion</directive>À»
+    Á¦°øÇÑ´Ù.</p>
+
+    <example><title>¿¹Á¦</title>
+      &lt;IfVersion 2.1.0&gt;<br />
+      <indent>
+        # ÇöÀç À¥¼­¹ö ¹öÀüÀº Á¤È®È÷ 2.1.0ÀÌ´Ù<br />
+      </indent>
+      &lt;/IfVersion&gt;<br />
+      <br />
+      &lt;IfVersion >= 2.2&gt;<br />
+      <indent>
+        # ÁøÂ¥ »õ·Î¿î ±â´ÉÀ» »ç¿ëÇÑ´Ù :-)<br />
+      </indent>
+      &lt;/IfVersion&gt;
+    </example>
+
+    <p>´Ù¸¥ »ç¿ë¹ýÀº ¾Æ·¡¸¦ Âü°íÇÑ´Ù.</p>
+</summary>
+
+<directivesynopsis type="section">
+<name>IfVersion</name>
+<description>¹öÀüº° ¼³Á¤À» ¹­´Â´Ù</description>
+<syntax>&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
+&lt;/IfVersion&gt;</syntax>
+<contextlist><context>server config</context><context>virtual host</context>
+<context>directory</context><context>.htaccess</context></contextlist>
+<override>All</override>
+
+<usage>
+    <p><directive type="section">IfVersion</directive> ¼½¼ÇÀº
+    À¥¼­¹ö ¹öÀüÀÌ ¿øÇϴ Á¶°ÇÀ» ¸¸Á·ÇÒ¶§¸¸ ½ÇÇàÇÒ ¼³Á¤ Áö½Ã¾î¸¦
+    ¹­´Â´Ù. ÀϹÝÀûÀΠ(¼ýÀÚ) ºñ±³ÀÇ °æ¿ì <var>version</var> ¾Æ±Ô¸ÕÆ®´Â
+    <code>2.1.0</code>À̳ª <code>2.2</code>¿Í °°ÀÌ
+    <code><var>major</var>[.<var>minor</var>[.<var>patch</var>]]</code>
+    Çü½ÄÀÌ´Ù. <var>minor</var>¿Í <var>patch</var>´Â ¾ø¾îµµ µÈ´Ù.
+    À̵頼ýÀÚ°¡ ¾ø´Ù¸é 0À̶ó°í °¡Á¤ÇÑ´Ù. ´ÙÀ½°ú °°Àº ¼ýÀÚ
+    <var>operator</var>°¡ °¡´ÉÇÏ´Ù.</p>
+
+    <table style="zebra" border="1">
+    <tr><th><var>operator</var></th><th>¼³¸í</th></tr>
+    <tr><td><code>=</code> È¤Àº <code>==</code></td>
+        <td>µ¿ÀÏÇÑ À¥¼­¹ö ¹öÀü</td></tr>
+    <tr><td><code>&gt;</code></td>
+        <td>º¸´Ù Å« À¥¼­¹ö ¹öÀü</td></tr>
+    <tr><td><code>&gt;=</code></td>
+        <td>Å©°Å³ª °°Àº À¥¼­¹ö ¹öÀü</td></tr>
+    <tr><td><code>&lt;</code></td>
+        <td>º¸´Ù ÀÛÀº À¥¼­¹ö ¹öÀü</td></tr>
+    <tr><td><code>&lt;=</code></td>
+        <td>À۰ųª °°Àº À¥¼­¹ö ¹öÀü</td></tr>
+    </table>
+
+    <example><title>¿¹Á¦</title>
+      &lt;IfVersion >= 2.1&gt;<br />
+      <indent>
+        # ¹öÀüÀÌ 2.1.0 º¸´Ù Å©°Å³ª °°À»¶§¸¸<br />
+        # ½ÇÇàÇÑ´Ù.<br />
+      </indent>
+      &lt;/IfVersion&gt;
+    </example>
+
+    <p>¼ýÀÚ ºñ±³¿Ü¿¡µµ Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© À¥¼­¹ö ¹öÀüÀ» ÁöÁ¤ÇÒ
+    ¼ö ÀÖ´Ù. ¿©±â¿¡´Â µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.</p>
+
+    <table style="zebra" border="1">
+    <tr><th><var>operator</var></th><th>¼³¸í</th></tr>
+    <tr><td><code>=</code> È¤Àº <code>==</code></td>
+        <td><var>version</var>Àº
+            <code>/<var>regex</var>/</code> Çü½ÄÀÌ´Ù</td></tr>
+    <tr><td><code>~</code></td>
+        <td><var>version</var>Àº
+            <code><var>regex</var></code> Çü½ÄÀÌ´Ù</td></tr>
+    </table>
+
+    <example><title>¿¹Á¦</title>
+      &lt;IfVersion = /^2.1.[01234]$/&gt;<br />
+      <indent>
+        # ¿¹¸¦ µé¾î, ¿©±â¿¡ ¹ö±×°¡ Àִ ƯÁ¤ ¹öÀü¿¡ ´ëÇÑ ÇØ°áÃ¥ÀÌ ³ª¿Â´Ù
+      </indent>
+      &lt;/IfVersion&gt;
+    </example>
+
+    <p>¿¬»êÀÚ ¾Õ¿¡ ´À³¦Ç¥(<code>!</code>)¸¦ ¾²¸é Àǹ̸¦ ¹Ý´ë·Î
+    Çؼ®ÇÑ´Ù.</p>
+
+    <example>
+      &lt;IfVersion !~ ^2.1.[01234]$&gt;<br />
+      <indent>
+        # ÀÌ ¹öÀüÀÌ ¾Æ´Ï¸é<br />
+      </indent>
+      &lt;/IfVersion&gt;
+    </example>
+
+    <p><var>operator</var>¸¦ »ý·«Çϸé <code>=</code>À̶ó°í
+    »ý°¢ÇÑ´Ù.</p>
+</usage>
+</directivesynopsis>
+
+</modulesynopsis>
diff --git a/docs/manual/mod/mod_version.xml.meta b/docs/manual/mod/mod_version.xml.meta
new file mode 100644 (file)
index 0000000..06c244b
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<metafile>
+  <basename>mod_version</basename>
+  <path>/mod/</path>
+  <relpath>..</relpath>
+
+  <variants>
+    <variant>en</variant>
+    <variant outdated="yes">ja</variant>
+    <variant outdated="yes">ko</variant>
+  </variants>
+</metafile>
index f6da660774f7ce5c6db645bf9cb85d8870c239e0..39c1c61e6a21f68979dd840da00f809641f51437 100644 (file)
@@ -85,6 +85,7 @@
  *                         calling ap_setup_prelinked_modules
  * 20020903.10 (2.0.55-dev) add ap_log_cerror()
  * 20020903.11 (2.0.55-dev) added trace_enable to core_server_config
+ * 20020903.12 (2.0.56-dev) added ap_get_server_revision / ap_version_t
  */
 
 #define MODULE_MAGIC_COOKIE 0x41503230UL /* "AP20" */
@@ -92,7 +93,7 @@
 #ifndef MODULE_MAGIC_NUMBER_MAJOR
 #define MODULE_MAGIC_NUMBER_MAJOR 20020903
 #endif
-#define MODULE_MAGIC_NUMBER_MINOR 11                    /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 12                    /* 0...n */
 
 /**
  * Determine if the server's current MODULE_MAGIC_NUMBER is at least a
index f137039787b3e7dc2573e5a275a01cbece30af8e..442da522578b4fb3787cb6c8619021fe3269b771 100644 (file)
@@ -17,6 +17,8 @@
 #ifndef AP_RELEASE_H
 #define AP_RELEASE_H
 
+#include "apr_general.h" /* stringify */
+
 /*
  * The below defines the base string of the Server: header. Additional
  * tokens can be added via the ap_add_version_component() API call.
  */
 #define AP_SERVER_BASEVENDOR "Apache Software Foundation"
 #define AP_SERVER_BASEPRODUCT "Apache"
-#define AP_SERVER_MAJORVERSION "2"
-#define AP_SERVER_MINORVERSION "0"
-#define AP_SERVER_PATCHLEVEL "56-dev"
+
+#define AP_SERVER_MAJORVERSION_NUMBER 2
+#define AP_SERVER_MINORVERSION_NUMBER 0
+#define AP_SERVER_PATCHLEVEL_NUMBER   56
+#define AP_SERVER_ADD_STRING          "-dev"
+
+/* keep old macros as well */
+#define AP_SERVER_MAJORVERSION APR_STRINGIFY(AP_SERVER_MAJORVERSION_NUMBER)
+#define AP_SERVER_MINORVERSION APR_STRINGIFY(AP_SERVER_MINORVERSION_NUMBER)
+#define AP_SERVER_PATCHLEVEL APR_STRINGIFY(AP_SERVER_PATCHLEVEL_NUMBER) \
+                              AP_SERVER_ADD_STRING
+
 #define AP_SERVER_MINORREVISION AP_SERVER_MAJORVERSION "." AP_SERVER_MINORVERSION
 #define AP_SERVER_BASEREVISION  AP_SERVER_MINORREVISION "." AP_SERVER_PATCHLEVEL
 #define AP_SERVER_BASEVERSION AP_SERVER_BASEPRODUCT "/" AP_SERVER_BASEREVISION
index 16dad6cae6c649495a4462c9cbf33a807b74738e..2417582d327a44ba61e86f46dc0521d064e171c8 100644 (file)
@@ -378,6 +378,25 @@ extern "C" {
 # define AP_CORE_DECLARE_NONSTD        AP_DECLARE_NONSTD
 #endif
 
+/** 
+ * The numeric version information is broken out into fields within this 
+ * structure. 
+ */
+typedef struct {
+    int major;              /**< major number */
+    int minor;              /**< minor number */
+    int patch;              /**< patch number */
+    const char *add_string; /**< additional string like "-dev" */
+} ap_version_t;
+
+/**
+ * Return httpd's version information in a numeric form.
+ *
+ *  @param version Pointer to a version structure for returning the version
+ *                 information.
+ */
+AP_DECLARE(void) ap_get_server_revision(ap_version_t *version);
+
 /**
  * Get the server version string
  * @return The server version string
index c23e762a0fc1749fbb4c21ac191a2bc546aa4546..fe1ecf21637a4f71a751448bd9b31cba7add8dba 100644 (file)
@@ -159,6 +159,7 @@ TARGET_nlm = \
        $(OBJDIR)/mimemagi.nlm \
        $(OBJDIR)/uniqueid.nlm \
        $(OBJDIR)/usertrk.nlm \
+       $(OBJDIR)/modversion.nlm \
        $(EOLIST)
 
 #
diff --git a/modules/metadata/NWGNUmodversion b/modules/metadata/NWGNUmodversion
new file mode 100644 (file)
index 0000000..47b2469
--- /dev/null
@@ -0,0 +1,250 @@
+#
+# Make sure all needed macro's are defined
+#
+
+#
+# Get the 'head' of the build environment if necessary.  This includes default
+# targets and paths to tools
+#
+
+ifndef EnvironmentDefined
+include $(AP_WORK)\build\NWGNUhead.inc
+endif
+
+#
+# These directories will be at the beginning of the include list, followed by
+# INCDIRS
+#
+XINCDIRS       += \
+                       $(AP_WORK)/include \
+                       $(NWOS) \
+                       $(AP_WORK)/modules/arch/netware \
+                       $(AP_WORK)/srclib/apr/include \
+                       $(AP_WORK)/srclib/apr-util/include \
+                       $(AP_WORK)/srclib/apr \
+                       $(EOLIST)
+
+#
+# These flags will come after CFLAGS
+#
+XCFLAGS                += \
+                       -prefix pre_nw.h \
+                       $(EOLIST)
+
+#
+# These defines will come after DEFINES
+#
+XDEFINES       += \
+                       $(EOLIST)
+
+#
+# These flags will be added to the link.opt file
+#
+XLFLAGS                += \
+                       $(EOLIST)
+
+#
+# These values will be appended to the correct variables based on the value of
+# RELEASE
+#
+ifeq "$(RELEASE)" "debug"
+XINCDIRS       += \
+                       $(EOLIST)
+
+XCFLAGS                += \
+                       $(EOLIST)
+
+XDEFINES       += \
+                       $(EOLIST)
+
+XLFLAGS                += \
+                       $(EOLIST)
+endif
+
+ifeq "$(RELEASE)" "noopt"
+XINCDIRS       += \
+                       $(EOLIST)
+
+XCFLAGS                += \
+                       $(EOLIST)
+
+XDEFINES       += \
+                       $(EOLIST)
+
+XLFLAGS                += \
+                       $(EOLIST)
+endif
+
+ifeq "$(RELEASE)" "release"
+XINCDIRS       += \
+                       $(EOLIST)
+
+XCFLAGS                += \
+                       $(EOLIST)
+
+XDEFINES       += \
+                       $(EOLIST)
+
+XLFLAGS                += \
+                       $(EOLIST)
+endif
+
+#
+# These are used by the link target if an NLM is being generated
+# This is used by the link 'name' directive to name the nlm.  If left blank
+# TARGET_nlm (see below) will be used.
+#
+NLM_NAME               = modversion
+
+#
+# This is used by the link '-desc ' directive. 
+# If left blank, NLM_NAME will be used.
+#
+NLM_DESCRIPTION        = Apache $(VERSION_STR) Version Module
+
+#
+# This is used by the '-threadname' directive.  If left blank,
+# NLM_NAME Thread will be used.
+#
+NLM_THREAD_NAME        = Version Module
+
+#
+# If this is specified, it will override VERSION value in 
+# $(AP_WORK)\build\NWGNUenvironment.inc
+#
+NLM_VERSION            =
+
+#
+# If this is specified, it will override the default of 64K
+#
+NLM_STACK_SIZE = 8192
+
+
+#
+# If this is specified it will be used by the link '-entry' directive
+#
+NLM_ENTRY_SYM  = _LibCPrelude
+
+#
+# If this is specified it will be used by the link '-exit' directive
+#
+NLM_EXIT_SYM   = _LibCPostlude
+
+#
+# If this is specified it will be used by the link '-check' directive
+#
+NLM_CHECK_SYM  =
+
+#
+# If these are specified it will be used by the link '-flags' directive
+#
+NLM_FLAGS              =  AUTOUNLOAD, PSEUDOPREEMPTION
+
+#
+# If this is specified it will be linked in with the XDCData option in the def 
+# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
+# by setting APACHE_UNIPROC in the environment
+#
+XDCDATA         = 
+
+#
+# If there is an NLM target, put it here
+#
+TARGET_nlm = \
+       $(OBJDIR)/$(NLM_NAME).nlm \
+       $(EOLIST)
+
+#
+# If there is an LIB target, put it here
+#
+TARGET_lib = \
+       $(EOLIST)
+
+#
+# These are the OBJ files needed to create the NLM target above.
+# Paths must all use the '/' character
+#
+FILES_nlm_objs = \
+       $(OBJDIR)/mod_version.o \
+       $(EOLIST)
+
+#
+# These are the LIB files needed to create the NLM target above.
+# These will be added as a library command in the link.opt file.
+#
+FILES_nlm_libs = \
+       libcpre.o \
+       $(EOLIST)
+
+#
+# These are the modules that the above NLM target depends on to load.
+# These will be added as a module command in the link.opt file.
+#
+FILES_nlm_modules = \
+       aprlib \
+       libc \
+       $(EOLIST)
+
+#
+# If the nlm has a msg file, put it's path here
+#
+FILE_nlm_msg =
+#
+# If the nlm has a hlp file put it's path here
+#
+FILE_nlm_hlp =
+
+#
+# If this is specified, it will override $(NWOS)\copyright.txt.
+#
+FILE_nlm_copyright =
+
+#
+# Any additional imports go here
+#
+FILES_nlm_Ximports = \
+       @$(APR)/aprlib.imp \
+       @$(NWOS)/httpd.imp \
+       @libc.imp \
+       $(EOLIST)
+#   
+# Any symbols exported to here
+#
+FILES_nlm_exports = \
+       version_module \
+       $(EOLIST)
+       
+#   
+# These are the OBJ files needed to create the LIB target above.
+# Paths must all use the '/' character
+#
+FILES_lib_objs = \
+               $(EOLIST)
+
+#
+# implement targets and dependancies (leave this section alone)
+#
+
+libs :: $(OBJDIR) $(TARGET_lib)
+
+nlms :: libs $(TARGET_nlm)
+
+#
+# Updated this target to create necessary directories and copy files to the 
+# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
+#
+install :: nlms FORCE
+
+#
+# Any specialized rules here
+#
+
+#
+# Include the 'tail' makefile that has targets that depend on variables defined
+# in this makefile
+#
+
+include $(AP_WORK)\build\NWGNUtail.inc
+
index cd08b428765f5a108f9d40a6c611601d2565c317..3fc1b2ced68588d2d83769fa46407d24526413cb 100644 (file)
@@ -17,6 +17,7 @@ APACHE_MODULE(usertrack, user-session tracking, , , , [
 
 APACHE_MODULE(unique_id, per-request unique ids)
 APACHE_MODULE(setenvif, basing ENV vars on headers, , , yes)
+APACHE_MODULE(version, determining httpd version in config files)
 
 APR_ADDTO(LT_LDFLAGS,-export-dynamic)
 
diff --git a/modules/metadata/mod_version.c b/modules/metadata/mod_version.c
new file mode 100644 (file)
index 0000000..9b042b7
--- /dev/null
@@ -0,0 +1,312 @@
+/* Copyright 2004-2005 The Apache Software Foundation or its licensors,
+ * as applicable
+ *
+ * Licensed 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.
+ */
+
+/*
+ * mod_version.c
+ * Allow conditional configuration depending on the httpd version
+ * 
+ * André Malo (nd/perlig.de), January 2004
+ *
+ * Some stuff coded here is heavily based on the core <IfModule>
+ * containers.
+ *
+ * The module makes the following confgurations possible:
+ *
+ * <IfVersion op major.minor.patch>
+ *     # conditional config here ...
+ *</IfVersion>
+ *
+ * where "op" is one of:
+ * = / ==       equal
+ * >            greater than
+ * >=           greater or equal
+ * <            less than
+ * <=           less or equal
+ *
+ * If minor version and patch level are omitted they are assumed to be 0.
+ *
+ * Alternatively you can match the whole version (including some vendor-added
+ * string of the CORE version, see ap_release.h) against a regular expression:
+ *
+ * <IfVersion op regex>
+ *     # conditional config here ...
+ *</IfVersion>
+ *
+ * where "op" is one of:
+ * = / ==       match; regex must be surrounded by slashes
+ * ~            match; regex MAY NOT be surrounded by slashes
+ *
+ * Note that all operators may be preceeded by an exclamation mark
+ * (without spaces) in order to reverse their meaning.
+ *
+ */
+
+#include "apr.h"
+#include "apr_strings.h"
+#include "apr_lib.h"
+
+#include "httpd.h"
+#include "http_config.h"
+#include "http_log.h"
+
+
+/* module structure */
+module AP_MODULE_DECLARE_DATA version_module;
+
+/* queried httpd version */
+static ap_version_t httpd_version;
+
+
+/*
+ * compare the supplied version with the core one
+ */
+static int compare_version(char *version_string, const char **error)
+{
+    char *p = version_string, *ep;
+    int version[3] = {0, 0, 0};
+    int c = 0;
+
+    *error = "Version appears to be invalid. It must have the format "
+             "major[.minor[.patch]] where major, minor and patch are "
+             "numbers.";
+
+    if (!apr_isdigit(*p)) {
+        return 0;
+    }
+
+    /* parse supplied version */
+    ep = version_string + strlen(version_string);
+    while (p <= ep && c < 3) {
+        if (*p == '.') {
+            *p = '\0';
+        }
+
+        if (!*p) {
+            version[c++] = atoi(version_string);
+            version_string = ++p;
+            continue;
+        }
+
+        if (!apr_isdigit(*p)) {
+            break;
+        }
+
+        ++p;
+    }
+
+    if (p < ep) { /* syntax error */
+        return 0;
+    }
+
+    *error = NULL;
+
+    if      (httpd_version.major > version[0]) {
+        return 1;
+    }
+    else if (httpd_version.major < version[0]) {
+        return -1;
+    }
+    else if (httpd_version.minor > version[1]) {
+        return 1;
+    }
+    else if (httpd_version.minor < version[1]) {
+        return -1;
+    }
+    else if (httpd_version.patch > version[2]) {
+        return 1;
+    }
+    else if (httpd_version.patch < version[2]) {
+        return -1;
+    }
+
+    /* seems to be the same */
+    return 0;
+}
+
+/*
+ * match version against a regular expression
+ */
+static int match_version(apr_pool_t *pool, char *version_string,
+                         const char **error)
+{
+    regex_t *compiled;
+    const char *to_match;
+    int rc;
+
+    compiled = ap_pregcomp(pool, version_string, REG_EXTENDED);
+    if (!compiled) {
+        *error = "Unable to compile regular expression";
+        return 0;
+    }
+
+    *error = NULL;
+
+    to_match = apr_psprintf(pool, "%d.%d.%d%s",
+                            httpd_version.major,
+                            httpd_version.minor,
+                            httpd_version.patch,
+                            httpd_version.add_string);
+
+    rc = !ap_regexec(compiled, to_match, 0, NULL, 0);
+
+    ap_pregfree(pool, compiled);
+    return rc;    
+}
+
+/*
+ * Implements the <IfVersion> container
+ */
+static const char *start_ifversion(cmd_parms *cmd, void *mconfig,
+                                   const char *arg1, const char *arg2,
+                                   const char *arg3)
+{
+    const char *endp;
+    int reverse = 0, done = 0, match = 0, compare;
+    const char *p, *error;
+    char c;
+
+    /* supplying one argument is possible, we assume an equality check then */
+    if (!arg2) {
+        arg2 = arg1;
+        arg1 = "=";
+    }
+
+    /* surrounding quotes without operator */
+    if (!arg3 && *arg2 == '>' && !arg2[1]) {
+        arg3 = ">";
+        arg2 = arg1;
+        arg1 = "=";
+    }
+
+    /* the third argument makes version surrounding quotes plus operator
+     * possible.
+     */
+    endp = arg2 + strlen(arg2);
+    if (   endp == arg2
+        || (!(arg3 && *arg3 == '>' && !arg3[1]) && *--endp != '>')) {
+        return apr_pstrcat(cmd->pool, cmd->cmd->name,
+                           "> directive missing closing '>'", NULL);
+    }
+
+    p = arg1;
+    if (*p == '!') {
+        reverse = 1;
+        if (p[1]) {
+            ++p;
+        }
+    }
+
+    c = *p++;
+    if (!*p || (*p == '=' && !p[1] && c != '~')) {
+        if (!httpd_version.major) {
+            ap_get_server_revision(&httpd_version);
+        }
+
+        done = 1;
+        switch (c) {
+        case '=':
+            /* normal comparison */
+            if (*arg2 != '/') {
+                compare = compare_version(apr_pstrmemdup(cmd->pool, arg2,
+                                                         endp-arg2),
+                                          &error);
+                if (error) {
+                    return error;
+                }
+
+                match = !compare;
+                break;
+            }
+
+            /* regexp otherwise */
+            if (endp == ++arg2 || *--endp != '/') {
+                return "Missing delimiting / of regular expression.";
+            }
+
+        case '~':
+            /* regular expression */
+            match = match_version(cmd->pool, apr_pstrmemdup(cmd->pool, arg2,
+                                                            endp-arg2),
+                                  &error);
+            if (error) {
+                return error;
+            }
+            break;
+
+        case '<':
+            compare = compare_version(apr_pstrmemdup(cmd->pool, arg2,
+                                                     endp-arg2),
+                                      &error);
+            if (error) {
+                return error;
+            }
+
+            match = ((-1 == compare) || (*p && !compare));
+            break;
+
+        case '>':
+            compare = compare_version(apr_pstrmemdup(cmd->pool, arg2,
+                                                     endp-arg2),
+                                      &error);
+            if (error) {
+                return error;
+            }
+
+            match = ((1 == compare) || (*p && !compare));
+            break;
+
+        default:
+            done = 0;
+            break;
+        }
+    }
+
+    if (!done) {
+        return apr_pstrcat(cmd->pool, "unrecognized operator '", arg1, "'",
+                           NULL);
+    }
+
+    if ((!reverse && match) || (reverse && !match)) {
+        ap_directive_t *parent = NULL;
+        ap_directive_t *current = NULL;
+        const char *retval;
+
+        retval = ap_build_cont_config(cmd->pool, cmd->temp_pool, cmd,
+                                      &current, &parent, "<IfVersion");
+        *(ap_directive_t **)mconfig = current;
+        return retval;
+    }
+
+    *(ap_directive_t **)mconfig = NULL;
+    return ap_soak_end_container(cmd, "<IfVersion");
+}
+
+static const command_rec version_cmds[] = {
+    AP_INIT_TAKE123("<IfVersion", start_ifversion, NULL, EXEC_ON_READ | OR_ALL,
+                    "a comparison operator, a version (and a delimiter)"),
+    { NULL }
+};
+
+module AP_MODULE_DECLARE_DATA version_module =
+{
+    STANDARD20_MODULE_STUFF,
+    NULL,             /* dir config creater */
+    NULL,             /* dir merger --- default is to override */
+    NULL,             /* server config */
+    NULL,             /* merge server configs */
+    version_cmds,     /* command apr_table_t */
+    NULL,             /* register hooks */
+};
diff --git a/modules/metadata/mod_version.dsp b/modules/metadata/mod_version.dsp
new file mode 100644 (file)
index 0000000..9b4a9bb
--- /dev/null
@@ -0,0 +1,128 @@
+# Microsoft Developer Studio Project File - Name="mod_version" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_version - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "mod_version.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "mod_version.mak" CFG="mod_version - Win32 Release"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "mod_version - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_version - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "mod_version - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_version_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_version.so" /base:@..\..\os\win32\BaseAddr.ref,mod_version.so
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_version.so" /base:@..\..\os\win32\BaseAddr.ref,mod_version.so /opt:ref
+
+!ELSEIF  "$(CFG)" == "mod_version - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_version_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_version.so" /base:@..\..\os\win32\BaseAddr.ref,mod_version.so
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_version.so" /base:@..\..\os\win32\BaseAddr.ref,mod_version.so
+
+!ENDIF 
+
+# Begin Target
+
+# Name "mod_version - Win32 Release"
+# Name "mod_version - Win32 Debug"
+# Begin Source File
+
+SOURCE=.\mod_version.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\mod_version.rc
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\build\win32\win32ver.awk
+
+!IF  "$(CFG)" == "mod_version - Win32 Release"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Creating Version Resource
+InputPath=..\..\build\win32\win32ver.awk
+
+".\mod_version.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+       awk -f ../../build/win32/win32ver.awk mod_version.so "version_module for Apache" ../../include/ap_release.h  > .\mod_version.rc
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "mod_version - Win32 Debug"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Creating Version Resource
+InputPath=..\..\build\win32\win32ver.awk
+
+".\mod_version.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+       awk -f ../../build/win32/win32ver.awk mod_version.so "version_module for Apache" ../../include/ap_release.h  > .\mod_version.rc
+
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# End Target
+# End Project
diff --git a/modules/metadata/mod_version.exp b/modules/metadata/mod_version.exp
new file mode 100644 (file)
index 0000000..3dce845
--- /dev/null
@@ -0,0 +1 @@
+version_module
index ac164de3164bf4f90ba36685bef30a0201a17d55..62d7d04989ea7dcca5f1ff8aab1439f42b52af17 100644 (file)
@@ -2448,6 +2448,14 @@ static apr_status_t reset_version(void *dummy)
     return APR_SUCCESS;
 }
 
+AP_DECLARE(void) ap_get_server_revision(ap_version_t *version)
+{
+    version->major = AP_SERVER_MAJORVERSION_NUMBER;
+    version->minor = AP_SERVER_MINORVERSION_NUMBER;
+    version->patch = AP_SERVER_PATCHLEVEL_NUMBER;
+    version->add_string = AP_SERVER_ADD_STRING;
+}
+
 AP_DECLARE(const char *) ap_get_server_version(void)
 {
     return (server_version ? server_version : AP_SERVER_BASEVERSION);