diff --git a/ChangeLog b/ChangeLog
index 52afd782d..c36f250ed 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,31 @@
+2008-04-26 Alvaro Lopez Ortega
+
+ * admin/ModuleDirlist.py (ModuleDirlist._op_render),
+ admin/ModuleRedir.py (ModuleRedir._op_render): Updated to use the
+ new TableProps class instead of the plain old Table.
+
+ * cherokee/virtual_server.c (configure_rule_match), qa/*.py,
+ cherokee.conf.sample.pre, cherokee/main_admin.c, cherokee/admin.c:
+ Configuration format has changed again. The new entries weren't
+ following the style of the rest of the configuration. The change
+ is really small; however it impacts almost all of the QA cases.
+ Now, rules are defined like: "rule!!match = " instead
+ of "rule!!match!type = ".
+
+ * admin/ModuleHeader.py, admin/Makefile.am: Added support of
+ header rules. This is a new module.
+
+ * admin/static/css/cherokee.css: This couple of minor changes make
+ the interface look much better. It basically improves the
+ PropertyTable look.
+
+ * qa/PageEntry.py, qa/config.py, qa/ModuleDefault.py,
+ qa/ModuleRequest.py, qa/ModuleExtensions.py, qa/consts.py,
+ qa/PageVServer.py, qa/static/js/common.js, qa/RuleList.py,
+ qa/Form.py, qa/ModuleDirectory.py, qa/Makefile.am: Rule types are
+ no longer hardcoded. They are independed modules, as in the the
+ server.
+
2008-04-25 Alvaro Lopez Ortega
* cherokee/main_admin.c (main): There was a unneeded Win32
diff --git a/admin/Form.py b/admin/Form.py
index 03ee54877..18a90e36e 100644
--- a/admin/Form.py
+++ b/admin/Form.py
@@ -181,10 +181,10 @@ def InstanceOptions (self, cfg_key, options, *args, **kwargs):
FormHelper.options_wrap_num += 1
ops = '%s
'%(auto_wrap_id, auto_wrap_id, ops)
- return (ops, value)
+ return (ops, value, auto_wrap_id)
def AddTableOptions (self, table, title, cfg_key, options, *args, **kwargs):
- entry, value = self.InstanceOptions (cfg_key, options, *args, **kwargs)
+ entry, value, wrap = self.InstanceOptions (cfg_key, options, *args, **kwargs)
label = self.Label(title, cfg_key)
table += (label, entry)
@@ -406,7 +406,7 @@ def AddPropCheck (self, table, title, cfg_key, default, comment=None):
self.AddProp (table, title, cfg_key, entry, comment)
def AddPropOptions (self, table, title, cfg_key, options, comment=None, **kwargs):
- entry, v = self.InstanceOptions (cfg_key, options, **kwargs)
+ entry, v, w = self.InstanceOptions (cfg_key, options, **kwargs)
self.AddProp (table, title, cfg_key, entry, comment)
return v
diff --git a/admin/Makefile.am b/admin/Makefile.am
index 2b83a8143..0117e3ee1 100644
--- a/admin/Makefile.am
+++ b/admin/Makefile.am
@@ -60,6 +60,10 @@ ModuleHtpasswd.py \
ModuleMysql.py \
ModulePam.py \
ModuleRoundRobin.py \
+ModuleDefault.py \
+ModuleRequest.py \
+ModuleDirectory.py \
+ModuleExtensions.py \
config.py \
pyscgi.py \
validations.py \
diff --git a/admin/ModuleCommon.py b/admin/ModuleCommon.py
index c86685def..ef2048ef9 100644
--- a/admin/ModuleCommon.py
+++ b/admin/ModuleCommon.py
@@ -4,6 +4,8 @@
from ModuleFile import *
from ModuleDirlist import *
+NOTE_PATHINFO = "Allow extra tailing paths"
+
class ModuleCommon (Module, FormHelper):
PROPERTIES = ModuleFile.PROPERTIES + ModuleDirlist.PROPERTIES + [
'allow_pathinfo'
@@ -20,9 +22,11 @@ def _op_render (self):
txt = ''
# Local properties
- table = Table(2)
- self.AddTableCheckbox (table, 'Allow PathInfo', '%s!allow_pathinfo'%(self._prefix), False)
- txt += str(table)
+ table = TableProps()
+ self.AddPropCheck (table, 'Allow PathInfo', '%s!allow_pathinfo'%(self._prefix), False, NOTE_PATHINFO)
+
+ txt = 'Parsing
'
+ txt += self.Indent(table)
# Copy errors to the modules,
# they may need to print them
diff --git a/admin/ModuleDefault.py b/admin/ModuleDefault.py
new file mode 100644
index 000000000..58eca85a0
--- /dev/null
+++ b/admin/ModuleDefault.py
@@ -0,0 +1,22 @@
+from Form import *
+from Table import *
+from Module import *
+
+class ModuleDefault (Module, FormHelper):
+ validation = []
+
+ def __init__ (self, cfg, prefix, submit_url):
+ Module.__init__ (self, 'default', cfg, prefix, submit_url)
+ FormHelper.__init__ (self, 'default', cfg)
+
+ def _op_render (self):
+ return ""
+
+ def apply_cfg (self, values):
+ None
+
+ def get_name (self):
+ return self._id.capitalize()
+
+ def get_type_name (self):
+ return self._id.capitalize()
diff --git a/admin/ModuleDirectory.py b/admin/ModuleDirectory.py
new file mode 100644
index 000000000..54168a523
--- /dev/null
+++ b/admin/ModuleDirectory.py
@@ -0,0 +1,32 @@
+from Form import *
+from Table import *
+from Module import *
+import validations
+
+NOTE_DIRECTORY = "Public Web Directory to which content the configuration will be applied."
+
+class ModuleDirectory (Module, FormHelper):
+ validation = [('tmp!new_rule!value', validations.is_dir_formated)]
+
+ def __init__ (self, cfg, prefix, submit_url):
+ Module.__init__ (self, 'directory', cfg, prefix, submit_url)
+ FormHelper.__init__ (self, 'directory', cfg)
+
+ def _op_render (self):
+ table = TableProps()
+ if self._prefix.startswith('tmp!'):
+ self.AddPropEntry (table, 'Web Directory', '%s!value'%(self._prefix), NOTE_DIRECTORY)
+ else:
+ self.AddPropEntry (table, 'Web Directory', '%s!directory'%(self._prefix), NOTE_DIRECTORY)
+ return str(table)
+
+ def apply_cfg (self, values):
+ if values.has_key('value'):
+ dir_name = values['value']
+ self._cfg['%s!match!directory'%(self._prefix)] = dir_name
+
+ def get_name (self):
+ return self._cfg.get_val ('%s!match!directory'%(self._prefix))
+
+ def get_type_name (self):
+ return self._id.capitalize()
diff --git a/admin/ModuleDirlist.py b/admin/ModuleDirlist.py
index 32d6bcd2e..dbc1dad10 100644
--- a/admin/ModuleDirlist.py
+++ b/admin/ModuleDirlist.py
@@ -13,6 +13,10 @@
DEFAULT_THEME = "default"
+NOTE_THEME = "Choose the listing theme."
+NOTE_ICON_DIR = "Web directory where the icon files are located. Default: /icons."
+NOTE_NOTICE_FILES = "List of notice files to be inserted."
+
class ModuleDirlist (Module, FormHelper):
PROPERTIES = [
'size', 'date',
@@ -26,22 +30,22 @@ def __init__ (self, cfg, prefix, submit_url):
FormHelper.__init__ (self, 'dirlist', cfg)
def _op_render (self):
- txt = 'Listing
'
- table = Table(2)
- self.AddTableCheckbox (table, "Show Size", "%s!size" %(self._prefix), True)
- self.AddTableCheckbox (table, "Show Date", "%s!date" %(self._prefix), True)
- self.AddTableCheckbox (table, "Show User", "%s!user" %(self._prefix), False)
- self.AddTableCheckbox (table, "Show Group", "%s!group"%(self._prefix), False)
- self.AddTableCheckbox (table, "Allow symbolic links", "%s!symlinks"%(self._prefix), True)
- txt += str(table)
-
- txt += 'Theming
'
- table = Table(2)
+ txt = 'Listing
'
+ table = TableProps()
+ self.AddPropCheck (table, "Show Size", "%s!size" %(self._prefix), True, '')
+ self.AddPropCheck (table, "Show Date", "%s!date" %(self._prefix), True, '')
+ self.AddPropCheck (table, "Show User", "%s!user" %(self._prefix), False, '')
+ self.AddPropCheck (table, "Show Group", "%s!group"%(self._prefix), False, '')
+ self.AddPropCheck (table, "Allow symbolic links", "%s!symlinks"%(self._prefix), True, '')
+ txt += self.Indent(table)
+
+ txt += 'Theming
'
+ table = TableProps()
themes = self._get_theme_list()
- self.AddTableOptions (table, 'Theme', "%s!theme" % (self._prefix), themes)
- self.AddTableEntry (table, 'Icons dir', "%s!icon_dir" % (self._prefix))
- self.AddTableEntry (table, 'Notice files', "%s!notice_files" % (self._prefix))
- txt += str(table)
+ self.AddPropOptions (table, 'Theme', "%s!theme" % (self._prefix), themes, NOTE_THEME)
+ self.AddPropEntry (table, 'Icons dir', "%s!icon_dir" % (self._prefix), NOTE_ICON_DIR)
+ self.AddPropEntry (table, 'Notice files', "%s!notice_files" % (self._prefix), NOTE_NOTICE_FILES)
+ txt += self.Indent(table)
return txt
diff --git a/admin/ModuleExtensions.py b/admin/ModuleExtensions.py
new file mode 100644
index 000000000..457103537
--- /dev/null
+++ b/admin/ModuleExtensions.py
@@ -0,0 +1,37 @@
+from Form import *
+from Table import *
+from Module import *
+import validations
+
+NOTE_EXTENSIONS = "File extension list to which content the configuration will be applied."
+
+class ModuleExtensions (Module, FormHelper):
+ validation = [('tmp!new_rule!value', validations.is_safe_id_list)]
+
+ def __init__ (self, cfg, prefix, submit_url):
+ Module.__init__ (self, 'extensions', cfg, prefix, submit_url)
+ FormHelper.__init__ (self, 'extensions', cfg)
+
+ def _op_render (self):
+ table = TableProps()
+ if self._prefix.startswith('tmp!'):
+ self.AddPropEntry (table, 'Extensions', '%s!value'%(self._prefix), NOTE_EXTENSIONS)
+ else:
+ self.AddPropEntry (table, 'Extensions', '%s!extensions'%(self._prefix), NOTE_EXTENSIONS)
+ return str(table)
+
+ def _op_apply_changes (self, uri, post):
+ self.ApplyChangesPrefix (self._prefix, None, post)
+
+ def apply_cfg (self, values):
+ if not values.has_key('value'):
+ print "ERROR, a 'value' entry is needed!"
+
+ exts = values['value']
+ self._cfg['%s!match!extensions'%(self._prefix)] = exts
+
+ def get_name (self):
+ return self._cfg.get_val ('%s!match!extensions'%(self._prefix))
+
+ def get_type_name (self):
+ return self._id.capitalize()
diff --git a/admin/ModuleFile.py b/admin/ModuleFile.py
index 3c18a7cdd..761504cc6 100644
--- a/admin/ModuleFile.py
+++ b/admin/ModuleFile.py
@@ -14,9 +14,14 @@ def __init__ (self, cfg, prefix, submit_url):
FormHelper.__init__ (self, 'file', cfg)
def _op_render (self):
+ txt = ''
+
table = TableProps()
self.AddPropCheck (table, "Use I/O cache", "%s!iocache" % (self._prefix), True, NOTE_IO_CACHE)
- return str(table)
+
+ txt += 'File Sending
'
+ txt += self.Indent(table)
+ return txt
def _op_apply_changes (self, uri, post):
self.ApplyChangesPrefix (self._prefix, ['iocache'], post)
diff --git a/admin/ModuleHeader.py b/admin/ModuleHeader.py
new file mode 100644
index 000000000..0be0385e1
--- /dev/null
+++ b/admin/ModuleHeader.py
@@ -0,0 +1,56 @@
+from Form import *
+from Table import *
+from Module import *
+import validations
+
+NOTE_HEADER = "Header against which the regular expression will be evaluated."
+NOTE_MATCH = "Regular expression."
+
+LENGHT_LIMIT = 10
+
+HEADERS = [
+ ('Accept-Encoding', 'Accept-Encoding'),
+ ('Accept-Charset', 'Accept-Charset'),
+ ('Accept-Language', 'Accept-Language'),
+ ('Referer', 'Referer'),
+ ('User-Agent', 'User-Agent')
+]
+
+class ModuleHeader (Module, FormHelper):
+ validation = [('tmp!new_rule!value', validations.is_dir_formated)]
+
+ def __init__ (self, cfg, prefix, submit_url):
+ Module.__init__ (self, 'header', cfg, prefix, submit_url)
+ FormHelper.__init__ (self, 'header', cfg)
+
+ def _op_render (self):
+ table = TableProps()
+ if self._prefix.startswith('tmp!'):
+ self.AddPropOptions (table, 'Header', '%s!value'%(self._prefix), HEADERS, NOTE_HEADER)
+ else:
+ self.AddPropOptions (table, 'Header', '%s!header'%(self._prefix), HEADERS, NOTE_HEADER)
+ self.AddPropEntry (table, 'Regular Expression', '%s!match'%(self._prefix), NOTE_MATCH)
+ return str(table)
+
+ def apply_cfg (self, values):
+ if values.has_key('value'):
+ header = values['value']
+ self._cfg['%s!match!header'%(self._prefix)] = header
+
+ if values.has_key('match'):
+ match = values['match']
+ self._cfg['%s!match!match'%(self._prefix)] = match
+
+ def get_name (self):
+ header = self._cfg.get_val ('%s!match!header'%(self._prefix))
+ if not header:
+ return ''
+
+ tmp = self._cfg.get_val ('%s!match!match'%(self._prefix), '')
+ if len(tmp) > LENGHT_LIMIT:
+ return "%s (%s..)" % (header, tmp[:5])
+
+ return "%s (%s)" % (header, tmp)
+
+ def get_type_name (self):
+ return self._id.capitalize()
diff --git a/admin/ModuleRedir.py b/admin/ModuleRedir.py
index 3d4acfc8b..58e07c8fc 100644
--- a/admin/ModuleRedir.py
+++ b/admin/ModuleRedir.py
@@ -1,17 +1,11 @@
from Form import *
from Table import *
from Module import *
-
from consts import *
-
-NOTE_ON_PCRE = """
-Regular expressions must be written using the
-PCRE syntax. Here you can find information on the
- regular expression
-format.
-"""
-
+NOTE_SHOW = "Defined whether the redirection will be seen by the client."
+NOTE_REGEX = "Regular expression. Check out the Reference."
+NOTE_SUBSTITUTION = "Target address. It can use Regular Expression substitution sub-strings."
class ModuleRedir (Module, FormHelper):
PROPERTIES = [
@@ -35,7 +29,7 @@ def _op_render (self):
for rule in cfg:
cfg_key_rule = "%s!%s" % (cfg_key, rule)
- show = self._get_show_option ('%s!show'%(cfg_key_rule))
+ show, _,_ = self.InstanceOptions ('%s!show'%(cfg_key_rule), REDIR_SHOW)
regex = self._cfg.get_val('%s!regex' %(cfg_key_rule))
substring = self._cfg.get_val('%s!substring'%(cfg_key_rule))
js = "post_del_key('/ajax/update', '%s');" % (cfg_key_rule)
@@ -46,16 +40,12 @@ def _op_render (self):
txt += self.Indent(table)
# Add new rule
- en_reg = self.InstanceEntry('rewrite_new_regex', 'text', size=28)
- en_sub = self.InstanceEntry('rewrite_new_substring', 'text', size=28)
- en_show = self._get_show_option ('rewrite_new_show')
+ table = TableProps()
+ self.AddPropOptions (table, 'Show', "rewrite_new_show", REDIR_SHOW, NOTE_SHOW)
+ self.AddPropEntry (table, 'Regular Expression', 'rewrite_new_regex', NOTE_REGEX)
+ self.AddPropEntry (table, 'Substitution', 'rewrite_new_substring', NOTE_SUBSTITUTION)
- table = Table(3,1)
- table += ('Type', 'Regular Expression', 'Substitution')
- table += (en_show, en_reg, en_sub)
-
- txt += "Add new rule
"
- txt += self.Dialog(NOTE_ON_PCRE)
+ txt += "Add new rule
"
txt += self.Indent(table)
return txt
@@ -68,12 +58,6 @@ def __find_name (self):
return str(i)
i += 1
- def _get_show_option (self, cfg_key):
- show_val = self._cfg.get_val(cfg_key)
- if show_val:
- return EntryOptions (cfg_key, REDIR_SHOW, selected=show_val)
- return EntryOptions (cfg_key, REDIR_SHOW)
-
def _op_apply_changes (self, uri, post):
regex = post.pop('rewrite_new_regex')
substr = post.pop('rewrite_new_substring')
diff --git a/admin/ModuleRequest.py b/admin/ModuleRequest.py
new file mode 100644
index 000000000..781389bf0
--- /dev/null
+++ b/admin/ModuleRequest.py
@@ -0,0 +1,34 @@
+from Form import *
+from Table import *
+from Module import *
+import validations
+
+NOTE_REQUEST = "Regular expression against which the request will be executed."
+
+class ModuleRequest (Module, FormHelper):
+ validation = [('tmp!new_rule!value', validations.is_regex)]
+
+ def __init__ (self, cfg, prefix, submit_url):
+ Module.__init__ (self, 'request', cfg, prefix, submit_url)
+ FormHelper.__init__ (self, 'request', cfg)
+
+ def _op_render (self):
+ table = TableProps()
+ self.AddPropEntry (table, 'Regular Expression', '%s!value'%(self._prefix), NOTE_REQUEST)
+ return str(table)
+
+ def _op_apply_changes (self, uri, post):
+ self.ApplyChangesPrefix (self._prefix, None, post)
+
+ def apply_cfg (self, values):
+ if not values.has_key('value'):
+ print "ERROR, a 'value' entry is needed!"
+
+ exts = values['value']
+ self._cfg['%s!match!request'%(self._prefix)] = exts
+
+ def get_name (self):
+ return self._cfg.get_val ('%s!match!request'%(self._prefix))
+
+ def get_type_name (self):
+ return 'Regular Expression'
diff --git a/admin/PageEntry.py b/admin/PageEntry.py
index 55b54694c..3fe48b451 100644
--- a/admin/PageEntry.py
+++ b/admin/PageEntry.py
@@ -99,32 +99,36 @@ def _get_title (self, html=False):
else:
txt = '%s - ' % (self._host)
- for n in range(len(ENTRY_TYPES)):
- if ENTRY_TYPES[n][0] == self._entry.get_val('match!type'):
- name = self._priorities.guess_name (self._prio)
- txt += "%s: %s" % (ENTRY_TYPES[n][1], name)
- return txt
+ # Load the rule plugin
+ _type = self._entry.get_val('match')
+ rule_module = module_obj_factory (_type, self._cfg, self._conf_prefix, self.submit_url)
+
+ txt += "%s: %s" % (rule_module.get_type_name(), rule_module.get_name())
+ return txt
def _render_guts (self):
- pre = self._conf_prefix
- txt = '%s
' % (self._get_title (html=True))
+ pre = self._conf_prefix
+ tabs = []
+
+ # Rule Properties
+ tabs += [('Rule', self._render_rule())]
+ # Handler
table = TableProps()
e = self.AddPropOptions_Reload (table, 'Handler', '%s!handler'%(pre),
HANDLERS, NOTE_HANDLER)
self.AddPropEntry (table, 'Document Root', '%s!document_root'%(pre), NOTE_DOCUMENT_ROOT)
- txt += 'General
'
- txt += self.Indent(table)
-
if e:
- txt += 'Handler properties
'
- txt += self.Indent(e)
+ tabs += [('Handler', str(table) + e)]
+ else:
+ tabs += [('Handler', str(table))]
- txt += 'Security
'
- tmp = self._render_security ()
- txt += self.Indent(tmp)
+ # Security
+ tabs += [('Security', self._render_security())]
+ txt = '%s
' % (self._get_title (html=True))
+ txt += self.InstanceTab (tabs)
form = Form (self.submit_url)
return form.Render(txt)
@@ -138,6 +142,14 @@ def _render_handler_properties (self):
return "Couldn't load the properties module"
return props._op_render()
+ def _render_rule (self):
+ pre = "%s!match"%(self._conf_prefix)
+
+ # Change the rule type
+ table = TableProps()
+ e = self.AddPropOptions_Reload (table, "Rule Type", pre, RULES, "")
+ return str(table) + e
+
def _render_security (self):
pre = self._conf_prefix
diff --git a/admin/PageVServer.py b/admin/PageVServer.py
index f7ff0b3e0..294a64dd5 100644
--- a/admin/PageVServer.py
+++ b/admin/PageVServer.py
@@ -39,6 +39,8 @@
NOTE_WRT_FILE = 'Full path to the file where the information will be saved.'
NOTE_WRT_EXEC = 'Path to the executable that will be invoked on each log entry.'
+NO_HANDLER = "No"
+NO_VALIDATOR = "No"
class PageVServer (PageMenu, FormHelper):
def __init__ (self, cfg):
@@ -64,23 +66,23 @@ def _op_handler (self, uri, post):
return '/vserver/'
default_render = False
-
if post.get_val('is_submit'):
- if post.get_val('add_new_entry'):
- # It's adding a new entry
+ if post.get_val('tmp!new_rule!value'):
re = self._op_add_new_entry (post = post,
cfg_prefix = 'vserver!%s!rule' %(host),
- url_prefix = '/vserver/%s'%(host))
+ url_prefix = '/vserver/%s'%(host),
+ key_prefix = 'tmp!new_rule')
if not self.has_errors() and re:
return re
- elif post.get_val('userdir_add_new_entry'):
- # It's adding a new user entry
+
+ elif post.get_val('tmp!new_rule!user_dir!value'):
re = self._op_add_new_entry (post = post,
- cfg_prefix = 'vserver!%s!user_dir!rule'%(host),
+ cfg_prefix = 'vserver!%s!user_dir!rule' %(host),
url_prefix = '/vserver/%s/userdir'%(host),
- key_prefix = 'userdir_')
+ key_prefix = 'tmp!new_rule!user_dir')
if not self.has_errors() and re:
return re
+
else:
# It's updating properties
self._op_apply_changes (host, uri, post)
@@ -104,50 +106,52 @@ def _op_handler (self, uri, post):
if self._cfg.get_val('vserver!%s!user_dir'%(host)):
tmp = self._cfg["vserver!%s!user_dir!rule"%(host)]
if not tmp:
- self._cfg["vserver!%s!user_dir!rule!1!match!type"%(host)] = "default"
- self._cfg["vserver!%s!user_dir!rule!1!handler" %(host)] = "common"
+ self._cfg["vserver!%s!user_dir!rule!1!match" %(host)] = "default"
+ self._cfg["vserver!%s!user_dir!rule!1!handler" %(host)] = "common"
self._priorities = RuleList(self._cfg, 'vserver!%s!rule'%(host))
self._priorities_userdir = RuleList(self._cfg, 'vserver!%s!user_dir!rule'%(host))
return self._op_render_vserver_details (host)
- def _op_add_new_entry (self, post, cfg_prefix, url_prefix, key_prefix=''):
- key_add_new_type = key_prefix + 'add_new_type'
- key_add_new_entry = key_prefix + 'add_new_entry'
- key_add_new_handler = key_prefix + 'add_new_handler'
+ def _op_add_new_entry (self, post, cfg_prefix, url_prefix, key_prefix):
+ # Build the configuration prefix
+ rules = RuleList(self._cfg, cfg_prefix)
+ priority = rules.get_highest_priority() + 100
+ pre = '%s!%d' % (cfg_prefix, priority)
+
+ # Read the properties
+ filtered_post = {}
+ for p in post:
+ if not p.startswith(key_prefix):
+ continue
+
+ prop = p[len('%s!'%(key_prefix)):]
+ if not prop: continue
+
+ filtered_post[prop] = post[p][0]
+
+ # Look for the rule type
+ _type = post.get_val (key_prefix)
# The 'add_new_entry' checking function depends on
# the whether 'add_new_type' is a directory, an extension
# or a regular extension
- validation = DATA_VALIDATION[:]
+ rule_module = module_obj_factory (_type, self._cfg, pre, self.submit_url)
- type_ = post.get_val(key_add_new_type)
- if type_ == 'directory':
- validation += [(key_add_new_entry, validations.is_dir_formated)]
- elif type_ == 'extensions':
- validation += [(key_add_new_entry, validations.is_safe_id_list)]
- elif type_ == 'request':
- validation += [(key_add_new_entry, validations.is_regex)]
+ # Validate
+ validation = DATA_VALIDATION[:]
+ validation += rule_module.validation
- # Apply changes
self._ValidateChanges (post, validation)
if self.has_errors():
return
+
+ # Apply the changes to the configuration tree
+ self._cfg['%s!match'%(pre)] = _type
+ rule_module.apply_cfg (filtered_post)
- entry = post.pop(key_add_new_entry)
- type_ = post.pop(key_add_new_type)
- handler = post.pop(key_add_new_handler)
-
- # Look for the highest priority on the list
- rules = RuleList(self._cfg, cfg_prefix)
- priority = rules.get_highest_priority() + 100
-
- pre = "%s!%d" % (cfg_prefix, priority)
- self._cfg["%s!match!type"%(pre)] = type_
- self._cfg["%s!match!%s"%(pre, type_)] = entry
- self._cfg["%s!handler"%(pre)] = handler
-
+ # Get to the details page
return "%s/prio/%d" % (url_prefix, priority)
def _op_render_vserver_details (self, host):
@@ -176,20 +180,22 @@ def _render_vserver_guts (self, host):
tabs += [('Domain names', tmp)]
# Behaviour
- tmp = self._render_rules_generic (cfg_key = 'vserver!%s!rule' %(host),
+ pre = 'vserver!%s!rule' %(host)
+ tmp = self._render_rules_generic (cfg_key = pre,
url_prefix = '/vserver/%s'%(host),
priorities = self._priorities)
- tmp += self._render_add_rule(host)
+ tmp += self._render_add_rule ("tmp!new_rule")
tabs += [('Behaviour', tmp)]
# Personal Webs
tmp = self._render_personal_webs (host)
if self._cfg.get_val('vserver!%s!user_dir'%(host)):
tmp += "
"
- tmp += self._render_rules_generic (cfg_key = 'vserver!%s!user_dir!rule'%(host),
+ pre = 'vserver!%s!user_dir!rule'%(host)
+ tmp += self._render_rules_generic (cfg_key = pre,
url_prefix = '/vserver/%s/userdir'%(host),
priorities = self._priorities_userdir)
- tmp += self._render_add_rule (host, prefix="userdir_")
+ tmp += self._render_add_rule ("tmp!new_rule!user_dir")
tabs += [('Personal Webs', tmp)]
# Error handlers
@@ -223,61 +229,72 @@ def _render_error_handler (self, host):
txt += str(table) + self.Indent(e)
return txt
-
- def _render_add_rule (self, host, prefix=''):
- # Add new rule
- txt = ''
- entry = self.InstanceEntry (prefix+'add_new_entry', 'text', size=30)
- type = EntryOptions (prefix+'add_new_type', ENTRY_TYPES, selected='directory')
- handler = EntryOptions (prefix+'add_new_handler', HANDLERS, selected='common')
-
- table = Table(4,1)
- table += ('Type', 'Entry', 'Handler')
- table += (type, entry, handler)
-
- txt += "Add new rule
"
- txt += str(table)
+
+ def _render_add_rule (self, prefix):
+ txt = "Add new rule
"
+ table = TableProps()
+ e = self.AddPropOptions_Reload (table, "Rule Type", prefix, RULES, "")
+ txt += self.Indent (str(table) + e)
return txt
+ def _get_handler_name (self, mod_name):
+ for h in HANDLERS:
+ if h[0] == mod_name:
+ return h[1]
+
def _render_rules_generic (self, cfg_key, url_prefix, priorities):
txt = ''
+
+ if not len(priorities):
+ return txt
+
txt += self.Dialog(RULE_LIST_NOTE)
- if len(priorities):
- table_name = "rules%d" % (self._rule_table)
- self._rule_table += 1
+ table_name = "rules%d" % (self._rule_table)
+ self._rule_table += 1
+
+ txt += '' % (table_name)
+ txt += 'Target | Type | Handler | Auth | Final |
'
+
+ # Rule list
+ for prio in priorities:
+ conf = priorities[prio]
- txt += 'Rule list
'
- txt += '' % (table_name)
- txt += 'Target | Type | Handler | Final |
'
+ _type = conf.get_val('match')
+ pre = '%s!%s' % (cfg_key, prio)
- # Rule list
- for prio in priorities:
- conf = priorities[prio]
-
- type_ = conf.get_val('match!type')
- name = priorities.guess_name (prio)
-
- pre = '%s!%s' % (cfg_key, prio)
- if type_ != 'default':
- link = '%s' % (url_prefix, prio, name)
- final = self.InstanceCheckbox ('%s!match!final'%(pre), True)
- js = "post_del_key('%s', '%s');" % (self.submit_ajax_url, pre)
- link_del = self.InstanceImage ("bin.png", "Delete", border="0", onClick=js)
- extra = ''
- else:
- link = 'Default' % (url_prefix, prio)
- extra = ' NoDrag="1" NoDrop="1"'
- final = ''
- link_del = ''
-
- e1 = EntryOptions ('%s!handler' % (pre), HANDLERS, selected=conf['handler'].value)
-
- txt += '%s | %s | %s | %s | %s |
\n' % (
- prio, pre, prio, extra, link, type_.capitalize(), e1, final, link_del)
-
- txt += '
\n'
- txt += '''
- ''' % {'name': table_name,
- 'url' : self.submit_ajax_url,
- 'prefix': cfg_key}
+ ''' % {'name': table_name,
+ 'url' : self.submit_ajax_url,
+ 'prefix': cfg_key}
return txt
def _render_personal_webs (self, host):
diff --git a/admin/PageVServers.py b/admin/PageVServers.py
index 5ac8de759..48fd47efb 100644
--- a/admin/PageVServers.py
+++ b/admin/PageVServers.py
@@ -97,8 +97,8 @@ def _op_add_vserver (self, post):
if name in self._cfg['vserver']:
return '/vserver'
- self._cfg['%s!document_root' % (pre)] = droot
- self._cfg['%s!rule!1!match!type' % (pre)] = 'default'
- self._cfg['%s!rule!1!handler' % (pre)] = 'common'
+ self._cfg['%s!document_root' % (pre)] = droot
+ self._cfg['%s!rule!1!match' % (pre)] = 'default'
+ self._cfg['%s!rule!1!handler' % (pre)] = 'common'
return '/vserver/%s' % (name)
diff --git a/admin/RuleList.py b/admin/RuleList.py
index 94ea51c33..6b3003037 100644
--- a/admin/RuleList.py
+++ b/admin/RuleList.py
@@ -52,11 +52,11 @@ def __getitem__ (self, prio):
def get_highest_priority(self):
keys = self._cfg[self._cfg_pre].keys()
- keys.sort (lambda x,y: int(x) < int(y))
- if keys:
- return int(keys[-1])
- else:
+ if not keys:
return 100
+ tmp = [int(x) for x in keys]
+ tmp.sort()
+ return tmp[-1]
def change_prios (self, changes):
# Build the new child list
@@ -79,22 +79,4 @@ def change_prios (self, changes):
for item in relocated.keys():
pre = '%s!%d' % (self._cfg_pre, item)
self._cfg.set_sub_node (pre, relocated[item])
-
- def guess_name (self, prio):
- conf = self[int(prio)]
- type_ = conf.get_val('match!type')
-
- if type_ == 'directory':
- name = conf.get_val('match!directory')
- elif type_ == 'extensions':
- name = conf.get_val('match!extensions')
- elif type_ == 'request':
- name = conf.get_val('match!request')
- elif type_ == 'default':
- name = ''
- else:
- print "UNKNOWN TYPE:", type_
- name = ''
-
- return name
-
+
diff --git a/admin/config.py b/admin/config.py
index 8bdf9f0b0..01fe7fef3 100644
--- a/admin/config.py
+++ b/admin/config.py
@@ -106,6 +106,9 @@ def serialize (self, path=''):
content += '%s = %s\n' % (path, val)
for name in self._child:
+ if name == 'tmp':
+ continue
+
node = self._child[name]
if len(path) != 0:
new_path = "%s!%s" % (path, name)
diff --git a/admin/consts.py b/admin/consts.py
index 9efdf2133..a04579bc1 100644
--- a/admin/consts.py
+++ b/admin/consts.py
@@ -1,9 +1,3 @@
-ENTRY_TYPES = [
- ('directory', 'Directory'),
- ('extensions', 'Extensions'),
- ('request', 'Regular Expression')
-]
-
HANDLERS = [
('common', 'List & Send'),
('file', 'Static content'),
@@ -102,3 +96,10 @@
('504', '504 Gatewat Timeout'),
('505', '505 HTTP Version Not Supported')
]
+
+RULES = [
+ ('directory', 'Directory'),
+ ('extensions', 'Extensions'),
+ ('request', 'Regular Expression'),
+ ('header', 'Header')
+]
diff --git a/admin/static/css/cherokee.css b/admin/static/css/cherokee.css
index 65c41d464..1c56cbbea 100644
--- a/admin/static/css/cherokee.css
+++ b/admin/static/css/cherokee.css
@@ -97,7 +97,7 @@ h2 {
font-weight: normal;
font-size: 120%;
letter-spacing: -1px;
- margin: 0.4em 0;
+ margin-top: 20px;
}
h3 {
@@ -302,10 +302,10 @@ a.button:active span {
}
.tableprop_block hr {
- background: #88A;
+ background: #DCF;
border: none;
- margin-top:10px;
- margin-bottom:10px;
+ margin-top: 5px;
+ margin-bottom: 5px;
height: 1px;
width: 100%;
text-align: left;
diff --git a/admin/static/js/common.js b/admin/static/js/common.js
index 71fc61e89..781ec174b 100644
--- a/admin/static/js/common.js
+++ b/admin/static/js/common.js
@@ -58,7 +58,6 @@ function comment_out_class (id, klass, visible)
}
-
function options_active_prop (options_id, props_prefix)
{
var thisselect = get_by_id_and_class (options_id, 'select');
diff --git a/cherokee.conf.sample.pre b/cherokee.conf.sample.pre
index 642940093..d30ca75a1 100644
--- a/cherokee.conf.sample.pre
+++ b/cherokee.conf.sample.pre
@@ -30,31 +30,31 @@ vserver!default!logger!access!buffsize = 16384
vserver!default!logger!error!type = file
vserver!default!logger!error!filename = %localstatedir%/log/cherokee.error
-vserver!default!rule!1!match!type = default
+vserver!default!rule!1!match = default
vserver!default!rule!1!handler = common
vserver!default!rule!1!handler!iocache = 0
-vserver!default!rule!2!match!type = directory
+vserver!default!rule!2!match = directory
vserver!default!rule!2!match!directory = /icons
vserver!default!rule!2!handler = file
vserver!default!rule!2!document_root = %prefix%/share/cherokee/icons/
-vserver!default!rule!3!match!type = directory
+vserver!default!rule!3!match = directory
vserver!default!rule!3!match!directory = /cherokee_themes
vserver!default!rule!3!document_root = %prefix%/share/cherokee/themes/
vserver!default!rule!3!handler = file
-vserver!default!rule!4!match!type = directory
+vserver!default!rule!4!match = directory
vserver!default!rule!4!match!directory = /cgi-bin
vserver!default!rule!4!document_root = %prefix%/lib/cgi-bin/
vserver!default!rule!4!handler = cgi
-vserver!default!rule!5!match!type = directory
+vserver!default!rule!5!match = directory
vserver!default!rule!5!match!directory = /about
vserver!default!rule!5!handler = server_info
vserver!default!rule!5!handler!just_about = 1
-vserver!default!rule!99999!match!type = extensions
+vserver!default!rule!99999!match = extensions
vserver!default!rule!99999!match!extensions = php
vserver!default!rule!99999!handler = fcgi
vserver!default!rule!99999!handler!balancer = round_robin
diff --git a/cherokee/main.c b/cherokee/main.c
index aa9f525a1..a771f8dad 100644
--- a/cherokee/main.c
+++ b/cherokee/main.c
@@ -48,14 +48,14 @@
#define DEFAULT_CONFIG_FILE CHEROKEE_CONFDIR "/cherokee.conf"
#define BASIC_CONFIG \
- "vserver!default!rule!1!match!type = default\n" \
+ "vserver!default!rule!1!match = default\n" \
"vserver!default!rule!1!handler = common\n" \
"vserver!default!rule!1!handler!iocache = 0\n" \
- "vserver!default!rule!2!match!type = directory\n" \
+ "vserver!default!rule!2!match = directory\n" \
"vserver!default!rule!2!match!directory = /icons\n" \
"vserver!default!rule!2!handler = file\n" \
"vserver!default!rule!2!document_root = " CHEROKEE_ICONSDIR "\n" \
- "vserver!default!rule!3!match!type = directory\n" \
+ "vserver!default!rule!3!match = directory\n" \
"vserver!default!rule!3!match!directory = /cherokee_themes\n" \
"vserver!default!rule!3!handler = file\n" \
"vserver!default!rule!3!document_root = " CHEROKEE_THEMEDIR "\n" \
diff --git a/cherokee/main_admin.c b/cherokee/main_admin.c
index 034b814fa..916859682 100644
--- a/cherokee/main_admin.c
+++ b/cherokee/main_admin.c
@@ -67,7 +67,7 @@ config_server (cherokee_server_t *srv)
cherokee_buffer_add_va (&buf, "vserver!default!document_root = %s\n", document_root);
cherokee_buffer_add_va (&buf,
- RULE "1!match!type = default\n"
+ RULE "1!match = default\n"
RULE "1!handler = scgi\n"
RULE "1!handler!balancer = round_robin\n"
RULE "1!handler!balancer!type = interpreter\n"
@@ -75,23 +75,23 @@ config_server (cherokee_server_t *srv)
RULE "1!handler!balancer!local1!interpreter = %s/server.py %s\n", document_root, config_file);
cherokee_buffer_add_str (&buf,
- RULE "2!match!type = directory\n"
+ RULE "2!match = directory\n"
RULE "2!match!directory = /about\n"
RULE "2!handler = server_info\n");
cherokee_buffer_add_str (&buf,
- RULE "3!match!type = directory\n"
+ RULE "3!match = directory\n"
RULE "3!match!directory = /static\n"
RULE "3!handler = file\n"
RULE "3!handler!iocache = 0\n");
cherokee_buffer_add_str (&buf,
- RULE "4!match!type = request\n"
+ RULE "4!match = request\n"
RULE "4!match!request = ^/favicon.ico$\n"
RULE "4!handler = file\n");
cherokee_buffer_add_va (&buf,
- RULE "5!match!type = directory\n"
+ RULE "5!match = directory\n"
RULE "5!match!directory = /icons_local\n"
RULE "5!handler = file\n"
RULE "5!handler!iocache = 0\n"
diff --git a/cherokee/virtual_server.c b/cherokee/virtual_server.c
index 18b01e4e0..9eaab3407 100644
--- a/cherokee/virtual_server.c
+++ b/cherokee/virtual_server.c
@@ -533,12 +533,13 @@ configure_rule_match (cherokee_config_node_t *config,
{
ret_t ret;
rule_func_new_t func_new;
- cherokee_buffer_t *type = NULL;
cherokee_plugin_info_t *info = NULL;
+ cherokee_buffer_t *type = &config->val;
cherokee_server_t *srv = VSERVER_SRV(vserver);
-
- ret = cherokee_config_node_read (config, "type", &type);
- if (ret != ret_ok) {
+
+ /* Sanity check
+ */
+ if (type == NULL) {
PRINT_ERROR ("Rule match prio=%d must include a type property\n", priority);
return ret;
}
@@ -693,7 +694,7 @@ configure_rules (cherokee_config_node_t *config,
cherokee_rule_list_t *rule_list)
{
ret_t ret;
- cherokee_list_t *i, *j;
+ cherokee_list_t *i; //, *j;
cherokee_config_node_t *subconf;
// cherokee_boolean_t did_default = false;
diff --git a/qa/015-CGI-simple.py b/qa/015-CGI-simple.py
index 77b0f6264..b7f583c16 100644
--- a/qa/015-CGI-simple.py
+++ b/qa/015-CGI-simple.py
@@ -2,7 +2,7 @@
MAGIC = "This is the magic string"
CONF = """
-vserver!default!rule!150!match!type = directory
+vserver!default!rule!150!match = directory
vserver!default!rule!150!match!directory = /cgi-bin1
vserver!default!rule!150!handler = cgi
"""
diff --git a/qa/016-CGI-pathinfo.py b/qa/016-CGI-pathinfo.py
index 60f79e367..f1eb83272 100644
--- a/qa/016-CGI-pathinfo.py
+++ b/qa/016-CGI-pathinfo.py
@@ -2,7 +2,7 @@
MAGIC = "It works"
CONF = """
-vserver!default!rule!160!match!type = directory
+vserver!default!rule!160!match = directory
vserver!default!rule!160!match!directory = /cgi-bin2
vserver!default!rule!160!handler = cgi
"""
diff --git a/qa/017-CGI-pathinfo2.py b/qa/017-CGI-pathinfo2.py
index 28977fb8c..8836c5375 100644
--- a/qa/017-CGI-pathinfo2.py
+++ b/qa/017-CGI-pathinfo2.py
@@ -3,7 +3,7 @@
MAGIC = "Cherokee rocks"
CONF = """
-vserver!default!rule!170!match!type = directory
+vserver!default!rule!170!match = directory
vserver!default!rule!170!match!directory = /cgi-bin3
vserver!default!rule!170!handler = cgi
"""
diff --git a/qa/018-CGI-pathinfo3.py b/qa/018-CGI-pathinfo3.py
index 52aab588a..4dbe265c3 100644
--- a/qa/018-CGI-pathinfo3.py
+++ b/qa/018-CGI-pathinfo3.py
@@ -1,7 +1,7 @@
from base import *
CONF = """
-vserver!default!rule!180!match!type = directory
+vserver!default!rule!180!match = directory
vserver!default!rule!180!match!directory = /cgi-bin4
vserver!default!rule!180!handler = cgi
"""
diff --git a/qa/020-VirtualHost.py b/qa/020-VirtualHost.py
index f63f0a509..2b914a71a 100644
--- a/qa/020-VirtualHost.py
+++ b/qa/020-VirtualHost.py
@@ -5,7 +5,7 @@
CONF = """
vserver!cherokee.test!document_root = %s
vserver!cherokee.test!domain!1 = cherokee.test
-vserver!cherokee.test!rule!1!match!type = default
+vserver!cherokee.test!rule!1!match = default
vserver!cherokee.test!rule!1!handler = common
"""
diff --git a/qa/021-VirtualHost2.py b/qa/021-VirtualHost2.py
index ba939e05d..509c2b28a 100644
--- a/qa/021-VirtualHost2.py
+++ b/qa/021-VirtualHost2.py
@@ -6,7 +6,7 @@
vserver!first.domain!document_root = %s
vserver!first.domain!domain!1 = first.domain
vserver!first.domain!domain!2 = second.domain
-vserver!first.domain!rule!1!match!type = default
+vserver!first.domain!rule!1!match = default
vserver!first.domain!rule!1!handler = common
"""
diff --git a/qa/029-Post+Without-lenght.py b/qa/029-Post+Without-lenght.py
index 54836591b..377f6ea33 100644
--- a/qa/029-Post+Without-lenght.py
+++ b/qa/029-Post+Without-lenght.py
@@ -1,7 +1,7 @@
from base import *
CONF = """
-vserver!default!rule!290!match!type = directory
+vserver!default!rule!290!match = directory
vserver!default!rule!290!match!directory = /post1
vserver!default!rule!290!handler = phpcgi
vserver!default!rule!290!handler!interpreter = %s
diff --git a/qa/030-Post+urlencoded.py b/qa/030-Post+urlencoded.py
index 66fe78bde..79e00746f 100644
--- a/qa/030-Post+urlencoded.py
+++ b/qa/030-Post+urlencoded.py
@@ -2,7 +2,7 @@
from base import *
CONF = """
-vserver!default!rule!300!match!type = directory
+vserver!default!rule!300!match = directory
vserver!default!rule!300!match!directory = /post2
vserver!default!rule!300!handler = cgi
"""
diff --git a/qa/031-Post+urlencoded2.py b/qa/031-Post+urlencoded2.py
index 424f1d6f2..ec310abfd 100644
--- a/qa/031-Post+urlencoded2.py
+++ b/qa/031-Post+urlencoded2.py
@@ -1,7 +1,7 @@
from base import *
CONF = """
-vserver!default!rule!310!match!type = directory
+vserver!default!rule!310!match = directory
vserver!default!rule!310!match!directory = /post3
vserver!default!rule!310!handler = common
"""
diff --git a/qa/033-DirIndex.py b/qa/033-DirIndex.py
index 251ced0f9..59bc552d6 100644
--- a/qa/033-DirIndex.py
+++ b/qa/033-DirIndex.py
@@ -3,7 +3,7 @@
MAGIC = "The_index_page_should_contain_this"
CONF = """
-vserver!default!rule!330!match!type = directory
+vserver!default!rule!330!match = directory
vserver!default!rule!330!match!directory = /index1
vserver!default!rule!330!handler = dirlist
"""
diff --git a/qa/034-DirIndex2.py b/qa/034-DirIndex2.py
index b03f83b98..070b08ee8 100644
--- a/qa/034-DirIndex2.py
+++ b/qa/034-DirIndex2.py
@@ -3,7 +3,7 @@
MAGIC = "The_index_page_should_contain_this"
CONF = """
-vserver!default!rule!340!match!type = directory
+vserver!default!rule!340!match = directory
vserver!default!rule!340!match!directory = /index2
vserver!default!rule!340!handler = common
"""
diff --git a/qa/035-PHP-simple.py b/qa/035-PHP-simple.py
index 4816e1c6c..bf6592176 100644
--- a/qa/035-PHP-simple.py
+++ b/qa/035-PHP-simple.py
@@ -1,7 +1,7 @@
from base import *
CONF = """
-vserver!default!rule!350!match!type = directory
+vserver!default!rule!350!match = directory
vserver!default!rule!350!match!directory = /php1
vserver!default!rule!350!handler = phpcgi
vserver!default!rule!350!handler!interpreter = %s
diff --git a/qa/036-DocumentRoot-common.py b/qa/036-DocumentRoot-common.py
index ee5a37fcc..8e1bf0b65 100644
--- a/qa/036-DocumentRoot-common.py
+++ b/qa/036-DocumentRoot-common.py
@@ -3,7 +3,7 @@
MAGIC = "This_is_the_magic_key"
CONF = """
-vserver!default!rule!360!match!type = directory
+vserver!default!rule!360!match = directory
vserver!default!rule!360!match!directory = /dr_common
vserver!default!rule!360!handler = common
vserver!default!rule!360!document_root = %s
diff --git a/qa/039-Auth-Basic.py b/qa/039-Auth-Basic.py
index f2197bfd6..00c27ceb9 100644
--- a/qa/039-Auth-Basic.py
+++ b/qa/039-Auth-Basic.py
@@ -1,7 +1,7 @@
from base import *
CONF = """
-vserver!default!rule!390!match!type = directory
+vserver!default!rule!390!match = directory
vserver!default!rule!390!match!directory = /auth1
vserver!default!rule!390!match!final = 0
vserver!default!rule!390!auth = plain
diff --git a/qa/040-Auth-Basic2.py b/qa/040-Auth-Basic2.py
index b671a946c..962d7faa2 100644
--- a/qa/040-Auth-Basic2.py
+++ b/qa/040-Auth-Basic2.py
@@ -5,7 +5,7 @@
PASSWD="open sesame"
CONF = """
-vserver!default!rule!400!match!type = directory
+vserver!default!rule!400!match = directory
vserver!default!rule!400!match!directory = /auth2
vserver!default!rule!400!match!final = 0
vserver!default!rule!400!auth = plain
diff --git a/qa/041-Auth-Basic3.py b/qa/041-Auth-Basic3.py
index 184a132c7..e693f180b 100644
--- a/qa/041-Auth-Basic3.py
+++ b/qa/041-Auth-Basic3.py
@@ -1,7 +1,7 @@
from base import *
CONF = """
-vserver!default!rule!410!match!type = directory
+vserver!default!rule!410!match = directory
vserver!default!rule!410!match!directory = /auth3
vserver!default!rule!410!match!final = 0
vserver!default!rule!410!auth = plain
diff --git a/qa/044-Home.py b/qa/044-Home.py
index f34822d95..9a9475771 100644
--- a/qa/044-Home.py
+++ b/qa/044-Home.py
@@ -6,7 +6,7 @@
vserver!missing.host1!user_dir = public_html
vserver!missing.host1!domain!1 = missing.host1
-vserver!missing.host1!user_dir!rule!1!match!type = default
+vserver!missing.host1!user_dir!rule!1!match = default
vserver!missing.host1!user_dir!rule!1!handler = common
"""
diff --git a/qa/045-Home2.py b/qa/045-Home2.py
index 13cc2529d..bd8790dc9 100644
--- a/qa/045-Home2.py
+++ b/qa/045-Home2.py
@@ -10,7 +10,7 @@
vserver!testhost1!user_dir = %s
vserver!testhost1!domain!1 = testhost1
-vserver!testhost1!user_dir!rule!1!match!type = default
+vserver!testhost1!user_dir!rule!1!match = default
vserver!testhost1!user_dir!rule!1!handler = common
"""
diff --git a/qa/046-Redir.py b/qa/046-Redir.py
index 5deb66680..06fcaa659 100644
--- a/qa/046-Redir.py
+++ b/qa/046-Redir.py
@@ -1,7 +1,7 @@
from base import *
CONF = """
-vserver!default!rule!460!match!type = directory
+vserver!default!rule!460!match = directory
vserver!default!rule!460!match!directory = /redir46
vserver!default!rule!460!handler = redir
vserver!default!rule!460!handler!url = http://www.cherokee-project.com
diff --git a/qa/047-Redir2.py b/qa/047-Redir2.py
index e7d8b0b6e..82e88abc0 100644
--- a/qa/047-Redir2.py
+++ b/qa/047-Redir2.py
@@ -1,7 +1,7 @@
from base import *
CONF = """
-vserver!default!rule!470!match!type = directory
+vserver!default!rule!470!match = directory
vserver!default!rule!470!match!directory = /redir47
vserver!default!rule!470!handler = redir
vserver!default!rule!470!handler!url = http://www.cherokee-project.com
diff --git a/qa/048-NN.py b/qa/048-NN.py
index af2bf419d..c7bfdc9f1 100644
--- a/qa/048-NN.py
+++ b/qa/048-NN.py
@@ -4,7 +4,7 @@
CONTENT = "This is the content of " + MAGIC
CONF = """
-vserver!default!rule!480!match!type = directory
+vserver!default!rule!480!match = directory
vserver!default!rule!480!match!directory = /nn1
vserver!default!rule!480!handler = nn
"""
diff --git a/qa/049-NN-broken.py b/qa/049-NN-broken.py
index a27fe5375..f8035e4df 100644
--- a/qa/049-NN-broken.py
+++ b/qa/049-NN-broken.py
@@ -1,7 +1,7 @@
from base import *
CONF = """
-vserver!default!rule!490!match!type = directory
+vserver!default!rule!490!match = directory
vserver!default!rule!490!match!directory = /missing
vserver!default!rule!490!handler = nn
"""
diff --git a/qa/050-HeadBody.py b/qa/050-HeadBody.py
index 4b7cbd04f..921580040 100644
--- a/qa/050-HeadBody.py
+++ b/qa/050-HeadBody.py
@@ -3,7 +3,7 @@
MAGIC = "This shouldn't be sent"
CONF = """
-vserver!default!rule!500!match!type = directory
+vserver!default!rule!500!match = directory
vserver!default!rule!500!match!directory = /head-body
vserver!default!rule!500!handler = common
"""
diff --git a/qa/061-PAM.py b/qa/061-PAM.py
index 6932b6354..59fdb1e4e 100644
--- a/qa/061-PAM.py
+++ b/qa/061-PAM.py
@@ -6,7 +6,7 @@
PASS="cherokeeqa"
CONF = """
-vserver!default!rule!610!match!type = directory
+vserver!default!rule!610!match = directory
vserver!default!rule!610!match!directory = /privpam
vserver!default!rule!610!match!final = 0
vserver!default!rule!610!auth = pam
diff --git a/qa/062-PAM2.py b/qa/062-PAM2.py
index ebaae664e..cb53f3dd0 100644
--- a/qa/062-PAM2.py
+++ b/qa/062-PAM2.py
@@ -6,7 +6,7 @@
PASS="invalid"
CONF = """
-vserver!default!rule!620!match!type = directory
+vserver!default!rule!620!match = directory
vserver!default!rule!620!match!directory = /privpam2
vserver!default!rule!620!match!final = 0
vserver!default!rule!620!auth = pam
diff --git a/qa/063-DocumentRoot.py b/qa/063-DocumentRoot.py
index fbd7724b1..a3cd8ff87 100644
--- a/qa/063-DocumentRoot.py
+++ b/qa/063-DocumentRoot.py
@@ -3,7 +3,7 @@
MAGIC="This is the magic string for the DocumentRoot test - common"
CONF = """
-vserver!default!rule!630!match!type = directory
+vserver!default!rule!630!match = directory
vserver!default!rule!630!match!directory = /droot
vserver!default!rule!630!handler = common
vserver!default!rule!630!document_root = %s
diff --git a/qa/064-DirectoryIndex.py b/qa/064-DirectoryIndex.py
index 80c4cebbe..5a4fff195 100644
--- a/qa/064-DirectoryIndex.py
+++ b/qa/064-DirectoryIndex.py
@@ -3,7 +3,7 @@
MAGIC = "This is the content of the HTML index file"
CONF = """
-vserver!default!rule!640!match!type = directory
+vserver!default!rule!640!match = directory
vserver!default!rule!640!match!directory = /directoryindex1
vserver!default!rule!640!handler = common
"""
diff --git a/qa/066-DirectoryIndex3.py b/qa/066-DirectoryIndex3.py
index e2ebcbb01..4368b2fac 100644
--- a/qa/066-DirectoryIndex3.py
+++ b/qa/066-DirectoryIndex3.py
@@ -5,7 +5,7 @@
vserver!directoryindex3!document_root = %s
vserver!directoryindex3!domain!1 = directoryindex3
vserver!directoryindex3!directory_index = index.php,/super_test_index.php
-vserver!directoryindex3!rule!1!match!type = default
+vserver!directoryindex3!rule!1!match = default
vserver!directoryindex3!rule!1!handler = common
"""
diff --git a/qa/067-PathInfo.py b/qa/067-PathInfo.py
index 8f1230726..2c2ac88a2 100644
--- a/qa/067-PathInfo.py
+++ b/qa/067-PathInfo.py
@@ -13,7 +13,7 @@
#
# cgi.fix_pathinfo=0
#
-vserver!default!rule!670!match!type = directory
+vserver!default!rule!670!match = directory
vserver!default!rule!670!match!directory = /pathinfo
vserver!default!rule!670!handler = common
"""
diff --git a/qa/068-PathInfo2.py b/qa/068-PathInfo2.py
index c49b31855..c268f012a 100644
--- a/qa/068-PathInfo2.py
+++ b/qa/068-PathInfo2.py
@@ -3,7 +3,7 @@
PATH_INFO = "/param1/param2/param3"
CONF = """
-vserver!default!rule!680!match!type = directory
+vserver!default!rule!680!match = directory
vserver!default!rule!680!match!directory = /pathinfo2
vserver!default!rule!680!handler = phpcgi
vserver!default!rule!680!handler!interpreter = %s
diff --git a/qa/069-PathInfo3.py b/qa/069-PathInfo3.py
index 8d79b042a..512a25eab 100644
--- a/qa/069-PathInfo3.py
+++ b/qa/069-PathInfo3.py
@@ -3,7 +3,7 @@
PATH_INFO = "/param1/param2/param3"
CONF = """
-vserver!default!rule!690!match!type = directory
+vserver!default!rule!690!match = directory
vserver!default!rule!690!match!directory = /pathinfo3
vserver!default!rule!690!handler = cgi
"""
diff --git a/qa/070-Inherit.py b/qa/070-Inherit.py
index c2273caa8..d41b1a129 100644
--- a/qa/070-Inherit.py
+++ b/qa/070-Inherit.py
@@ -1,14 +1,14 @@
from base import *
CONF = """
-vserver!default!rule!700!match!type = directory
+vserver!default!rule!700!match = directory
vserver!default!rule!700!match!directory = /inherit1
vserver!default!rule!700!auth = plain
vserver!default!rule!700!auth!methods = basic
vserver!default!rule!700!auth!realm = Test
vserver!default!rule!700!auth!passwdfile = %s
-vserver!default!rule!701!match!type = directory
+vserver!default!rule!701!match = directory
vserver!default!rule!701!match!directory = /inherit1/dir1/dir2/dir3
vserver!default!rule!701!match!final = 0
vserver!default!rule!701!handler = file
diff --git a/qa/071-Inherit2.py b/qa/071-Inherit2.py
index 14360dc37..ed14135d4 100644
--- a/qa/071-Inherit2.py
+++ b/qa/071-Inherit2.py
@@ -3,14 +3,14 @@
MAGIC = "It shouldn't inherit in this case"
CONF = """
-vserver!default!rule!710!match!type = directory
+vserver!default!rule!710!match = directory
vserver!default!rule!710!match!directory = /inherit2/dir1/dir2/dir3
vserver!default!rule!710!auth = plain
vserver!default!rule!710!auth!methods = basic
vserver!default!rule!710!auth!realm = Test
vserver!default!rule!710!auth!passwdfile = %s
-vserver!default!rule!711!match!type = directory
+vserver!default!rule!711!match = directory
vserver!default!rule!711!match!directory = /inherit2
vserver!default!rule!711!match!final = 0
vserver!default!rule!711!handler = file
diff --git a/qa/072-Inherit3.py b/qa/072-Inherit3.py
index c65009360..06697ac3e 100644
--- a/qa/072-Inherit3.py
+++ b/qa/072-Inherit3.py
@@ -4,12 +4,12 @@
MAGIC = "This is th magic string"
CONF = """
-vserver!default!rule!720!match!type = directory
+vserver!default!rule!720!match = directory
vserver!default!rule!720!match!directory = /inherit3/dir1/dir2/dir3
vserver!default!rule!720!handler = phpcgi
vserver!default!rule!720!handler!interpreter = %s
-vserver!default!rule!721!match!type = directory
+vserver!default!rule!721!match = directory
vserver!default!rule!721!match!directory = /inherit3
vserver!default!rule!721!handler = file
"""
diff --git a/qa/073-Access.py b/qa/073-Access.py
index 6beb636f1..73d4472c3 100644
--- a/qa/073-Access.py
+++ b/qa/073-Access.py
@@ -3,7 +3,7 @@
MAGIC = "Allow From test"
CONF = """
-vserver!default!rule!730!match!type = directory
+vserver!default!rule!730!match = directory
vserver!default!rule!730!match!directory = /allow1
vserver!default!rule!730!match!final = 0
vserver!default!rule!730!allow_from = 99.99.99.99
diff --git a/qa/074-Access2.py b/qa/074-Access2.py
index 8e6d29d16..c4d6b08e6 100644
--- a/qa/074-Access2.py
+++ b/qa/074-Access2.py
@@ -3,7 +3,7 @@
MAGIC = "Allow From test 2"
CONF = """
-vserver!default!rule!740!match!type = directory
+vserver!default!rule!740!match = directory
vserver!default!rule!740!match!directory = /allow2
vserver!default!rule!740!match!final = 0
vserver!default!rule!740!allow_from = 127.0.0.1,::1
diff --git a/qa/075-AccessRange.py b/qa/075-AccessRange.py
index 934899f2c..0c1f67bd5 100644
--- a/qa/075-AccessRange.py
+++ b/qa/075-AccessRange.py
@@ -4,7 +4,7 @@
MAGIC = "Allow From range"
CONF = """
-vserver!default!rule!750!match!type = directory
+vserver!default!rule!750!match = directory
vserver!default!rule!750!match!directory = /allow_range1
vserver!default!rule!750!match!final = 0
vserver!default!rule!750!allow_from = ::1/128,127.0.0.1/32
diff --git a/qa/076-AccessRange2.py b/qa/076-AccessRange2.py
index 2f8c9e45c..dab0faba3 100644
--- a/qa/076-AccessRange2.py
+++ b/qa/076-AccessRange2.py
@@ -4,7 +4,7 @@
MAGIC = "Allow From range 2"
CONF = """
-vserver!default!rule!760!match!type = directory
+vserver!default!rule!760!match = directory
vserver!default!rule!760!match!directory = /allow_range2
vserver!default!rule!760!match!final = 0
vserver!default!rule!760!allow_from = 127.0.0.1/8
diff --git a/qa/077-AccessRange3.py b/qa/077-AccessRange3.py
index f21c17f96..779025618 100644
--- a/qa/077-AccessRange3.py
+++ b/qa/077-AccessRange3.py
@@ -4,7 +4,7 @@
MAGIC = "Allow From range invalid"
CONF = """
-vserver!default!rule!770!match!type = directory
+vserver!default!rule!770!match = directory
vserver!default!rule!770!match!directory = /allow_range3
vserver!default!rule!770!match!final = 0
vserver!default!rule!770!allow_from = 123.123.0.0/16,0102::/16
diff --git a/qa/078-AccessAny.py b/qa/078-AccessAny.py
index 271d4f726..447047a1f 100644
--- a/qa/078-AccessAny.py
+++ b/qa/078-AccessAny.py
@@ -4,7 +4,7 @@
MAGIC = "Allow From anywhere"
CONF = """
-vserver!default!rule!780!match!type = directory
+vserver!default!rule!780!match = directory
vserver!default!rule!780!match!directory = /allow_range4
vserver!default!rule!780!match!final = 0
vserver!default!rule!780!allow_from = ::/0,0.0.0.0/0
diff --git a/qa/079-Extension.py b/qa/079-Extension.py
index ac2641a98..04d060d0a 100644
--- a/qa/079-Extension.py
+++ b/qa/079-Extension.py
@@ -4,11 +4,11 @@
FORBIDDEN = "It shouldn't appear in the text"
CONF = """
-vserver!default!rule!790!match!type = directory
+vserver!default!rule!790!match = directory
vserver!default!rule!790!match!directory = /extension1
vserver!default!rule!790!handler = file
-vserver!default!rule!791!match!type = extensions
+vserver!default!rule!791!match = extensions
vserver!default!rule!791!match!extensions = xyz
vserver!default!rule!791!handler = phpcgi
vserver!default!rule!791!handler!interpreter = %s
diff --git a/qa/080-Extension2.py b/qa/080-Extension2.py
index 219f60091..4b45a999d 100644
--- a/qa/080-Extension2.py
+++ b/qa/080-Extension2.py
@@ -4,11 +4,11 @@
FORBIDDEN = "It shouldn't appear in the text"
CONF = """
-vserver!default!rule!800!match!type = directory
+vserver!default!rule!800!match = directory
vserver!default!rule!800!match!directory = /extension2
vserver!default!rule!800!handler = file
-vserver!default!rule!801!match!type = extensions
+vserver!default!rule!801!match = extensions
vserver!default!rule!801!match!extensions = abc,def,ghi
vserver!default!rule!801!handler = phpcgi
vserver!default!rule!801!handler!interpreter = %s
diff --git a/qa/081-DocumentRoot-Common-index.py b/qa/081-DocumentRoot-Common-index.py
index f1ac17d70..c89eb7f99 100644
--- a/qa/081-DocumentRoot-Common-index.py
+++ b/qa/081-DocumentRoot-Common-index.py
@@ -4,7 +4,7 @@
MAGIC2 = "Second part"
CONF = """
-vserver!default!rule!810!match!type = directory
+vserver!default!rule!810!match = directory
vserver!default!rule!810!match!directory = /dr_common_index
vserver!default!rule!810!handler = common
vserver!default!rule!810!document_root = %s
diff --git a/qa/082-Auth-header.py b/qa/082-Auth-header.py
index fb95b60e0..ecdd77349 100644
--- a/qa/082-Auth-header.py
+++ b/qa/082-Auth-header.py
@@ -1,7 +1,7 @@
from base import *
CONF = """
-vserver!default!rule!820!match!type = directory
+vserver!default!rule!820!match = directory
vserver!default!rule!820!match!directory = /auth_header
vserver!default!rule!820!match!final = 0
vserver!default!rule!820!auth = plain
diff --git a/qa/083-RedirParam.py b/qa/083-RedirParam.py
index 4da919c56..38fe5f362 100644
--- a/qa/083-RedirParam.py
+++ b/qa/083-RedirParam.py
@@ -1,7 +1,7 @@
from base import *
CONF = """
-vserver!default!rule!830!match!type = directory
+vserver!default!rule!830!match = directory
vserver!default!rule!830!match!directory = /redirparam
vserver!default!rule!830!handler = redir
vserver!default!rule!830!handler!rewrite!1!show = 0
diff --git a/qa/084-RedirParamShow.py b/qa/084-RedirParamShow.py
index 919ac5fd3..fe9be5efd 100644
--- a/qa/084-RedirParamShow.py
+++ b/qa/084-RedirParamShow.py
@@ -1,7 +1,7 @@
from base import *
CONF = """
-vserver!default!rule!840!match!type = directory
+vserver!default!rule!840!match = directory
vserver!default!rule!840!match!directory = /redirparam2
vserver!default!rule!840!handler = redir
vserver!default!rule!840!handler!rewrite!1!show = 1
diff --git a/qa/085-AuthUsers.py b/qa/085-AuthUsers.py
index a1bac0820..fee0ab5af 100644
--- a/qa/085-AuthUsers.py
+++ b/qa/085-AuthUsers.py
@@ -1,7 +1,7 @@
from base import *
CONF = """
-vserver!default!rule!850!match!type = directory
+vserver!default!rule!850!match = directory
vserver!default!rule!850!match!directory = /auth1users
vserver!default!rule!850!match!final = 0
vserver!default!rule!850!auth = plain
diff --git a/qa/086-AuthUsers2.py b/qa/086-AuthUsers2.py
index 1ae47b3b0..1b403a946 100644
--- a/qa/086-AuthUsers2.py
+++ b/qa/086-AuthUsers2.py
@@ -1,7 +1,7 @@
from base import *
CONF = """
-vserver!default!rule!860!match!type = directory
+vserver!default!rule!860!match = directory
vserver!default!rule!860!match!directory = /auth2users
vserver!default!rule!860!match!final = 0
vserver!default!rule!860!auth = plain
diff --git a/qa/088-CGI-envs.py b/qa/088-CGI-envs.py
index 2f00acdef..72fbab054 100644
--- a/qa/088-CGI-envs.py
+++ b/qa/088-CGI-envs.py
@@ -7,7 +7,7 @@
ENV2_VALUE = "This is the second one"
CONF = """
-vserver!default!rule!880!match!type = directory
+vserver!default!rule!880!match = directory
vserver!default!rule!880!match!directory = /cgienvs
vserver!default!rule!880!handler = cgi
vserver!default!rule!880!handler!env!%s = %s
diff --git a/qa/089-gzip-encoding.py b/qa/089-gzip-encoding.py
index 90dd57536..1f4527f18 100644
--- a/qa/089-gzip-encoding.py
+++ b/qa/089-gzip-encoding.py
@@ -8,7 +8,7 @@
MAGIC = "Random text follows: " + str_random (10 * 1024)
CONF = """
-vserver!default!rule!890!match!type = directory
+vserver!default!rule!890!match = directory
vserver!default!rule!890!match!directory = /gzip1
vserver!default!rule!890!handler = file
"""
diff --git a/qa/090-Digest.py b/qa/090-Digest.py
index 32828dc50..b7691ceeb 100644
--- a/qa/090-Digest.py
+++ b/qa/090-Digest.py
@@ -3,7 +3,7 @@
MAGIC = "Don't show this"
CONF = """
-vserver!default!rule!900!match!type = directory
+vserver!default!rule!900!match = directory
vserver!default!rule!900!match!directory = /digest1
vserver!default!rule!900!match!final = 0
vserver!default!rule!900!auth = plain
diff --git a/qa/091-Digest2.py b/qa/091-Digest2.py
index 40e977e1d..d5733c4d7 100644
--- a/qa/091-Digest2.py
+++ b/qa/091-Digest2.py
@@ -7,7 +7,7 @@
PASSWD = "itissecret"
CONF = """
-vserver!default!rule!910!match!type = directory
+vserver!default!rule!910!match = directory
vserver!default!rule!910!match!directory = /digest2
vserver!default!rule!910!match!final = 0
vserver!default!rule!910!auth = plain
diff --git a/qa/092-Digest3.py b/qa/092-Digest3.py
index 3eae16852..2724d4e45 100644
--- a/qa/092-Digest3.py
+++ b/qa/092-Digest3.py
@@ -8,7 +8,7 @@
PASSWD2 = "Itissecret"
CONF = """
-vserver!default!rule!920!match!type = directory
+vserver!default!rule!920!match = directory
vserver!default!rule!920!match!directory = /digest3
vserver!default!rule!920!match!final = 0
vserver!default!rule!920!auth = plain
diff --git a/qa/093-InvalidLinks.py b/qa/093-InvalidLinks.py
index 4e339fd1c..235770dcc 100644
--- a/qa/093-InvalidLinks.py
+++ b/qa/093-InvalidLinks.py
@@ -7,7 +7,7 @@
BLINKS = {"broken2": "del1", "broken1": "del2"}
CONF = """
-vserver!default!rule!930!match!type = directory
+vserver!default!rule!930!match = directory
vserver!default!rule!930!match!directory = /brokenlinks1
vserver!default!rule!930!handler = dirlist
"""
diff --git a/qa/094-URL-request.py b/qa/094-URL-request.py
index f0ff6c803..c2cc6a26a 100644
--- a/qa/094-URL-request.py
+++ b/qa/094-URL-request.py
@@ -6,9 +6,9 @@
vserver!request1host!document_root = %s
vserver!request1host!domain!1 = request1host
-vserver!request1host!rule!1!match!type = default
+vserver!request1host!rule!1!match = default
vserver!request1host!rule!1!handler = server_info
-vserver!request1host!rule!10!match!type = directory
+vserver!request1host!rule!10!match = directory
vserver!request1host!rule!10!match!directory = /urlrequest1
vserver!request1host!rule!10!handler = file
"""
diff --git a/qa/095-htpasswd-apache-md5.py b/qa/095-htpasswd-apache-md5.py
index 5343480f3..ccad8d076 100644
--- a/qa/095-htpasswd-apache-md5.py
+++ b/qa/095-htpasswd-apache-md5.py
@@ -10,7 +10,7 @@
PASSWD_APACHE = "$apr1$VVusx/..$B6P.9/IK81S3M1QNVdfdX0"
CONF = """
-vserver!default!rule!950!match!type = directory
+vserver!default!rule!950!match = directory
vserver!default!rule!950!match!directory = /apachemd5_1
vserver!default!rule!950!match!final = 0
vserver!default!rule!950!auth = htpasswd
diff --git a/qa/096-htpasswd-md5.py b/qa/096-htpasswd-md5.py
index 61f2eae5b..e9a687f88 100644
--- a/qa/096-htpasswd-md5.py
+++ b/qa/096-htpasswd-md5.py
@@ -10,7 +10,7 @@
PASSWD_MD5 = "$1$JJ3RnzaO$zpsGlLvKvMVrUW4ZNZ7Iw1"
CONF = """
-vserver!default!rule!960!match!type = directory
+vserver!default!rule!960!match = directory
vserver!default!rule!960!match!directory = /htpasswd_md5
vserver!default!rule!960!match!final = 0
vserver!default!rule!960!auth = htpasswd
diff --git a/qa/097-htpasswd-sha1.py b/qa/097-htpasswd-sha1.py
index 285f698a2..9d508d738 100644
--- a/qa/097-htpasswd-sha1.py
+++ b/qa/097-htpasswd-sha1.py
@@ -10,7 +10,7 @@
PASSWD_SHA1 = "{SHA}yQ4y0eYX/0yw69R4ne1+0QmBpec="
CONF = """
-vserver!default!rule!970!match!type = directory
+vserver!default!rule!970!match = directory
vserver!default!rule!970!match!directory = /htpasswd_sha1
vserver!default!rule!970!match!final = 0
vserver!default!rule!970!auth = htpasswd
diff --git a/qa/098-htpasswd-crypt.py b/qa/098-htpasswd-crypt.py
index e026383b3..ac50dd7b1 100644
--- a/qa/098-htpasswd-crypt.py
+++ b/qa/098-htpasswd-crypt.py
@@ -10,7 +10,7 @@
PASSWD_CRYPT = "kA7oFNEzu4SrI"
CONF = """
-vserver!default!rule!980!match!type = directory
+vserver!default!rule!980!match = directory
vserver!default!rule!980!match!directory = /htpasswd_crypt
vserver!default!rule!980!match!final = 0
vserver!default!rule!980!auth = htpasswd
diff --git a/qa/099-htpasswd-plain.py b/qa/099-htpasswd-plain.py
index a13545ef2..dc41fa926 100644
--- a/qa/099-htpasswd-plain.py
+++ b/qa/099-htpasswd-plain.py
@@ -9,7 +9,7 @@
PASSWD = "alo"
CONF = """
-vserver!default!rule!990!match!type = directory
+vserver!default!rule!990!match = directory
vserver!default!rule!990!match!directory = /htpasswd_plain
vserver!default!rule!990!match!final = 0
vserver!default!rule!990!auth = htpasswd
diff --git a/qa/100-Digest-htdigest.py b/qa/100-Digest-htdigest.py
index 910654f18..7facb7d51 100644
--- a/qa/100-Digest-htdigest.py
+++ b/qa/100-Digest-htdigest.py
@@ -8,7 +8,7 @@
DIR = "digest_htdigest1"
CONF = """
-vserver!default!rule!1000!match!type = directory
+vserver!default!rule!1000!match = directory
vserver!default!rule!1000!match!directory = %s
vserver!default!rule!1000!match!final = 0
vserver!default!rule!1000!auth = htdigest
diff --git a/qa/102-QueryString.py b/qa/102-QueryString.py
index 2ee8ba9b4..095b2c7e6 100644
--- a/qa/102-QueryString.py
+++ b/qa/102-QueryString.py
@@ -3,7 +3,7 @@
PARAMS = "param1=one¶m2=two¶m3"
CONF = """
-vserver!default!rule!1020!match!type = directory
+vserver!default!rule!1020!match = directory
vserver!default!rule!1020!match!directory = /querystring
vserver!default!rule!1020!handler = cgi
"""
diff --git a/qa/103-ScriptName.py b/qa/103-ScriptName.py
index 13722db82..1eef3f5bb 100644
--- a/qa/103-ScriptName.py
+++ b/qa/103-ScriptName.py
@@ -5,7 +5,7 @@
SCRIPT_NAME = VIRTUAL_DIR + "/exec.cgi"
CONF = """
-vserver!default!rule!1030!match!type = directory
+vserver!default!rule!1030!match = directory
vserver!default!rule!1030!match!directory = %s
vserver!default!rule!1030!handler = cgi
vserver!default!rule!1030!document_root = %s
diff --git a/qa/104-ScriptAlias_PathInfo.py b/qa/104-ScriptAlias_PathInfo.py
index 6ee9c1297..bca9658d6 100644
--- a/qa/104-ScriptAlias_PathInfo.py
+++ b/qa/104-ScriptAlias_PathInfo.py
@@ -4,7 +4,7 @@
PATH_INFO = "/this_is_the/path_info"
CONF = """
-vserver!default!rule!1040!match!type = directory
+vserver!default!rule!1040!match = directory
vserver!default!rule!1040!match!directory = /alias_and_pathinfo
vserver!default!rule!1040!handler = cgi
vserver!default!rule!1040!handler!script_alias = %s
diff --git a/qa/105-If-Range.py b/qa/105-If-Range.py
index d0297ba31..83b81f4bf 100644
--- a/qa/105-If-Range.py
+++ b/qa/105-If-Range.py
@@ -36,7 +36,7 @@
"""
CONF = """
-vserver!default!rule!1050!match!type = directory
+vserver!default!rule!1050!match = directory
vserver!default!rule!1050!match!directory = /if_range1
vserver!default!rule!1050!handler = file
"""
diff --git a/qa/106-If-Range2.py b/qa/106-If-Range2.py
index bfd2d8c55..dfcc655e0 100644
--- a/qa/106-If-Range2.py
+++ b/qa/106-If-Range2.py
@@ -14,7 +14,7 @@
"""
CONF = """
-vserver!default!rule!1060!match!type = directory
+vserver!default!rule!1060!match = directory
vserver!default!rule!1060!match!directory = /if_range2
vserver!default!rule!1060!handler = file
"""
diff --git a/qa/107-Priority1.py b/qa/107-Priority1.py
index a7949d054..a3553618d 100644
--- a/qa/107-Priority1.py
+++ b/qa/107-Priority1.py
@@ -4,11 +4,11 @@
TEXT = "It should be printed by the CGI"
CONF = """
-vserver!default!rule!1070!match!type = directory
+vserver!default!rule!1070!match = directory
vserver!default!rule!1070!match!directory = /prio1
vserver!default!rule!1070!handler = file
-vserver!default!rule!1071!match!type = directory
+vserver!default!rule!1071!match = directory
vserver!default!rule!1071!match!directory = /prio1/sub
vserver!default!rule!1071!handler = cgi
"""
diff --git a/qa/108-Priority2.py b/qa/108-Priority2.py
index ce41dbb1f..07fb12853 100644
--- a/qa/108-Priority2.py
+++ b/qa/108-Priority2.py
@@ -4,11 +4,11 @@
TEXT = "It should be printed by the CGI"
CONF = """
-vserver!default!rule!1080!match!type = directory
+vserver!default!rule!1080!match = directory
vserver!default!rule!1080!match!directory = /prio2/sub
vserver!default!rule!1080!handler = file
-vserver!default!rule!1081!match!type = extensions
+vserver!default!rule!1081!match = extensions
vserver!default!rule!1081!match!extensions = prio2
vserver!default!rule!1081!handler = cgi
"""
diff --git a/qa/109-Priority3.py b/qa/109-Priority3.py
index faf292f90..13a129c3b 100644
--- a/qa/109-Priority3.py
+++ b/qa/109-Priority3.py
@@ -4,11 +4,11 @@
TEXT = "It should be printed by the CGI"
CONF = """
-vserver!default!rule!1090!match!type = extensions
+vserver!default!rule!1090!match = extensions
vserver!default!rule!1090!match!extensions = prio3
vserver!default!rule!1090!handler = file
-vserver!default!rule!1091!match!type = directory
+vserver!default!rule!1091!match = directory
vserver!default!rule!1091!match!directory = /prio3/sub
vserver!default!rule!1091!handler = cgi
"""
diff --git a/qa/110-Priority4.py b/qa/110-Priority4.py
index 17f789723..d1ba67222 100644
--- a/qa/110-Priority4.py
+++ b/qa/110-Priority4.py
@@ -4,11 +4,11 @@
TEXT = "It should be printed by the CGI"
CONF = """
-vserver!default!rule!1100!match!type = directory
+vserver!default!rule!1100!match = directory
vserver!default!rule!1100!match!directory = /request_entry1
vserver!default!rule!1100!handler = file
-vserver!default!rule!1101!match!type = request
+vserver!default!rule!1101!match = request
vserver!default!rule!1101!match!request = request_entry1.*cgi$
vserver!default!rule!1101!handler = cgi
"""
diff --git a/qa/112-NiceError-CGI.py b/qa/112-NiceError-CGI.py
index f68a39f9f..3154dcbe5 100644
--- a/qa/112-NiceError-CGI.py
+++ b/qa/112-NiceError-CGI.py
@@ -34,7 +34,7 @@