ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/conf_parser.c
(Generate patch)

Comparing ircd-hybrid/trunk/src/conf_parser.c (file contents):
Revision 1644 by michael, Tue Nov 6 22:20:16 2012 UTC vs.
Revision 1646 by michael, Wed Nov 7 21:02:43 2012 UTC

# Line 118 | Line 118 | static unsigned int lsize = 0;
118   static char *resv_reason = NULL;
119   static char *listener_address = NULL;
120  
121 < struct CollectItem
121 > static struct
122   {
123 <  dlink_node node;
124 <  char *name;
125 <  char *user;
126 <  char *host;
127 <  char *passwd;
128 <  int  port;
129 <  int  flags;
130 < #ifdef HAVE_LIBCRYPTO
131 <  char *rsa_public_key_file;
132 <  RSA *rsa_public_key;
133 < #endif
134 < };
123 >  struct {
124 >    dlink_list list;
125 >  } mask,
126 >    leaf,
127 >    hub;
128 >
129 >  struct {
130 >    char buf[IRCD_BUFSIZE];
131 >  } name,
132 >    user,
133 >    host,
134 >    addr,
135 >    pass,
136 >    file,
137 >    class;
138 >
139 >  struct {
140 >    unsigned int value;
141 >  } flags,
142 >    modes,
143 >    port,
144 >    ping_freq,
145 >    max_perip,
146 >    con_freq,
147 >    max_total,
148 >    max_global,
149 >    max_local,
150 >    max_ident,
151 >    max_sendq,
152 >    max_recvq,
153 >    cidr_bitlen_ipv4,
154 >    cidr_bitlen_ipv6,
155 >    number_per_cidr;
156 > } block_state;
157  
158   static void
159 < free_collect_item(struct CollectItem *item)
159 > reset_block_state(void)
160   {
161 <  MyFree(item->name);
162 <  MyFree(item->user);
163 <  MyFree(item->host);
164 <  MyFree(item->passwd);
165 < #ifdef HAVE_LIBCRYPTO
166 <  MyFree(item->rsa_public_key_file);
167 < #endif
168 <  MyFree(item);
161 >  dlink_node *ptr = NULL, *ptr_next = NULL;
162 >
163 >  DLINK_FOREACH_SAFE(ptr, ptr_next, block_state.mask.list.head)
164 >  {
165 >    MyFree(ptr->data);
166 >    dlinkDelete(ptr, &block_state.mask.list);
167 >    free_dlink_node(ptr);
168 >  }
169 >
170 >  DLINK_FOREACH_SAFE(ptr, ptr_next, block_state.leaf.list.head)
171 >  {
172 >    MyFree(ptr->data);
173 >    dlinkDelete(ptr, &block_state.leaf.list);
174 >    free_dlink_node(ptr);
175 >  }
176 >
177 >  DLINK_FOREACH_SAFE(ptr, ptr_next, block_state.hub.list.head)
178 >  {
179 >    MyFree(ptr->data);
180 >    dlinkDelete(ptr, &block_state.hub.list);
181 >    free_dlink_node(ptr);
182 >  }
183 >
184 >  memset(&block_state, 0, sizeof(block_state));
185   }
186  
187  
188   /* Line 358 of yacc.c  */
189 < #line 152 "conf_parser.c"
189 > #line 190 "conf_parser.c"
190  
191   # ifndef YY_NULL
192   #  if defined __cplusplus && 201103L <= __cplusplus
# Line 616 | Line 654 | extern int yydebug;
654   typedef union YYSTYPE
655   {
656   /* Line 374 of yacc.c  */
657 < #line 109 "conf_parser.y"
657 > #line 147 "conf_parser.y"
658  
659    int number;
660    char *string;
661  
662  
663   /* Line 374 of yacc.c  */
664 < #line 627 "conf_parser.c"
664 > #line 665 "conf_parser.c"
665   } YYSTYPE;
666   # define YYSTYPE_IS_TRIVIAL 1
667   # define yystype YYSTYPE /* obsolescent; will be withdrawn */
# Line 651 | Line 689 | int yyparse ();
689   /* Copy the second part of user declarations.  */
690  
691   /* Line 377 of yacc.c  */
692 < #line 655 "conf_parser.c"
692 > #line 693 "conf_parser.c"
693  
694   #ifdef short
695   # undef short
# Line 1210 | Line 1248 | static const yytype_int16 yyrhs[] =
1248   /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
1249   static const yytype_uint16 yyrline[] =
1250   {
1251 <       0,   328,   328,   329,   332,   333,   334,   335,   336,   337,
1252 <     338,   339,   340,   341,   342,   343,   344,   345,   346,   347,
1253 <     348,   349,   350,   351,   352,   353,   357,   357,   358,   362,
1254 <     366,   370,   374,   378,   384,   384,   385,   386,   387,   388,
1255 <     395,   398,   398,   399,   399,   399,   401,   407,   414,   416,
1256 <     416,   417,   417,   418,   418,   419,   419,   420,   420,   421,
1257 <     421,   422,   422,   423,   423,   424,   425,   428,   429,   431,
1258 <     431,   432,   438,   446,   446,   447,   453,   461,   500,   559,
1259 <     587,   595,   610,   625,   634,   648,   657,   685,   715,   738,
1260 <     747,   749,   749,   750,   750,   751,   751,   753,   762,   771,
1261 <     783,   784,   784,   786,   786,   787,   789,   796,   796,   806,
1262 <     807,   809,   809,   810,   810,   812,   817,   820,   826,   825,
1263 <     831,   831,   832,   836,   840,   844,   848,   852,   856,   867,
1264 <     866,   958,   958,   959,   959,   959,   960,   960,   960,   961,
1265 <     961,   961,   963,   972,  1009,  1021,  1032,  1074,  1084,  1083,
1266 <    1089,  1089,  1090,  1094,  1098,  1102,  1106,  1110,  1114,  1118,
1267 <    1122,  1126,  1130,  1134,  1138,  1142,  1146,  1150,  1154,  1158,
1268 <    1162,  1166,  1173,  1172,  1178,  1178,  1179,  1183,  1187,  1191,
1269 <    1195,  1199,  1203,  1207,  1211,  1215,  1219,  1223,  1227,  1231,
1270 <    1235,  1239,  1243,  1247,  1251,  1262,  1261,  1307,  1307,  1308,
1271 <    1309,  1309,  1310,  1311,  1312,  1313,  1314,  1315,  1316,  1317,
1272 <    1318,  1318,  1319,  1321,  1330,  1336,  1342,  1348,  1354,  1360,
1273 <    1366,  1372,  1378,  1385,  1391,  1397,  1407,  1406,  1423,  1422,
1274 <    1427,  1427,  1428,  1432,  1436,  1444,  1444,  1445,  1445,  1445,
1275 <    1445,  1445,  1447,  1447,  1449,  1449,  1451,  1465,  1485,  1494,
1276 <    1507,  1506,  1569,  1569,  1570,  1570,  1570,  1570,  1571,  1571,
1277 <    1571,  1572,  1572,  1574,  1609,  1622,  1631,  1643,  1642,  1646,
1278 <    1646,  1647,  1651,  1655,  1659,  1663,  1667,  1671,  1675,  1679,
1279 <    1685,  1704,  1714,  1728,  1727,  1743,  1743,  1744,  1744,  1744,
1280 <    1744,  1746,  1755,  1770,  1783,  1785,  1785,  1786,  1786,  1788,
1281 <    1804,  1803,  1818,  1818,  1819,  1819,  1819,  1819,  1821,  1830,
1282 <    1853,  1852,  1858,  1858,  1859,  1863,  1867,  1871,  1875,  1879,
1283 <    1883,  1887,  1891,  1895,  1905,  1904,  1920,  1920,  1921,  1921,
1284 <    1921,  1923,  1930,  1929,  1935,  1935,  1936,  1940,  1944,  1948,
1285 <    1952,  1956,  1960,  1964,  1968,  1972,  1982,  1981,  2030,  2030,
1286 <    2031,  2031,  2031,  2032,  2032,  2033,  2033,  2033,  2034,  2034,
1287 <    2034,  2035,  2035,  2036,  2038,  2047,  2056,  2082,  2100,  2118,
1288 <    2124,  2128,  2137,  2136,  2140,  2140,  2141,  2145,  2151,  2162,
1289 <    2173,  2184,  2193,  2212,  2211,  2275,  2274,  2278,  2278,  2279,
1290 <    2285,  2285,  2286,  2286,  2286,  2286,  2288,  2307,  2317,  2316,
1291 <    2339,  2339,  2340,  2340,  2340,  2342,  2348,  2357,  2359,  2359,
1292 <    2360,  2360,  2362,  2381,  2380,  2427,  2426,  2430,  2430,  2431,
1293 <    2437,  2437,  2438,  2438,  2438,  2438,  2440,  2446,  2455,  2458,
1294 <    2458,  2459,  2459,  2460,  2460,  2461,  2461,  2462,  2462,  2463,
1295 <    2463,  2464,  2465,  2466,  2466,  2467,  2467,  2468,  2468,  2469,
1296 <    2469,  2470,  2470,  2471,  2471,  2472,  2473,  2473,  2474,  2474,
1297 <    2475,  2475,  2476,  2476,  2477,  2477,  2478,  2479,  2479,  2480,
1298 <    2481,  2482,  2482,  2483,  2483,  2484,  2485,  2486,  2487,  2487,
1299 <    2488,  2491,  2496,  2502,  2508,  2514,  2519,  2524,  2529,  2534,
1300 <    2539,  2544,  2549,  2554,  2559,  2564,  2569,  2574,  2579,  2584,
1301 <    2590,  2601,  2606,  2611,  2616,  2621,  2626,  2629,  2634,  2637,
1302 <    2642,  2647,  2652,  2657,  2662,  2667,  2672,  2677,  2682,  2693,
1303 <    2698,  2703,  2708,  2717,  2726,  2731,  2736,  2742,  2741,  2746,
1304 <    2746,  2747,  2750,  2753,  2756,  2759,  2762,  2765,  2768,  2771,
1305 <    2774,  2777,  2780,  2783,  2786,  2789,  2792,  2795,  2798,  2801,
1306 <    2804,  2810,  2809,  2814,  2814,  2815,  2818,  2821,  2824,  2827,
1307 <    2830,  2833,  2836,  2839,  2842,  2845,  2848,  2851,  2854,  2857,
1308 <    2860,  2863,  2866,  2869,  2872,  2877,  2882,  2887,  2896,  2899,
1309 <    2899,  2900,  2901,  2901,  2902,  2902,  2903,  2903,  2904,  2905,
1310 <    2905,  2906,  2907,  2907,  2908,  2908,  2910,  2915,  2920,  2925,
1311 <    2930,  2935,  2940,  2945,  2950,  2955,  2960,  2965,  2970,  2975,
1312 <    2983,  2986,  2986,  2987,  2987,  2988,  2989,  2989,  2990,  2991,
1313 <    2993,  2999,  3005,  3014,  3028,  3034
1251 >       0,   366,   366,   367,   370,   371,   372,   373,   374,   375,
1252 >     376,   377,   378,   379,   380,   381,   382,   383,   384,   385,
1253 >     386,   387,   388,   389,   390,   391,   395,   395,   396,   400,
1254 >     404,   408,   412,   416,   422,   422,   423,   424,   425,   426,
1255 >     433,   436,   436,   437,   437,   437,   439,   445,   452,   454,
1256 >     454,   455,   455,   456,   456,   457,   457,   458,   458,   459,
1257 >     459,   460,   460,   461,   461,   462,   463,   466,   467,   469,
1258 >     469,   470,   476,   484,   484,   485,   491,   499,   538,   597,
1259 >     625,   633,   648,   663,   672,   686,   695,   723,   753,   776,
1260 >     785,   787,   787,   788,   788,   789,   789,   791,   800,   809,
1261 >     821,   822,   822,   824,   824,   825,   827,   834,   834,   844,
1262 >     845,   847,   847,   848,   848,   850,   855,   858,   864,   863,
1263 >     869,   869,   870,   874,   878,   882,   886,   890,   894,   905,
1264 >     904,   983,   983,   984,   984,   984,   985,   985,   985,   986,
1265 >     986,   986,   988,   994,  1000,  1006,  1017,  1023,  1030,  1029,
1266 >    1035,  1035,  1036,  1040,  1044,  1048,  1052,  1056,  1060,  1064,
1267 >    1068,  1072,  1076,  1080,  1084,  1088,  1092,  1096,  1100,  1104,
1268 >    1108,  1112,  1119,  1118,  1124,  1124,  1125,  1129,  1133,  1137,
1269 >    1141,  1145,  1149,  1153,  1157,  1161,  1165,  1169,  1173,  1177,
1270 >    1181,  1185,  1189,  1193,  1197,  1208,  1207,  1253,  1253,  1254,
1271 >    1255,  1255,  1256,  1257,  1258,  1259,  1260,  1261,  1262,  1263,
1272 >    1264,  1264,  1265,  1267,  1276,  1282,  1288,  1294,  1300,  1306,
1273 >    1312,  1318,  1324,  1331,  1337,  1343,  1353,  1352,  1359,  1358,
1274 >    1363,  1363,  1364,  1368,  1372,  1378,  1378,  1379,  1379,  1379,
1275 >    1379,  1379,  1381,  1381,  1383,  1383,  1385,  1399,  1419,  1425,
1276 >    1435,  1434,  1476,  1476,  1477,  1477,  1477,  1477,  1478,  1478,
1277 >    1478,  1479,  1479,  1481,  1487,  1493,  1499,  1511,  1510,  1516,
1278 >    1516,  1517,  1521,  1525,  1529,  1533,  1537,  1541,  1545,  1549,
1279 >    1555,  1569,  1578,  1591,  1590,  1606,  1606,  1607,  1607,  1607,
1280 >    1607,  1609,  1618,  1633,  1646,  1648,  1648,  1649,  1649,  1651,
1281 >    1667,  1666,  1681,  1681,  1682,  1682,  1682,  1682,  1684,  1693,
1282 >    1716,  1715,  1721,  1721,  1722,  1726,  1730,  1734,  1738,  1742,
1283 >    1746,  1750,  1754,  1758,  1768,  1767,  1783,  1783,  1784,  1784,
1284 >    1784,  1786,  1793,  1792,  1798,  1798,  1799,  1803,  1807,  1811,
1285 >    1815,  1819,  1823,  1827,  1831,  1835,  1845,  1844,  1893,  1893,
1286 >    1894,  1894,  1894,  1895,  1895,  1896,  1896,  1896,  1897,  1897,
1287 >    1897,  1898,  1898,  1899,  1901,  1910,  1919,  1945,  1963,  1981,
1288 >    1987,  1991,  2000,  1999,  2003,  2003,  2004,  2008,  2014,  2025,
1289 >    2035,  2046,  2055,  2074,  2073,  2137,  2136,  2140,  2140,  2141,
1290 >    2147,  2147,  2148,  2148,  2148,  2148,  2150,  2169,  2179,  2178,
1291 >    2205,  2205,  2206,  2206,  2206,  2208,  2214,  2223,  2225,  2225,
1292 >    2226,  2226,  2228,  2246,  2245,  2291,  2290,  2296,  2296,  2297,
1293 >    2303,  2303,  2304,  2304,  2304,  2304,  2306,  2312,  2321,  2324,
1294 >    2324,  2325,  2325,  2326,  2326,  2327,  2327,  2328,  2328,  2329,
1295 >    2329,  2330,  2331,  2332,  2332,  2333,  2333,  2334,  2334,  2335,
1296 >    2335,  2336,  2336,  2337,  2337,  2338,  2339,  2339,  2340,  2340,
1297 >    2341,  2341,  2342,  2342,  2343,  2343,  2344,  2345,  2345,  2346,
1298 >    2347,  2348,  2348,  2349,  2349,  2350,  2351,  2352,  2353,  2353,
1299 >    2354,  2357,  2362,  2368,  2374,  2380,  2385,  2390,  2395,  2400,
1300 >    2405,  2410,  2415,  2420,  2425,  2430,  2435,  2440,  2445,  2450,
1301 >    2456,  2467,  2472,  2477,  2482,  2487,  2492,  2495,  2500,  2503,
1302 >    2508,  2513,  2518,  2523,  2528,  2533,  2538,  2543,  2548,  2559,
1303 >    2564,  2569,  2574,  2583,  2592,  2597,  2602,  2608,  2607,  2612,
1304 >    2612,  2613,  2616,  2619,  2622,  2625,  2628,  2631,  2634,  2637,
1305 >    2640,  2643,  2646,  2649,  2652,  2655,  2658,  2661,  2664,  2667,
1306 >    2670,  2676,  2675,  2680,  2680,  2681,  2684,  2687,  2690,  2693,
1307 >    2696,  2699,  2702,  2705,  2708,  2711,  2714,  2717,  2720,  2723,
1308 >    2726,  2729,  2732,  2735,  2738,  2743,  2748,  2753,  2762,  2765,
1309 >    2765,  2766,  2767,  2767,  2768,  2768,  2769,  2769,  2770,  2771,
1310 >    2771,  2772,  2773,  2773,  2774,  2774,  2776,  2781,  2786,  2791,
1311 >    2796,  2801,  2806,  2811,  2816,  2821,  2826,  2831,  2836,  2841,
1312 >    2849,  2852,  2852,  2853,  2853,  2854,  2855,  2855,  2856,  2857,
1313 >    2859,  2865,  2871,  2880,  2894,  2900
1314   };
1315   #endif
1316  
# Line 3132 | Line 3170 | yyreduce:
3170      {
3171          case 26:
3172   /* Line 1813 of yacc.c  */
3173 < #line 357 "conf_parser.y"
3173 > #line 395 "conf_parser.y"
3174      { (yyval.number) = 0; }
3175      break;
3176  
3177    case 28:
3178   /* Line 1813 of yacc.c  */
3179 < #line 359 "conf_parser.y"
3179 > #line 397 "conf_parser.y"
3180      {
3181                          (yyval.number) = (yyvsp[(1) - (2)].number) + (yyvsp[(2) - (2)].number);
3182                  }
# Line 3146 | Line 3184 | yyreduce:
3184  
3185    case 29:
3186   /* Line 1813 of yacc.c  */
3187 < #line 363 "conf_parser.y"
3187 > #line 401 "conf_parser.y"
3188      {
3189                          (yyval.number) = (yyvsp[(1) - (3)].number) + (yyvsp[(3) - (3)].number);
3190                  }
# Line 3154 | Line 3192 | yyreduce:
3192  
3193    case 30:
3194   /* Line 1813 of yacc.c  */
3195 < #line 367 "conf_parser.y"
3195 > #line 405 "conf_parser.y"
3196      {
3197                          (yyval.number) = (yyvsp[(1) - (3)].number) * 60 + (yyvsp[(3) - (3)].number);
3198                  }
# Line 3162 | Line 3200 | yyreduce:
3200  
3201    case 31:
3202   /* Line 1813 of yacc.c  */
3203 < #line 371 "conf_parser.y"
3203 > #line 409 "conf_parser.y"
3204      {
3205                          (yyval.number) = (yyvsp[(1) - (3)].number) * 60 * 60 + (yyvsp[(3) - (3)].number);
3206                  }
# Line 3170 | Line 3208 | yyreduce:
3208  
3209    case 32:
3210   /* Line 1813 of yacc.c  */
3211 < #line 375 "conf_parser.y"
3211 > #line 413 "conf_parser.y"
3212      {
3213                          (yyval.number) = (yyvsp[(1) - (3)].number) * 60 * 60 * 24 + (yyvsp[(3) - (3)].number);
3214                  }
# Line 3178 | Line 3216 | yyreduce:
3216  
3217    case 33:
3218   /* Line 1813 of yacc.c  */
3219 < #line 379 "conf_parser.y"
3219 > #line 417 "conf_parser.y"
3220      {
3221                          (yyval.number) = (yyvsp[(1) - (3)].number) * 60 * 60 * 24 * 7 + (yyvsp[(3) - (3)].number);
3222                  }
# Line 3186 | Line 3224 | yyreduce:
3224  
3225    case 34:
3226   /* Line 1813 of yacc.c  */
3227 < #line 384 "conf_parser.y"
3227 > #line 422 "conf_parser.y"
3228      { (yyval.number) = 0; }
3229      break;
3230  
3231    case 36:
3232   /* Line 1813 of yacc.c  */
3233 < #line 385 "conf_parser.y"
3233 > #line 423 "conf_parser.y"
3234      { (yyval.number) = (yyvsp[(1) - (2)].number) + (yyvsp[(2) - (2)].number); }
3235      break;
3236  
3237    case 37:
3238   /* Line 1813 of yacc.c  */
3239 < #line 386 "conf_parser.y"
3239 > #line 424 "conf_parser.y"
3240      { (yyval.number) = (yyvsp[(1) - (3)].number) + (yyvsp[(3) - (3)].number); }
3241      break;
3242  
3243    case 38:
3244   /* Line 1813 of yacc.c  */
3245 < #line 387 "conf_parser.y"
3245 > #line 425 "conf_parser.y"
3246      { (yyval.number) = (yyvsp[(1) - (3)].number) * 1024 + (yyvsp[(3) - (3)].number); }
3247      break;
3248  
3249    case 39:
3250   /* Line 1813 of yacc.c  */
3251 < #line 388 "conf_parser.y"
3251 > #line 426 "conf_parser.y"
3252      { (yyval.number) = (yyvsp[(1) - (3)].number) * 1024 * 1024 + (yyvsp[(3) - (3)].number); }
3253      break;
3254  
3255    case 46:
3256   /* Line 1813 of yacc.c  */
3257 < #line 402 "conf_parser.y"
3257 > #line 440 "conf_parser.y"
3258      {
3259    if (conf_parser_ctx.pass == 2)
3260      add_conf_module(libio_basename(yylval.string));
# Line 3225 | Line 3263 | yyreduce:
3263  
3264    case 47:
3265   /* Line 1813 of yacc.c  */
3266 < #line 408 "conf_parser.y"
3266 > #line 446 "conf_parser.y"
3267      {
3268    if (conf_parser_ctx.pass == 2)
3269      mod_add_path(yylval.string);
# Line 3234 | Line 3272 | yyreduce:
3272  
3273    case 71:
3274   /* Line 1813 of yacc.c  */
3275 < #line 433 "conf_parser.y"
3275 > #line 471 "conf_parser.y"
3276      {
3277   #ifdef HAVE_LIBCRYPTO
3278    if (conf_parser_ctx.pass == 2 && ServerInfo.client_ctx)
# Line 3245 | Line 3283 | yyreduce:
3283  
3284    case 72:
3285   /* Line 1813 of yacc.c  */
3286 < #line 439 "conf_parser.y"
3286 > #line 477 "conf_parser.y"
3287      {
3288   #ifdef HAVE_LIBCRYPTO
3289    if (conf_parser_ctx.pass == 2 && ServerInfo.client_ctx)
# Line 3256 | Line 3294 | yyreduce:
3294  
3295    case 75:
3296   /* Line 1813 of yacc.c  */
3297 < #line 448 "conf_parser.y"
3297 > #line 486 "conf_parser.y"
3298      {
3299   #ifdef HAVE_LIBCRYPTO
3300    if (conf_parser_ctx.pass == 2 && ServerInfo.server_ctx)
# Line 3267 | Line 3305 | yyreduce:
3305  
3306    case 76:
3307   /* Line 1813 of yacc.c  */
3308 < #line 454 "conf_parser.y"
3308 > #line 492 "conf_parser.y"
3309      {
3310   #ifdef HAVE_LIBCRYPTO
3311    if (conf_parser_ctx.pass == 2 && ServerInfo.server_ctx)
# Line 3278 | Line 3316 | yyreduce:
3316  
3317    case 77:
3318   /* Line 1813 of yacc.c  */
3319 < #line 462 "conf_parser.y"
3319 > #line 500 "conf_parser.y"
3320      {
3321   #ifdef HAVE_LIBCRYPTO
3322    if (conf_parser_ctx.pass == 2 && ServerInfo.server_ctx)
# Line 3320 | Line 3358 | yyreduce:
3358  
3359    case 78:
3360   /* Line 1813 of yacc.c  */
3361 < #line 501 "conf_parser.y"
3361 > #line 539 "conf_parser.y"
3362      {
3363   #ifdef HAVE_LIBCRYPTO
3364    if (conf_parser_ctx.pass == 1)
# Line 3339 | Line 3377 | yyreduce:
3377        ServerInfo.rsa_private_key_file = NULL;
3378      }
3379  
3380 <    DupString(ServerInfo.rsa_private_key_file, yylval.string);
3380 >    ServerInfo.rsa_private_key_file = xstrdup(yylval.string);
3381  
3382      if ((file = BIO_new_file(yylval.string, "r")) == NULL)
3383      {
# Line 3382 | Line 3420 | yyreduce:
3420  
3421    case 79:
3422   /* Line 1813 of yacc.c  */
3423 < #line 560 "conf_parser.y"
3423 > #line 598 "conf_parser.y"
3424      {
3425   /* TBD - XXX: error reporting */
3426   #ifdef HAVE_LIBCRYPTO
# Line 3413 | Line 3451 | yyreduce:
3451  
3452    case 80:
3453   /* Line 1813 of yacc.c  */
3454 < #line 588 "conf_parser.y"
3454 > #line 626 "conf_parser.y"
3455      {
3456   #ifdef HAVE_LIBCRYPTO
3457    if (conf_parser_ctx.pass == 2 && ServerInfo.server_ctx)
# Line 3424 | Line 3462 | yyreduce:
3462  
3463    case 81:
3464   /* Line 1813 of yacc.c  */
3465 < #line 596 "conf_parser.y"
3465 > #line 634 "conf_parser.y"
3466      {
3467    /* this isn't rehashable */
3468    if (conf_parser_ctx.pass == 2 && !ServerInfo.name)
3469    {
3470      if (valid_servname(yylval.string))
3471 <      DupString(ServerInfo.name, yylval.string);
3471 >      ServerInfo.name = xstrdup(yylval.string);
3472      else
3473      {
3474        ilog(LOG_TYPE_IRCD, "Ignoring serverinfo::name -- invalid name. Aborting.");
# Line 3442 | Line 3480 | yyreduce:
3480  
3481    case 82:
3482   /* Line 1813 of yacc.c  */
3483 < #line 611 "conf_parser.y"
3483 > #line 649 "conf_parser.y"
3484      {
3485    /* this isn't rehashable */
3486    if (conf_parser_ctx.pass == 2 && !ServerInfo.sid)
3487    {
3488      if (valid_sid(yylval.string))
3489 <      DupString(ServerInfo.sid, yylval.string);
3489 >      ServerInfo.sid = xstrdup(yylval.string);
3490      else
3491      {
3492        ilog(LOG_TYPE_IRCD, "Ignoring serverinfo::sid -- invalid SID. Aborting.");
# Line 3460 | Line 3498 | yyreduce:
3498  
3499    case 83:
3500   /* Line 1813 of yacc.c  */
3501 < #line 626 "conf_parser.y"
3501 > #line 664 "conf_parser.y"
3502      {
3503    if (conf_parser_ctx.pass == 2)
3504    {
3505      MyFree(ServerInfo.description);
3506 <    DupString(ServerInfo.description,yylval.string);
3506 >    ServerInfo.description = xstrdup(yylval.string);
3507    }
3508   }
3509      break;
3510  
3511    case 84:
3512   /* Line 1813 of yacc.c  */
3513 < #line 635 "conf_parser.y"
3513 > #line 673 "conf_parser.y"
3514      {
3515    if (conf_parser_ctx.pass == 2)
3516    {
# Line 3482 | Line 3520 | yyreduce:
3520        p = '\0';
3521  
3522      MyFree(ServerInfo.network_name);
3523 <    DupString(ServerInfo.network_name, yylval.string);
3523 >    ServerInfo.network_name = xstrdup(yylval.string);
3524    }
3525   }
3526      break;
3527  
3528    case 85:
3529   /* Line 1813 of yacc.c  */
3530 < #line 649 "conf_parser.y"
3530 > #line 687 "conf_parser.y"
3531      {
3532    if (conf_parser_ctx.pass == 2)
3533    {
3534      MyFree(ServerInfo.network_desc);
3535 <    DupString(ServerInfo.network_desc, yylval.string);
3535 >    ServerInfo.network_desc = xstrdup(yylval.string);
3536    }
3537   }
3538      break;
3539  
3540    case 86:
3541   /* Line 1813 of yacc.c  */
3542 < #line 658 "conf_parser.y"
3542 > #line 696 "conf_parser.y"
3543      {
3544    if (conf_parser_ctx.pass == 2 && *yylval.string != '*')
3545    {
# Line 3532 | Line 3570 | yyreduce:
3570  
3571    case 87:
3572   /* Line 1813 of yacc.c  */
3573 < #line 686 "conf_parser.y"
3573 > #line 724 "conf_parser.y"
3574      {
3575   #ifdef IPV6
3576    if (conf_parser_ctx.pass == 2 && *yylval.string != '*')
# Line 3565 | Line 3603 | yyreduce:
3603  
3604    case 88:
3605   /* Line 1813 of yacc.c  */
3606 < #line 716 "conf_parser.y"
3606 > #line 754 "conf_parser.y"
3607      {
3608    if (conf_parser_ctx.pass == 2)
3609    {
# Line 3591 | Line 3629 | yyreduce:
3629  
3630    case 89:
3631   /* Line 1813 of yacc.c  */
3632 < #line 739 "conf_parser.y"
3632 > #line 777 "conf_parser.y"
3633      {
3634    if (conf_parser_ctx.pass == 2)
3635      ServerInfo.hub = yylval.number;
# Line 3600 | Line 3638 | yyreduce:
3638  
3639    case 97:
3640   /* Line 1813 of yacc.c  */
3641 < #line 754 "conf_parser.y"
3641 > #line 792 "conf_parser.y"
3642      {
3643    if (conf_parser_ctx.pass == 2)
3644    {
3645      MyFree(AdminInfo.name);
3646 <    DupString(AdminInfo.name, yylval.string);
3646 >    AdminInfo.name = xstrdup(yylval.string);
3647    }
3648   }
3649      break;
3650  
3651    case 98:
3652   /* Line 1813 of yacc.c  */
3653 < #line 763 "conf_parser.y"
3653 > #line 801 "conf_parser.y"
3654      {
3655    if (conf_parser_ctx.pass == 2)
3656    {
3657      MyFree(AdminInfo.email);
3658 <    DupString(AdminInfo.email, yylval.string);
3658 >    AdminInfo.email = xstrdup(yylval.string);
3659    }
3660   }
3661      break;
3662  
3663    case 99:
3664   /* Line 1813 of yacc.c  */
3665 < #line 772 "conf_parser.y"
3665 > #line 810 "conf_parser.y"
3666      {
3667    if (conf_parser_ctx.pass == 2)
3668    {
3669      MyFree(AdminInfo.description);
3670 <    DupString(AdminInfo.description, yylval.string);
3670 >    AdminInfo.description = xstrdup(yylval.string);
3671    }
3672   }
3673      break;
3674  
3675    case 106:
3676   /* Line 1813 of yacc.c  */
3677 < #line 790 "conf_parser.y"
3677 > #line 828 "conf_parser.y"
3678      {
3679    if (conf_parser_ctx.pass == 2)
3680      ConfigLoggingEntry.use_logging = yylval.number;
# Line 3645 | Line 3683 | yyreduce:
3683  
3684    case 107:
3685   /* Line 1813 of yacc.c  */
3686 < #line 796 "conf_parser.y"
3686 > #line 834 "conf_parser.y"
3687      {
3688    lfile[0] = '\0';
3689    ltype = 0;
# Line 3655 | Line 3693 | yyreduce:
3693  
3694    case 108:
3695   /* Line 1813 of yacc.c  */
3696 < #line 801 "conf_parser.y"
3696 > #line 839 "conf_parser.y"
3697      {
3698    if (conf_parser_ctx.pass == 2 && ltype > 0)
3699      log_add_file(ltype, lsize, lfile);
# Line 3664 | Line 3702 | yyreduce:
3702  
3703    case 115:
3704   /* Line 1813 of yacc.c  */
3705 < #line 813 "conf_parser.y"
3705 > #line 851 "conf_parser.y"
3706      {
3707    strlcpy(lfile, yylval.string, sizeof(lfile));
3708   }
# Line 3672 | Line 3710 | yyreduce:
3710  
3711    case 116:
3712   /* Line 1813 of yacc.c  */
3713 < #line 818 "conf_parser.y"
3713 > #line 856 "conf_parser.y"
3714      {
3715    lsize = (yyvsp[(3) - (4)].number);
3716   }
# Line 3680 | Line 3718 | yyreduce:
3718  
3719    case 117:
3720   /* Line 1813 of yacc.c  */
3721 < #line 821 "conf_parser.y"
3721 > #line 859 "conf_parser.y"
3722      {
3723    lsize = 0;
3724   }
# Line 3688 | Line 3726 | yyreduce:
3726  
3727    case 118:
3728   /* Line 1813 of yacc.c  */
3729 < #line 826 "conf_parser.y"
3729 > #line 864 "conf_parser.y"
3730      {
3731    if (conf_parser_ctx.pass == 2)
3732      ltype = 0;
# Line 3697 | Line 3735 | yyreduce:
3735  
3736    case 122:
3737   /* Line 1813 of yacc.c  */
3738 < #line 833 "conf_parser.y"
3738 > #line 871 "conf_parser.y"
3739      {
3740    if (conf_parser_ctx.pass == 2)
3741      ltype = LOG_TYPE_USER;
# Line 3706 | Line 3744 | yyreduce:
3744  
3745    case 123:
3746   /* Line 1813 of yacc.c  */
3747 < #line 837 "conf_parser.y"
3747 > #line 875 "conf_parser.y"
3748      {
3749    if (conf_parser_ctx.pass == 2)
3750      ltype = LOG_TYPE_OPER;
# Line 3715 | Line 3753 | yyreduce:
3753  
3754    case 124:
3755   /* Line 1813 of yacc.c  */
3756 < #line 841 "conf_parser.y"
3756 > #line 879 "conf_parser.y"
3757      {
3758    if (conf_parser_ctx.pass == 2)
3759      ltype = LOG_TYPE_GLINE;
# Line 3724 | Line 3762 | yyreduce:
3762  
3763    case 125:
3764   /* Line 1813 of yacc.c  */
3765 < #line 845 "conf_parser.y"
3765 > #line 883 "conf_parser.y"
3766      {
3767    if (conf_parser_ctx.pass == 2)
3768      ltype = LOG_TYPE_DLINE;
# Line 3733 | Line 3771 | yyreduce:
3771  
3772    case 126:
3773   /* Line 1813 of yacc.c  */
3774 < #line 849 "conf_parser.y"
3774 > #line 887 "conf_parser.y"
3775      {
3776    if (conf_parser_ctx.pass == 2)
3777      ltype = LOG_TYPE_KLINE;
# Line 3742 | Line 3780 | yyreduce:
3780  
3781    case 127:
3782   /* Line 1813 of yacc.c  */
3783 < #line 853 "conf_parser.y"
3783 > #line 891 "conf_parser.y"
3784      {
3785    if (conf_parser_ctx.pass == 2)
3786      ltype = LOG_TYPE_KILL;
# Line 3751 | Line 3789 | yyreduce:
3789  
3790    case 128:
3791   /* Line 1813 of yacc.c  */
3792 < #line 857 "conf_parser.y"
3792 > #line 895 "conf_parser.y"
3793      {
3794    if (conf_parser_ctx.pass == 2)
3795      ltype = LOG_TYPE_DEBUG;
# Line 3760 | Line 3798 | yyreduce:
3798  
3799    case 129:
3800   /* Line 1813 of yacc.c  */
3801 < #line 867 "conf_parser.y"
3801 > #line 905 "conf_parser.y"
3802      {
3803 <  if (conf_parser_ctx.pass == 2)
3804 <  {
3805 <    yy_conf = conf_make(CONF_OPER);
3806 <    SetConfEncrypted(yy_conf); /* Yes, the default is encrypted */
3807 <  }
3770 <  else
3771 <  {
3772 <    MyFree(class_name);
3773 <    class_name = NULL;
3774 <  }
3803 >  if (conf_parser_ctx.pass != 2)
3804 >    break;
3805 >
3806 >  reset_block_state();
3807 >  block_state.flags.value |= CONF_FLAGS_ENCRYPTED;
3808   }
3809      break;
3810  
3811    case 130:
3812   /* Line 1813 of yacc.c  */
3813 < #line 879 "conf_parser.y"
3813 > #line 912 "conf_parser.y"
3814      {
3815 <  if (conf_parser_ctx.pass == 2)
3783 <  {
3784 <    struct CollectItem *yy_tmp;
3785 <    dlink_node *ptr;
3786 <    dlink_node *next_ptr;
3787 <
3788 <    conf_add_class_to_conf(yy_conf, class_name);
3815 >  dlink_node *ptr = NULL;
3816  
3817 <    /* Now, make sure there is a copy of the "base" given oper
3818 <     * block in each of the collected copies
3792 <     */
3817 >  if (conf_parser_ctx.pass != 2)
3818 >    break;
3819  
3820 <    DLINK_FOREACH_SAFE(ptr, next_ptr, col_conf_list.head)
3821 <    {
3822 <      struct MaskItem *new_conf;
3823 <      yy_tmp = ptr->data;
3820 >  if (!block_state.name.buf[0])
3821 >    break;
3822 > #ifdef HAVE_LIBCRYPTO
3823 >  if (!(block_state.file.buf[0] ||
3824 >        block_state.pass.buf[0]))
3825 >    break;
3826 > #else
3827 >  if (!block_state.pass.buf[0])
3828 >    break;
3829 > #endif
3830  
3831 <      new_conf = conf_make(CONF_OPER);
3832 <      new_conf->flags = yy_conf->flags;
3831 >  DLINK_FOREACH(ptr, block_state.mask.list.head)
3832 >  {
3833 >    struct MaskItem *conf = NULL;
3834 >    struct split_nuh_item nuh;
3835  
3836 <      if (yy_conf->name != NULL)
3837 <        DupString(new_conf->name, yy_conf->name);
3838 <      if (yy_tmp->user != NULL)
3839 <        DupString(new_conf->user, yy_tmp->user);
3840 <      else
3841 <        DupString(new_conf->user, "*");
3842 <      if (yy_tmp->host != NULL)
3843 <        DupString(new_conf->host, yy_tmp->host);
3810 <      else
3811 <        DupString(new_conf->host, "*");
3836 >    nuh.nuhmask  = ptr->data;
3837 >    nuh.nickptr  = NULL;
3838 >    nuh.userptr  = userbuf;
3839 >    nuh.hostptr  = hostbuf;
3840 >    nuh.nicksize = 0;
3841 >    nuh.usersize = sizeof(userbuf);
3842 >    nuh.hostsize = sizeof(hostbuf);
3843 >    split_nuh(&nuh);
3844  
3845 <      new_conf->htype = parse_netmask(new_conf->host, &new_conf->addr,
3846 <                                     &new_conf->bits);
3845 >    conf        = conf_make(CONF_OPER);
3846 >    conf->user  = xstrdup(userbuf);
3847 >    conf->host  = xstrdup(hostbuf);
3848 >
3849 >    if (block_state.pass.buf[0])
3850 >      conf->passwd = xstrdup(block_state.pass.buf);
3851 >
3852 >    conf->flags = block_state.flags.value;
3853 >    conf->modes = block_state.modes.value;
3854 >    conf->port  = block_state.port.value;
3855 >    conf->htype = parse_netmask(conf->host, &conf->addr, &conf->bits);
3856  
3857 <      conf_add_class_to_conf(new_conf, class_name);
3817 <      if (yy_conf->passwd != NULL)
3818 <        DupString(new_conf->passwd, yy_conf->passwd);
3857 >    conf_add_class_to_conf(conf, block_state.class.buf);
3858  
3820      new_conf->port = yy_conf->port;
3859   #ifdef HAVE_LIBCRYPTO
3860 <      if (yy_conf->rsa_public_key_file != NULL)
3861 <      {
3862 <        BIO *file;
3863 <
3826 <        DupString(new_conf->rsa_public_key_file,
3827 <                  yy_conf->rsa_public_key_file);
3860 >    if (block_state.file.buf[0])
3861 >    {
3862 >      BIO *file = NULL;
3863 >      RSA *pkey = NULL;
3864  
3865 <        file = BIO_new_file(yy_conf->rsa_public_key_file, "r");
3866 <        new_conf->rsa_public_key = PEM_read_bio_RSA_PUBKEY(file,
3867 <                                                           NULL, 0, NULL);
3868 <        BIO_set_close(file, BIO_CLOSE);
3833 <        BIO_free(file);
3865 >      if ((file = BIO_new_file(block_state.file.buf, "r")) == NULL)
3866 >      {
3867 >        yyerror("Ignoring rsa_public_key_file -- file doesn't exist");
3868 >        break;
3869        }
3835 #endif
3870  
3871 < #ifdef HAVE_LIBCRYPTO
3838 <      if (yy_tmp->name && (yy_tmp->passwd || yy_conf->rsa_public_key)
3839 <          && yy_tmp->host)
3840 < #else
3841 <      if (yy_tmp->name && yy_tmp->passwd && yy_tmp->host)
3842 < #endif
3871 >      if ((pkey = PEM_read_bio_RSA_PUBKEY(file, NULL, 0, NULL)) == NULL)
3872        {
3873 <        conf_add_class_to_conf(new_conf, class_name);
3874 <        if (yy_tmp->name != NULL)
3846 <          DupString(new_conf->name, yy_tmp->name);
3873 >        yyerror("Ignoring rsa_public_key_file -- Key invalid; check key syntax.");
3874 >        break;
3875        }
3876  
3877 <      dlinkDelete(&yy_tmp->node, &col_conf_list);
3878 <      free_collect_item(yy_tmp);
3877 >      conf->rsa_public_key = pkey;
3878 >      BIO_set_close(file, BIO_CLOSE);
3879 >      BIO_free(file);
3880      }
3881 <
3853 <    yy_conf = NULL;
3854 <
3855 <    MyFree(class_name);
3856 <    class_name = NULL;
3881 > #endif /* HAVE_LIBCRYPTO */
3882    }
3883   }
3884      break;
3885  
3886    case 142:
3887   /* Line 1813 of yacc.c  */
3888 < #line 964 "conf_parser.y"
3888 > #line 989 "conf_parser.y"
3889      {
3890    if (conf_parser_ctx.pass == 2)
3891 <  {
3867 <    MyFree(yy_conf->name);
3868 <    DupString(yy_conf->name, yylval.string);
3869 <  }
3891 >    strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf));
3892   }
3893      break;
3894  
3895    case 143:
3896   /* Line 1813 of yacc.c  */
3897 < #line 973 "conf_parser.y"
3897 > #line 995 "conf_parser.y"
3898      {
3899    if (conf_parser_ctx.pass == 2)
3900 <  {
3879 <    struct split_nuh_item nuh;
3880 <
3881 <    nuh.nuhmask  = yylval.string;
3882 <    nuh.nickptr  = NULL;
3883 <    nuh.userptr  = userbuf;
3884 <    nuh.hostptr  = hostbuf;
3885 <
3886 <    nuh.nicksize = 0;
3887 <    nuh.usersize = sizeof(userbuf);
3888 <    nuh.hostsize = sizeof(hostbuf);
3889 <
3890 <    split_nuh(&nuh);
3891 <
3892 <    if (yy_conf->user == NULL)
3893 <    {
3894 <      DupString(yy_conf->user, userbuf);
3895 <      DupString(yy_conf->host, hostbuf);
3896 <
3897 <      yy_conf->htype = parse_netmask(yy_conf->host, &yy_conf->addr,
3898 <                                    &yy_conf->bits);
3899 <    }
3900 <    else
3901 <    {
3902 <      struct CollectItem *yy_tmp = MyMalloc(sizeof(struct CollectItem));
3903 <
3904 <      DupString(yy_tmp->user, userbuf);
3905 <      DupString(yy_tmp->host, hostbuf);
3906 <
3907 <      dlinkAdd(yy_tmp, &yy_tmp->node, &col_conf_list);
3908 <    }
3909 <  }
3900 >    dlinkAdd(xstrdup(yylval.string), make_dlink_node(), &block_state.mask.list);
3901   }
3902      break;
3903  
3904    case 144:
3905   /* Line 1813 of yacc.c  */
3906 < #line 1010 "conf_parser.y"
3906 > #line 1001 "conf_parser.y"
3907      {
3908    if (conf_parser_ctx.pass == 2)
3909 <  {
3919 <    if (yy_conf->passwd != NULL)
3920 <      memset(yy_conf->passwd, 0, strlen(yy_conf->passwd));
3921 <
3922 <    MyFree(yy_conf->passwd);
3923 <    DupString(yy_conf->passwd, yylval.string);
3924 <  }
3909 >    strlcpy(block_state.pass.buf, yylval.string, sizeof(block_state.pass.buf));
3910   }
3911      break;
3912  
3913    case 145:
3914   /* Line 1813 of yacc.c  */
3915 < #line 1022 "conf_parser.y"
3915 > #line 1007 "conf_parser.y"
3916      {
3917    if (conf_parser_ctx.pass == 2)
3918    {
3919      if (yylval.number)
3920 <      SetConfEncrypted(yy_conf);
3920 >      block_state.flags.value |= CONF_FLAGS_ENCRYPTED;
3921      else
3922 <      ClearConfEncrypted(yy_conf);
3922 >      block_state.flags.value &= ~CONF_FLAGS_ENCRYPTED;
3923    }
3924   }
3925      break;
3926  
3927    case 146:
3928   /* Line 1813 of yacc.c  */
3929 < #line 1033 "conf_parser.y"
3929 > #line 1018 "conf_parser.y"
3930      {
3946 #ifdef HAVE_LIBCRYPTO
3931    if (conf_parser_ctx.pass == 2)
3932 <  {
3949 <    BIO *file;
3950 <
3951 <    if (yy_conf->rsa_public_key != NULL)
3952 <    {
3953 <      RSA_free(yy_conf->rsa_public_key);
3954 <      yy_conf->rsa_public_key = NULL;
3955 <    }
3956 <
3957 <    if (yy_conf->rsa_public_key_file != NULL)
3958 <    {
3959 <      MyFree(yy_conf->rsa_public_key_file);
3960 <      yy_conf->rsa_public_key_file = NULL;
3961 <    }
3962 <
3963 <    DupString(yy_conf->rsa_public_key_file, yylval.string);
3964 <    file = BIO_new_file(yylval.string, "r");
3965 <
3966 <    if (file == NULL)
3967 <    {
3968 <      yyerror("Ignoring rsa_public_key_file -- file doesn't exist");
3969 <      break;
3970 <    }
3971 <
3972 <    yy_conf->rsa_public_key = PEM_read_bio_RSA_PUBKEY(file, NULL, 0, NULL);
3973 <
3974 <    if (yy_conf->rsa_public_key == NULL)
3975 <    {
3976 <      yyerror("Ignoring rsa_public_key_file -- Key invalid; check key syntax.");
3977 <      break;
3978 <    }
3979 <
3980 <    BIO_set_close(file, BIO_CLOSE);
3981 <    BIO_free(file);
3982 <  }
3983 < #endif /* HAVE_LIBCRYPTO */
3932 >    strlcpy(block_state.file.buf, yylval.string, sizeof(block_state.file.buf));
3933   }
3934      break;
3935  
3936    case 147:
3937   /* Line 1813 of yacc.c  */
3938 < #line 1075 "conf_parser.y"
3938 > #line 1024 "conf_parser.y"
3939      {
3940    if (conf_parser_ctx.pass == 2)
3941 <  {
3993 <    MyFree(class_name);
3994 <    DupString(class_name, yylval.string);
3995 <  }
3941 >    strlcpy(block_state.class.buf, yylval.string, sizeof(block_state.class.buf));
3942   }
3943      break;
3944  
3945    case 148:
3946   /* Line 1813 of yacc.c  */
3947 < #line 1084 "conf_parser.y"
3947 > #line 1030 "conf_parser.y"
3948      {
3949    if (conf_parser_ctx.pass == 2)
3950 <    yy_conf->modes = 0;
3950 >    block_state.modes.value = 0;
3951   }
3952      break;
3953  
3954    case 152:
3955   /* Line 1813 of yacc.c  */
3956 < #line 1091 "conf_parser.y"
3956 > #line 1037 "conf_parser.y"
3957      {
3958    if (conf_parser_ctx.pass == 2)
3959 <    yy_conf->modes |= UMODE_BOTS;
3959 >    block_state.modes.value |= UMODE_BOTS;
3960   }
3961      break;
3962  
3963    case 153:
3964   /* Line 1813 of yacc.c  */
3965 < #line 1095 "conf_parser.y"
3965 > #line 1041 "conf_parser.y"
3966      {
3967    if (conf_parser_ctx.pass == 2)
3968 <    yy_conf->modes |= UMODE_CCONN;
3968 >    block_state.modes.value |= UMODE_CCONN;
3969   }
3970      break;
3971  
3972    case 154:
3973   /* Line 1813 of yacc.c  */
3974 < #line 1099 "conf_parser.y"
3974 > #line 1045 "conf_parser.y"
3975      {
3976    if (conf_parser_ctx.pass == 2)
3977 <    yy_conf->modes |= UMODE_CCONN_FULL;
3977 >    block_state.modes.value |= UMODE_CCONN_FULL;
3978   }
3979      break;
3980  
3981    case 155:
3982   /* Line 1813 of yacc.c  */
3983 < #line 1103 "conf_parser.y"
3983 > #line 1049 "conf_parser.y"
3984      {
3985    if (conf_parser_ctx.pass == 2)
3986 <    yy_conf->modes |= UMODE_DEAF;
3986 >    block_state.modes.value |= UMODE_DEAF;
3987   }
3988      break;
3989  
3990    case 156:
3991   /* Line 1813 of yacc.c  */
3992 < #line 1107 "conf_parser.y"
3992 > #line 1053 "conf_parser.y"
3993      {
3994    if (conf_parser_ctx.pass == 2)
3995 <    yy_conf->modes |= UMODE_DEBUG;
3995 >    block_state.modes.value |= UMODE_DEBUG;
3996   }
3997      break;
3998  
3999    case 157:
4000   /* Line 1813 of yacc.c  */
4001 < #line 1111 "conf_parser.y"
4001 > #line 1057 "conf_parser.y"
4002      {
4003    if (conf_parser_ctx.pass == 2)
4004 <    yy_conf->modes |= UMODE_FULL;
4004 >    block_state.modes.value |= UMODE_FULL;
4005   }
4006      break;
4007  
4008    case 158:
4009   /* Line 1813 of yacc.c  */
4010 < #line 1115 "conf_parser.y"
4010 > #line 1061 "conf_parser.y"
4011      {
4012    if (conf_parser_ctx.pass == 2)
4013 <    yy_conf->modes |= UMODE_HIDDEN;
4013 >    block_state.modes.value |= UMODE_HIDDEN;
4014   }
4015      break;
4016  
4017    case 159:
4018   /* Line 1813 of yacc.c  */
4019 < #line 1119 "conf_parser.y"
4019 > #line 1065 "conf_parser.y"
4020      {
4021    if (conf_parser_ctx.pass == 2)
4022 <    yy_conf->modes |= UMODE_SKILL;
4022 >    block_state.modes.value |= UMODE_SKILL;
4023   }
4024      break;
4025  
4026    case 160:
4027   /* Line 1813 of yacc.c  */
4028 < #line 1123 "conf_parser.y"
4028 > #line 1069 "conf_parser.y"
4029      {
4030    if (conf_parser_ctx.pass == 2)
4031 <    yy_conf->modes |= UMODE_NCHANGE;
4031 >    block_state.modes.value |= UMODE_NCHANGE;
4032   }
4033      break;
4034  
4035    case 161:
4036   /* Line 1813 of yacc.c  */
4037 < #line 1127 "conf_parser.y"
4037 > #line 1073 "conf_parser.y"
4038      {
4039    if (conf_parser_ctx.pass == 2)
4040 <    yy_conf->modes |= UMODE_REJ;
4040 >    block_state.modes.value |= UMODE_REJ;
4041   }
4042      break;
4043  
4044    case 162:
4045   /* Line 1813 of yacc.c  */
4046 < #line 1131 "conf_parser.y"
4046 > #line 1077 "conf_parser.y"
4047      {
4048    if (conf_parser_ctx.pass == 2)
4049 <    yy_conf->modes |= UMODE_UNAUTH;
4049 >    block_state.modes.value |= UMODE_UNAUTH;
4050   }
4051      break;
4052  
4053    case 163:
4054   /* Line 1813 of yacc.c  */
4055 < #line 1135 "conf_parser.y"
4055 > #line 1081 "conf_parser.y"
4056      {
4057    if (conf_parser_ctx.pass == 2)
4058 <    yy_conf->modes |= UMODE_SPY;
4058 >    block_state.modes.value |= UMODE_SPY;
4059   }
4060      break;
4061  
4062    case 164:
4063   /* Line 1813 of yacc.c  */
4064 < #line 1139 "conf_parser.y"
4064 > #line 1085 "conf_parser.y"
4065      {
4066    if (conf_parser_ctx.pass == 2)
4067 <    yy_conf->modes |= UMODE_EXTERNAL;
4067 >    block_state.modes.value |= UMODE_EXTERNAL;
4068   }
4069      break;
4070  
4071    case 165:
4072   /* Line 1813 of yacc.c  */
4073 < #line 1143 "conf_parser.y"
4073 > #line 1089 "conf_parser.y"
4074      {
4075    if (conf_parser_ctx.pass == 2)
4076 <    yy_conf->modes |= UMODE_OPERWALL;
4076 >    block_state.modes.value |= UMODE_OPERWALL;
4077   }
4078      break;
4079  
4080    case 166:
4081   /* Line 1813 of yacc.c  */
4082 < #line 1147 "conf_parser.y"
4082 > #line 1093 "conf_parser.y"
4083      {
4084    if (conf_parser_ctx.pass == 2)
4085 <    yy_conf->modes |= UMODE_SERVNOTICE;
4085 >    block_state.modes.value |= UMODE_SERVNOTICE;
4086   }
4087      break;
4088  
4089    case 167:
4090   /* Line 1813 of yacc.c  */
4091 < #line 1151 "conf_parser.y"
4091 > #line 1097 "conf_parser.y"
4092      {
4093    if (conf_parser_ctx.pass == 2)
4094 <    yy_conf->modes |= UMODE_INVISIBLE;
4094 >    block_state.modes.value |= UMODE_INVISIBLE;
4095   }
4096      break;
4097  
4098    case 168:
4099   /* Line 1813 of yacc.c  */
4100 < #line 1155 "conf_parser.y"
4100 > #line 1101 "conf_parser.y"
4101      {
4102    if (conf_parser_ctx.pass == 2)
4103 <    yy_conf->modes |= UMODE_WALLOP;
4103 >    block_state.modes.value |= UMODE_WALLOP;
4104   }
4105      break;
4106  
4107    case 169:
4108   /* Line 1813 of yacc.c  */
4109 < #line 1159 "conf_parser.y"
4109 > #line 1105 "conf_parser.y"
4110      {
4111    if (conf_parser_ctx.pass == 2)
4112 <    yy_conf->modes |= UMODE_SOFTCALLERID;
4112 >    block_state.modes.value |= UMODE_SOFTCALLERID;
4113   }
4114      break;
4115  
4116    case 170:
4117   /* Line 1813 of yacc.c  */
4118 < #line 1163 "conf_parser.y"
4118 > #line 1109 "conf_parser.y"
4119      {
4120    if (conf_parser_ctx.pass == 2)
4121 <    yy_conf->modes |= UMODE_CALLERID;
4121 >    block_state.modes.value |= UMODE_CALLERID;
4122   }
4123      break;
4124  
4125    case 171:
4126   /* Line 1813 of yacc.c  */
4127 < #line 1167 "conf_parser.y"
4127 > #line 1113 "conf_parser.y"
4128      {
4129    if (conf_parser_ctx.pass == 2)
4130 <    yy_conf->modes |= UMODE_LOCOPS;
4130 >    block_state.modes.value |= UMODE_LOCOPS;
4131   }
4132      break;
4133  
4134    case 172:
4135   /* Line 1813 of yacc.c  */
4136 < #line 1173 "conf_parser.y"
4136 > #line 1119 "conf_parser.y"
4137      {
4138    if (conf_parser_ctx.pass == 2)
4139 <    yy_conf->port = 0;
4139 >    block_state.port.value = 0;
4140   }
4141      break;
4142  
4143    case 176:
4144   /* Line 1813 of yacc.c  */
4145 < #line 1180 "conf_parser.y"
4145 > #line 1126 "conf_parser.y"
4146      {
4147    if (conf_parser_ctx.pass == 2)
4148 <    yy_conf->port |= OPER_FLAG_GLOBAL_KILL;
4148 >    block_state.port.value |= OPER_FLAG_GLOBAL_KILL;
4149   }
4150      break;
4151  
4152    case 177:
4153   /* Line 1813 of yacc.c  */
4154 < #line 1184 "conf_parser.y"
4154 > #line 1130 "conf_parser.y"
4155      {
4156    if (conf_parser_ctx.pass == 2)
4157 <    yy_conf->port |= OPER_FLAG_REMOTE;
4157 >    block_state.port.value |= OPER_FLAG_REMOTE;
4158   }
4159      break;
4160  
4161    case 178:
4162   /* Line 1813 of yacc.c  */
4163 < #line 1188 "conf_parser.y"
4163 > #line 1134 "conf_parser.y"
4164      {
4165    if (conf_parser_ctx.pass == 2)
4166 <    yy_conf->port |= OPER_FLAG_K;
4166 >    block_state.port.value |= OPER_FLAG_K;
4167   }
4168      break;
4169  
4170    case 179:
4171   /* Line 1813 of yacc.c  */
4172 < #line 1192 "conf_parser.y"
4172 > #line 1138 "conf_parser.y"
4173      {
4174    if (conf_parser_ctx.pass == 2)
4175 <    yy_conf->port |= OPER_FLAG_UNKLINE;
4175 >    block_state.port.value |= OPER_FLAG_UNKLINE;
4176   }
4177      break;
4178  
4179    case 180:
4180   /* Line 1813 of yacc.c  */
4181 < #line 1196 "conf_parser.y"
4181 > #line 1142 "conf_parser.y"
4182      {
4183    if (conf_parser_ctx.pass == 2)
4184 <    yy_conf->port |= OPER_FLAG_DLINE;
4184 >    block_state.port.value |= OPER_FLAG_DLINE;
4185   }
4186      break;
4187  
4188    case 181:
4189   /* Line 1813 of yacc.c  */
4190 < #line 1200 "conf_parser.y"
4190 > #line 1146 "conf_parser.y"
4191      {
4192    if (conf_parser_ctx.pass == 2)
4193 <    yy_conf->port |= OPER_FLAG_UNDLINE;
4193 >    block_state.port.value |= OPER_FLAG_UNDLINE;
4194   }
4195      break;
4196  
4197    case 182:
4198   /* Line 1813 of yacc.c  */
4199 < #line 1204 "conf_parser.y"
4199 > #line 1150 "conf_parser.y"
4200      {
4201    if (conf_parser_ctx.pass == 2)
4202 <    yy_conf->port |= OPER_FLAG_X;
4202 >    block_state.port.value |= OPER_FLAG_X;
4203   }
4204      break;
4205  
4206    case 183:
4207   /* Line 1813 of yacc.c  */
4208 < #line 1208 "conf_parser.y"
4208 > #line 1154 "conf_parser.y"
4209      {
4210    if (conf_parser_ctx.pass == 2)
4211 <    yy_conf->port |= OPER_FLAG_GLINE;
4211 >    block_state.port.value |= OPER_FLAG_GLINE;
4212   }
4213      break;
4214  
4215    case 184:
4216   /* Line 1813 of yacc.c  */
4217 < #line 1212 "conf_parser.y"
4217 > #line 1158 "conf_parser.y"
4218      {
4219    if (conf_parser_ctx.pass == 2)
4220 <    yy_conf->port |= OPER_FLAG_DIE;
4220 >    block_state.port.value |= OPER_FLAG_DIE;
4221   }
4222      break;
4223  
4224    case 185:
4225   /* Line 1813 of yacc.c  */
4226 < #line 1216 "conf_parser.y"
4226 > #line 1162 "conf_parser.y"
4227      {
4228    if (conf_parser_ctx.pass == 2)
4229 <    yy_conf->port |= OPER_FLAG_RESTART;
4229 >    block_state.port.value |= OPER_FLAG_RESTART;
4230   }
4231      break;
4232  
4233    case 186:
4234   /* Line 1813 of yacc.c  */
4235 < #line 1220 "conf_parser.y"
4235 > #line 1166 "conf_parser.y"
4236      {
4237    if (conf_parser_ctx.pass == 2)
4238 <    yy_conf->port |= OPER_FLAG_REHASH;
4238 >    block_state.port.value |= OPER_FLAG_REHASH;
4239   }
4240      break;
4241  
4242    case 187:
4243   /* Line 1813 of yacc.c  */
4244 < #line 1224 "conf_parser.y"
4244 > #line 1170 "conf_parser.y"
4245      {
4246    if (conf_parser_ctx.pass == 2)
4247 <    yy_conf->port |= OPER_FLAG_ADMIN;
4247 >    block_state.port.value |= OPER_FLAG_ADMIN;
4248   }
4249      break;
4250  
4251    case 188:
4252   /* Line 1813 of yacc.c  */
4253 < #line 1228 "conf_parser.y"
4253 > #line 1174 "conf_parser.y"
4254      {
4255    if (conf_parser_ctx.pass == 2)
4256 <    yy_conf->port |= OPER_FLAG_N;
4256 >    block_state.port.value |= OPER_FLAG_N;
4257   }
4258      break;
4259  
4260    case 189:
4261   /* Line 1813 of yacc.c  */
4262 < #line 1232 "conf_parser.y"
4262 > #line 1178 "conf_parser.y"
4263      {
4264    if (conf_parser_ctx.pass == 2)
4265 <    yy_conf->port |= OPER_FLAG_OPERWALL;
4265 >    block_state.port.value |= OPER_FLAG_OPERWALL;
4266   }
4267      break;
4268  
4269    case 190:
4270   /* Line 1813 of yacc.c  */
4271 < #line 1236 "conf_parser.y"
4271 > #line 1182 "conf_parser.y"
4272      {
4273    if (conf_parser_ctx.pass == 2)
4274 <    yy_conf->port |= OPER_FLAG_GLOBOPS;
4274 >    block_state.port.value |= OPER_FLAG_GLOBOPS;
4275   }
4276      break;
4277  
4278    case 191:
4279   /* Line 1813 of yacc.c  */
4280 < #line 1240 "conf_parser.y"
4280 > #line 1186 "conf_parser.y"
4281      {
4282    if (conf_parser_ctx.pass == 2)
4283 <    yy_conf->port |= OPER_FLAG_OPER_SPY;
4283 >    block_state.port.value |= OPER_FLAG_OPER_SPY;
4284   }
4285      break;
4286  
4287    case 192:
4288   /* Line 1813 of yacc.c  */
4289 < #line 1244 "conf_parser.y"
4289 > #line 1190 "conf_parser.y"
4290      {
4291    if (conf_parser_ctx.pass == 2)
4292 <    yy_conf->port |= OPER_FLAG_REMOTEBAN;
4292 >    block_state.port.value |= OPER_FLAG_REMOTEBAN;
4293   }
4294      break;
4295  
4296    case 193:
4297   /* Line 1813 of yacc.c  */
4298 < #line 1248 "conf_parser.y"
4298 > #line 1194 "conf_parser.y"
4299      {
4300    if (conf_parser_ctx.pass == 2)
4301 <    yy_conf->port |= OPER_FLAG_SET;
4301 >    block_state.port.value |= OPER_FLAG_SET;
4302   }
4303      break;
4304  
4305    case 194:
4306   /* Line 1813 of yacc.c  */
4307 < #line 1252 "conf_parser.y"
4307 > #line 1198 "conf_parser.y"
4308      {
4309    if (conf_parser_ctx.pass == 2)
4310 <    yy_conf->port |= OPER_FLAG_MODULE;
4310 >    block_state.port.value |= OPER_FLAG_MODULE;
4311   }
4312      break;
4313  
4314    case 195:
4315   /* Line 1813 of yacc.c  */
4316 < #line 1262 "conf_parser.y"
4316 > #line 1208 "conf_parser.y"
4317      {
4318    if (conf_parser_ctx.pass == 1)
4319    {
# Line 4378 | Line 4324 | yyreduce:
4324  
4325    case 196:
4326   /* Line 1813 of yacc.c  */
4327 < #line 1268 "conf_parser.y"
4327 > #line 1214 "conf_parser.y"
4328      {
4329    if (conf_parser_ctx.pass == 1)
4330    {
# Line 4421 | Line 4367 | yyreduce:
4367  
4368    case 213:
4369   /* Line 1813 of yacc.c  */
4370 < #line 1322 "conf_parser.y"
4370 > #line 1268 "conf_parser.y"
4371      {
4372    if (conf_parser_ctx.pass == 1)
4373    {
4374      MyFree(yy_class_name);
4375 <    DupString(yy_class_name, yylval.string);
4375 >    yy_class_name = xstrdup(yylval.string);
4376    }
4377   }
4378      break;
4379  
4380    case 214:
4381   /* Line 1813 of yacc.c  */
4382 < #line 1331 "conf_parser.y"
4382 > #line 1277 "conf_parser.y"
4383      {
4384    if (conf_parser_ctx.pass == 1)
4385      yy_class->ping_freq = (yyvsp[(3) - (4)].number);
# Line 4442 | Line 4388 | yyreduce:
4388  
4389    case 215:
4390   /* Line 1813 of yacc.c  */
4391 < #line 1337 "conf_parser.y"
4391 > #line 1283 "conf_parser.y"
4392      {
4393    if (conf_parser_ctx.pass == 1)
4394      yy_class->max_perip = (yyvsp[(3) - (4)].number);
# Line 4451 | Line 4397 | yyreduce:
4397  
4398    case 216:
4399   /* Line 1813 of yacc.c  */
4400 < #line 1343 "conf_parser.y"
4400 > #line 1289 "conf_parser.y"
4401      {
4402    if (conf_parser_ctx.pass == 1)
4403      yy_class->con_freq = (yyvsp[(3) - (4)].number);
# Line 4460 | Line 4406 | yyreduce:
4406  
4407    case 217:
4408   /* Line 1813 of yacc.c  */
4409 < #line 1349 "conf_parser.y"
4409 > #line 1295 "conf_parser.y"
4410      {
4411    if (conf_parser_ctx.pass == 1)
4412      yy_class->max_total = (yyvsp[(3) - (4)].number);
# Line 4469 | Line 4415 | yyreduce:
4415  
4416    case 218:
4417   /* Line 1813 of yacc.c  */
4418 < #line 1355 "conf_parser.y"
4418 > #line 1301 "conf_parser.y"
4419      {
4420    if (conf_parser_ctx.pass == 1)
4421      yy_class->max_global = (yyvsp[(3) - (4)].number);
# Line 4478 | Line 4424 | yyreduce:
4424  
4425    case 219:
4426   /* Line 1813 of yacc.c  */
4427 < #line 1361 "conf_parser.y"
4427 > #line 1307 "conf_parser.y"
4428      {
4429    if (conf_parser_ctx.pass == 1)
4430      yy_class->max_local = (yyvsp[(3) - (4)].number);
# Line 4487 | Line 4433 | yyreduce:
4433  
4434    case 220:
4435   /* Line 1813 of yacc.c  */
4436 < #line 1367 "conf_parser.y"
4436 > #line 1313 "conf_parser.y"
4437      {
4438    if (conf_parser_ctx.pass == 1)
4439      yy_class->max_ident = (yyvsp[(3) - (4)].number);
# Line 4496 | Line 4442 | yyreduce:
4442  
4443    case 221:
4444   /* Line 1813 of yacc.c  */
4445 < #line 1373 "conf_parser.y"
4445 > #line 1319 "conf_parser.y"
4446      {
4447    if (conf_parser_ctx.pass == 1)
4448      yy_class->max_sendq = (yyvsp[(3) - (4)].number);
# Line 4505 | Line 4451 | yyreduce:
4451  
4452    case 222:
4453   /* Line 1813 of yacc.c  */
4454 < #line 1379 "conf_parser.y"
4454 > #line 1325 "conf_parser.y"
4455      {
4456    if (conf_parser_ctx.pass == 1)
4457      if ((yyvsp[(3) - (4)].number) >= CLIENT_FLOOD_MIN && (yyvsp[(3) - (4)].number) <= CLIENT_FLOOD_MAX)
# Line 4515 | Line 4461 | yyreduce:
4461  
4462    case 223:
4463   /* Line 1813 of yacc.c  */
4464 < #line 1386 "conf_parser.y"
4464 > #line 1332 "conf_parser.y"
4465      {
4466    if (conf_parser_ctx.pass == 1)
4467      yy_class->cidr_bitlen_ipv4 = (yyvsp[(3) - (4)].number) > 32 ? 32 : (yyvsp[(3) - (4)].number);
# Line 4524 | Line 4470 | yyreduce:
4470  
4471    case 224:
4472   /* Line 1813 of yacc.c  */
4473 < #line 1392 "conf_parser.y"
4473 > #line 1338 "conf_parser.y"
4474      {
4475    if (conf_parser_ctx.pass == 1)
4476      yy_class->cidr_bitlen_ipv6 = (yyvsp[(3) - (4)].number) > 128 ? 128 : (yyvsp[(3) - (4)].number);
# Line 4533 | Line 4479 | yyreduce:
4479  
4480    case 225:
4481   /* Line 1813 of yacc.c  */
4482 < #line 1398 "conf_parser.y"
4482 > #line 1344 "conf_parser.y"
4483      {
4484    if (conf_parser_ctx.pass == 1)
4485      yy_class->number_per_cidr = (yyvsp[(3) - (4)].number);
# Line 4542 | Line 4488 | yyreduce:
4488  
4489    case 226:
4490   /* Line 1813 of yacc.c  */
4491 < #line 1407 "conf_parser.y"
4546 <    {
4547 <  if (conf_parser_ctx.pass == 2)
4548 <  {
4549 <    listener_address = NULL;
4550 <    listener_flags = 0;
4551 <  }
4552 < }
4553 <    break;
4554 <
4555 <  case 227:
4556 < /* Line 1813 of yacc.c  */
4557 < #line 1414 "conf_parser.y"
4491 > #line 1353 "conf_parser.y"
4492      {
4493    if (conf_parser_ctx.pass == 2)
4494 <  {
4561 <    MyFree(listener_address);
4562 <    listener_address = NULL;
4563 <  }
4494 >    reset_block_state();
4495   }
4496      break;
4497  
4498    case 228:
4499   /* Line 1813 of yacc.c  */
4500 < #line 1423 "conf_parser.y"
4500 > #line 1359 "conf_parser.y"
4501      {
4502 <  listener_flags = 0;
4502 >  block_state.flags.value = 0;
4503   }
4504      break;
4505  
4506    case 232:
4507   /* Line 1813 of yacc.c  */
4508 < #line 1429 "conf_parser.y"
4508 > #line 1365 "conf_parser.y"
4509      {
4510    if (conf_parser_ctx.pass == 2)
4511 <    listener_flags |= LISTENER_SSL;
4511 >    block_state.flags.value |= LISTENER_SSL;
4512   }
4513      break;
4514  
4515    case 233:
4516   /* Line 1813 of yacc.c  */
4517 < #line 1433 "conf_parser.y"
4517 > #line 1369 "conf_parser.y"
4518      {
4519    if (conf_parser_ctx.pass == 2)
4520 <    listener_flags |= LISTENER_HIDDEN;
4520 >    block_state.flags.value |=LISTENER_HIDDEN;
4521   }
4522      break;
4523  
4524    case 234:
4525   /* Line 1813 of yacc.c  */
4526 < #line 1437 "conf_parser.y"
4526 > #line 1373 "conf_parser.y"
4527      {
4528    if (conf_parser_ctx.pass == 2)
4529 <    listener_flags |= LISTENER_SERVER;
4529 >   block_state.flags.value |=LISTENER_SERVER;
4530   }
4531      break;
4532  
4533    case 242:
4534   /* Line 1813 of yacc.c  */
4535 < #line 1447 "conf_parser.y"
4536 <    { listener_flags = 0; }
4535 > #line 1381 "conf_parser.y"
4536 >    { block_state.flags.value |= 0; }
4537      break;
4538  
4539    case 246:
4540   /* Line 1813 of yacc.c  */
4541 < #line 1452 "conf_parser.y"
4541 > #line 1386 "conf_parser.y"
4542      {
4543    if (conf_parser_ctx.pass == 2)
4544    {
4545 <    if ((listener_flags & LISTENER_SSL))
4545 >    if (block_state.flags.value & LISTENER_SSL)
4546   #ifdef HAVE_LIBCRYPTO
4547        if (!ServerInfo.server_ctx)
4548   #endif
# Line 4619 | Line 4550 | yyreduce:
4550          yyerror("SSL not available - port closed");
4551          break;
4552        }
4553 <    add_listener((yyvsp[(1) - (1)].number), listener_address, listener_flags);
4553 >    add_listener((yyvsp[(1) - (1)].number), block_state.addr.buf, block_state.flags.value);
4554    }
4555   }
4556      break;
4557  
4558    case 247:
4559   /* Line 1813 of yacc.c  */
4560 < #line 1466 "conf_parser.y"
4560 > #line 1400 "conf_parser.y"
4561      {
4562    if (conf_parser_ctx.pass == 2)
4563    {
4564      int i;
4565  
4566 <    if ((listener_flags & LISTENER_SSL))
4566 >    if (block_state.flags.value & LISTENER_SSL)
4567   #ifdef HAVE_LIBCRYPTO
4568        if (!ServerInfo.server_ctx)
4569   #endif
# Line 4642 | Line 4573 | yyreduce:
4573        }
4574  
4575      for (i = (yyvsp[(1) - (3)].number); i <= (yyvsp[(3) - (3)].number); ++i)
4576 <      add_listener(i, listener_address, listener_flags);
4576 >      add_listener(i, block_state.addr.buf, block_state.flags.value);
4577    }
4578   }
4579      break;
4580  
4581    case 248:
4582   /* Line 1813 of yacc.c  */
4583 < #line 1486 "conf_parser.y"
4583 > #line 1420 "conf_parser.y"
4584      {
4585    if (conf_parser_ctx.pass == 2)
4586 <  {
4656 <    MyFree(listener_address);
4657 <    DupString(listener_address, yylval.string);
4658 <  }
4586 >    strlcpy(block_state.addr.buf, yylval.string, sizeof(block_state.addr.buf));
4587   }
4588      break;
4589  
4590    case 249:
4591   /* Line 1813 of yacc.c  */
4592 < #line 1495 "conf_parser.y"
4592 > #line 1426 "conf_parser.y"
4593      {
4594    if (conf_parser_ctx.pass == 2)
4595 <  {
4668 <    MyFree(listener_address);
4669 <    DupString(listener_address, yylval.string);
4670 <  }
4595 >    strlcpy(block_state.addr.buf, yylval.string, sizeof(block_state.addr.buf));
4596   }
4597      break;
4598  
4599    case 250:
4600   /* Line 1813 of yacc.c  */
4601 < #line 1507 "conf_parser.y"
4601 > #line 1435 "conf_parser.y"
4602      {
4603    if (conf_parser_ctx.pass == 2)
4604 <  {
4680 <    yy_conf = conf_make(CONF_CLIENT);
4681 <  }
4682 <  else
4683 <  {
4684 <    MyFree(class_name);
4685 <    class_name = NULL;
4686 <  }
4604 >    reset_block_state();
4605   }
4606      break;
4607  
4608    case 251:
4609   /* Line 1813 of yacc.c  */
4610 < #line 1518 "conf_parser.y"
4693 <    {
4694 <  if (conf_parser_ctx.pass == 2)
4695 <  {
4696 <    struct CollectItem *yy_tmp = NULL;
4697 <    dlink_node *ptr = NULL, *next_ptr = NULL;
4698 <
4699 <    if (yy_conf->user && yy_conf->host)
4610 > #line 1439 "conf_parser.y"
4611      {
4612 <      conf_add_class_to_conf(yy_conf, class_name);
4702 <      add_conf_by_address(CONF_CLIENT, yy_conf);
4703 <    }
4704 <    else
4705 <      conf_free(yy_conf);
4706 <
4707 <    /* copy over settings from first struct */
4708 <    DLINK_FOREACH_SAFE(ptr, next_ptr, col_conf_list.head)
4709 <    {
4710 <      struct MaskItem *new_conf = conf_make(CONF_CLIENT);
4711 <
4712 <      yy_tmp = ptr->data;
4612 >  dlink_node *ptr = NULL;
4613  
4614 <      assert(yy_tmp->user && yy_tmp->host);
4715 <
4716 <      if (yy_conf->passwd != NULL)
4717 <        DupString(new_conf->passwd, yy_conf->passwd);
4718 <      if (yy_conf->name != NULL)
4719 <        DupString(new_conf->name, yy_conf->name);
4720 <      if (yy_conf->passwd != NULL)
4721 <        DupString(new_conf->passwd, yy_conf->passwd);
4722 <
4723 <      new_conf->flags = yy_conf->flags;
4724 <      new_conf->port  = yy_conf->port;
4725 <
4726 <      DupString(new_conf->user, yy_tmp->user);
4727 <      collapse(new_conf->user);
4728 <
4729 <      DupString(new_conf->host, yy_tmp->host);
4730 <      collapse(new_conf->host);
4731 <
4732 <      conf_add_class_to_conf(new_conf, class_name);
4733 <      add_conf_by_address(CONF_CLIENT, new_conf);
4734 <      dlinkDelete(&yy_tmp->node, &col_conf_list);
4735 <      free_collect_item(yy_tmp);
4736 <    }
4737 <
4738 <    MyFree(class_name);
4739 <    class_name = NULL;
4740 <    yy_conf = NULL;
4741 <  }
4742 < }
4614 >  if (conf_parser_ctx.pass != 2)
4615      break;
4616  
4617 <  case 263:
4746 < /* Line 1813 of yacc.c  */
4747 < #line 1575 "conf_parser.y"
4748 <    {
4749 <  if (conf_parser_ctx.pass == 2)
4617 >  DLINK_FOREACH(ptr, block_state.mask.list.head)
4618    {
4619 <    struct CollectItem *yy_tmp = NULL;
4619 >    struct MaskItem *conf = NULL;
4620      struct split_nuh_item nuh;
4621  
4622 <    nuh.nuhmask  = yylval.string;
4622 >    nuh.nuhmask  = ptr->data;
4623      nuh.nickptr  = NULL;
4624      nuh.userptr  = userbuf;
4625      nuh.hostptr  = hostbuf;
4758
4626      nuh.nicksize = 0;
4627      nuh.usersize = sizeof(userbuf);
4628      nuh.hostsize = sizeof(hostbuf);
4762
4629      split_nuh(&nuh);
4630  
4631 <    if (yy_conf->user == NULL)
4632 <    {
4633 <      DupString(yy_conf->user, userbuf);
4634 <      DupString(yy_conf->host, hostbuf);
4635 <    }
4636 <    else
4637 <    {
4638 <      yy_tmp = MyMalloc(sizeof(struct CollectItem));
4631 >    conf        = conf_make(CONF_CLIENT);
4632 >    conf->user  = xstrdup(collapse(userbuf));
4633 >    conf->host  = xstrdup(collapse(hostbuf));
4634 >
4635 >    if (block_state.pass.buf[0])
4636 >      conf->passwd = xstrdup(block_state.pass.buf);
4637 >    if (block_state.name.buf[0])
4638 >      conf->passwd = xstrdup(block_state.name.buf);
4639  
4640 <      DupString(yy_tmp->user, userbuf);
4641 <      DupString(yy_tmp->host, hostbuf);
4640 >    conf->flags = block_state.flags.value;
4641 >    conf->port  = block_state.port.value;
4642  
4643 <      dlinkAdd(yy_tmp, &yy_tmp->node, &col_conf_list);
4644 <    }
4643 >    conf_add_class_to_conf(conf, block_state.class.buf);
4644 >    add_conf_by_address(CONF_CLIENT, conf);
4645    }
4646   }
4647      break;
4648  
4649 <  case 264:
4649 >  case 263:
4650   /* Line 1813 of yacc.c  */
4651 < #line 1610 "conf_parser.y"
4651 > #line 1482 "conf_parser.y"
4652      {
4653    if (conf_parser_ctx.pass == 2)
4654 <  {
4655 <    /* be paranoid */
4656 <    if (yy_conf->passwd != NULL)
4791 <      memset(yy_conf->passwd, 0, strlen(yy_conf->passwd));
4654 >    dlinkAdd(xstrdup(yylval.string), make_dlink_node(), &block_state.mask.list);
4655 > }
4656 >    break;
4657  
4658 <    MyFree(yy_conf->passwd);
4659 <    DupString(yy_conf->passwd, yylval.string);
4660 <  }
4658 >  case 264:
4659 > /* Line 1813 of yacc.c  */
4660 > #line 1488 "conf_parser.y"
4661 >    {
4662 >  if (conf_parser_ctx.pass == 2)
4663 >    strlcpy(block_state.pass.buf, yylval.string, sizeof(block_state.pass.buf));
4664   }
4665      break;
4666  
4667    case 265:
4668   /* Line 1813 of yacc.c  */
4669 < #line 1623 "conf_parser.y"
4669 > #line 1494 "conf_parser.y"
4670      {
4671    if (conf_parser_ctx.pass == 2)
4672 <  {
4805 <    MyFree(class_name);
4806 <    DupString(class_name, yylval.string);
4807 <  }
4672 >    strlcpy(block_state.class.buf, yylval.string, sizeof(block_state.class.buf));
4673   }
4674      break;
4675  
4676    case 266:
4677   /* Line 1813 of yacc.c  */
4678 < #line 1632 "conf_parser.y"
4678 > #line 1500 "conf_parser.y"
4679      {
4680    if (conf_parser_ctx.pass == 2)
4681    {
4682      if (yylval.number)
4683 <      SetConfEncrypted(yy_conf);
4683 >      block_state.flags.value |= CONF_FLAGS_ENCRYPTED;
4684      else
4685 <      ClearConfEncrypted(yy_conf);
4685 >      block_state.flags.value &= ~CONF_FLAGS_ENCRYPTED;
4686    }
4687   }
4688      break;
4689  
4690    case 267:
4691   /* Line 1813 of yacc.c  */
4692 < #line 1643 "conf_parser.y"
4692 > #line 1511 "conf_parser.y"
4693      {
4694 +  if (conf_parser_ctx.pass == 2)
4695 +    block_state.flags.value = 0;
4696   }
4697      break;
4698  
4699    case 271:
4700   /* Line 1813 of yacc.c  */
4701 < #line 1648 "conf_parser.y"
4701 > #line 1518 "conf_parser.y"
4702      {
4703    if (conf_parser_ctx.pass == 2)
4704 <    yy_conf->flags |= CONF_FLAGS_SPOOF_NOTICE;
4704 >    block_state.flags.value |= CONF_FLAGS_SPOOF_NOTICE;
4705   }
4706      break;
4707  
4708    case 272:
4709   /* Line 1813 of yacc.c  */
4710 < #line 1652 "conf_parser.y"
4710 > #line 1522 "conf_parser.y"
4711      {
4712    if (conf_parser_ctx.pass == 2)
4713 <    yy_conf->flags |= CONF_FLAGS_NOLIMIT;
4713 >    block_state.flags.value |= CONF_FLAGS_NOLIMIT;
4714   }
4715      break;
4716  
4717    case 273:
4718   /* Line 1813 of yacc.c  */
4719 < #line 1656 "conf_parser.y"
4719 > #line 1526 "conf_parser.y"
4720      {
4721    if (conf_parser_ctx.pass == 2)
4722 <    yy_conf->flags |= CONF_FLAGS_EXEMPTKLINE;
4722 >    block_state.flags.value |= CONF_FLAGS_EXEMPTKLINE;
4723   }
4724      break;
4725  
4726    case 274:
4727   /* Line 1813 of yacc.c  */
4728 < #line 1660 "conf_parser.y"
4728 > #line 1530 "conf_parser.y"
4729      {
4730    if (conf_parser_ctx.pass == 2)
4731 <    yy_conf->flags |= CONF_FLAGS_NEED_IDENTD;
4731 >    block_state.flags.value |= CONF_FLAGS_NEED_IDENTD;
4732   }
4733      break;
4734  
4735    case 275:
4736   /* Line 1813 of yacc.c  */
4737 < #line 1664 "conf_parser.y"
4737 > #line 1534 "conf_parser.y"
4738      {
4739    if (conf_parser_ctx.pass == 2)
4740 <    yy_conf->flags |= CONF_FLAGS_CAN_FLOOD;
4740 >    block_state.flags.value |= CONF_FLAGS_CAN_FLOOD;
4741   }
4742      break;
4743  
4744    case 276:
4745   /* Line 1813 of yacc.c  */
4746 < #line 1668 "conf_parser.y"
4746 > #line 1538 "conf_parser.y"
4747      {
4748    if (conf_parser_ctx.pass == 2)
4749 <    yy_conf->flags |= CONF_FLAGS_NO_TILDE;
4749 >    block_state.flags.value |= CONF_FLAGS_NO_TILDE;
4750   }
4751      break;
4752  
4753    case 277:
4754   /* Line 1813 of yacc.c  */
4755 < #line 1672 "conf_parser.y"
4755 > #line 1542 "conf_parser.y"
4756      {
4757    if (conf_parser_ctx.pass == 2)
4758 <    yy_conf->flags |= CONF_FLAGS_EXEMPTGLINE;
4758 >    block_state.flags.value |= CONF_FLAGS_EXEMPTGLINE;
4759   }
4760      break;
4761  
4762    case 278:
4763   /* Line 1813 of yacc.c  */
4764 < #line 1676 "conf_parser.y"
4764 > #line 1546 "conf_parser.y"
4765      {
4766    if (conf_parser_ctx.pass == 2)
4767 <    yy_conf->flags |= CONF_FLAGS_EXEMPTRESV;
4767 >    block_state.flags.value |= CONF_FLAGS_EXEMPTRESV;
4768   }
4769      break;
4770  
4771    case 279:
4772   /* Line 1813 of yacc.c  */
4773 < #line 1680 "conf_parser.y"
4773 > #line 1550 "conf_parser.y"
4774      {
4775    if (conf_parser_ctx.pass == 2)
4776 <    yy_conf->flags |= CONF_FLAGS_NEED_PASSWORD;
4776 >    block_state.flags.value |= CONF_FLAGS_NEED_PASSWORD;
4777   }
4778      break;
4779  
4780    case 280:
4781   /* Line 1813 of yacc.c  */
4782 < #line 1686 "conf_parser.y"
4782 > #line 1556 "conf_parser.y"
4783      {
4784 <  if (conf_parser_ctx.pass == 2)
4785 <  {
4919 <    MyFree(yy_conf->name);
4784 >  if (conf_parser_ctx.pass != 2)
4785 >    break;
4786  
4787 <    if (strlen(yylval.string) <= HOSTLEN && valid_hostname(yylval.string))
4788 <    {    
4789 <      DupString(yy_conf->name, yylval.string);
4790 <      yy_conf->flags |= CONF_FLAGS_SPOOF_IP;
4925 <    }
4926 <    else
4927 <    {
4928 <      ilog(LOG_TYPE_IRCD, "Spoof either is too long or contains invalid characters. Ignoring it.");
4929 <      yy_conf->name = NULL;
4930 <    }
4787 >  if (strlen(yylval.string) <= HOSTLEN && valid_hostname(yylval.string))
4788 >  {
4789 >    strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf));
4790 >    block_state.flags.value |= CONF_FLAGS_SPOOF_IP;
4791    }
4792 +  else
4793 +    ilog(LOG_TYPE_IRCD, "Spoof either is too long or contains invalid characters. Ignoring it.");
4794   }
4795      break;
4796  
4797    case 281:
4798   /* Line 1813 of yacc.c  */
4799 < #line 1705 "conf_parser.y"
4799 > #line 1570 "conf_parser.y"
4800      {
4801 <  if (conf_parser_ctx.pass == 2)
4802 <  {
4803 <    yy_conf->flags |= CONF_FLAGS_REDIR;
4804 <    MyFree(yy_conf->name);
4805 <    DupString(yy_conf->name, yylval.string);
4944 <  }
4801 >  if (conf_parser_ctx.pass != 2)
4802 >    break;
4803 >
4804 >  strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf));
4805 >  block_state.flags.value |= CONF_FLAGS_REDIR;
4806   }
4807      break;
4808  
4809    case 282:
4810   /* Line 1813 of yacc.c  */
4811 < #line 1715 "conf_parser.y"
4811 > #line 1579 "conf_parser.y"
4812      {
4813 <  if (conf_parser_ctx.pass == 2)
4814 <  {
4815 <    yy_conf->flags |= CONF_FLAGS_REDIR;
4816 <    yy_conf->port = (yyvsp[(3) - (4)].number);
4956 <  }
4813 >  if (conf_parser_ctx.pass != 2)
4814 >    break;
4815 >  block_state.flags.value |= CONF_FLAGS_REDIR;
4816 >  block_state.port.value = (yyvsp[(3) - (4)].number);
4817   }
4818      break;
4819  
4820    case 283:
4821   /* Line 1813 of yacc.c  */
4822 < #line 1728 "conf_parser.y"
4822 > #line 1591 "conf_parser.y"
4823      {
4824    if (conf_parser_ctx.pass == 2)
4825    {
# Line 4971 | Line 4831 | yyreduce:
4831  
4832    case 284:
4833   /* Line 1813 of yacc.c  */
4834 < #line 1735 "conf_parser.y"
4834 > #line 1598 "conf_parser.y"
4835      {
4836    if (conf_parser_ctx.pass == 2)
4837    {
# Line 4983 | Line 4843 | yyreduce:
4843  
4844    case 291:
4845   /* Line 1813 of yacc.c  */
4846 < #line 1747 "conf_parser.y"
4846 > #line 1610 "conf_parser.y"
4847      {
4848    if (conf_parser_ctx.pass == 2)
4849    {
4850      MyFree(resv_reason);
4851 <    DupString(resv_reason, yylval.string);
4851 >    resv_reason = xstrdup(yylval.string);
4852    }
4853   }
4854      break;
4855  
4856    case 292:
4857   /* Line 1813 of yacc.c  */
4858 < #line 1756 "conf_parser.y"
4858 > #line 1619 "conf_parser.y"
4859      {
4860    if (conf_parser_ctx.pass == 2)
4861    {
# Line 5013 | Line 4873 | yyreduce:
4873  
4874    case 293:
4875   /* Line 1813 of yacc.c  */
4876 < #line 1771 "conf_parser.y"
4876 > #line 1634 "conf_parser.y"
4877      {
4878    if (conf_parser_ctx.pass == 2)
4879    {
# Line 5026 | Line 4886 | yyreduce:
4886  
4887    case 299:
4888   /* Line 1813 of yacc.c  */
4889 < #line 1789 "conf_parser.y"
4889 > #line 1652 "conf_parser.y"
4890      {
4891    if (conf_parser_ctx.pass == 2)
4892    {
4893      if (valid_servname(yylval.string))
4894      {
4895        yy_conf = conf_make(CONF_SERVICE);
4896 <      DupString(yy_conf->name, yylval.string);
4896 >      yy_conf->name = xstrdup(yylval.string);
4897      }
4898    }
4899   }
# Line 5041 | Line 4901 | yyreduce:
4901  
4902    case 300:
4903   /* Line 1813 of yacc.c  */
4904 < #line 1804 "conf_parser.y"
4904 > #line 1667 "conf_parser.y"
4905      {
4906    if (conf_parser_ctx.pass == 2)
4907    {
# Line 5053 | Line 4913 | yyreduce:
4913  
4914    case 301:
4915   /* Line 1813 of yacc.c  */
4916 < #line 1811 "conf_parser.y"
4916 > #line 1674 "conf_parser.y"
4917      {
4918    if (conf_parser_ctx.pass == 2)
4919    {
# Line 5064 | Line 4924 | yyreduce:
4924  
4925    case 308:
4926   /* Line 1813 of yacc.c  */
4927 < #line 1822 "conf_parser.y"
4927 > #line 1685 "conf_parser.y"
4928      {
4929    if (conf_parser_ctx.pass == 2)
4930    {
# Line 5076 | Line 4936 | yyreduce:
4936  
4937    case 309:
4938   /* Line 1813 of yacc.c  */
4939 < #line 1831 "conf_parser.y"
4939 > #line 1694 "conf_parser.y"
4940      {
4941    if (conf_parser_ctx.pass == 2)
4942    {
# Line 5101 | Line 4961 | yyreduce:
4961  
4962    case 310:
4963   /* Line 1813 of yacc.c  */
4964 < #line 1853 "conf_parser.y"
4964 > #line 1716 "conf_parser.y"
4965      {
4966    if (conf_parser_ctx.pass == 2)
4967      yy_conf->flags = 0;
# Line 5110 | Line 4970 | yyreduce:
4970  
4971    case 314:
4972   /* Line 1813 of yacc.c  */
4973 < #line 1860 "conf_parser.y"
4973 > #line 1723 "conf_parser.y"
4974      {
4975    if (conf_parser_ctx.pass == 2)
4976      yy_conf->flags |= SHARED_KLINE;
# Line 5119 | Line 4979 | yyreduce:
4979  
4980    case 315:
4981   /* Line 1813 of yacc.c  */
4982 < #line 1864 "conf_parser.y"
4982 > #line 1727 "conf_parser.y"
4983      {
4984    if (conf_parser_ctx.pass == 2)
4985      yy_conf->flags |= SHARED_UNKLINE;
# Line 5128 | Line 4988 | yyreduce:
4988  
4989    case 316:
4990   /* Line 1813 of yacc.c  */
4991 < #line 1868 "conf_parser.y"
4991 > #line 1731 "conf_parser.y"
4992      {
4993    if (conf_parser_ctx.pass == 2)
4994      yy_conf->flags |= SHARED_DLINE;
# Line 5137 | Line 4997 | yyreduce:
4997  
4998    case 317:
4999   /* Line 1813 of yacc.c  */
5000 < #line 1872 "conf_parser.y"
5000 > #line 1735 "conf_parser.y"
5001      {
5002    if (conf_parser_ctx.pass == 2)
5003      yy_conf->flags |= SHARED_UNDLINE;
# Line 5146 | Line 5006 | yyreduce:
5006  
5007    case 318:
5008   /* Line 1813 of yacc.c  */
5009 < #line 1876 "conf_parser.y"
5009 > #line 1739 "conf_parser.y"
5010      {
5011    if (conf_parser_ctx.pass == 2)
5012      yy_conf->flags |= SHARED_XLINE;
# Line 5155 | Line 5015 | yyreduce:
5015  
5016    case 319:
5017   /* Line 1813 of yacc.c  */
5018 < #line 1880 "conf_parser.y"
5018 > #line 1743 "conf_parser.y"
5019      {
5020    if (conf_parser_ctx.pass == 2)
5021      yy_conf->flags |= SHARED_UNXLINE;
# Line 5164 | Line 5024 | yyreduce:
5024  
5025    case 320:
5026   /* Line 1813 of yacc.c  */
5027 < #line 1884 "conf_parser.y"
5027 > #line 1747 "conf_parser.y"
5028      {
5029    if (conf_parser_ctx.pass == 2)
5030      yy_conf->flags |= SHARED_RESV;
# Line 5173 | Line 5033 | yyreduce:
5033  
5034    case 321:
5035   /* Line 1813 of yacc.c  */
5036 < #line 1888 "conf_parser.y"
5036 > #line 1751 "conf_parser.y"
5037      {
5038    if (conf_parser_ctx.pass == 2)
5039      yy_conf->flags |= SHARED_UNRESV;
# Line 5182 | Line 5042 | yyreduce:
5042  
5043    case 322:
5044   /* Line 1813 of yacc.c  */
5045 < #line 1892 "conf_parser.y"
5045 > #line 1755 "conf_parser.y"
5046      {
5047    if (conf_parser_ctx.pass == 2)
5048      yy_conf->flags |= SHARED_LOCOPS;
# Line 5191 | Line 5051 | yyreduce:
5051  
5052    case 323:
5053   /* Line 1813 of yacc.c  */
5054 < #line 1896 "conf_parser.y"
5054 > #line 1759 "conf_parser.y"
5055      {
5056    if (conf_parser_ctx.pass == 2)
5057      yy_conf->flags = SHARED_ALL;
# Line 5200 | Line 5060 | yyreduce:
5060  
5061    case 324:
5062   /* Line 1813 of yacc.c  */
5063 < #line 1905 "conf_parser.y"
5063 > #line 1768 "conf_parser.y"
5064      {
5065    if (conf_parser_ctx.pass == 2)
5066    {
# Line 5211 | Line 5071 | yyreduce:
5071  
5072    case 325:
5073   /* Line 1813 of yacc.c  */
5074 < #line 1911 "conf_parser.y"
5074 > #line 1774 "conf_parser.y"
5075      {
5076    if (conf_parser_ctx.pass == 2)
5077    {
# Line 5224 | Line 5084 | yyreduce:
5084  
5085    case 331:
5086   /* Line 1813 of yacc.c  */
5087 < #line 1924 "conf_parser.y"
5087 > #line 1787 "conf_parser.y"
5088      {
5089    if (conf_parser_ctx.pass == 2)
5090      DupString(yy_conf->name, yylval.string);
# Line 5233 | Line 5093 | yyreduce:
5093  
5094    case 332:
5095   /* Line 1813 of yacc.c  */
5096 < #line 1930 "conf_parser.y"
5096 > #line 1793 "conf_parser.y"
5097      {
5098    if (conf_parser_ctx.pass == 2)
5099      yy_conf->flags = 0;
# Line 5242 | Line 5102 | yyreduce:
5102  
5103    case 336:
5104   /* Line 1813 of yacc.c  */
5105 < #line 1937 "conf_parser.y"
5105 > #line 1800 "conf_parser.y"
5106      {
5107    if (conf_parser_ctx.pass == 2)
5108      yy_conf->flags |= SHARED_KLINE;
# Line 5251 | Line 5111 | yyreduce:
5111  
5112    case 337:
5113   /* Line 1813 of yacc.c  */
5114 < #line 1941 "conf_parser.y"
5114 > #line 1804 "conf_parser.y"
5115      {
5116    if (conf_parser_ctx.pass == 2)
5117      yy_conf->flags |= SHARED_UNKLINE;
# Line 5260 | Line 5120 | yyreduce:
5120  
5121    case 338:
5122   /* Line 1813 of yacc.c  */
5123 < #line 1945 "conf_parser.y"
5123 > #line 1808 "conf_parser.y"
5124      {
5125    if (conf_parser_ctx.pass == 2)
5126      yy_conf->flags |= SHARED_DLINE;
# Line 5269 | Line 5129 | yyreduce:
5129  
5130    case 339:
5131   /* Line 1813 of yacc.c  */
5132 < #line 1949 "conf_parser.y"
5132 > #line 1812 "conf_parser.y"
5133      {
5134    if (conf_parser_ctx.pass == 2)
5135      yy_conf->flags |= SHARED_UNDLINE;
# Line 5278 | Line 5138 | yyreduce:
5138  
5139    case 340:
5140   /* Line 1813 of yacc.c  */
5141 < #line 1953 "conf_parser.y"
5141 > #line 1816 "conf_parser.y"
5142      {
5143    if (conf_parser_ctx.pass == 2)
5144      yy_conf->flags |= SHARED_XLINE;
# Line 5287 | Line 5147 | yyreduce:
5147  
5148    case 341:
5149   /* Line 1813 of yacc.c  */
5150 < #line 1957 "conf_parser.y"
5150 > #line 1820 "conf_parser.y"
5151      {
5152    if (conf_parser_ctx.pass == 2)
5153      yy_conf->flags |= SHARED_UNXLINE;
# Line 5296 | Line 5156 | yyreduce:
5156  
5157    case 342:
5158   /* Line 1813 of yacc.c  */
5159 < #line 1961 "conf_parser.y"
5159 > #line 1824 "conf_parser.y"
5160      {
5161    if (conf_parser_ctx.pass == 2)
5162      yy_conf->flags |= SHARED_RESV;
# Line 5305 | Line 5165 | yyreduce:
5165  
5166    case 343:
5167   /* Line 1813 of yacc.c  */
5168 < #line 1965 "conf_parser.y"
5168 > #line 1828 "conf_parser.y"
5169      {
5170    if (conf_parser_ctx.pass == 2)
5171      yy_conf->flags |= SHARED_UNRESV;
# Line 5314 | Line 5174 | yyreduce:
5174  
5175    case 344:
5176   /* Line 1813 of yacc.c  */
5177 < #line 1969 "conf_parser.y"
5177 > #line 1832 "conf_parser.y"
5178      {
5179    if (conf_parser_ctx.pass == 2)
5180      yy_conf->flags |= SHARED_LOCOPS;
# Line 5323 | Line 5183 | yyreduce:
5183  
5184    case 345:
5185   /* Line 1813 of yacc.c  */
5186 < #line 1973 "conf_parser.y"
5186 > #line 1836 "conf_parser.y"
5187      {
5188    if (conf_parser_ctx.pass == 2)
5189      yy_conf->flags = SHARED_ALL;
# Line 5332 | Line 5192 | yyreduce:
5192  
5193    case 346:
5194   /* Line 1813 of yacc.c  */
5195 < #line 1982 "conf_parser.y"
5195 > #line 1845 "conf_parser.y"
5196      {
5197    if (conf_parser_ctx.pass == 2)
5198    {
# Line 5351 | Line 5211 | yyreduce:
5211  
5212    case 347:
5213   /* Line 1813 of yacc.c  */
5214 < #line 1996 "conf_parser.y"
5214 > #line 1859 "conf_parser.y"
5215      {
5216    if (conf_parser_ctx.pass == 2)
5217    {
# Line 5389 | Line 5249 | yyreduce:
5249  
5250    case 364:
5251   /* Line 1813 of yacc.c  */
5252 < #line 2039 "conf_parser.y"
5252 > #line 1902 "conf_parser.y"
5253      {
5254    if (conf_parser_ctx.pass == 2)
5255    {
# Line 5401 | Line 5261 | yyreduce:
5261  
5262    case 365:
5263   /* Line 1813 of yacc.c  */
5264 < #line 2048 "conf_parser.y"
5264 > #line 1911 "conf_parser.y"
5265      {
5266    if (conf_parser_ctx.pass == 2)
5267    {
# Line 5413 | Line 5273 | yyreduce:
5273  
5274    case 366:
5275   /* Line 1813 of yacc.c  */
5276 < #line 2057 "conf_parser.y"
5276 > #line 1920 "conf_parser.y"
5277      {
5278    if (conf_parser_ctx.pass == 2)
5279    {
# Line 5442 | Line 5302 | yyreduce:
5302  
5303    case 367:
5304   /* Line 1813 of yacc.c  */
5305 < #line 2083 "conf_parser.y"
5305 > #line 1946 "conf_parser.y"
5306      {
5307    if (conf_parser_ctx.pass == 2)
5308    {
# Line 5463 | Line 5323 | yyreduce:
5323  
5324    case 368:
5325   /* Line 1813 of yacc.c  */
5326 < #line 2101 "conf_parser.y"
5326 > #line 1964 "conf_parser.y"
5327      {
5328    if (conf_parser_ctx.pass == 2)
5329    {
# Line 5484 | Line 5344 | yyreduce:
5344  
5345    case 369:
5346   /* Line 1813 of yacc.c  */
5347 < #line 2119 "conf_parser.y"
5347 > #line 1982 "conf_parser.y"
5348      {
5349    if (conf_parser_ctx.pass == 2)
5350      yy_conf->port = (yyvsp[(3) - (4)].number);
# Line 5493 | Line 5353 | yyreduce:
5353  
5354    case 370:
5355   /* Line 1813 of yacc.c  */
5356 < #line 2125 "conf_parser.y"
5356 > #line 1988 "conf_parser.y"
5357      {
5358    if (conf_parser_ctx.pass == 2)
5359      yy_conf->aftype = AF_INET;
# Line 5502 | Line 5362 | yyreduce:
5362  
5363    case 371:
5364   /* Line 1813 of yacc.c  */
5365 < #line 2129 "conf_parser.y"
5365 > #line 1992 "conf_parser.y"
5366      {
5367   #ifdef IPV6
5368    if (conf_parser_ctx.pass == 2)
# Line 5513 | Line 5373 | yyreduce:
5373  
5374    case 372:
5375   /* Line 1813 of yacc.c  */
5376 < #line 2137 "conf_parser.y"
5376 > #line 2000 "conf_parser.y"
5377      {
5378   }
5379      break;
5380  
5381    case 376:
5382   /* Line 1813 of yacc.c  */
5383 < #line 2142 "conf_parser.y"
5383 > #line 2005 "conf_parser.y"
5384      {
5385    if (conf_parser_ctx.pass == 2)
5386      SetConfAllowAutoConn(yy_conf);
# Line 5529 | Line 5389 | yyreduce:
5389  
5390    case 377:
5391   /* Line 1813 of yacc.c  */
5392 < #line 2146 "conf_parser.y"
5392 > #line 2009 "conf_parser.y"
5393      {
5394    if (conf_parser_ctx.pass == 2)
5395      SetConfSSL(yy_conf);
# Line 5538 | Line 5398 | yyreduce:
5398  
5399    case 378:
5400   /* Line 1813 of yacc.c  */
5401 < #line 2152 "conf_parser.y"
5401 > #line 2015 "conf_parser.y"
5402      {
5403    if (conf_parser_ctx.pass == 2)
5404    {
# Line 5552 | Line 5412 | yyreduce:
5412  
5413    case 379:
5414   /* Line 1813 of yacc.c  */
5415 < #line 2163 "conf_parser.y"
5415 > #line 2026 "conf_parser.y"
5416      {
5417    if (conf_parser_ctx.pass == 2)
5418    {
5419 <    char *mask;
5419 >    char *mask = xstrdup(yylval.string);
5420  
5561    DupString(mask, yylval.string);
5421      dlinkAdd(mask, make_dlink_node(), &yy_conf->hub_list);
5422    }
5423   }
# Line 5566 | Line 5425 | yyreduce:
5425  
5426    case 380:
5427   /* Line 1813 of yacc.c  */
5428 < #line 2174 "conf_parser.y"
5428 > #line 2036 "conf_parser.y"
5429      {
5430    if (conf_parser_ctx.pass == 2)
5431    {
# Line 5580 | Line 5439 | yyreduce:
5439  
5440    case 381:
5441   /* Line 1813 of yacc.c  */
5442 < #line 2185 "conf_parser.y"
5442 > #line 2047 "conf_parser.y"
5443      {
5444    if (conf_parser_ctx.pass == 2)
5445    {
# Line 5592 | Line 5451 | yyreduce:
5451  
5452    case 382:
5453   /* Line 1813 of yacc.c  */
5454 < #line 2194 "conf_parser.y"
5454 > #line 2056 "conf_parser.y"
5455      {
5456   #ifdef HAVE_LIBCRYPTO
5457    if (conf_parser_ctx.pass == 2)
# Line 5609 | Line 5468 | yyreduce:
5468  
5469    case 383:
5470   /* Line 1813 of yacc.c  */
5471 < #line 2212 "conf_parser.y"
5471 > #line 2074 "conf_parser.y"
5472      {
5473    if (conf_parser_ctx.pass == 2)
5474    {
# Line 5621 | Line 5480 | yyreduce:
5480  
5481    case 384:
5482   /* Line 1813 of yacc.c  */
5483 < #line 2219 "conf_parser.y"
5483 > #line 2081 "conf_parser.y"
5484      {
5485    if (conf_parser_ctx.pass == 2)
5486    {
5487 +    struct MaskItem *conf = NULL;
5488 +
5489      if (userbuf[0] && hostbuf[0])
5490      {
5491        if (regex_ban)
# Line 5642 | Line 5503 | yyreduce:
5503            break;
5504          }
5505  
5506 <        yy_conf = conf_make(CONF_RKLINE);
5507 <        yy_conf->regexuser = exp_user;
5508 <        yy_conf->regexhost = exp_host;
5506 >        conf = conf_make(CONF_RKLINE);
5507 >        conf->regexuser = exp_user;
5508 >        conf->regexhost = exp_host;
5509  
5510 <        DupString(yy_conf->user, userbuf);
5511 <        DupString(yy_conf->host, hostbuf);
5510 >        conf->user = xstrdup(userbuf);
5511 >        conf->host = xstrdup(hostbuf);
5512  
5513          if (reasonbuf[0])
5514 <          DupString(yy_conf->reason, reasonbuf);
5514 >          conf->reason = xstrdup(reasonbuf);
5515          else
5516 <          DupString(yy_conf->reason, "No reason");
5516 >          conf->reason = xstrdup(CONF_NOREASON);
5517   #else
5518          ilog(LOG_TYPE_IRCD, "Failed to add regular expression based K-Line: no PCRE support");
5519          break;
# Line 5660 | Line 5521 | yyreduce:
5521        }
5522        else
5523        {
5524 <        yy_conf = conf_make(CONF_KLINE);
5524 >        conf = conf_make(CONF_KLINE);
5525  
5526 <        DupString(yy_conf->user, userbuf);
5527 <        DupString(yy_conf->host, hostbuf);
5526 >        conf->user = xstrdup(userbuf);
5527 >        conf->host = xstrdup(hostbuf);
5528  
5529          if (reasonbuf[0])
5530 <          DupString(yy_conf->reason, reasonbuf);
5530 >          conf->reason = xstrdup(reasonbuf);
5531          else
5532 <          DupString(yy_conf->reason, "No reason");
5533 <        add_conf_by_address(CONF_KLINE, yy_conf);
5532 >          conf->reason = xstrdup(CONF_NOREASON);
5533 >        add_conf_by_address(CONF_KLINE, conf);
5534        }
5535      }
5675
5676    yy_conf = NULL;
5536    }
5537   }
5538      break;
5539  
5540    case 385:
5541   /* Line 1813 of yacc.c  */
5542 < #line 2275 "conf_parser.y"
5542 > #line 2137 "conf_parser.y"
5543      {
5544   }
5545      break;
5546  
5547    case 389:
5548   /* Line 1813 of yacc.c  */
5549 < #line 2280 "conf_parser.y"
5549 > #line 2142 "conf_parser.y"
5550      {
5551    if (conf_parser_ctx.pass == 2)
5552      regex_ban = 1;
# Line 5696 | Line 5555 | yyreduce:
5555  
5556    case 396:
5557   /* Line 1813 of yacc.c  */
5558 < #line 2289 "conf_parser.y"
5558 > #line 2151 "conf_parser.y"
5559      {
5560    if (conf_parser_ctx.pass == 2)
5561    {
# Line 5718 | Line 5577 | yyreduce:
5577  
5578    case 397:
5579   /* Line 1813 of yacc.c  */
5580 < #line 2308 "conf_parser.y"
5580 > #line 2170 "conf_parser.y"
5581      {
5582    if (conf_parser_ctx.pass == 2)
5583      strlcpy(reasonbuf, yylval.string, sizeof(reasonbuf));
# Line 5727 | Line 5586 | yyreduce:
5586  
5587    case 398:
5588   /* Line 1813 of yacc.c  */
5589 < #line 2317 "conf_parser.y"
5589 > #line 2179 "conf_parser.y"
5590      {
5591    if (conf_parser_ctx.pass == 2)
5592 <    hostbuf[0] = reasonbuf[0] = '\0';
5592 >    reset_block_state();
5593   }
5594      break;
5595  
5596    case 399:
5597   /* Line 1813 of yacc.c  */
5598 < #line 2321 "conf_parser.y"
5598 > #line 2183 "conf_parser.y"
5599      {
5600 <  if (conf_parser_ctx.pass == 2)
5600 >  struct MaskItem *conf = NULL;
5601 >
5602 >  if (conf_parser_ctx.pass != 2)
5603 >    break;
5604 >
5605 >  if (!block_state.addr.buf[0])
5606 >    break;
5607 >
5608 >  if (parse_netmask(block_state.addr.buf, NULL, NULL) != HM_HOST)
5609    {
5610 <    if (hostbuf[0] && parse_netmask(hostbuf, NULL, NULL) != HM_HOST)
5611 <    {
5745 <      yy_conf = conf_make(CONF_DLINE);
5746 <      DupString(yy_conf->host, hostbuf);
5610 >    conf = conf_make(CONF_DLINE);
5611 >    conf->host = xstrdup(block_state.addr.buf);
5612  
5613 <      if (reasonbuf[0])
5614 <        DupString(yy_conf->reason, reasonbuf);
5615 <      else
5616 <        DupString(yy_conf->reason, "No reason");
5617 <      add_conf_by_address(CONF_DLINE, yy_conf);
5753 <      yy_conf = NULL;
5754 <    }
5613 >    if (block_state.pass.buf[0])
5614 >      conf->reason = xstrdup(block_state.pass.buf);
5615 >    else
5616 >      conf->reason = xstrdup(CONF_NOREASON);
5617 >    add_conf_by_address(CONF_DLINE, conf);
5618    }
5619   }
5620      break;
5621  
5622    case 405:
5623   /* Line 1813 of yacc.c  */
5624 < #line 2343 "conf_parser.y"
5624 > #line 2209 "conf_parser.y"
5625      {
5626    if (conf_parser_ctx.pass == 2)
5627 <    strlcpy(hostbuf, yylval.string, sizeof(hostbuf));
5627 >    strlcpy(block_state.addr.buf, yylval.string, sizeof(block_state.addr.buf));
5628   }
5629      break;
5630  
5631    case 406:
5632   /* Line 1813 of yacc.c  */
5633 < #line 2349 "conf_parser.y"
5633 > #line 2215 "conf_parser.y"
5634      {
5635    if (conf_parser_ctx.pass == 2)
5636 <    strlcpy(reasonbuf, yylval.string, sizeof(reasonbuf));
5636 >    strlcpy(block_state.pass.buf, yylval.string, sizeof(block_state.pass.buf));
5637   }
5638      break;
5639  
5640    case 412:
5641   /* Line 1813 of yacc.c  */
5642 < #line 2363 "conf_parser.y"
5642 > #line 2229 "conf_parser.y"
5643      {
5644    if (conf_parser_ctx.pass == 2)
5645    {
5646      if (yylval.string[0] && parse_netmask(yylval.string, NULL, NULL) != HM_HOST)
5647      {
5648 <      yy_conf = conf_make(CONF_EXEMPT);
5649 <      DupString(yy_conf->host, yylval.string);
5648 >      struct MaskItem *conf = conf_make(CONF_EXEMPT);
5649 >      conf->host = xstrdup(yylval.string);
5650  
5651 <      add_conf_by_address(CONF_EXEMPT, yy_conf);
5789 <      yy_conf = NULL;
5651 >      add_conf_by_address(CONF_EXEMPT, conf);
5652      }
5653    }
5654   }
# Line 5794 | Line 5656 | yyreduce:
5656  
5657    case 413:
5658   /* Line 1813 of yacc.c  */
5659 < #line 2381 "conf_parser.y"
5659 > #line 2246 "conf_parser.y"
5660      {
5661    if (conf_parser_ctx.pass == 2)
5662 <  {
5801 <    regex_ban = 0;
5802 <    reasonbuf[0] = gecos_name[0] = '\0';
5803 <  }
5662 >    reset_block_state();
5663   }
5664      break;
5665  
5666    case 414:
5667   /* Line 1813 of yacc.c  */
5668 < #line 2388 "conf_parser.y"
5668 > #line 2250 "conf_parser.y"
5669      {
5670 <  if (conf_parser_ctx.pass == 2)
5670 >  struct MaskItem *conf = NULL;
5671 >
5672 >  if (conf_parser_ctx.pass != 2)
5673 >    break;
5674 >
5675 >  if (!block_state.name.buf[0])
5676 >    break;
5677 >
5678 >  if (block_state.port.value == 1)
5679    {
5813    if (gecos_name[0])
5814    {
5815      if (regex_ban)
5816      {
5680   #ifdef HAVE_LIBPCRE
5681 <        void *exp_p = NULL;
5682 <        const char *errptr = NULL;
5681 >    void *exp_p = NULL;
5682 >    const char *errptr = NULL;
5683  
5684 <        if (!(exp_p = ircd_pcre_compile(gecos_name, &errptr)))
5685 <        {
5686 <          ilog(LOG_TYPE_IRCD, "Failed to add regular expression based X-Line: %s",
5687 <               errptr);
5688 <          break;
5689 <        }
5684 >    if (!(exp_p = ircd_pcre_compile(block_state.name.buf, &errptr)))
5685 >    {
5686 >      ilog(LOG_TYPE_IRCD, "Failed to add regular expression based X-Line: %s",
5687 >           errptr);
5688 >      break;
5689 >    }
5690  
5691 <        yy_conf = conf_make(CONF_RXLINE);
5692 <        yy_conf->regexuser = exp_p;
5691 >    conf = conf_make(CONF_RXLINE);
5692 >    conf->regexuser = exp_p;
5693   #else
5694 <        ilog(LOG_TYPE_IRCD, "Failed to add regular expression based X-Line: no PCRE support");
5695 <        break;
5694 >    ilog(LOG_TYPE_IRCD, "Failed to add regular expression based X-Line: no PCRE support");
5695 >    break;
5696   #endif
5697 <      }
5698 <      else
5699 <        yy_conf = conf_make(CONF_XLINE);
5697 >  }
5698 >  else
5699 >    conf = conf_make(CONF_XLINE);
5700  
5701 <      DupString(yy_conf->name, gecos_name);
5701 >  conf->name = xstrdup(block_state.name.buf);
5702  
5703 <      if (reasonbuf[0])
5704 <        DupString(yy_conf->reason, reasonbuf);
5705 <      else
5706 <        DupString(yy_conf->reason, "No reason");
5844 <    }
5845 <  }
5703 >  if (block_state.pass.buf[0])
5704 >    conf->reason = xstrdup(block_state.pass.buf);
5705 >  else
5706 >    conf->reason = xstrdup(CONF_NOREASON);
5707   }
5708      break;
5709  
5710    case 415:
5711   /* Line 1813 of yacc.c  */
5712 < #line 2427 "conf_parser.y"
5712 > #line 2291 "conf_parser.y"
5713      {
5714 +  if (conf_parser_ctx.pass == 2)
5715 +    block_state.port.value = 0;
5716   }
5717      break;
5718  
5719    case 419:
5720   /* Line 1813 of yacc.c  */
5721 < #line 2432 "conf_parser.y"
5721 > #line 2298 "conf_parser.y"
5722      {
5723    if (conf_parser_ctx.pass == 2)
5724 <    regex_ban = 1;
5724 >    block_state.port.value = 1;
5725   }
5726      break;
5727  
5728    case 426:
5729   /* Line 1813 of yacc.c  */
5730 < #line 2441 "conf_parser.y"
5730 > #line 2307 "conf_parser.y"
5731      {
5732    if (conf_parser_ctx.pass == 2)
5733 <    strlcpy(gecos_name, yylval.string, sizeof(gecos_name));
5733 >    strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf));
5734   }
5735      break;
5736  
5737    case 427:
5738   /* Line 1813 of yacc.c  */
5739 < #line 2447 "conf_parser.y"
5739 > #line 2313 "conf_parser.y"
5740      {
5741    if (conf_parser_ctx.pass == 2)
5742 <    strlcpy(reasonbuf, yylval.string, sizeof(reasonbuf));
5742 >    strlcpy(block_state.pass.buf, yylval.string, sizeof(block_state.pass.buf));
5743   }
5744      break;
5745  
5746    case 481:
5747   /* Line 1813 of yacc.c  */
5748 < #line 2492 "conf_parser.y"
5748 > #line 2358 "conf_parser.y"
5749      {
5750    ConfigFileEntry.max_watch = (yyvsp[(3) - (4)].number);
5751   }
# Line 5890 | Line 5753 | yyreduce:
5753  
5754    case 482:
5755   /* Line 1813 of yacc.c  */
5756 < #line 2497 "conf_parser.y"
5756 > #line 2363 "conf_parser.y"
5757      {
5758    if (conf_parser_ctx.pass == 2)
5759      ConfigFileEntry.glines = yylval.number;
# Line 5899 | Line 5762 | yyreduce:
5762  
5763    case 483:
5764   /* Line 1813 of yacc.c  */
5765 < #line 2503 "conf_parser.y"
5765 > #line 2369 "conf_parser.y"
5766      {
5767    if (conf_parser_ctx.pass == 2)
5768      ConfigFileEntry.gline_time = (yyvsp[(3) - (4)].number);
# Line 5908 | Line 5771 | yyreduce:
5771  
5772    case 484:
5773   /* Line 1813 of yacc.c  */
5774 < #line 2509 "conf_parser.y"
5774 > #line 2375 "conf_parser.y"
5775      {
5776    if (conf_parser_ctx.pass == 2)
5777      ConfigFileEntry.gline_request_time = (yyvsp[(3) - (4)].number);
# Line 5917 | Line 5780 | yyreduce:
5780  
5781    case 485:
5782   /* Line 1813 of yacc.c  */
5783 < #line 2515 "conf_parser.y"
5783 > #line 2381 "conf_parser.y"
5784      {
5785    ConfigFileEntry.gline_min_cidr = (yyvsp[(3) - (4)].number);
5786   }
# Line 5925 | Line 5788 | yyreduce:
5788  
5789    case 486:
5790   /* Line 1813 of yacc.c  */
5791 < #line 2520 "conf_parser.y"
5791 > #line 2386 "conf_parser.y"
5792      {
5793    ConfigFileEntry.gline_min_cidr6 = (yyvsp[(3) - (4)].number);
5794   }
# Line 5933 | Line 5796 | yyreduce:
5796  
5797    case 487:
5798   /* Line 1813 of yacc.c  */
5799 < #line 2525 "conf_parser.y"
5799 > #line 2391 "conf_parser.y"
5800      {
5801    ConfigFileEntry.tkline_expire_notices = yylval.number;
5802   }
# Line 5941 | Line 5804 | yyreduce:
5804  
5805    case 488:
5806   /* Line 1813 of yacc.c  */
5807 < #line 2530 "conf_parser.y"
5807 > #line 2396 "conf_parser.y"
5808      {
5809    ConfigFileEntry.kill_chase_time_limit = (yyvsp[(3) - (4)].number);
5810   }
# Line 5949 | Line 5812 | yyreduce:
5812  
5813    case 489:
5814   /* Line 1813 of yacc.c  */
5815 < #line 2535 "conf_parser.y"
5815 > #line 2401 "conf_parser.y"
5816      {
5817    ConfigFileEntry.hide_spoof_ips = yylval.number;
5818   }
# Line 5957 | Line 5820 | yyreduce:
5820  
5821    case 490:
5822   /* Line 1813 of yacc.c  */
5823 < #line 2540 "conf_parser.y"
5823 > #line 2406 "conf_parser.y"
5824      {
5825    ConfigFileEntry.ignore_bogus_ts = yylval.number;
5826   }
# Line 5965 | Line 5828 | yyreduce:
5828  
5829    case 491:
5830   /* Line 1813 of yacc.c  */
5831 < #line 2545 "conf_parser.y"
5831 > #line 2411 "conf_parser.y"
5832      {
5833    ConfigFileEntry.disable_remote = yylval.number;
5834   }
# Line 5973 | Line 5836 | yyreduce:
5836  
5837    case 492:
5838   /* Line 1813 of yacc.c  */
5839 < #line 2550 "conf_parser.y"
5839 > #line 2416 "conf_parser.y"
5840      {
5841    ConfigFileEntry.failed_oper_notice = yylval.number;
5842   }
# Line 5981 | Line 5844 | yyreduce:
5844  
5845    case 493:
5846   /* Line 1813 of yacc.c  */
5847 < #line 2555 "conf_parser.y"
5847 > #line 2421 "conf_parser.y"
5848      {
5849    ConfigFileEntry.anti_nick_flood = yylval.number;
5850   }
# Line 5989 | Line 5852 | yyreduce:
5852  
5853    case 494:
5854   /* Line 1813 of yacc.c  */
5855 < #line 2560 "conf_parser.y"
5855 > #line 2426 "conf_parser.y"
5856      {
5857    ConfigFileEntry.max_nick_time = (yyvsp[(3) - (4)].number);
5858   }
# Line 5997 | Line 5860 | yyreduce:
5860  
5861    case 495:
5862   /* Line 1813 of yacc.c  */
5863 < #line 2565 "conf_parser.y"
5863 > #line 2431 "conf_parser.y"
5864      {
5865    ConfigFileEntry.max_nick_changes = (yyvsp[(3) - (4)].number);
5866   }
# Line 6005 | Line 5868 | yyreduce:
5868  
5869    case 496:
5870   /* Line 1813 of yacc.c  */
5871 < #line 2570 "conf_parser.y"
5871 > #line 2436 "conf_parser.y"
5872      {
5873    ConfigFileEntry.max_accept = (yyvsp[(3) - (4)].number);
5874   }
# Line 6013 | Line 5876 | yyreduce:
5876  
5877    case 497:
5878   /* Line 1813 of yacc.c  */
5879 < #line 2575 "conf_parser.y"
5879 > #line 2441 "conf_parser.y"
5880      {
5881    ConfigFileEntry.anti_spam_exit_message_time = (yyvsp[(3) - (4)].number);
5882   }
# Line 6021 | Line 5884 | yyreduce:
5884  
5885    case 498:
5886   /* Line 1813 of yacc.c  */
5887 < #line 2580 "conf_parser.y"
5887 > #line 2446 "conf_parser.y"
5888      {
5889    ConfigFileEntry.ts_warn_delta = (yyvsp[(3) - (4)].number);
5890   }
# Line 6029 | Line 5892 | yyreduce:
5892  
5893    case 499:
5894   /* Line 1813 of yacc.c  */
5895 < #line 2585 "conf_parser.y"
5895 > #line 2451 "conf_parser.y"
5896      {
5897    if (conf_parser_ctx.pass == 2)
5898      ConfigFileEntry.ts_max_delta = (yyvsp[(3) - (4)].number);
# Line 6038 | Line 5901 | yyreduce:
5901  
5902    case 500:
5903   /* Line 1813 of yacc.c  */
5904 < #line 2591 "conf_parser.y"
5904 > #line 2457 "conf_parser.y"
5905      {
5906    if (((yyvsp[(3) - (4)].number) > 0) && conf_parser_ctx.pass == 1)
5907    {
# Line 6052 | Line 5915 | yyreduce:
5915  
5916    case 501:
5917   /* Line 1813 of yacc.c  */
5918 < #line 2602 "conf_parser.y"
5918 > #line 2468 "conf_parser.y"
5919      {
5920    ConfigFileEntry.invisible_on_connect = yylval.number;
5921   }
# Line 6060 | Line 5923 | yyreduce:
5923  
5924    case 502:
5925   /* Line 1813 of yacc.c  */
5926 < #line 2607 "conf_parser.y"
5926 > #line 2473 "conf_parser.y"
5927      {
5928    ConfigFileEntry.warn_no_nline = yylval.number;
5929   }
# Line 6068 | Line 5931 | yyreduce:
5931  
5932    case 503:
5933   /* Line 1813 of yacc.c  */
5934 < #line 2612 "conf_parser.y"
5934 > #line 2478 "conf_parser.y"
5935      {
5936    ConfigFileEntry.stats_e_disabled = yylval.number;
5937   }
# Line 6076 | Line 5939 | yyreduce:
5939  
5940    case 504:
5941   /* Line 1813 of yacc.c  */
5942 < #line 2617 "conf_parser.y"
5942 > #line 2483 "conf_parser.y"
5943      {
5944    ConfigFileEntry.stats_o_oper_only = yylval.number;
5945   }
# Line 6084 | Line 5947 | yyreduce:
5947  
5948    case 505:
5949   /* Line 1813 of yacc.c  */
5950 < #line 2622 "conf_parser.y"
5950 > #line 2488 "conf_parser.y"
5951      {
5952    ConfigFileEntry.stats_P_oper_only = yylval.number;
5953   }
# Line 6092 | Line 5955 | yyreduce:
5955  
5956    case 506:
5957   /* Line 1813 of yacc.c  */
5958 < #line 2627 "conf_parser.y"
5958 > #line 2493 "conf_parser.y"
5959      {
5960    ConfigFileEntry.stats_k_oper_only = 2 * yylval.number;
5961   }
# Line 6100 | Line 5963 | yyreduce:
5963  
5964    case 507:
5965   /* Line 1813 of yacc.c  */
5966 < #line 2630 "conf_parser.y"
5966 > #line 2496 "conf_parser.y"
5967      {
5968    ConfigFileEntry.stats_k_oper_only = 1;
5969   }
# Line 6108 | Line 5971 | yyreduce:
5971  
5972    case 508:
5973   /* Line 1813 of yacc.c  */
5974 < #line 2635 "conf_parser.y"
5974 > #line 2501 "conf_parser.y"
5975      {
5976    ConfigFileEntry.stats_i_oper_only = 2 * yylval.number;
5977   }
# Line 6116 | Line 5979 | yyreduce:
5979  
5980    case 509:
5981   /* Line 1813 of yacc.c  */
5982 < #line 2638 "conf_parser.y"
5982 > #line 2504 "conf_parser.y"
5983      {
5984    ConfigFileEntry.stats_i_oper_only = 1;
5985   }
# Line 6124 | Line 5987 | yyreduce:
5987  
5988    case 510:
5989   /* Line 1813 of yacc.c  */
5990 < #line 2643 "conf_parser.y"
5990 > #line 2509 "conf_parser.y"
5991      {
5992    ConfigFileEntry.pace_wait = (yyvsp[(3) - (4)].number);
5993   }
# Line 6132 | Line 5995 | yyreduce:
5995  
5996    case 511:
5997   /* Line 1813 of yacc.c  */
5998 < #line 2648 "conf_parser.y"
5998 > #line 2514 "conf_parser.y"
5999      {
6000    ConfigFileEntry.caller_id_wait = (yyvsp[(3) - (4)].number);
6001   }
# Line 6140 | Line 6003 | yyreduce:
6003  
6004    case 512:
6005   /* Line 1813 of yacc.c  */
6006 < #line 2653 "conf_parser.y"
6006 > #line 2519 "conf_parser.y"
6007      {
6008    ConfigFileEntry.opers_bypass_callerid = yylval.number;
6009   }
# Line 6148 | Line 6011 | yyreduce:
6011  
6012    case 513:
6013   /* Line 1813 of yacc.c  */
6014 < #line 2658 "conf_parser.y"
6014 > #line 2524 "conf_parser.y"
6015      {
6016    ConfigFileEntry.pace_wait_simple = (yyvsp[(3) - (4)].number);
6017   }
# Line 6156 | Line 6019 | yyreduce:
6019  
6020    case 514:
6021   /* Line 1813 of yacc.c  */
6022 < #line 2663 "conf_parser.y"
6022 > #line 2529 "conf_parser.y"
6023      {
6024    ConfigFileEntry.short_motd = yylval.number;
6025   }
# Line 6164 | Line 6027 | yyreduce:
6027  
6028    case 515:
6029   /* Line 1813 of yacc.c  */
6030 < #line 2668 "conf_parser.y"
6030 > #line 2534 "conf_parser.y"
6031      {
6032    ConfigFileEntry.no_oper_flood = yylval.number;
6033   }
# Line 6172 | Line 6035 | yyreduce:
6035  
6036    case 516:
6037   /* Line 1813 of yacc.c  */
6038 < #line 2673 "conf_parser.y"
6038 > #line 2539 "conf_parser.y"
6039      {
6040    ConfigFileEntry.true_no_oper_flood = yylval.number;
6041   }
# Line 6180 | Line 6043 | yyreduce:
6043  
6044    case 517:
6045   /* Line 1813 of yacc.c  */
6046 < #line 2678 "conf_parser.y"
6046 > #line 2544 "conf_parser.y"
6047      {
6048    ConfigFileEntry.oper_pass_resv = yylval.number;
6049   }
# Line 6188 | Line 6051 | yyreduce:
6051  
6052    case 518:
6053   /* Line 1813 of yacc.c  */
6054 < #line 2683 "conf_parser.y"
6054 > #line 2549 "conf_parser.y"
6055      {
6056    if (conf_parser_ctx.pass == 2)
6057    {
# Line 6202 | Line 6065 | yyreduce:
6065  
6066    case 519:
6067   /* Line 1813 of yacc.c  */
6068 < #line 2694 "conf_parser.y"
6068 > #line 2560 "conf_parser.y"
6069      {
6070    ConfigFileEntry.dots_in_ident = (yyvsp[(3) - (4)].number);
6071   }
# Line 6210 | Line 6073 | yyreduce:
6073  
6074    case 520:
6075   /* Line 1813 of yacc.c  */
6076 < #line 2699 "conf_parser.y"
6076 > #line 2565 "conf_parser.y"
6077      {
6078    ConfigFileEntry.max_targets = (yyvsp[(3) - (4)].number);
6079   }
# Line 6218 | Line 6081 | yyreduce:
6081  
6082    case 521:
6083   /* Line 1813 of yacc.c  */
6084 < #line 2704 "conf_parser.y"
6084 > #line 2570 "conf_parser.y"
6085      {
6086    ConfigFileEntry.use_egd = yylval.number;
6087   }
# Line 6226 | Line 6089 | yyreduce:
6089  
6090    case 522:
6091   /* Line 1813 of yacc.c  */
6092 < #line 2709 "conf_parser.y"
6092 > #line 2575 "conf_parser.y"
6093      {
6094    if (conf_parser_ctx.pass == 2)
6095    {
6096      MyFree(ConfigFileEntry.egdpool_path);
6097 <    DupString(ConfigFileEntry.egdpool_path, yylval.string);
6097 >    ConfigFileEntry.egdpool_path = xstrdup(yylval.string);
6098    }
6099   }
6100      break;
6101  
6102    case 523:
6103   /* Line 1813 of yacc.c  */
6104 < #line 2718 "conf_parser.y"
6104 > #line 2584 "conf_parser.y"
6105      {
6106    if (conf_parser_ctx.pass == 2 && valid_servname(yylval.string))
6107    {
6108      MyFree(ConfigFileEntry.service_name);
6109 <    DupString(ConfigFileEntry.service_name, yylval.string);
6109 >    ConfigFileEntry.service_name = xstrdup(yylval.string);
6110    }
6111   }
6112      break;
6113  
6114    case 524:
6115   /* Line 1813 of yacc.c  */
6116 < #line 2727 "conf_parser.y"
6116 > #line 2593 "conf_parser.y"
6117      {
6118    ConfigFileEntry.ping_cookie = yylval.number;
6119   }
# Line 6258 | Line 6121 | yyreduce:
6121  
6122    case 525:
6123   /* Line 1813 of yacc.c  */
6124 < #line 2732 "conf_parser.y"
6124 > #line 2598 "conf_parser.y"
6125      {
6126    ConfigFileEntry.disable_auth = yylval.number;
6127   }
# Line 6266 | Line 6129 | yyreduce:
6129  
6130    case 526:
6131   /* Line 1813 of yacc.c  */
6132 < #line 2737 "conf_parser.y"
6132 > #line 2603 "conf_parser.y"
6133      {
6134    ConfigFileEntry.throttle_time = yylval.number;
6135   }
# Line 6274 | Line 6137 | yyreduce:
6137  
6138    case 527:
6139   /* Line 1813 of yacc.c  */
6140 < #line 2742 "conf_parser.y"
6140 > #line 2608 "conf_parser.y"
6141      {
6142    ConfigFileEntry.oper_umodes = 0;
6143   }
# Line 6282 | Line 6145 | yyreduce:
6145  
6146    case 531:
6147   /* Line 1813 of yacc.c  */
6148 < #line 2748 "conf_parser.y"
6148 > #line 2614 "conf_parser.y"
6149      {
6150    ConfigFileEntry.oper_umodes |= UMODE_BOTS;
6151   }
# Line 6290 | Line 6153 | yyreduce:
6153  
6154    case 532:
6155   /* Line 1813 of yacc.c  */
6156 < #line 2751 "conf_parser.y"
6156 > #line 2617 "conf_parser.y"
6157      {
6158    ConfigFileEntry.oper_umodes |= UMODE_CCONN;
6159   }
# Line 6298 | Line 6161 | yyreduce:
6161  
6162    case 533:
6163   /* Line 1813 of yacc.c  */
6164 < #line 2754 "conf_parser.y"
6164 > #line 2620 "conf_parser.y"
6165      {
6166    ConfigFileEntry.oper_umodes |= UMODE_CCONN_FULL;
6167   }
# Line 6306 | Line 6169 | yyreduce:
6169  
6170    case 534:
6171   /* Line 1813 of yacc.c  */
6172 < #line 2757 "conf_parser.y"
6172 > #line 2623 "conf_parser.y"
6173      {
6174    ConfigFileEntry.oper_umodes |= UMODE_DEAF;
6175   }
# Line 6314 | Line 6177 | yyreduce:
6177  
6178    case 535:
6179   /* Line 1813 of yacc.c  */
6180 < #line 2760 "conf_parser.y"
6180 > #line 2626 "conf_parser.y"
6181      {
6182    ConfigFileEntry.oper_umodes |= UMODE_DEBUG;
6183   }
# Line 6322 | Line 6185 | yyreduce:
6185  
6186    case 536:
6187   /* Line 1813 of yacc.c  */
6188 < #line 2763 "conf_parser.y"
6188 > #line 2629 "conf_parser.y"
6189      {
6190    ConfigFileEntry.oper_umodes |= UMODE_FULL;
6191   }
# Line 6330 | Line 6193 | yyreduce:
6193  
6194    case 537:
6195   /* Line 1813 of yacc.c  */
6196 < #line 2766 "conf_parser.y"
6196 > #line 2632 "conf_parser.y"
6197      {
6198    ConfigFileEntry.oper_umodes |= UMODE_HIDDEN;
6199   }
# Line 6338 | Line 6201 | yyreduce:
6201  
6202    case 538:
6203   /* Line 1813 of yacc.c  */
6204 < #line 2769 "conf_parser.y"
6204 > #line 2635 "conf_parser.y"
6205      {
6206    ConfigFileEntry.oper_umodes |= UMODE_SKILL;
6207   }
# Line 6346 | Line 6209 | yyreduce:
6209  
6210    case 539:
6211   /* Line 1813 of yacc.c  */
6212 < #line 2772 "conf_parser.y"
6212 > #line 2638 "conf_parser.y"
6213      {
6214    ConfigFileEntry.oper_umodes |= UMODE_NCHANGE;
6215   }
# Line 6354 | Line 6217 | yyreduce:
6217  
6218    case 540:
6219   /* Line 1813 of yacc.c  */
6220 < #line 2775 "conf_parser.y"
6220 > #line 2641 "conf_parser.y"
6221      {
6222    ConfigFileEntry.oper_umodes |= UMODE_REJ;
6223   }
# Line 6362 | Line 6225 | yyreduce:
6225  
6226    case 541:
6227   /* Line 1813 of yacc.c  */
6228 < #line 2778 "conf_parser.y"
6228 > #line 2644 "conf_parser.y"
6229      {
6230    ConfigFileEntry.oper_umodes |= UMODE_UNAUTH;
6231   }
# Line 6370 | Line 6233 | yyreduce:
6233  
6234    case 542:
6235   /* Line 1813 of yacc.c  */
6236 < #line 2781 "conf_parser.y"
6236 > #line 2647 "conf_parser.y"
6237      {
6238    ConfigFileEntry.oper_umodes |= UMODE_SPY;
6239   }
# Line 6378 | Line 6241 | yyreduce:
6241  
6242    case 543:
6243   /* Line 1813 of yacc.c  */
6244 < #line 2784 "conf_parser.y"
6244 > #line 2650 "conf_parser.y"
6245      {
6246    ConfigFileEntry.oper_umodes |= UMODE_EXTERNAL;
6247   }
# Line 6386 | Line 6249 | yyreduce:
6249  
6250    case 544:
6251   /* Line 1813 of yacc.c  */
6252 < #line 2787 "conf_parser.y"
6252 > #line 2653 "conf_parser.y"
6253      {
6254    ConfigFileEntry.oper_umodes |= UMODE_OPERWALL;
6255   }
# Line 6394 | Line 6257 | yyreduce:
6257  
6258    case 545:
6259   /* Line 1813 of yacc.c  */
6260 < #line 2790 "conf_parser.y"
6260 > #line 2656 "conf_parser.y"
6261      {
6262    ConfigFileEntry.oper_umodes |= UMODE_SERVNOTICE;
6263   }
# Line 6402 | Line 6265 | yyreduce:
6265  
6266    case 546:
6267   /* Line 1813 of yacc.c  */
6268 < #line 2793 "conf_parser.y"
6268 > #line 2659 "conf_parser.y"
6269      {
6270    ConfigFileEntry.oper_umodes |= UMODE_INVISIBLE;
6271   }
# Line 6410 | Line 6273 | yyreduce:
6273  
6274    case 547:
6275   /* Line 1813 of yacc.c  */
6276 < #line 2796 "conf_parser.y"
6276 > #line 2662 "conf_parser.y"
6277      {
6278    ConfigFileEntry.oper_umodes |= UMODE_WALLOP;
6279   }
# Line 6418 | Line 6281 | yyreduce:
6281  
6282    case 548:
6283   /* Line 1813 of yacc.c  */
6284 < #line 2799 "conf_parser.y"
6284 > #line 2665 "conf_parser.y"
6285      {
6286    ConfigFileEntry.oper_umodes |= UMODE_SOFTCALLERID;
6287   }
# Line 6426 | Line 6289 | yyreduce:
6289  
6290    case 549:
6291   /* Line 1813 of yacc.c  */
6292 < #line 2802 "conf_parser.y"
6292 > #line 2668 "conf_parser.y"
6293      {
6294    ConfigFileEntry.oper_umodes |= UMODE_CALLERID;
6295   }
# Line 6434 | Line 6297 | yyreduce:
6297  
6298    case 550:
6299   /* Line 1813 of yacc.c  */
6300 < #line 2805 "conf_parser.y"
6300 > #line 2671 "conf_parser.y"
6301      {
6302    ConfigFileEntry.oper_umodes |= UMODE_LOCOPS;
6303   }
# Line 6442 | Line 6305 | yyreduce:
6305  
6306    case 551:
6307   /* Line 1813 of yacc.c  */
6308 < #line 2810 "conf_parser.y"
6308 > #line 2676 "conf_parser.y"
6309      {
6310    ConfigFileEntry.oper_only_umodes = 0;
6311   }
# Line 6450 | Line 6313 | yyreduce:
6313  
6314    case 555:
6315   /* Line 1813 of yacc.c  */
6316 < #line 2816 "conf_parser.y"
6316 > #line 2682 "conf_parser.y"
6317      {
6318    ConfigFileEntry.oper_only_umodes |= UMODE_BOTS;
6319   }
# Line 6458 | Line 6321 | yyreduce:
6321  
6322    case 556:
6323   /* Line 1813 of yacc.c  */
6324 < #line 2819 "conf_parser.y"
6324 > #line 2685 "conf_parser.y"
6325      {
6326    ConfigFileEntry.oper_only_umodes |= UMODE_CCONN;
6327   }
# Line 6466 | Line 6329 | yyreduce:
6329  
6330    case 557:
6331   /* Line 1813 of yacc.c  */
6332 < #line 2822 "conf_parser.y"
6332 > #line 2688 "conf_parser.y"
6333      {
6334    ConfigFileEntry.oper_only_umodes |= UMODE_CCONN_FULL;
6335   }
# Line 6474 | Line 6337 | yyreduce:
6337  
6338    case 558:
6339   /* Line 1813 of yacc.c  */
6340 < #line 2825 "conf_parser.y"
6340 > #line 2691 "conf_parser.y"
6341      {
6342    ConfigFileEntry.oper_only_umodes |= UMODE_DEAF;
6343   }
# Line 6482 | Line 6345 | yyreduce:
6345  
6346    case 559:
6347   /* Line 1813 of yacc.c  */
6348 < #line 2828 "conf_parser.y"
6348 > #line 2694 "conf_parser.y"
6349      {
6350    ConfigFileEntry.oper_only_umodes |= UMODE_DEBUG;
6351   }
# Line 6490 | Line 6353 | yyreduce:
6353  
6354    case 560:
6355   /* Line 1813 of yacc.c  */
6356 < #line 2831 "conf_parser.y"
6356 > #line 2697 "conf_parser.y"
6357      {
6358    ConfigFileEntry.oper_only_umodes |= UMODE_FULL;
6359   }
# Line 6498 | Line 6361 | yyreduce:
6361  
6362    case 561:
6363   /* Line 1813 of yacc.c  */
6364 < #line 2834 "conf_parser.y"
6364 > #line 2700 "conf_parser.y"
6365      {
6366    ConfigFileEntry.oper_only_umodes |= UMODE_SKILL;
6367   }
# Line 6506 | Line 6369 | yyreduce:
6369  
6370    case 562:
6371   /* Line 1813 of yacc.c  */
6372 < #line 2837 "conf_parser.y"
6372 > #line 2703 "conf_parser.y"
6373      {
6374    ConfigFileEntry.oper_only_umodes |= UMODE_HIDDEN;
6375   }
# Line 6514 | Line 6377 | yyreduce:
6377  
6378    case 563:
6379   /* Line 1813 of yacc.c  */
6380 < #line 2840 "conf_parser.y"
6380 > #line 2706 "conf_parser.y"
6381      {
6382    ConfigFileEntry.oper_only_umodes |= UMODE_NCHANGE;
6383   }
# Line 6522 | Line 6385 | yyreduce:
6385  
6386    case 564:
6387   /* Line 1813 of yacc.c  */
6388 < #line 2843 "conf_parser.y"
6388 > #line 2709 "conf_parser.y"
6389      {
6390    ConfigFileEntry.oper_only_umodes |= UMODE_REJ;
6391   }
# Line 6530 | Line 6393 | yyreduce:
6393  
6394    case 565:
6395   /* Line 1813 of yacc.c  */
6396 < #line 2846 "conf_parser.y"
6396 > #line 2712 "conf_parser.y"
6397      {
6398    ConfigFileEntry.oper_only_umodes |= UMODE_UNAUTH;
6399   }
# Line 6538 | Line 6401 | yyreduce:
6401  
6402    case 566:
6403   /* Line 1813 of yacc.c  */
6404 < #line 2849 "conf_parser.y"
6404 > #line 2715 "conf_parser.y"
6405      {
6406    ConfigFileEntry.oper_only_umodes |= UMODE_SPY;
6407   }
# Line 6546 | Line 6409 | yyreduce:
6409  
6410    case 567:
6411   /* Line 1813 of yacc.c  */
6412 < #line 2852 "conf_parser.y"
6412 > #line 2718 "conf_parser.y"
6413      {
6414    ConfigFileEntry.oper_only_umodes |= UMODE_EXTERNAL;
6415   }
# Line 6554 | Line 6417 | yyreduce:
6417  
6418    case 568:
6419   /* Line 1813 of yacc.c  */
6420 < #line 2855 "conf_parser.y"
6420 > #line 2721 "conf_parser.y"
6421      {
6422    ConfigFileEntry.oper_only_umodes |= UMODE_OPERWALL;
6423   }
# Line 6562 | Line 6425 | yyreduce:
6425  
6426    case 569:
6427   /* Line 1813 of yacc.c  */
6428 < #line 2858 "conf_parser.y"
6428 > #line 2724 "conf_parser.y"
6429      {
6430    ConfigFileEntry.oper_only_umodes |= UMODE_SERVNOTICE;
6431   }
# Line 6570 | Line 6433 | yyreduce:
6433  
6434    case 570:
6435   /* Line 1813 of yacc.c  */
6436 < #line 2861 "conf_parser.y"
6436 > #line 2727 "conf_parser.y"
6437      {
6438    ConfigFileEntry.oper_only_umodes |= UMODE_INVISIBLE;
6439   }
# Line 6578 | Line 6441 | yyreduce:
6441  
6442    case 571:
6443   /* Line 1813 of yacc.c  */
6444 < #line 2864 "conf_parser.y"
6444 > #line 2730 "conf_parser.y"
6445      {
6446    ConfigFileEntry.oper_only_umodes |= UMODE_WALLOP;
6447   }
# Line 6586 | Line 6449 | yyreduce:
6449  
6450    case 572:
6451   /* Line 1813 of yacc.c  */
6452 < #line 2867 "conf_parser.y"
6452 > #line 2733 "conf_parser.y"
6453      {
6454    ConfigFileEntry.oper_only_umodes |= UMODE_SOFTCALLERID;
6455   }
# Line 6594 | Line 6457 | yyreduce:
6457  
6458    case 573:
6459   /* Line 1813 of yacc.c  */
6460 < #line 2870 "conf_parser.y"
6460 > #line 2736 "conf_parser.y"
6461      {
6462    ConfigFileEntry.oper_only_umodes |= UMODE_CALLERID;
6463   }
# Line 6602 | Line 6465 | yyreduce:
6465  
6466    case 574:
6467   /* Line 1813 of yacc.c  */
6468 < #line 2873 "conf_parser.y"
6468 > #line 2739 "conf_parser.y"
6469      {
6470    ConfigFileEntry.oper_only_umodes |= UMODE_LOCOPS;
6471   }
# Line 6610 | Line 6473 | yyreduce:
6473  
6474    case 575:
6475   /* Line 1813 of yacc.c  */
6476 < #line 2878 "conf_parser.y"
6476 > #line 2744 "conf_parser.y"
6477      {
6478    ConfigFileEntry.min_nonwildcard = (yyvsp[(3) - (4)].number);
6479   }
# Line 6618 | Line 6481 | yyreduce:
6481  
6482    case 576:
6483   /* Line 1813 of yacc.c  */
6484 < #line 2883 "conf_parser.y"
6484 > #line 2749 "conf_parser.y"
6485      {
6486    ConfigFileEntry.min_nonwildcard_simple = (yyvsp[(3) - (4)].number);
6487   }
# Line 6626 | Line 6489 | yyreduce:
6489  
6490    case 577:
6491   /* Line 1813 of yacc.c  */
6492 < #line 2888 "conf_parser.y"
6492 > #line 2754 "conf_parser.y"
6493      {
6494    ConfigFileEntry.default_floodcount = (yyvsp[(3) - (4)].number);
6495   }
# Line 6634 | Line 6497 | yyreduce:
6497  
6498    case 596:
6499   /* Line 1813 of yacc.c  */
6500 < #line 2911 "conf_parser.y"
6500 > #line 2777 "conf_parser.y"
6501      {
6502    ConfigChannel.disable_fake_channels = yylval.number;
6503   }
# Line 6642 | Line 6505 | yyreduce:
6505  
6506    case 597:
6507   /* Line 1813 of yacc.c  */
6508 < #line 2916 "conf_parser.y"
6508 > #line 2782 "conf_parser.y"
6509      {
6510    ConfigChannel.restrict_channels = yylval.number;
6511   }
# Line 6650 | Line 6513 | yyreduce:
6513  
6514    case 598:
6515   /* Line 1813 of yacc.c  */
6516 < #line 2921 "conf_parser.y"
6516 > #line 2787 "conf_parser.y"
6517      {
6518    ConfigChannel.knock_delay = (yyvsp[(3) - (4)].number);
6519   }
# Line 6658 | Line 6521 | yyreduce:
6521  
6522    case 599:
6523   /* Line 1813 of yacc.c  */
6524 < #line 2926 "conf_parser.y"
6524 > #line 2792 "conf_parser.y"
6525      {
6526    ConfigChannel.knock_delay_channel = (yyvsp[(3) - (4)].number);
6527   }
# Line 6666 | Line 6529 | yyreduce:
6529  
6530    case 600:
6531   /* Line 1813 of yacc.c  */
6532 < #line 2931 "conf_parser.y"
6532 > #line 2797 "conf_parser.y"
6533      {
6534    ConfigChannel.max_chans_per_user = (yyvsp[(3) - (4)].number);
6535   }
# Line 6674 | Line 6537 | yyreduce:
6537  
6538    case 601:
6539   /* Line 1813 of yacc.c  */
6540 < #line 2936 "conf_parser.y"
6540 > #line 2802 "conf_parser.y"
6541      {
6542    ConfigChannel.max_chans_per_oper = (yyvsp[(3) - (4)].number);
6543   }
# Line 6682 | Line 6545 | yyreduce:
6545  
6546    case 602:
6547   /* Line 1813 of yacc.c  */
6548 < #line 2941 "conf_parser.y"
6548 > #line 2807 "conf_parser.y"
6549      {
6550    ConfigChannel.quiet_on_ban = yylval.number;
6551   }
# Line 6690 | Line 6553 | yyreduce:
6553  
6554    case 603:
6555   /* Line 1813 of yacc.c  */
6556 < #line 2946 "conf_parser.y"
6556 > #line 2812 "conf_parser.y"
6557      {
6558    ConfigChannel.max_bans = (yyvsp[(3) - (4)].number);
6559   }
# Line 6698 | Line 6561 | yyreduce:
6561  
6562    case 604:
6563   /* Line 1813 of yacc.c  */
6564 < #line 2951 "conf_parser.y"
6564 > #line 2817 "conf_parser.y"
6565      {
6566    ConfigChannel.default_split_user_count = (yyvsp[(3) - (4)].number);
6567   }
# Line 6706 | Line 6569 | yyreduce:
6569  
6570    case 605:
6571   /* Line 1813 of yacc.c  */
6572 < #line 2956 "conf_parser.y"
6572 > #line 2822 "conf_parser.y"
6573      {
6574    ConfigChannel.default_split_server_count = (yyvsp[(3) - (4)].number);
6575   }
# Line 6714 | Line 6577 | yyreduce:
6577  
6578    case 606:
6579   /* Line 1813 of yacc.c  */
6580 < #line 2961 "conf_parser.y"
6580 > #line 2827 "conf_parser.y"
6581      {
6582    ConfigChannel.no_create_on_split = yylval.number;
6583   }
# Line 6722 | Line 6585 | yyreduce:
6585  
6586    case 607:
6587   /* Line 1813 of yacc.c  */
6588 < #line 2966 "conf_parser.y"
6588 > #line 2832 "conf_parser.y"
6589      {
6590    ConfigChannel.no_join_on_split = yylval.number;
6591   }
# Line 6730 | Line 6593 | yyreduce:
6593  
6594    case 608:
6595   /* Line 1813 of yacc.c  */
6596 < #line 2971 "conf_parser.y"
6596 > #line 2837 "conf_parser.y"
6597      {
6598    GlobalSetOptions.joinfloodcount = yylval.number;
6599   }
# Line 6738 | Line 6601 | yyreduce:
6601  
6602    case 609:
6603   /* Line 1813 of yacc.c  */
6604 < #line 2976 "conf_parser.y"
6604 > #line 2842 "conf_parser.y"
6605      {
6606    GlobalSetOptions.joinfloodtime = yylval.number;
6607   }
# Line 6746 | Line 6609 | yyreduce:
6609  
6610    case 620:
6611   /* Line 1813 of yacc.c  */
6612 < #line 2994 "conf_parser.y"
6612 > #line 2860 "conf_parser.y"
6613      {
6614    if (conf_parser_ctx.pass == 2)
6615      ConfigServerHide.flatten_links = yylval.number;
# Line 6755 | Line 6618 | yyreduce:
6618  
6619    case 621:
6620   /* Line 1813 of yacc.c  */
6621 < #line 3000 "conf_parser.y"
6621 > #line 2866 "conf_parser.y"
6622      {
6623    if (conf_parser_ctx.pass == 2)
6624      ConfigServerHide.hide_servers = yylval.number;
# Line 6764 | Line 6627 | yyreduce:
6627  
6628    case 622:
6629   /* Line 1813 of yacc.c  */
6630 < #line 3006 "conf_parser.y"
6630 > #line 2872 "conf_parser.y"
6631      {
6632    if (conf_parser_ctx.pass == 2)
6633    {
6634      MyFree(ConfigServerHide.hidden_name);
6635 <    DupString(ConfigServerHide.hidden_name, yylval.string);
6635 >    ConfigServerHide.hidden_name = xstrdup(yylval.string);
6636    }
6637   }
6638      break;
6639  
6640    case 623:
6641   /* Line 1813 of yacc.c  */
6642 < #line 3015 "conf_parser.y"
6642 > #line 2881 "conf_parser.y"
6643      {
6644    if (conf_parser_ctx.pass == 2)
6645    {
# Line 6793 | Line 6656 | yyreduce:
6656  
6657    case 624:
6658   /* Line 1813 of yacc.c  */
6659 < #line 3029 "conf_parser.y"
6659 > #line 2895 "conf_parser.y"
6660      {
6661    if (conf_parser_ctx.pass == 2)
6662      ConfigServerHide.hidden = yylval.number;
# Line 6802 | Line 6665 | yyreduce:
6665  
6666    case 625:
6667   /* Line 1813 of yacc.c  */
6668 < #line 3035 "conf_parser.y"
6668 > #line 2901 "conf_parser.y"
6669      {
6670    if (conf_parser_ctx.pass == 2)
6671      ConfigServerHide.hide_server_ips = yylval.number;
# Line 6811 | Line 6674 | yyreduce:
6674  
6675  
6676   /* Line 1813 of yacc.c  */
6677 < #line 6815 "conf_parser.c"
6677 > #line 6678 "conf_parser.c"
6678        default: break;
6679      }
6680    /* User semantic actions sometimes alter yychar, and that requires

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)