]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
[Bug 948] Trustedkey config directive leaks memory
authorHarlan Stenn <stenn@ntp.org>
Thu, 12 Oct 2017 07:26:49 +0000 (07:26 +0000)
committerHarlan Stenn <stenn@ntp.org>
Thu, 12 Oct 2017 07:26:49 +0000 (07:26 +0000)
bk: 59df1939REiCU3UBma8-n_lKKBeVsw

ChangeLog
include/ntp_config.h
ntpd/ntp_config.c
ntpd/ntp_parser.c
ntpd/ntp_parser.h
ntpd/ntp_parser.y

index 2784314144618eab2d4717a06994a54b250c3240..0cc45640e30aed03aa474f64d95166d01d6fe5a7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
 ---
 
 * [Bug 3358] Spurious KoD log messages in .INIT. phase.  HStenn.
+* [Bug 948] Trustedkey config directive leaks memory. <perlinger@ntp.org>
 * Use strlcpy() to copy strings, not memcpy().  HStenn.
 
 ---
index bd8f595d94f30d7f671d01f398f2f1ab4c8bccf5..bb400ddb6fca9ca77ee057c06bb9e9ab2259323a 100644 (file)
@@ -54,6 +54,14 @@ typedef struct int_range_tag {
        int     last;
 } int_range;
 
+/* generic list node */
+typedef struct any_node_tag any_node;
+struct any_node_tag {
+       any_node *      link;
+};
+
+typedef DECL_FIFO_ANCHOR(any_node) any_node_fifo;
+
 /* Structure for storing an attribute-value pair  */
 typedef struct attr_val_tag attr_val;
 struct attr_val_tag {
@@ -267,8 +275,12 @@ typedef struct settrap_parms_tag {
 const char * token_name(int token);
 
 /* generic fifo routines for structs linked by 1st member */
+typedef void (*fifo_deleter)(void*);
+void*   destroy_gen_fifo(void *fifo, fifo_deleter func);
 void*  append_gen_fifo(void *fifo, void *entry);
 void * concat_gen_fifos(void *first, void *second);
+#define DESTROY_G_FIFO(pf, func)       \
+    ((pf) = destroy_gen_fifo((pf), (fifo_deleter)(func)))
 #define APPEND_G_FIFO(pf, pe)          \
        ((pf) = append_gen_fifo((pf), (pe)))
 #define CONCAT_G_FIFOS(first, second)  \
@@ -288,6 +300,7 @@ attr_val *create_attr_ival(int attr, int value);
 attr_val *create_attr_uval(int attr, u_int value);
 attr_val *create_attr_rangeval(int attr, int first, int last);
 attr_val *create_attr_sval(int attr, const char *s);
+void      destroy_attr_val(attr_val *node);
 filegen_node *create_filegen_node(int filegen_token,
                                  attr_val_fifo *options);
 string_node *create_string_node(char *str);
index 428ab9f467d6791d1b1e4ade64016887da49e1ca..4a8921d2de41e397ab0e854e5f00a56122a4dbc6 100644 (file)
@@ -1057,11 +1057,45 @@ concat_gen_fifos(
        return pf1;
 }
 
+void*
+destroy_gen_fifo(
+       void        *fifo,
+       fifo_deleter func
+       )
+{
+       any_node *      np  = NULL;
+       any_node_fifo * pf1 = fifo;
+
+       if (pf1 != NULL) {
+               if (!func)
+                       func = free;
+               for (;;) {
+                       UNLINK_FIFO(np, *pf1, link);
+                       if (np == NULL)
+                               break;
+                       (*func)(np);
+               }
+               free(pf1);
+       }
+       return NULL;
+}
 
 /* FUNCTIONS FOR CREATING NODES ON THE SYNTAX TREE
  * -----------------------------------------------
  */
 
+void
+destroy_attr_val(
+       attr_val *      av
+       )
+{
+       if (av) {
+               if (T_String == av->type)
+                       free(av->value.s);
+               free(av);
+       }
+}
+
 attr_val *
 create_attr_dval(
        int attr,
@@ -1484,9 +1518,7 @@ destroy_attr_val_fifo(
                        UNLINK_FIFO(av, *av_fifo, link);
                        if (av == NULL)
                                break;
-                       if (T_String == av->type)
-                               free(av->value.s);
-                       free(av);
+                       destroy_attr_val(av);
                }
                free(av_fifo);
        }
index 7114a656899610f691b5eefb6f22afbe99bfd6fa..3c9b3c62399aaf8072f480d1c9abf788052946dc 100644 (file)
 
 /* In a future release of Bison, this section will be replaced
    by #include "y.tab.h".  */
-#ifndef YY_YY_Y_TAB_H_INCLUDED
-# define YY_YY_Y_TAB_H_INCLUDED
+#ifndef YY_YY_NTP_PARSER_H_INCLUDED
+# define YY_YY_NTP_PARSER_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
@@ -564,7 +564,7 @@ extern YYSTYPE yylval;
 
 int yyparse (void);
 
-#endif /* !YY_YY_Y_TAB_H_INCLUDED  */
+#endif /* !YY_YY_NTP_PARSER_H_INCLUDED  */
 
 /* Copy the second part of user declarations.  */
 
@@ -808,9 +808,9 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  215
+#define YYFINAL  214
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   654
+#define YYLAST   664
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  204
@@ -819,7 +819,7 @@ union yyalloc
 /* YYNRULES -- Number of rules.  */
 #define YYNRULES  318
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  424
+#define YYNSTATES  423
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
@@ -892,31 +892,31 @@ static const yytype_uint16 yyrline[] =
      473,   474,   475,   476,   477,   481,   483,   488,   489,   490,
      491,   492,   493,   497,   502,   511,   521,   522,   532,   534,
      536,   538,   549,   556,   558,   563,   565,   567,   569,   571,
-     580,   586,   587,   595,   597,   609,   610,   611,   612,   613,
-     622,   627,   632,   640,   642,   644,   649,   650,   651,   652,
-     653,   654,   655,   656,   657,   661,   662,   671,   673,   682,
-     692,   697,   705,   706,   707,   708,   709,   710,   711,   712,
-     717,   718,   726,   736,   745,   760,   765,   766,   770,   771,
-     775,   776,   777,   778,   779,   780,   781,   790,   794,   798,
-     806,   814,   822,   837,   852,   865,   866,   874,   875,   876,
-     877,   878,   879,   880,   881,   882,   883,   884,   885,   886,
-     887,   888,   892,   897,   905,   910,   911,   912,   916,   921,
-     929,   934,   935,   936,   937,   938,   939,   940,   941,   949,
-     959,   964,   972,   974,   976,   985,   987,   992,   993,   997,
-     998,   999,  1000,  1008,  1013,  1018,  1026,  1031,  1032,  1033,
-    1042,  1044,  1049,  1054,  1062,  1064,  1081,  1082,  1083,  1084,
-    1085,  1086,  1090,  1091,  1092,  1093,  1094,  1095,  1103,  1108,
-    1113,  1121,  1126,  1127,  1128,  1129,  1130,  1131,  1132,  1133,
-    1134,  1135,  1144,  1145,  1146,  1153,  1160,  1167,  1183,  1202,
-    1204,  1206,  1208,  1210,  1212,  1219,  1224,  1225,  1226,  1230,
-    1234,  1243,  1244,  1248,  1249,  1250,  1254,  1265,  1279,  1291,
-    1296,  1298,  1303,  1304,  1312,  1314,  1322,  1327,  1335,  1360,
-    1367,  1377,  1378,  1382,  1383,  1384,  1385,  1389,  1390,  1391,
-    1395,  1400,  1405,  1413,  1414,  1415,  1416,  1417,  1418,  1419,
-    1429,  1434,  1442,  1447,  1455,  1457,  1461,  1466,  1471,  1479,
-    1484,  1492,  1501,  1502,  1506,  1507,  1516,  1534,  1538,  1543,
-    1551,  1556,  1557,  1561,  1566,  1574,  1579,  1584,  1589,  1594,
-    1602,  1607,  1612,  1620,  1625,  1626,  1627,  1628,  1629
+     581,   587,   588,   596,   598,   610,   611,   612,   613,   614,
+     623,   628,   633,   641,   643,   645,   650,   651,   652,   653,
+     654,   655,   656,   657,   658,   662,   663,   672,   674,   683,
+     693,   698,   706,   707,   708,   709,   710,   711,   712,   713,
+     718,   719,   727,   737,   746,   761,   766,   767,   771,   772,
+     776,   777,   778,   779,   780,   781,   782,   791,   795,   799,
+     807,   815,   823,   838,   853,   866,   867,   875,   876,   877,
+     878,   879,   880,   881,   882,   883,   884,   885,   886,   887,
+     888,   889,   893,   898,   906,   911,   912,   913,   917,   922,
+     930,   935,   936,   937,   938,   939,   940,   941,   942,   950,
+     960,   965,   973,   975,   977,   986,   988,   993,   994,   998,
+     999,  1000,  1001,  1009,  1014,  1019,  1027,  1032,  1033,  1034,
+    1043,  1045,  1050,  1055,  1063,  1065,  1082,  1083,  1084,  1085,
+    1086,  1087,  1091,  1092,  1093,  1094,  1095,  1096,  1104,  1109,
+    1114,  1122,  1127,  1128,  1129,  1130,  1131,  1132,  1133,  1134,
+    1135,  1136,  1145,  1146,  1147,  1154,  1161,  1168,  1184,  1203,
+    1205,  1207,  1209,  1211,  1213,  1220,  1225,  1226,  1227,  1231,
+    1235,  1244,  1245,  1249,  1250,  1251,  1255,  1266,  1280,  1292,
+    1297,  1299,  1304,  1305,  1313,  1315,  1323,  1328,  1336,  1361,
+    1368,  1378,  1379,  1383,  1384,  1385,  1386,  1390,  1391,  1392,
+    1396,  1401,  1406,  1414,  1415,  1416,  1417,  1418,  1419,  1420,
+    1430,  1435,  1443,  1448,  1456,  1458,  1462,  1467,  1472,  1480,
+    1485,  1493,  1502,  1503,  1507,  1508,  1517,  1535,  1539,  1544,
+    1552,  1557,  1558,  1562,  1567,  1575,  1580,  1585,  1590,  1595,
+    1603,  1608,  1613,  1621,  1626,  1627,  1628,  1629,  1630
 };
 #endif
 
@@ -1028,10 +1028,10 @@ static const yytype_uint16 yytoknum[] =
 };
 # endif
 
-#define YYPACT_NINF -189
+#define YYPACT_NINF -188
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-189)))
+  (!!((Yystate) == (-188)))
 
 #define YYTABLE_NINF -7
 
@@ -1042,49 +1042,49 @@ static const yytype_uint16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-      18,  -177,   -45,  -189,  -189,  -189,   -40,  -189,    32,     5,
-    -129,  -189,    32,  -189,   204,   -44,  -189,  -117,  -189,  -110,
-    -101,  -189,  -189,   -97,  -189,  -189,   -44,    -4,   495,   -44,
-    -189,  -189,   -96,  -189,   -94,  -189,  -189,     8,    54,   258,
-      10,   -28,  -189,  -189,   -89,   204,   -86,  -189,   270,   529,
-     -85,   -56,    14,  -189,  -189,  -189,    83,   207,   -95,  -189,
-     -44,  -189,   -44,  -189,  -189,  -189,  -189,  -189,  -189,  -189,
-    -189,  -189,  -189,    -7,    24,   -73,   -68,  -189,    -3,  -189,
-    -189,  -106,  -189,  -189,  -189,   313,  -189,  -189,  -189,  -189,
-    -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,    32,  -189,
-    -189,  -189,  -189,  -189,  -189,     5,  -189,    35,    65,  -189,
-      32,  -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,
-    -189,  -189,  -189,   110,  -189,   -59,   368,  -189,  -189,  -189,
-     -97,  -189,  -189,   -44,  -189,  -189,  -189,  -189,  -189,  -189,
-    -189,  -189,  -189,   495,  -189,    44,   -44,  -189,  -189,   -51,
-    -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,    54,  -189,
-    -189,    86,    89,  -189,  -189,    33,  -189,  -189,  -189,  -189,
-     -28,  -189,    49,   -75,  -189,   204,  -189,  -189,  -189,  -189,
-    -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,   270,  -189,
-      -7,  -189,  -189,  -189,   -33,  -189,  -189,  -189,  -189,  -189,
-    -189,  -189,  -189,   529,  -189,    66,    -7,  -189,  -189,    67,
-     -56,  -189,  -189,  -189,    68,  -189,   -53,  -189,  -189,  -189,
-    -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,    16,
-    -153,  -189,  -189,  -189,  -189,  -189,    77,  -189,   -18,  -189,
-    -189,  -189,  -189,   226,   -13,  -189,  -189,  -189,  -189,    -8,
-      97,  -189,  -189,   110,  -189,    -7,   -33,  -189,  -189,  -189,
-    -189,  -189,  -189,  -189,  -189,   449,  -189,  -189,   449,   449,
-     -85,  -189,  -189,    11,  -189,  -189,  -189,  -189,  -189,  -189,
-    -189,  -189,  -189,  -189,   -49,   108,  -189,  -189,  -189,   125,
-    -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,  -102,   -20,
-     -30,  -189,  -189,  -189,  -189,    13,  -189,  -189,     9,  -189,
-    -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,
-    -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,
-    -189,  -189,  -189,  -189,   449,   449,  -189,   146,   -85,   113,
-    -189,   116,  -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,
-    -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,
-    -189,   -54,  -189,    23,   -10,     6,  -138,  -189,    -9,  -189,
-      -7,  -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,
-     449,  -189,  -189,  -189,  -189,   -17,  -189,  -189,  -189,   -44,
-    -189,  -189,  -189,    20,  -189,  -189,  -189,     0,    21,    -7,
-      22,  -173,  -189,    25,    -7,  -189,  -189,  -189,    17,     7,
-    -189,  -189,  -189,  -189,  -189,   217,    39,    36,  -189,    46,
-    -189,    -7,  -189,  -189
+      18,  -176,   -23,  -188,  -188,  -188,   -16,  -188,   161,    19,
+    -123,  -188,   161,  -188,   251,   -53,  -188,  -109,  -188,  -107,
+    -101,  -188,  -188,   -98,  -188,  -188,   -53,     3,   237,   -53,
+    -188,  -188,   -90,  -188,   -80,  -188,  -188,    23,    90,    -3,
+      24,   -28,  -188,  -188,   -73,   251,   -64,  -188,   146,   539,
+     -58,   -51,    26,  -188,  -188,  -188,   108,   198,   -79,  -188,
+     -53,  -188,   -53,  -188,  -188,  -188,  -188,  -188,  -188,  -188,
+    -188,  -188,  -188,    -1,    48,   -47,   -46,  -188,   -25,  -188,
+    -188,   -91,  -188,  -188,  -188,   172,  -188,  -188,  -188,  -188,
+    -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,   161,  -188,
+    -188,  -188,  -188,  -188,  -188,    19,  -188,    55,    88,  -188,
+     161,  -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,
+    -188,  -188,  -188,    98,  -188,   -32,   359,  -188,  -188,  -188,
+     -98,  -188,  -188,   -53,  -188,  -188,  -188,  -188,  -188,  -188,
+    -188,  -188,  -188,   237,  -188,    67,   -53,  -188,  -188,   -30,
+    -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,    90,  -188,
+    -188,   105,   106,  -188,    50,  -188,  -188,  -188,  -188,   -28,
+    -188,    76,   -60,  -188,   251,  -188,  -188,  -188,  -188,  -188,
+    -188,  -188,  -188,  -188,  -188,  -188,  -188,   146,  -188,    -1,
+    -188,  -188,  -188,   -35,  -188,  -188,  -188,  -188,  -188,  -188,
+    -188,  -188,   539,  -188,    92,    -1,  -188,  -188,    94,   -51,
+    -188,  -188,  -188,    96,  -188,   -29,  -188,  -188,  -188,  -188,
+    -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,    16,  -147,
+    -188,  -188,  -188,  -188,  -188,   109,  -188,     8,  -188,  -188,
+    -188,  -188,   -21,    14,  -188,  -188,  -188,  -188,    17,   117,
+    -188,  -188,    98,  -188,    -1,   -35,  -188,  -188,  -188,  -188,
+    -188,  -188,  -188,  -188,   467,  -188,  -188,   467,   -58,   467,
+    -188,  -188,    29,  -188,  -188,  -188,  -188,  -188,  -188,  -188,
+    -188,  -188,  -188,   -41,   147,  -188,  -188,  -188,   345,  -188,
+    -188,  -188,  -188,  -188,  -188,  -188,  -188,  -119,    -5,    -6,
+    -188,  -188,  -188,  -188,    34,  -188,  -188,     9,  -188,  -188,
+    -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,
+    -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,
+    -188,  -188,  -188,   467,   467,  -188,   174,   -58,   141,  -188,
+     142,  -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,
+    -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,
+     -55,  -188,    45,    10,    22,  -140,  -188,    15,  -188,    -1,
+    -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,   467,
+    -188,  -188,  -188,  -188,    11,  -188,  -188,  -188,   -53,  -188,
+    -188,  -188,    28,  -188,  -188,  -188,    27,    25,    -1,    31,
+    -153,  -188,    35,    -1,  -188,  -188,  -188,    33,    47,  -188,
+    -188,  -188,  -188,  -188,  -120,    37,    39,  -188,    58,  -188,
+      -1,  -188,  -188
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1108,65 +1108,65 @@ static const yytype_uint16 yydefact[] =
      231,   257,   290,    59,    61,   161,   162,   163,   164,   165,
      166,   167,   168,   128,   159,     0,    60,    70,   288,   232,
       67,   273,   274,   275,   276,   277,   278,   279,   270,   272,
-     135,    29,    30,   135,   135,    26,    68,   189,   187,   188,
-     183,   185,     0,     0,   233,    97,   101,    98,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   208,   210,
-       0,    86,    87,    88,     0,    89,    90,    96,    91,    95,
-      92,    93,    94,    80,    82,     0,     0,   252,   284,     0,
-      69,   283,   285,   281,   235,     1,     0,     4,    31,    55,
-     295,   294,   224,   225,   226,   227,   269,   268,   267,     0,
-       0,    79,    75,    76,    77,    78,     0,    72,     0,   192,
-     152,   154,   247,    99,     0,   179,   180,   181,   182,     0,
-       0,   177,   178,   169,   171,     0,     0,    27,   228,   256,
-     289,   158,   160,   287,   271,   131,   135,   135,   134,   129,
-       0,   184,   186,     0,   100,   209,   211,   293,   291,   292,
-      85,    81,    83,    84,   234,     0,   282,   280,     3,    20,
-     263,   264,   265,   260,   266,   259,   301,   302,     0,     0,
-       0,    74,    73,   119,   118,     0,   116,   117,     0,   111,
-     114,   115,   175,   176,   174,   170,   172,   173,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   136,   132,   133,   135,   251,     0,     0,
-     253,     0,    37,    38,    39,    54,    47,    49,    48,    51,
-      40,    41,    42,    43,    50,    52,    44,    32,    33,    36,
-      34,     0,    35,     0,     0,     0,     0,   304,     0,   299,
-       0,   112,   126,   122,   124,   120,   121,   123,   125,   113,
-     130,   250,   249,   255,   254,     0,    45,    46,    53,     0,
-     298,   296,   303,     0,   300,   286,   307,     0,     0,     0,
-       0,     0,   309,     0,     0,   305,   308,   306,     0,     0,
-     314,   315,   316,   317,   318,     0,     0,     0,   310,     0,
-     312,     0,   311,   313
+     135,    29,    30,   135,   135,    68,   189,   187,   188,   183,
+     185,     0,     0,   233,    97,   101,    98,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   208,   210,     0,
+      86,    87,    88,     0,    89,    90,    96,    91,    95,    92,
+      93,    94,    80,    82,     0,     0,   252,   284,     0,    69,
+     283,   285,   281,   235,     1,     0,     4,    31,    55,   295,
+     294,   224,   225,   226,   227,   269,   268,   267,     0,     0,
+      79,    75,    76,    77,    78,     0,    72,     0,   192,   152,
+     154,   247,    99,     0,   179,   180,   181,   182,     0,     0,
+     177,   178,   169,   171,     0,     0,    27,   228,   256,   289,
+     158,   160,   287,   271,   131,   135,   135,   134,     0,   129,
+     184,   186,     0,   100,   209,   211,   293,   291,   292,    85,
+      81,    83,    84,   234,     0,   282,   280,     3,    20,   263,
+     264,   265,   260,   266,   259,   301,   302,     0,     0,     0,
+      74,    73,   119,   118,     0,   116,   117,     0,   111,   114,
+     115,   175,   176,   174,   170,   172,   173,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   136,   132,   133,   135,   251,     0,     0,   253,
+       0,    37,    38,    39,    54,    47,    49,    48,    51,    40,
+      41,    42,    43,    50,    52,    44,    32,    33,    36,    34,
+       0,    35,     0,     0,     0,     0,   304,     0,   299,     0,
+     112,   126,   122,   124,   120,   121,   123,   125,   113,   130,
+     250,   249,   255,   254,     0,    45,    46,    53,     0,   298,
+     296,   303,     0,   300,   286,   307,     0,     0,     0,     0,
+       0,   309,     0,     0,   305,   308,   306,     0,     0,   314,
+     315,   316,   317,   318,     0,     0,     0,   310,     0,   312,
+       0,   311,   313
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -189,  -189,  -189,   -48,  -189,  -189,   -15,   -38,  -189,  -189,
-    -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,  -189,
-    -189,  -189,  -189,  -189,  -189,  -189,    37,  -189,  -189,  -189,
-    -189,   -42,  -189,  -189,  -189,  -189,  -189,  -189,  -159,  -189,
-    -189,   131,  -189,  -189,    96,  -189,  -189,  -189,    -6,  -189,
-    -189,  -189,  -189,    74,  -189,  -189,   236,   -71,  -189,  -189,
-    -189,  -189,    62,  -189,  -189,  -189,  -189,  -189,  -189,  -189,
-    -189,  -189,  -189,  -189,  -189,   122,  -189,  -189,  -189,  -189,
-    -189,  -189,    95,  -189,  -189,    45,  -189,  -189,   225,     1,
-    -188,  -189,  -189,  -189,   -39,  -189,  -189,  -103,  -189,  -189,
-    -189,  -136,  -189,  -149,  -189
+    -188,  -188,  -188,   -34,  -188,  -188,   -15,   -49,  -188,  -188,
+    -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,  -188,
+    -188,  -188,  -188,  -188,  -188,  -188,    46,  -188,  -188,  -188,
+    -188,   -39,  -188,  -188,  -188,  -188,  -188,  -188,  -160,  -188,
+    -188,   145,  -188,  -188,   104,  -188,  -188,  -188,     0,  -188,
+    -188,  -188,  -188,    85,  -188,  -188,   243,   -72,  -188,  -188,
+    -188,  -188,    71,  -188,  -188,  -188,  -188,  -188,  -188,  -188,
+    -188,  -188,  -188,  -188,  -188,   130,  -188,  -188,  -188,  -188,
+    -188,  -188,   110,  -188,  -188,    60,  -188,  -188,   235,    12,
+    -187,  -188,  -188,  -188,   -20,  -188,  -188,   -87,  -188,  -188,
+    -188,  -115,  -188,  -133,  -188
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    56,    57,    58,    59,    60,   132,   124,   125,   289,
-     357,   358,   359,   360,   361,   362,   363,    61,    62,    63,
-      64,    85,   237,   238,    65,   203,   204,   205,   206,    66,
-     175,   119,   243,   309,   310,   311,   379,    67,   265,   333,
-     105,   106,   107,   143,   144,   145,    68,   253,   254,   255,
-     256,    69,   170,   171,   172,    70,    98,    99,   100,   101,
-      71,   188,   189,   190,    72,    73,    74,    75,    76,   109,
-     174,   382,   284,   340,   130,   131,    77,    78,   295,   229,
-      79,   158,   159,   214,   210,   211,   212,   149,   133,   280,
-     222,    80,    81,   298,   299,   300,   366,   367,   398,   368,
-     401,   402,   415,   416,   417
+      -1,    56,    57,    58,    59,    60,   132,   124,   125,   288,
+     356,   357,   358,   359,   360,   361,   362,    61,    62,    63,
+      64,    85,   236,   237,    65,   202,   203,   204,   205,    66,
+     174,   119,   242,   308,   309,   310,   378,    67,   264,   332,
+     105,   106,   107,   143,   144,   145,    68,   252,   253,   254,
+     255,    69,   169,   170,   171,    70,    98,    99,   100,   101,
+      71,   187,   188,   189,    72,    73,    74,    75,    76,   109,
+     173,   381,   283,   339,   130,   131,    77,    78,   294,   228,
+      79,   158,   159,   213,   209,   210,   211,   149,   133,   279,
+     221,    80,    81,   297,   298,   299,   365,   366,   397,   367,
+     400,   401,   414,   415,   416
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1174,140 +1174,142 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     123,   165,   276,   176,   268,   269,   208,   277,   386,   216,
-     364,    82,   207,   372,   338,   167,   102,    83,   283,     1,
-     400,   290,    84,   120,   164,   121,   220,   239,     2,   278,
-     405,   108,   226,     3,     4,     5,   373,   296,   297,   239,
-      86,     6,     7,   126,    87,   218,   364,   219,     8,     9,
-     127,    88,    10,   227,    11,   221,    12,    13,   134,   128,
-      14,   151,   152,   129,   147,   391,   148,   316,   168,    15,
-     150,   173,   166,    16,   177,   122,   213,   228,   258,    17,
-     153,    18,   291,   215,   292,   339,   223,   224,   296,   297,
-      19,    20,   225,   217,    21,    22,   230,   241,   242,    23,
-      24,   257,    89,    25,    26,   103,   262,   334,   335,   263,
-     104,   272,    27,   244,   266,   374,   122,   267,   260,   154,
-     270,   387,   375,   169,   273,    28,    29,    30,   282,   285,
-     287,   260,    31,   274,   342,   288,    90,    91,   279,   301,
-     376,    32,   302,   343,   209,   341,    33,   312,    34,   155,
-      35,    36,   313,    92,   245,   246,   247,   248,    93,   314,
-      37,    38,    39,    40,    41,    42,    43,    44,   369,   370,
-      45,   337,    46,   371,   381,   384,   293,   380,   385,   344,
-     345,    47,   394,   388,   395,    94,    48,    49,    50,   389,
-      51,    52,   377,   393,   390,   378,   346,    53,    54,   399,
-     294,   410,   411,   412,   413,   414,    -6,    55,    95,    96,
-      97,   403,   397,   407,   400,   156,   408,     2,   347,   409,
-     157,   404,     3,     4,     5,   111,   348,   420,   349,   112,
-       6,     7,   336,   423,   422,   421,   240,     8,     9,   261,
-     281,    10,   350,    11,   271,    12,    13,   315,   110,    14,
-     275,   249,   259,   264,   146,   286,   303,   317,    15,   365,
-     351,   352,    16,   392,   304,   406,   419,   305,    17,   250,
-      18,     0,     0,     0,   251,   252,   178,     0,     0,    19,
-      20,     0,     0,    21,    22,     0,   160,   113,    23,    24,
-       0,     0,    25,    26,     0,     0,   353,     0,   354,     0,
-     383,    27,   179,     0,     0,   306,   355,     0,     0,     0,
-     356,     0,     0,     0,    28,    29,    30,     0,     0,     0,
-     180,    31,     0,   181,     0,   161,     0,   162,     0,     0,
-      32,     0,     0,   114,     0,    33,   307,    34,     0,    35,
-      36,   115,   231,     0,   116,     0,     0,     0,     0,    37,
-      38,    39,    40,    41,    42,    43,    44,     0,     0,    45,
-       0,    46,     0,     0,     0,   232,   117,     0,   233,     0,
-      47,   118,     0,     0,   396,    48,    49,    50,     2,    51,
-      52,     0,     0,     3,     4,     5,    53,    54,     0,     0,
-       0,     6,     7,     0,     0,    -6,    55,   182,     8,     9,
-     308,     0,    10,     0,    11,     0,    12,    13,   163,     0,
-      14,   410,   411,   412,   413,   414,     0,     0,   122,    15,
-     418,     0,     0,    16,     0,   183,   184,   185,   186,    17,
-       0,    18,     0,   187,     0,     0,     0,     0,     0,     0,
-      19,    20,     0,     0,    21,    22,     0,     0,     0,    23,
-      24,   234,   235,    25,    26,     0,     0,     0,   236,     0,
-       0,     0,    27,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    28,    29,    30,     0,     0,
-       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
-       0,    32,     0,     0,     0,     0,    33,   318,    34,     0,
-      35,    36,     0,     0,     0,   319,     0,     0,     0,     0,
+     123,   206,   275,   267,   269,   276,   175,   385,   363,   302,
+     225,   207,    82,   371,   120,   166,   121,   303,   282,     1,
+     304,   289,   337,   215,   164,   160,   238,   277,     2,   363,
+     102,   226,   219,     3,     4,     5,   372,   108,   238,    83,
+     399,     6,     7,   295,   296,   217,    84,   218,     8,     9,
+     404,   126,    10,   127,    11,   227,    12,    13,   305,   128,
+      14,   220,   129,   390,   161,   134,   162,   315,   167,    15,
+     147,   295,   296,    16,   409,   410,   411,   412,   413,    17,
+     148,    18,   290,   417,   291,   150,   165,   172,   212,   306,
+      19,    20,   257,   338,    21,    22,   176,   151,   152,    23,
+      24,   243,   122,    25,    26,   333,   334,   122,   214,   216,
+     222,   229,    27,   223,   224,   373,   153,   240,   259,   103,
+     386,   241,   374,   168,   104,    28,    29,    30,   256,   261,
+     262,   259,    31,   265,   266,   273,   278,   268,   271,   272,
+     375,    32,   244,   245,   246,   247,    33,   163,    34,   208,
+      35,    36,   177,   307,   281,   154,   284,   122,   286,   287,
+      37,    38,    39,    40,    41,    42,    43,    44,   301,    86,
+      45,   300,    46,    87,   311,   379,   292,   312,   178,   313,
+      88,    47,   393,   368,   340,   155,    48,    49,    50,   336,
+      51,    52,   376,   369,   370,   377,   179,    53,    54,   180,
+     293,   230,   380,   383,   384,   387,    -6,    55,     2,   388,
+     389,   402,   394,     3,     4,     5,   407,   392,   399,   335,
+     396,     6,     7,   406,   231,   419,   398,   232,     8,     9,
+     403,    89,    10,   422,    11,   408,    12,    13,   420,   248,
+      14,   409,   410,   411,   412,   413,   421,   260,   280,    15,
+     239,   156,   314,    16,   270,   110,   157,   249,   274,    17,
+     258,    18,   250,   251,   146,    90,    91,   316,   263,   285,
+      19,    20,   111,   181,    21,    22,   112,   364,   391,    23,
+      24,   418,    92,    25,    26,   405,     0,    93,   382,     0,
+       0,     0,    27,     0,   135,   136,   137,   138,     0,     0,
+       0,   182,   183,   184,   185,    28,    29,    30,     0,   186,
+     233,   234,    31,     0,    94,     0,     0,   235,     0,     0,
+       0,    32,     0,     0,     0,   139,    33,   140,    34,   141,
+      35,    36,     0,     0,   113,   142,     0,    95,    96,    97,
       37,    38,    39,    40,    41,    42,    43,    44,     0,     0,
-      45,     0,    46,   320,   321,     0,     0,   322,     0,     0,
-       0,    47,     0,   323,     0,     0,    48,    49,    50,     0,
-      51,    52,   191,   192,     0,     0,     0,    53,    54,   193,
-       0,   194,   135,   136,   137,   138,     0,    55,     0,     0,
-     324,   325,     0,     0,   326,   327,     0,   328,   329,   330,
-       0,   331,     0,     0,     0,     0,     0,     0,   195,     0,
-       0,     0,     0,   139,     0,   140,     0,   141,     0,     0,
-       0,     0,     0,   142,     0,     0,     0,     0,     0,     0,
+      45,     0,    46,     0,   341,     0,     0,     0,     0,     0,
+       0,    47,     0,   342,     0,     0,    48,    49,    50,     2,
+      51,    52,     0,   395,     3,     4,     5,    53,    54,     0,
+     114,     0,     6,     7,     0,     0,    -6,    55,   115,     8,
+       9,   116,     0,    10,     0,    11,     0,    12,    13,   343,
+     344,    14,     0,     0,     0,     0,     0,     0,     0,     0,
+      15,     0,     0,   117,    16,     0,   345,     0,   118,     0,
+      17,     0,    18,     0,     0,     0,     0,     0,     0,     0,
+       0,    19,    20,     0,     0,    21,    22,     0,   346,     0,
+      23,    24,     0,     0,    25,    26,   347,     0,   348,     0,
+       0,     0,     0,    27,     0,     0,     0,     0,     0,     0,
+       0,     0,   349,     0,     0,     0,    28,    29,    30,     0,
+       0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
+     350,   351,    32,     0,     0,     0,     0,    33,     0,    34,
+       0,    35,    36,     0,     0,     0,     0,     0,     0,     0,
+       0,    37,    38,    39,    40,    41,    42,    43,    44,     0,
+       0,    45,     0,    46,     0,   317,   352,     0,   353,     0,
+       0,     0,    47,   318,     0,     0,   354,    48,    49,    50,
+     355,    51,    52,     0,     0,     0,     0,     0,    53,    54,
+       0,   319,   320,     0,     0,   321,     0,     0,    55,     0,
+       0,   322,   190,   191,     0,     0,     0,     0,     0,   192,
+       0,   193,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   323,   324,
+       0,     0,   325,   326,     0,   327,   328,   329,   194,   330,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   196,     0,
-     197,     0,     0,     0,     0,     0,   198,     0,   199,     0,
-     332,   200,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   201,   202
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   195,     0,
+     196,     0,     0,     0,     0,     0,   197,     0,   198,     0,
+       0,   199,     0,     0,     0,     0,     0,     0,   331,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   200,   201
 };
 
 static const yytype_int16 yycheck[] =
 {
-      15,    39,   190,    45,   163,   164,    62,    40,    62,    57,
-     148,   188,    50,     4,    63,    43,    11,    62,   206,     1,
-     193,     5,    62,    67,    39,    69,    33,    98,    10,    62,
-     203,   160,    35,    15,    16,    17,    27,   190,   191,   110,
-       8,    23,    24,   160,    12,    60,   148,    62,    30,    31,
-     160,    19,    34,    56,    36,    62,    38,    39,    62,   160,
-      42,     7,     8,   160,   160,   203,   160,   255,    96,    51,
-      62,   160,    62,    55,   160,   160,    62,    80,   126,    61,
-      26,    63,    66,     0,    68,   134,    62,   160,   190,   191,
-      72,    73,   160,   188,    76,    77,   202,    62,    33,    81,
-      82,   160,    70,    85,    86,   100,    62,   266,   267,   160,
-     105,    62,    94,     3,    28,   106,   160,    28,   133,    65,
-      87,   175,   113,   151,   199,   107,   108,   109,    62,    62,
-      62,   146,   114,   175,     9,   188,   104,   105,   171,    62,
-     131,   123,   160,    18,   200,    37,   128,   160,   130,    95,
-     132,   133,   160,   121,    44,    45,    46,    47,   126,    62,
-     142,   143,   144,   145,   146,   147,   148,   149,   188,   199,
-     152,   160,   154,   160,    28,    62,   160,   336,    62,    54,
-      55,   163,   370,   160,   201,   153,   168,   169,   170,   199,
-     172,   173,   183,   202,   188,   186,    71,   179,   180,   199,
-     184,   194,   195,   196,   197,   198,   188,   189,   176,   177,
-     178,   399,   192,   188,   193,   161,   404,    10,    93,   202,
-     166,   199,    15,    16,    17,    21,   101,   188,   103,    25,
-      23,    24,   270,   421,   188,   199,   105,    30,    31,   143,
-     203,    34,   117,    36,   170,    38,    39,   253,    12,    42,
-     188,   141,   130,   158,    29,   210,    30,   256,    51,   298,
-     135,   136,    55,   366,    38,   401,   415,    41,    61,   159,
-      63,    -1,    -1,    -1,   164,   165,     6,    -1,    -1,    72,
-      73,    -1,    -1,    76,    77,    -1,    28,    83,    81,    82,
-      -1,    -1,    85,    86,    -1,    -1,   171,    -1,   173,    -1,
-     338,    94,    32,    -1,    -1,    79,   181,    -1,    -1,    -1,
-     185,    -1,    -1,    -1,   107,   108,   109,    -1,    -1,    -1,
-      50,   114,    -1,    53,    -1,    67,    -1,    69,    -1,    -1,
-     123,    -1,    -1,   129,    -1,   128,   110,   130,    -1,   132,
-     133,   137,    29,    -1,   140,    -1,    -1,    -1,    -1,   142,
-     143,   144,   145,   146,   147,   148,   149,    -1,    -1,   152,
-      -1,   154,    -1,    -1,    -1,    52,   162,    -1,    55,    -1,
-     163,   167,    -1,    -1,   389,   168,   169,   170,    10,   172,
-     173,    -1,    -1,    15,    16,    17,   179,   180,    -1,    -1,
-      -1,    23,    24,    -1,    -1,   188,   189,   127,    30,    31,
-     174,    -1,    34,    -1,    36,    -1,    38,    39,   150,    -1,
-      42,   194,   195,   196,   197,   198,    -1,    -1,   160,    51,
-     203,    -1,    -1,    55,    -1,   155,   156,   157,   158,    61,
-      -1,    63,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-      72,    73,    -1,    -1,    76,    77,    -1,    -1,    -1,    81,
-      82,   138,   139,    85,    86,    -1,    -1,    -1,   145,    -1,
-      -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   107,   108,   109,    -1,    -1,
-      -1,    -1,   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   123,    -1,    -1,    -1,    -1,   128,    48,   130,    -1,
-     132,   133,    -1,    -1,    -1,    56,    -1,    -1,    -1,    -1,
+      15,    50,   189,   163,   164,    40,    45,    62,   148,    30,
+      35,    62,   188,     4,    67,    43,    69,    38,   205,     1,
+      41,     5,    63,    57,    39,    28,    98,    62,    10,   148,
+      11,    56,    33,    15,    16,    17,    27,   160,   110,    62,
+     193,    23,    24,   190,   191,    60,    62,    62,    30,    31,
+     203,   160,    34,   160,    36,    80,    38,    39,    79,   160,
+      42,    62,   160,   203,    67,    62,    69,   254,    96,    51,
+     160,   190,   191,    55,   194,   195,   196,   197,   198,    61,
+     160,    63,    66,   203,    68,    62,    62,   160,    62,   110,
+      72,    73,   126,   134,    76,    77,   160,     7,     8,    81,
+      82,     3,   160,    85,    86,   265,   266,   160,     0,   188,
+      62,   202,    94,   160,   160,   106,    26,    62,   133,   100,
+     175,    33,   113,   151,   105,   107,   108,   109,   160,    62,
+     160,   146,   114,    28,    28,   174,   171,    87,    62,   199,
+     131,   123,    44,    45,    46,    47,   128,   150,   130,   200,
+     132,   133,     6,   174,    62,    65,    62,   160,    62,   188,
+     142,   143,   144,   145,   146,   147,   148,   149,   160,     8,
+     152,    62,   154,    12,   160,   335,   160,   160,    32,    62,
+      19,   163,   369,   188,    37,    95,   168,   169,   170,   160,
+     172,   173,   183,   199,   160,   186,    50,   179,   180,    53,
+     184,    29,    28,    62,    62,   160,   188,   189,    10,   199,
+     188,   398,   201,    15,    16,    17,   403,   202,   193,   268,
+     192,    23,    24,   188,    52,   188,   199,    55,    30,    31,
+     199,    70,    34,   420,    36,   202,    38,    39,   199,   141,
+      42,   194,   195,   196,   197,   198,   188,   143,   202,    51,
+     105,   161,   252,    55,   169,    12,   166,   159,   187,    61,
+     130,    63,   164,   165,    29,   104,   105,   255,   158,   209,
+      72,    73,    21,   127,    76,    77,    25,   297,   365,    81,
+      82,   414,   121,    85,    86,   400,    -1,   126,   337,    -1,
+      -1,    -1,    94,    -1,    57,    58,    59,    60,    -1,    -1,
+      -1,   155,   156,   157,   158,   107,   108,   109,    -1,   163,
+     138,   139,   114,    -1,   153,    -1,    -1,   145,    -1,    -1,
+      -1,   123,    -1,    -1,    -1,    88,   128,    90,   130,    92,
+     132,   133,    -1,    -1,    83,    98,    -1,   176,   177,   178,
      142,   143,   144,   145,   146,   147,   148,   149,    -1,    -1,
-     152,    -1,   154,    74,    75,    -1,    -1,    78,    -1,    -1,
-      -1,   163,    -1,    84,    -1,    -1,   168,   169,   170,    -1,
-     172,   173,    13,    14,    -1,    -1,    -1,   179,   180,    20,
-      -1,    22,    57,    58,    59,    60,    -1,   189,    -1,    -1,
-     111,   112,    -1,    -1,   115,   116,    -1,   118,   119,   120,
-      -1,   122,    -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,
-      -1,    -1,    -1,    88,    -1,    90,    -1,    92,    -1,    -1,
-      -1,    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,
+     152,    -1,   154,    -1,     9,    -1,    -1,    -1,    -1,    -1,
+      -1,   163,    -1,    18,    -1,    -1,   168,   169,   170,    10,
+     172,   173,    -1,   388,    15,    16,    17,   179,   180,    -1,
+     129,    -1,    23,    24,    -1,    -1,   188,   189,   137,    30,
+      31,   140,    -1,    34,    -1,    36,    -1,    38,    39,    54,
+      55,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      51,    -1,    -1,   162,    55,    -1,    71,    -1,   167,    -1,
+      61,    -1,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    72,    73,    -1,    -1,    76,    77,    -1,    93,    -1,
+      81,    82,    -1,    -1,    85,    86,   101,    -1,   103,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   117,    -1,    -1,    -1,   107,   108,   109,    -1,
+      -1,    -1,    -1,   114,    -1,    -1,    -1,    -1,    -1,    -1,
+     135,   136,   123,    -1,    -1,    -1,    -1,   128,    -1,   130,
+      -1,   132,   133,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   142,   143,   144,   145,   146,   147,   148,   149,    -1,
+      -1,   152,    -1,   154,    -1,    48,   171,    -1,   173,    -1,
+      -1,    -1,   163,    56,    -1,    -1,   181,   168,   169,   170,
+     185,   172,   173,    -1,    -1,    -1,    -1,    -1,   179,   180,
+      -1,    74,    75,    -1,    -1,    78,    -1,    -1,   189,    -1,
+      -1,    84,    13,    14,    -1,    -1,    -1,    -1,    -1,    20,
+      -1,    22,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,   112,
+      -1,    -1,   115,   116,    -1,   118,   119,   120,    49,   122,
+      -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,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    -1,
       91,    -1,    -1,    -1,    -1,    -1,    97,    -1,    99,    -1,
-     181,   102,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   102,    -1,    -1,    -1,    -1,    -1,    -1,   181,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   124,   125
 };
@@ -1332,33 +1334,33 @@ static const yytype_uint16 yystos[] =
      278,   279,   210,   292,    62,    57,    58,    59,    60,    88,
       90,    92,    98,   247,   248,   249,   292,   160,   160,   291,
       62,     7,     8,    26,    65,    95,   161,   166,   285,   286,
-      28,    67,    69,   150,   210,   211,    62,    43,    96,   151,
-     256,   257,   258,   160,   274,   234,   235,   160,     6,    32,
-      50,    53,   127,   155,   156,   157,   158,   163,   265,   266,
-     267,    13,    14,    20,    22,    49,    89,    91,    97,    99,
-     102,   124,   125,   229,   230,   231,   232,   211,    62,   200,
-     288,   289,   290,    62,   287,     0,   207,   188,   210,   210,
-      33,    62,   294,    62,   160,   160,    35,    56,    80,   283,
-     202,    29,    52,    55,   138,   139,   145,   226,   227,   261,
-     245,    62,    33,   236,     3,    44,    45,    46,    47,   141,
-     159,   164,   165,   251,   252,   253,   254,   160,   207,   279,
-     210,   248,    62,   160,   286,   242,    28,    28,   242,   242,
-      87,   257,    62,   199,   235,   266,   294,    40,    62,   171,
-     293,   230,    62,   294,   276,    62,   289,    62,   188,   213,
-       5,    66,    68,   160,   184,   282,   190,   191,   297,   298,
-     299,    62,   160,    30,    38,    41,    79,   110,   174,   237,
-     238,   239,   160,   160,    62,   252,   294,   293,    48,    56,
-      74,    75,    78,    84,   111,   112,   115,   116,   118,   119,
-     120,   122,   181,   243,   242,   242,   211,   160,    63,   134,
-     277,    37,     9,    18,    54,    55,    71,    93,   101,   103,
-     117,   135,   136,   171,   173,   181,   185,   214,   215,   216,
-     217,   218,   219,   220,   148,   298,   300,   301,   303,   188,
-     199,   160,     4,    27,   106,   113,   131,   183,   186,   240,
-     242,    28,   275,   211,    62,    62,    62,   175,   160,   199,
-     188,   203,   301,   202,   294,   201,   210,   192,   302,   199,
-     193,   304,   305,   294,   199,   203,   305,   188,   294,   202,
-     194,   195,   196,   197,   198,   306,   307,   308,   203,   307,
-     188,   199,   188,   294
+      28,    67,    69,   150,   210,    62,    43,    96,   151,   256,
+     257,   258,   160,   274,   234,   235,   160,     6,    32,    50,
+      53,   127,   155,   156,   157,   158,   163,   265,   266,   267,
+      13,    14,    20,    22,    49,    89,    91,    97,    99,   102,
+     124,   125,   229,   230,   231,   232,   211,    62,   200,   288,
+     289,   290,    62,   287,     0,   207,   188,   210,   210,    33,
+      62,   294,    62,   160,   160,    35,    56,    80,   283,   202,
+      29,    52,    55,   138,   139,   145,   226,   227,   261,   245,
+      62,    33,   236,     3,    44,    45,    46,    47,   141,   159,
+     164,   165,   251,   252,   253,   254,   160,   207,   279,   210,
+     248,    62,   160,   286,   242,    28,    28,   242,    87,   242,
+     257,    62,   199,   235,   266,   294,    40,    62,   171,   293,
+     230,    62,   294,   276,    62,   289,    62,   188,   213,     5,
+      66,    68,   160,   184,   282,   190,   191,   297,   298,   299,
+      62,   160,    30,    38,    41,    79,   110,   174,   237,   238,
+     239,   160,   160,    62,   252,   294,   293,    48,    56,    74,
+      75,    78,    84,   111,   112,   115,   116,   118,   119,   120,
+     122,   181,   243,   242,   242,   211,   160,    63,   134,   277,
+      37,     9,    18,    54,    55,    71,    93,   101,   103,   117,
+     135,   136,   171,   173,   181,   185,   214,   215,   216,   217,
+     218,   219,   220,   148,   298,   300,   301,   303,   188,   199,
+     160,     4,    27,   106,   113,   131,   183,   186,   240,   242,
+      28,   275,   211,    62,    62,    62,   175,   160,   199,   188,
+     203,   301,   202,   294,   201,   210,   192,   302,   199,   193,
+     304,   305,   294,   199,   203,   305,   188,   294,   202,   194,
+     195,   196,   197,   198,   306,   307,   308,   203,   307,   188,
+     199,   188,   294
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -2122,7 +2124,7 @@ yyreduce:
                                ip_ctx->errpos.nline,
                                ip_ctx->errpos.ncol);
                }
-#line 2126 "ntp_parser.c" /* yacc.c:1646  */
+#line 2128 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 20:
@@ -2133,37 +2135,37 @@ yyreduce:
                        my_node = create_peer_node((yyvsp[-2].Integer), (yyvsp[-1].Address_node), (yyvsp[0].Attr_val_fifo));
                        APPEND_G_FIFO(cfgt.peers, my_node);
                }
-#line 2137 "ntp_parser.c" /* yacc.c:1646  */
+#line 2139 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 27:
 #line 433 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Address_node) = create_address_node((yyvsp[0].String), (yyvsp[-1].Integer)); }
-#line 2143 "ntp_parser.c" /* yacc.c:1646  */
+#line 2145 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 28:
 #line 438 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Address_node) = create_address_node((yyvsp[0].String), AF_UNSPEC); }
-#line 2149 "ntp_parser.c" /* yacc.c:1646  */
+#line 2151 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 29:
 #line 443 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Integer) = AF_INET; }
-#line 2155 "ntp_parser.c" /* yacc.c:1646  */
+#line 2157 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 30:
 #line 445 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Integer) = AF_INET6; }
-#line 2161 "ntp_parser.c" /* yacc.c:1646  */
+#line 2163 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 31:
 #line 450 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val_fifo) = NULL; }
-#line 2167 "ntp_parser.c" /* yacc.c:1646  */
+#line 2169 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 32:
@@ -2172,31 +2174,31 @@ yyreduce:
                        (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2176 "ntp_parser.c" /* yacc.c:1646  */
+#line 2178 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 36:
 #line 466 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer)); }
-#line 2182 "ntp_parser.c" /* yacc.c:1646  */
+#line 2184 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 45:
 #line 482 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2188 "ntp_parser.c" /* yacc.c:1646  */
+#line 2190 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 46:
 #line 484 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_uval((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2194 "ntp_parser.c" /* yacc.c:1646  */
+#line 2196 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 53:
 #line 498 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
-#line 2200 "ntp_parser.c" /* yacc.c:1646  */
+#line 2202 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 55:
@@ -2208,31 +2210,31 @@ yyreduce:
                        if (my_node)
                                APPEND_G_FIFO(cfgt.unpeers, my_node);
                }
-#line 2212 "ntp_parser.c" /* yacc.c:1646  */
+#line 2214 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 58:
 #line 533 "ntp_parser.y" /* yacc.c:1646  */
     { cfgt.broadcastclient = 1; }
-#line 2218 "ntp_parser.c" /* yacc.c:1646  */
+#line 2220 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 59:
 #line 535 "ntp_parser.y" /* yacc.c:1646  */
     { CONCAT_G_FIFOS(cfgt.manycastserver, (yyvsp[0].Address_fifo)); }
-#line 2224 "ntp_parser.c" /* yacc.c:1646  */
+#line 2226 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 60:
 #line 537 "ntp_parser.y" /* yacc.c:1646  */
     { CONCAT_G_FIFOS(cfgt.multicastclient, (yyvsp[0].Address_fifo)); }
-#line 2230 "ntp_parser.c" /* yacc.c:1646  */
+#line 2232 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 61:
 #line 539 "ntp_parser.y" /* yacc.c:1646  */
     { cfgt.mdnstries = (yyvsp[0].Integer); }
-#line 2236 "ntp_parser.c" /* yacc.c:1646  */
+#line 2238 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 62:
@@ -2243,13 +2245,13 @@ yyreduce:
                        atrv = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer));
                        APPEND_G_FIFO(cfgt.vars, atrv);
                }
-#line 2247 "ntp_parser.c" /* yacc.c:1646  */
+#line 2249 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 63:
 #line 557 "ntp_parser.y" /* yacc.c:1646  */
     { cfgt.auth.control_key = (yyvsp[0].Integer); }
-#line 2253 "ntp_parser.c" /* yacc.c:1646  */
+#line 2255 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 64:
@@ -2258,75 +2260,76 @@ yyreduce:
                        cfgt.auth.cryptosw++;
                        CONCAT_G_FIFOS(cfgt.auth.crypto_cmd_list, (yyvsp[0].Attr_val_fifo));
                }
-#line 2262 "ntp_parser.c" /* yacc.c:1646  */
+#line 2264 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 65:
 #line 564 "ntp_parser.y" /* yacc.c:1646  */
     { cfgt.auth.keys = (yyvsp[0].String); }
-#line 2268 "ntp_parser.c" /* yacc.c:1646  */
+#line 2270 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 66:
 #line 566 "ntp_parser.y" /* yacc.c:1646  */
     { cfgt.auth.keysdir = (yyvsp[0].String); }
-#line 2274 "ntp_parser.c" /* yacc.c:1646  */
+#line 2276 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 67:
 #line 568 "ntp_parser.y" /* yacc.c:1646  */
     { cfgt.auth.request_key = (yyvsp[0].Integer); }
-#line 2280 "ntp_parser.c" /* yacc.c:1646  */
+#line 2282 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 68:
 #line 570 "ntp_parser.y" /* yacc.c:1646  */
     { cfgt.auth.revoke = (yyvsp[0].Integer); }
-#line 2286 "ntp_parser.c" /* yacc.c:1646  */
+#line 2288 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 69:
 #line 572 "ntp_parser.y" /* yacc.c:1646  */
     {
-                       cfgt.auth.trusted_key_list = (yyvsp[0].Attr_val_fifo);
-
-                       // if (!cfgt.auth.trusted_key_list)
-                       //      cfgt.auth.trusted_key_list = $2;
-                       // else
-                       //      LINK_SLIST(cfgt.auth.trusted_key_list, $2, link);
+                       /* [Bug 948] leaves it open if appending or
+                        * replacing the trusted key list is the right
+                        * way. In any case, either alternative should
+                        * be coded correctly!
+                        */
+                       DESTROY_G_FIFO(cfgt.auth.trusted_key_list, destroy_attr_val); /* remove for append */
+                       CONCAT_G_FIFOS(cfgt.auth.trusted_key_list, (yyvsp[0].Attr_val_fifo));
                }
-#line 2299 "ntp_parser.c" /* yacc.c:1646  */
+#line 2302 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 70:
-#line 581 "ntp_parser.y" /* yacc.c:1646  */
+#line 582 "ntp_parser.y" /* yacc.c:1646  */
     { cfgt.auth.ntp_signd_socket = (yyvsp[0].String); }
-#line 2305 "ntp_parser.c" /* yacc.c:1646  */
+#line 2308 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 71:
-#line 586 "ntp_parser.y" /* yacc.c:1646  */
+#line 587 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val_fifo) = NULL; }
-#line 2311 "ntp_parser.c" /* yacc.c:1646  */
+#line 2314 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 72:
-#line 588 "ntp_parser.y" /* yacc.c:1646  */
+#line 589 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2320 "ntp_parser.c" /* yacc.c:1646  */
+#line 2323 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 73:
-#line 596 "ntp_parser.y" /* yacc.c:1646  */
+#line 597 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
-#line 2326 "ntp_parser.c" /* yacc.c:1646  */
+#line 2329 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 74:
-#line 598 "ntp_parser.y" /* yacc.c:1646  */
+#line 599 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val) = NULL;
                        cfgt.auth.revoke = (yyvsp[0].Integer);
@@ -2335,59 +2338,59 @@ yyreduce:
                                "please use 'revoke %d' instead.",
                                cfgt.auth.revoke, cfgt.auth.revoke);
                }
-#line 2339 "ntp_parser.c" /* yacc.c:1646  */
+#line 2342 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 80:
-#line 623 "ntp_parser.y" /* yacc.c:1646  */
+#line 624 "ntp_parser.y" /* yacc.c:1646  */
     { CONCAT_G_FIFOS(cfgt.orphan_cmds, (yyvsp[0].Attr_val_fifo)); }
-#line 2345 "ntp_parser.c" /* yacc.c:1646  */
+#line 2348 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 81:
-#line 628 "ntp_parser.y" /* yacc.c:1646  */
+#line 629 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2354 "ntp_parser.c" /* yacc.c:1646  */
+#line 2357 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 82:
-#line 633 "ntp_parser.y" /* yacc.c:1646  */
+#line 634 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2363 "ntp_parser.c" /* yacc.c:1646  */
+#line 2366 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 83:
-#line 641 "ntp_parser.y" /* yacc.c:1646  */
+#line 642 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (double)(yyvsp[0].Integer)); }
-#line 2369 "ntp_parser.c" /* yacc.c:1646  */
+#line 2372 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 84:
-#line 643 "ntp_parser.y" /* yacc.c:1646  */
+#line 644 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double)); }
-#line 2375 "ntp_parser.c" /* yacc.c:1646  */
+#line 2378 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 85:
-#line 645 "ntp_parser.y" /* yacc.c:1646  */
+#line 646 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (double)(yyvsp[0].Integer)); }
-#line 2381 "ntp_parser.c" /* yacc.c:1646  */
+#line 2384 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 97:
-#line 672 "ntp_parser.y" /* yacc.c:1646  */
+#line 673 "ntp_parser.y" /* yacc.c:1646  */
     { CONCAT_G_FIFOS(cfgt.stats_list, (yyvsp[0].Int_fifo)); }
-#line 2387 "ntp_parser.c" /* yacc.c:1646  */
+#line 2390 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 98:
-#line 674 "ntp_parser.y" /* yacc.c:1646  */
+#line 675 "ntp_parser.y" /* yacc.c:1646  */
     {
                        if (lex_from_file()) {
                                cfgt.stats_dir = (yyvsp[0].String);
@@ -2396,55 +2399,55 @@ yyreduce:
                                yyerror("statsdir remote configuration ignored");
                        }
                }
-#line 2400 "ntp_parser.c" /* yacc.c:1646  */
+#line 2403 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 99:
-#line 683 "ntp_parser.y" /* yacc.c:1646  */
+#line 684 "ntp_parser.y" /* yacc.c:1646  */
     {
                        filegen_node *fgn;
 
                        fgn = create_filegen_node((yyvsp[-1].Integer), (yyvsp[0].Attr_val_fifo));
                        APPEND_G_FIFO(cfgt.filegen_opts, fgn);
                }
-#line 2411 "ntp_parser.c" /* yacc.c:1646  */
+#line 2414 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 100:
-#line 693 "ntp_parser.y" /* yacc.c:1646  */
+#line 694 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Int_fifo) = (yyvsp[-1].Int_fifo);
                        APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
                }
-#line 2420 "ntp_parser.c" /* yacc.c:1646  */
+#line 2423 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 101:
-#line 698 "ntp_parser.y" /* yacc.c:1646  */
+#line 699 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Int_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
                }
-#line 2429 "ntp_parser.c" /* yacc.c:1646  */
+#line 2432 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 110:
-#line 717 "ntp_parser.y" /* yacc.c:1646  */
+#line 718 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val_fifo) = NULL; }
-#line 2435 "ntp_parser.c" /* yacc.c:1646  */
+#line 2438 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 111:
-#line 719 "ntp_parser.y" /* yacc.c:1646  */
+#line 720 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2444 "ntp_parser.c" /* yacc.c:1646  */
+#line 2447 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 112:
-#line 727 "ntp_parser.y" /* yacc.c:1646  */
+#line 728 "ntp_parser.y" /* yacc.c:1646  */
     {
                        if (lex_from_file()) {
                                (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String));
@@ -2454,11 +2457,11 @@ yyreduce:
                                yyerror("filegen file remote config ignored");
                        }
                }
-#line 2458 "ntp_parser.c" /* yacc.c:1646  */
+#line 2461 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 113:
-#line 737 "ntp_parser.y" /* yacc.c:1646  */
+#line 738 "ntp_parser.y" /* yacc.c:1646  */
     {
                        if (lex_from_file()) {
                                (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer));
@@ -2467,11 +2470,11 @@ yyreduce:
                                yyerror("filegen type remote config ignored");
                        }
                }
-#line 2471 "ntp_parser.c" /* yacc.c:1646  */
+#line 2474 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 114:
-#line 746 "ntp_parser.y" /* yacc.c:1646  */
+#line 747 "ntp_parser.y" /* yacc.c:1646  */
     {
                        const char *err;
 
@@ -2486,33 +2489,33 @@ yyreduce:
                                yyerror(err);
                        }
                }
-#line 2490 "ntp_parser.c" /* yacc.c:1646  */
+#line 2493 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 115:
-#line 761 "ntp_parser.y" /* yacc.c:1646  */
+#line 762 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer)); }
-#line 2496 "ntp_parser.c" /* yacc.c:1646  */
+#line 2499 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 127:
-#line 791 "ntp_parser.y" /* yacc.c:1646  */
+#line 792 "ntp_parser.y" /* yacc.c:1646  */
     {
                        CONCAT_G_FIFOS(cfgt.discard_opts, (yyvsp[0].Attr_val_fifo));
                }
-#line 2504 "ntp_parser.c" /* yacc.c:1646  */
+#line 2507 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 128:
-#line 795 "ntp_parser.y" /* yacc.c:1646  */
+#line 796 "ntp_parser.y" /* yacc.c:1646  */
     {
                        CONCAT_G_FIFOS(cfgt.mru_opts, (yyvsp[0].Attr_val_fifo));
                }
-#line 2512 "ntp_parser.c" /* yacc.c:1646  */
+#line 2515 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 129:
-#line 799 "ntp_parser.y" /* yacc.c:1646  */
+#line 800 "ntp_parser.y" /* yacc.c:1646  */
     {
                        restrict_node *rn;
 
@@ -2520,11 +2523,11 @@ yyreduce:
                                                  lex_current()->curpos.nline);
                        APPEND_G_FIFO(cfgt.restrict_opts, rn);
                }
-#line 2524 "ntp_parser.c" /* yacc.c:1646  */
+#line 2527 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 130:
-#line 807 "ntp_parser.y" /* yacc.c:1646  */
+#line 808 "ntp_parser.y" /* yacc.c:1646  */
     {
                        restrict_node *rn;
 
@@ -2532,11 +2535,11 @@ yyreduce:
                                                  lex_current()->curpos.nline);
                        APPEND_G_FIFO(cfgt.restrict_opts, rn);
                }
-#line 2536 "ntp_parser.c" /* yacc.c:1646  */
+#line 2539 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 131:
-#line 815 "ntp_parser.y" /* yacc.c:1646  */
+#line 816 "ntp_parser.y" /* yacc.c:1646  */
     {
                        restrict_node *rn;
 
@@ -2544,11 +2547,11 @@ yyreduce:
                                                  lex_current()->curpos.nline);
                        APPEND_G_FIFO(cfgt.restrict_opts, rn);
                }
-#line 2548 "ntp_parser.c" /* yacc.c:1646  */
+#line 2551 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 132:
-#line 823 "ntp_parser.y" /* yacc.c:1646  */
+#line 824 "ntp_parser.y" /* yacc.c:1646  */
     {
                        restrict_node *rn;
 
@@ -2563,11 +2566,11 @@ yyreduce:
                                lex_current()->curpos.nline);
                        APPEND_G_FIFO(cfgt.restrict_opts, rn);
                }
-#line 2567 "ntp_parser.c" /* yacc.c:1646  */
+#line 2570 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 133:
-#line 838 "ntp_parser.y" /* yacc.c:1646  */
+#line 839 "ntp_parser.y" /* yacc.c:1646  */
     {
                        restrict_node *rn;
 
@@ -2582,11 +2585,11 @@ yyreduce:
                                lex_current()->curpos.nline);
                        APPEND_G_FIFO(cfgt.restrict_opts, rn);
                }
-#line 2586 "ntp_parser.c" /* yacc.c:1646  */
+#line 2589 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 134:
-#line 853 "ntp_parser.y" /* yacc.c:1646  */
+#line 854 "ntp_parser.y" /* yacc.c:1646  */
     {
                        restrict_node * rn;
 
@@ -2595,115 +2598,115 @@ yyreduce:
                                NULL, NULL, (yyvsp[0].Int_fifo), lex_current()->curpos.nline);
                        APPEND_G_FIFO(cfgt.restrict_opts, rn);
                }
-#line 2599 "ntp_parser.c" /* yacc.c:1646  */
+#line 2602 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 135:
-#line 865 "ntp_parser.y" /* yacc.c:1646  */
+#line 866 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Int_fifo) = NULL; }
-#line 2605 "ntp_parser.c" /* yacc.c:1646  */
+#line 2608 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 136:
-#line 867 "ntp_parser.y" /* yacc.c:1646  */
+#line 868 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Int_fifo) = (yyvsp[-1].Int_fifo);
                        APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
                }
-#line 2614 "ntp_parser.c" /* yacc.c:1646  */
+#line 2617 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 152:
-#line 893 "ntp_parser.y" /* yacc.c:1646  */
+#line 894 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2623 "ntp_parser.c" /* yacc.c:1646  */
+#line 2626 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 153:
-#line 898 "ntp_parser.y" /* yacc.c:1646  */
+#line 899 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2632 "ntp_parser.c" /* yacc.c:1646  */
+#line 2635 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 154:
-#line 906 "ntp_parser.y" /* yacc.c:1646  */
+#line 907 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2638 "ntp_parser.c" /* yacc.c:1646  */
+#line 2641 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 158:
-#line 917 "ntp_parser.y" /* yacc.c:1646  */
+#line 918 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2647 "ntp_parser.c" /* yacc.c:1646  */
+#line 2650 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 159:
-#line 922 "ntp_parser.y" /* yacc.c:1646  */
+#line 923 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2656 "ntp_parser.c" /* yacc.c:1646  */
+#line 2659 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 160:
-#line 930 "ntp_parser.y" /* yacc.c:1646  */
+#line 931 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2662 "ntp_parser.c" /* yacc.c:1646  */
+#line 2665 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 169:
-#line 950 "ntp_parser.y" /* yacc.c:1646  */
+#line 951 "ntp_parser.y" /* yacc.c:1646  */
     {
                        addr_opts_node *aon;
 
                        aon = create_addr_opts_node((yyvsp[-1].Address_node), (yyvsp[0].Attr_val_fifo));
                        APPEND_G_FIFO(cfgt.fudge, aon);
                }
-#line 2673 "ntp_parser.c" /* yacc.c:1646  */
+#line 2676 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 170:
-#line 960 "ntp_parser.y" /* yacc.c:1646  */
+#line 961 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2682 "ntp_parser.c" /* yacc.c:1646  */
+#line 2685 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 171:
-#line 965 "ntp_parser.y" /* yacc.c:1646  */
+#line 966 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2691 "ntp_parser.c" /* yacc.c:1646  */
+#line 2694 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 172:
-#line 973 "ntp_parser.y" /* yacc.c:1646  */
+#line 974 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double)); }
-#line 2697 "ntp_parser.c" /* yacc.c:1646  */
+#line 2700 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 173:
-#line 975 "ntp_parser.y" /* yacc.c:1646  */
+#line 976 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2703 "ntp_parser.c" /* yacc.c:1646  */
+#line 2706 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 174:
-#line 977 "ntp_parser.y" /* yacc.c:1646  */
+#line 978 "ntp_parser.y" /* yacc.c:1646  */
     {
                        if ((yyvsp[0].Integer) >= 0 && (yyvsp[0].Integer) <= 16) {
                                (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer));
@@ -2712,89 +2715,89 @@ yyreduce:
                                yyerror("fudge factor: stratum value not in [0..16], ignored");
                        }
                }
-#line 2716 "ntp_parser.c" /* yacc.c:1646  */
+#line 2719 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 175:
-#line 986 "ntp_parser.y" /* yacc.c:1646  */
+#line 987 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
-#line 2722 "ntp_parser.c" /* yacc.c:1646  */
+#line 2725 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 176:
-#line 988 "ntp_parser.y" /* yacc.c:1646  */
+#line 989 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
-#line 2728 "ntp_parser.c" /* yacc.c:1646  */
+#line 2731 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 183:
-#line 1009 "ntp_parser.y" /* yacc.c:1646  */
+#line 1010 "ntp_parser.y" /* yacc.c:1646  */
     { CONCAT_G_FIFOS(cfgt.rlimit, (yyvsp[0].Attr_val_fifo)); }
-#line 2734 "ntp_parser.c" /* yacc.c:1646  */
+#line 2737 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 184:
-#line 1014 "ntp_parser.y" /* yacc.c:1646  */
+#line 1015 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2743 "ntp_parser.c" /* yacc.c:1646  */
+#line 2746 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 185:
-#line 1019 "ntp_parser.y" /* yacc.c:1646  */
+#line 1020 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2752 "ntp_parser.c" /* yacc.c:1646  */
+#line 2755 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 186:
-#line 1027 "ntp_parser.y" /* yacc.c:1646  */
+#line 1028 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2758 "ntp_parser.c" /* yacc.c:1646  */
+#line 2761 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 190:
-#line 1043 "ntp_parser.y" /* yacc.c:1646  */
+#line 1044 "ntp_parser.y" /* yacc.c:1646  */
     { CONCAT_G_FIFOS(cfgt.enable_opts, (yyvsp[0].Attr_val_fifo)); }
-#line 2764 "ntp_parser.c" /* yacc.c:1646  */
+#line 2767 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 191:
-#line 1045 "ntp_parser.y" /* yacc.c:1646  */
+#line 1046 "ntp_parser.y" /* yacc.c:1646  */
     { CONCAT_G_FIFOS(cfgt.disable_opts, (yyvsp[0].Attr_val_fifo)); }
-#line 2770 "ntp_parser.c" /* yacc.c:1646  */
+#line 2773 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 192:
-#line 1050 "ntp_parser.y" /* yacc.c:1646  */
+#line 1051 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2779 "ntp_parser.c" /* yacc.c:1646  */
+#line 2782 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 193:
-#line 1055 "ntp_parser.y" /* yacc.c:1646  */
+#line 1056 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2788 "ntp_parser.c" /* yacc.c:1646  */
+#line 2791 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 194:
-#line 1063 "ntp_parser.y" /* yacc.c:1646  */
+#line 1064 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer)); }
-#line 2794 "ntp_parser.c" /* yacc.c:1646  */
+#line 2797 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 195:
-#line 1065 "ntp_parser.y" /* yacc.c:1646  */
+#line 1066 "ntp_parser.y" /* yacc.c:1646  */
     {
                        if (lex_from_file()) {
                                (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer));
@@ -2808,74 +2811,74 @@ yyreduce:
                                yyerror(err_str);
                        }
                }
-#line 2812 "ntp_parser.c" /* yacc.c:1646  */
+#line 2815 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 208:
-#line 1104 "ntp_parser.y" /* yacc.c:1646  */
+#line 1105 "ntp_parser.y" /* yacc.c:1646  */
     { CONCAT_G_FIFOS(cfgt.tinker, (yyvsp[0].Attr_val_fifo)); }
-#line 2818 "ntp_parser.c" /* yacc.c:1646  */
+#line 2821 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 209:
-#line 1109 "ntp_parser.y" /* yacc.c:1646  */
+#line 1110 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2827 "ntp_parser.c" /* yacc.c:1646  */
+#line 2830 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 210:
-#line 1114 "ntp_parser.y" /* yacc.c:1646  */
+#line 1115 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 2836 "ntp_parser.c" /* yacc.c:1646  */
+#line 2839 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 211:
-#line 1122 "ntp_parser.y" /* yacc.c:1646  */
+#line 1123 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double)); }
-#line 2842 "ntp_parser.c" /* yacc.c:1646  */
+#line 2845 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 224:
-#line 1147 "ntp_parser.y" /* yacc.c:1646  */
+#line 1148 "ntp_parser.y" /* yacc.c:1646  */
     {
                        attr_val *av;
 
                        av = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double));
                        APPEND_G_FIFO(cfgt.vars, av);
                }
-#line 2853 "ntp_parser.c" /* yacc.c:1646  */
+#line 2856 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 225:
-#line 1154 "ntp_parser.y" /* yacc.c:1646  */
+#line 1155 "ntp_parser.y" /* yacc.c:1646  */
     {
                        attr_val *av;
 
                        av = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer));
                        APPEND_G_FIFO(cfgt.vars, av);
                }
-#line 2864 "ntp_parser.c" /* yacc.c:1646  */
+#line 2867 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 226:
-#line 1161 "ntp_parser.y" /* yacc.c:1646  */
+#line 1162 "ntp_parser.y" /* yacc.c:1646  */
     {
                        attr_val *av;
 
                        av = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String));
                        APPEND_G_FIFO(cfgt.vars, av);
                }
-#line 2875 "ntp_parser.c" /* yacc.c:1646  */
+#line 2878 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 227:
-#line 1168 "ntp_parser.y" /* yacc.c:1646  */
+#line 1169 "ntp_parser.y" /* yacc.c:1646  */
     {
                        char error_text[64];
                        attr_val *av;
@@ -2891,11 +2894,11 @@ yyreduce:
                                yyerror(error_text);
                        }
                }
-#line 2895 "ntp_parser.c" /* yacc.c:1646  */
+#line 2898 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 228:
-#line 1184 "ntp_parser.y" /* yacc.c:1646  */
+#line 1185 "ntp_parser.y" /* yacc.c:1646  */
     {
                        if (!lex_from_file()) {
                                YYFREE((yyvsp[-1].String)); /* avoid leak */
@@ -2914,68 +2917,68 @@ yyreduce:
                        }
                        YYFREE((yyvsp[-1].String)); /* avoid leak */
                }
-#line 2918 "ntp_parser.c" /* yacc.c:1646  */
+#line 2921 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 229:
-#line 1203 "ntp_parser.y" /* yacc.c:1646  */
+#line 1204 "ntp_parser.y" /* yacc.c:1646  */
     { lex_flush_stack(); }
-#line 2924 "ntp_parser.c" /* yacc.c:1646  */
+#line 2927 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 230:
-#line 1205 "ntp_parser.y" /* yacc.c:1646  */
+#line 1206 "ntp_parser.y" /* yacc.c:1646  */
     { /* see drift_parm below for actions */ }
-#line 2930 "ntp_parser.c" /* yacc.c:1646  */
+#line 2933 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 231:
-#line 1207 "ntp_parser.y" /* yacc.c:1646  */
+#line 1208 "ntp_parser.y" /* yacc.c:1646  */
     { CONCAT_G_FIFOS(cfgt.logconfig, (yyvsp[0].Attr_val_fifo)); }
-#line 2936 "ntp_parser.c" /* yacc.c:1646  */
+#line 2939 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 232:
-#line 1209 "ntp_parser.y" /* yacc.c:1646  */
+#line 1210 "ntp_parser.y" /* yacc.c:1646  */
     { CONCAT_G_FIFOS(cfgt.phone, (yyvsp[0].String_fifo)); }
-#line 2942 "ntp_parser.c" /* yacc.c:1646  */
+#line 2945 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 233:
-#line 1211 "ntp_parser.y" /* yacc.c:1646  */
+#line 1212 "ntp_parser.y" /* yacc.c:1646  */
     { APPEND_G_FIFO(cfgt.setvar, (yyvsp[0].Set_var)); }
-#line 2948 "ntp_parser.c" /* yacc.c:1646  */
+#line 2951 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 234:
-#line 1213 "ntp_parser.y" /* yacc.c:1646  */
+#line 1214 "ntp_parser.y" /* yacc.c:1646  */
     {
                        addr_opts_node *aon;
 
                        aon = create_addr_opts_node((yyvsp[-1].Address_node), (yyvsp[0].Attr_val_fifo));
                        APPEND_G_FIFO(cfgt.trap, aon);
                }
-#line 2959 "ntp_parser.c" /* yacc.c:1646  */
+#line 2962 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 235:
-#line 1220 "ntp_parser.y" /* yacc.c:1646  */
+#line 1221 "ntp_parser.y" /* yacc.c:1646  */
     { CONCAT_G_FIFOS(cfgt.ttl, (yyvsp[0].Attr_val_fifo)); }
-#line 2965 "ntp_parser.c" /* yacc.c:1646  */
+#line 2968 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 240:
-#line 1235 "ntp_parser.y" /* yacc.c:1646  */
+#line 1236 "ntp_parser.y" /* yacc.c:1646  */
     {
 #ifndef LEAP_SMEAR
                        yyerror("Built without LEAP_SMEAR support.");
 #endif
                }
-#line 2975 "ntp_parser.c" /* yacc.c:1646  */
+#line 2978 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 246:
-#line 1255 "ntp_parser.y" /* yacc.c:1646  */
+#line 1256 "ntp_parser.y" /* yacc.c:1646  */
     {
                        if (lex_from_file()) {
                                attr_val *av;
@@ -2986,11 +2989,11 @@ yyreduce:
                                yyerror("driftfile remote configuration ignored");
                        }
                }
-#line 2990 "ntp_parser.c" /* yacc.c:1646  */
+#line 2993 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 247:
-#line 1266 "ntp_parser.y" /* yacc.c:1646  */
+#line 1267 "ntp_parser.y" /* yacc.c:1646  */
     {
                        if (lex_from_file()) {
                                attr_val *av;
@@ -3003,11 +3006,11 @@ yyreduce:
                                yyerror("driftfile remote configuration ignored");
                        }
                }
-#line 3007 "ntp_parser.c" /* yacc.c:1646  */
+#line 3010 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 248:
-#line 1279 "ntp_parser.y" /* yacc.c:1646  */
+#line 1280 "ntp_parser.y" /* yacc.c:1646  */
     {
                        if (lex_from_file()) {
                                attr_val *av;
@@ -3017,71 +3020,71 @@ yyreduce:
                                yyerror("driftfile remote configuration ignored");
                        }
                }
-#line 3021 "ntp_parser.c" /* yacc.c:1646  */
+#line 3024 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 249:
-#line 1292 "ntp_parser.y" /* yacc.c:1646  */
+#line 1293 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Set_var) = create_setvar_node((yyvsp[-3].String), (yyvsp[-1].String), (yyvsp[0].Integer)); }
-#line 3027 "ntp_parser.c" /* yacc.c:1646  */
+#line 3030 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 251:
-#line 1298 "ntp_parser.y" /* yacc.c:1646  */
+#line 1299 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Integer) = 0; }
-#line 3033 "ntp_parser.c" /* yacc.c:1646  */
+#line 3036 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 252:
-#line 1303 "ntp_parser.y" /* yacc.c:1646  */
+#line 1304 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val_fifo) = NULL; }
-#line 3039 "ntp_parser.c" /* yacc.c:1646  */
+#line 3042 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 253:
-#line 1305 "ntp_parser.y" /* yacc.c:1646  */
+#line 1306 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 3048 "ntp_parser.c" /* yacc.c:1646  */
+#line 3051 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 254:
-#line 1313 "ntp_parser.y" /* yacc.c:1646  */
+#line 1314 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 3054 "ntp_parser.c" /* yacc.c:1646  */
+#line 3057 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 255:
-#line 1315 "ntp_parser.y" /* yacc.c:1646  */
+#line 1316 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), estrdup((yyvsp[0].Address_node)->address));
                        destroy_address_node((yyvsp[0].Address_node));
                }
-#line 3063 "ntp_parser.c" /* yacc.c:1646  */
+#line 3066 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 256:
-#line 1323 "ntp_parser.y" /* yacc.c:1646  */
+#line 1324 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 3072 "ntp_parser.c" /* yacc.c:1646  */
+#line 3075 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 257:
-#line 1328 "ntp_parser.y" /* yacc.c:1646  */
+#line 1329 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 3081 "ntp_parser.c" /* yacc.c:1646  */
+#line 3084 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 258:
-#line 1336 "ntp_parser.y" /* yacc.c:1646  */
+#line 1337 "ntp_parser.y" /* yacc.c:1646  */
     {
                        char    prefix;
                        char *  type;
@@ -3103,141 +3106,141 @@ yyreduce:
                        (yyval.Attr_val) = create_attr_sval(prefix, estrdup(type));
                        YYFREE((yyvsp[0].String));
                }
-#line 3107 "ntp_parser.c" /* yacc.c:1646  */
+#line 3110 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 259:
-#line 1361 "ntp_parser.y" /* yacc.c:1646  */
+#line 1362 "ntp_parser.y" /* yacc.c:1646  */
     {
                        nic_rule_node *nrn;
 
                        nrn = create_nic_rule_node((yyvsp[0].Integer), NULL, (yyvsp[-1].Integer));
                        APPEND_G_FIFO(cfgt.nic_rules, nrn);
                }
-#line 3118 "ntp_parser.c" /* yacc.c:1646  */
+#line 3121 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 260:
-#line 1368 "ntp_parser.y" /* yacc.c:1646  */
+#line 1369 "ntp_parser.y" /* yacc.c:1646  */
     {
                        nic_rule_node *nrn;
 
                        nrn = create_nic_rule_node(0, (yyvsp[0].String), (yyvsp[-1].Integer));
                        APPEND_G_FIFO(cfgt.nic_rules, nrn);
                }
-#line 3129 "ntp_parser.c" /* yacc.c:1646  */
+#line 3132 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 270:
-#line 1396 "ntp_parser.y" /* yacc.c:1646  */
+#line 1397 "ntp_parser.y" /* yacc.c:1646  */
     { CONCAT_G_FIFOS(cfgt.reset_counters, (yyvsp[0].Int_fifo)); }
-#line 3135 "ntp_parser.c" /* yacc.c:1646  */
+#line 3138 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 271:
-#line 1401 "ntp_parser.y" /* yacc.c:1646  */
+#line 1402 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Int_fifo) = (yyvsp[-1].Int_fifo);
                        APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
                }
-#line 3144 "ntp_parser.c" /* yacc.c:1646  */
+#line 3147 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 272:
-#line 1406 "ntp_parser.y" /* yacc.c:1646  */
+#line 1407 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Int_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
                }
-#line 3153 "ntp_parser.c" /* yacc.c:1646  */
+#line 3156 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 280:
-#line 1430 "ntp_parser.y" /* yacc.c:1646  */
+#line 1431 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), create_int_node((yyvsp[0].Integer)));
                }
-#line 3162 "ntp_parser.c" /* yacc.c:1646  */
+#line 3165 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 281:
-#line 1435 "ntp_parser.y" /* yacc.c:1646  */
+#line 1436 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), create_int_node((yyvsp[0].Integer)));
                }
-#line 3171 "ntp_parser.c" /* yacc.c:1646  */
+#line 3174 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 282:
-#line 1443 "ntp_parser.y" /* yacc.c:1646  */
+#line 1444 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 3180 "ntp_parser.c" /* yacc.c:1646  */
+#line 3183 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 283:
-#line 1448 "ntp_parser.y" /* yacc.c:1646  */
+#line 1449 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
                }
-#line 3189 "ntp_parser.c" /* yacc.c:1646  */
+#line 3192 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 284:
-#line 1456 "ntp_parser.y" /* yacc.c:1646  */
+#line 1457 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_ival('i', (yyvsp[0].Integer)); }
-#line 3195 "ntp_parser.c" /* yacc.c:1646  */
+#line 3198 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 286:
-#line 1462 "ntp_parser.y" /* yacc.c:1646  */
+#line 1463 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_rangeval('-', (yyvsp[-3].Integer), (yyvsp[-1].Integer)); }
-#line 3201 "ntp_parser.c" /* yacc.c:1646  */
+#line 3204 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 287:
-#line 1467 "ntp_parser.y" /* yacc.c:1646  */
+#line 1468 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.String_fifo) = (yyvsp[-1].String_fifo);
                        APPEND_G_FIFO((yyval.String_fifo), create_string_node((yyvsp[0].String)));
                }
-#line 3210 "ntp_parser.c" /* yacc.c:1646  */
+#line 3213 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 288:
-#line 1472 "ntp_parser.y" /* yacc.c:1646  */
+#line 1473 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.String_fifo) = NULL;
                        APPEND_G_FIFO((yyval.String_fifo), create_string_node((yyvsp[0].String)));
                }
-#line 3219 "ntp_parser.c" /* yacc.c:1646  */
+#line 3222 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 289:
-#line 1480 "ntp_parser.y" /* yacc.c:1646  */
+#line 1481 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Address_fifo) = (yyvsp[-1].Address_fifo);
                        APPEND_G_FIFO((yyval.Address_fifo), (yyvsp[0].Address_node));
                }
-#line 3228 "ntp_parser.c" /* yacc.c:1646  */
+#line 3231 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 290:
-#line 1485 "ntp_parser.y" /* yacc.c:1646  */
+#line 1486 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Address_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Address_fifo), (yyvsp[0].Address_node));
                }
-#line 3237 "ntp_parser.c" /* yacc.c:1646  */
+#line 3240 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 291:
-#line 1493 "ntp_parser.y" /* yacc.c:1646  */
+#line 1494 "ntp_parser.y" /* yacc.c:1646  */
     {
                        if ((yyvsp[0].Integer) != 0 && (yyvsp[0].Integer) != 1) {
                                yyerror("Integer value is not boolean (0 or 1). Assuming 1");
@@ -3246,29 +3249,29 @@ yyreduce:
                                (yyval.Integer) = (yyvsp[0].Integer);
                        }
                }
-#line 3250 "ntp_parser.c" /* yacc.c:1646  */
+#line 3253 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 292:
-#line 1501 "ntp_parser.y" /* yacc.c:1646  */
+#line 1502 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Integer) = 1; }
-#line 3256 "ntp_parser.c" /* yacc.c:1646  */
+#line 3259 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 293:
-#line 1502 "ntp_parser.y" /* yacc.c:1646  */
+#line 1503 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Integer) = 0; }
-#line 3262 "ntp_parser.c" /* yacc.c:1646  */
+#line 3265 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 294:
-#line 1506 "ntp_parser.y" /* yacc.c:1646  */
+#line 1507 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Double) = (double)(yyvsp[0].Integer); }
-#line 3268 "ntp_parser.c" /* yacc.c:1646  */
+#line 3271 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 296:
-#line 1517 "ntp_parser.y" /* yacc.c:1646  */
+#line 1518 "ntp_parser.y" /* yacc.c:1646  */
     {
                        sim_node *sn;
 
@@ -3278,125 +3281,125 @@ yyreduce:
                        /* Revert from ; to \n for end-of-command */
                        old_config_style = 1;
                }
-#line 3282 "ntp_parser.c" /* yacc.c:1646  */
+#line 3285 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 297:
-#line 1534 "ntp_parser.y" /* yacc.c:1646  */
+#line 1535 "ntp_parser.y" /* yacc.c:1646  */
     { old_config_style = 0; }
-#line 3288 "ntp_parser.c" /* yacc.c:1646  */
+#line 3291 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 298:
-#line 1539 "ntp_parser.y" /* yacc.c:1646  */
+#line 1540 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = (yyvsp[-2].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
                }
-#line 3297 "ntp_parser.c" /* yacc.c:1646  */
+#line 3300 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 299:
-#line 1544 "ntp_parser.y" /* yacc.c:1646  */
+#line 1545 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
                }
-#line 3306 "ntp_parser.c" /* yacc.c:1646  */
+#line 3309 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 300:
-#line 1552 "ntp_parser.y" /* yacc.c:1646  */
+#line 1553 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_dval((yyvsp[-2].Integer), (yyvsp[0].Double)); }
-#line 3312 "ntp_parser.c" /* yacc.c:1646  */
+#line 3315 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 303:
-#line 1562 "ntp_parser.y" /* yacc.c:1646  */
+#line 1563 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Sim_server_fifo) = (yyvsp[-1].Sim_server_fifo);
                        APPEND_G_FIFO((yyval.Sim_server_fifo), (yyvsp[0].Sim_server));
                }
-#line 3321 "ntp_parser.c" /* yacc.c:1646  */
+#line 3324 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 304:
-#line 1567 "ntp_parser.y" /* yacc.c:1646  */
+#line 1568 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Sim_server_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Sim_server_fifo), (yyvsp[0].Sim_server));
                }
-#line 3330 "ntp_parser.c" /* yacc.c:1646  */
+#line 3333 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 305:
-#line 1575 "ntp_parser.y" /* yacc.c:1646  */
+#line 1576 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Sim_server) = ONLY_SIM(create_sim_server((yyvsp[-4].Address_node), (yyvsp[-2].Double), (yyvsp[-1].Sim_script_fifo))); }
-#line 3336 "ntp_parser.c" /* yacc.c:1646  */
+#line 3339 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 306:
-#line 1580 "ntp_parser.y" /* yacc.c:1646  */
+#line 1581 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Double) = (yyvsp[-1].Double); }
-#line 3342 "ntp_parser.c" /* yacc.c:1646  */
+#line 3345 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 307:
-#line 1585 "ntp_parser.y" /* yacc.c:1646  */
+#line 1586 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Address_node) = (yyvsp[0].Address_node); }
-#line 3348 "ntp_parser.c" /* yacc.c:1646  */
+#line 3351 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 308:
-#line 1590 "ntp_parser.y" /* yacc.c:1646  */
+#line 1591 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Sim_script_fifo) = (yyvsp[-1].Sim_script_fifo);
                        APPEND_G_FIFO((yyval.Sim_script_fifo), (yyvsp[0].Sim_script));
                }
-#line 3357 "ntp_parser.c" /* yacc.c:1646  */
+#line 3360 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 309:
-#line 1595 "ntp_parser.y" /* yacc.c:1646  */
+#line 1596 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Sim_script_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Sim_script_fifo), (yyvsp[0].Sim_script));
                }
-#line 3366 "ntp_parser.c" /* yacc.c:1646  */
+#line 3369 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 310:
-#line 1603 "ntp_parser.y" /* yacc.c:1646  */
+#line 1604 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Sim_script) = ONLY_SIM(create_sim_script_info((yyvsp[-3].Double), (yyvsp[-1].Attr_val_fifo))); }
-#line 3372 "ntp_parser.c" /* yacc.c:1646  */
+#line 3375 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 311:
-#line 1608 "ntp_parser.y" /* yacc.c:1646  */
+#line 1609 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = (yyvsp[-2].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
                }
-#line 3381 "ntp_parser.c" /* yacc.c:1646  */
+#line 3384 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 312:
-#line 1613 "ntp_parser.y" /* yacc.c:1646  */
+#line 1614 "ntp_parser.y" /* yacc.c:1646  */
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
                }
-#line 3390 "ntp_parser.c" /* yacc.c:1646  */
+#line 3393 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
   case 313:
-#line 1621 "ntp_parser.y" /* yacc.c:1646  */
+#line 1622 "ntp_parser.y" /* yacc.c:1646  */
     { (yyval.Attr_val) = create_attr_dval((yyvsp[-2].Integer), (yyvsp[0].Double)); }
-#line 3396 "ntp_parser.c" /* yacc.c:1646  */
+#line 3399 "ntp_parser.c" /* yacc.c:1646  */
     break;
 
 
-#line 3400 "ntp_parser.c" /* yacc.c:1646  */
+#line 3403 "ntp_parser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -3624,7 +3627,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 1632 "ntp_parser.y" /* yacc.c:1906  */
+#line 1633 "ntp_parser.y" /* yacc.c:1906  */
 
 
 void
index 10c0cfdaf6f2250ba00cb82b890c2358bde01b2a..8174ef3153af2cc8dad07b41fa75a222d6f2c21b 100644 (file)
@@ -30,8 +30,8 @@
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
-#ifndef YY_YY_Y_TAB_H_INCLUDED
-# define YY_YY_Y_TAB_H_INCLUDED
+#ifndef YY_YY_NTP_PARSER_H_INCLUDED
+# define YY_YY_NTP_PARSER_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
@@ -478,4 +478,4 @@ extern YYSTYPE yylval;
 
 int yyparse (void);
 
-#endif /* !YY_YY_Y_TAB_H_INCLUDED  */
+#endif /* !YY_YY_NTP_PARSER_H_INCLUDED  */
index 0dec2dfd78b66edb9bcde6ca21ba4dde08e8ed27..4c785670d2801bdec4766339f1a8d45a910e397d 100644 (file)
@@ -570,12 +570,13 @@ authentication_command
                        { cfgt.auth.revoke = $2; }
        |       T_Trustedkey integer_list_range
                {
-                       cfgt.auth.trusted_key_list = $2;
-
-                       // if (!cfgt.auth.trusted_key_list)
-                       //      cfgt.auth.trusted_key_list = $2;
-                       // else
-                       //      LINK_SLIST(cfgt.auth.trusted_key_list, $2, link);
+                       /* [Bug 948] leaves it open if appending or
+                        * replacing the trusted key list is the right
+                        * way. In any case, either alternative should
+                        * be coded correctly!
+                        */
+                       DESTROY_G_FIFO(cfgt.auth.trusted_key_list, destroy_attr_val); /* remove for append */
+                       CONCAT_G_FIFOS(cfgt.auth.trusted_key_list, $2);
                }
        |       T_NtpSignDsocket T_String
                        { cfgt.auth.ntp_signd_socket = $2; }