- Added support for time/size units
authormichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>
Mon, 22 Dec 2014 19:00:47 +0000 (19:00 +0000)
committermichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>
Mon, 22 Dec 2014 19:00:47 +0000 (19:00 +0000)
git-svn-id: svn://svn.ircd-hybrid.org/svnroot/hopm/trunk@5080 82007160-df01-0410-b94d-b575c5fd34c7

doc/reference.conf
src/config-lexer.c
src/config-lexer.l
src/config-parser.c
src/config-parser.h
src/config-parser.y

index f506586baedcde5d28b1da13ec02c40022cf1f0d..3116e502160679fd6d2f5aa0f0cb5433524faf44 100644 (file)
@@ -12,8 +12,8 @@ options {
        pidfile = "/some/path/hopm.pid";
 
        /*
-        * How many seconds to store the IP address of hosts which are
-        * confirmed (by previous scans) to be secure.  New users from these
+        * How long to store the IP address of hosts which are confirmed
+        * (by previous scans) to be secure.  New users from these
         * IP addresses will not be scanned again until this amount of time
         * has passed. IT IS STRONGLY RECOMMENDED THAT YOU DO NOT USE THIS
         * DIRECTIVE, but it is provided due to demand.
@@ -25,7 +25,7 @@ options {
         *
         * Keep this directive commented out to disable negative caching.
         */
-#      negcache = 3600;
+#      negcache = 1 hour;
 
        /*
         * Amount of file descriptors to allocate to asynchronous DNS.  64
@@ -466,14 +466,14 @@ scanner {
         * that send endless data to tie up your scanner.  4KB is plenty for
         * any known proxy.
         */
-       max_read = 4096;
+       max_read = 4kb;
 
        /*
-        * Amount of time (in seconds) before a test is considered timed out.
+        * Amount of time before a test is considered timed out.
         * Again, all but the poorest slowest proxies will be detected within
         * 30 seconds, and this helps keep resource usage low.
         */
-       timeout = 30;
+       timeout = 30 seconds;
 
        /* 
         * Target IP to tell the proxy to connect to
index 499beb02d82e495ee5dc821fff2cdba8d580491e..102c6192eba91b999d97025c7f04f0cfc2a25e66 100644 (file)
@@ -365,8 +365,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 63
-#define YY_END_OF_BUFFER 64
+#define YY_NUM_RULES 89
+#define YY_END_OF_BUFFER 90
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -374,39 +374,46 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[285] =
+static yyconst flex_int16_t yy_accept[344] =
     {   0,
-       61,   61,   64,   62,   61,   60,   62,    2,   62,   53,
-       62,   62,   62,   62,   62,   62,   62,   62,   62,   62,
-       62,   62,   62,   62,   62,   62,   62,   62,   62,   62,
-       61,   60,    0,    3,    2,    1,    2,   53,    0,    0,
-        0,    0,    0,    0,    0,    0,   13,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   58,    0,   56,
+       87,   87,   90,   88,   87,   86,   88,    2,   88,   79,
+       88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
+       88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
+       87,   86,    0,    3,    2,    1,    2,   79,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   13,    0,
+        0,    0,    0,   67,    0,    0,    0,    0,   72,    0,
+        0,    0,    0,    0,    0,   84,    0,   82,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   15,
-       17,    0,    0,    0,    0,    0,    0,    0,   59,    0,
+        0,    0,    0,    0,   54,    0,    0,    0,    0,    0,
 
-       26,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   15,    0,   17,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   85,    0,   26,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   55,    4,    0,    0,    0,    0,    0,    0,    0,
-        0,   47,    0,    0,   18,    0,   20,   21,    0,   23,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   81,    4,    0,    0,   62,    0,    0,   53,
+        0,    0,    0,    0,   56,   73,    0,    0,    0,    0,
+       18,    0,    0,    0,    0,   20,    0,   21,    0,   23,
        25,    0,    0,    0,    0,   31,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   54,   43,   44,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   57,    0,
-        0,   16,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   34,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   46,    0,    0,    0,    0,    0,    0,    0,   12,
-
-        0,   14,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   52,    0,    0,    0,   38,   49,   50,    0,    0,
-        0,    0,    0,    0,    7,    0,    0,    0,    0,    0,
-        0,    0,    0,   27,    0,   29,   30,    0,    0,   35,
-       36,    0,    0,   42,    0,   51,    0,    0,    0,    0,
-       11,    0,   48,   19,   22,   24,   28,   32,   33,   37,
-        0,    0,    0,   45,    0,    6,    8,    0,    0,   39,
-        0,    0,    0,   10,    0,    0,    0,    5,    9,   40,
-        0,    0,   41,    0
+        0,    0,    0,    0,    0,    0,    0,   80,   43,   44,
+        0,   52,    0,   48,    0,    0,   61,    0,    0,    0,
+
+        0,    0,   83,   55,    0,    0,   66,    0,   16,    0,
+       71,    0,    0,   50,    0,    0,    0,    0,    0,    0,
+        0,    0,   34,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   46,   51,    0,   47,    0,    0,    0,
+        0,    0,    0,   12,    0,   14,   65,    0,    0,   70,
+        0,   58,   49,    0,    0,    0,    0,    0,    0,    0,
+        0,   78,    0,    0,   60,    0,   38,   75,   76,    0,
+        0,    0,    0,    0,    0,    7,    0,    0,    0,    0,
+        0,    0,    0,    0,   57,    0,    0,   27,    0,   29,
+       30,    0,    0,   35,   36,   59,    0,    0,   42,    0,
+
+       77,    0,    0,    0,    0,   11,    0,   74,   64,   19,
+       69,   22,   24,   28,   32,   33,   37,    0,    0,    0,
+       45,    0,    6,    8,    0,    0,   63,   68,   39,    0,
+        0,    0,   10,    0,    0,    0,    5,    9,   40,    0,
+        0,   41,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -451,77 +458,91 @@ static yyconst flex_int32_t yy_meta[58] =
         1,    1,    1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[288] =
+static yyconst flex_int16_t yy_base[347] =
     {   0,
-        0,    0,  497,  570,  245,    0,   55,    0,   54,   54,
-       34,   55,   49,   45,   37,   60,   42,   49,   62,   91,
-       93,   93,  132,   90,   98,  133,   52,   64,   67,  106,
-      132,    0,   77,  570,    0,  570,    0,  115,  119,  108,
-      137,  138,  127,  126,  142,  139,  570,  133,  132,  150,
-      131,  146,  164,  155,  148,  161,  166,  570,  176,  570,
-      182,  168,  172,  185,  174,  177,  201,  176,  195,  185,
-      194,  183,  191,  185,  192,  203,  203,  216,  213,  210,
-       93,  231,  222,  223,  237,  226,  225,  228,  235,  570,
-      570,  232,  236,   86,  242,  243,  246,  240,  570,  235,
-
-      570,  243,  238,  250,  258,  247,  259,  267,  270,  264,
-      270,  280,  265,  276,  280,  285,  286,  287,  277,  277,
-      288,  570,  570,  277,  287,  285,  283,  289,  297,  289,
-      307,  298,  307,  321,  570,  313,  570,  570,  329,  314,
-      570,  318,  312,  320,  326,  570,  324,  326,  317,  336,
-      331,  331,  340,  329,  342,  334,  570,  570,  338,  334,
-      359,  348,  362,  369,  372,   85,  374,  361,  570,  366,
-      376,  570,  377,  380,  381,  374,  374,  373,  379,  388,
-      391,  570,  377,  380,  390,  395,  383,   75,  382,  389,
-      408,  570,  403,  412,  416,  415,  420,  422,  418,  570,
-
-      413,  570,  430,  426,  419,  419,  421,  426,  434,  427,
-      430,  570,  436,  428,  438,  570,  570,  570,   54,  430,
-      444,  452,  456,  453,  570,  468,  458,  461,  467,  459,
-      474,  474,  462,  570,  479,  570,  570,  473,  480,  570,
-      570,  475,  496,  570,  483,  570,  476,  473,  470,  481,
-      570,  484,  570,  570,  570,  570,  570,  570,  570,  570,
-      489,  503,  500,  570,  500,  570,  570,  510,  514,  570,
-      508,  509,  513,  570,  509,  512,  522,  570,  570,  570,
-      519,  526,  570,  570,   86,  567,   77
+        0,    0,  169,  689,  165,    0,   55,    0,   54,   54,
+       34,   55,   49,   57,   37,   60,   51,   55,   94,  129,
+       99,  103,  167,   72,  112,  155,   43,   59,  116,   68,
+      160,    0,   81,  689,    0,  689,    0,  148,   97,   98,
+      111,  133,  152,  147,  138,  146,  160,  155,  689,  150,
+      152,  153,  171,  156,  159,  175,  182,  182,  178,  201,
+      196,  207,  200,  206,  211,  689,  210,  689,  212,  201,
+      203,  217,  206,  212,  238,  208,  230,  244,  231,  233,
+      240,  237,  244,  256,  248,  259,  252,  265,  244,  120,
+      265,  264,  257,  259,  257,  273,  266,  262,  271,  280,
+
+      291,  689,  283,  689,  290,  292,  297,   95,  290,  308,
+      291,  307,  295,  309,  312,  306,  689,  301,  689,  309,
+      303,  315,  316,  305,  308,  316,  319,  317,  330,  334,
+      345,  332,  343,  348,  351,  352,  353,  344,  344,  352,
+      356,  348,  689,  689,  346,  356,  351,  356,  354,  689,
+      360,  368,  360,  373,  366,  376,  378,  392,  398,  396,
+      689,  387,  399,  403,  388,  689,  400,  689,  408,  393,
+      689,  397,  391,  399,  405,  689,  402,  404,  395,  414,
+      433,  410,  414,  426,  422,  440,  434,  689,  689,  436,
+      433,  435,  452,  437,  443,  446,  689,  453,  454,   90,
+
+      456,  443,  689,  689,  448,  459,  448,  443,  689,  462,
+      454,  451,  474,  470,  489,  488,  481,  482,  481,  488,
+      497,  500,  689,  486,  490,  500,  502,  506,  492,  107,
+      491,  491,  511,  689,  689,  495,  689,  504,  506,  508,
+      515,  529,  516,  689,  523,  689,  689,  523,  541,  689,
+      526,  528,  689,  540,  533,  533,  536,  541,  549,  541,
+      544,  689,  550,  542,  543,  552,  689,  689,  689,   52,
+      544,  551,  562,  557,  558,  689,  578,  572,  575,  581,
+      574,  588,  591,  591,  689,  592,  578,  689,  596,  689,
+      689,  590,  597,  689,  689,  689,  592,  614,  689,  599,
+
+      689,  592,  590,  587,  596,  689,  599,  689,  598,  689,
+      601,  689,  689,  689,  689,  689,  689,  621,  623,  620,
+      689,  619,  689,  689,  629,  634,  689,  689,  689,  628,
+      629,  633,  689,  630,  631,  641,  689,  689,  689,  638,
+      645,  689,  689,   81,  686,   71
     } ;
 
-static yyconst flex_int16_t yy_def[288] =
+static yyconst flex_int16_t yy_def[347] =
     {   0,
-      284,    1,  284,  284,  284,  285,  286,  287,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  285,  286,  284,  287,  284,  287,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,    0,  284,  284,  284
+      343,    1,  343,  343,  343,  344,  345,  346,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  344,  345,  343,  346,  343,  346,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,    0,  343,  343,  343
     } ;
 
-static yyconst flex_int16_t yy_nxt[628] =
+static yyconst flex_int16_t yy_nxt[747] =
     {   0,
         4,    5,    6,    7,    8,    4,    9,   10,   10,   10,
        11,   12,   13,   14,   15,   16,    4,   17,   18,   19,
@@ -529,72 +550,85 @@ static yyconst flex_int16_t yy_nxt[628] =
        29,    4,   30,    4,   11,   12,   13,   14,   15,   16,
         4,   17,   18,   19,    4,   20,   21,   22,   23,   24,
        25,   26,   27,   28,   29,    4,   30,   34,   34,   36,
-       37,   38,   38,   38,   39,   40,   42,   44,   45,   48,
-       46,   49,   43,   47,   50,   41,   51,   35,   76,   34,
-       34,   77,   52,  217,  218,   78,   32,  243,   39,   40,
-       42,   44,   45,   48,   46,   49,   43,   47,   50,   41,
-
-       51,   53,   76,   55,   67,   77,   52,   56,   59,   78,
-       69,   57,   70,   68,   54,   60,   58,   61,  198,  136,
-       79,   71,   38,   38,   38,   53,  124,   55,   67,   80,
-       81,   56,   59,   31,   69,   57,   70,   68,   54,   60,
-       58,   61,   62,   72,   79,   71,   63,   82,   83,   84,
-       64,   73,   85,   80,   81,   65,   86,   66,   74,   87,
-       88,   89,   90,   91,   92,   75,   62,   72,   95,   96,
-       63,   82,   83,   84,   64,   73,   85,   97,   98,   65,
-       86,   66,   74,   87,   88,   89,   90,   91,   92,   75,
-       93,   99,   95,   96,  103,   94,  100,  104,  105,  106,
-
-      107,   97,   98,  101,  110,  111,  114,  112,  115,  102,
-      113,  108,  116,  117,   93,   99,  118,  119,  103,   94,
-      100,  104,  105,  106,  107,  109,  120,  101,  110,  111,
-      114,  112,  115,  102,  113,  108,  116,  117,  121,  122,
-      118,  119,  123,  125,  126,  127,   31,  130,  128,  109,
-      120,  131,  132,  133,  134,  135,  137,  138,  139,  140,
-      141,  142,  121,  122,  143,  144,  123,  125,  126,  127,
-      129,  130,  128,  145,  146,  131,  132,  133,  134,  135,
-      137,  138,  139,  140,  141,  142,  147,  148,  143,  144,
-      149,  150,  151,  152,  153,  154,  155,  145,  146,  156,
-
-      157,  158,  159,  160,  161,  162,  163,  164,  165,  166,
-      147,  148,  167,  168,  149,  150,  151,  152,  153,  154,
-      155,  169,  170,  156,  157,  158,  159,  160,  161,  162,
-      163,  164,  165,  166,  171,  172,  167,  168,  173,  174,
-      175,  176,  177,  178,  179,  169,  170,  180,  181,  182,
-      183,  184,  186,  185,  187,  188,  189,  190,  171,  172,
-      191,  192,  173,  174,  175,  176,  177,  178,  179,  193,
-      194,  180,  181,  182,  183,  184,  186,  185,  187,  188,
-      189,  190,  195,  196,  191,  192,  197,  199,  200,  201,
-      202,  203,  204,  193,  194,  205,  206,  207,  208,  209,
-
-      210,  211,  212,  213,  214,  215,  195,  196,  216,  219,
-      197,  199,  200,  201,  202,  203,  204,  220,  221,  205,
-      206,  207,  208,  209,  210,  211,  212,  213,  214,  215,
-      222,  223,  216,  219,  224,  225,  226,  227,  229,  230,
-      231,  220,  221,  232,  233,  234,  235,  236,  237,  228,
-      238,  239,  240,  241,  222,  223,  242,  244,  224,  225,
-      226,  227,  229,  230,  231,  245,  246,  232,  233,  234,
-      235,  236,  237,  228,  238,  239,  240,  241,  247,  248,
-      242,  244,  249,  250,  251,  252,  253,  254,  255,  245,
-      246,  256,  257,  258,  259,  260,  284,  264,  284,  265,
-
-      266,  267,  247,  248,  268,  269,  249,  250,  251,  252,
-      253,  254,  255,  270,  261,  256,  257,  258,  259,  260,
-      262,  264,  263,  265,  266,  267,  271,  272,  268,  269,
-      273,  274,  275,  276,  277,  278,  279,  270,  261,  280,
-      281,  282,  283,  284,  262,  284,  263,  284,  284,  284,
-      271,  272,  284,  284,  273,  274,  275,  276,  277,  278,
-      279,  284,  284,  280,  281,  282,  283,   33,   33,    3,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284
+       37,   38,   38,   38,   39,   40,   43,   45,   47,   84,
+       48,   35,   44,   49,   50,   41,   85,   52,   51,   46,
+       53,   32,   88,   34,   34,  298,   75,   42,   39,   40,
+       43,   45,   47,   84,   48,   76,   44,   49,   50,   41,
+
+       85,   52,   51,   46,   53,   54,   88,   89,   55,   63,
+       75,   42,   56,   64,   57,  268,  269,   65,   67,   76,
+       90,   91,   66,  242,   77,   68,   78,   69,  162,   54,
+       86,   89,   55,   63,   87,   79,   56,   64,   57,   58,
+       59,   65,   67,   60,   90,   91,   66,   61,   77,   68,
+       78,   69,   62,  145,   86,   38,   38,   38,   87,   79,
+       92,   31,   93,   58,   59,   80,   31,   60,  343,   94,
+       95,   61,   96,   81,   97,   98,   62,   70,   99,  100,
+       82,   71,  101,  102,   92,   72,   93,   83,  103,   80,
+       73,  104,   74,   94,   95,  105,   96,   81,   97,   98,
+
+      106,   70,   99,  100,   82,   71,  101,  102,  107,   72,
+      109,   83,  103,  108,   73,  104,   74,  110,  111,  105,
+      112,  114,  115,  116,  106,  117,  118,  121,  122,  113,
+      123,  124,  107,  119,  109,  125,  128,  108,  343,  120,
+      129,  110,  111,  133,  112,  114,  115,  116,  126,  117,
+      118,  121,  122,  113,  123,  124,  130,  119,  134,  125,
+      128,  135,  127,  120,  129,  136,  131,  133,  137,  132,
+      138,  139,  126,  140,  141,  142,  144,  146,  147,  148,
+      130,  149,  134,  150,  151,  135,  127,  153,  154,  136,
+      131,  143,  137,  132,  138,  139,  155,  140,  141,  142,
+
+      144,  146,  147,  148,  156,  149,  152,  150,  151,  157,
+      158,  153,  154,  159,  160,  143,  161,  163,  164,  165,
+      155,  166,  167,  168,  169,  170,  171,  172,  156,  173,
+      174,  175,  176,  157,  158,  177,  178,  159,  160,  179,
+      161,  163,  164,  165,  180,  166,  167,  168,  169,  170,
+      171,  172,  181,  173,  174,  175,  176,  182,  183,  177,
+      178,  184,  185,  179,  186,  187,  188,  189,  180,  190,
+      191,  192,  193,  194,  195,  196,  181,  197,  198,  199,
+      200,  182,  183,  201,  202,  184,  185,  203,  186,  187,
+      188,  189,  204,  190,  191,  192,  193,  194,  195,  196,
+
+      205,  197,  198,  199,  200,  206,  207,  201,  202,  208,
+      209,  203,  210,  211,  212,  213,  204,  214,  215,  216,
+      217,  218,  219,  220,  205,  221,  222,  223,  224,  206,
+      207,  343,  227,  208,  209,  228,  210,  211,  212,  213,
+      229,  214,  215,  216,  217,  218,  219,  220,  230,  221,
+      222,  223,  224,  225,  231,  226,  227,  232,  233,  228,
+      234,  235,  236,  237,  229,  238,  239,  240,  241,  243,
+      244,  245,  230,  246,  247,  248,  249,  225,  231,  226,
+      250,  232,  233,  251,  234,  235,  236,  237,  252,  238,
+      239,  240,  241,  243,  244,  245,  253,  246,  247,  248,
+
+      249,  254,  255,  256,  250,  257,  258,  251,  259,  260,
+      261,  262,  252,  263,  264,  265,  266,  267,  270,  271,
+      253,  272,  273,  274,  275,  254,  255,  256,  276,  257,
+      258,  277,  259,  260,  261,  262,  280,  263,  264,  265,
+      266,  267,  270,  271,  278,  272,  273,  274,  275,  281,
+      282,  283,  276,  284,  285,  277,  279,  286,  287,  288,
+      280,  289,  290,  291,  292,  293,  294,  295,  278,  296,
+      297,  299,  300,  281,  282,  283,  301,  284,  285,  302,
+      279,  286,  287,  288,  303,  289,  290,  291,  292,  293,
+      294,  295,  304,  296,  297,  299,  300,  305,  306,  307,
+
+      301,  308,  309,  302,  310,  311,  312,  313,  303,  314,
+      315,  316,  317,  321,  343,  322,  304,  323,  324,  325,
+      326,  305,  306,  307,  327,  308,  309,  328,  310,  311,
+      312,  313,  318,  314,  315,  316,  317,  321,  319,  322,
+      320,  323,  324,  325,  326,  329,  330,  331,  327,  332,
+      333,  328,  334,  335,  336,  337,  318,  338,  339,  340,
+      341,  342,  319,  343,  320,  343,  343,  343,  343,  329,
+      330,  331,  343,  332,  333,  343,  334,  335,  336,  337,
+      343,  338,  339,  340,  341,  342,   33,   33,    3,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343
     } ;
 
-static yyconst flex_int16_t yy_chk[628] =
+static yyconst flex_int16_t yy_chk[747] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -602,69 +636,82 @@ static yyconst flex_int16_t yy_chk[628] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    7,    7,    9,
-        9,   10,   10,   10,   11,   12,   13,   14,   15,   17,
-       16,   18,   13,   16,   18,   12,   19,  287,   27,   33,
-       33,   28,   19,  188,  188,   29,  285,  219,   11,   12,
-       13,   14,   15,   17,   16,   18,   13,   16,   18,   12,
-
-       19,   20,   27,   21,   24,   28,   19,   21,   22,   29,
-       25,   21,   25,   24,   20,   22,   21,   22,  166,   94,
-       30,   25,   38,   38,   38,   20,   81,   21,   24,   39,
-       40,   21,   22,   31,   25,   21,   25,   24,   20,   22,
-       21,   22,   23,   26,   30,   25,   23,   41,   42,   43,
-       23,   26,   44,   39,   40,   23,   45,   23,   26,   46,
-       48,   49,   50,   51,   52,   26,   23,   26,   54,   55,
-       23,   41,   42,   43,   23,   26,   44,   56,   57,   23,
-       45,   23,   26,   46,   48,   49,   50,   51,   52,   26,
-       53,   59,   54,   55,   62,   53,   61,   63,   64,   65,
-
-       66,   56,   57,   61,   68,   69,   71,   70,   72,   61,
-       70,   67,   73,   74,   53,   59,   75,   76,   62,   53,
-       61,   63,   64,   65,   66,   67,   77,   61,   68,   69,
-       71,   70,   72,   61,   70,   67,   73,   74,   78,   79,
-       75,   76,   80,   82,   83,   84,    5,   86,   85,   67,
-       77,   87,   88,   89,   92,   93,   95,   96,   97,   98,
-      100,  102,   78,   79,  103,  104,   80,   82,   83,   84,
-       85,   86,   85,  105,  106,   87,   88,   89,   92,   93,
-       95,   96,   97,   98,  100,  102,  107,  108,  103,  104,
-      109,  110,  111,  112,  113,  114,  115,  105,  106,  116,
-
-      117,  118,  119,  120,  121,  124,  125,  126,  127,  128,
-      107,  108,  129,  130,  109,  110,  111,  112,  113,  114,
-      115,  131,  132,  116,  117,  118,  119,  120,  121,  124,
-      125,  126,  127,  128,  133,  134,  129,  130,  136,  139,
-      140,  142,  143,  144,  145,  131,  132,  147,  148,  149,
-      150,  151,  152,  151,  153,  154,  155,  156,  133,  134,
-      159,  160,  136,  139,  140,  142,  143,  144,  145,  161,
-      162,  147,  148,  149,  150,  151,  152,  151,  153,  154,
-      155,  156,  163,  164,  159,  160,  165,  167,  168,  170,
-      171,  173,  174,  161,  162,  175,  176,  177,  178,  179,
-
-      180,  181,  183,  184,  185,  186,  163,  164,  187,  189,
-      165,  167,  168,  170,  171,  173,  174,  190,  191,  175,
-      176,  177,  178,  179,  180,  181,  183,  184,  185,  186,
-      193,  194,  187,  189,  195,  196,  197,  198,  199,  201,
-      203,  190,  191,  204,  205,  206,  207,  208,  209,  198,
-      210,  211,  213,  214,  193,  194,  215,  220,  195,  196,
-      197,  198,  199,  201,  203,  221,  222,  204,  205,  206,
-      207,  208,  209,  198,  210,  211,  213,  214,  223,  224,
-      215,  220,  226,  227,  228,  229,  230,  231,  232,  221,
-      222,  233,  235,  238,  239,  242,    3,  245,    0,  247,
-
-      248,  249,  223,  224,  250,  252,  226,  227,  228,  229,
-      230,  231,  232,  261,  243,  233,  235,  238,  239,  242,
-      243,  245,  243,  247,  248,  249,  262,  263,  250,  252,
-      265,  268,  269,  271,  272,  273,  275,  261,  243,  276,
-      277,  281,  282,    0,  243,    0,  243,    0,    0,    0,
-      262,  263,    0,    0,  265,  268,  269,  271,  272,  273,
-      275,    0,    0,  276,  277,  281,  282,  286,  286,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284
+        9,   10,   10,   10,   11,   12,   13,   14,   15,   27,
+       16,  346,   13,   16,   17,   12,   28,   18,   17,   14,
+       18,  344,   30,   33,   33,  270,   24,   12,   11,   12,
+       13,   14,   15,   27,   16,   24,   13,   16,   17,   12,
+
+       28,   18,   17,   14,   18,   19,   30,   39,   19,   21,
+       24,   12,   19,   21,   19,  230,  230,   21,   22,   24,
+       40,   41,   21,  200,   25,   22,   25,   22,  108,   19,
+       29,   39,   19,   21,   29,   25,   19,   21,   19,   20,
+       20,   21,   22,   20,   40,   41,   21,   20,   25,   22,
+       25,   22,   20,   90,   29,   38,   38,   38,   29,   25,
+       42,   31,   43,   20,   20,   26,    5,   20,    3,   44,
+       45,   20,   46,   26,   47,   48,   20,   23,   50,   51,
+       26,   23,   52,   53,   42,   23,   43,   26,   54,   26,
+       23,   55,   23,   44,   45,   56,   46,   26,   47,   48,
+
+       57,   23,   50,   51,   26,   23,   52,   53,   58,   23,
+       59,   26,   54,   58,   23,   55,   23,   60,   61,   56,
+       62,   63,   64,   65,   57,   67,   69,   70,   71,   62,
+       72,   73,   58,   69,   59,   74,   76,   58,    0,   69,
+       77,   60,   61,   79,   62,   63,   64,   65,   75,   67,
+       69,   70,   71,   62,   72,   73,   78,   69,   80,   74,
+       76,   81,   75,   69,   77,   82,   78,   79,   83,   78,
+       84,   85,   75,   86,   87,   88,   89,   91,   92,   93,
+       78,   94,   80,   95,   96,   81,   75,   97,   98,   82,
+       78,   88,   83,   78,   84,   85,   99,   86,   87,   88,
+
+       89,   91,   92,   93,  100,   94,   96,   95,   96,  101,
+      103,   97,   98,  105,  106,   88,  107,  109,  110,  111,
+       99,  112,  113,  114,  115,  116,  118,  120,  100,  121,
+      122,  123,  124,  101,  103,  125,  126,  105,  106,  127,
+      107,  109,  110,  111,  128,  112,  113,  114,  115,  116,
+      118,  120,  129,  121,  122,  123,  124,  130,  131,  125,
+      126,  132,  133,  127,  134,  135,  136,  137,  128,  138,
+      139,  140,  141,  142,  145,  146,  129,  147,  148,  149,
+      151,  130,  131,  152,  153,  132,  133,  154,  134,  135,
+      136,  137,  155,  138,  139,  140,  141,  142,  145,  146,
+
+      156,  147,  148,  149,  151,  157,  158,  152,  153,  159,
+      160,  154,  162,  163,  164,  165,  155,  167,  169,  170,
+      172,  173,  174,  175,  156,  177,  178,  179,  180,  157,
+      158,    0,  182,  159,  160,  183,  162,  163,  164,  165,
+      184,  167,  169,  170,  172,  173,  174,  175,  185,  177,
+      178,  179,  180,  181,  186,  181,  182,  187,  190,  183,
+      191,  192,  193,  194,  184,  195,  196,  198,  199,  201,
+      202,  205,  185,  206,  207,  208,  210,  181,  186,  181,
+      211,  187,  190,  212,  191,  192,  193,  194,  213,  195,
+      196,  198,  199,  201,  202,  205,  214,  206,  207,  208,
+
+      210,  215,  216,  217,  211,  218,  219,  212,  220,  221,
+      222,  224,  213,  225,  226,  227,  228,  229,  231,  232,
+      214,  233,  236,  238,  239,  215,  216,  217,  240,  218,
+      219,  241,  220,  221,  222,  224,  243,  225,  226,  227,
+      228,  229,  231,  232,  242,  233,  236,  238,  239,  245,
+      248,  249,  240,  251,  252,  241,  242,  254,  255,  256,
+      243,  257,  258,  259,  260,  261,  263,  264,  242,  265,
+      266,  271,  272,  245,  248,  249,  273,  251,  252,  274,
+      242,  254,  255,  256,  275,  257,  258,  259,  260,  261,
+      263,  264,  277,  265,  266,  271,  272,  278,  279,  280,
+
+      273,  281,  282,  274,  283,  284,  286,  287,  275,  289,
+      292,  293,  297,  300,    0,  302,  277,  303,  304,  305,
+      307,  278,  279,  280,  309,  281,  282,  311,  283,  284,
+      286,  287,  298,  289,  292,  293,  297,  300,  298,  302,
+      298,  303,  304,  305,  307,  318,  319,  320,  309,  322,
+      325,  311,  326,  330,  331,  332,  298,  334,  335,  336,
+      340,  341,  298,    0,  298,    0,    0,    0,    0,  318,
+      319,  320,    0,  322,  325,    0,  326,  330,  331,  332,
+        0,  334,  335,  336,  340,  341,  345,  345,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343,  343,  343,  343,  343,
+      343,  343,  343,  343,  343,  343
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -724,7 +771,7 @@ void ccomment(void);
 int linenum = 1;
 char linebuf[512];
 
-#line 728 "config-lexer.c"
+#line 775 "config-lexer.c"
 
 #define INITIAL 0
 
@@ -934,7 +981,7 @@ YY_DECL
 #line 52 "config-lexer.l"
 
 
-#line 938 "config-lexer.c"
+#line 985 "config-lexer.c"
 
        while ( 1 )             /* loops until end-of-file is reached */
                {
@@ -967,13 +1014,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 285 )
+                               if ( yy_current_state >= 344 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 570 );
+               while ( yy_base[yy_current_state] != 689 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -1267,134 +1314,264 @@ YY_RULE_SETUP
        YY_BREAK
 case 47:
 YY_RULE_SETUP
+#line 141 "config-lexer.l"
+{ return YEARS; }
+       YY_BREAK
+case 48:
+YY_RULE_SETUP
 #line 142 "config-lexer.l"
+{ return YEARS; }
+       YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 143 "config-lexer.l"
+{ return MONTHS; }
+       YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 144 "config-lexer.l"
+{ return MONTHS; }
+       YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 145 "config-lexer.l"
+{ return WEEKS; }
+       YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 146 "config-lexer.l"
+{ return WEEKS; }
+       YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 147 "config-lexer.l"
+{ return DAYS; }
+       YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 148 "config-lexer.l"
+{ return DAYS; }
+       YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 149 "config-lexer.l"
+{ return HOURS; }
+       YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 150 "config-lexer.l"
+{ return HOURS; }
+       YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 151 "config-lexer.l"
+{ return MINUTES; }
+       YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 152 "config-lexer.l"
+{ return MINUTES; }
+       YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 153 "config-lexer.l"
+{ return SECONDS; }
+       YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 154 "config-lexer.l"
+{ return SECONDS; }
+       YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 156 "config-lexer.l"
+{ return BYTES; }
+       YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 157 "config-lexer.l"
+{ return BYTES; }
+       YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 158 "config-lexer.l"
+{ return KBYTES; }
+       YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 159 "config-lexer.l"
+{ return KBYTES; }
+       YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 160 "config-lexer.l"
+{ return KBYTES; }
+       YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 161 "config-lexer.l"
+{ return KBYTES; }
+       YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 162 "config-lexer.l"
+{ return KBYTES; }
+       YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 163 "config-lexer.l"
+{ return MBYTES; }
+       YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 164 "config-lexer.l"
+{ return MBYTES; }
+       YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 165 "config-lexer.l"
+{ return MBYTES; }
+       YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 166 "config-lexer.l"
+{ return MBYTES; }
+       YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 167 "config-lexer.l"
+{ return MBYTES; }
+       YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 169 "config-lexer.l"
 {
                           yylval.number = OPM_TYPE_HTTP;
                           return PROTOCOLTYPE;
                         }
        YY_BREAK
-case 48:
+case 74:
 YY_RULE_SETUP
-#line 147 "config-lexer.l"
+#line 174 "config-lexer.l"
 {
                           yylval.number = OPM_TYPE_HTTPPOST;
                           return PROTOCOLTYPE;
                         }
        YY_BREAK
-case 49:
+case 75:
 YY_RULE_SETUP
-#line 152 "config-lexer.l"
+#line 179 "config-lexer.l"
 {
                           yylval.number = OPM_TYPE_SOCKS4;
                           return PROTOCOLTYPE;
                         }
        YY_BREAK
-case 50:
+case 76:
 YY_RULE_SETUP
-#line 157 "config-lexer.l"
+#line 184 "config-lexer.l"
 {
                           yylval.number = OPM_TYPE_SOCKS5;
                           return PROTOCOLTYPE;
                         }
        YY_BREAK
-case 51:
+case 77:
 YY_RULE_SETUP
-#line 162 "config-lexer.l"
+#line 189 "config-lexer.l"
 {
                           yylval.number = OPM_TYPE_WINGATE;
                           return PROTOCOLTYPE;
                         }
        YY_BREAK
-case 52:
+case 78:
 YY_RULE_SETUP
-#line 167 "config-lexer.l"
+#line 194 "config-lexer.l"
 {
                           yylval.number = OPM_TYPE_ROUTER;
                           return PROTOCOLTYPE;
                         }
        YY_BREAK
-case 53:
+case 79:
 YY_RULE_SETUP
-#line 173 "config-lexer.l"
+#line 200 "config-lexer.l"
 {
                            yylval.number=atoi(yytext); 
                            return NUMBER;
                         }
        YY_BREAK
-case 54:
+case 80:
 YY_RULE_SETUP
-#line 182 "config-lexer.l"
+#line 209 "config-lexer.l"
 {
                            yylval.number=1;
                            return NUMBER;
                          }
        YY_BREAK
-case 55:
+case 81:
 YY_RULE_SETUP
-#line 186 "config-lexer.l"
+#line 213 "config-lexer.l"
 {
                            yylval.number=1;
                            return NUMBER;
                          }
        YY_BREAK
-case 56:
+case 82:
 YY_RULE_SETUP
-#line 190 "config-lexer.l"
+#line 217 "config-lexer.l"
 {
                            yylval.number=1;
                            return NUMBER;
                          }
        YY_BREAK
-case 57:
+case 83:
 YY_RULE_SETUP
-#line 197 "config-lexer.l"
+#line 224 "config-lexer.l"
 {
                            yylval.number=0;
                            return NUMBER;
                          }
        YY_BREAK
-case 58:
+case 84:
 YY_RULE_SETUP
-#line 202 "config-lexer.l"
+#line 229 "config-lexer.l"
 {
                            yylval.number=0;
                            return NUMBER;
                          }
        YY_BREAK
-case 59:
+case 85:
 YY_RULE_SETUP
-#line 207 "config-lexer.l"
+#line 234 "config-lexer.l"
 {
                            yylval.number=0;
                            return NUMBER;
                          }
        YY_BREAK
-case 60:
-/* rule 60 can match eol */
+case 86:
+/* rule 86 can match eol */
 YY_RULE_SETUP
-#line 213 "config-lexer.l"
+#line 240 "config-lexer.l"
 {
                            strlcpy(linebuf, yytext + 1, sizeof(linebuf));
                            ++linenum;
                            yyless(1);
                          }
        YY_BREAK
-case 61:
+case 87:
 YY_RULE_SETUP
-#line 219 "config-lexer.l"
+#line 246 "config-lexer.l"
 /* ignore whitespace */;
        YY_BREAK
-case 62:
+case 88:
 YY_RULE_SETUP
-#line 221 "config-lexer.l"
+#line 248 "config-lexer.l"
 return yytext[0]; 
        YY_BREAK
-case 63:
+case 89:
 YY_RULE_SETUP
-#line 223 "config-lexer.l"
+#line 250 "config-lexer.l"
 ECHO;
        YY_BREAK
-#line 1398 "config-lexer.c"
+#line 1575 "config-lexer.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -1687,7 +1864,7 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 285 )
+                       if ( yy_current_state >= 344 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1715,11 +1892,11 @@ static int yy_get_next_buffer (void)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 285 )
+               if ( yy_current_state >= 344 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 284);
+       yy_is_jam = (yy_current_state == 343);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2352,7 +2529,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 223 "config-lexer.l"
+#line 250 "config-lexer.l"
 
 
 
index 71ae0f6a046e61b9cfed6056039ba9d727917c86..24edf465f5848a111cdf2c3e82ead2a5113940cc 100644 (file)
@@ -138,6 +138,33 @@ USER                    { return USER;         }
 USERNAME                { return USERNAME;     }
 VHOST                   { return VHOST;        }
 
+years                   { return YEARS; }
+year                    { return YEARS; }
+months                  { return MONTHS; }
+month                   { return MONTHS; }
+weeks                   { return WEEKS; }
+week                    { return WEEKS; }
+days                    { return DAYS; }
+day                     { return DAYS; }
+hours                   { return HOURS; }
+hour                    { return HOURS; }
+minutes                 { return MINUTES; }
+minute                  { return MINUTES; }
+seconds                 { return SECONDS; }
+second                  { return SECONDS; }
+
+bytes                   { return BYTES; }
+byte                    { return BYTES; }
+kilobytes               { return KBYTES; }
+kilobyte                { return KBYTES; }
+kbytes                  { return KBYTES; }
+kbyte                   { return KBYTES; }
+kb                      { return KBYTES; }
+megabytes               { return MBYTES; }
+megabyte                { return MBYTES; }
+mbytes                  { return MBYTES; }
+mbyte                   { return MBYTES; }
+mb                      { return MBYTES; }
 
 HTTP                    {
                           yylval.number = OPM_TYPE_HTTP;
index 61e5ee5cf63bc4cd99c65c4d3c99c06541ac3af3..c1785d25482910e28a08c2ba5c1335d875a31684 100644 (file)
@@ -113,110 +113,130 @@ extern int yydebug;
     AWAY = 258,
     BAN_UNKNOWN = 259,
     BLACKLIST = 260,
-    CHANNEL = 261,
-    CONNREGEX = 262,
-    DNS_FDLIMIT = 263,
-    DNSBL_FROM = 264,
-    DNSBL_TO = 265,
-    EXEMPT = 266,
-    FD = 267,
-    INVITE = 268,
-    IRC = 269,
-    KLINE = 270,
-    KEY = 271,
-    MASK = 272,
-    MAX_READ = 273,
-    MODE = 274,
-    NAME = 275,
-    NEGCACHE = 276,
-    NICK = 277,
-    NICKSERV = 278,
-    OPER = 279,
-    OPM = 280,
-    OPTIONS = 281,
-    PASSWORD = 282,
-    PERFORM = 283,
-    PIDFILE = 284,
-    PORT = 285,
-    PROTOCOL = 286,
-    REALNAME = 287,
-    REPLY = 288,
-    SCANLOG = 289,
-    SCANNER = 290,
-    SENDMAIL = 291,
-    SERVER = 292,
-    TARGET_IP = 293,
-    TARGET_PORT = 294,
-    TARGET_STRING = 295,
-    TIMEOUT = 296,
-    TYPE = 297,
-    USERNAME = 298,
-    USER = 299,
-    VHOST = 300,
-    NUMBER = 301,
-    STRING = 302,
-    PROTOCOLTYPE = 303
+    BYTES = 261,
+    KBYTES = 262,
+    MBYTES = 263,
+    CHANNEL = 264,
+    CONNREGEX = 265,
+    DNS_FDLIMIT = 266,
+    DNSBL_FROM = 267,
+    DNSBL_TO = 268,
+    EXEMPT = 269,
+    FD = 270,
+    INVITE = 271,
+    IRC = 272,
+    KLINE = 273,
+    KEY = 274,
+    MASK = 275,
+    MAX_READ = 276,
+    MODE = 277,
+    NAME = 278,
+    NEGCACHE = 279,
+    NICK = 280,
+    NICKSERV = 281,
+    OPER = 282,
+    OPM = 283,
+    OPTIONS = 284,
+    PASSWORD = 285,
+    PERFORM = 286,
+    PIDFILE = 287,
+    PORT = 288,
+    PROTOCOL = 289,
+    REALNAME = 290,
+    REPLY = 291,
+    SCANLOG = 292,
+    SCANNER = 293,
+    SECONDS = 294,
+    MINUTES = 295,
+    HOURS = 296,
+    DAYS = 297,
+    WEEKS = 298,
+    MONTHS = 299,
+    YEARS = 300,
+    SENDMAIL = 301,
+    SERVER = 302,
+    TARGET_IP = 303,
+    TARGET_PORT = 304,
+    TARGET_STRING = 305,
+    TIMEOUT = 306,
+    TYPE = 307,
+    USERNAME = 308,
+    USER = 309,
+    VHOST = 310,
+    NUMBER = 311,
+    STRING = 312,
+    PROTOCOLTYPE = 313
   };
 #endif
 /* Tokens.  */
 #define AWAY 258
 #define BAN_UNKNOWN 259
 #define BLACKLIST 260
-#define CHANNEL 261
-#define CONNREGEX 262
-#define DNS_FDLIMIT 263
-#define DNSBL_FROM 264
-#define DNSBL_TO 265
-#define EXEMPT 266
-#define FD 267
-#define INVITE 268
-#define IRC 269
-#define KLINE 270
-#define KEY 271
-#define MASK 272
-#define MAX_READ 273
-#define MODE 274
-#define NAME 275
-#define NEGCACHE 276
-#define NICK 277
-#define NICKSERV 278
-#define OPER 279
-#define OPM 280
-#define OPTIONS 281
-#define PASSWORD 282
-#define PERFORM 283
-#define PIDFILE 284
-#define PORT 285
-#define PROTOCOL 286
-#define REALNAME 287
-#define REPLY 288
-#define SCANLOG 289
-#define SCANNER 290
-#define SENDMAIL 291
-#define SERVER 292
-#define TARGET_IP 293
-#define TARGET_PORT 294
-#define TARGET_STRING 295
-#define TIMEOUT 296
-#define TYPE 297
-#define USERNAME 298
-#define USER 299
-#define VHOST 300
-#define NUMBER 301
-#define STRING 302
-#define PROTOCOLTYPE 303
+#define BYTES 261
+#define KBYTES 262
+#define MBYTES 263
+#define CHANNEL 264
+#define CONNREGEX 265
+#define DNS_FDLIMIT 266
+#define DNSBL_FROM 267
+#define DNSBL_TO 268
+#define EXEMPT 269
+#define FD 270
+#define INVITE 271
+#define IRC 272
+#define KLINE 273
+#define KEY 274
+#define MASK 275
+#define MAX_READ 276
+#define MODE 277
+#define NAME 278
+#define NEGCACHE 279
+#define NICK 280
+#define NICKSERV 281
+#define OPER 282
+#define OPM 283
+#define OPTIONS 284
+#define PASSWORD 285
+#define PERFORM 286
+#define PIDFILE 287
+#define PORT 288
+#define PROTOCOL 289
+#define REALNAME 290
+#define REPLY 291
+#define SCANLOG 292
+#define SCANNER 293
+#define SECONDS 294
+#define MINUTES 295
+#define HOURS 296
+#define DAYS 297
+#define WEEKS 298
+#define MONTHS 299
+#define YEARS 300
+#define SENDMAIL 301
+#define SERVER 302
+#define TARGET_IP 303
+#define TARGET_PORT 304
+#define TARGET_STRING 305
+#define TIMEOUT 306
+#define TYPE 307
+#define USERNAME 308
+#define USER 309
+#define VHOST 310
+#define NUMBER 311
+#define STRING 312
+#define PROTOCOLTYPE 313
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE YYSTYPE;
 union YYSTYPE
 {
-#line 83 "config-parser.y" /* yacc.c:355  */
+#line 85 "config-parser.y" /* yacc.c:355  */
 
         int number;
         char *string;
 
-#line 220 "config-parser.c" /* yacc.c:355  */
+#line 240 "config-parser.c" /* yacc.c:355  */
 };
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -231,7 +251,7 @@ int yyparse (void);
 
 /* Copy the second part of user declarations.  */
 
-#line 235 "config-parser.c" /* yacc.c:358  */
+#line 255 "config-parser.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -473,21 +493,21 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   279
+#define YYLAST   301
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  54
+#define YYNTOKENS  64
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  74
+#define YYNNTS  78
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  131
+#define YYNRULES  147
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  293
+#define YYNSTATES  319
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   303
+#define YYMAXUTOK   313
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -501,14 +521,14 @@ static const yytype_uint8 yytranslate[] =
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    53,    51,
-       2,    52,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    63,    61,
+       2,    62,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    49,     2,    50,     2,     2,     2,     2,
+       2,     2,     2,    59,     2,    60,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -526,27 +546,29 @@ static const yytype_uint8 yytranslate[] =
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,    94,    94,    95,    98,    99,   100,   101,   102,   103,
-     108,   110,   111,   113,   114,   115,   116,   117,   119,   124,
-     130,   135,   143,   145,   146,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   165,   171,   177,   183,   189,   195,   201,   207,   215,
-     220,   226,   232,   238,   244,   254,   254,   271,   272,   274,
-     275,   276,   278,   286,   294,   305,   305,   321,   322,   324,
-     325,   326,   328,   338,   351,   351,   396,   397,   399,   400,
-     401,   402,   403,   404,   405,   406,   407,   408,   410,   417,
-     424,   431,   447,   453,   459,   465,   471,   490,   492,   493,
-     495,   496,   497,   498,   499,   501,   507,   513,   522,   522,
-     541,   542,   544,   545,   546,   547,   548,   549,   551,   558,
-     565,   576,   582,   584,   585,   587,   605,   607,   608,   610,
-     611,   613
+       0,   100,   100,   101,   104,   105,   106,   107,   108,   109,
+     111,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     122,   122,   123,   124,   125,   126,   131,   133,   134,   136,
+     137,   138,   139,   140,   142,   147,   153,   158,   166,   168,
+     169,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   188,   194,   200,
+     206,   212,   218,   224,   230,   238,   243,   249,   255,   261,
+     267,   277,   277,   294,   295,   297,   298,   299,   301,   309,
+     317,   328,   328,   344,   345,   347,   348,   349,   351,   361,
+     374,   374,   419,   420,   422,   423,   424,   425,   426,   427,
+     428,   429,   430,   431,   433,   440,   447,   454,   470,   476,
+     482,   488,   494,   513,   515,   516,   518,   519,   520,   521,
+     522,   524,   530,   536,   545,   545,   564,   565,   567,   568,
+     569,   570,   571,   572,   574,   581,   588,   599,   605,   607,
+     608,   610,   628,   630,   631,   633,   634,   636
 };
 #endif
 
@@ -556,14 +578,16 @@ static const yytype_uint16 yyrline[] =
 static const char *const yytname[] =
 {
   "$end", "error", "$undefined", "AWAY", "BAN_UNKNOWN", "BLACKLIST",
-  "CHANNEL", "CONNREGEX", "DNS_FDLIMIT", "DNSBL_FROM", "DNSBL_TO",
-  "EXEMPT", "FD", "INVITE", "IRC", "KLINE", "KEY", "MASK", "MAX_READ",
-  "MODE", "NAME", "NEGCACHE", "NICK", "NICKSERV", "OPER", "OPM", "OPTIONS",
-  "PASSWORD", "PERFORM", "PIDFILE", "PORT", "PROTOCOL", "REALNAME",
-  "REPLY", "SCANLOG", "SCANNER", "SENDMAIL", "SERVER", "TARGET_IP",
-  "TARGET_PORT", "TARGET_STRING", "TIMEOUT", "TYPE", "USERNAME", "USER",
-  "VHOST", "NUMBER", "STRING", "PROTOCOLTYPE", "'{'", "'}'", "';'", "'='",
-  "':'", "$accept", "config", "config_items", "options_entry",
+  "BYTES", "KBYTES", "MBYTES", "CHANNEL", "CONNREGEX", "DNS_FDLIMIT",
+  "DNSBL_FROM", "DNSBL_TO", "EXEMPT", "FD", "INVITE", "IRC", "KLINE",
+  "KEY", "MASK", "MAX_READ", "MODE", "NAME", "NEGCACHE", "NICK",
+  "NICKSERV", "OPER", "OPM", "OPTIONS", "PASSWORD", "PERFORM", "PIDFILE",
+  "PORT", "PROTOCOL", "REALNAME", "REPLY", "SCANLOG", "SCANNER", "SECONDS",
+  "MINUTES", "HOURS", "DAYS", "WEEKS", "MONTHS", "YEARS", "SENDMAIL",
+  "SERVER", "TARGET_IP", "TARGET_PORT", "TARGET_STRING", "TIMEOUT", "TYPE",
+  "USERNAME", "USER", "VHOST", "NUMBER", "STRING", "PROTOCOLTYPE", "'{'",
+  "'}'", "';'", "'='", "':'", "$accept", "config", "config_items",
+  "timespec_", "timespec", "sizespec_", "sizespec", "options_entry",
   "options_items", "options_item", "options_negcache", "options_pidfile",
   "options_dns_fdlimit", "options_scanlog", "irc_entry", "irc_items",
   "irc_item", "irc_away", "irc_kline", "irc_mode", "irc_nick",
@@ -593,17 +617,18 @@ static const yytype_uint16 yytoknum[] =
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   123,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   123,
      125,    59,    61,    58
 };
 # endif
 
-#define YYPACT_NINF -93
+#define YYPACT_NINF -157
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-93)))
+  (!!((Yystate) == (-157)))
 
-#define YYTABLE_NINF -109
+#define YYTABLE_NINF -125
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -612,36 +637,38 @@ static const yytype_uint16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     -93,   124,   -93,   -39,   -33,   -32,   -16,   -93,   -93,   -93,
-     -93,    -9,   -93,    26,   -93,   -93,    11,    78,   138,    70,
-      14,    16,   -93,    17,     8,   -93,   -93,   -93,    18,    20,
-      24,    30,    31,    35,    37,    43,    55,    60,    61,    64,
-      66,    67,    -1,   -93,   -93,   -93,   -93,   -93,   -93,   -93,
-     -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,    62,
-     -93,    68,    73,    74,    10,   -93,   -93,   -93,   -93,   -93,
-      85,   -93,    75,    82,    88,    89,    46,   -93,   -93,   -93,
-     -93,   -93,    39,    91,    19,    47,   -93,    90,    95,    97,
-      98,   104,   105,   106,   107,   109,   111,   114,   115,   116,
-     117,   118,   -93,   119,   120,   123,   125,   122,   -93,   126,
-     112,   130,   131,   132,   129,   -93,   -93,   108,   133,    38,
-     -93,   -93,   -93,   -93,   134,   135,   136,   137,   139,   140,
-     141,   142,   143,    12,   -93,   -93,   -93,   -93,   -93,   -93,
-     -93,   -93,   -93,   -93,   145,   -93,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     -93,    21,   160,   161,   162,   -93,   113,   163,   164,   165,
-     166,   -93,   171,   172,   169,   -93,   144,   175,   176,   174,
-     177,   179,   180,   182,   183,   178,   -93,   -93,   -93,   -93,
-     -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,
-     -93,   -93,   181,   184,   185,   -12,   -93,   -93,   -93,   -93,
-     -93,   -93,   -93,   -93,   186,   187,   188,   128,   189,    44,
-     -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,
-     191,   192,   -93,   193,   194,   195,   173,   196,   197,   198,
-     199,   200,   -93,   205,   206,   207,   204,   -93,   210,   211,
-     212,   214,   215,   213,   -93,   -93,   -93,   -93,   -93,   -93,
-     217,   -93,   -93,   -93,   -93,   -93,   216,   218,   219,   -93,
-     220,   221,   222,   209,   -43,   -93,   223,   -93,   224,   -93,
-     -93,   -93,   -93,   -93,   -93,   229,   226,   -93,   -93,   -93,
-     227,   -93,   -93
+    -157,   126,  -157,   -52,   -48,   -40,   -36,  -157,  -157,  -157,
+    -157,   -49,  -157,    -9,  -157,  -157,    39,    80,    83,   136,
+     -22,   -18,  -157,   -17,    19,  -157,  -157,  -157,   -16,   -10,
+      -4,     4,    12,    23,    24,    30,    32,    37,    42,    56,
+      62,    66,     0,  -157,  -157,  -157,  -157,  -157,  -157,  -157,
+    -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,    59,
+    -157,    68,    69,    72,     3,  -157,  -157,  -157,  -157,  -157,
+     133,  -157,    77,    79,    82,    84,    33,  -157,  -157,  -157,
+    -157,  -157,    16,   102,    44,    81,  -157,    88,    92,    99,
+     101,   104,   105,   106,   108,   109,   103,   110,   112,   113,
+     114,   111,  -157,   129,   132,   137,   138,   131,  -157,   134,
+     140,   141,   142,   143,   144,  -157,  -157,   128,   139,    31,
+    -157,  -157,  -157,  -157,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,    27,  -157,  -157,  -157,  -157,  -157,  -157,
+    -157,  -157,  -157,  -157,   155,  -157,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+    -157,    93,   170,   171,   172,  -157,    96,   173,   135,   174,
+     175,   176,  -157,   181,   182,   179,  -157,   185,   186,   187,
+     188,   190,   189,   191,   141,   192,   193,  -157,  -157,  -157,
+    -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,
+    -157,  -157,  -157,   194,   195,   196,    48,  -157,  -157,  -157,
+    -157,  -157,  -157,  -157,  -157,   197,   198,   199,   184,   200,
+      20,  -157,  -157,  -157,  -157,  -157,  -157,  -157,   141,   141,
+     141,   141,   141,   141,   141,  -157,  -157,  -157,  -157,  -157,
+     202,   203,  -157,   204,     6,   205,   206,   207,   208,   210,
+     211,   212,   213,  -157,   218,   219,   220,   217,  -157,   223,
+     224,   225,   227,   228,   226,  -157,  -157,  -157,  -157,  -157,
+    -157,  -157,  -157,  -157,  -157,  -157,   186,   186,   186,  -157,
+    -157,  -157,  -157,   230,  -157,  -157,  -157,  -157,  -157,   229,
+     231,   232,  -157,   233,   234,   235,   222,   -54,  -157,   236,
+    -157,  -157,  -157,  -157,   237,  -157,  -157,  -157,  -157,  -157,
+    -157,   242,   239,  -157,  -157,  -157,   240,  -157,  -157
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -649,62 +676,64 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,    65,     1,     0,     0,     0,     0,     3,     5,     4,
+       2,    81,     1,     0,     0,     0,     0,     3,     5,     4,
        7,     0,     8,     0,     6,     9,     0,     0,     0,     0,
-       0,     0,   130,     0,     0,   128,   129,    40,     0,     0,
+       0,     0,   146,     0,     0,   144,   145,    56,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    24,    25,    27,    30,    28,    29,    31,
-      32,    38,    33,    34,    35,    36,    37,    26,    39,     0,
-     104,     0,     0,     0,     0,    99,   100,   101,   102,   103,
-       0,    17,     0,     0,     0,     0,     0,    12,    13,    14,
-      15,    16,     0,     0,     0,     0,   127,     0,     0,     0,
+       0,     0,     0,    40,    41,    43,    46,    44,    45,    47,
+      48,    54,    49,    50,    51,    52,    53,    42,    55,     0,
+     120,     0,     0,     0,     0,   115,   116,   117,   118,   119,
+       0,    33,     0,     0,     0,     0,     0,    28,    29,    30,
+      31,    32,     0,     0,     0,     0,   143,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    23,     0,     0,     0,     0,     0,    98,     0,
-       0,     0,     0,     0,     0,    11,    71,     0,     0,     0,
-      68,    69,    70,    87,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    77,    78,    79,    81,    83,    80,
-      82,    85,    86,    84,     0,   126,     0,     0,     0,     0,
+       0,     0,    39,     0,     0,     0,     0,     0,   114,     0,
+       0,     0,     0,     0,     0,    27,    87,     0,     0,     0,
+      84,    85,    86,   103,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    93,    94,    95,    97,    99,    96,
+      98,   101,   102,   100,     0,   142,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      22,     0,     0,     0,     0,    97,     0,     0,     0,     0,
-       0,    10,     0,     0,     0,    67,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    76,   131,    41,    54,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,     0,     0,     0,     0,    58,    59,    60,    61,
-     105,   106,   107,   117,     0,     0,     0,     0,     0,     0,
-     111,   112,   114,   113,   115,   116,    20,    18,    19,    21,
-       0,     0,    66,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    75,     0,     0,     0,     0,    57,     0,     0,
-       0,     0,     0,     0,   110,    72,    73,    92,    95,    88,
-       0,    90,    93,    91,    94,    89,     0,     0,     0,    56,
-       0,     0,     0,     0,     0,   124,     0,   109,     0,    64,
-      63,    62,   121,   119,   118,     0,     0,   123,   120,    96,
-       0,   122,   125
+      38,     0,     0,     0,     0,   113,     0,     0,    10,     0,
+       0,     0,    26,     0,     0,     0,    83,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    92,   147,    57,
+      70,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,     0,     0,     0,     0,    74,    75,    76,
+      77,   121,   122,   123,   133,     0,     0,     0,     0,     0,
+       0,   127,   128,   130,   129,   131,   132,    36,    10,    10,
+      10,    10,    10,    10,    10,    12,    11,    34,    35,    37,
+       0,     0,    82,     0,    20,     0,     0,     0,     0,     0,
+       0,     0,     0,    91,     0,     0,     0,     0,    73,     0,
+       0,     0,     0,     0,     0,   126,    13,    14,    15,    16,
+      17,    18,    19,    88,    89,   108,    20,    20,    20,    22,
+      21,   111,   104,     0,   106,   109,   107,   110,   105,     0,
+       0,     0,    72,     0,     0,     0,     0,     0,   140,     0,
+     125,    23,    24,    25,     0,    80,    79,    78,   137,   135,
+     134,     0,     0,   139,   136,   112,     0,   138,   141
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-     -93,   -93,   -93,   -93,   -93,   190,   -93,   -93,   -93,   -93,
-     -93,   -93,   237,   -93,   -93,   -93,   -93,   -93,   -93,   -93,
-     -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,
-     -40,   -93,   -93,   -93,   -93,   -93,   -93,    52,   -93,   -93,
-     -93,   -93,   -93,    33,   -93,   -93,   -93,   -93,   -93,   -93,
-     -93,   -93,   -93,   -93,   -93,   167,   -93,   -93,   -93,   -93,
-     -93,   -93,   -38,   -93,   -93,   -93,   -93,   -93,   -93,   -92,
-     -93,   -93,   208,   -93
+    -157,  -157,  -157,   -47,  -111,  -156,    25,  -157,  -157,   122,
+    -157,  -157,  -157,  -157,  -157,  -157,   209,  -157,  -157,  -157,
+    -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,
+    -157,  -157,  -157,  -157,    -2,  -157,  -157,  -157,  -157,  -157,
+    -157,    87,  -157,  -157,  -157,  -157,  -157,   117,  -157,  -157,
+    -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,   216,
+    -157,  -157,  -157,  -157,  -157,  -157,    35,  -157,  -157,  -157,
+    -157,  -157,  -157,   -95,  -157,  -157,   244,  -157
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     7,     8,    76,    77,    78,    79,    80,    81,
-       9,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,   205,
-     206,   207,   208,   209,    10,    11,   119,   120,   121,   122,
-      12,    13,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,    14,    64,    65,    66,    67,    68,    69,
-      70,   219,   220,   221,   222,   223,   224,   225,   274,   275,
-      15,    24,    25,    26
+      -1,     1,     7,   235,   236,   279,   280,     8,    76,    77,
+      78,    79,    80,    81,     9,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,   206,   207,   208,   209,   210,    10,    11,
+     119,   120,   121,   122,    12,    13,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,    14,    64,    65,
+      66,    67,    68,    69,    70,   220,   221,   222,   223,   224,
+     225,   226,   297,   298,    15,    24,    25,    26
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -712,140 +741,150 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      27,   202,    28,   273,   203,   -55,    29,   286,   204,    22,
-      16,    60,    22,   123,    30,  -108,    17,    18,    31,    61,
-      62,    32,    33,    34,   124,    23,    35,    36,    23,    37,
-     125,    38,   126,    19,   202,    20,    39,   203,   246,   116,
-     116,   204,    40,   127,    41,   213,    63,    71,   214,   101,
-     128,   129,   130,   131,    72,   117,   117,   132,    85,   215,
-     107,    21,   185,    82,   216,    83,   144,    73,   103,    84,
-      87,    71,    88,   118,   118,    74,    89,   217,    72,    27,
-      75,    28,    90,    91,   -55,    29,   218,    92,   174,    93,
-     109,    73,   123,    30,   253,    94,   114,    31,   145,    74,
-      32,    33,    34,   124,    75,    35,    36,    95,    37,   125,
-      38,   126,    96,    97,   213,    39,    98,   214,    99,   100,
-     104,    40,   127,    41,     2,   105,   106,   110,   215,   128,
-     129,   130,   131,   216,   111,     3,   132,   146,     4,    60,
-     112,   113,   147,  -108,   148,   149,   217,    61,    62,     5,
-       6,   150,   151,   152,   153,   218,   154,   155,   167,   -74,
-     172,   156,   157,   158,   159,   247,   186,   162,   161,   160,
-     163,   175,   164,   165,    63,   166,   168,   251,   169,   170,
-     171,   254,   287,     0,     0,   173,   176,   177,   178,   179,
-     233,   180,   181,   182,   183,   184,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   210,   211,   212,   226,   227,   228,   229,   230,   231,
-     232,   234,   236,   235,   237,   238,   260,   239,   240,   242,
-     241,   108,    86,   243,     0,     0,   244,   245,   248,   249,
-     250,   252,   255,   256,   257,   258,   259,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,     0,   271,   272,
-     273,   285,   276,   278,   277,     0,   115,   279,     0,   280,
-     281,   282,   283,   284,   288,   289,   290,   291,   292,   102
+     169,    27,   296,    28,    60,    20,   312,    16,  -124,   -71,
+      29,    17,   276,   277,   278,    61,    62,   116,    30,    18,
+      22,   214,    31,    19,   215,    32,    33,    34,   123,    21,
+      35,    36,   116,    37,    71,    38,   117,    82,   216,    23,
+      22,    83,   124,   217,    72,    84,    87,    39,   125,    63,
+     126,   117,    88,    40,   118,    41,   218,    73,    89,    23,
+     101,   127,   244,   107,   203,    74,    90,   204,   103,   118,
+      75,   205,   219,   251,    91,   128,   129,   130,   131,    85,
+     264,    27,   132,    28,    60,    92,    93,   186,  -124,   -71,
+      29,   175,    94,   114,    95,    61,    62,   214,    30,    96,
+     215,   144,    31,   123,    97,    32,    33,    34,   257,   203,
+      35,    36,   204,    37,   216,    38,   205,   124,    98,   217,
+     301,   302,   303,   125,    99,   126,     2,    39,   100,    63,
+     104,   105,   218,    40,   106,    41,   127,    71,   109,   110,
+       3,   111,   145,     4,   112,   146,   113,    72,   219,   147,
+     128,   129,   130,   131,     5,     6,   148,   132,   149,   155,
+      73,   150,   151,   152,   -90,   153,   154,   156,    74,   157,
+     158,   159,   160,    75,   228,   229,   230,   231,   232,   233,
+     234,   266,   267,   268,   269,   270,   271,   272,   161,   162,
+     173,   168,   165,   166,   163,   164,   167,   168,   115,   170,
+     171,   174,   313,   245,   258,   172,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   211,   212,   213,   227,   237,   238,   239,   240,   241,
+     242,   243,   244,   262,   246,   249,   247,   248,   250,   252,
+     187,   102,     0,     0,   253,   265,   254,   255,   256,   259,
+     260,   261,   263,   273,   274,   275,   281,   282,    86,   284,
+     283,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     108,   294,   295,   296,   311,   299,   304,   300,     0,     0,
+     305,     0,   306,   307,   308,   309,   310,   314,   315,   316,
+     317,   318
 };
 
 static const yytype_int16 yycheck[] =
 {
-       1,    13,     3,    46,    16,     6,     7,    50,    20,     1,
-      49,     1,     1,     1,    15,     5,    49,    49,    19,     9,
-      10,    22,    23,    24,    12,    17,    27,    28,    17,    30,
-      18,    32,    20,    49,    13,    44,    37,    16,    50,     1,
-       1,    20,    43,    31,    45,     1,    36,     1,     4,    50,
-      38,    39,    40,    41,     8,    17,    17,    45,    50,    15,
-      50,    35,    50,    49,    20,    49,    47,    21,     6,    52,
-      52,     1,    52,    35,    35,    29,    52,    33,     8,     1,
-      34,     3,    52,    52,     6,     7,    42,    52,    50,    52,
-       5,    21,     1,    15,    50,    52,    50,    19,    51,    29,
-      22,    23,    24,    12,    34,    27,    28,    52,    30,    18,
-      32,    20,    52,    52,     1,    37,    52,     4,    52,    52,
-      52,    43,    31,    45,     0,    52,    52,    52,    15,    38,
-      39,    40,    41,    20,    52,    11,    45,    47,    14,     1,
-      52,    52,    47,     5,    47,    47,    33,     9,    10,    25,
-      26,    47,    47,    47,    47,    42,    47,    46,    46,    35,
-      52,    47,    47,    47,    47,   205,   133,    47,    49,    51,
-      47,   119,    47,    51,    36,    49,    46,    49,    47,    47,
-      51,   219,   274,    -1,    -1,    52,    52,    52,    52,    52,
-      46,    52,    52,    52,    52,    52,    51,    51,    51,    51,
-      51,    51,    51,    51,    51,    51,    51,    51,    51,    51,
-      51,    51,    51,    51,    51,    51,    51,    51,    47,    47,
-      51,    46,    48,    47,    47,    46,    53,    47,    46,    51,
-      47,    64,    24,    52,    -1,    -1,    52,    52,    52,    52,
-      52,    52,    51,    51,    51,    51,    51,    51,    51,    51,
-      51,    51,    47,    47,    47,    51,    46,    -1,    47,    47,
-      46,    52,    47,    46,    51,    -1,    76,    51,    -1,    51,
-      51,    51,    51,    51,    51,    51,    47,    51,    51,    42
+     111,     1,    56,     3,     1,    54,    60,    59,     5,     9,
+      10,    59,     6,     7,     8,    12,    13,     1,    18,    59,
+       1,     1,    22,    59,     4,    25,    26,    27,     1,    38,
+      30,    31,     1,    33,     1,    35,    20,    59,    18,    20,
+       1,    59,    15,    23,    11,    62,    62,    47,    21,    46,
+      23,    20,    62,    53,    38,    55,    36,    24,    62,    20,
+      60,    34,    56,    60,    16,    32,    62,    19,     9,    38,
+      37,    23,    52,   184,    62,    48,    49,    50,    51,    60,
+      60,     1,    55,     3,     1,    62,    62,    60,     5,     9,
+      10,    60,    62,    60,    62,    12,    13,     1,    18,    62,
+       4,    57,    22,     1,    62,    25,    26,    27,    60,    16,
+      30,    31,    19,    33,    18,    35,    23,    15,    62,    23,
+     276,   277,   278,    21,    62,    23,     0,    47,    62,    46,
+      62,    62,    36,    53,    62,    55,    34,     1,     5,    62,
+      14,    62,    61,    17,    62,    57,    62,    11,    52,    57,
+      48,    49,    50,    51,    28,    29,    57,    55,    57,    56,
+      24,    57,    57,    57,    38,    57,    57,    57,    32,    57,
+      57,    57,    61,    37,    39,    40,    41,    42,    43,    44,
+      45,   228,   229,   230,   231,   232,   233,   234,    59,    57,
+      62,    56,    61,    59,    57,    57,    56,    56,    76,    57,
+      57,    62,   297,   178,   206,    61,   119,    62,    62,    62,
+      62,    62,    62,    62,    62,    62,    61,    61,    61,    61,
+      61,    61,    61,    61,    61,    61,    61,    61,    61,    61,
+      61,    61,    61,    61,    61,    61,    61,    61,    57,    57,
+      61,    56,    56,    59,    57,    56,    58,    57,    57,    57,
+     133,    42,    -1,    -1,    61,   220,    62,    62,    62,    62,
+      62,    62,    62,    61,    61,    61,    61,    61,    24,    61,
+      63,    61,    61,    61,    61,    57,    57,    57,    61,    56,
+      64,    57,    57,    56,    62,    57,    56,    61,    -1,    -1,
+      61,    -1,    61,    61,    61,    61,    61,    61,    61,    57,
+      61,    61
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,    55,     0,    11,    14,    25,    26,    56,    57,    64,
-      88,    89,    94,    95,   107,   124,    49,    49,    49,    49,
-      44,    35,     1,    17,   125,   126,   127,     1,     3,     7,
-      15,    19,    22,    23,    24,    27,    28,    30,    32,    37,
-      43,    45,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-       1,     9,    10,    36,   108,   109,   110,   111,   112,   113,
-     114,     1,     8,    21,    29,    34,    58,    59,    60,    61,
-      62,    63,    49,    49,    52,    50,   126,    52,    52,    52,
-      52,    52,    52,    52,    52,    52,    52,    52,    52,    52,
-      52,    50,    66,     6,    52,    52,    52,    50,   109,     5,
-      52,    52,    52,    52,    50,    59,     1,    17,    35,    90,
-      91,    92,    93,     1,    12,    18,    20,    31,    38,    39,
-      40,    41,    45,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,    47,    51,    47,    47,    47,    47,
-      47,    47,    47,    47,    47,    46,    47,    47,    47,    47,
-      51,    49,    47,    47,    47,    51,    49,    46,    46,    47,
-      47,    51,    52,    52,    50,    91,    52,    52,    52,    52,
-      52,    52,    52,    52,    52,    50,    97,    51,    51,    51,
-      51,    51,    51,    51,    51,    51,    51,    51,    51,    51,
-      51,    51,    13,    16,    20,    83,    84,    85,    86,    87,
-      51,    51,    51,     1,     4,    15,    20,    33,    42,   115,
-     116,   117,   118,   119,   120,   121,    51,    51,    51,    51,
-      47,    47,    51,    46,    46,    47,    48,    47,    46,    47,
-      46,    47,    51,    52,    52,    52,    50,    84,    52,    52,
-      52,    49,    52,    50,   116,    51,    51,    51,    51,    51,
-      53,    51,    51,    51,    51,    51,    47,    47,    47,    51,
-      46,    47,    47,    46,   122,   123,    47,    51,    46,    51,
-      51,    51,    51,    51,    51,    52,    50,   123,    51,    51,
-      47,    51,    51
+       0,    65,     0,    14,    17,    28,    29,    66,    71,    78,
+     102,   103,   108,   109,   121,   138,    59,    59,    59,    59,
+      54,    38,     1,    20,   139,   140,   141,     1,     3,    10,
+      18,    22,    25,    26,    27,    30,    31,    33,    35,    47,
+      53,    55,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+       1,    12,    13,    46,   122,   123,   124,   125,   126,   127,
+     128,     1,    11,    24,    32,    37,    72,    73,    74,    75,
+      76,    77,    59,    59,    62,    60,   140,    62,    62,    62,
+      62,    62,    62,    62,    62,    62,    62,    62,    62,    62,
+      62,    60,    80,     9,    62,    62,    62,    60,   123,     5,
+      62,    62,    62,    62,    60,    73,     1,    20,    38,   104,
+     105,   106,   107,     1,    15,    21,    23,    34,    48,    49,
+      50,    51,    55,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,    57,    61,    57,    57,    57,    57,
+      57,    57,    57,    57,    57,    56,    57,    57,    57,    57,
+      61,    59,    57,    57,    57,    61,    59,    56,    56,    68,
+      57,    57,    61,    62,    62,    60,   105,    62,    62,    62,
+      62,    62,    62,    62,    62,    62,    60,   111,    61,    61,
+      61,    61,    61,    61,    61,    61,    61,    61,    61,    61,
+      61,    61,    61,    16,    19,    23,    97,    98,    99,   100,
+     101,    61,    61,    61,     1,     4,    18,    23,    36,    52,
+     129,   130,   131,   132,   133,   134,   135,    61,    39,    40,
+      41,    42,    43,    44,    45,    67,    68,    61,    61,    61,
+      57,    57,    61,    56,    56,    70,    57,    58,    57,    56,
+      57,    68,    57,    61,    62,    62,    62,    60,    98,    62,
+      62,    62,    59,    62,    60,   130,    67,    67,    67,    67,
+      67,    67,    67,    61,    61,    61,     6,     7,     8,    69,
+      70,    61,    61,    63,    61,    61,    61,    61,    61,    57,
+      57,    57,    61,    56,    57,    57,    56,   136,   137,    57,
+      61,    69,    69,    69,    56,    61,    61,    61,    61,    61,
+      61,    62,    60,   137,    61,    61,    57,    61,    61
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    54,    55,    55,    56,    56,    56,    56,    56,    56,
-      57,    58,    58,    59,    59,    59,    59,    59,    60,    61,
-      62,    63,    64,    65,    65,    66,    66,    66,    66,    66,
-      66,    66,    66,    66,    66,    66,    66,    66,    66,    66,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    82,    81,    83,    83,    84,
-      84,    84,    85,    86,    87,    89,    88,    90,    90,    91,
-      91,    91,    92,    93,    95,    94,    96,    96,    97,    97,
-      97,    97,    97,    97,    97,    97,    97,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   108,
-     109,   109,   109,   109,   109,   110,   111,   112,   114,   113,
-     115,   115,   116,   116,   116,   116,   116,   116,   117,   118,
-     119,   120,   121,   122,   122,   123,   124,   125,   125,   126,
-     126,   127
+       0,    64,    65,    65,    66,    66,    66,    66,    66,    66,
+      67,    67,    68,    68,    68,    68,    68,    68,    68,    68,
+      69,    69,    70,    70,    70,    70,    71,    72,    72,    73,
+      73,    73,    73,    73,    74,    75,    76,    77,    78,    79,
+      79,    80,    80,    80,    80,    80,    80,    80,    80,    80,
+      80,    80,    80,    80,    80,    80,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    96,    95,    97,    97,    98,    98,    98,    99,   100,
+     101,   103,   102,   104,   104,   105,   105,   105,   106,   107,
+     109,   108,   110,   110,   111,   111,   111,   111,   111,   111,
+     111,   111,   111,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   122,   123,   123,   123,   123,
+     123,   124,   125,   126,   128,   127,   129,   129,   130,   130,
+     130,   130,   130,   130,   131,   132,   133,   134,   135,   136,
+     136,   137,   138,   139,   139,   140,   140,   141
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
        0,     2,     0,     2,     1,     1,     1,     1,     1,     1,
-       5,     2,     1,     1,     1,     1,     1,     1,     4,     4,
-       4,     4,     5,     2,     1,     1,     1,     1,     1,     1,
+       0,     1,     2,     3,     3,     3,     3,     3,     3,     3,
+       0,     1,     2,     3,     3,     3,     5,     2,     1,     1,
+       1,     1,     1,     1,     4,     4,     4,     4,     5,     2,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,     0,     6,     2,     1,     1,
-       1,     1,     4,     4,     4,     0,     6,     2,     1,     1,
-       1,     1,     4,     4,     0,     6,     2,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     4,     4,
-       4,     4,     4,     4,     4,     4,     6,     5,     2,     1,
-       1,     1,     1,     1,     1,     4,     4,     4,     0,     6,
-       2,     1,     1,     1,     1,     1,     1,     1,     4,     4,
-       4,     4,     5,     2,     1,     4,     5,     2,     1,     1,
-       1,     4
+       1,     1,     1,     1,     1,     1,     1,     4,     4,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,     0,     6,     2,     1,     1,     1,     1,     4,     4,
+       4,     0,     6,     2,     1,     1,     1,     1,     4,     4,
+       0,     6,     2,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     4,     4,     4,     4,     4,     4,
+       4,     4,     6,     5,     2,     1,     1,     1,     1,     1,
+       1,     4,     4,     4,     0,     6,     2,     1,     1,     1,
+       1,     1,     1,     1,     4,     4,     4,     4,     5,     2,
+       1,     4,     5,     2,     1,     1,     1,     4
 };
 
 
@@ -1521,169 +1560,253 @@ yyreduce:
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-        case 18:
-#line 120 "config-parser.y" /* yacc.c:1646  */
+        case 10:
+#line 111 "config-parser.y" /* yacc.c:1646  */
+    { (yyval.number) = 0; }
+#line 1567 "config-parser.c" /* yacc.c:1646  */
+    break;
+
+  case 12:
+#line 112 "config-parser.y" /* yacc.c:1646  */
+    { (yyval.number) = (yyvsp[-1].number) + (yyvsp[0].number); }
+#line 1573 "config-parser.c" /* yacc.c:1646  */
+    break;
+
+  case 13:
+#line 113 "config-parser.y" /* yacc.c:1646  */
+    { (yyval.number) = (yyvsp[-2].number) + (yyvsp[0].number); }
+#line 1579 "config-parser.c" /* yacc.c:1646  */
+    break;
+
+  case 14:
+#line 114 "config-parser.y" /* yacc.c:1646  */
+    { (yyval.number) = (yyvsp[-2].number) * 60 + (yyvsp[0].number); }
+#line 1585 "config-parser.c" /* yacc.c:1646  */
+    break;
+
+  case 15:
+#line 115 "config-parser.y" /* yacc.c:1646  */
+    { (yyval.number) = (yyvsp[-2].number) * 60 * 60 + (yyvsp[0].number); }
+#line 1591 "config-parser.c" /* yacc.c:1646  */
+    break;
+
+  case 16:
+#line 116 "config-parser.y" /* yacc.c:1646  */
+    { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 + (yyvsp[0].number); }
+#line 1597 "config-parser.c" /* yacc.c:1646  */
+    break;
+
+  case 17:
+#line 117 "config-parser.y" /* yacc.c:1646  */
+    { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 * 7 + (yyvsp[0].number); }
+#line 1603 "config-parser.c" /* yacc.c:1646  */
+    break;
+
+  case 18:
+#line 118 "config-parser.y" /* yacc.c:1646  */
+    { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 * 7 * 4 + (yyvsp[0].number); }
+#line 1609 "config-parser.c" /* yacc.c:1646  */
+    break;
+
+  case 19:
+#line 119 "config-parser.y" /* yacc.c:1646  */
+    { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 * 365 + (yyvsp[0].number); }
+#line 1615 "config-parser.c" /* yacc.c:1646  */
+    break;
+
+  case 20:
+#line 122 "config-parser.y" /* yacc.c:1646  */
+    { (yyval.number) = 0; }
+#line 1621 "config-parser.c" /* yacc.c:1646  */
+    break;
+
+  case 22:
+#line 123 "config-parser.y" /* yacc.c:1646  */
+    { (yyval.number) = (yyvsp[-1].number) + (yyvsp[0].number); }
+#line 1627 "config-parser.c" /* yacc.c:1646  */
+    break;
+
+  case 23:
+#line 124 "config-parser.y" /* yacc.c:1646  */
+    { (yyval.number) = (yyvsp[-2].number) + (yyvsp[0].number); }
+#line 1633 "config-parser.c" /* yacc.c:1646  */
+    break;
+
+  case 24:
+#line 125 "config-parser.y" /* yacc.c:1646  */
+    { (yyval.number) = (yyvsp[-2].number) * 1024 + (yyvsp[0].number); }
+#line 1639 "config-parser.c" /* yacc.c:1646  */
+    break;
+
+  case 25:
+#line 126 "config-parser.y" /* yacc.c:1646  */
+    { (yyval.number) = (yyvsp[-2].number) * 1024 * 1024 + (yyvsp[0].number); }
+#line 1645 "config-parser.c" /* yacc.c:1646  */
+    break;
+
+  case 34:
+#line 143 "config-parser.y" /* yacc.c:1646  */
     {
    OptionsItem->negcache = (yyvsp[-1].number);
 }
-#line 1530 "config-parser.c" /* yacc.c:1646  */
+#line 1653 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 19:
-#line 125 "config-parser.y" /* yacc.c:1646  */
+  case 35:
+#line 148 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(OptionsItem->pidfile);
    OptionsItem->pidfile = DupString((yyvsp[-1].string));
 }
-#line 1539 "config-parser.c" /* yacc.c:1646  */
+#line 1662 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 20:
-#line 131 "config-parser.y" /* yacc.c:1646  */
+  case 36:
+#line 154 "config-parser.y" /* yacc.c:1646  */
     {
    OptionsItem->dns_fdlimit = (yyvsp[-1].number);
 }
-#line 1547 "config-parser.c" /* yacc.c:1646  */
+#line 1670 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 21:
-#line 136 "config-parser.y" /* yacc.c:1646  */
+  case 37:
+#line 159 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(OptionsItem->scanlog);
    OptionsItem->scanlog = DupString((yyvsp[-1].string));
 }
-#line 1556 "config-parser.c" /* yacc.c:1646  */
+#line 1679 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 41:
-#line 166 "config-parser.y" /* yacc.c:1646  */
+  case 57:
+#line 189 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->away);
    IRCItem->away = DupString((yyvsp[-1].string));
 }
-#line 1565 "config-parser.c" /* yacc.c:1646  */
+#line 1688 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 42:
-#line 172 "config-parser.y" /* yacc.c:1646  */
+  case 58:
+#line 195 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->kline);
    IRCItem->kline = DupString((yyvsp[-1].string));
 }
-#line 1574 "config-parser.c" /* yacc.c:1646  */
+#line 1697 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 43:
-#line 178 "config-parser.y" /* yacc.c:1646  */
+  case 59:
+#line 201 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->mode);
    IRCItem->mode = DupString((yyvsp[-1].string));
 }
-#line 1583 "config-parser.c" /* yacc.c:1646  */
+#line 1706 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 44:
-#line 184 "config-parser.y" /* yacc.c:1646  */
+  case 60:
+#line 207 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->nick);
    IRCItem->nick = DupString((yyvsp[-1].string));
 }
-#line 1592 "config-parser.c" /* yacc.c:1646  */
+#line 1715 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 45:
-#line 190 "config-parser.y" /* yacc.c:1646  */
+  case 61:
+#line 213 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->nickserv);
    IRCItem->nickserv = DupString((yyvsp[-1].string));
 }
-#line 1601 "config-parser.c" /* yacc.c:1646  */
+#line 1724 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 46:
-#line 196 "config-parser.y" /* yacc.c:1646  */
+  case 62:
+#line 219 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->oper);
    IRCItem->oper = DupString((yyvsp[-1].string));
 }
-#line 1610 "config-parser.c" /* yacc.c:1646  */
+#line 1733 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 47:
-#line 202 "config-parser.y" /* yacc.c:1646  */
+  case 63:
+#line 225 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->password);
    IRCItem->password = DupString((yyvsp[-1].string));
 }
-#line 1619 "config-parser.c" /* yacc.c:1646  */
+#line 1742 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 48:
-#line 208 "config-parser.y" /* yacc.c:1646  */
+  case 64:
+#line 231 "config-parser.y" /* yacc.c:1646  */
     {
    node_t *node;
    node = node_create(DupString((yyvsp[-1].string)));
 
    list_add(IRCItem->performs, node);
 }
-#line 1630 "config-parser.c" /* yacc.c:1646  */
+#line 1753 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 49:
-#line 216 "config-parser.y" /* yacc.c:1646  */
+  case 65:
+#line 239 "config-parser.y" /* yacc.c:1646  */
     {
    IRCItem->port = (yyvsp[-1].number);
 }
-#line 1638 "config-parser.c" /* yacc.c:1646  */
+#line 1761 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 50:
-#line 221 "config-parser.y" /* yacc.c:1646  */
+  case 66:
+#line 244 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->realname);
    IRCItem->realname = DupString((yyvsp[-1].string));
 }
-#line 1647 "config-parser.c" /* yacc.c:1646  */
+#line 1770 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 51:
-#line 227 "config-parser.y" /* yacc.c:1646  */
+  case 67:
+#line 250 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->server);
    IRCItem->server = DupString((yyvsp[-1].string));
 }
-#line 1656 "config-parser.c" /* yacc.c:1646  */
+#line 1779 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 52:
-#line 233 "config-parser.y" /* yacc.c:1646  */
+  case 68:
+#line 256 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->username);
    IRCItem->username = DupString((yyvsp[-1].string));
 }
-#line 1665 "config-parser.c" /* yacc.c:1646  */
+#line 1788 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 53:
-#line 239 "config-parser.y" /* yacc.c:1646  */
+  case 69:
+#line 262 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->vhost);
    IRCItem->vhost = DupString((yyvsp[-1].string));
 }
-#line 1674 "config-parser.c" /* yacc.c:1646  */
+#line 1797 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 54:
-#line 245 "config-parser.y" /* yacc.c:1646  */
+  case 70:
+#line 268 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(IRCItem->connregex);
    IRCItem->connregex = DupString((yyvsp[-1].string));
 }
-#line 1683 "config-parser.c" /* yacc.c:1646  */
+#line 1806 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 55:
-#line 254 "config-parser.y" /* yacc.c:1646  */
+  case 71:
+#line 277 "config-parser.y" /* yacc.c:1646  */
     {
    node_t *node;
    struct ChannelConf *item;
@@ -1699,44 +1822,44 @@ yyreduce:
 
    tmp = (void *) item;
 }
-#line 1703 "config-parser.c" /* yacc.c:1646  */
+#line 1826 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 62:
-#line 279 "config-parser.y" /* yacc.c:1646  */
+  case 78:
+#line 302 "config-parser.y" /* yacc.c:1646  */
     {
    struct ChannelConf *item = tmp;
 
    MyFree(item->name);
    item->name = DupString((yyvsp[-1].string));
 }
-#line 1714 "config-parser.c" /* yacc.c:1646  */
+#line 1837 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 63:
-#line 287 "config-parser.y" /* yacc.c:1646  */
+  case 79:
+#line 310 "config-parser.y" /* yacc.c:1646  */
     {
    struct ChannelConf *item = tmp;
 
    MyFree(item->key);
    item->key = DupString((yyvsp[-1].string));
 }
-#line 1725 "config-parser.c" /* yacc.c:1646  */
+#line 1848 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 64:
-#line 295 "config-parser.y" /* yacc.c:1646  */
+  case 80:
+#line 318 "config-parser.y" /* yacc.c:1646  */
     {
    struct ChannelConf *item = tmp;
 
    MyFree(item->invite);
    item->invite = DupString((yyvsp[-1].string));
 }
-#line 1736 "config-parser.c" /* yacc.c:1646  */
+#line 1859 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 65:
-#line 305 "config-parser.y" /* yacc.c:1646  */
+  case 81:
+#line 328 "config-parser.y" /* yacc.c:1646  */
     {
    node_t *node;
    struct UserConf *item;
@@ -1751,11 +1874,11 @@ yyreduce:
 
    tmp = (void *) item; 
 }
-#line 1755 "config-parser.c" /* yacc.c:1646  */
+#line 1878 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 72:
-#line 329 "config-parser.y" /* yacc.c:1646  */
+  case 88:
+#line 352 "config-parser.y" /* yacc.c:1646  */
     {
    struct UserConf *item = (struct UserConf *) tmp;
 
@@ -1764,11 +1887,11 @@ yyreduce:
 
    list_add(item->masks, node);
 }
-#line 1768 "config-parser.c" /* yacc.c:1646  */
+#line 1891 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 73:
-#line 339 "config-parser.y" /* yacc.c:1646  */
+  case 89:
+#line 362 "config-parser.y" /* yacc.c:1646  */
     {
    struct UserConf *item = (struct UserConf *) tmp;
 
@@ -1777,11 +1900,11 @@ yyreduce:
 
    list_add(item->scanners, node);
 }
-#line 1781 "config-parser.c" /* yacc.c:1646  */
+#line 1904 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 74:
-#line 351 "config-parser.y" /* yacc.c:1646  */
+  case 90:
+#line 374 "config-parser.y" /* yacc.c:1646  */
     {
    node_t *node;
    struct ScannerConf *item, *olditem;
@@ -1825,41 +1948,41 @@ yyreduce:
    list_add(ScannerItemList, node);
    tmp = (void *) item;
 }
-#line 1829 "config-parser.c" /* yacc.c:1646  */
+#line 1952 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 88:
-#line 411 "config-parser.y" /* yacc.c:1646  */
+  case 104:
+#line 434 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    MyFree(item->name);
    item->name = DupString((yyvsp[-1].string));
 }
-#line 1839 "config-parser.c" /* yacc.c:1646  */
+#line 1962 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 89:
-#line 418 "config-parser.y" /* yacc.c:1646  */
+  case 105:
+#line 441 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    MyFree(item->vhost);
    item->vhost = DupString((yyvsp[-1].string));
 }
-#line 1849 "config-parser.c" /* yacc.c:1646  */
+#line 1972 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 90:
-#line 425 "config-parser.y" /* yacc.c:1646  */
+  case 106:
+#line 448 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    MyFree(item->target_ip);
    item->target_ip = DupString((yyvsp[-1].string));
 }
-#line 1859 "config-parser.c" /* yacc.c:1646  */
+#line 1982 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 91:
-#line 432 "config-parser.y" /* yacc.c:1646  */
+  case 107:
+#line 455 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
 
@@ -1874,47 +1997,47 @@ yyreduce:
 
    list_add(item->target_string, node);
 }
-#line 1878 "config-parser.c" /* yacc.c:1646  */
+#line 2001 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 92:
-#line 448 "config-parser.y" /* yacc.c:1646  */
+  case 108:
+#line 471 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    item->fd = (yyvsp[-1].number);
 }
-#line 1887 "config-parser.c" /* yacc.c:1646  */
+#line 2010 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 93:
-#line 454 "config-parser.y" /* yacc.c:1646  */
+  case 109:
+#line 477 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    item->target_port = (yyvsp[-1].number);
 }
-#line 1896 "config-parser.c" /* yacc.c:1646  */
+#line 2019 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 94:
-#line 460 "config-parser.y" /* yacc.c:1646  */
+  case 110:
+#line 483 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    item->timeout = (yyvsp[-1].number);
 }
-#line 1905 "config-parser.c" /* yacc.c:1646  */
+#line 2028 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 95:
-#line 466 "config-parser.y" /* yacc.c:1646  */
+  case 111:
+#line 489 "config-parser.y" /* yacc.c:1646  */
     {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    item->max_read = (yyvsp[-1].number);
 }
-#line 1914 "config-parser.c" /* yacc.c:1646  */
+#line 2037 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 96:
-#line 472 "config-parser.y" /* yacc.c:1646  */
+  case 112:
+#line 495 "config-parser.y" /* yacc.c:1646  */
     {
    struct ProtocolConf *item;
    struct ScannerConf  *item2;
@@ -1930,38 +2053,38 @@ yyreduce:
    node = node_create(item);
    list_add(item2->protocols, node);
 }
-#line 1934 "config-parser.c" /* yacc.c:1646  */
+#line 2057 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 105:
-#line 502 "config-parser.y" /* yacc.c:1646  */
+  case 121:
+#line 525 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(OpmItem->dnsbl_from);
    OpmItem->dnsbl_from = DupString((yyvsp[-1].string));
 }
-#line 1943 "config-parser.c" /* yacc.c:1646  */
+#line 2066 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 106:
-#line 508 "config-parser.y" /* yacc.c:1646  */
+  case 122:
+#line 531 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(OpmItem->dnsbl_to);
    OpmItem->dnsbl_to = DupString((yyvsp[-1].string));
 }
-#line 1952 "config-parser.c" /* yacc.c:1646  */
+#line 2075 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 107:
-#line 514 "config-parser.y" /* yacc.c:1646  */
+  case 123:
+#line 537 "config-parser.y" /* yacc.c:1646  */
     {
    MyFree(OpmItem->sendmail);
    OpmItem->sendmail = DupString((yyvsp[-1].string));
 }
-#line 1961 "config-parser.c" /* yacc.c:1646  */
+#line 2084 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 108:
-#line 522 "config-parser.y" /* yacc.c:1646  */
+  case 124:
+#line 545 "config-parser.y" /* yacc.c:1646  */
     {
    node_t *node;
    struct BlacklistConf *item;
@@ -1979,33 +2102,33 @@ yyreduce:
 
    tmp = (void *) item;
 }
-#line 1983 "config-parser.c" /* yacc.c:1646  */
+#line 2106 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 118:
-#line 551 "config-parser.y" /* yacc.c:1646  */
+  case 134:
+#line 574 "config-parser.y" /* yacc.c:1646  */
     {
    struct BlacklistConf *item = tmp;
 
    MyFree(item->name);
    item->name = DupString((yyvsp[-1].string));
 }
-#line 1994 "config-parser.c" /* yacc.c:1646  */
+#line 2117 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 119:
-#line 558 "config-parser.y" /* yacc.c:1646  */
+  case 135:
+#line 581 "config-parser.y" /* yacc.c:1646  */
     {
    struct BlacklistConf *item = tmp;
 
    MyFree(item->kline);
    item->kline = DupString((yyvsp[-1].string));
 }
-#line 2005 "config-parser.c" /* yacc.c:1646  */
+#line 2128 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 120:
-#line 565 "config-parser.y" /* yacc.c:1646  */
+  case 136:
+#line 588 "config-parser.y" /* yacc.c:1646  */
     {
    struct BlacklistConf *item = tmp;
    
@@ -2016,21 +2139,21 @@ yyreduce:
    else
       yyerror("Unknown blacklist type defined");
 }
-#line 2020 "config-parser.c" /* yacc.c:1646  */
+#line 2143 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 121:
-#line 576 "config-parser.y" /* yacc.c:1646  */
+  case 137:
+#line 599 "config-parser.y" /* yacc.c:1646  */
     {
    struct BlacklistConf *item = tmp;
 
    item->ban_unknown = (yyvsp[-1].number);
 }
-#line 2030 "config-parser.c" /* yacc.c:1646  */
+#line 2153 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 125:
-#line 588 "config-parser.y" /* yacc.c:1646  */
+  case 141:
+#line 611 "config-parser.y" /* yacc.c:1646  */
     {
    struct BlacklistReplyConf *item;
    struct BlacklistConf *blacklist = tmp;
@@ -2044,22 +2167,22 @@ yyreduce:
    node = node_create(item);
    list_add(blacklist->reply, node);
 }
-#line 2048 "config-parser.c" /* yacc.c:1646  */
+#line 2171 "config-parser.c" /* yacc.c:1646  */
     break;
 
-  case 131:
-#line 614 "config-parser.y" /* yacc.c:1646  */
+  case 147:
+#line 637 "config-parser.y" /* yacc.c:1646  */
     {
    node_t *node;
    node = node_create(DupString((yyvsp[-1].string)));
 
    list_add(ExemptItem->masks, node);
 }
-#line 2059 "config-parser.c" /* yacc.c:1646  */
+#line 2182 "config-parser.c" /* yacc.c:1646  */
     break;
 
 
-#line 2063 "config-parser.c" /* yacc.c:1646  */
+#line 2186 "config-parser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -2287,5 +2410,5 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 621 "config-parser.y" /* yacc.c:1906  */
+#line 644 "config-parser.y" /* yacc.c:1906  */
 
index d70d152c3d313125444884087f2217d14d11b1a8..e6057cc663c79bae50b3593ed7ecec7c41b65ac0 100644 (file)
@@ -48,110 +48,130 @@ extern int yydebug;
     AWAY = 258,
     BAN_UNKNOWN = 259,
     BLACKLIST = 260,
-    CHANNEL = 261,
-    CONNREGEX = 262,
-    DNS_FDLIMIT = 263,
-    DNSBL_FROM = 264,
-    DNSBL_TO = 265,
-    EXEMPT = 266,
-    FD = 267,
-    INVITE = 268,
-    IRC = 269,
-    KLINE = 270,
-    KEY = 271,
-    MASK = 272,
-    MAX_READ = 273,
-    MODE = 274,
-    NAME = 275,
-    NEGCACHE = 276,
-    NICK = 277,
-    NICKSERV = 278,
-    OPER = 279,
-    OPM = 280,
-    OPTIONS = 281,
-    PASSWORD = 282,
-    PERFORM = 283,
-    PIDFILE = 284,
-    PORT = 285,
-    PROTOCOL = 286,
-    REALNAME = 287,
-    REPLY = 288,
-    SCANLOG = 289,
-    SCANNER = 290,
-    SENDMAIL = 291,
-    SERVER = 292,
-    TARGET_IP = 293,
-    TARGET_PORT = 294,
-    TARGET_STRING = 295,
-    TIMEOUT = 296,
-    TYPE = 297,
-    USERNAME = 298,
-    USER = 299,
-    VHOST = 300,
-    NUMBER = 301,
-    STRING = 302,
-    PROTOCOLTYPE = 303
+    BYTES = 261,
+    KBYTES = 262,
+    MBYTES = 263,
+    CHANNEL = 264,
+    CONNREGEX = 265,
+    DNS_FDLIMIT = 266,
+    DNSBL_FROM = 267,
+    DNSBL_TO = 268,
+    EXEMPT = 269,
+    FD = 270,
+    INVITE = 271,
+    IRC = 272,
+    KLINE = 273,
+    KEY = 274,
+    MASK = 275,
+    MAX_READ = 276,
+    MODE = 277,
+    NAME = 278,
+    NEGCACHE = 279,
+    NICK = 280,
+    NICKSERV = 281,
+    OPER = 282,
+    OPM = 283,
+    OPTIONS = 284,
+    PASSWORD = 285,
+    PERFORM = 286,
+    PIDFILE = 287,
+    PORT = 288,
+    PROTOCOL = 289,
+    REALNAME = 290,
+    REPLY = 291,
+    SCANLOG = 292,
+    SCANNER = 293,
+    SECONDS = 294,
+    MINUTES = 295,
+    HOURS = 296,
+    DAYS = 297,
+    WEEKS = 298,
+    MONTHS = 299,
+    YEARS = 300,
+    SENDMAIL = 301,
+    SERVER = 302,
+    TARGET_IP = 303,
+    TARGET_PORT = 304,
+    TARGET_STRING = 305,
+    TIMEOUT = 306,
+    TYPE = 307,
+    USERNAME = 308,
+    USER = 309,
+    VHOST = 310,
+    NUMBER = 311,
+    STRING = 312,
+    PROTOCOLTYPE = 313
   };
 #endif
 /* Tokens.  */
 #define AWAY 258
 #define BAN_UNKNOWN 259
 #define BLACKLIST 260
-#define CHANNEL 261
-#define CONNREGEX 262
-#define DNS_FDLIMIT 263
-#define DNSBL_FROM 264
-#define DNSBL_TO 265
-#define EXEMPT 266
-#define FD 267
-#define INVITE 268
-#define IRC 269
-#define KLINE 270
-#define KEY 271
-#define MASK 272
-#define MAX_READ 273
-#define MODE 274
-#define NAME 275
-#define NEGCACHE 276
-#define NICK 277
-#define NICKSERV 278
-#define OPER 279
-#define OPM 280
-#define OPTIONS 281
-#define PASSWORD 282
-#define PERFORM 283
-#define PIDFILE 284
-#define PORT 285
-#define PROTOCOL 286
-#define REALNAME 287
-#define REPLY 288
-#define SCANLOG 289
-#define SCANNER 290
-#define SENDMAIL 291
-#define SERVER 292
-#define TARGET_IP 293
-#define TARGET_PORT 294
-#define TARGET_STRING 295
-#define TIMEOUT 296
-#define TYPE 297
-#define USERNAME 298
-#define USER 299
-#define VHOST 300
-#define NUMBER 301
-#define STRING 302
-#define PROTOCOLTYPE 303
+#define BYTES 261
+#define KBYTES 262
+#define MBYTES 263
+#define CHANNEL 264
+#define CONNREGEX 265
+#define DNS_FDLIMIT 266
+#define DNSBL_FROM 267
+#define DNSBL_TO 268
+#define EXEMPT 269
+#define FD 270
+#define INVITE 271
+#define IRC 272
+#define KLINE 273
+#define KEY 274
+#define MASK 275
+#define MAX_READ 276
+#define MODE 277
+#define NAME 278
+#define NEGCACHE 279
+#define NICK 280
+#define NICKSERV 281
+#define OPER 282
+#define OPM 283
+#define OPTIONS 284
+#define PASSWORD 285
+#define PERFORM 286
+#define PIDFILE 287
+#define PORT 288
+#define PROTOCOL 289
+#define REALNAME 290
+#define REPLY 291
+#define SCANLOG 292
+#define SCANNER 293
+#define SECONDS 294
+#define MINUTES 295
+#define HOURS 296
+#define DAYS 297
+#define WEEKS 298
+#define MONTHS 299
+#define YEARS 300
+#define SENDMAIL 301
+#define SERVER 302
+#define TARGET_IP 303
+#define TARGET_PORT 304
+#define TARGET_STRING 305
+#define TIMEOUT 306
+#define TYPE 307
+#define USERNAME 308
+#define USER 309
+#define VHOST 310
+#define NUMBER 311
+#define STRING 312
+#define PROTOCOLTYPE 313
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE YYSTYPE;
 union YYSTYPE
 {
-#line 83 "config-parser.y" /* yacc.c:1909  */
+#line 85 "config-parser.y" /* yacc.c:1909  */
 
         int number;
         char *string;
 
-#line 155 "config-parser.h" /* yacc.c:1909  */
+#line 175 "config-parser.h" /* yacc.c:1909  */
 };
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
index f8b68e8cef1550d80ad5de4455fafaa7a2060c6c..fabdfadd22a52b0509574c6499161e94951ccca0 100644 (file)
@@ -38,6 +38,7 @@ void *tmp;        /* Variable to temporarily hold nodes before insertion to list
 %token AWAY
 %token BAN_UNKNOWN
 %token BLACKLIST
+%token BYTES KBYTES MBYTES
 %token CHANNEL
 %token CONNREGEX
 %token DNS_FDLIMIT
@@ -68,6 +69,7 @@ void *tmp;        /* Variable to temporarily hold nodes before insertion to list
 %token REPLY
 %token SCANLOG
 %token SCANNER
+%token SECONDS MINUTES HOURS DAYS WEEKS MONTHS YEARS
 %token SENDMAIL
 %token SERVER
 %token TARGET_IP
@@ -88,6 +90,10 @@ void *tmp;        /* Variable to temporarily hold nodes before insertion to list
 %token <number> NUMBER
 %token <string> STRING
 %token <number> PROTOCOLTYPE
+%type  <number> timespec
+%type  <number> timespec_
+%type  <number> sizespec
+%type  <number> sizespec_
 
 %%
 
@@ -102,6 +108,23 @@ config_items: irc_entry     |
               scanner_entry |
               exempt_entry;
 
+timespec_: { $$ = 0; } | timespec;
+timespec:  NUMBER timespec_         { $$ = $1 + $2; } |
+           NUMBER SECONDS timespec_ { $$ = $1 + $3; } |
+           NUMBER MINUTES timespec_ { $$ = $1 * 60 + $3; } |
+           NUMBER HOURS timespec_   { $$ = $1 * 60 * 60 + $3; } |
+           NUMBER DAYS timespec_    { $$ = $1 * 60 * 60 * 24 + $3; } |
+           NUMBER WEEKS timespec_   { $$ = $1 * 60 * 60 * 24 * 7 + $3; } |
+           NUMBER MONTHS timespec_  { $$ = $1 * 60 * 60 * 24 * 7 * 4 + $3; } |
+           NUMBER YEARS timespec_   { $$ = $1 * 60 * 60 * 24 * 365 + $3; }
+           ;
+
+sizespec_:  { $$ = 0; } | sizespec;
+sizespec:   NUMBER sizespec_ { $$ = $1 + $2; } |
+            NUMBER BYTES sizespec_ { $$ = $1 + $3; } |
+            NUMBER KBYTES sizespec_ { $$ = $1 * 1024 + $3; } |
+            NUMBER MBYTES sizespec_ { $$ = $1 * 1024 * 1024 + $3; }
+            ;
 
 /*************************** OPTIONS BLOCK ***********************/
 
@@ -116,7 +139,7 @@ options_item: options_negcache |
               options_scanlog |
               error;
 
-options_negcache: NEGCACHE '=' NUMBER ';'
+options_negcache: NEGCACHE '=' timespec ';'
 {
    OptionsItem->negcache = $3;
 };
@@ -456,13 +479,13 @@ scanner_target_port: TARGET_PORT '=' NUMBER ';'
    item->target_port = $3;
 };
 
-scanner_timeout: TIMEOUT '=' NUMBER ';'
+scanner_timeout: TIMEOUT '=' timespec ';'
 {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    item->timeout = $3;
 };
 
-scanner_max_read: MAX_READ '=' NUMBER ';'
+scanner_max_read: MAX_READ '=' sizespec ';'
 {
    struct ScannerConf *item = (struct ScannerConf *) tmp;
    item->max_read = $3;