]> granicus.if.org Git - sudo/commitdiff
Add support for relative paths in #include and #includedir
authorTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 12 Jan 2012 15:39:49 +0000 (10:39 -0500)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 12 Jan 2012 15:39:49 +0000 (10:39 -0500)
--HG--
branch : 1.7

sudoers.pod
toke.c
toke.l

index a5695cd0eeb11bb58d6d401e84d0a8cc7090fcec..5a84a40f3d752d6c942e49995a283e4d8fc333e0 100644 (file)
@@ -555,7 +555,20 @@ F</etc/sudoers> will be processed.  Files that are included may
 themselves include other files.  A hard limit of 128 nested include
 files is enforced to prevent include file loops.
 
-The file name may include the C<%h> escape, signifying the short form
+If the path to the include file is not fully-qualified (does not
+begin with a F</>), it must be located in the same directory as the
+sudoers file it was included from.  For example, if F</etc/sudoers>
+contains the line:
+
+=over 4
+
+C<#include sudoers.local>
+
+=back
+
+the file that will be included is F</etc/sudoers.local>.
+
+The file name may also include the C<%h> escape, signifying the short form
 of the host name.  I.e., if the machine's host name is "xerxes", then
 
 C<#include /etc/sudoers.%h>
diff --git a/toke.c b/toke.c
index 63015a43ab50fb5367ab2a7311fc73815c5f9838..46623dbbfe985d398771cc1f70a4596ac900e70a 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -349,15 +349,15 @@ static yyconst short int yy_accept[607] =
        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
 
        37,   37,    0,   30,   42,   42,   42,    0,    0,    0,
-       21,   20,    0,    0,    0,    0,    0,   20,    0,   47,
-       47,   47,    0,    0,    0,   37,   37,   37,   37,   37,
+       18,    0,   21,   20,    0,    0,    0,    0,    0,   20,
+        0,   47,   47,   47,    0,    0,    0,   37,   37,   37,
        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-       37,   37,   37,    0,   28,   42,   42,   21,    0,   18,
+       37,   37,   37,   37,   37,    0,   28,   42,   42,   21,
         0,    0,   20,   47,   47,   47,   47,   47,    0,    0,
         0,    0,    0,   37,   37,   37,   37,   37,   37,   37,
        37,    0,   31,   42,    0,   47,   47,   47,   37,   37,
-       37,   37,   37,   37,    0,   29,    0,   47,   47,   47,
-       47,   47,   37,   37,   37,   37,   37,    0,   19,   35,
+       37,   37,   37,   37,    0,   29,    0,    0,   19,   47,
+       47,   47,   47,   47,   37,   37,   37,   37,   37,   35,
 
        35,   35,   35,   35,   35,    0
     } ;
@@ -435,51 +435,51 @@ static yyconst short int yy_base[671] =
       489, 2223, 2213, 2198, 2211, 2198,  420,  407,  529,  490,
       491, 1263, 1299, 1335, 2235, 2234,  839, 2234, 2232, 2228,
      2226,  528,  848,  657,  856,  665, 1371,    0,  877, 1382,
-      886,  894, 1424,  913,  570, 3665, 2208, 2197, 2198, 2177,
-     2184, 2193, 2190, 2169,  558, 2145, 2098, 2099,  648,  626,
-      530,  559,  923,  336, 1467, 1503,  964, 2138, 2137, 2108,
-     2086, 1537,  551, 1000, 1041, 1082,  653,  694,  797, 1049,
-
-      923, 1580,    0, 1116, 1591, 1090, 1008, 1633, 1125, 2069,
-     2065,  747,  686, 2046, 2005,  786,  926,  905, 2014, 1982,
-      679,  634,  544,  915, 1675, 1710, 1745, 2015, 1978, 1962,
-     1150, 1781, 1158, 1133, 1822, 1197, 1166, 1954, 1239, 1273,
+      886,  894, 1424,  913,  570, 3665, 2208, 2197, 2201, 2178,
+     2185, 2194, 2194, 2176,  558, 2169, 2152, 2150,  648,  626,
+      530,  559,  923,  336, 1467, 1503,  964, 2171, 2140, 2139,
+     2138, 1537,  551, 1000, 1041, 1082,  653,  694,  797, 1049,
+
+      923, 1580,    0, 1116, 1591, 1090, 1008, 1633, 1125, 2121,
+     2082,  747,  686, 2064, 2071,  786,  926,  905, 2080, 2033,
+      679,  634,  544,  915, 1675, 1710, 1745, 2052, 2043, 2033,
+     1150, 1781, 1158, 1133, 1822, 1197, 1166, 2028, 1239, 1273,
      1207,  950,  951,  962,  991, 1247, 1073, 1865,    0, 1283,
-     1876, 1307, 1315, 1918, 1323, 1923, 1923, 1188, 3665, 1924,
-     1898, 1893, 1873, 1286, 3665, 1336, 3665,  707, 1790, 1783,
-      786,  930,  764, 1298, 1358, 1041, 1960, 1995, 1400, 1823,
-     1799, 1348,  708, 1406, 1348, 2031,    0,  559, 2042, 1441,
+     1876, 1307, 1315, 1918, 1323, 1987, 1968, 1188, 3665, 1967,
+     1951, 1929, 1913, 1286, 3665, 1336, 3665,  707, 1897, 1889,
+      786,  930,  764, 1298, 1358, 1041, 1960, 1995, 1400, 1927,
+     1879, 1348,  708, 1406, 1348, 2031,    0,  559, 2042, 1441,
      1449, 2083, 1477, 1487, 1513, 1523, 1230, 1290, 1458, 1548,
 
-     1557, 1602, 2126,    0, 1613, 2137, 1650, 1565, 1660, 1765,
-     1763, 1680, 1675, 1359, 1406, 1626, 1601, 1577,  897,  938,
+     1557, 1602, 2126,    0, 1613, 2137, 1650, 1565, 1660, 1806,
+     1779, 1680, 1675, 1359, 1406, 1626, 1601, 1577,  897,  938,
      1695, 1589, 2180, 2216, 2252, 2288, 1611, 1686, 1720, 1731,
      1563, 1478, 1504, 1694, 1524, 2324,    0,  617, 2335, 1753,
      1761, 2376, 1769, 1798, 1550, 1808, 1841, 1851, 1335, 1358,
-     1887,  714,  825, 2419,    0,  926, 1407, 1508, 1506, 1471,
-     1547, 3665, 1616, 3665, 1423, 1731, 1907, 1512, 1575, 1910,
-     1915, 1935, 1498, 2429, 2465, 1971, 1611, 1977, 1457, 2005,
-     2015, 1987, 1408, 1254, 1732, 1782, 2059, 1842, 2501,    0,
-     1025, 2512, 2067, 2100, 2553, 2108, 2155, 2164, 2189, 1769,
-
-     1207, 1189, 1634, 3665, 1699, 1162, 1113, 1074, 1118,  384,
-     1040, 2211, 2218, 2238, 2243, 2263, 2288, 2249, 2307, 2596,
-     2632, 2668, 2304, 2354, 2395, 1025, 1006, 1889, 2016, 2362,
-     2043, 2704,    0, 1224, 2715, 2403, 2437, 2445,  992, 2454,
-     2474, 2483,  903, 1921, 3665, 1941,  839, 3665,  843, 3665,
-     1306, 2489, 2529, 2537, 1911, 2758, 2794, 2573, 2579,  811,
-     2607, 2617, 2642,  640,  629, 2109,  535,  447, 2650,    0,
-     1428, 1942, 3665, 2044, 2216, 2830, 2866, 2902, 2676, 2684,
-     2692,  337,    0,  333, 2067, 3665,  327, 2733, 1912, 2938,
-     2974, 2743, 3665, 2767, 2777, 2658, 3665,  166, 3665, 2805,
+     1887,  714,  825, 2419,    0,  926, 1407, 1468, 1430, 1431,
+     1547, 3665, 1616, 3665, 1381, 1731, 1045, 1512, 1575, 1908,
+     1913, 1970, 1498, 2429, 2465, 1947, 1611, 1981, 1264, 2006,
+     2016, 2061, 1198, 1181, 1732, 1782, 2067, 1842, 2501,    0,
+     1181, 2512, 2100, 1904, 2553, 2110, 2155, 2164, 2189, 1769,
+
+     1142, 1232, 1634, 3665, 1699, 1095, 1077, 1025, 1046, 1306,
+     3665,  384,  981, 2211, 2218, 2238, 2243, 2263, 2288, 2249,
+     2307, 2596, 2632, 2668, 2304, 2354, 2395,  983,  894, 1902,
+     1928, 2362, 1929, 2704,    0, 1428, 2715, 2403, 2437, 2445,
+      867, 2454, 2474, 2483,  831, 1982, 3665, 1983,  782, 3665,
+     1511, 2489, 2529, 2537, 1895, 2758, 2794, 2573, 2579,  650,
+     2607, 2617, 2642,  629,  525, 1931,  447,  347, 2650,    0,
+     1528, 2019, 3665, 2044, 1805, 2830, 2866, 2902, 2676, 2684,
+     2692,  323,    0,  316, 2067, 3665,  166, 1845, 3665, 2733,
+     1945, 2938, 2974, 2743, 3665, 2767, 2777, 2658, 3665, 2805,
 
      2813, 2847,   63, 2855, 2881, 3665, 3023, 3039, 3055, 3071,
-     3087, 3103, 3119, 3135, 3151, 3157, 3173, 3189, 1498, 3205,
+     3087, 3103, 3119, 3135, 3151, 3157, 3173, 3189, 2025, 3205,
      3221, 3237, 3253, 3269, 3285, 3301, 3307, 3314, 3330, 3346,
      3352, 3359, 3365, 3371, 3377, 3384, 3390, 3396, 3402, 3409,
      3417, 3423, 3429, 3435, 3442, 3450, 3456, 3462, 3469, 3477,
      3483, 3491, 3498, 3506, 3512, 3520, 3527, 3535, 3551, 3567,
-     3573, 3581, 3588, 3604, 3610, 3618, 3624, 3632, 1295, 3648
+     3583, 3589, 3597, 3604, 3610, 3618, 3624, 3632, 3648, 1295
     } ;
 
 static yyconst short int yy_def[671] =
@@ -534,21 +534,21 @@ static yyconst short int yy_def[671] =
       655,  655,  656,  392,  656,  656,  436,  436,  606,  439,
       439,  606,  439,  606,  606,  606,  606,  606,  606,  657,
       657,  658,  658,  658,  454,  454,   35,   35,   35,   35,
-      606,  606,  606,  606,  606,  606,  623,  623,  611,  659,
-      660,  611,  611,  611,  611,  611,  611,  606,  606,  606,
-      606,  606,  606,  661,  661,  662,  442,  662,  662,  489,
+      606,  606,  606,  606,  606,  606,  659,  623,  611,  660,
+      661,  611,  611,  611,  611,  611,  611,  606,  606,  606,
+      606,  606,  606,  662,  662,  663,  442,  663,  663,  489,
       489,  606,  492,  492,  606,  492,  606,  606,  606,  606,
 
-      663,  663,  606,  606,   35,   35,   35,  606,  664,  623,
-      611,  659,  659,  659,  659,  606,  659,  660,  660,  611,
-      611,  611,  606,  606,  606,  606,  665,  665,  666,  495,
-      666,  666,  532,  532,  606,  535,  535,  535,  606,  606,
-      606,  606,  606,  606,  606,   35,   35,  606,  664,  606,
+      664,  664,  606,  606,   35,   35,   35,  606,  659,  659,
+      606,  623,  611,  660,  660,  660,  660,  606,  660,  661,
+      661,  611,  611,  611,  606,  606,  606,  606,  665,  665,
+      666,  495,  666,  666,  534,  534,  606,  537,  537,  537,
+      606,  606,  606,  606,  606,  606,  606,   35,   35,  606,
       623,  606,  606,  611,  611,  611,  611,  611,  606,  606,
       606,  606,  606,  606,  667,  667,  668,  668,  668,  569,
-      569,  606,  606,   35,  623,  611,  611,  611,  606,  606,
-      606,  606,  669,  669,  606,  606,  670,  611,  611,  611,
-      611,  611,  606,  606,  606,  606,  606,  670,  606,  611,
+      569,  606,  606,   35,  669,  611,  611,  611,  606,  606,
+      606,  606,  670,  670,  606,  606,  669,  669,  606,  611,
+      611,  611,  611,  611,  606,  606,  606,  606,  606,  611,
 
       611,  611,  611,  611,  611,    0,  606,  606,  606,  606,
       606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
@@ -578,7 +578,7 @@ static yyconst short int yy_nxt[3732] =
        56,   79,  147,  127,   77,   56,  148,   60,   61,   93,
        93,  150,  115,   93,   93,  238,  152,   62,   99,   99,
        99,   99,   99,   99,   99,   99,  146,   87,   79,   79,
-      146,   93,   62,   15,   16,   17,  117,   63,  599,  152,
+      146,   93,   62,   15,   16,   17,  117,   63,  589,  152,
       192,  195,  129,   77,  100,  100,  100,  100,  100,  101,
       143,  115,  130,   78,   94,   98,   98,   98,   98,   98,
        98,   98,   98,   79,  118,  119,  155,  156,  120,  151,
@@ -596,11 +596,11 @@ static yyconst short int yy_nxt[3732] =
 
        79,  152,   68,   69,   70,  606,  196,   79,  134,  134,
        79,  606,  134,  134,   79,  198,   71,  168,  168,  168,
-      168,  168,  168,  606,  155,  156,   79,  231,  159,  599,
+      168,  168,  168,  606,  155,  156,   79,  231,  159,  382,
       134,  160,  160,  160,  160,  160,  160,  160,  160,  241,
-       72,   15,   16,   17,   67,   63,  382,  170,   89,  283,
+       72,   15,   16,   17,   67,   63,  532,  170,   89,  283,
        68,   69,   70,  135,  162,   86,  214,   86,   86,  267,
-      530,   86,   86,  268,   71,   86,  170,  164,  165,  166,
+      606,   86,   86,  268,   71,   86,  170,  164,  165,  166,
       164,  164,  164,  164,  164,  214,   93,   93,   86,   86,
        93,   93,   79,   79,   79,  240,   83,  238,   72,   83,
       168,  168,  168,  168,  168,  168,  168,  168,   93,   84,
@@ -611,7 +611,7 @@ static yyconst short int yy_nxt[3732] =
       168,  168,  168,  168,  168,  168,  168,   85,   85,   85,
        85,   85,   85,   85,   85,   79,  551,   98,   98,   98,
        98,   98,   98,   78,  145,   79,  280,  145,  145,   78,
-      606,  237,   78,   78,  145,   78,   78,   78,  104,  104,
+      382,  237,   78,   78,  145,   78,   78,   78,  104,  104,
       104,  104,  104,  104,  104,  104,   97,  145,  279,   78,
       104,  104,  104,  104,  104,  105,  105,  105,  105,  106,
       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
@@ -620,7 +620,7 @@ static yyconst short int yy_nxt[3732] =
        78,   78,   78,   78,   78,   78,   78,   78,   78,  105,
       105,  105,  105,  105,  105,  105,  105,  606,  249,  249,
       249,  105,  105,  105,  105,  105,  177,   79,   79,   79,
-      105,  178,  170,  275,  179,  282,  180,  117,  382,  143,
+      105,  178,  170,  275,  179,  282,  180,  117,  532,  143,
       115,  214,   97,  238,   78,   78,   78,   78,   78,   78,
       114,  115,   78,   78,   78,  170,   78,   78,  134,  134,
        78,  265,  134,  134,  214,  118,  119,   79,   79,  120,
@@ -632,8 +632,8 @@ static yyconst short int yy_nxt[3732] =
       606,  606,  160,  160,  160,  160,  160,  160,  160,  160,
       160,  160,  160,  160,  160,  160,  160,  160,  484,  484,
       123,   83,  242,  243,  244,  242,  242,  242,  242,  242,
-       83,  142,  530,  322,  606,  606,  606,  606,  606,  606,
-      606,  606,   78,  487,   78,   78,   78,  170,   78,   78,
+       83,  142,  487,  322,  606,  606,  606,  606,  606,  606,
+      606,  606,   78,  559,   78,   78,   78,  170,   78,   78,
       253,  170,   78,  134,   79,   79,  255,  134,  606,  170,
       255,   83,   79,  134,   78,   78,   78,   90,  255,   90,
        90,   90,  372,   90,   90,  134,  134,   90,  247,  247,
@@ -651,17 +651,17 @@ static yyconst short int yy_nxt[3732] =
 
       257,  257,  257,  258,  258,  258,  258,  258,  259,  365,
       253,  170,   79,  167,  167,  167,  167,  167,  167,  133,
-      300,   78,   78,  133,  559,   78,   78,  421,  606,  133,
+      300,   78,   78,  133,  574,   78,   78,  421,  606,  133,
       256,  256,  256,  256,  256,  256,  256,  256,  606,  170,
-      419,  133,  133,   78,  201,  550,  202,  202,  202,  202,
+      419,  133,  133,   78,  201,  170,  202,  202,  202,  202,
       202,  202,  202,  202,  289,  289,  289,  289,  289,  289,
       289,  289,  211,  294,  295,  296,  294,  294,  294,  294,
       294,  264,  264,  264,  264,  264,  264,  264,  264,   79,
-      201,  574,  203,  203,  203,  203,  203,  203,  203,  203,
+      201,  170,  203,  203,  203,  203,  203,  203,  203,  203,
       253,  170,  298,  298,  298,  298,  298,  298,  467,   83,
 
       255,  302,  302,  302,  302,  302,  302,  302,  302,  303,
-      303,  303,  303,  303,  304,   79,  201,  170,  204,  204,
+      303,  303,  303,  303,  304,   79,  201,  487,  204,  204,
       204,  204,  204,  205,  202,  202,  606,  366,  301,  301,
       301,  301,  301,  301,  301,  301,  606,  170,  325,  326,
       327,  325,  325,  325,  325,  325,  300,  501,  501,  367,
@@ -671,41 +671,41 @@ static yyconst short int yy_nxt[3732] =
       284,  284,  284,  284,  284,  300,   79,  420,  469,  206,
       206,  206,  206,  206,  206,  208,  209,  210,  210,  210,
 
-      210,  210,  210,  211,  253,  170,  170,  212,  212,  212,
+      210,  210,  210,  211,  253,  170,  434,  212,  212,  212,
       212,  212,   79,  337,  346,  338,  338,  338,  338,  338,
-      338,  338,  338,  349,  349,  349,  349,  349,  350,  487,
+      338,  338,  338,  349,  349,  349,  349,  349,  350,   79,
       212,  212,  212,  212,  212,  212,  170,  215,  216,  217,
-      215,  215,  215,  215,  215,  218,  527,  527,  434,  219,
+      215,  215,  215,  215,  215,  218,  510,  511,  511,  219,
       219,  219,  219,  219,  337,  375,  339,  339,  339,  339,
       339,  339,  339,  339,  309,  309,  309,  309,  309,  309,
       309,  309,  219,  219,  219,  219,  219,  219,  220,  220,
-      220,  220,  220,  220,  220,  220,  606,  170,   79,   79,
+      220,  220,  220,  220,  220,  220,  606,  170,  550,   79,
       220,  220,  220,  220,  220,  337,  346,  340,  340,  340,
 
       340,  340,  341,  338,  338,  348,  348,  348,  348,  348,
       348,  348,  348,  206,  206,  206,  206,  206,  206,  201,
-      550,  202,  202,  202,  202,  202,  202,  202,  202,  253,
+      549,  202,  202,  202,  202,  202,  202,  202,  202,  253,
       170,  344,  344,  344,  344,  344,  344,  548,  606,  300,
       347,  347,  347,  347,  347,  347,  347,  347,  387,  387,
-      387,  387,  387,  388,   79,  201,  547,  202,  202,  202,
+      387,  387,  387,  388,   79,  201,  170,  202,  202,  202,
       202,  202,  202,  202,  202,  336,  336,  336,  336,  336,
       336,  336,  336,  386,  386,  386,  386,  386,  386,  386,
       386,  394,  395,  396,  394,  394,  394,  394,  394,  358,
        79,  253,  170,  254,  254,  254,  254,  254,  254,  254,
 
-      254,  255,  253,  170,  546,  256,  256,  256,  256,  256,
+      254,  255,  529,  529,  434,  256,  256,  256,  256,  256,
       606,  359,  385,  385,  385,  385,  385,  385,  385,  385,
-      337,  170,  338,  338,  338,  338,  338,  338,  256,  256,
+      337,  384,  338,  338,  338,  338,  338,  338,  256,  256,
       256,  256,  256,  256,  170,  260,  261,  262,  260,  260,
-      260,  260,  260,  263,  170,  565,  565,  264,  264,  264,
+      260,  260,  260,  263,  170,  253,  170,  264,  264,  264,
       264,  264,  337,  300,  338,  338,  338,  338,  338,  338,
       338,  338,  355,  355,  355,  355,  355,  355,  355,  355,
-      264,  264,  264,  264,  264,  264,  283,  434,  284,  284,
+      264,  264,  264,  264,  264,  264,  283,  478,  284,  284,
       284,  284,  284,  284,  284,  284,  337,  364,  338,  338,
       338,  338,  338,  338,  338,  338,  253,  170,  399,  399,
 
-      399,  399,  399,  399,  170,  597,  346,  575,   83,  365,
-      597,   79,  283,  346,  285,  285,  285,  285,  285,  285,
+      399,  399,  399,  399,  170,  599,  346,  510,  511,  365,
+      599,   79,  283,  346,  285,  285,  285,  285,  285,  285,
       285,  285,  403,  403,  403,  403,  403,  403,  403,  403,
       404,  404,  404,  404,  404,  405,  606,  366,  402,  402,
       402,  402,  402,  402,  402,  402,   79,   79,  283,  170,
@@ -718,21 +718,21 @@ static yyconst short int yy_nxt[3732] =
       299,  299,  299,  299,  299,  300,   79,  463,  503,  301,
       301,  301,  301,  301,  375,  376,  376,  376,  376,  376,
       376,  393,  393,  393,  393,  393,  393,  393,  393,  464,
-      504,  384,  301,  301,  301,  301,  301,  301,  170,  305,
-      306,  307,  305,  305,  305,  305,  305,  308,   79,  583,
-      583,  309,  309,  309,  309,  309,  436,  436,  436,  436,
+      504,  508,  301,  301,  301,  301,  301,  301,  170,  305,
+      306,  307,  305,  305,  305,  305,  305,  308,   79,  565,
+      565,  309,  309,  309,  309,  309,  436,  436,  436,  436,
       436,  436,  436,  436,  437,  437,  437,  437,  437,  438,
-      478,  253,  170,  508,  309,  309,  309,  309,  309,  309,
+      507,  253,  170,  506,  309,  309,  309,  309,  309,  309,
       283,  346,  284,  284,  284,  284,  284,  284,  284,  284,
       606,  382,  435,  435,  435,  435,  435,  435,  435,  435,
 
       444,  384,  445,  445,  445,  445,  445,  445,  445,  445,
-      507,  472,  144,  144,   83,   79,  283,  382,  284,  284,
+      505,  472,  575,   83,   83,   79,  283,  382,  284,  284,
       284,  284,  284,  284,  284,  284,  444,  434,  446,  446,
       446,  446,  446,  446,  446,  446,  444,  606,  447,  447,
-      447,  447,  447,  448,  445,  445,   79,  434,  461,  506,
-      505,   79,  332,  333,  334,  332,  332,  332,  332,  332,
-      335,  253,  170,  444,  336,  336,  336,  336,  336,  510,
+      447,  447,  447,  448,  445,  445,   79,  434,  461,  583,
+      583,   79,  332,  333,  334,  332,  332,  332,  332,  332,
+      335,  253,  170,  444,  336,  336,  336,  336,  336,  512,
       462,  401,  409,  409,  409,  409,  409,  409,  409,  409,
       455,  455,  455,  455,  455,  456,  384,  336,  336,  336,
       336,  336,  336,  253,  170,  344,  344,  344,  344,  344,
@@ -740,7 +740,7 @@ static yyconst short int yy_nxt[3732] =
       344,  344,  344,  300,  253,  170,  345,  345,  345,  345,
       345,  345,  345,  345,  346,  606,  170,  463,  347,  347,
       347,  347,  347,   79,  472,  401,  253,  170,  451,  451,
-      451,  451,  451,  451,  331,  503,  401,   79,  511,  464,
+      451,  451,  451,  451,  331,  503,  401,   79,  513,  464,
       466,  347,  347,  347,  347,  347,  347,  170,  351,  352,
       353,  351,  351,  351,  351,  351,  354,  504,  465,   79,
       355,  355,  355,  355,  355,  454,  454,  454,  454,  454,
@@ -748,9 +748,9 @@ static yyconst short int yy_nxt[3732] =
       453,  453,  453,  355,  355,  355,  355,  355,  355,  375,
       376,  376,  376,  376,  376,  376,  376,  376,  470,  478,
 
-      544,  479,  479,  479,  479,  479,  479,  479,  479,  443,
+      546,  479,  479,  479,  479,  479,  479,  479,  479,  443,
       443,  443,  443,  443,  443,  443,  443,  460,  470,  459,
-      470,  471,  545,   79,  375,  377,  377,  377,  377,  377,
+      470,  471,  547,   79,  375,  377,  377,  377,  377,  377,
       377,  377,  377,  478,  470,  480,  480,  480,  480,  480,
       480,  480,  480,   79,  478,  382,  481,  481,  481,  481,
       481,  482,  479,  479,  470,  434,  470,  470,   79,  375,
@@ -759,70 +759,70 @@ static yyconst short int yy_nxt[3732] =
       490,  491,  606,  170,  488,  488,  488,  488,  488,  488,
       488,  488,  401,   79,  382,  382,  383,  383,  383,  383,
 
-      383,  383,  383,  383,  384,  487,  458,  457,  385,  385,
+      383,  383,  383,  383,  384,  487,  588,  589,  385,  385,
       385,  385,  385,  497,  498,  499,  497,  497,  497,  497,
-      497,  444,  331,  445,  445,  445,  445,  445,  445,  445,
+      497,  444,  458,  445,  445,  445,  445,  445,  445,  445,
       445,  385,  385,  385,  385,  385,  385,  389,  390,  391,
-      389,  389,  389,  389,  389,  392,  251,  418,  417,  393,
+      389,  389,  389,  389,  389,  392,  588,  589,  457,  393,
       393,  393,  393,  393,  444,  606,  445,  445,  445,  445,
       445,  445,  445,  445,  444,  487,  445,  445,  445,  445,
       445,  445,  393,  393,  393,  393,  393,  393,  253,  170,
       399,  399,  399,  399,  399,  399,  399,  399,  346,  253,
       170,  400,  400,  400,  400,  400,  400,  400,  400,  401,
 
-      253,  170,  382,  402,  402,  402,  402,  402,  467,   83,
-      401,  513,  487,  514,  515,  516,  513,  415,  514,  515,
-      516,  509,  544,  414,  554,  588,  402,  402,  402,  402,
+      253,  170,  331,  402,  402,  402,  402,  402,  554,  515,
+      401,  516,  517,  518,  515,  382,  516,  517,  518,  535,
+      535,  535,  535,  535,  536,  487,  402,  402,  402,  402,
       402,  402,  170,  406,  407,  408,  406,  406,  406,  406,
-      406,  413,  572,  572,  545,  409,  409,  409,  409,  409,
-      520,  521,  522,  520,  520,  520,  520,  520,  517,   79,
-       79,  412,  411,  519,  573,  573,  410,  337,  409,  409,
+      406,  382,  606,   79,  382,  409,  409,  409,  409,  409,
+      251,  532,  532,  418,  532,  417,  519,  415,  590,  414,
+      472,  521,  473,  473,  473,  473,  473,  473,  409,  409,
       409,  409,  409,  409,  375,  376,  376,  376,  376,  376,
-      376,  376,  376,   79,  472,  331,  473,  473,  473,  473,
-      473,  473,  523,  524,  525,  523,  523,  523,  523,  523,
-
-      478,  251,  479,  479,  479,  479,  479,  479,   79,  375,
-      376,  376,  376,  376,  376,  376,  376,  376,  478,   79,
-      479,  479,  479,  479,  479,  479,  479,  479,  478,  382,
-      479,  479,  479,  479,  479,  479,  479,  479,  211,  530,
-      370,  369,  363,   79,  382,  585,  432,  432,  432,  432,
-      432,  432,  432,  432,  384,  382,  606,  433,  433,  433,
-      433,  433,  433,  433,  433,  434,  530,  586,  585,  435,
-      435,  435,  435,  435,  496,  496,  496,  496,  496,  496,
-      496,  496,  532,  532,  532,  532,  532,  532,  532,  532,
-      586,  362,  435,  435,  435,  435,  435,  435,  439,  440,
-
-      441,  439,  439,  439,  439,  439,  442,  357,  356,  331,
-      443,  443,  443,  443,  443,  533,  533,  533,  533,  533,
-      534,  606,  382,  531,  531,  531,  531,  531,  531,  531,
-      531,  251,  530,  443,  443,  443,  443,  443,  443,  253,
+      376,  376,  376,  546,  572,  522,  523,  524,  522,  522,
+      522,  522,  522,   79,  413,   79,  525,  526,  527,  525,
+
+      525,  525,  525,  525,  412,  547,  573,  411,   79,  375,
+      376,  376,  376,  376,  376,  376,  376,  376,   79,  478,
+      572,  479,  479,  479,  479,  479,  479,  479,  479,  478,
+      410,  479,  479,  479,  479,  479,  479,  479,  479,  144,
+      144,  337,  573,   79,  382,  585,  432,  432,  432,  432,
+      432,  432,  432,  432,  384,  382,  331,  433,  433,  433,
+      433,  433,  433,  433,  433,  434,  251,  586,  585,  435,
+      435,  435,  435,  435,  478,  211,  479,  479,  479,  479,
+      479,  479,  496,  496,  496,  496,  496,  496,  496,  496,
+      586,  370,  435,  435,  435,  435,  435,  435,  439,  440,
+
+      441,  439,  439,  439,  439,  439,  442,  369,  363,  362,
+      443,  443,  443,  443,  443,  534,  534,  534,  534,  534,
+      534,  534,  534,  606,  357,  533,  533,  533,  533,  533,
+      533,  533,  533,  443,  443,  443,  443,  443,  443,  253,
       170,  451,  451,  451,  451,  451,  451,  451,  451,  401,
       253,  170,  452,  452,  452,  452,  452,  452,  452,  452,
-      211,  211,  276,  320,  453,  453,  453,  453,  453,  170,
-      539,  539,  539,  539,  539,  539,  539,  539,  170,  540,
-      540,  540,  540,  540,  540,  540,  540,  453,  453,  453,
-      453,  453,  453,  472,  319,  473,  473,  473,  473,  473,
-
-      473,  473,  473,  170,  541,  541,  541,  541,  541,  542,
-      539,  539,  606,  317,  606,  606,  606,  575,   83,  513,
-      316,  514,  515,  516,  315,  314,  313,  312,   79,  472,
-      587,  474,  474,  474,  474,  474,  474,  474,  474,  606,
-      311,  514,  515,  516,  606,  310,  606,  606,  516,  292,
-      606,  251,  606,  606,  606,  211,  288,  211,  103,  517,
-      276,  278,  276,  277,   79,  472,  517,  475,  475,  475,
+      356,  331,  251,  211,  453,  453,  453,  453,  453,  170,
+      541,  541,  541,  541,  541,  541,  541,  541,  170,  542,
+      542,  542,  542,  542,  542,  542,  542,  453,  453,  453,
+      453,  453,  453,  472,  211,  473,  473,  473,  473,  473,
+
+      473,  473,  473,  170,  543,  543,  543,  543,  543,  544,
+      541,  541,  606,  276,  606,  606,  606,  320,  319,  515,
+      317,  516,  517,  518,  316,  315,  314,  313,   79,  472,
+      312,  474,  474,  474,  474,  474,  474,  474,  474,  606,
+      311,  516,  517,  518,  606,  310,  606,  606,  518,  292,
+      606,  251,  606,  606,  606,  211,  288,  211,  103,  519,
+      276,  278,  276,  277,   79,  472,  519,  475,  475,  475,
       475,  475,  476,  477,  477,  552,  276,  274,  553,  553,
-      553,  553,  553,  553,  553,  553,  517,  273,  272,  271,
-      270,  517,  269,   97,  211,  512,  512,  519,  251,  512,
+      553,  553,  553,  553,  553,  553,  519,  273,  272,  271,
+      270,  519,  269,   97,  211,  514,  514,  521,  251,  514,
 
        79,  472,  211,  477,  477,  477,  473,  473,  473,  473,
-      473,  512,  512,  512,  518,  518,  103,  559,  518,  560,
+      473,  514,  514,  514,  520,  520,  103,  559,  520,  560,
       560,  560,  560,  560,  560,  560,  560,   83,  199,  239,
-      518,  518,  518,  236,  235,  234,   79,  382,  233,  485,
+      520,  520,  520,  236,  235,  234,   79,  382,  233,  485,
       485,  485,  485,  485,  485,  485,  485,  434,  382,  232,
       486,  486,  486,  486,  486,  486,  486,  486,  487,  230,
       229,  228,  488,  488,  488,  488,  488,  559,  227,  561,
-      561,  561,  561,  561,  561,  561,  561,  538,  538,  538,
-      538,  538,  538,  538,  538,  488,  488,  488,  488,  488,
+      561,  561,  561,  561,  561,  561,  561,  540,  540,  540,
+      540,  540,  540,  540,  540,  488,  488,  488,  488,  488,
       488,  492,  493,  494,  492,  492,  492,  492,  492,  495,
 
       226,  225,  224,  496,  496,  496,  496,  496,  559,  223,
@@ -831,65 +831,65 @@ static yyconst short int yy_nxt[3732] =
       496,  496,  253,  170,  502,  502,  502,  502,  502,  502,
       502,  502,  472,  222,  473,  473,  473,  473,  473,  473,
       473,  473,  570,  570,  570,  570,  570,  571,  606,  221,
-      568,  568,  568,  568,  568,  568,  568,  568,  170,  539,
-      539,  539,  539,  539,  539,  539,  539,   79,  472,  103,
-      473,  473,  473,  473,  473,  473,  473,  473,  170,  539,
-      539,  539,  539,  539,  539,  539,  539,  170,  539,  539,
-
-      539,  539,  539,  539,  553,  553,  553,  553,  553,  553,
-      553,  553,   95,   79,  382,   83,  528,  528,  528,  528,
-      528,  528,  528,  528,  487,  382,   83,  529,  529,  529,
-      529,  529,  529,  529,  529,  530,  199,  151,  152,  531,
-      531,  531,  531,  531,  553,  553,  553,  553,  553,  553,
+      568,  568,  568,  568,  568,  568,  568,  568,  170,  541,
+      541,  541,  541,  541,  541,  541,  541,   79,  472,  103,
+      473,  473,  473,  473,  473,  473,  473,  473,  170,  541,
+      541,  541,  541,  541,  541,  541,  541,  170,  541,  541,
+
+      541,  541,  541,  541,  553,  553,  553,  553,  553,  553,
+      553,  553,   95,   79,  382,   83,  530,  530,  530,  530,
+      530,  530,  530,  530,  487,  382,   83,  531,  531,  531,
+      531,  531,  531,  531,  531,  532,  199,  151,  152,  533,
+      533,  533,  533,  533,  553,  553,  553,  553,  553,  553,
       553,  553,  576,  577,  578,  576,  576,  576,  576,  576,
-      146,  146,  531,  531,  531,  531,  531,  531,  535,  536,
-      537,  535,  535,  535,  535,  535,  138,  197,  132,  132,
-      538,  538,  538,  538,  538,   79,  554,  190,  555,  555,
+      146,  146,  533,  533,  533,  533,  533,  533,  537,  538,
+      539,  537,  537,  537,  537,  537,  138,  197,  132,  132,
+      540,  540,  540,  540,  540,   79,  554,  190,  555,  555,
       555,  555,  555,  555,  579,  580,  581,  579,  579,  579,
 
-      579,  579,  189,  538,  538,  538,  538,  538,  538,  554,
+      579,  579,  189,  540,  540,  540,  540,  540,  540,  554,
       188,  555,  555,  555,  555,  555,  555,  555,  555,  187,
       559,   79,  560,  560,  560,  560,  560,  560,  560,  560,
       559,  186,  560,  560,  560,  560,  560,  560,  560,  560,
       184,  183,  182,  181,   79,  554,  176,  556,  556,  556,
       556,  556,  556,  556,  556,  559,  175,  560,  560,  560,
       560,  560,  560,  382,  174,  584,  584,  584,  584,  584,
-      584,  584,  584,  593,  593,  593,  593,  593,  593,  103,
+      584,  584,  584,  595,  595,  595,  595,  595,  595,  103,
        79,  554,   78,  557,  557,  557,  557,  557,  558,  555,
-      555,  593,  593,  593,  593,  593,  593,  593,  593,  594,
+      555,  595,  595,  595,  595,  595,  595,  595,  595,  596,
 
-      594,  594,  594,  594,  594,  594,  594,  595,  595,  595,
-      595,  595,  596,  593,  593,  103,   79,  382,  163,  566,
-      566,  566,  566,  566,  566,  566,  566,  530,  382,   91,
+      596,  596,  596,  596,  596,  596,  596,  597,  597,  597,
+      597,  597,  598,  595,  595,  103,   79,  382,  163,  566,
+      566,  566,  566,  566,  566,  566,  566,  532,  382,   91,
       567,  567,  567,  567,  567,  567,  567,  567,   83,   81,
        80,   79,  568,  568,  568,  568,  568,  152,  600,  601,
-      602,  600,  600,  600,  600,  600,  588,  146,  589,  589,
-      589,  589,  589,  589,  138,  568,  568,  568,  568,  568,
+      602,  600,  600,  600,  600,  600,  590,  146,  591,  591,
+      591,  591,  591,  591,  138,  568,  568,  568,  568,  568,
       568,  554,  132,  555,  555,  555,  555,  555,  555,  555,
-      555,   79,  593,  593,  593,  593,  593,  593,  593,  593,
-      128,   79,  593,  593,  593,  593,  593,  593,  593,  593,
+      555,   79,  595,  595,  595,  595,  595,  595,  595,  595,
+      128,   79,  595,  595,  595,  595,  595,  595,  595,  595,
 
       126,  113,  112,  111,  110,  109,   79,  554,  108,  555,
       555,  555,  555,  555,  555,  555,  555,  105,  103,   91,
       603,  603,  603,  603,  603,  603,  603,  603,  600,  600,
       600,  600,  600,  600,  600,  600,   81,   80,   79,  606,
-      606,  606,   79,  588,  606,  589,  589,  589,  589,  589,
-      589,  589,  589,   79,  606,  606,  606,  606,  606,  606,
+      606,  606,   79,  590,  606,  591,  591,  591,  591,  591,
+      591,  591,  591,   79,  606,  606,  606,  606,  606,  606,
       606,   79,  604,  604,  604,  604,  604,  605,  603,  603,
-      603,  603,  603,  603,  603,  603,  603,  603,   79,  588,
-      606,  590,  590,  590,  590,  590,  590,  590,  590,  606,
+      603,  603,  603,  603,  603,  603,  603,  603,   79,  590,
+      606,  592,  592,  592,  592,  592,  592,  592,  592,  606,
       606,  606,  606,  606,  606,   79,  603,  603,  603,  603,
 
       603,  603,  606,   79,  606,  606,  606,  606,  606,  606,
-      606,  606,  606,  606,   79,  588,  606,  591,  591,  591,
-      591,  591,  592,  589,  589,  606,  606,  606,  606,   79,
+      606,  606,  606,  606,   79,  590,  606,  593,  593,  593,
+      593,  593,  594,  591,  591,  606,  606,  606,  606,   79,
       606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
       606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
-       79,  588,  606,  589,  589,  589,  589,  589,  589,  589,
-      589,  606,  606,  606,  606,  606,  606,  606,  606,  606,
+       79,  590,  606,  591,  591,  591,  591,  591,  591,  591,
+      591,  606,  606,  606,  606,  606,  606,  606,  606,  606,
       606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
-      606,  606,  606,  606,  606,  606,   79,  588,  606,  589,
-      589,  589,  589,  589,  589,  589,  589,  606,  606,  606,
+      606,  606,  606,  606,  606,  606,   79,  590,  606,  591,
+      591,  591,  591,  591,  591,  591,  591,  606,  606,  606,
 
       606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
       606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
@@ -951,19 +951,19 @@ static yyconst short int yy_nxt[3732] =
       606,  450,  483,  483,  606,  606,  606,  483,  484,  606,
       484,  484,  606,  606,  606,  484,  500,  500,  500,  606,
       606,  606,  500,  501,  501,  501,  606,  606,  606,  606,
-      501,  512,  512,  606,  512,  512,  512,  606,  606,  512,
-      512,  512,  606,  606,  512,  512,  512,  518,  518,  606,
-      518,  518,  518,  606,  606,  518,  518,  518,  606,  606,
-      518,  518,  518,  526,  526,  606,  606,  606,  526,  527,
-      606,  527,  527,  606,  606,  606,  527,  543,  543,  606,
-
-      606,  606,  606,  543,  549,  549,  549,  549,  549,  549,
-      549,  549,  549,  549,  549,  549,  549,  549,  549,  549,
+      501,  509,  509,  509,  509,  509,  509,  509,  509,  509,
+      509,  509,  509,  509,  509,  509,  509,  514,  514,  606,
+      514,  514,  514,  606,  606,  514,  514,  514,  606,  606,
+      514,  514,  514,  520,  520,  606,  520,  520,  520,  606,
+      606,  520,  520,  520,  606,  606,  520,  520,  520,  528,
+
+      528,  606,  606,  606,  528,  529,  606,  529,  529,  606,
+      606,  606,  529,  545,  545,  606,  606,  606,  606,  545,
       564,  564,  606,  606,  606,  564,  565,  606,  565,  565,
       606,  606,  606,  565,  582,  582,  606,  606,  606,  582,
-      583,  606,  583,  606,  606,  606,  606,  583,  598,  598,
-      598,  598,  598,  598,  598,  598,  598,  598,  598,  598,
-      598,  598,  598,  598,   13,  606,  606,  606,  606,  606,
+      583,  606,  583,  606,  606,  606,  606,  583,  587,  587,
+      587,  587,  587,  587,  587,  587,  587,  587,  587,  587,
+      587,  587,  587,  587,   13,  606,  606,  606,  606,  606,
       606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
       606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
       606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
@@ -993,7 +993,7 @@ static yyconst short int yy_chk[3732] =
         3,  196,   68,   50,   11,    4,   70,    6,    6,   25,
        25,   72,   72,   25,   25,  196,   74,    5,   27,   27,
        27,   27,   27,   27,   27,   27,   68,   88,  124,  127,
-       70,   25,    6,    7,    7,    7,   45,    7,  598,   75,
+       70,   25,    6,    7,    7,    7,   45,    7,  587,   75,
       124,  127,  129,   12,   28,   28,   28,   28,   28,   28,
       139,  139,  129,   43,   25,   43,   43,   43,   43,   43,
        43,   43,   43,  194,   45,   45,   77,   77,   45,   77,
@@ -1011,22 +1011,22 @@ static yyconst short int yy_chk[3732] =
 
       128,  154,    9,    9,    9,   86,  128,  202,   55,   55,
       136,  161,   55,   55,  185,  136,    9,  101,  101,  101,
-      101,  101,  101,   86,  155,  155,  198,  185,   87,  587,
+      101,  101,  101,   86,  155,  155,  198,  185,   87,  584,
        55,   87,   87,   87,   87,   87,   87,   87,   87,  198,
-        9,   10,   10,   10,   10,   10,  584,  171,   86,  284,
+        9,   10,   10,   10,   10,   10,  582,  171,   86,  284,
        10,   10,   10,   55,  161,   89,  171,   89,   89,  222,
-      582,   89,   89,  222,   10,   89,  213,   95,   95,   95,
+      568,   89,   89,  222,   10,   89,  213,   95,   95,   95,
        95,   95,   95,   95,   95,  213,   92,   92,   89,   89,
-       92,   92,  192,  195,  284,  195,  510,  192,   10,   19,
+       92,   92,  192,  195,  284,  195,  512,  192,   10,   19,
        99,   99,   99,   99,   99,   99,   99,   99,   92,   19,
 
        95,  221,   19,   19,   19,   19,   19,   19,   19,   19,
        26,  191,   26,   26,   26,   26,   26,   26,   26,   26,
        26,   92,  237,  221,   26,   26,   26,   26,   26,  100,
       100,  100,  100,  100,  100,  100,  100,  131,  131,  131,
-      131,  131,  131,  131,  131,   26,  510,   26,   26,   26,
+      131,  131,  131,  131,  131,   26,  512,   26,   26,   26,
        26,   26,   26,   32,  146,  238,  238,  146,  146,   32,
-      568,  191,   32,   32,  146,   32,   32,   32,   32,   32,
+      567,  191,   32,   32,  146,   32,   32,   32,   32,   32,
        32,   32,   32,   32,   32,   32,   32,  146,  237,   32,
        32,   32,   32,   32,   32,   32,   32,   32,   32,   32,
        32,   32,   32,   32,   32,   32,   32,   32,   32,   32,
@@ -1035,7 +1035,7 @@ static yyconst short int yy_chk[3732] =
        32,   32,   32,   32,   32,   32,   32,   32,   32,   35,
        35,   35,   35,   35,   35,   35,   35,   35,  210,  210,
       210,   35,   35,   35,   35,   35,  109,  231,  240,  241,
-       35,  109,  252,  231,  109,  241,  109,  117,  567,  150,
+       35,  109,  252,  231,  109,  241,  109,  117,  565,  150,
       150,  252,  239,  240,   35,   35,   35,   35,   35,   35,
        42,   42,   42,   42,   42,  293,   42,   42,  133,  133,
        42,  265,  133,  133,  293,  117,  117,  239,  281,  117,
@@ -1047,8 +1047,8 @@ static yyconst short int yy_chk[3732] =
       142,  142,  159,  159,  159,  159,  159,  159,  159,  159,
       160,  160,  160,  160,  160,  160,  160,  160,  438,  438,
        46,   63,  201,  201,  201,  201,  201,  201,  201,  201,
-      279,   63,  565,  280,   63,   63,   63,   63,   63,   63,
-       63,   63,   79,  564,   79,   79,   79,  297,   79,   79,
+      279,   63,  564,  280,   63,   63,   63,   63,   63,   63,
+       63,   63,   79,  560,   79,   79,   79,  297,   79,   79,
       254,  254,   79,  197,  280,  201,  297,  197,  256,  256,
       254,  321,  322,  197,   79,   79,   79,   91,  256,   91,
        91,   91,  322,   91,   91,  197,  197,   91,  209,  209,
@@ -1066,17 +1066,17 @@ static yyconst short int yy_chk[3732] =
 
       216,  216,  216,  217,  217,  217,  217,  217,  217,  316,
       299,  299,  373,  104,  104,  104,  104,  104,  104,  135,
-      299,  135,  135,  135,  560,  135,  135,  373,  219,  135,
+      299,  135,  135,  135,  549,  135,  135,  373,  219,  135,
       219,  219,  219,  219,  219,  219,  219,  219,  453,  453,
-      371,  135,  135,  135,  164,  549,  164,  164,  164,  164,
+      371,  135,  135,  135,  164,  545,  164,  164,  164,  164,
       164,  164,  164,  164,  247,  247,  247,  247,  247,  247,
       247,  247,  247,  253,  253,  253,  253,  253,  253,  253,
       253,  255,  255,  255,  255,  255,  255,  255,  255,  164,
-      165,  547,  165,  165,  165,  165,  165,  165,  165,  165,
+      165,  541,  165,  165,  165,  165,  165,  165,  165,  165,
       259,  259,  259,  259,  259,  259,  259,  259,  419,  419,
 
       259,  261,  261,  261,  261,  261,  261,  261,  261,  262,
-      262,  262,  262,  262,  262,  165,  166,  543,  166,  166,
+      262,  262,  262,  262,  262,  165,  166,  529,  166,  166,
       166,  166,  166,  166,  166,  166,  264,  317,  264,  264,
       264,  264,  264,  264,  264,  264,  301,  301,  283,  283,
       283,  283,  283,  283,  283,  283,  301,  456,  456,  317,
@@ -1086,41 +1086,41 @@ static yyconst short int yy_chk[3732] =
       287,  287,  287,  287,  287,  344,  420,  372,  420,  167,
       167,  167,  167,  167,  167,  170,  170,  170,  170,  170,
 
-      170,  170,  170,  170,  345,  345,  539,  170,  170,  170,
+      170,  170,  170,  170,  345,  345,  528,  170,  170,  170,
       170,  170,  287,  294,  345,  294,  294,  294,  294,  294,
-      294,  294,  294,  307,  307,  307,  307,  307,  307,  527,
+      294,  294,  294,  307,  307,  307,  307,  307,  307,  513,
       170,  170,  170,  170,  170,  170,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,  491,  491,  526,  172,
+      172,  172,  172,  172,  172,  172,  467,  467,  509,  172,
       172,  172,  172,  172,  295,  376,  295,  295,  295,  295,
       295,  295,  295,  295,  300,  300,  300,  300,  300,  300,
       300,  300,  172,  172,  172,  172,  172,  172,  173,  173,
-      173,  173,  173,  173,  173,  173,  347,  347,  511,  376,
+      173,  173,  173,  173,  173,  173,  347,  347,  508,  376,
       173,  173,  173,  173,  173,  296,  347,  296,  296,  296,
 
       296,  296,  296,  296,  296,  306,  306,  306,  306,  306,
       306,  306,  306,  173,  173,  173,  173,  173,  173,  203,
-      509,  203,  203,  203,  203,  203,  203,  203,  203,  304,
-      304,  304,  304,  304,  304,  304,  304,  508,  309,  304,
+      507,  203,  203,  203,  203,  203,  203,  203,  203,  304,
+      304,  304,  304,  304,  304,  304,  304,  506,  309,  304,
       309,  309,  309,  309,  309,  309,  309,  309,  334,  334,
-      334,  334,  334,  334,  203,  204,  507,  204,  204,  204,
+      334,  334,  334,  334,  203,  204,  501,  204,  204,  204,
       204,  204,  204,  204,  204,  331,  331,  331,  331,  331,
       331,  331,  331,  333,  333,  333,  333,  333,  333,  333,
       333,  337,  337,  337,  337,  337,  337,  337,  337,  358,
       204,  215,  215,  215,  215,  215,  215,  215,  215,  215,
 
-      215,  215,  502,  502,  506,  215,  215,  215,  215,  215,
+      215,  215,  491,  491,  484,  215,  215,  215,  215,  215,
       336,  358,  336,  336,  336,  336,  336,  336,  336,  336,
-      341,  501,  341,  341,  341,  341,  341,  341,  215,  215,
+      341,  483,  341,  341,  341,  341,  341,  341,  215,  215,
       215,  215,  215,  215,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  397,  534,  534,  218,  218,  218,
+      218,  218,  218,  218,  397,  502,  502,  218,  218,  218,
       218,  218,  339,  397,  339,  339,  339,  339,  339,  339,
       339,  339,  346,  346,  346,  346,  346,  346,  346,  346,
-      218,  218,  218,  218,  218,  218,  242,  484,  242,  242,
+      218,  218,  218,  218,  218,  218,  242,  479,  242,  242,
       242,  242,  242,  242,  242,  242,  340,  364,  340,  340,
       340,  340,  340,  340,  340,  340,  350,  350,  350,  350,
 
-      350,  350,  350,  350,  398,  669,  350,  551,  551,  364,
-      669,  242,  243,  398,  243,  243,  243,  243,  243,  243,
+      350,  350,  350,  350,  398,  670,  350,  510,  510,  364,
+      670,  242,  243,  398,  243,  243,  243,  243,  243,  243,
       243,  243,  352,  352,  352,  352,  352,  352,  352,  352,
       353,  353,  353,  353,  353,  353,  355,  366,  355,  355,
       355,  355,  355,  355,  355,  355,  374,  243,  244,  449,
@@ -1133,20 +1133,20 @@ static yyconst short int yy_chk[3732] =
       260,  260,  260,  260,  260,  260,  375,  415,  457,  260,
       260,  260,  260,  260,  379,  379,  379,  379,  379,  379,
       379,  384,  384,  384,  384,  384,  384,  384,  384,  415,
-      457,  483,  260,  260,  260,  260,  260,  260,  263,  263,
-      263,  263,  263,  263,  263,  263,  263,  263,  379,  571,
-      571,  263,  263,  263,  263,  263,  390,  390,  390,  390,
+      457,  465,  260,  260,  260,  260,  260,  260,  263,  263,
+      263,  263,  263,  263,  263,  263,  263,  263,  379,  536,
+      536,  263,  263,  263,  263,  263,  390,  390,  390,  390,
       390,  390,  390,  390,  391,  391,  391,  391,  391,  391,
-      479,  399,  399,  465,  263,  263,  263,  263,  263,  263,
+      460,  399,  399,  459,  263,  263,  263,  263,  263,  263,
       285,  399,  285,  285,  285,  285,  285,  285,  285,  285,
       393,  432,  393,  393,  393,  393,  393,  393,  393,  393,
 
       394,  432,  394,  394,  394,  394,  394,  394,  394,  394,
-      460,  473,  619,  619,  468,  285,  286,  433,  286,  286,
+      458,  473,  551,  551,  468,  285,  286,  433,  286,  286,
       286,  286,  286,  286,  286,  286,  395,  433,  395,  395,
       395,  395,  395,  395,  395,  395,  396,  435,  396,  396,
-      396,  396,  396,  396,  396,  396,  473,  435,  461,  459,
-      458,  286,  292,  292,  292,  292,  292,  292,  292,  292,
+      396,  396,  396,  396,  396,  396,  473,  435,  461,  571,
+      571,  286,  292,  292,  292,  292,  292,  292,  292,  292,
       292,  400,  400,  445,  292,  292,  292,  292,  292,  468,
       461,  400,  401,  401,  401,  401,  401,  401,  401,  401,
       408,  408,  408,  408,  408,  408,  431,  292,  292,  292,
@@ -1174,84 +1174,84 @@ static yyconst short int yy_chk[3732] =
       441,  441,  443,  500,  443,  443,  443,  443,  443,  443,
       443,  443,  500,  327,  332,  486,  332,  332,  332,  332,
 
-      332,  332,  332,  332,  332,  486,  411,  410,  332,  332,
+      332,  332,  332,  332,  332,  486,  575,  575,  332,  332,
       332,  332,  332,  444,  444,  444,  444,  444,  444,  444,
-      444,  446,  381,  446,  446,  446,  446,  446,  446,  446,
+      444,  446,  411,  446,  446,  446,  446,  446,  446,  446,
       446,  332,  332,  332,  332,  332,  332,  335,  335,  335,
-      335,  335,  335,  335,  335,  335,  380,  370,  369,  335,
+      335,  335,  335,  335,  335,  335,  588,  588,  410,  335,
       335,  335,  335,  335,  447,  488,  447,  447,  447,  447,
       447,  447,  447,  447,  448,  488,  448,  448,  448,  448,
       448,  448,  335,  335,  335,  335,  335,  335,  348,  348,
       348,  348,  348,  348,  348,  348,  348,  348,  348,  351,
       351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
 
-      451,  451,  528,  351,  351,  351,  351,  351,  467,  467,
-      451,  470,  528,  470,  470,  470,  471,  363,  471,  471,
-      471,  467,  544,  362,  555,  589,  351,  351,  351,  351,
+      451,  451,  381,  351,  351,  351,  351,  351,  555,  470,
+      451,  470,  470,  470,  471,  530,  471,  471,  471,  494,
+      494,  494,  494,  494,  494,  530,  351,  351,  351,  351,
       351,  351,  354,  354,  354,  354,  354,  354,  354,  354,
-      354,  361,  546,  572,  544,  354,  354,  354,  354,  354,
-      472,  472,  472,  472,  472,  472,  472,  472,  470,  555,
-      589,  360,  357,  471,  546,  572,  356,  338,  354,  354,
+      354,  531,  533,  555,  566,  354,  354,  354,  354,  354,
+      380,  531,  533,  370,  566,  369,  470,  363,  591,  362,
+      476,  471,  476,  476,  476,  476,  476,  476,  354,  354,
       354,  354,  354,  354,  377,  377,  377,  377,  377,  377,
-      377,  377,  377,  472,  476,  330,  476,  476,  476,  476,
-      476,  476,  478,  478,  478,  478,  478,  478,  478,  478,
-
-      482,  329,  482,  482,  482,  482,  482,  482,  377,  378,
-      378,  378,  378,  378,  378,  378,  378,  378,  480,  476,
-      480,  480,  480,  480,  480,  480,  480,  480,  481,  529,
-      481,  481,  481,  481,  481,  481,  481,  481,  328,  529,
-      320,  319,  315,  378,  386,  574,  386,  386,  386,  386,
-      386,  386,  386,  386,  386,  389,  531,  389,  389,  389,
-      389,  389,  389,  389,  389,  389,  531,  574,  585,  389,
-      389,  389,  389,  389,  487,  487,  487,  487,  487,  487,
-      487,  487,  493,  493,  493,  493,  493,  493,  493,  493,
-      585,  314,  389,  389,  389,  389,  389,  389,  392,  392,
-
-      392,  392,  392,  392,  392,  392,  392,  311,  310,  291,
-      392,  392,  392,  392,  392,  494,  494,  494,  494,  494,
-      494,  496,  566,  496,  496,  496,  496,  496,  496,  496,
-      496,  290,  566,  392,  392,  392,  392,  392,  392,  403,
+      377,  377,  377,  546,  548,  472,  472,  472,  472,  472,
+      472,  472,  472,  591,  361,  476,  478,  478,  478,  478,
+
+      478,  478,  478,  478,  360,  546,  548,  357,  377,  378,
+      378,  378,  378,  378,  378,  378,  378,  378,  472,  480,
+      572,  480,  480,  480,  480,  480,  480,  480,  480,  481,
+      356,  481,  481,  481,  481,  481,  481,  481,  481,  619,
+      619,  338,  572,  378,  386,  574,  386,  386,  386,  386,
+      386,  386,  386,  386,  386,  389,  330,  389,  389,  389,
+      389,  389,  389,  389,  389,  389,  329,  574,  585,  389,
+      389,  389,  389,  389,  482,  328,  482,  482,  482,  482,
+      482,  482,  487,  487,  487,  487,  487,  487,  487,  487,
+      585,  320,  389,  389,  389,  389,  389,  389,  392,  392,
+
+      392,  392,  392,  392,  392,  392,  392,  319,  315,  314,
+      392,  392,  392,  392,  392,  493,  493,  493,  493,  493,
+      493,  493,  493,  496,  311,  496,  496,  496,  496,  496,
+      496,  496,  496,  392,  392,  392,  392,  392,  392,  403,
       403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
       406,  406,  406,  406,  406,  406,  406,  406,  406,  406,
-      289,  288,  278,  277,  406,  406,  406,  406,  406,  497,
+      310,  291,  290,  289,  406,  406,  406,  406,  406,  497,
       497,  497,  497,  497,  497,  497,  497,  497,  498,  498,
       498,  498,  498,  498,  498,  498,  498,  406,  406,  406,
-      406,  406,  406,  423,  276,  423,  423,  423,  423,  423,
+      406,  406,  406,  423,  288,  423,  423,  423,  423,  423,
 
       423,  423,  423,  499,  499,  499,  499,  499,  499,  499,
-      499,  499,  512,  274,  512,  512,  512,  575,  575,  513,
-      273,  513,  513,  513,  272,  271,  270,  269,  423,  424,
-      575,  424,  424,  424,  424,  424,  424,  424,  424,  514,
-      268,  514,  514,  514,  515,  267,  515,  515,  515,  251,
-      518,  250,  518,  518,  518,  249,  248,  246,  245,  512,
-      236,  235,  234,  233,  424,  425,  513,  425,  425,  425,
-      425,  425,  425,  425,  425,  516,  232,  229,  516,  516,
-      516,  516,  516,  516,  516,  516,  514,  227,  226,  225,
-      224,  515,  223,  220,  212,  517,  517,  518,  211,  517,
+      499,  499,  514,  278,  514,  514,  514,  277,  276,  515,
+      274,  515,  515,  515,  273,  272,  271,  270,  423,  424,
+      269,  424,  424,  424,  424,  424,  424,  424,  424,  516,
+      268,  516,  516,  516,  517,  267,  517,  517,  517,  251,
+      520,  250,  520,  520,  520,  249,  248,  246,  245,  514,
+      236,  235,  234,  233,  424,  425,  515,  425,  425,  425,
+      425,  425,  425,  425,  425,  518,  232,  229,  518,  518,
+      518,  518,  518,  518,  518,  518,  516,  227,  226,  225,
+      224,  517,  223,  220,  212,  519,  519,  520,  211,  519,
 
       425,  426,  208,  426,  426,  426,  426,  426,  426,  426,
-      426,  517,  517,  517,  519,  519,  207,  523,  519,  523,
-      523,  523,  523,  523,  523,  523,  523,  200,  199,  193,
-      519,  519,  519,  190,  189,  188,  426,  436,  187,  436,
+      426,  519,  519,  519,  521,  521,  207,  525,  521,  525,
+      525,  525,  525,  525,  525,  525,  525,  200,  199,  193,
+      521,  521,  521,  190,  189,  188,  426,  436,  187,  436,
       436,  436,  436,  436,  436,  436,  436,  436,  439,  186,
       439,  439,  439,  439,  439,  439,  439,  439,  439,  184,
-      183,  182,  439,  439,  439,  439,  439,  524,  181,  524,
-      524,  524,  524,  524,  524,  524,  524,  530,  530,  530,
-      530,  530,  530,  530,  530,  439,  439,  439,  439,  439,
+      183,  182,  439,  439,  439,  439,  439,  526,  181,  526,
+      526,  526,  526,  526,  526,  526,  526,  532,  532,  532,
+      532,  532,  532,  532,  532,  439,  439,  439,  439,  439,
       439,  442,  442,  442,  442,  442,  442,  442,  442,  442,
 
-      180,  179,  178,  442,  442,  442,  442,  442,  525,  177,
-      525,  525,  525,  525,  525,  525,  525,  525,  536,  536,
-      536,  536,  536,  536,  536,  536,  442,  442,  442,  442,
+      180,  179,  178,  442,  442,  442,  442,  442,  527,  177,
+      527,  527,  527,  527,  527,  527,  527,  527,  538,  538,
+      538,  538,  538,  538,  538,  538,  442,  442,  442,  442,
       442,  442,  454,  454,  454,  454,  454,  454,  454,  454,
       454,  454,  474,  176,  474,  474,  474,  474,  474,  474,
-      474,  474,  537,  537,  537,  537,  537,  537,  538,  175,
-      538,  538,  538,  538,  538,  538,  538,  538,  540,  540,
-      540,  540,  540,  540,  540,  540,  540,  474,  475,  169,
-      475,  475,  475,  475,  475,  475,  475,  475,  541,  541,
-      541,  541,  541,  541,  541,  541,  541,  542,  542,  542,
+      474,  474,  539,  539,  539,  539,  539,  539,  540,  175,
+      540,  540,  540,  540,  540,  540,  540,  540,  542,  542,
+      542,  542,  542,  542,  542,  542,  542,  474,  475,  169,
+      475,  475,  475,  475,  475,  475,  475,  475,  543,  543,
+      543,  543,  543,  543,  543,  543,  543,  544,  544,  544,
 
-      542,  542,  542,  542,  552,  552,  552,  552,  552,  552,
+      544,  544,  544,  544,  552,  552,  552,  552,  552,  552,
       552,  552,  168,  475,  489,  158,  489,  489,  489,  489,
       489,  489,  489,  489,  489,  492,  157,  492,  492,  492,
       492,  492,  492,  492,  492,  492,  156,  152,  151,  492,
@@ -1262,27 +1262,27 @@ static yyconst short int yy_chk[3732] =
       495,  495,  495,  495,  495,  554,  558,  122,  558,  558,
       558,  558,  558,  558,  559,  559,  559,  559,  559,  559,
 
-      559,  559,  121,  495,  495,  495,  495,  495,  495,  520,
-      120,  520,  520,  520,  520,  520,  520,  520,  520,  119,
+      559,  559,  121,  495,  495,  495,  495,  495,  495,  522,
+      120,  522,  522,  522,  522,  522,  522,  522,  522,  119,
       561,  558,  561,  561,  561,  561,  561,  561,  561,  561,
       562,  118,  562,  562,  562,  562,  562,  562,  562,  562,
-      113,  112,  111,  110,  520,  521,  108,  521,  521,  521,
-      521,  521,  521,  521,  521,  563,  107,  563,  563,  563,
+      113,  112,  111,  110,  522,  523,  108,  523,  523,  523,
+      523,  523,  523,  523,  523,  563,  107,  563,  563,  563,
       563,  563,  563,  569,  106,  569,  569,  569,  569,  569,
-      569,  569,  569,  596,  596,  596,  596,  596,  596,  102,
-      521,  522,   98,  522,  522,  522,  522,  522,  522,  522,
-      522,  579,  579,  579,  579,  579,  579,  579,  579,  580,
+      569,  569,  569,  598,  598,  598,  598,  598,  598,  102,
+      523,  524,   98,  524,  524,  524,  524,  524,  524,  524,
+      524,  579,  579,  579,  579,  579,  579,  579,  579,  580,
 
       580,  580,  580,  580,  580,  580,  580,  581,  581,  581,
-      581,  581,  581,  581,  581,   97,  522,  532,   93,  532,
-      532,  532,  532,  532,  532,  532,  532,  532,  535,   90,
-      535,  535,  535,  535,  535,  535,  535,  535,   82,   81,
-       80,   78,  535,  535,  535,  535,  535,   73,  588,  588,
-      588,  588,  588,  588,  588,  588,  592,   66,  592,  592,
-      592,  592,  592,  592,   59,  535,  535,  535,  535,  535,
-      535,  556,   54,  556,  556,  556,  556,  556,  556,  556,
-      556,  588,  594,  594,  594,  594,  594,  594,  594,  594,
-       51,  592,  595,  595,  595,  595,  595,  595,  595,  595,
+      581,  581,  581,  581,  581,   97,  524,  534,   93,  534,
+      534,  534,  534,  534,  534,  534,  534,  534,  537,   90,
+      537,  537,  537,  537,  537,  537,  537,  537,   82,   81,
+       80,   78,  537,  537,  537,  537,  537,   73,  590,  590,
+      590,  590,  590,  590,  590,  590,  594,   66,  594,  594,
+      594,  594,  594,  594,   59,  537,  537,  537,  537,  537,
+      537,  556,   54,  556,  556,  556,  556,  556,  556,  556,
+      556,  590,  596,  596,  596,  596,  596,  596,  596,  596,
+       51,  594,  597,  597,  597,  597,  597,  597,  597,  597,
 
        49,   41,   40,   39,   38,   37,  556,  557,   36,  557,
       557,  557,  557,  557,  557,  557,  557,   33,   29,   23,
@@ -1300,15 +1300,15 @@ static yyconst short int yy_chk[3732] =
       578,  578,  578,  578,  578,    0,    0,    0,    0,  605,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      578,  590,    0,  590,  590,  590,  590,  590,  590,  590,
-      590,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      578,  592,    0,  592,  592,  592,  592,  592,  592,  592,
+      592,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  590,  591,    0,  591,
-      591,  591,  591,  591,  591,  591,  591,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  592,  593,    0,  593,
+      593,  593,  593,  593,  593,  593,  593,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  591,  607,  607,  607,  607,  607,  607,  607,
+        0,    0,  593,  607,  607,  607,  607,  607,  607,  607,
       607,  607,  607,  607,  607,  607,  607,  607,  607,  608,
       608,  608,  608,  608,  608,  608,  608,  608,  608,  608,
       608,  608,  608,  608,  608,  609,  609,  609,  609,  609,
@@ -1366,19 +1366,19 @@ static yyconst short int yy_chk[3732] =
         0,  654,  655,  655,    0,    0,    0,  655,  656,    0,
       656,  656,    0,    0,    0,  656,  657,  657,  657,    0,
         0,    0,  657,  658,  658,  658,    0,    0,    0,    0,
-      658,  659,  659,    0,  659,  659,  659,    0,    0,  659,
-      659,  659,    0,    0,  659,  659,  659,  660,  660,    0,
+      658,  659,  659,  659,  659,  659,  659,  659,  659,  659,
+      659,  659,  659,  659,  659,  659,  659,  660,  660,    0,
       660,  660,  660,    0,    0,  660,  660,  660,    0,    0,
-      660,  660,  660,  661,  661,    0,    0,    0,  661,  662,
-        0,  662,  662,    0,    0,    0,  662,  663,  663,    0,
+      660,  660,  660,  661,  661,    0,  661,  661,  661,    0,
+        0,  661,  661,  661,    0,    0,  661,  661,  661,  662,
 
-        0,    0,    0,  663,  664,  664,  664,  664,  664,  664,
-      664,  664,  664,  664,  664,  664,  664,  664,  664,  664,
+      662,    0,    0,    0,  662,  663,    0,  663,  663,    0,
+        0,    0,  663,  664,  664,    0,    0,    0,    0,  664,
       665,  665,    0,    0,    0,  665,  666,    0,  666,  666,
         0,    0,    0,  666,  667,  667,    0,    0,    0,  667,
-      668,    0,  668,    0,    0,    0,    0,  668,  670,  670,
-      670,  670,  670,  670,  670,  670,  670,  670,  670,  670,
-      670,  670,  670,  670,  606,  606,  606,  606,  606,  606,
+      668,    0,  668,    0,    0,    0,    0,  668,  669,  669,
+      669,  669,  669,  669,  669,  669,  669,  669,  669,  669,
+      669,  669,  669,  669,  606,  606,  606,  606,  606,  606,
       606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
       606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
       606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
@@ -1404,7 +1404,7 @@ char *yytext;
 #define INITIAL 0
 #line 2 "toke.l"
 /*
- * Copyright (c) 1996, 1998-2005, 2007-2010
+ * Copyright (c) 1996, 1998-2005, 2007-2011
  *     Todd C. Miller <Todd.Miller@courtesan.com>
  *
  * Permission to use, copy, modify, and distribute this software for any
@@ -3599,8 +3599,8 @@ static char *
 parse_include(base)
     char *base;
 {
-    char *cp, *ep, *path;
-    int len = 0, subst = 0;
+    char *cp, *ep, *path, *pp;
+    int dirlen = 0, len = 0, subst = 0;
     size_t shost_len = 0;
 
     /* Pull out path from #include line. */
@@ -3619,15 +3619,26 @@ parse_include(base)
        ep++;
     }
 
-    /* Make a copy of path and return it. */
+    /* Relative paths are located in the same dir as the sudoers file. */
+    if (*cp != '/') {
+       char *dirend = strrchr(sudoers, '/');
+       if (dirend != NULL)
+           dirlen = (int)(dirend - sudoers) + 1;
+    }
+
+    /* Make a copy of the fully-qualified path and return it. */
     len += (int)(ep - cp);
-    if ((path = malloc(len + 1)) == NULL) {
+    path = pp = malloc(len + dirlen + 1);
+    if (path == NULL) {
        yyerror("unable to allocate memory");
        return NULL;
     }
+    if (dirlen) {
+       memcpy(path, sudoers, dirlen);
+       pp += dirlen;
+    }
     if (subst) {
        /* substitute for %h */
-       char *pp = path;
        while (cp < ep) {
            if (cp[0] == '%' && cp[1] == 'h') {
                memcpy(pp, user_shost, shost_len);
@@ -3639,8 +3650,8 @@ parse_include(base)
        }
        *pp = '\0';
     } else {
-       memcpy(path, cp, len);
-       path[len] = '\0';
+       memcpy(pp, cp, len);
+       pp[len] = '\0';
     }
 
     /* Push any excess characters (e.g. comment, newline) back to the lexer */
diff --git a/toke.l b/toke.l
index cc89d0be00f9eabd5a974cf006535dd42df05ce8..2b151a0c6cce3901f7889169aa39e533a8fd0eca 100644 (file)
--- a/toke.l
+++ b/toke.l
@@ -1,6 +1,6 @@
 %{
 /*
- * Copyright (c) 1996, 1998-2005, 2007-2010
+ * Copyright (c) 1996, 1998-2005, 2007-2011
  *     Todd C. Miller <Todd.Miller@courtesan.com>
  *
  * Permission to use, copy, modify, and distribute this software for any
@@ -259,7 +259,7 @@ DEFVAR                      [a-z_]+
                        }                       /* a command line arg */
 }
 
-<INITIAL>^#include[[:blank:]]+\/.*\n {
+<INITIAL>^#include[[:blank:]]+.*\n {
                            char *path;
 
                            if (continued) {
@@ -277,7 +277,7 @@ DEFVAR                      [a-z_]+
                                yyterminate();
                        }
 
-<INITIAL>^#includedir[[:blank:]]+\/.*\n {
+<INITIAL>^#includedir[[:blank:]]+.*\n {
                            char *path;
 
                            if (continued) {
@@ -890,8 +890,8 @@ static char *
 parse_include(base)
     char *base;
 {
-    char *cp, *ep, *path;
-    int len = 0, subst = 0;
+    char *cp, *ep, *path, *pp;
+    int dirlen = 0, len = 0, subst = 0;
     size_t shost_len = 0;
 
     /* Pull out path from #include line. */
@@ -910,15 +910,26 @@ parse_include(base)
        ep++;
     }
 
-    /* Make a copy of path and return it. */
+    /* Relative paths are located in the same dir as the sudoers file. */
+    if (*cp != '/') {
+       char *dirend = strrchr(sudoers, '/');
+       if (dirend != NULL)
+           dirlen = (int)(dirend - sudoers) + 1;
+    }
+
+    /* Make a copy of the fully-qualified path and return it. */
     len += (int)(ep - cp);
-    if ((path = malloc(len + 1)) == NULL) {
+    path = pp = malloc(len + dirlen + 1);
+    if (path == NULL) {
        yyerror("unable to allocate memory");
        return NULL;
     }
+    if (dirlen) {
+       memcpy(path, sudoers, dirlen);
+       pp += dirlen;
+    }
     if (subst) {
        /* substitute for %h */
-       char *pp = path;
        while (cp < ep) {
            if (cp[0] == '%' && cp[1] == 'h') {
                memcpy(pp, user_shost, shost_len);
@@ -930,8 +941,8 @@ parse_include(base)
        }
        *pp = '\0';
     } else {
-       memcpy(path, cp, len);
-       path[len] = '\0';
+       memcpy(pp, cp, len);
+       pp[len] = '\0';
     }
 
     /* Push any excess characters (e.g. comment, newline) back to the lexer */