head 1.10; access; symbols FSL_1_0_2:1.9 FSL_1_0_1:1.9 FSL_1_0_0:1.9 FSL_0_9_0:1.9 CFG_0_9_0:1.9 FSL_0_1_12:1.9 FSL_0_1_11:1.9 FSL_0_1_10:1.9 FSL_0_1_9:1.9 FSL_0_1_8:1.9 FSL_0_1_7:1.9 FSL_0_1_6:1.9 FSL_0_1_5:1.9 FSL_0_1_1:1.9; locks; strict; comment @# @; 1.10 date 2002.08.16.09.45.06; author rse; state dead; branches; next 1.9; 1.9 date 2002.07.18.15.34.55; author rse; state Exp; branches; next 1.8; 1.8 date 2002.07.17.18.47.52; author rse; state Exp; branches; next 1.7; 1.7 date 2002.07.10.12.00.23; author rse; state Exp; branches; next 1.6; 1.6 date 2002.07.09.08.29.31; author rse; state Exp; branches; next 1.5; 1.5 date 2002.07.09.08.29.19; author rse; state Exp; branches; next 1.4; 1.4 date 2002.07.08.13.45.46; author rse; state Exp; branches; next 1.3; 1.3 date 2002.07.05.17.30.23; author rse; state Exp; branches; next 1.2; 1.2 date 2002.07.05.14.33.10; author rse; state Exp; branches; next 1.1; 1.1 date 2002.07.03.13.25.34; author rse; state Exp; branches; next ; desc @@ 1.10 log @we just need a single TODO file here @ text @ - destroy haengt in Endlosschleife - in scanner: use an combination of dynamic buffer and atomic symbol/token sub-library to allow first tokens of mostly arbitrary size and then to store the tokens redundancy-free. - Problem: \x00 oder \x{00} wird zu NUL-terminator -> use ptr+len instead - caStr/cpStr durch yyless/yymore?? - syntax verification - command line query tool - error checking in scanner? - OSSP ex support - wieso geht sample.cfg nicht als Arg bei "make check"? - newline in error message $ ./cfg_test sample2.cfg ERROR: quu'> - cfg_t rewrite-uri { } rewrite-uri ^/(.*) /path/$1 --redirect=permanent q{ %{SOURCE} != "x" }; Directory [--foo=A] Argument: - type: - keyword ("foo") via name - option ("--foo=BAR") via name & regex - argument ("foo") via regex - amount: - 1 - 0/1 ? - 0..n * - 1..n + - location: - by position - by name - lookup via: - name - position - regex match foo * bar foo = bar|quux|... foo (bar baz quux) foo ::= bar* ; kleene closure foo ::= bar|baz|quux ; union foo ::= bar baz quux ; concatenation foo ::= {foo;...} ; sequence of ... foo ::= (...) ; grouping foo ::= "bar" ; fixed terminal foo ::= /bar/ ; regex terminal foo ::= ; arbitrary argument foo ::= ; arbitrary option SEQ ::= "{" DIR DIR* "}" DIR ::= TOK (" " TOK)* ";" TOK ::= ... SEQ ::= DIR* SEQ(dir,dir,...) DIR ::= TOK+ DIR(tok,tok,...) TOK ::= string "..." config ::= SEQ(directory|user|rewrite|access) directory ::= DIR("directory",*,) dir_options ::= user ::= DIR("user",/^[a-z]$/) rewrite ::= access ::= "access" ("allow"|"deny"):action SEQ(access_list):acl access_list ::= m/^!?%{ID}$/ acl ::= "acl" TOK:name acl_list acl_list ::= SEQ(acl_entry) acl_entry ::= acl_action "from" net-addr:src "to" net-addr:dst acl_action ::= "allow"|"deny" net_addr ::= net_hostname | net_ipv4addr | net_ipv6addr sequence all { directive --class 1; }; directive --class 1 "foo" { option "bar" --occur=1 }; --------------------------------------------------------------------------- foo on; bar /bla { foo off; baz --fuck { b1; b2 --nase=baer; b3; b4; b5; } --fuck2; }; quux a1 a2 a3 a4; quux; --------------------------------------------------------------------------- sequence ROOT { directive foo; directive bar; directive quux --count=1:oo; }; sequence bar-seq { directive foo --count=0:1; directive baz --count=1:oo; }; directive foo { token - on|off|yes|no; }; directive bar { token path /.*; sequence bar-seq; }; directive baz { option fuck; option fuck2; sequence { directive foo { option nase (baer|hugo); option foo [0-9]; token ip-address; }; }; }; directive quux { token --count=0:oo a.*; }; token ip-address b1|b2|b3|b4|b5; ------------------------------------------------------------------------------- ::= "sequence" ? ; | "sequence" ? ? "{" * "}"; ::= "directive" ? ; | "directive" ? ? "{"