conf: factor out list of regex into separate header
this allows to include the regexes in another file and apply transformations and experiments.
This commit is contained in:
parent
e20aa221ff
commit
f1f3994d09
93
src/conf.c
93
src/conf.c
@ -40,35 +40,6 @@
|
|||||||
#include "basicauth.h"
|
#include "basicauth.h"
|
||||||
#include "conf-tokens.h"
|
#include "conf-tokens.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* The configuration directives are defined in the structure below. Each
|
|
||||||
* directive requires a regular expression to match against, and a
|
|
||||||
* function to call when the regex is matched.
|
|
||||||
*
|
|
||||||
* Below are defined certain constant regular expression strings that
|
|
||||||
* can (and likely should) be used when building the regex for the
|
|
||||||
* given directive.
|
|
||||||
*/
|
|
||||||
#define DIGIT "[0-9]"
|
|
||||||
#define SPACE "[ \t]"
|
|
||||||
#define WS SPACE "+"
|
|
||||||
#define STR "\"([^\"]+)\""
|
|
||||||
#define BOOL "(yes|on|no|off)"
|
|
||||||
#define INT "(()" DIGIT "+)"
|
|
||||||
#define ALNUM "([-a-z0-9._]+)"
|
|
||||||
#define USERNAME "([^:]*)"
|
|
||||||
#define PASSWORD "([^@]*)"
|
|
||||||
#define IP "((([0-9]{1,3})\\.){3}[0-9]{1,3})"
|
|
||||||
#define IPMASK "(" IP "(/" DIGIT "+)?)"
|
|
||||||
#define IPV6 "(" \
|
|
||||||
"(([0-9a-f:]{2,39}))|" \
|
|
||||||
"(([0-9a-f:]{0,29}:" IP "))" \
|
|
||||||
")"
|
|
||||||
|
|
||||||
#define IPV6MASK "(" IPV6 "(/" DIGIT "+)?)"
|
|
||||||
#define BEGIN "^" SPACE "*"
|
|
||||||
#define END SPACE "*$"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Limit the maximum number of substring matches to a reasonably high
|
* Limit the maximum number of substring matches to a reasonably high
|
||||||
* number. Given the usual structure of the configuration file, sixteen
|
* number. Given the usual structure of the configuration file, sixteen
|
||||||
@ -184,69 +155,7 @@ struct {
|
|||||||
CONFFILE_HANDLER handler;
|
CONFFILE_HANDLER handler;
|
||||||
regex_t *cre;
|
regex_t *cre;
|
||||||
} directives[] = {
|
} directives[] = {
|
||||||
/* string arguments */
|
#include "conf_regex.h"
|
||||||
STDCONF (logfile, STR, handle_logfile),
|
|
||||||
STDCONF (pidfile, STR, handle_pidfile),
|
|
||||||
STDCONF (anonymous, STR, handle_anonymous),
|
|
||||||
STDCONF (viaproxyname, STR, handle_viaproxyname),
|
|
||||||
STDCONF (defaulterrorfile, STR, handle_defaulterrorfile),
|
|
||||||
STDCONF (statfile, STR, handle_statfile),
|
|
||||||
STDCONF (stathost, STR, handle_stathost),
|
|
||||||
STDCONF (xtinyproxy, BOOL, handle_xtinyproxy),
|
|
||||||
/* boolean arguments */
|
|
||||||
STDCONF (syslog, BOOL, handle_syslog),
|
|
||||||
STDCONF (bindsame, BOOL, handle_bindsame),
|
|
||||||
STDCONF (disableviaheader, BOOL, handle_disableviaheader),
|
|
||||||
/* integer arguments */
|
|
||||||
STDCONF (port, INT, handle_port),
|
|
||||||
STDCONF (maxclients, INT, handle_maxclients),
|
|
||||||
STDCONF (maxspareservers, INT, handle_obsolete),
|
|
||||||
STDCONF (minspareservers, INT, handle_obsolete),
|
|
||||||
STDCONF (startservers, INT, handle_obsolete),
|
|
||||||
STDCONF (maxrequestsperchild, INT, handle_obsolete),
|
|
||||||
STDCONF (timeout, INT, handle_timeout),
|
|
||||||
STDCONF (connectport, INT, handle_connectport),
|
|
||||||
/* alphanumeric arguments */
|
|
||||||
STDCONF (user, ALNUM, handle_user),
|
|
||||||
STDCONF (group, ALNUM, handle_group),
|
|
||||||
/* ip arguments */
|
|
||||||
STDCONF (listen, "(" IP "|" IPV6 ")", handle_listen),
|
|
||||||
STDCONF (allow, "(" "(" IPMASK "|" IPV6MASK ")" "|" ALNUM ")",
|
|
||||||
handle_allow),
|
|
||||||
STDCONF (deny, "(" "(" IPMASK "|" IPV6MASK ")" "|" ALNUM ")",
|
|
||||||
handle_deny),
|
|
||||||
STDCONF (bind, "(" IP "|" IPV6 ")", handle_bind),
|
|
||||||
/* other */
|
|
||||||
STDCONF (basicauth, ALNUM WS ALNUM, handle_basicauth),
|
|
||||||
STDCONF (errorfile, INT WS STR, handle_errorfile),
|
|
||||||
STDCONF (addheader, STR WS STR, handle_addheader),
|
|
||||||
|
|
||||||
#ifdef FILTER_ENABLE
|
|
||||||
/* filtering */
|
|
||||||
STDCONF (filter, STR, handle_filter),
|
|
||||||
STDCONF (filterurls, BOOL, handle_filterurls),
|
|
||||||
STDCONF (filterextended, BOOL, handle_filterextended),
|
|
||||||
STDCONF (filterdefaultdeny, BOOL, handle_filterdefaultdeny),
|
|
||||||
STDCONF (filtercasesensitive, BOOL, handle_filtercasesensitive),
|
|
||||||
#endif
|
|
||||||
#ifdef REVERSE_SUPPORT
|
|
||||||
/* Reverse proxy arguments */
|
|
||||||
STDCONF (reversebaseurl, STR, handle_reversebaseurl),
|
|
||||||
STDCONF (reverseonly, BOOL, handle_reverseonly),
|
|
||||||
STDCONF (reversemagic, BOOL, handle_reversemagic),
|
|
||||||
STDCONF (reversepath, STR "(" WS STR ")?", handle_reversepath),
|
|
||||||
#endif
|
|
||||||
#ifdef UPSTREAM_SUPPORT
|
|
||||||
STDCONF (upstream,
|
|
||||||
"(" "(none)" WS STR ")|" \
|
|
||||||
"(" "(http|socks4|socks5)" WS \
|
|
||||||
"(" USERNAME /*username*/ ":" PASSWORD /*password*/ "@" ")?"
|
|
||||||
"(" IP "|" ALNUM ")"
|
|
||||||
":" INT "(" WS STR ")?" ")", handle_upstream),
|
|
||||||
#endif
|
|
||||||
/* loglevel */
|
|
||||||
STDCONF (loglevel, "(critical|error|warning|notice|connect|info)",
|
|
||||||
handle_loglevel)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const unsigned int ndirectives = sizeof (directives) / sizeof (directives[0]);
|
const unsigned int ndirectives = sizeof (directives) / sizeof (directives[0]);
|
||||||
|
93
src/conf_regex.h
Normal file
93
src/conf_regex.h
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* The configuration directives are defined in the structure below. Each
|
||||||
|
* directive requires a regular expression to match against, and a
|
||||||
|
* function to call when the regex is matched.
|
||||||
|
*
|
||||||
|
* Below are defined certain constant regular expression strings that
|
||||||
|
* can (and likely should) be used when building the regex for the
|
||||||
|
* given directive.
|
||||||
|
*/
|
||||||
|
#define DIGIT "[0-9]"
|
||||||
|
#define SPACE "[ \t]"
|
||||||
|
#define WS SPACE "+"
|
||||||
|
#define STR "\"([^\"]+)\""
|
||||||
|
#define BOOL "(yes|on|no|off)"
|
||||||
|
#define INT "(()" DIGIT "+)"
|
||||||
|
#define ALNUM "([-a-z0-9._]+)"
|
||||||
|
#define USERNAME "([^:]*)"
|
||||||
|
#define PASSWORD "([^@]*)"
|
||||||
|
#define IP "((([0-9]{1,3})\\.){3}[0-9]{1,3})"
|
||||||
|
#define IPMASK "(" IP "(/" DIGIT "+)?)"
|
||||||
|
#define IPV6 "(" \
|
||||||
|
"(([0-9a-f:]{2,39}))|" \
|
||||||
|
"(([0-9a-f:]{0,29}:" IP "))" \
|
||||||
|
")"
|
||||||
|
|
||||||
|
#define IPV6MASK "(" IPV6 "(/" DIGIT "+)?)"
|
||||||
|
#define BEGIN "^" SPACE "*"
|
||||||
|
#define END SPACE "*$"
|
||||||
|
|
||||||
|
|
||||||
|
STDCONF (logfile, STR, handle_logfile),
|
||||||
|
STDCONF (pidfile, STR, handle_pidfile),
|
||||||
|
STDCONF (anonymous, STR, handle_anonymous),
|
||||||
|
STDCONF (viaproxyname, STR, handle_viaproxyname),
|
||||||
|
STDCONF (defaulterrorfile, STR, handle_defaulterrorfile),
|
||||||
|
STDCONF (statfile, STR, handle_statfile),
|
||||||
|
STDCONF (stathost, STR, handle_stathost),
|
||||||
|
STDCONF (xtinyproxy, BOOL, handle_xtinyproxy),
|
||||||
|
/* boolean arguments */
|
||||||
|
STDCONF (syslog, BOOL, handle_syslog),
|
||||||
|
STDCONF (bindsame, BOOL, handle_bindsame),
|
||||||
|
STDCONF (disableviaheader, BOOL, handle_disableviaheader),
|
||||||
|
/* integer arguments */
|
||||||
|
STDCONF (port, INT, handle_port),
|
||||||
|
STDCONF (maxclients, INT, handle_maxclients),
|
||||||
|
STDCONF (maxspareservers, INT, handle_obsolete),
|
||||||
|
STDCONF (minspareservers, INT, handle_obsolete),
|
||||||
|
STDCONF (startservers, INT, handle_obsolete),
|
||||||
|
STDCONF (maxrequestsperchild, INT, handle_obsolete),
|
||||||
|
STDCONF (timeout, INT, handle_timeout),
|
||||||
|
STDCONF (connectport, INT, handle_connectport),
|
||||||
|
/* alphanumeric arguments */
|
||||||
|
STDCONF (user, ALNUM, handle_user),
|
||||||
|
STDCONF (group, ALNUM, handle_group),
|
||||||
|
/* ip arguments */
|
||||||
|
STDCONF (listen, "(" IP "|" IPV6 ")", handle_listen),
|
||||||
|
STDCONF (allow, "(" "(" IPMASK "|" IPV6MASK ")" "|" ALNUM ")",
|
||||||
|
handle_allow),
|
||||||
|
STDCONF (deny, "(" "(" IPMASK "|" IPV6MASK ")" "|" ALNUM ")",
|
||||||
|
handle_deny),
|
||||||
|
STDCONF (bind, "(" IP "|" IPV6 ")", handle_bind),
|
||||||
|
/* other */
|
||||||
|
STDCONF (basicauth, ALNUM WS ALNUM, handle_basicauth),
|
||||||
|
STDCONF (errorfile, INT WS STR, handle_errorfile),
|
||||||
|
STDCONF (addheader, STR WS STR, handle_addheader),
|
||||||
|
|
||||||
|
#ifdef FILTER_ENABLE
|
||||||
|
/* filtering */
|
||||||
|
STDCONF (filter, STR, handle_filter),
|
||||||
|
STDCONF (filterurls, BOOL, handle_filterurls),
|
||||||
|
STDCONF (filterextended, BOOL, handle_filterextended),
|
||||||
|
STDCONF (filterdefaultdeny, BOOL, handle_filterdefaultdeny),
|
||||||
|
STDCONF (filtercasesensitive, BOOL, handle_filtercasesensitive),
|
||||||
|
#endif
|
||||||
|
#ifdef REVERSE_SUPPORT
|
||||||
|
/* Reverse proxy arguments */
|
||||||
|
STDCONF (reversebaseurl, STR, handle_reversebaseurl),
|
||||||
|
STDCONF (reverseonly, BOOL, handle_reverseonly),
|
||||||
|
STDCONF (reversemagic, BOOL, handle_reversemagic),
|
||||||
|
STDCONF (reversepath, STR "(" WS STR ")?", handle_reversepath),
|
||||||
|
#endif
|
||||||
|
#ifdef UPSTREAM_SUPPORT
|
||||||
|
STDCONF (upstream,
|
||||||
|
"(" "(none)" WS STR ")|" \
|
||||||
|
"(" "(http|socks4|socks5)" WS \
|
||||||
|
"(" USERNAME /*username*/ ":" PASSWORD /*password*/ "@" ")?"
|
||||||
|
"(" IP "|" ALNUM ")"
|
||||||
|
":" INT "(" WS STR ")?" ")", handle_upstream),
|
||||||
|
#endif
|
||||||
|
/* loglevel */
|
||||||
|
STDCONF (loglevel, "(critical|error|warning|notice|connect|info)",
|
||||||
|
handle_loglevel)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user