From: André Malo Date: Tue, 18 Oct 2005 15:51:57 +0000 (+0000) Subject: merge mod_version_for_2.0.x branch back to branches/2.0.x X-Git-Tag: 2.0.56~155 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bd52bc0d54f0e122509344ce3ee9bbcbfa358350;p=thirdparty%2Fapache%2Fhttpd.git merge mod_version_for_2.0.x branch back to branches/2.0.x * 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 --- diff --git a/Apache.dsw b/Apache.dsw index 6f0f2dbe955..ce42ea6ee69 100644 --- a/Apache.dsw +++ b/Apache.dsw @@ -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 36e89e1ebe6..4d17685c155 100644 --- 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 diff --git a/Makefile.win b/Makefile.win index ab7d7c89e67..bd3770f2fce 100644 --- a/Makefile.win +++ b/Makefile.win @@ -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 diff --git a/build/mkconfNW.awk b/build/mkconfNW.awk index 22a37521eab..2728ecaa38e 100644 --- a/build/mkconfNW.awk +++ b/build/mkconfNW.awk @@ -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 index 00000000000..ee3abd15565 --- /dev/null +++ b/docs/manual/mod/mod_version.html @@ -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 index 00000000000..14e077ff008 --- /dev/null +++ b/docs/manual/mod/mod_version.html.en @@ -0,0 +1,150 @@ + + + +mod_version - Apache HTTP Server + + + + + + +
<-
+
+Apache > HTTP Server > Documentation > Version 2.0 > Modules
+
+

Apache Module mod_version

+
+

Available Languages:  en  | + ja  | + ko 

+
+ + + + +
Description:Version dependent configuration
Status:Extension
Module Identifier:version_module
Source File:mod_version.c
Compatibility:Available in version 2.0.54 and later
+

Summary

+ +

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 -- <IfVersion>, which + allows a flexible version checking including numeric comparisons and + regular expressions.

+ +

Examples

+ <IfVersion 2.1.0>
+ + # current httpd version is exactly 2.1.0
+
+ </IfVersion>
+
+ <IfVersion >= 2.2>
+ + # use really new features :-)
+
+ </IfVersion> +

+ +

See below for further possibilities.

+
+

Directives

+ +
+ +
top
+

<IfVersion> Directive

+ + + + + + + +
Description:contains version dependent configuration
Syntax:<IfVersion [[!]operator] version> ... +</IfVersion>
Context:server config, virtual host, directory, .htaccess
Override:All
Status:Extension
Module:mod_version
+

The <IfVersion> section encloses + configuration directives which are executed only if the + httpd version + matches the desired criteria. For normal (numeric) comparisons the + version argument has the format + major[.minor[.patch]], e.g. + 2.1.0 or 2.2. minor and + patch are optional. If these numbers are omitted, they are + assumed to be zero. The following numerical operators are + possible:

+ + + + + + + + + + + + +
operatordescription
= or ==httpd version is equal
>httpd version is greater than
>=httpd version is greater or equal
<httpd version is less than
<=httpd version is less or equal
+ +

Example

+ <IfVersion >= 2.1>
+ + # this happens only in versions greater or
+ # equal 2.1.0.
+
+ </IfVersion> +

+ +

Besides the numerical comparison it is possible to match a regular + expression against the httpd version. There are two ways to write it:

+ + + + + + +
operatordescription
= or ==version has the form + /regex/
~version has the form + regex
+ +

Example

+ <IfVersion = /^2.1.[01234]$/>
+ + # e.g. workaround for buggy versions + + </IfVersion> +

+ +

In order to reverse the meaning, all operators can be preceded by an + exclamation mark (!):

+ +

+ <IfVersion !~ ^2.1.[01234]$>
+ + # not for those versions
+
+ </IfVersion> +

+ +

If the operator is omitted, it is assumed to be + =.

+ +
+
+
+

Available Languages:  en  | + ja  | + ko 

+
+ \ 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 index 00000000000..13da6bc4ef4 --- /dev/null +++ b/docs/manual/mod/mod_version.html.ja.euc-jp @@ -0,0 +1,150 @@ + + + +mod_version - Apache HTTP ¥µ¡¼¥Ð + + + + + + +
<-
+
+Apache > HTTP ¥µ¡¼¥Ð > ¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó > ¥Ð¡¼¥¸¥ç¥ó 2.0 > ¥â¥¸¥å¡¼¥ë
+
+

Apache ¥â¥¸¥å¡¼¥ë mod_version

+
+

Available Languages:  en  | + ja  | + ko 

+
+
This translation may be out of date. Check the + English version for recent changes.
+ + + + +
ÀâÌÀ:¥Ð¡¼¥¸¥ç¥ó°Í¸¤ÎÀßÄê
¥¹¥Æ¡¼¥¿¥¹:Extension
¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:version_module
¥½¡¼¥¹¥Õ¥¡¥¤¥ë:mod_version.c
¸ß´¹À­:¥Ð¡¼¥¸¥ç¥ó 2.0.54 °Ê¹ß
+

³µÍ×

+ +

ÍÍ¡¹¤Ê¥Ð¡¼¥¸¥ç¥ó¤Î httpd ¤Î°Û¤Ê¤ëÀßÄê¤ò°·¤¦¤³¤È¤Ë¤Ê¤ë¡¢ + ¥Æ¥¹¥È¥¹¥¤¡¼¥È¤äÂ絬Ìϥͥåȥ¥¯¤Ç¤Î»ÈÍѤΤ¿¤á¤ËÀ߷פµ¤ì¤Æ¤¤¤Þ¤¹¡£ + ¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¿·¤·¤¤¥³¥ó¥Æ¥Ê ¡½ <IfVersion> ¤ò + Ä󶡤·¤Þ¤¹¡£¤³¤ì¤ò»È¤¦¤È¡¢¿ô»ú¤ÎÈæ³Ó¤äÀµµ¬É½¸½¤Ë¤è¤ë½ÀÆð¤Ê + ¥Ð¡¼¥¸¥ç¥ó¥Á¥§¥Ã¥¯¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

+ +

Îã

+ <IfVersion 2.1.0>
+ + # current httpd version is exactly 2.1.0
+
+ </IfVersion>
+
+ <IfVersion >= 2.2>
+ + # use really new features :-)
+
+ </IfVersion> +

+ +

¾ÜºÙ¤Ï°Ê²¼¤òÆÉ¤ó¤Ç¤¯¤À¤µ¤¤¡£

+
+

¥Ç¥£¥ì¥¯¥Æ¥£¥Ö

+ +
+ +
top
+

<IfVersion> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö

+ + + + + + + +
ÀâÌÀ:¥Ð¡¼¥¸¥ç¥ó°Í¸¤ÎÀßÄê¤òÆþ¤ì¤ë
¹½Ê¸:<IfVersion [[!]operator] version> ... +</IfVersion>
¥³¥ó¥Æ¥­¥¹¥È:¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess
¾å½ñ¤­:All
¥¹¥Æ¡¼¥¿¥¹:Extension
¥â¥¸¥å¡¼¥ë:mod_version
+

<IfVersion> ¤Ï httpd ¤Î¥Ð¡¼¥¸¥ç¥ó + ¤¬´ð½à¤òËþ¤¿¤·¤¿¤È¤­¤Ë¤Î¤ß¼Â¹Ô¤µ¤»¤¿¤¤¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò°Ï¤ß¤Þ¤¹¡£ + Ä̾ï¤Î (¿ôÃÍ) Èæ³Ó¤Î¤È¤­¤Ï version °ú¿ô¤Ï + major[.minor[.patch]] ¤È¤¤¤¦ + ·Á¼°¡¢Î㤨¤Ð¡¢2.1.0 ¤ä 2.2 ¤È¤Ê¤ê¤Þ¤¹¡£ + minor ¤È patch ¤Ï¾Êά²Äǽ¤Ç¤¹¡£¾Êά¤µ¤ì¤¿¾ì¹ç¤Ï¡¢ + 0 ¤ò»ØÄꤷ¤¿¤â¤Î¤È¤ß¤Ê¤µ¤ì¤Þ¤¹¡£Èæ³Ó¤Ë¤Ï¼¡¤Î¿ôÃÍ operator ¤ò + »ØÄê¤Ç¤­¤Þ¤¹:

+ + + + + + + + + + + + +
operatorÀâÌÀ
= ¤È ==Ʊ¤¸ httpd ¥Ð¡¼¥¸¥ç¥ó
>¤è¤êÂ礭¤¤ httpd ¥Ð¡¼¥¸¥ç¥ó
>=»ØÄê°Ê¾å¤Î httpd ¥Ð¡¼¥¸¥ç¥ó
<»ØÄê̤Ëþ¤Î httpd ¥Ð¡¼¥¸¥ç¥ó
<=»ØÄê°Ê²¼¤Î httpd ¥Ð¡¼¥¸¥ç¥ó
+ +

Îã

+ <IfVersion >= 2.1>
+ + # this happens only in versions greater or
+ # equal 2.1.0.
+
+ </IfVersion> +

+ +

¿ôÃÍÈæ³Ó¤Ë²Ã¤¨¤Æ¡¢http ¤Î¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤ËÂФ·¤ÆÀµµ¬É½¸½¤Ë¤è¤ë + ¥Þ¥Ã¥Á¥ó¥°¤¬¤Ç¤­¤Þ¤¹¡£Æó¼ïÎà¤Î½ñ¤­Êý¤¬¤¢¤ê¤Þ¤¹:

+ + + + + + +
operatorÀâÌÀ
= or ==version ¤Ï + /regex/ ·Á¼°
~version ¤Ï + regex ·Á¼°
+ +

Îã

+ <IfVersion = /^2.1.[01234]$/>
+ + # e.g. workaround for buggy versions + + </IfVersion> +

+ +

¥Þ¥Ã¥Á¥ó¥°¤ÎÈÝÄê¤òɽ¸½¤¹¤ë¤¿¤á¤Ë¡¢¤¹¤Ù¤Æ¤Î¥ª¥Ú¥ì¡¼¥¿¤ÏÁ°¤Ë + ´¶Ã²Éä (!)¤òÉÕ¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:

+ +

+ <IfVersion !~ ^2.1.[01234]$>
+ + # not for those versions
+
+ </IfVersion> +

+ +

operator ¤¬¾Êά¤µ¤ì¤¿¤È¤­¤Ï = ¤È + ¤ß¤Ê¤µ¤ì¤Þ¤¹¡£

+ +
+
+
+

Available Languages:  en  | + ja  | + ko 

+
+ \ 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 index 00000000000..075bef7e57c --- /dev/null +++ b/docs/manual/mod/mod_version.html.ko.euc-kr @@ -0,0 +1,150 @@ + + + +mod_version - Apache HTTP Server + + + + + + +
<-
+
+Apache > HTTP Server > Documentation > Version 2.0 > ¸ðµâ
+
+

¾ÆÆÄÄ¡ ¸ðµâ mod_version

+
+

°¡´ÉÇÑ ¾ð¾î:  en  | + ja  | + ko 

+
+
ÀÌ ¹®¼­´Â ÃÖ½ÅÆÇ ¹ø¿ªÀÌ ¾Æ´Õ´Ï´Ù. + ÃÖ±Ù¿¡ º¯°æµÈ ³»¿ëÀº ¿µ¾î ¹®¼­¸¦ Âü°íÇϼ¼¿ä.
+ + + + +
¼³¸í:¹öÀüº° ¼³Á¤
»óÅÂ:Extension
¸ðµâ¸í:version_module
¼Ò½ºÆÄÀÏ:mod_version.c
Áö¿ø:¾ÆÆÄÄ¡ 2.0.54 ÀÌÈĺÎÅÍ
+

¿ä¾à

+ +

¿©·¯ ´Ù¸¥ À¥¼­¹ö ¹öÀü°ú ±¸¼ºÀ» ´Ù·ç¾î¾ß ÇÒ Å« ³×Æ®¿÷°ú + Å×½ºÆ®¿ëÀ¸·Î »ç¿ëÇϱâÀ§ÇØ ÀÌ ¸ðµâÀ» ¸¸µé¾ú´Ù. ÀÌ ¸ðµâÀº + ¼ýÀÚ ºñ±³³ª Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© ÀÚÀ¯·Î¿î ¹öÀü °Ë»ç°¡ °¡´ÉÇÑ + <IfVersion>À» + Á¦°øÇÑ´Ù.

+ +

¿¹Á¦

+ <IfVersion 2.1.0>
+ + # ÇöÀç À¥¼­¹ö ¹öÀüÀº Á¤È®È÷ 2.1.0ÀÌ´Ù
+
+ </IfVersion>
+
+ <IfVersion >= 2.2>
+ + # ÁøÂ¥ »õ·Î¿î ±â´ÉÀ» »ç¿ëÇÑ´Ù :-)
+
+ </IfVersion> +

+ +

´Ù¸¥ »ç¿ë¹ýÀº ¾Æ·¡¸¦ Âü°íÇÑ´Ù.

+
+

Áö½Ã¾îµé

+ +
+ +
top
+

<IfVersion> Áö½Ã¾î

+ + + + + + + +
¼³¸í:¹öÀüº° ¼³Á¤À» ¹­´Â´Ù
¹®¹ý:<IfVersion [[!]operator] version> ... +</IfVersion>
»ç¿ëÀå¼Ò:ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess
Override ¿É¼Ç:All
»óÅÂ:Extension
¸ðµâ:mod_version
+

<IfVersion> ¼½¼ÇÀº + À¥¼­¹ö ¹öÀüÀÌ ¿øÇÏ´Â Á¶°ÇÀ» ¸¸Á·ÇÒ¶§¸¸ ½ÇÇàÇÒ ¼³Á¤ Áö½Ã¾î¸¦ + ¹­´Â´Ù. ÀϹÝÀûÀÎ (¼ýÀÚ) ºñ±³ÀÇ °æ¿ì version ¾Æ±Ô¸ÕÆ®´Â + 2.1.0À̳ª 2.2¿Í °°ÀÌ + major[.minor[.patch]] + Çü½ÄÀÌ´Ù. minor¿Í patch´Â ¾ø¾îµµ µÈ´Ù. + ÀÌµé ¼ýÀÚ°¡ ¾ø´Ù¸é 0À̶ó°í °¡Á¤ÇÑ´Ù. ´ÙÀ½°ú °°Àº ¼ýÀÚ + operator°¡ °¡´ÉÇÏ´Ù.

+ + + + + + + + + + + + +
operator¼³¸í
= ȤÀº ==µ¿ÀÏÇÑ À¥¼­¹ö ¹öÀü
>º¸´Ù Å« À¥¼­¹ö ¹öÀü
>=Å©°Å³ª °°Àº À¥¼­¹ö ¹öÀü
<º¸´Ù ÀÛÀº À¥¼­¹ö ¹öÀü
<=À۰ųª °°Àº À¥¼­¹ö ¹öÀü
+ +

¿¹Á¦

+ <IfVersion >= 2.1>
+ + # ¹öÀüÀÌ 2.1.0 º¸´Ù Å©°Å³ª °°À»¶§¸¸
+ # ½ÇÇàÇÑ´Ù.
+
+ </IfVersion> +

+ +

¼ýÀÚ ºñ±³¿Ü¿¡µµ Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© À¥¼­¹ö ¹öÀüÀ» ÁöÁ¤ÇÒ + ¼ö ÀÖ´Ù. ¿©±â¿¡´Â µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.

+ + + + + + +
operator¼³¸í
= ȤÀº ==versionÀº + /regex/ Çü½ÄÀÌ´Ù
~versionÀº + regex Çü½ÄÀÌ´Ù
+ +

¿¹Á¦

+ <IfVersion = /^2.1.[01234]$/>
+ + # ¿¹¸¦ µé¾î, ¿©±â¿¡ ¹ö±×°¡ Àִ ƯÁ¤ ¹öÀü¿¡ ´ëÇÑ ÇØ°áÃ¥ÀÌ ³ª¿Â´Ù + + </IfVersion> +

+ +

¿¬»êÀÚ ¾Õ¿¡ ´À³¦Ç¥(!)¸¦ ¾²¸é Àǹ̸¦ ¹Ý´ë·Î + ÇØ¼®ÇÑ´Ù.

+ +

+ <IfVersion !~ ^2.1.[01234]$>
+ + # ÀÌ ¹öÀüÀÌ ¾Æ´Ï¸é
+
+ </IfVersion> +

+ +

operator¸¦ »ý·«Çϸé =À̶ó°í + »ý°¢ÇÑ´Ù.

+ +
+
+
+

°¡´ÉÇÑ ¾ð¾î:  en  | + ja  | + ko 

+
+ \ 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 index 00000000000..a5049517331 --- /dev/null +++ b/docs/manual/mod/mod_version.xml @@ -0,0 +1,137 @@ + + + + + + + + +mod_version +Version dependent configuration +Extension +mod_version.c +version_module +Available in version 2.0.54 and later + + +

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 -- IfVersion, which + allows a flexible version checking including numeric comparisons and + regular expressions.

+ + Examples + <IfVersion 2.1.0>
+ + # current httpd version is exactly 2.1.0
+
+ </IfVersion>
+
+ <IfVersion >= 2.2>
+ + # use really new features :-)
+
+ </IfVersion> +
+ +

See below for further possibilities.

+
+ + +IfVersion +contains version dependent configuration +<IfVersion [[!]operator] version> ... +</IfVersion> +server configvirtual host +directory.htaccess +All + + +

The IfVersion section encloses + configuration directives which are executed only if the + httpd version + matches the desired criteria. For normal (numeric) comparisons the + version argument has the format + major[.minor[.patch]], e.g. + 2.1.0 or 2.2. minor and + patch are optional. If these numbers are omitted, they are + assumed to be zero. The following numerical operators are + possible:

+ + + + + + + + + + + + + +
operatordescription
= or ==httpd version is equal
>httpd version is greater than
>=httpd version is greater or equal
<httpd version is less than
<=httpd version is less or equal
+ + Example + <IfVersion >= 2.1>
+ + # this happens only in versions greater or
+ # equal 2.1.0.
+
+ </IfVersion> +
+ +

Besides the numerical comparison it is possible to match a regular + expression against the httpd version. There are two ways to write it:

+ + + + + + + +
operatordescription
= or ==version has the form + /regex/
~version has the form + regex
+ + Example + <IfVersion = /^2.1.[01234]$/>
+ + # e.g. workaround for buggy versions + + </IfVersion> +
+ +

In order to reverse the meaning, all operators can be preceded by an + exclamation mark (!):

+ + + <IfVersion !~ ^2.1.[01234]$>
+ + # not for those versions
+
+ </IfVersion> +
+ +

If the operator is omitted, it is assumed to be + =.

+
+
+ +
diff --git a/docs/manual/mod/mod_version.xml.ja b/docs/manual/mod/mod_version.xml.ja new file mode 100644 index 00000000000..dbd0c49cdfc --- /dev/null +++ b/docs/manual/mod/mod_version.xml.ja @@ -0,0 +1,135 @@ + + + + + + + + +mod_version +$B%P!<%8%g%s0MB8$N@_Dj(B +Extension +mod_version.c +version_module +$B%P!<%8%g%s(B 2.0.54 $B0J9_(B + + +

$BMM!9$J%P!<%8%g%s$N(B httpd $B$N0[$J$k@_Dj$r07$&$3$H$K$J$k!"(B + $B%F%9%H%9%$!<%H$dBg5,LO%M%C%H%o!<%/$G$N;HMQ$N$?$a$K@_7W$5$l$F$$$^$9!#(B + $B$3$N%b%8%e!<%k$O?7$7$$%3%s%F%J(B $B!=(B IfVersion $B$r(B + $BDs6!$7$^$9!#$3$l$r;H$&$H!"?t;z$NHf3S$d@55,I=8=$K$h$k=@Fp$J(B + $B%P!<%8%g%s%A%'%C%/$,$G$-$k$h$&$K$J$j$^$9!#(B

+ + $BNc(B + <IfVersion 2.1.0>
+ + # current httpd version is exactly 2.1.0
+
+ </IfVersion>
+
+ <IfVersion >= 2.2>
+ + # use really new features :-)
+
+ </IfVersion> +
+ +

$B>\:Y$O0J2<$rFI$s$G$/$@$5$$!#(B

+
+ + +IfVersion +$B%P!<%8%g%s0MB8$N@_Dj$rF~$l$k(B +<IfVersion [[!]operator] version> ... +</IfVersion> +server configvirtual host +directory.htaccess +All + + +

IfVersion $B$O(B httpd $B$N%P!<%8%g%s(B + $B$,4p=`$rK~$?$7$?$H$-$K$N$_o$N(B ($B?tCM(B) $BHf3S$N$H$-$O(B version $B0z?t$O(B + major[.minor[.patch]] $B$H$$$&(B + $B7A<0!"Nc$($P!"(B2.1.0 $B$d(B 2.2 $B$H$J$j$^$9!#(B + minor $B$H(B patch $B$O>JN,2DG=$G$9!#>JN,$5$l$?>l9g$O!"(B + 0 $B$r;XDj$7$?$b$N$H$_$J$5$l$^$9!#Hf3S$K$Ooperator $B$r(B + $B;XDj$G$-$^$9(B:

+ + + + + + + + + + + + + +
operator$B@bL@(B
= $B$H(B ==$BF1$8(B httpd $B%P!<%8%g%s(B
>$B$h$jBg$-$$(B httpd $B%P!<%8%g%s(B
>=$B;XDj0J>e$N(B httpd $B%P!<%8%g%s(B
<$B;XDjL$K~$N(B httpd $B%P!<%8%g%s(B
<=$B;XDj0J2<$N(B httpd $B%P!<%8%g%s(B
+ + $BNc(B + <IfVersion >= 2.1>
+ + # this happens only in versions greater or
+ # equal 2.1.0.
+
+ </IfVersion> +
+ +

$B?tCMHf3S$K2C$($F!"(Bhttp $B$N%P!<%8%g%sHV9f$KBP$7$F@55,I=8=$K$h$k(B + $B%^%C%A%s%0$,$G$-$^$9!#Fs + + + + + + + +
operator$B@bL@(B
= or ==version $B$O(B + /regex/ $B7A<0(B
~version $B$O(B + regex $B7A<0(B
+ + $BNc(B + <IfVersion = /^2.1.[01234]$/>
+ + # e.g. workaround for buggy versions + + </IfVersion> +
+ +

$B%^%C%A%s%0$NH]Dj$rI=8=$9$k$?$a$K!"$9$Y$F$N%*%Z%l!<%?$OA0$K(B + $B46C2Id(B (!)$B$rIU$1$k$3$H$,$G$-$^$9(B:

+ + + <IfVersion !~ ^2.1.[01234]$>
+ + # not for those versions
+
+ </IfVersion> +
+ +

operator $B$,>JN,$5$l$?$H$-$O(B = $B$H(B + $B$_$J$5$l$^$9!#(B

+
+
+ +
diff --git a/docs/manual/mod/mod_version.xml.ko b/docs/manual/mod/mod_version.xml.ko new file mode 100644 index 00000000000..b7059635351 --- /dev/null +++ b/docs/manual/mod/mod_version.xml.ko @@ -0,0 +1,134 @@ + + + + + + + + +mod_version +¹öÀüº° ¼³Á¤ +Extension +mod_version.c +version_module +¾ÆÆÄÄ¡ 2.0.54 ÀÌÈĺÎÅÍ + + +

¿©·¯ ´Ù¸¥ À¥¼­¹ö ¹öÀü°ú ±¸¼ºÀ» ´Ù·ç¾î¾ß ÇÒ Å« ³×Æ®¿÷°ú + Å×½ºÆ®¿ëÀ¸·Î »ç¿ëÇϱâÀ§ÇØ ÀÌ ¸ðµâÀ» ¸¸µé¾ú´Ù. ÀÌ ¸ðµâÀº + ¼ýÀÚ ºñ±³³ª Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© ÀÚÀ¯·Î¿î ¹öÀü °Ë»ç°¡ °¡´ÉÇÑ + IfVersionÀ» + Á¦°øÇÑ´Ù.

+ + ¿¹Á¦ + <IfVersion 2.1.0>
+ + # ÇöÀç À¥¼­¹ö ¹öÀüÀº Á¤È®È÷ 2.1.0ÀÌ´Ù
+
+ </IfVersion>
+
+ <IfVersion >= 2.2>
+ + # ÁøÂ¥ »õ·Î¿î ±â´ÉÀ» »ç¿ëÇÑ´Ù :-)
+
+ </IfVersion> +
+ +

´Ù¸¥ »ç¿ë¹ýÀº ¾Æ·¡¸¦ Âü°íÇÑ´Ù.

+
+ + +IfVersion +¹öÀüº° ¼³Á¤À» ¹­´Â´Ù +<IfVersion [[!]operator] version> ... +</IfVersion> +server configvirtual host +directory.htaccess +All + + +

IfVersion ¼½¼ÇÀº + À¥¼­¹ö ¹öÀüÀÌ ¿øÇÏ´Â Á¶°ÇÀ» ¸¸Á·ÇÒ¶§¸¸ ½ÇÇàÇÒ ¼³Á¤ Áö½Ã¾î¸¦ + ¹­´Â´Ù. ÀϹÝÀûÀÎ (¼ýÀÚ) ºñ±³ÀÇ °æ¿ì version ¾Æ±Ô¸ÕÆ®´Â + 2.1.0À̳ª 2.2¿Í °°ÀÌ + major[.minor[.patch]] + Çü½ÄÀÌ´Ù. minor¿Í patch´Â ¾ø¾îµµ µÈ´Ù. + ÀÌµé ¼ýÀÚ°¡ ¾ø´Ù¸é 0À̶ó°í °¡Á¤ÇÑ´Ù. ´ÙÀ½°ú °°Àº ¼ýÀÚ + operator°¡ °¡´ÉÇÏ´Ù.

+ + + + + + + + + + + + + +
operator¼³¸í
= ȤÀº ==µ¿ÀÏÇÑ À¥¼­¹ö ¹öÀü
>º¸´Ù Å« À¥¼­¹ö ¹öÀü
>=Å©°Å³ª °°Àº À¥¼­¹ö ¹öÀü
<º¸´Ù ÀÛÀº À¥¼­¹ö ¹öÀü
<=À۰ųª °°Àº À¥¼­¹ö ¹öÀü
+ + ¿¹Á¦ + <IfVersion >= 2.1>
+ + # ¹öÀüÀÌ 2.1.0 º¸´Ù Å©°Å³ª °°À»¶§¸¸
+ # ½ÇÇàÇÑ´Ù.
+
+ </IfVersion> +
+ +

¼ýÀÚ ºñ±³¿Ü¿¡µµ Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© À¥¼­¹ö ¹öÀüÀ» ÁöÁ¤ÇÒ + ¼ö ÀÖ´Ù. ¿©±â¿¡´Â µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.

+ + + + + + + +
operator¼³¸í
= ȤÀº ==versionÀº + /regex/ Çü½ÄÀÌ´Ù
~versionÀº + regex Çü½ÄÀÌ´Ù
+ + ¿¹Á¦ + <IfVersion = /^2.1.[01234]$/>
+ + # ¿¹¸¦ µé¾î, ¿©±â¿¡ ¹ö±×°¡ Àִ ƯÁ¤ ¹öÀü¿¡ ´ëÇÑ ÇØ°áÃ¥ÀÌ ³ª¿Â´Ù + + </IfVersion> +
+ +

¿¬»êÀÚ ¾Õ¿¡ ´À³¦Ç¥(!)¸¦ ¾²¸é Àǹ̸¦ ¹Ý´ë·Î + ÇØ¼®ÇÑ´Ù.

+ + + <IfVersion !~ ^2.1.[01234]$>
+ + # ÀÌ ¹öÀüÀÌ ¾Æ´Ï¸é
+
+ </IfVersion> +
+ +

operator¸¦ »ý·«Çϸé =À̶ó°í + »ý°¢ÇÑ´Ù.

+
+
+ +
diff --git a/docs/manual/mod/mod_version.xml.meta b/docs/manual/mod/mod_version.xml.meta new file mode 100644 index 00000000000..06c244bbe7d --- /dev/null +++ b/docs/manual/mod/mod_version.xml.meta @@ -0,0 +1,13 @@ + + + + mod_version + /mod/ + .. + + + en + ja + ko + + diff --git a/include/ap_mmn.h b/include/ap_mmn.h index f6da660774f..39c1c61e6a2 100644 --- a/include/ap_mmn.h +++ b/include/ap_mmn.h @@ -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 diff --git a/include/ap_release.h b/include/ap_release.h index f137039787b..442da522578 100644 --- a/include/ap_release.h +++ b/include/ap_release.h @@ -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. @@ -31,9 +33,18 @@ */ #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 diff --git a/include/httpd.h b/include/httpd.h index 16dad6cae6c..2417582d327 100644 --- a/include/httpd.h +++ b/include/httpd.h @@ -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 diff --git a/modules/metadata/NWGNUmakefile b/modules/metadata/NWGNUmakefile index c23e762a0fc..fe1ecf21637 100644 --- a/modules/metadata/NWGNUmakefile +++ b/modules/metadata/NWGNUmakefile @@ -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 index 00000000000..47b24699c99 --- /dev/null +++ b/modules/metadata/NWGNUmodversion @@ -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 + diff --git a/modules/metadata/config.m4 b/modules/metadata/config.m4 index cd08b428765..3fc1b2ced68 100644 --- a/modules/metadata/config.m4 +++ b/modules/metadata/config.m4 @@ -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 index 00000000000..9b042b7af5f --- /dev/null +++ b/modules/metadata/mod_version.c @@ -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 + * containers. + * + * The module makes the following confgurations possible: + * + * + * # conditional config here ... + * + * + * 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: + * + * + * # conditional config here ... + * + * + * 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 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, + ¤t, &parent, " +# 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 index 00000000000..3dce845626d --- /dev/null +++ b/modules/metadata/mod_version.exp @@ -0,0 +1 @@ +version_module diff --git a/server/core.c b/server/core.c index ac164de3164..62d7d04989e 100644 --- a/server/core.c +++ b/server/core.c @@ -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);