-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add "mod_macro" as a standard module, compiled in with "most". This module was created in 1998 and has been distributed independently ever since. It is hereby donated to the Apache Software Foundation. There are quite a few comments in the source code to explain how it works, as well as extensive non regression tests. Some utilities about array processing could be moved to "core.c". However, I finally decided against for now so that it stays as an external and independent module, and thus may be backported with minimal impact on the source tree. Details of the addition: * modules/core/mod_macro.c: module source code * modules/core/test: non regression tests modules/core/test/conf/: configuration files modules/core/test/ref/: expected results * docs/manual/mod/mod_macro.xml: English documentation * docs/manual/mod/mod_macro.xml.fr: French documentation Submitted by: fabien Reviewed/backported by: jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1455215 13f79535-47bb-0310-9956-ffa450edef68
- Loading branch information
Jim Jagielski
committed
Mar 11, 2013
1 parent
605cd21
commit 39fe3eb
Showing
146 changed files
with
2,774 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,203 @@ | ||
<?xml version="1.0"?> | ||
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd"> | ||
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?> | ||
|
||
<!-- | ||
Licensed to the Apache Software Foundation (ASF) under one or more | ||
contributor license agreements. See the NOTICE file distributed with | ||
this work for additional information regarding copyright ownership. | ||
The ASF licenses this file to You under the Apache License, Version 2.0 | ||
(the "License"); you may not use this file except in compliance with | ||
the License. You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
--> | ||
|
||
<modulesynopsis metafile="mod_macro.xml.meta"> | ||
|
||
<name>mod_macro</name> | ||
<description>This module provides usage of macros within apache runtime configuration files</description> | ||
<status>Base</status> | ||
<sourcefile>mod_macro.c</sourcefile> | ||
<identifier>macro_module</identifier> | ||
|
||
<summary> | ||
|
||
<p>This modules provides macros within apache runtime configuration files. | ||
These macros have parameters. They are expanded when used (parameters are | ||
substituted by their values given as an argument), and the result is | ||
processed normally.</p> | ||
</summary> | ||
|
||
<section id="features"><title>Features</title> | ||
|
||
Definition of a macro: | ||
<ul> | ||
<li> macro definition within a <Macro> section, following | ||
the apache style.</li> | ||
<li> user defined names for the macro and its parameters.</li> | ||
<li> macro names are case-insensitive, like apache directives.</li> | ||
<li> macro parameter names are case sensitive.</li> | ||
<li> macro parameters must have distinct names.</li> | ||
<li> error on empty parameter names.</li> | ||
<li> redefining a macro generates a warning.</li> | ||
<li> macro definitions can be nested... (but what for?)</li> | ||
<li> warn about unused macro parameters.</li> | ||
<li> warn about macro parameter names which prefix one another.</li> | ||
<li> warn if a parameter is not prefixed by any of '<code>$%@</code>' | ||
(good practice).</li> | ||
<li> the available prefixes help deal with interactions with other | ||
directives such as <directive module="core">Define</directive>.</li> | ||
<li> tip: it may be useful to define a macro parameter with surrounding | ||
braces, say <code>${foo}</code> so that the name can appear with | ||
surrounding characters such as <code>bla${foo}bla</code>.</li> | ||
<li> warn about empty macro contents.</li> | ||
<li> warns if sections are not properly nested within a macro. | ||
(if it is detected so).</li> | ||
<li> the lexical scope of macro parameters is restricted to the macro text, | ||
it is not forwarded to includes for instance.</li> | ||
<li> arbitrary contents in macros. | ||
<p>It means you can put perl sections or whatever you like in a macro. | ||
No assumption is made about the lexical structure (quotes, spaces or | ||
whatever) within the macro contents but to expect a set of | ||
backslash-continued independent lines.</p></li> | ||
</ul> | ||
|
||
Use of a macro: | ||
<ul> | ||
<li> number of arguments must match the definition.</li> | ||
<li> all occurences of macro parameters are substituted by their values.</li> | ||
<li> in case of conflicts, the longest parameter name is chosen.</li> | ||
<li> macro expansion recursion is detected and stopped (error).</li> | ||
<li> warn about empty arguments when used.</li> | ||
<li> on errors, try to describe precisely where the error occured.</li> | ||
<li> <code>$</code> and <code>%</code>-prefixed parameters are not | ||
escaped.</li> | ||
<li> <code>@</code>-prefixed parameters are escaped in quotes.</li> | ||
</ul> | ||
|
||
Removal of a macro definition: | ||
<ul> | ||
<li> the macro must be already defined.</li> | ||
</ul> | ||
|
||
<highlight language="config"> | ||
<Macro DirGroup $dir $group> | ||
<Directory $dir> | ||
require group $group | ||
</Directory> | ||
</Macro> | ||
|
||
Use DirGroup /www/apache/private private | ||
Use DirGroup /www/apache/server admin | ||
|
||
UndefMacro DirGroup | ||
</highlight> | ||
</section> | ||
|
||
<!-- Macro --> | ||
<directivesynopsis type="section"> | ||
<name>Macro</name> | ||
<description>Define a configuration file macro</description> | ||
<syntax> | ||
<Macro <var>name</var> [<var>par1</var> .. <var>parN</var>]> | ||
... </Macro></syntax> | ||
<contextlist> | ||
<context>server config</context> | ||
<context>virtual host</context> | ||
<context>directory</context> | ||
</contextlist> | ||
|
||
<usage> | ||
<p>The <directive>Macro</directive> directive controls the definition of | ||
a macro within the server runtime configuration files. | ||
The first argument is the name of the macro. | ||
Other arguments are parameters to the macro. It is good practice to prefix | ||
parameter names with any of '<code>$%@</code>', and not macro names | ||
with such characters. | ||
</p> | ||
|
||
<highlight language="config"> | ||
<Macro LocalAccessPolicy> | ||
order deny,allow | ||
deny from all | ||
allow from 10.2.16.0/24 | ||
</Macro> | ||
|
||
<Macro RestrictedAccessPolicy $ipnumbers> | ||
order deny,allow | ||
deny from all | ||
allow from $ipnumbers | ||
</Macro> | ||
</highlight> | ||
</usage> | ||
</directivesynopsis> | ||
|
||
<!-- Use --> | ||
<directivesynopsis> | ||
<name>Use</name> | ||
<description>Use a macro</description> | ||
<syntax>Use <var>name</var> [<var>value1</var> ... <var>valueN</var>] | ||
</syntax> | ||
<contextlist> | ||
<context>server config</context> | ||
<context>virtual host</context> | ||
<context>directory</context> | ||
</contextlist> | ||
|
||
<usage> | ||
<p> The <directive>Use</directive> directive controls the use of a macro. | ||
The specified macro is expanded. It must be given the same number of | ||
arguments than in the macro definition. The provided values are | ||
associated to their corresponding initial parameters and are substituted | ||
before processing.</p> | ||
|
||
<highlight language="config"> | ||
Use LocalAccessPolicy | ||
... | ||
Use RestrictedAccessPolicy "192.54.172.0/24 192.54.148.0/24" | ||
</highlight> | ||
|
||
is equivalent, with the macros defined above, to: | ||
|
||
<highlight language="config"> | ||
order deny,allow | ||
deny from all | ||
allow from 10.2.16.0/24 | ||
... | ||
order deny,allow | ||
deny from all | ||
allow from 192.54.172.0/24 192.54.148.0/24 | ||
</highlight> | ||
</usage> | ||
</directivesynopsis> | ||
|
||
<!-- UndefMacro --> | ||
<directivesynopsis> | ||
<name>undefMacro</name> | ||
<description>Undefine a macro</description> | ||
|
||
<syntax>UndefMacro <var>name</var></syntax> | ||
<contextlist> | ||
<context>server config</context> | ||
<context>virtual host</context> | ||
<context>directory</context> | ||
</contextlist> | ||
|
||
<usage> | ||
<p>The <directive>UndefMacro</directive> directive undefines a macro | ||
which has been defined before hand.</p> | ||
|
||
<highlight language="config"> | ||
UndefMacro LocalAccessPolicy | ||
UndefMacro RestrictedAccessPolicy | ||
</highlight> | ||
</usage> | ||
</directivesynopsis> | ||
</modulesynopsis> |
Oops, something went wrong.