OSSP CVS Repository

ossp - Check-in [2519]
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [Patchset]  [Tagging/Branching

Check-in Number: 2519
Date: 2002-Aug-16 11:45:06 (local)
2002-Aug-16 09:45:06 (UTC)
User:rse
Branch:
Comment: we just need a single TODO file here
Tickets:
Inspections:
Files:
ossp-pkg/cfg/00TODO      1.9->removed
ossp-pkg/cfg/TODO      1.1 -> 1.2     230 inserted, 1 deleted

ossp-pkg/cfg/00TODO 1.9 -> 1.10



ossp-pkg/cfg/TODO 1.1 -> 1.2

--- TODO 2002/07/29 11:45:18     1.1
+++ TODO 2002/08/16 09:45:06     1.2
@@ -1,2 +1,231 @@
+   _        ___  ____ ____  ____          __       
+  |_|_ _   / _ \/ ___/ ___||  _ \    ___ / _| __ _ 
+  _|_||_| | | | \___ \___ \| |_) |  / __| |_ / _` |
+ |_||_|_| | |_| |___) |__) |  __/  | (__|  _| (_| |
+  |_|_|_|  \___/|____/____/|_|      \___|_|  \__, |
+                                             |___/
+  OSSP cfg - Configuration Parsing
+
+  TODO
+ 
+  o finish/fix implementation of cfg_node_select()
+  o implement cfg_node_find()
+  o fix internal linkage with "left sibling" pointer
+  o support for prefixes of all non-static symbols to better support embedding
+  o finish cfg.pod manual page (function description!)
+  o add ts-based test suite
+  o add line tracking support
+  o add pre-processor with at least includes
+  o add config tree verification!
+
+  ==================================================================================
+
+- 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: <line 7, column 1: `1b;
+<}> quu'>
+
+- cfg_t
+
+rewrite-uri <regex> <subst> { <rewrite-cond> }
+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  ::= <A>          ;   arbitrary argument
+foo  ::= <O>          ;   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",<O>*,<A>) 
+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;
+
+-------------------------------------------------------------------------------
+
+<config>     ::= "sequence" <count>? <name>;
+               | "sequence" <count>? <name>? "{" <directive>* "}";
+<directive>  ::= "directive" <token-count>? <name>;
+               | "directive" <token-count>? <name>? "{" <option>* <token>+ };
+<option>     ::= "option" <name> <regex>?;
+<token>      ::= "token" <name>? <regex>;
+<count>      ::= /^(\+|\*|\?|[0-9]+,[0-9]*|[0-9]*,[0-9]+|[0-9]+)$/
+<name>       ::= /^[a-zA-Z][a-zA-Z0-9_.-]*$/
+<regex>      ::= ...
+
+-------------------------------------------------------------------------------
+
+sequence ROOT {
+    directive * "directive" {
+
+    directive * token-1 {
+        token token "token";
+        token name  /^[a-zA-Z][a-zA-Z0-9_.-]*$/;
+        token regex /^.+$/;
+    }
+};
+
+-------------------------------------------------------------------------------
+
+directive token {
+    opt1      { /.../ opt2=/.../ } { 
+    directive { /^token$/ }; 
+    name      { m/.../; m/^[a-zA-Z][a-zA-Z0-9_.-]*$/ } ?;
+    name      { m/(...|[a-zA-Z][a-zA-Z0-9_.-]*$)/ } ?;
+    regex     { m/^.+$/ };
+};
+directive acl   { directive=/^acl$/ addr=/^...|...$/+ };
+
+-------------------------------------------------------------------------------
+
+a?b((c|d)+e)?f
+
+A m/a/ ?
+B m/b/ 
+{
+    {
+        C m/c/ ;
+        D m/d/ 
+    } +
+    E m/e/
+} ? 
+F f
+
+<directive-match> ::= <token-match>+
+<token-match> ::= <name>? <regex> <quant>?
+
+-------------------------------------------------------------------------------
+
+<config>     ::= "sequence" <count>? <name>;
+               | "sequence" <count>? <name>? "{" <directive>* "}";
+<directive>  ::= "directive" <name>;
+               | "directive" <name>? "{" <options> "}" "{" <tokens> "}";
+
+<options>     ::= <tok-match>+
+<tokens>      ::= <dir-match>+
+
+<dir-match>   ::= <tok-match>+
+<tok-match>   ::= <name>? <node-match> <quant>?
+<node-match>  ::= "{" <dir-match> "}" | <regex>
+
+<option>     ::= "option" <name> <regex>?;
+<token>      ::= "token" <name>? <regex>;
+
+<count>      ::= /^(\+|\*|\?|[0-9]+,[0-9]*|[0-9]*,[0-9]+|[0-9]+)$/
+<name>       ::= /^[a-zA-Z][a-zA-Z0-9_.-]*$/
+<regex>      ::= ...
 
-- add support for prefixes of all non-static symbols to better support embedding

CVSTrac 2.0.1