ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid-7.2/src/y.tab.c
Revision: 136
Committed: Sat Oct 15 23:39:54 2005 UTC (18 years, 6 months ago) by db
Content type: text/x-csrc
File size: 177254 byte(s)
Log Message:
- backport fixes from 7.3 (HEAD) for testline and ~ flags


File Contents

# User Rev Content
1 db 136 #include <stdlib.h>
2     #ifndef lint
3     #ifdef __unused
4     __unused
5 adx 30 #endif
6 db 136 static char const
7     yyrcsid[] = "$FreeBSD: src/usr.bin/yacc/skeleton.c,v 1.37 2003/02/12 18:03:55 davidc Exp $";
8     #endif
9     #define YYBYACC 1
10     #define YYMAJOR 1
11     #define YYMINOR 9
12     #define YYLEX yylex()
13     #define YYEMPTY -1
14     #define yyclearin (yychar=(YYEMPTY))
15     #define yyerrok (yyerrflag=0)
16     #define YYRECOVERING() (yyerrflag!=0)
17     #if defined(__cplusplus) || __STDC__
18     static int yygrowstack(void);
19     #else
20     static int yygrowstack();
21     #endif
22     #define YYPREFIX "yy"
23     #line 26 "ircd_parser.y"
24 adx 30
25     #define YY_NO_UNPUT
26     #include <sys/types.h>
27    
28     #include "stdinc.h"
29     #include "dalloca.h"
30     #include "ircd.h"
31     #include "tools.h"
32     #include "list.h"
33     #include "s_conf.h"
34     #include "event.h"
35     #include "s_log.h"
36     #include "client.h" /* for UMODE_ALL only */
37     #include "pcre.h"
38     #include "irc_string.h"
39     #include "irc_getaddrinfo.h"
40     #include "sprintf_irc.h"
41     #include "memory.h"
42     #include "modules.h"
43     #include "s_serv.h" /* for CAP_LL / IsCapable */
44     #include "hostmask.h"
45     #include "send.h"
46     #include "listener.h"
47     #include "resv.h"
48     #include "numeric.h"
49     #include "s_user.h"
50    
51     #ifdef HAVE_LIBCRYPTO
52     #include <openssl/rsa.h>
53     #include <openssl/bio.h>
54     #include <openssl/pem.h>
55     #endif
56    
57     static char *class_name = NULL;
58     static struct ConfItem *yy_conf = NULL;
59     static struct AccessItem *yy_aconf = NULL;
60     static struct MatchItem *yy_match_item = NULL;
61     static struct ClassItem *yy_class = NULL;
62     static char *yy_class_name = NULL;
63    
64     static dlink_list col_conf_list = { NULL, NULL, 0 };
65     static dlink_list hub_conf_list = { NULL, NULL, 0 };
66     static dlink_list leaf_conf_list = { NULL, NULL, 0 };
67     static unsigned int listener_flags = 0;
68     static unsigned int regex_ban = 0;
69     static char userbuf[IRCD_BUFSIZE];
70     static char hostbuf[IRCD_BUFSIZE];
71     static char reasonbuf[REASONLEN + 1];
72     static char gecos_name[REALLEN * 4];
73    
74     extern dlink_list gdeny_items; /* XXX */
75    
76     static char *resv_reason = NULL;
77     static char *listener_address = NULL;
78     static int not_atom = 0;
79    
80     struct CollectItem {
81     dlink_node node;
82     char *name;
83     char *user;
84     char *host;
85     char *passwd;
86     int port;
87     int flags;
88     #ifdef HAVE_LIBCRYPTO
89     char *rsa_public_key_file;
90     RSA *rsa_public_key;
91     #endif
92     };
93    
94     static void
95     free_collect_item(struct CollectItem *item)
96     {
97     MyFree(item->name);
98     MyFree(item->user);
99     MyFree(item->host);
100     MyFree(item->passwd);
101     #ifdef HAVE_LIBCRYPTO
102     MyFree(item->rsa_public_key_file);
103     #endif
104     MyFree(item);
105     }
106    
107     static void
108     unhook_hub_leaf_confs(void)
109     {
110     dlink_node *ptr;
111     dlink_node *next_ptr;
112     struct CollectItem *yy_hconf;
113     struct CollectItem *yy_lconf;
114    
115     DLINK_FOREACH_SAFE(ptr, next_ptr, hub_conf_list.head)
116     {
117     yy_hconf = ptr->data;
118     dlinkDelete(&yy_hconf->node, &hub_conf_list);
119     free_collect_item(yy_hconf);
120     }
121    
122     DLINK_FOREACH_SAFE(ptr, next_ptr, leaf_conf_list.head)
123     {
124     yy_lconf = ptr->data;
125     dlinkDelete(&yy_lconf->node, &leaf_conf_list);
126     free_collect_item(yy_lconf);
127     }
128     }
129    
130     #line 134 "ircd_parser.y"
131 db 136 typedef union {
132 adx 30 int number;
133     char *string;
134 michael 56 } YYSTYPE;
135 db 136 #line 136 "y.tab.c"
136     #define YYERRCODE 256
137     #define ACCEPT_PASSWORD 257
138     #define ACTION 258
139     #define ADMIN 259
140     #define AFTYPE 260
141     #define T_ALLOW 261
142     #define ANTI_NICK_FLOOD 262
143     #define ANTI_SPAM_EXIT_MESSAGE_TIME 263
144     #define AUTOCONN 264
145     #define T_BLOCK 265
146     #define BURST_AWAY 266
147     #define BURST_TOPICWHO 267
148     #define BYTES 268
149     #define KBYTES 269
150     #define MBYTES 270
151     #define GBYTES 271
152     #define TBYTES 272
153     #define CALLER_ID_WAIT 273
154     #define CAN_FLOOD 274
155     #define CAN_IDLE 275
156     #define CHANNEL 276
157     #define CIDR_BITLEN_IPV4 277
158     #define CIDR_BITLEN_IPV6 278
159     #define CIPHER_PREFERENCE 279
160     #define CLASS 280
161     #define COMPRESSED 281
162     #define COMPRESSION_LEVEL 282
163     #define CONNECT 283
164     #define CONNECTFREQ 284
165     #define CRYPTLINK 285
166     #define DEFAULT_CIPHER_PREFERENCE 286
167     #define DEFAULT_FLOODCOUNT 287
168     #define DEFAULT_SPLIT_SERVER_COUNT 288
169     #define DEFAULT_SPLIT_USER_COUNT 289
170     #define DENY 290
171     #define DESCRIPTION 291
172     #define DIE 292
173     #define DISABLE_AUTH 293
174     #define DISABLE_HIDDEN 294
175     #define DISABLE_LOCAL_CHANNELS 295
176     #define DISABLE_REMOTE_COMMANDS 296
177     #define DOT_IN_IP6_ADDR 297
178     #define DOTS_IN_IDENT 298
179     #define DURATION 299
180     #define EGDPOOL_PATH 300
181     #define EMAIL 301
182     #define ENABLE 302
183     #define ENCRYPTED 303
184     #define EXCEED_LIMIT 304
185     #define EXEMPT 305
186     #define FAILED_OPER_NOTICE 306
187     #define FAKENAME 307
188     #define IRCD_FLAGS 308
189     #define FLATTEN_LINKS 309
190     #define FFAILED_OPERLOG 310
191     #define FKILLLOG 311
192     #define FKLINELOG 312
193     #define FGLINELOG 313
194     #define FIOERRLOG 314
195     #define FOPERLOG 315
196     #define FOPERSPYLOG 316
197     #define FUSERLOG 317
198     #define GECOS 318
199     #define GENERAL 319
200     #define GLINE 320
201     #define GLINES 321
202     #define GLINE_EXEMPT 322
203     #define GLINE_LOG 323
204     #define GLINE_TIME 324
205     #define GLINE_MIN_CIDR 325
206     #define GLINE_MIN_CIDR6 326
207     #define GLOBAL_KILL 327
208     #define IRCD_AUTH 328
209     #define NEED_IDENT 329
210     #define HAVENT_READ_CONF 330
211     #define HIDDEN 331
212     #define HIDDEN_ADMIN 332
213     #define HIDDEN_NAME 333
214     #define HIDDEN_OPER 334
215     #define HIDE_SERVER_IPS 335
216     #define HIDE_SERVERS 336
217     #define HIDE_SPOOF_IPS 337
218     #define HOST 338
219     #define HUB 339
220     #define HUB_MASK 340
221     #define IDLETIME 341
222     #define IGNORE_BOGUS_TS 342
223     #define INVISIBLE_ON_CONNECT 343
224     #define IP 344
225     #define KILL 345
226     #define KILL_CHASE_TIME_LIMIT 346
227     #define KLINE 347
228     #define KLINE_EXEMPT 348
229     #define KLINE_REASON 349
230     #define KLINE_WITH_REASON 350
231     #define KNOCK_DELAY 351
232     #define KNOCK_DELAY_CHANNEL 352
233     #define LAZYLINK 353
234     #define LEAF_MASK 354
235     #define LINKS_DELAY 355
236     #define LISTEN 356
237     #define T_LOG 357
238     #define LOGGING 358
239     #define LOG_LEVEL 359
240     #define MAX_ACCEPT 360
241     #define MAX_BANS 361
242     #define MAX_CHANS_PER_USER 362
243     #define MAX_GLOBAL 363
244     #define MAX_IDENT 364
245     #define MAX_LOCAL 365
246     #define MAX_NICK_CHANGES 366
247     #define MAX_NICK_TIME 367
248     #define MAX_NUMBER 368
249     #define MAX_TARGETS 369
250     #define MESSAGE_LOCALE 370
251     #define MIN_NONWILDCARD 371
252     #define MIN_NONWILDCARD_SIMPLE 372
253     #define MODULE 373
254     #define MODULES 374
255     #define NAME 375
256     #define NEED_PASSWORD 376
257     #define NETWORK_DESC 377
258     #define NETWORK_NAME 378
259     #define NICK 379
260     #define NICK_CHANGES 380
261     #define NO_CREATE_ON_SPLIT 381
262     #define NO_JOIN_ON_SPLIT 382
263     #define NO_OPER_FLOOD 383
264     #define NO_TILDE 384
265     #define NOT 385
266     #define NUMBER 386
267     #define NUMBER_PER_IDENT 387
268     #define NUMBER_PER_CIDR 388
269     #define NUMBER_PER_IP 389
270     #define NUMBER_PER_IP_GLOBAL 390
271     #define OPERATOR 391
272     #define OPERS_BYPASS_CALLERID 392
273     #define OPER_LOG 393
274     #define OPER_ONLY_UMODES 394
275     #define OPER_PASS_RESV 395
276     #define OPER_SPY_T 396
277     #define OPER_UMODES 397
278     #define INVITE_OPS_ONLY 398
279     #define JOIN_FLOOD_COUNT 399
280     #define JOIN_FLOOD_TIME 400
281     #define PACE_WAIT 401
282     #define PACE_WAIT_SIMPLE 402
283     #define PASSWORD 403
284     #define PATH 404
285     #define PING_COOKIE 405
286     #define PING_TIME 406
287     #define PING_WARNING 407
288     #define PORT 408
289     #define QSTRING 409
290     #define QUIET_ON_BAN 410
291     #define REASON 411
292     #define REDIRPORT 412
293     #define REDIRSERV 413
294     #define REGEX_T 414
295     #define REHASH 415
296     #define TREJECT_HOLD_TIME 416
297     #define REMOTE 417
298     #define REMOTEBAN 418
299     #define RESTRICT_CHANNELS 419
300     #define RESTRICTED 420
301     #define RSA_PRIVATE_KEY_FILE 421
302     #define RSA_PUBLIC_KEY_FILE 422
303     #define SSL_CERTIFICATE_FILE 423
304     #define RESV 424
305     #define RESV_EXEMPT 425
306     #define SECONDS 426
307     #define MINUTES 427
308     #define HOURS 428
309     #define DAYS 429
310     #define WEEKS 430
311     #define SENDQ 431
312     #define SEND_PASSWORD 432
313     #define SERVERHIDE 433
314     #define SERVERINFO 434
315     #define SERVLINK_PATH 435
316     #define IRCD_SID 436
317     #define TKLINE_EXPIRE_NOTICES 437
318     #define T_SHARED 438
319     #define T_CLUSTER 439
320     #define TYPE 440
321     #define SHORT_MOTD 441
322     #define SILENT 442
323     #define SPOOF 443
324     #define SPOOF_NOTICE 444
325     #define STATS_I_OPER_ONLY 445
326     #define STATS_K_OPER_ONLY 446
327     #define STATS_O_OPER_ONLY 447
328     #define STATS_P_OPER_ONLY 448
329     #define TBOOL 449
330     #define TMASKED 450
331     #define T_REJECT 451
332     #define TS_MAX_DELTA 452
333     #define TS_WARN_DELTA 453
334     #define TWODOTS 454
335     #define T_ALL 455
336     #define T_BOTS 456
337     #define T_SOFTCALLERID 457
338     #define T_CALLERID 458
339     #define T_CCONN 459
340     #define T_CLIENT_FLOOD 460
341     #define T_DEAF 461
342     #define T_DEBUG 462
343     #define T_DRONE 463
344     #define T_EXTERNAL 464
345     #define T_FULL 465
346     #define T_INVISIBLE 466
347     #define T_IPV4 467
348     #define T_IPV6 468
349     #define T_LOCOPS 469
350     #define T_LOGPATH 470
351     #define T_L_CRIT 471
352     #define T_L_DEBUG 472
353     #define T_L_ERROR 473
354     #define T_L_INFO 474
355     #define T_L_NOTICE 475
356     #define T_L_TRACE 476
357     #define T_L_WARN 477
358     #define T_MAX_CLIENTS 478
359     #define T_NCHANGE 479
360     #define T_OPERWALL 480
361     #define T_REJ 481
362     #define T_SERVNOTICE 482
363     #define T_SKILL 483
364     #define T_SPY 484
365     #define T_SSL 485
366     #define T_UMODES 486
367     #define T_UNAUTH 487
368     #define T_UNRESV 488
369     #define T_UNXLINE 489
370     #define T_WALLOP 490
371     #define THROTTLE_TIME 491
372     #define TOPICBURST 492
373     #define TRUE_NO_OPER_FLOOD 493
374     #define TKLINE 494
375     #define TXLINE 495
376     #define TRESV 496
377     #define UNKLINE 497
378     #define USER 498
379     #define USE_EGD 499
380     #define USE_EXCEPT 500
381     #define USE_INVEX 501
382     #define USE_KNOCK 502
383     #define USE_LOGGING 503
384     #define USE_WHOIS_ACTUALLY 504
385     #define VHOST 505
386     #define VHOST6 506
387     #define XLINE 507
388     #define WARN 508
389     #define WARN_NO_NLINE 509
390     const short yylhs[] = { -1,
391     0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
392     5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
393     5, 5, 5, 5, 2, 2, 1, 1, 1, 1,
394     1, 1, 4, 4, 3, 3, 3, 3, 25, 26,
395     26, 27, 27, 27, 28, 29, 13, 30, 30, 31,
396     31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
397     31, 42, 39, 32, 41, 35, 36, 37, 33, 40,
398     38, 34, 6, 43, 43, 44, 44, 44, 44, 45,
399     47, 46, 7, 48, 48, 49, 49, 49, 49, 49,
400     49, 49, 49, 49, 49, 49, 49, 49, 50, 51,
401     54, 61, 55, 59, 56, 57, 60, 58, 52, 52,
402     52, 52, 52, 52, 52, 53, 63, 8, 62, 62,
403     64, 64, 66, 66, 66, 66, 66, 66, 66, 66,
404     66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
405     66, 66, 66, 66, 66, 67, 65, 68, 69, 86,
406     87, 73, 89, 72, 90, 90, 91, 91, 91, 91,
407     91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
408     91, 91, 91, 91, 74, 75, 81, 76, 77, 78,
409     79, 80, 82, 83, 84, 70, 71, 85, 92, 88,
410     93, 93, 96, 94, 97, 94, 95, 95, 95, 95,
411     95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
412     95, 95, 99, 10, 98, 98, 100, 100, 102, 102,
413     102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
414     102, 102, 103, 101, 106, 107, 109, 110, 111, 112,
415     113, 114, 115, 104, 105, 108, 116, 11, 119, 118,
416     120, 120, 121, 121, 117, 117, 122, 122, 122, 122,
417     122, 123, 126, 126, 127, 127, 124, 125, 128, 12,
418     129, 129, 130, 130, 130, 130, 130, 130, 130, 130,
419     130, 130, 130, 130, 130, 130, 130, 130, 130, 131,
420     132, 141, 133, 146, 147, 134, 148, 148, 151, 149,
421     152, 149, 150, 150, 150, 150, 150, 150, 150, 150,
422     150, 150, 135, 136, 137, 144, 138, 139, 140, 142,
423     143, 145, 153, 15, 154, 154, 155, 155, 155, 155,
424     156, 157, 158, 159, 16, 160, 160, 161, 161, 161,
425     161, 162, 163, 165, 164, 166, 166, 167, 167, 167,
426     167, 167, 167, 167, 167, 167, 167, 167, 168, 17,
427     169, 169, 170, 170, 170, 171, 173, 172, 174, 174,
428     175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
429     175, 177, 18, 176, 176, 178, 178, 180, 180, 180,
430     180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
431     180, 180, 180, 180, 180, 180, 181, 179, 182, 183,
432     184, 185, 187, 186, 186, 188, 199, 189, 200, 200,
433     203, 201, 204, 201, 202, 202, 202, 202, 202, 202,
434     197, 194, 196, 195, 193, 190, 191, 192, 198, 205,
435     19, 208, 207, 209, 209, 210, 206, 206, 211, 211,
436     211, 211, 212, 213, 214, 20, 215, 215, 216, 216,
437     216, 217, 218, 21, 219, 219, 220, 220, 221, 222,
438     24, 225, 224, 226, 226, 227, 223, 223, 228, 228,
439     228, 228, 229, 230, 22, 231, 231, 232, 232, 232,
440     232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
441     232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
442     232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
443     232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
444     232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
445     232, 232, 283, 284, 281, 285, 286, 282, 243, 233,
446     234, 272, 235, 236, 237, 238, 239, 240, 241, 242,
447     277, 244, 245, 246, 247, 249, 254, 250, 250, 252,
448     252, 251, 266, 267, 253, 255, 256, 257, 258, 260,
449     259, 248, 262, 271, 273, 274, 263, 264, 279, 280,
450     276, 287, 265, 288, 288, 289, 289, 289, 289, 289,
451     289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
452     289, 289, 289, 290, 261, 291, 291, 292, 292, 292,
453     292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
454     292, 292, 292, 292, 292, 269, 270, 268, 275, 278,
455     293, 23, 294, 294, 295, 295, 295, 295, 295, 295,
456     295, 296, 297, 302, 298, 303, 303, 304, 304, 299,
457     300, 305, 301, 306, 306, 307, 307, 9, 308, 308,
458     309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
459     309, 309, 309, 309, 309, 309, 309, 309, 309, 323,
460     310, 311, 312, 313, 315, 316, 317, 318, 319, 314,
461     320, 321, 322, 324, 325, 326, 327, 14, 328, 328,
462     329, 329, 329, 329, 329, 329, 329, 329, 330, 331,
463     335, 332, 334, 333, 336,
464 adx 30 };
465 db 136 const short yylen[] = { 2,
466     0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
467     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
468     1, 1, 2, 2, 0, 1, 2, 3, 3, 3,
469     3, 3, 0, 1, 2, 3, 3, 3, 5, 2,
470     1, 1, 1, 2, 4, 4, 5, 2, 1, 1,
471     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
472     2, 4, 4, 4, 4, 4, 4, 4, 4, 4,
473     4, 4, 5, 2, 1, 1, 1, 1, 2, 4,
474     4, 4, 5, 2, 1, 1, 1, 1, 1, 1,
475     1, 1, 1, 1, 1, 1, 1, 2, 4, 4,
476     4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
477     4, 4, 4, 4, 4, 4, 0, 7, 0, 1,
478     2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
479     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
480     1, 1, 1, 1, 2, 4, 1, 4, 4, 4,
481     4, 4, 0, 5, 3, 1, 1, 1, 1, 1,
482     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
483     1, 1, 1, 1, 4, 4, 4, 4, 4, 4,
484     4, 4, 4, 4, 4, 4, 4, 4, 0, 5,
485     3, 1, 0, 3, 0, 2, 1, 1, 1, 1,
486     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
487     1, 1, 0, 7, 0, 1, 2, 1, 1, 1,
488     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
489     1, 2, 4, 1, 4, 4, 4, 4, 4, 4,
490     4, 4, 4, 4, 4, 4, 0, 6, 0, 5,
491     3, 1, 1, 1, 2, 1, 1, 1, 1, 1,
492     2, 4, 3, 1, 1, 3, 4, 4, 0, 6,
493     2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
494     1, 1, 1, 1, 1, 1, 1, 1, 2, 4,
495     4, 4, 4, 4, 0, 5, 3, 1, 0, 3,
496     0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
497     1, 1, 4, 4, 4, 4, 4, 4, 4, 4,
498     4, 4, 0, 6, 2, 1, 1, 1, 1, 2,
499     4, 4, 4, 0, 6, 2, 1, 1, 1, 1,
500     2, 4, 4, 0, 5, 3, 1, 1, 1, 1,
501     1, 1, 1, 1, 1, 1, 1, 1, 0, 6,
502     2, 1, 1, 1, 2, 4, 0, 5, 3, 1,
503     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
504     1, 0, 7, 0, 1, 2, 1, 1, 1, 1,
505     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
506     1, 1, 1, 1, 1, 2, 4, 1, 4, 4,
507     4, 4, 4, 4, 4, 4, 0, 5, 3, 1,
508     0, 3, 0, 2, 1, 1, 1, 1, 1, 1,
509     4, 4, 4, 4, 4, 4, 4, 4, 4, 0,
510     6, 0, 5, 3, 1, 1, 2, 1, 1, 1,
511     1, 1, 4, 4, 0, 6, 2, 1, 1, 1,
512     1, 4, 4, 5, 2, 1, 1, 1, 4, 0,
513     6, 0, 5, 3, 1, 1, 2, 1, 1, 1,
514     1, 1, 4, 4, 5, 2, 1, 1, 1, 1,
515     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
516     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
517     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
518     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
519     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
520     1, 1, 4, 4, 4, 4, 4, 4, 4, 4,
521     4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
522     4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
523     4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
524     4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
525     4, 0, 5, 3, 1, 1, 1, 1, 1, 1,
526     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
527     1, 1, 1, 0, 5, 3, 1, 1, 1, 1,
528     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
529     1, 1, 1, 1, 1, 4, 4, 4, 4, 4,
530     0, 6, 2, 1, 1, 1, 1, 1, 1, 1,
531     1, 4, 4, 0, 5, 3, 1, 1, 1, 4,
532     4, 0, 5, 3, 1, 1, 1, 5, 2, 1,
533     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
534     1, 1, 1, 1, 1, 1, 1, 1, 1, 4,
535     4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
536     4, 4, 4, 4, 4, 4, 4, 5, 2, 1,
537     1, 1, 1, 1, 1, 1, 1, 1, 4, 4,
538     4, 4, 4, 4, 4,
539 adx 30 };
540 db 136 const short yydefred[] = { 1,
541     0, 0, 0, 0, 213, 382, 455, 0, 470, 0,
542     641, 269, 440, 247, 0, 0, 117, 323, 0, 0,
543     334, 359, 2, 3, 4, 5, 6, 7, 8, 9,
544     10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
545     20, 21, 22, 23, 24, 0, 0, 0, 0, 0,
546     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
547     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
548     75, 76, 77, 78, 689, 0, 0, 0, 0, 0,
549     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
550     0, 0, 0, 0, 670, 671, 672, 673, 674, 675,
551     676, 677, 678, 679, 680, 681, 682, 683, 684, 685,
552     686, 687, 688, 234, 0, 216, 408, 0, 385, 0,
553     468, 0, 0, 466, 467, 0, 542, 0, 0, 0,
554     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
555     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
556     0, 0, 0, 0, 0, 0, 0, 0, 0, 614,
557     0, 592, 0, 0, 0, 0, 0, 0, 0, 0,
558     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
559     0, 0, 487, 488, 489, 490, 491, 492, 493, 494,
560     495, 496, 497, 498, 499, 500, 501, 502, 503, 504,
561     505, 506, 507, 508, 509, 510, 511, 512, 513, 514,
562     515, 516, 517, 518, 519, 520, 521, 522, 523, 524,
563     525, 526, 527, 528, 529, 530, 531, 532, 533, 534,
564     535, 536, 537, 538, 539, 540, 541, 0, 0, 0,
565     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
566     0, 0, 0, 0, 0, 85, 86, 87, 88, 89,
567     90, 91, 92, 93, 94, 95, 96, 97, 0, 0,
568     0, 0, 41, 42, 43, 147, 0, 120, 0, 718,
569     0, 0, 0, 0, 0, 0, 0, 0, 710, 711,
570     712, 713, 714, 715, 716, 717, 0, 0, 0, 0,
571     0, 0, 0, 0, 0, 0, 0, 0, 0, 49,
572     50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
573     60, 0, 0, 79, 0, 0, 0, 0, 74, 0,
574     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
575     0, 0, 0, 0, 0, 0, 0, 0, 669, 0,
576     0, 461, 0, 0, 0, 458, 459, 460, 0, 0,
577     465, 482, 0, 0, 472, 0, 481, 478, 479, 480,
578     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
579     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
580     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
581     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
582     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
583     0, 0, 0, 0, 0, 486, 651, 662, 0, 0,
584     654, 0, 0, 0, 644, 645, 646, 647, 648, 649,
585     650, 0, 0, 0, 0, 0, 295, 0, 0, 0,
586     0, 0, 0, 0, 0, 0, 0, 0, 0, 272,
587     273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
588     283, 284, 285, 286, 287, 288, 452, 0, 442, 0,
589     0, 451, 448, 449, 450, 0, 249, 0, 0, 0,
590     0, 258, 256, 257, 259, 260, 98, 0, 0, 0,
591     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
592     84, 44, 0, 0, 0, 40, 0, 0, 0, 0,
593     0, 0, 326, 327, 328, 329, 0, 0, 0, 0,
594     0, 0, 0, 0, 709, 61, 0, 0, 0, 0,
595     0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
596     0, 344, 0, 0, 337, 338, 339, 340, 0, 0,
597     367, 0, 362, 363, 364, 0, 0, 0, 73, 0,
598     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
599     0, 0, 0, 0, 0, 0, 0, 0, 668, 0,
600     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
601     0, 0, 0, 0, 218, 219, 220, 221, 222, 223,
602     224, 225, 226, 227, 228, 229, 230, 231, 0, 0,
603     0, 0, 0, 0, 0, 0, 0, 0, 417, 0,
604     0, 0, 0, 0, 0, 0, 0, 0, 387, 388,
605     389, 390, 391, 392, 393, 394, 395, 396, 397, 398,
606     399, 400, 401, 402, 403, 404, 405, 0, 0, 0,
607     457, 0, 464, 0, 0, 0, 0, 477, 0, 0,
608     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
609     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
610     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
611     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
612     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
613     0, 0, 0, 0, 0, 485, 0, 0, 0, 0,
614     0, 0, 0, 643, 289, 0, 0, 0, 0, 0,
615     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
616     0, 0, 271, 0, 0, 0, 0, 447, 261, 0,
617     0, 0, 0, 0, 255, 0, 0, 0, 0, 0,
618     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
619     0, 0, 0, 83, 0, 0, 39, 0, 0, 0,
620     0, 0, 189, 0, 0, 0, 0, 0, 0, 0,
621     0, 0, 0, 0, 0, 0, 153, 0, 0, 0,
622     0, 122, 123, 124, 125, 126, 127, 128, 129, 130,
623     131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
624     141, 142, 143, 144, 330, 0, 0, 0, 0, 325,
625     0, 0, 0, 0, 0, 0, 0, 708, 0, 0,
626     0, 0, 0, 0, 0, 0, 0, 0, 0, 47,
627     341, 0, 0, 0, 0, 336, 365, 0, 0, 0,
628     361, 82, 81, 80, 705, 702, 701, 691, 0, 0,
629     0, 0, 0, 26, 27, 695, 696, 700, 698, 703,
630     704, 697, 706, 707, 699, 690, 692, 693, 694, 232,
631     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
632     0, 0, 0, 0, 217, 406, 0, 0, 0, 0,
633     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
634     0, 0, 0, 0, 0, 386, 0, 0, 456, 469,
635     0, 0, 0, 471, 554, 558, 545, 573, 586, 585,
636     638, 590, 552, 640, 582, 588, 553, 543, 544, 561,
637     550, 581, 551, 564, 549, 563, 562, 557, 556, 555,
638     583, 580, 636, 637, 577, 574, 618, 633, 634, 619,
639     620, 621, 628, 622, 631, 635, 624, 629, 625, 630,
640     623, 627, 626, 632, 0, 617, 579, 596, 611, 612,
641     597, 598, 599, 606, 600, 609, 613, 602, 607, 603,
642     608, 601, 605, 604, 610, 0, 595, 572, 575, 589,
643     547, 584, 548, 576, 570, 571, 568, 569, 566, 567,
644     560, 559, 0, 0, 0, 34, 35, 639, 591, 578,
645     587, 546, 565, 0, 0, 0, 0, 0, 0, 642,
646     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
647     0, 0, 0, 0, 0, 0, 270, 0, 0, 0,
648     441, 0, 0, 0, 0, 0, 264, 248, 102, 108,
649     106, 105, 107, 103, 104, 101, 109, 115, 110, 114,
650     112, 113, 111, 100, 99, 116, 45, 46, 145, 0,
651     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
652     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
653     0, 0, 121, 0, 0, 0, 324, 724, 719, 723,
654     721, 725, 720, 722, 66, 72, 64, 68, 67, 63,
655     62, 65, 71, 69, 70, 0, 0, 0, 335, 0,
656     0, 360, 28, 29, 30, 31, 32, 0, 0, 0,
657     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
658     214, 0, 0, 0, 0, 0, 0, 0, 0, 0,
659     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
660     383, 462, 463, 483, 484, 476, 0, 475, 615, 0,
661     593, 0, 36, 37, 38, 667, 666, 0, 665, 653,
662     652, 659, 658, 0, 657, 661, 660, 316, 293, 294,
663     315, 299, 0, 298, 0, 318, 314, 313, 322, 317,
664     291, 321, 320, 319, 292, 290, 454, 446, 0, 445,
665     453, 254, 253, 0, 252, 268, 267, 0, 262, 0,
666     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
667     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
668     0, 0, 118, 332, 333, 331, 342, 348, 354, 358,
669     357, 356, 353, 349, 352, 355, 350, 351, 0, 347,
670     343, 366, 371, 377, 381, 380, 379, 376, 372, 375,
671     378, 373, 374, 0, 370, 244, 245, 238, 240, 242,
672     241, 239, 233, 246, 237, 235, 236, 243, 412, 414,
673     415, 435, 439, 438, 434, 433, 432, 416, 421, 0,
674     420, 0, 409, 436, 437, 407, 413, 431, 411, 410,
675     473, 0, 616, 594, 663, 0, 655, 0, 0, 296,
676     0, 307, 308, 304, 310, 306, 305, 312, 309, 311,
677     303, 302, 443, 0, 250, 0, 266, 263, 185, 152,
678     183, 150, 193, 0, 192, 0, 181, 175, 186, 187,
679     178, 146, 182, 149, 184, 176, 177, 151, 188, 157,
680     172, 173, 158, 159, 160, 167, 161, 170, 174, 163,
681     168, 164, 169, 162, 166, 165, 171, 0, 156, 180,
682     148, 179, 345, 0, 368, 0, 0, 418, 0, 428,
683     429, 426, 427, 425, 430, 424, 474, 664, 656, 300,
684     297, 444, 251, 0, 190, 0, 205, 203, 212, 202,
685     197, 206, 210, 199, 207, 209, 204, 198, 211, 208,
686     200, 201, 196, 154, 0, 346, 369, 422, 419, 194,
687     191, 155,
688 adx 30 };
689 db 136 const short yydgoto[] = { 1,
690     884, 885, 1036, 1037, 23, 24, 25, 26, 27, 28,
691     29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
692     39, 40, 41, 42, 43, 272, 273, 274, 275, 309,
693     310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
694     320, 321, 70, 71, 72, 73, 74, 255, 256, 257,
695     258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
696     268, 277, 60, 811, 278, 812, 813, 814, 815, 816,
697     817, 818, 819, 820, 821, 822, 823, 824, 825, 826,
698     827, 828, 829, 830, 831, 832, 833, 834, 1118, 1408,
699     1409, 1104, 1374, 1375, 1453, 1434, 1376, 115, 48, 604,
700     116, 605, 606, 607, 608, 609, 610, 611, 612, 613,
701     614, 615, 616, 617, 618, 57, 491, 492, 760, 1244,
702     1245, 493, 494, 495, 496, 1076, 1077, 55, 459, 460,
703     461, 462, 463, 464, 465, 466, 467, 468, 469, 470,
704     471, 472, 473, 474, 475, 476, 740, 1223, 1224, 1362,
705     1349, 1225, 61, 522, 523, 524, 525, 526, 64, 554,
706     555, 556, 557, 558, 863, 1289, 1290, 65, 562, 563,
707     564, 565, 869, 1304, 1305, 118, 49, 638, 119, 639,
708     640, 641, 642, 643, 644, 645, 646, 647, 648, 649,
709     650, 651, 652, 653, 654, 655, 656, 657, 926, 1330,
710     1331, 1426, 1417, 1332, 56, 481, 482, 755, 1239, 1240,
711     483, 484, 485, 50, 355, 356, 357, 358, 123, 124,
712     125, 52, 366, 367, 666, 1197, 1198, 368, 369, 370,
713     182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
714     192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
715     202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
716     212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
717     222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
718     232, 233, 234, 235, 236, 237, 405, 1016, 1017, 403,
719     995, 996, 54, 434, 435, 436, 437, 438, 439, 440,
720     441, 730, 1214, 1215, 727, 1208, 1209, 94, 95, 96,
721     97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
722     107, 108, 109, 110, 111, 112, 113, 288, 289, 290,
723     291, 292, 293, 294, 295, 296,
724 adx 30 };
725 db 136 const short yysindex[] = { 0,
726     645, -26, -87, -73, 0, 0, 0, -57, 0, -35,
727     0, 0, 0, 0, -34, -31, 0, 0, -27, -14,
728     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
729     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
730     0, 0, 0, 0, 0, -236, 548, -394, -295, -2,
731     -237, 3, 265, 8, 9, 10, 19, 147, -238, -284,
732     22, -231, 308, 24, 27, 90, 92, 93, 95, -119,
733     0, 0, 0, 0, 0, 100, 101, 122, 124, 125,
734     130, 131, 132, 134, 135, 136, 139, 146, 152, 153,
735     156, 161, 164, 85, 0, 0, 0, 0, 0, 0,
736     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
737     0, 0, 0, 0, 106, 0, 0, 109, 0, -222,
738     0, 172, -113, 0, 0, -159, 0, 174, 175, 179,
739     182, 198, 199, 205, 206, 207, 208, 215, 226, 227,
740     248, 249, 256, 257, 260, 278, 279, 282, 284, 286,
741     296, 297, 298, 299, 306, 307, 309, 311, 314, 0,
742     315, 0, 320, 322, 323, 328, 330, 334, 335, 337,
743     338, 340, 343, 344, 345, 346, 349, 351, 355, 357,
744     361, -122, 0, 0, 0, 0, 0, 0, 0, 0,
745     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
746     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
747     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
748     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
749     0, 0, 0, 0, 0, 0, 0, -212, 612, -234,
750     -227, 365, 364, 369, 370, 371, 372, 374, 378, 379,
751     380, 381, 383, 384, -15, 0, 0, 0, 0, 0,
752     0, 0, 0, 0, 0, 0, 0, 0, 367, 393,
753     404, -88, 0, 0, 0, 0, 348, 0, -199, 0,
754     407, 408, 411, 421, 425, 426, 429, 318, 0, 0,
755     0, 0, 0, 0, 0, 0, 432, 431, 433, 436,
756     437, 438, 442, 446, 448, 449, 450, 452, -86, 0,
757     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
758     0, -252, -246, 0, 84, 107, 110, 455, 0, 66,
759     138, 143, 73, 144, 144, 148, 149, 74, 83, 87,
760     151, 144, 96, 97, 108, 111, 117, 461, 0, 698,
761     481, 0, 472, 478, -118, 0, 0, 0, 133, 482,
762     0, 0, 489, 493, 0, -104, 0, 0, 0, 0,
763     118, 144, 121, 144, 169, 150, 170, 123, 126, 127,
764     187, 171, 140, 193, 195, 196, 145, 144, 155, 160,
765     197, 183, 173, 202, 210, 144, 211, 184, 212, 214,
766     177, 180, 523, 181, 540, 144, 144, 189, 144, 201,
767     190, 192, -408, -402, 194, 209, 144, 144, 219, 144,
768     216, 220, 222, 223, 554, 0, 0, 0, 557, 559,
769     0, 560, 562, -101, 0, 0, 0, 0, 0, 0,
770     0, 565, 567, 572, 581, 583, 0, 584, 585, 594,
771     595, 600, 603, 613, 614, 615, 616, 617, 105, 0,
772     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
773     0, 0, 0, 0, 0, 0, 0, 618, 0, 621,
774     -108, 0, 0, 0, 0, 625, 0, 627, 628, 629,
775     -54, 0, 0, 0, 0, 0, 0, 287, 288, 289,
776     290, 292, 294, 295, 300, 2, 305, 310, 242, 634,
777     0, 0, 312, 313, 636, 0, 360, 646, 647, 654,
778     655, -97, 0, 0, 0, 0, 271, 274, 277, 319,
779     281, 285, 144, 668, 0, 0, 324, 293, 327, 339,
780     341, 342, 350, 358, 353, 362, 363, 684, 0, 687,
781     686, 0, 688, -98, 0, 0, 0, 0, 693, 692,
782     0, -120, 0, 0, 0, 695, 696, 711, 0, 714,
783     720, 721, 722, -64, 724, 728, 731, 732, 735, 736,
784     737, 739, 742, 743, 744, 747, 749, 750, 0, 751,
785     755, 756, 757, 761, 762, 763, 765, 766, 767, 768,
786     769, 770, 771, 137, 0, 0, 0, 0, 0, 0,
787     0, 0, 0, 0, 0, 0, 0, 0, 752, 772,
788     773, 777, 778, 780, 781, 783, 786, 787, 0, 788,
789     789, 790, 791, 793, 794, 798, 801, 48, 0, 0,
790     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
791     0, 0, 0, 0, 0, 0, 0, 416, 451, 804,
792     0, 805, 0, 456, 457, 809, 812, 0, 813, 814,
793     815, 816, 817, 818, 819, 820, 822, 825, 826, 828,
794     834, 835, 836, 837, 838, 839, 843, 846, 847, 848,
795     849, 852, 853, 855, 858, 859, 860, 863, 864, 865,
796     729, 867, 764, 868, 872, 873, 874, 877, 878, 879,
797     880, 881, 883, 884, 885, 890, 892, 893, -217, 896,
798     897, 898, 900, 902, 906, 0, 907, 144, 520, 910,
799     568, 569, 915, 0, 0, 530, 576, 532, 538, 928,
800     542, 543, 544, 545, 550, 591, 619, 593, 597, 555,
801     598, 949, 0, 601, 948, 602, 953, 0, 0, 955,
802     605, 608, 632, 961, 0, 962, 963, 964, 967, 969,
803     970, 971, 974, 975, 976, 978, 980, 981, 982, 983,
804     984, 985, 987, 0, 988, 992, 0, 994, 993, 997,
805     998, 999, 0, 1003, 1004, 1006, 1007, 1009, 1013, 1014,
806     1015, 1016, 1019, 1020, 1021, 1027, 0, 1028, 1029, 1030,
807     -69, 0, 0, 0, 0, 0, 0, 0, 0, 0,
808     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
809     0, 0, 0, 0, 0, 683, 689, 691, 1035, 0,
810     1036, 1037, 1038, 1042, 1043, 1047, 1049, 0, 1052, 1053,
811     1054, 1055, 1056, 1057, 1059, 1060, 1061, 1062, 1063, 0,
812     0, 715, 1064, 717, 1068, 0, 0, 719, 1069, 1072,
813     0, 0, 0, 0, 0, 0, 0, 0, 144, 144,
814     144, 144, 144, 0, 0, 0, 0, 0, 0, 0,
815     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
816     746, 753, 144, 760, 774, 775, 776, 726, 779, 782,
817     144, 144, 219, 1074, 0, 0, 738, -399, 674, 740,
818     741, 702, 703, 707, 748, 1077, 754, 792, 795, 796,
819     784, 797, 806, 808, 1082, 0, 1099, 1100, 0, 0,
820     1105, 1107, 758, 0, 0, 0, 0, 0, 0, 0,
821     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
822     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
823     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
824     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
825     0, 0, 0, 0, -1, 0, 0, 0, 0, 0,
826     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
827     0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
828     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
829     0, 0, 219, 219, 219, 0, 0, 0, 0, 0,
830     0, 0, 0, -242, 1110, 1112, -233, 1116, 1117, 0,
831     1118, 1119, 1124, 1125, 811, 1130, 1138, 1140, 1141, 1143,
832     1144, 1148, 1155, 1159, 1165, 1168, 0, 1172, 821, 1173,
833     0, -318, 1175, 1177, 785, 5, 0, 0, 0, 0,
834     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
835     0, 0, 0, 0, 0, 0, 0, 0, 0, 800,
836     829, 803, 810, 1176, 823, 824, 827, 841, 842, 831,
837     844, 832, 845, 850, 851, 833, 854, 1189, 856, 857,
838     861, 1194, 0, 1203, 1208, 1210, 0, 0, 0, 0,
839     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
840     0, 0, 0, 0, 0, 1211, 648, 1212, 0, 1215,
841     685, 0, 0, 0, 0, 0, 0, 1216, 1218, 1225,
842     1226, 1228, 1229, 1233, 1236, 1237, 1238, 1239, 1242, 1243,
843     0, 1245, 1247, 1248, 1249, 1250, 1252, 1253, 1254, 1255,
844     1256, 931, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265,
845     0, 0, 0, 0, 0, 0, 15, 0, 0, 729,
846     0, 764, 0, 0, 0, 0, 0, 17, 0, 0,
847     0, 0, 0, 23, 0, 0, 0, 0, 0, 0,
848     0, 0, 26, 0, 709, 0, 0, 0, 0, 0,
849     0, 0, 0, 0, 0, 0, 0, 0, 35, 0,
850     0, 0, 0, 36, 0, 0, 0, 939, 0, 632,
851     1267, 1268, 1269, 1270, 945, 1272, 1273, 1274, 1275, 1276,
852     1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 799, 1285,
853     1286, 1287, 0, 0, 0, 0, 0, 0, 0, 0,
854     0, 0, 0, 0, 0, 0, 0, 0, 47, 0,
855     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
856     0, 0, 0, 49, 0, 0, 0, 0, 0, 0,
857     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
858     0, 0, 0, 0, 0, 0, 0, 0, 0, 57,
859     0, -255, 0, 0, 0, 0, 0, 0, 0, 0,
860     0, 758, 0, 0, 0, -242, 0, -233, 709, 0,
861     811, 0, 0, 0, 0, 0, 0, 0, 0, 0,
862     0, 0, 0, 821, 0, -318, 0, 0, 0, 0,
863     0, 0, 0, 68, 0, 465, 0, 0, 0, 0,
864     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
865     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
866     0, 0, 0, 0, 0, 0, 0, 69, 0, 0,
867     0, 0, 0, 648, 0, 685, -255, 0, 931, 0,
868     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
869     0, 0, 0, 465, 0, 945, 0, 0, 0, 0,
870     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
871     0, 0, 0, 0, 799, 0, 0, 0, 0, 0,
872     0, 0,
873 adx 30 };
874 db 136 const short yyrindex[] = { 0,
875     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
876     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
877     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
878     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
879     0, 0, 0, 0, 0, 0, 0, 1224, 1227, 0,
880     0, 0, 0, 0, 0, 0, 0, 0, 0, 1230,
881     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
882     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
883     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
884     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
885     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
886     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
887     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
888     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
889     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
890     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
891     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
892     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
893     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
894     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
895     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
896     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
897     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
898     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
899     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
900     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
901     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
902     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
903     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
904     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
905     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
906     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
907     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
908     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
909     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
910     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
911     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
912     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
913     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
914     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
915     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
916     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
917     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
918     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
919     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
920     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
921     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
922     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
923     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
924     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
925     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
926     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
927     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
928     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
929     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
930     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
931     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
932     0, 0, 0, 1289, 0, 0, 0, 0, 0, 0,
933     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
934     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
935     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
936     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
937     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
938     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
939     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
940     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
941     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
942     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
943     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
944     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
945     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
946     0, 0, 0, 0, 0, 0, 0, 0, 1290, 0,
947     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
948     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
949     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
950     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
951     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
952     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
953     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
954     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
955     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
956     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
957     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
958     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
959     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
960     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
961     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
962     0, 0, 0, 0, 0, 0, 0, 0, 1289, 1289,
963     1289, 1289, 1289, 0, 0, 0, 0, 0, 0, 0,
964     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
965     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
966     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
967     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
968     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
969     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
970     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
971     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
972     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
973     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
974     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
975     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
976     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
977     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
978     0, 0, 1290, 1290, 1290, 0, 0, 0, 0, 0,
979     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
980     0, 0, 0, 0, 723, 0, 0, 0, 0, 0,
981     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
982     0, 0, 0, 0, 71, 0, 0, 0, 0, 0,
983     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
984     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
985     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
986     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
987     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
988     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
989     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
990     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
991     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
992     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
993     0, -250, 0, 0, 0, 0, 0, 0, 0, 0,
994     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
995     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
996     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
997     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
998     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
999     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1000     0, 0, 0, 0, 473, 0, 0, 0, 0, 0,
1001     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1002     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1003     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1004     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1005     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1006     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1007     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1008     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1009     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1010     723, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1011     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1012     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1013     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1014     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1015     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1016     0, 0, 0, 0, 0, 0, 0, 0, -250, 0,
1017     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1018     0, 0, 0, 0, 0, 473, 0, 0, 0, 0,
1019     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1020     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1021     0, 0,
1022 adx 30 };
1023 db 136 const short yygindex[] = { 0,
1024     -334, -431, -417, -915, 0, 0, 0, 0, 0, 0,
1025     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1026     0, 0, 0, 0, 0, 0, 1079, 0, 0, 0,
1027     1045, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1028     0, 0, 0, 1288, 0, 0, 0, 0, 1097, 0,
1029     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1030     0, 0, 0, 0, 0, 546, 0, 0, 0, 0,
1031     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1032     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1033     -100, 0, 0, -80, -75, 0, 0, 0, 0, 0,
1034     0, 759, 0, 0, 0, 0, 0, 0, 0, 0,
1035     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1036     -6, 870, 0, 0, 0, 0, 112, 0, 0, 905,
1037     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1038     0, 0, 0, 0, 0, 0, 0, 0, 14, 18,
1039     0, 0, 0, 0, 862, 0, 0, 0, 0, 0,
1040     840, 0, 0, 0, 0, 0, -48, 0, 0, 807,
1041     0, 0, 0, 0, -46, 0, 0, 0, 0, 730,
1042     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1043     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1044     -47, -44, 0, 0, 0, 0, 0, 0, 0, 7,
1045     894, 0, 0, 0, 0, 1022, 0, 0, 0, 1251,
1046     0, 0, 0, 0, 0, 0, 34, 1012, 0, 0,
1047     0, 1197, 0, 0, 0, 0, 0, 0, 0, 0,
1048     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1049     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1050     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1051     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1052     0, 0, 0, 0, 0, 0, 0, 0, 178, 0,
1053     0, 185, 0, 0, 947, 0, 0, 0, 0, 0,
1054     0, 0, 0, 38, 0, 0, 37, 0, 1293, 0,
1055     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1056     0, 0, 0, 0, 0, 0, 0, 0, 1094, 0,
1057     0, 0, 0, 0, 0, 0,
1058 adx 30 };
1059 db 136 #define YYTABLESIZE 1394
1060     const short yytable[] = { 575,
1061     576, 720, 425, 550, 870, 328, 660, 583, 1420, 559,
1062     1421, 360, 1242, 423, 114, 423, 757, 269, 121, 66,
1063     667, 477, 1206, 733, 280, 1422, 865, 839, 486, 1423,
1064     423, 1212, 44, 352, 423, 46, 515, 670, 548, 672,
1065     711, 712, 1200, 427, 1202, 428, 713, 714, 1250, 47,
1066     1033, 1034, 1035, 686, 67, 1122, 518, 1199, 1342, 1201,
1067     1346, 694, 281, 1249, 68, 51, 1348, 1173, 1174, 1351,
1068     764, 704, 705, 1341, 707, 1345, 519, 282, 1364, 1366,
1069     487, 1347, 717, 718, 1350, 721, 429, 53, 58, 430,
1070     1414, 59, 1416, 1363, 1365, 62, 362, 1424, 45, 283,
1071     1419, 284, 423, 285, 286, 1413, 122, 1415, 63, 510,
1072     488, 1436, 1455, 117, 265, 1418, 489, 1203, 1204, 1205,
1073     120, 353, 551, 287, 276, 126, 1435, 1454, 560, 265,
1074     238, 239, 240, 127, 270, 559, 66, 352, 69, 128,
1075     129, 241, 121, 130, 279, 431, 322, 477, 324, 323,
1076     131, 362, 325, 326, 427, 327, 428, 550, 518, 132,
1077     330, 331, 432, 133, 134, 271, 1243, 269, 719, 297,
1078     135, 67, 935, 136, 137, 138, 478, 139, 519, 520,
1079     490, 68, 332, 140, 333, 334, 788, 552, 354, 789,
1080     335, 336, 337, 561, 338, 339, 340, 429, 847, 341,
1081     430, 486, 141, 142, 298, 479, 342, 143, 1207, 348,
1082     790, 521, 343, 344, 144, 363, 345, 1213, 145, 146,
1083     147, 346, 791, 148, 347, 353, 149, 150, 350, 752,
1084     122, 351, 359, 792, 371, 372, 1425, 151, 793, 373,
1085     242, 423, 374, 152, 153, 553, 154, 155, 156, 157,
1086     794, 364, 299, 487, 560, 69, 431, 795, 375, 376,
1087     158, 914, 796, 480, 797, 377, 378, 379, 380, 159,
1088     363, 160, 161, 432, 162, 381, 551, 798, 163, 164,
1089     365, 520, 165, 488, 270, 433, 382, 383, 300, 489,
1090     301, 302, 354, 166, 243, 244, 245, 246, 247, 248,
1091     249, 250, 478, 619, 620, 799, 364, 621, 384, 385,
1092     800, 622, 167, 521, 168, 271, 386, 387, 169, 561,
1093     388, 574, 170, 171, 172, 173, 623, 624, 625, 174,
1094     175, 479, 626, 801, 303, 365, 304, 176, 389, 390,
1095     75, 552, 391, 251, 392, 802, 393, 803, 804, 305,
1096     627, 76, 805, 490, 628, 629, 394, 395, 396, 397,
1097     442, 879, 880, 881, 882, 883, 398, 399, 177, 400,
1098     178, 401, 77, 78, 402, 404, 179, 252, 443, 79,
1099     406, 180, 407, 408, 444, 630, 181, 631, 409, 480,
1100     410, 306, 590, 1045, 411, 412, 433, 413, 414, 553,
1101     415, 632, 242, 416, 417, 418, 419, 445, 446, 420,
1102     806, 421, 447, 591, 592, 422, 807, 423, 307, 308,
1103     593, 424, 633, 497, 498, 512, 448, 808, 809, 499,
1104     500, 501, 502, 449, 503, 80, 81, 810, 504, 505,
1105     506, 507, 534, 508, 509, 82, 83, 1153, 1154, 1155,
1106     1156, 1157, 450, 513, 253, 634, 243, 244, 245, 246,
1107     247, 248, 249, 250, 514, 84, 85, 527, 528, 635,
1108     517, 529, 774, 775, 776, 777, 778, 779, 780, 636,
1109     451, 530, 86, 87, 88, 531, 532, 254, 452, 533,
1110     536, 537, 566, 538, 89, 1170, 539, 540, 541, 594,
1111     595, 596, 542, 90, 597, 251, 543, 453, 544, 545,
1112     546, 598, 547, 569, 570, 567, 454, 455, 568, 589,
1113     127, 573, 579, 571, 599, 600, 128, 129, 572, 574,
1114     130, 580, 658, 577, 578, 581, 582, 131, 659, 252,
1115     663, 662, 601, 602, 584, 585, 132, 456, 457, 664,
1116     133, 134, 637, 665, 673, 675, 586, 135, 674, 587,
1117     136, 137, 138, 297, 139, 588, 669, 603, 1160, 671,
1118     140, 676, 679, 280, 677, 678, 1168, 1169, 682, 680,
1119     683, 684, 689, 701, 91, 92, 93, 692, 681, 141,
1120     142, 690, 696, 685, 143, 693, 695, 697, 298, 698,
1121     703, 144, 458, 687, 719, 145, 146, 147, 688, 708,
1122     148, 281, 726, 149, 150, 788, 253, 728, 789, 729,
1123     731, 691, 732, 735, 151, 699, 282, 736, 700, 702,
1124     152, 153, 737, 154, 155, 156, 157, 706, 709, 790,
1125     710, 738, 715, 739, 741, 742, 299, 158, 283, 254,
1126     284, 791, 285, 286, 743, 744, 159, 716, 160, 161,
1127     745, 162, 792, 746, 722, 163, 164, 793, 723, 165,
1128     724, 725, 287, 747, 748, 749, 750, 751, 754, 794,
1129     166, 756, 300, 759, 301, 302, 795, 761, 762, 763,
1130     783, 796, 784, 797, 787, 766, 767, 768, 769, 167,
1131     770, 168, 771, 772, 835, 169, 798, 836, 773, 170,
1132     171, 172, 173, 781, 837, 838, 174, 175, 782, 841,
1133     785, 786, 842, 1437, 176, 843, 848, 844, 303, 845,
1134     304, 195, 849, 846, 799, 851, 619, 620, 857, 800,
1135     621, 850, 860, 305, 622, 861, 862, 852, 864, 853,
1136     854, 867, 868, 872, 873, 177, 1438, 178, 855, 623,
1137     624, 625, 801, 179, 195, 626, 856, 1439, 180, 874,
1138     858, 859, 875, 181, 802, 195, 803, 804, 876, 877,
1139     878, 805, 886, 627, 1440, 306, 887, 628, 629, 888,
1140     889, 1441, 195, 890, 891, 892, 1442, 893, 1443, 195,
1141     894, 895, 896, 75, 195, 897, 195, 898, 899, 900,
1142     916, 1444, 307, 308, 76, 901, 902, 903, 630, 195,
1143     631, 904, 905, 906, 937, 907, 908, 909, 910, 911,
1144     912, 913, 917, 918, 632, 77, 78, 919, 920, 806,
1145     921, 922, 79, 923, 1445, 807, 924, 925, 927, 928,
1146     929, 930, 195, 931, 932, 633, 808, 809, 933, 938,
1147     1446, 934, 939, 940, 941, 942, 810, 442, 195, 943,
1148     944, 945, 946, 947, 948, 949, 950, 951, 952, 1447,
1149     953, 1448, 1449, 954, 955, 443, 956, 195, 634, 195,
1150     195, 444, 957, 958, 959, 960, 961, 962, 80, 81,
1151     2, 963, 635, 3, 964, 965, 966, 967, 82, 83,
1152     968, 969, 636, 970, 445, 446, 971, 972, 973, 447,
1153     4, 974, 975, 976, 5, 997, 1018, 6, 84, 85,
1154     1019, 1020, 1021, 448, 7, 1022, 1023, 1024, 1025, 1026,
1155     449, 1027, 1028, 1029, 1450, 86, 87, 88, 1030, 8,
1156     1031, 1032, 195, 590, 1038, 1039, 1040, 89, 1041, 450,
1157     1042, 1451, 9, 10, 1043, 11, 90, 1044, 1046, 195,
1158     1047, 1452, 12, 1050, 591, 592, 1048, 1049, 1051, 195,
1159     1053, 593, 1352, 1353, 1052, 637, 1054, 451, 1055, 13,
1160     1056, 1057, 1058, 1059, 1278, 452, 301, 301, 1060, 1061,
1161     14, 1063, 15, 1065, 1062, 1064, 1066, 1067, 1069, 1068,
1162     1070, 1071, 1354, 1073, 453, 1072, 1074, 1075, 16, 1078,
1163     1079, 1080, 1081, 454, 455, 1082, 301, 1083, 1084, 1085,
1164     1355, 1293, 1086, 1087, 1088, 17, 1089, 1356, 1090, 1091,
1165     1092, 1093, 1094, 1095, 301, 1096, 1097, 91, 92, 93,
1166     1098, 301, 1099, 1100, 456, 457, 1357, 1101, 1102, 1103,
1167     594, 595, 596, 1105, 1106, 597, 1107, 1108, 18, 1109,
1168     301, 1279, 598, 1110, 1111, 1112, 1113, 19, 20, 1114,
1169     1115, 1116, 21, 22, 1358, 599, 600, 1117, 1119, 1120,
1170     1121, 1124, 1359, 1127, 1128, 1129, 1130, 1125, 301, 1126,
1171     1131, 1132, 1280, 601, 602, 1133, 301, 1134, 1294, 458,
1172     1135, 1136, 1137, 1138, 1139, 1140, 1281, 1141, 1142, 1143,
1173     1144, 1145, 1175, 1146, 1147, 1148, 1149, 1150, 603, 1151,
1174     1152, 1158, 1171, 1360, 1165, 1282, 1283, 1182, 1159, 1295,
1175     1191, 1284, 1285, 1286, 1287, 1161, 1172, 301, 1176, 1177,
1176     1178, 1179, 1361, 1296, 1288, 1180, 1181, 1192, 1193, 1162,
1177     1163, 1164, 1183, 1194, 1166, 1195, 301, 1167, 1210, 1187,
1178     1211, 1196, 1297, 1298, 1216, 1217, 1218, 1219, 1299, 1300,
1179     1301, 1302, 1220, 1221, 977, 978, 979, 980, 1226, 981,
1180     982, 1303, 983, 984, 985, 1222, 1227, 986, 1228, 1229,
1181     1184, 1230, 1231, 1185, 1186, 1188, 1232, 987, 988, 989,
1182     990, 991, 992, 1233, 1189, 993, 1190, 1234, 994, 998,
1183     999, 1000, 1001, 1235, 1002, 1003, 1236, 1004, 1005, 1006,
1184     1237, 1241, 1007, 1246, 1238, 1247, 1255, 1252, 1248, 1261,
1185     1263, 1267, 1008, 1009, 1010, 1011, 1012, 1013, 1251, 1269,
1186     1014, 1253, 1273, 1015, 1390, 1391, 1392, 1393, 1254, 1394,
1187     1395, 1274, 1396, 1397, 1398, 1271, 1275, 1399, 1276, 1277,
1188     1291, 1256, 1257, 1292, 1306, 1258, 1307, 1400, 1401, 1402,
1189     1403, 1404, 1405, 1308, 1309, 1406, 1310, 1311, 1407, 1259,
1190     1260, 1312, 1262, 1264, 1313, 1314, 1315, 1316, 1265, 1266,
1191     1317, 1318, 1268, 1319, 1270, 1320, 1321, 1322, 1323, 1272,
1192     1324, 1325, 1326, 1327, 1328, 1329, 1333, 1334, 1335, 1336,
1193     1337, 1338, 1339, 1340, 1367, 1369, 1370, 1371, 1372, 1373,
1194     1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386,
1195     1387, 1388, 1389, 1410, 1411, 1412, 215, 25, 33, 384,
1196     516, 511, 119, 549, 1462, 1461, 1123, 329, 1460, 1433,
1197     765, 1368, 915, 753, 1431, 1456, 1430, 936, 871, 1457,
1198     1432, 1459, 1458, 361, 758, 1427, 661, 668, 426, 1344,
1199     734, 535, 1428, 840, 1343, 1429, 349, 0, 0, 0,
1200     0, 0, 0, 866,
1201 adx 30 };
1202 db 136 const short yycheck[] = { 334,
1203     335, 419, 125, 256, 125, 125, 125, 342, 264, 256,
1204     266, 125, 331, 264, 409, 266, 125, 256, 256, 256,
1205     125, 256, 265, 125, 256, 281, 125, 125, 256, 285,
1206     281, 265, 59, 256, 285, 123, 125, 372, 125, 374,
1207     449, 450, 44, 256, 44, 258, 449, 450, 44, 123,
1208     268, 269, 270, 388, 291, 125, 256, 59, 44, 59,
1209     44, 396, 294, 59, 301, 123, 44, 467, 468, 44,
1210     125, 406, 407, 59, 409, 59, 276, 309, 44, 44,
1211     308, 59, 417, 418, 59, 420, 299, 123, 123, 302,
1212     44, 123, 44, 59, 59, 123, 256, 353, 125, 331,
1213     44, 333, 353, 335, 336, 59, 344, 59, 123, 125,
1214     338, 44, 44, 409, 44, 59, 344, 1033, 1034, 1035,
1215     123, 344, 375, 355, 409, 123, 59, 59, 375, 59,
1216     123, 123, 123, 256, 373, 256, 256, 256, 375, 262,
1217     263, 123, 256, 266, 123, 358, 123, 256, 59, 123,
1218     273, 256, 61, 61, 256, 61, 258, 256, 256, 282,
1219     61, 61, 375, 286, 287, 404, 485, 256, 386, 256,
1220     293, 291, 125, 296, 297, 298, 411, 300, 276, 379,
1221     408, 301, 61, 306, 61, 61, 256, 440, 411, 259,
1222     61, 61, 61, 440, 61, 61, 61, 299, 533, 61,
1223     302, 256, 325, 326, 291, 440, 61, 330, 451, 125,
1224     280, 411, 61, 61, 337, 375, 61, 451, 341, 342,
1225     343, 61, 292, 346, 61, 344, 349, 350, 123, 125,
1226     344, 123, 61, 303, 61, 61, 492, 360, 308, 61,
1227     256, 492, 61, 366, 367, 498, 369, 370, 371, 372,
1228     320, 411, 339, 308, 375, 375, 358, 327, 61, 61,
1229     383, 125, 332, 498, 334, 61, 61, 61, 61, 392,
1230     375, 394, 395, 375, 397, 61, 375, 347, 401, 402,
1231     440, 379, 405, 338, 373, 498, 61, 61, 375, 344,
1232     377, 378, 411, 416, 310, 311, 312, 313, 314, 315,
1233     316, 317, 411, 256, 257, 375, 411, 260, 61, 61,
1234     380, 264, 435, 411, 437, 404, 61, 61, 441, 440,
1235     61, 386, 445, 446, 447, 448, 279, 280, 281, 452,
1236     453, 440, 285, 403, 421, 440, 423, 460, 61, 61,
1237     256, 440, 61, 359, 61, 415, 61, 417, 418, 436,
1238     303, 267, 422, 408, 307, 308, 61, 61, 61, 61,
1239     256, 426, 427, 428, 429, 430, 61, 61, 491, 61,
1240     493, 61, 288, 289, 61, 61, 499, 393, 274, 295,
1241     61, 504, 61, 61, 280, 338, 509, 340, 61, 498,
1242     61, 478, 256, 728, 61, 61, 498, 61, 61, 498,
1243     61, 354, 256, 61, 61, 61, 61, 303, 304, 61,
1244     480, 61, 308, 277, 278, 61, 486, 61, 505, 506,
1245     284, 61, 375, 59, 61, 59, 322, 497, 498, 61,
1246     61, 61, 61, 329, 61, 351, 352, 507, 61, 61,
1247     61, 61, 125, 61, 61, 361, 362, 879, 880, 881,
1248     882, 883, 348, 61, 470, 408, 310, 311, 312, 313,
1249     314, 315, 316, 317, 61, 381, 382, 61, 61, 422,
1250     123, 61, 471, 472, 473, 474, 475, 476, 477, 432,
1251     376, 61, 398, 399, 400, 61, 61, 503, 384, 61,
1252     59, 61, 409, 61, 410, 913, 61, 61, 61, 363,
1253     364, 365, 61, 419, 368, 359, 61, 403, 61, 61,
1254     61, 375, 61, 59, 449, 409, 412, 413, 409, 59,
1255     256, 449, 449, 386, 388, 389, 262, 263, 386, 386,
1256     266, 449, 61, 386, 386, 449, 386, 273, 61, 393,
1257     59, 409, 406, 407, 449, 449, 282, 443, 444, 61,
1258     286, 287, 505, 61, 386, 386, 449, 293, 409, 449,
1259     296, 297, 298, 256, 300, 449, 449, 431, 903, 449,
1260     306, 449, 386, 256, 449, 449, 911, 912, 386, 409,
1261     386, 386, 386, 61, 500, 501, 502, 386, 449, 325,
1262     326, 409, 409, 449, 330, 386, 386, 386, 291, 386,
1263     61, 337, 498, 449, 386, 341, 342, 343, 449, 409,
1264     346, 294, 59, 349, 350, 256, 470, 61, 259, 61,
1265     61, 449, 61, 59, 360, 449, 309, 61, 449, 449,
1266     366, 367, 61, 369, 370, 371, 372, 449, 449, 280,
1267     449, 61, 449, 61, 61, 61, 339, 383, 331, 503,
1268     333, 292, 335, 336, 61, 61, 392, 449, 394, 395,
1269     61, 397, 303, 61, 449, 401, 402, 308, 449, 405,
1270     449, 449, 355, 61, 61, 61, 61, 61, 61, 320,
1271     416, 61, 375, 59, 377, 378, 327, 61, 61, 61,
1272     449, 332, 59, 334, 59, 409, 409, 409, 409, 435,
1273     409, 437, 409, 409, 59, 441, 347, 61, 409, 445,
1274     446, 447, 448, 409, 61, 61, 452, 453, 409, 449,
1275     409, 409, 449, 259, 460, 449, 59, 409, 421, 449,
1276     423, 259, 409, 449, 375, 409, 256, 257, 386, 380,
1277     260, 449, 59, 436, 264, 59, 61, 409, 61, 409,
1278     409, 59, 61, 59, 59, 491, 292, 493, 409, 279,
1279     280, 281, 403, 499, 292, 285, 409, 303, 504, 59,
1280     409, 409, 59, 509, 415, 303, 417, 418, 59, 59,
1281     59, 422, 59, 303, 320, 478, 59, 307, 308, 59,
1282     59, 327, 320, 59, 59, 59, 332, 59, 334, 327,
1283     59, 59, 59, 256, 332, 59, 334, 59, 59, 59,
1284     59, 347, 505, 506, 267, 61, 61, 61, 338, 347,
1285     340, 61, 61, 61, 409, 61, 61, 61, 61, 61,
1286     61, 61, 61, 61, 354, 288, 289, 61, 61, 480,
1287     61, 61, 295, 61, 380, 486, 61, 61, 61, 61,
1288     61, 61, 380, 61, 61, 375, 497, 498, 61, 409,
1289     396, 61, 59, 59, 409, 409, 507, 256, 396, 61,
1290     59, 59, 59, 59, 59, 59, 59, 59, 59, 415,
1291     59, 417, 418, 59, 59, 274, 59, 415, 408, 417,
1292     418, 280, 59, 59, 59, 59, 59, 59, 351, 352,
1293     256, 59, 422, 259, 59, 59, 59, 59, 361, 362,
1294     59, 59, 432, 59, 303, 304, 59, 59, 59, 308,
1295     276, 59, 59, 59, 280, 59, 59, 283, 381, 382,
1296     59, 59, 59, 322, 290, 59, 59, 59, 59, 59,
1297     329, 59, 59, 59, 480, 398, 399, 400, 59, 305,
1298     59, 59, 480, 256, 59, 59, 59, 410, 59, 348,
1299     59, 497, 318, 319, 59, 321, 419, 61, 449, 497,
1300     61, 507, 328, 59, 277, 278, 409, 409, 449, 507,
1301     449, 284, 274, 275, 409, 505, 449, 376, 61, 345,
1302     449, 449, 449, 449, 347, 384, 274, 275, 449, 409,
1303     356, 409, 358, 449, 386, 409, 409, 59, 61, 409,
1304     409, 59, 304, 409, 403, 61, 409, 386, 374, 59,
1305     59, 59, 59, 412, 413, 59, 304, 59, 59, 59,
1306     322, 347, 59, 59, 59, 391, 59, 329, 59, 59,
1307     59, 59, 59, 59, 322, 59, 59, 500, 501, 502,
1308     59, 329, 59, 61, 443, 444, 348, 61, 61, 61,
1309     363, 364, 365, 61, 61, 368, 61, 61, 424, 61,
1310     348, 424, 375, 61, 61, 61, 61, 433, 434, 61,
1311     61, 61, 438, 439, 376, 388, 389, 61, 61, 61,
1312     61, 409, 384, 59, 59, 59, 59, 409, 376, 409,
1313     59, 59, 455, 406, 407, 59, 384, 59, 424, 498,
1314     59, 59, 59, 59, 59, 59, 469, 59, 59, 59,
1315     59, 59, 449, 409, 61, 409, 59, 409, 431, 61,
1316     59, 386, 59, 425, 409, 488, 489, 61, 386, 455,
1317     59, 494, 495, 496, 497, 386, 409, 425, 409, 409,
1318     449, 449, 444, 469, 507, 449, 409, 59, 59, 386,
1319     386, 386, 409, 59, 386, 59, 444, 386, 59, 386,
1320     59, 414, 488, 489, 59, 59, 59, 59, 494, 495,
1321     496, 497, 59, 59, 456, 457, 458, 459, 59, 461,
1322     462, 507, 464, 465, 466, 385, 59, 469, 59, 59,
1323     409, 59, 59, 409, 409, 409, 59, 479, 480, 481,
1324     482, 483, 484, 59, 409, 487, 409, 59, 490, 456,
1325     457, 458, 459, 59, 461, 462, 59, 464, 465, 466,
1326     59, 59, 469, 59, 414, 59, 61, 409, 454, 409,
1327     409, 409, 479, 480, 481, 482, 483, 484, 449, 61,
1328     487, 449, 59, 490, 456, 457, 458, 459, 449, 461,
1329     462, 59, 464, 465, 466, 409, 59, 469, 59, 59,
1330     59, 449, 449, 59, 59, 449, 59, 479, 480, 481,
1331     482, 483, 484, 59, 59, 487, 59, 59, 490, 449,
1332     449, 59, 449, 449, 59, 59, 59, 59, 449, 449,
1333     59, 59, 449, 59, 449, 59, 59, 59, 59, 449,
1334     59, 59, 59, 59, 59, 385, 59, 59, 59, 59,
1335     59, 59, 59, 59, 386, 59, 59, 59, 59, 385,
1336     59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
1337     59, 59, 59, 59, 59, 59, 123, 59, 59, 123,
1338     272, 255, 123, 309, 1455, 1436, 811, 70, 1434, 1366,
1339     491, 1250, 604, 459, 1351, 1414, 1349, 638, 562, 1416,
1340     1364, 1419, 1417, 123, 481, 1342, 355, 366, 182, 1202,
1341     434, 288, 1346, 522, 1200, 1348, 94, -1, -1, -1,
1342     -1, -1, -1, 554,
1343 adx 30 };
1344 db 136 #define YYFINAL 1
1345     #ifndef YYDEBUG
1346     #define YYDEBUG 0
1347     #endif
1348     #define YYMAXTOKEN 509
1349     #if YYDEBUG
1350     const char * const yyname[] = {
1351     "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1352     0,0,0,0,0,0,0,0,0,0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,0,"';'",0,"'='",0,0,0,0,0,0,
1353     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1354     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1355     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1356     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1357     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1358     "ACCEPT_PASSWORD","ACTION","ADMIN","AFTYPE","T_ALLOW","ANTI_NICK_FLOOD",
1359     "ANTI_SPAM_EXIT_MESSAGE_TIME","AUTOCONN","T_BLOCK","BURST_AWAY",
1360     "BURST_TOPICWHO","BYTES","KBYTES","MBYTES","GBYTES","TBYTES","CALLER_ID_WAIT",
1361     "CAN_FLOOD","CAN_IDLE","CHANNEL","CIDR_BITLEN_IPV4","CIDR_BITLEN_IPV6",
1362     "CIPHER_PREFERENCE","CLASS","COMPRESSED","COMPRESSION_LEVEL","CONNECT",
1363     "CONNECTFREQ","CRYPTLINK","DEFAULT_CIPHER_PREFERENCE","DEFAULT_FLOODCOUNT",
1364     "DEFAULT_SPLIT_SERVER_COUNT","DEFAULT_SPLIT_USER_COUNT","DENY","DESCRIPTION",
1365     "DIE","DISABLE_AUTH","DISABLE_HIDDEN","DISABLE_LOCAL_CHANNELS",
1366     "DISABLE_REMOTE_COMMANDS","DOT_IN_IP6_ADDR","DOTS_IN_IDENT","DURATION",
1367     "EGDPOOL_PATH","EMAIL","ENABLE","ENCRYPTED","EXCEED_LIMIT","EXEMPT",
1368     "FAILED_OPER_NOTICE","FAKENAME","IRCD_FLAGS","FLATTEN_LINKS","FFAILED_OPERLOG",
1369     "FKILLLOG","FKLINELOG","FGLINELOG","FIOERRLOG","FOPERLOG","FOPERSPYLOG",
1370     "FUSERLOG","GECOS","GENERAL","GLINE","GLINES","GLINE_EXEMPT","GLINE_LOG",
1371     "GLINE_TIME","GLINE_MIN_CIDR","GLINE_MIN_CIDR6","GLOBAL_KILL","IRCD_AUTH",
1372     "NEED_IDENT","HAVENT_READ_CONF","HIDDEN","HIDDEN_ADMIN","HIDDEN_NAME",
1373     "HIDDEN_OPER","HIDE_SERVER_IPS","HIDE_SERVERS","HIDE_SPOOF_IPS","HOST","HUB",
1374     "HUB_MASK","IDLETIME","IGNORE_BOGUS_TS","INVISIBLE_ON_CONNECT","IP","KILL",
1375     "KILL_CHASE_TIME_LIMIT","KLINE","KLINE_EXEMPT","KLINE_REASON",
1376     "KLINE_WITH_REASON","KNOCK_DELAY","KNOCK_DELAY_CHANNEL","LAZYLINK","LEAF_MASK",
1377     "LINKS_DELAY","LISTEN","T_LOG","LOGGING","LOG_LEVEL","MAX_ACCEPT","MAX_BANS",
1378     "MAX_CHANS_PER_USER","MAX_GLOBAL","MAX_IDENT","MAX_LOCAL","MAX_NICK_CHANGES",
1379     "MAX_NICK_TIME","MAX_NUMBER","MAX_TARGETS","MESSAGE_LOCALE","MIN_NONWILDCARD",
1380     "MIN_NONWILDCARD_SIMPLE","MODULE","MODULES","NAME","NEED_PASSWORD",
1381     "NETWORK_DESC","NETWORK_NAME","NICK","NICK_CHANGES","NO_CREATE_ON_SPLIT",
1382     "NO_JOIN_ON_SPLIT","NO_OPER_FLOOD","NO_TILDE","NOT","NUMBER","NUMBER_PER_IDENT",
1383     "NUMBER_PER_CIDR","NUMBER_PER_IP","NUMBER_PER_IP_GLOBAL","OPERATOR",
1384     "OPERS_BYPASS_CALLERID","OPER_LOG","OPER_ONLY_UMODES","OPER_PASS_RESV",
1385     "OPER_SPY_T","OPER_UMODES","INVITE_OPS_ONLY","JOIN_FLOOD_COUNT",
1386     "JOIN_FLOOD_TIME","PACE_WAIT","PACE_WAIT_SIMPLE","PASSWORD","PATH",
1387     "PING_COOKIE","PING_TIME","PING_WARNING","PORT","QSTRING","QUIET_ON_BAN",
1388     "REASON","REDIRPORT","REDIRSERV","REGEX_T","REHASH","TREJECT_HOLD_TIME",
1389     "REMOTE","REMOTEBAN","RESTRICT_CHANNELS","RESTRICTED","RSA_PRIVATE_KEY_FILE",
1390     "RSA_PUBLIC_KEY_FILE","SSL_CERTIFICATE_FILE","RESV","RESV_EXEMPT","SECONDS",
1391     "MINUTES","HOURS","DAYS","WEEKS","SENDQ","SEND_PASSWORD","SERVERHIDE",
1392     "SERVERINFO","SERVLINK_PATH","IRCD_SID","TKLINE_EXPIRE_NOTICES","T_SHARED",
1393     "T_CLUSTER","TYPE","SHORT_MOTD","SILENT","SPOOF","SPOOF_NOTICE",
1394     "STATS_I_OPER_ONLY","STATS_K_OPER_ONLY","STATS_O_OPER_ONLY","STATS_P_OPER_ONLY",
1395     "TBOOL","TMASKED","T_REJECT","TS_MAX_DELTA","TS_WARN_DELTA","TWODOTS","T_ALL",
1396     "T_BOTS","T_SOFTCALLERID","T_CALLERID","T_CCONN","T_CLIENT_FLOOD","T_DEAF",
1397     "T_DEBUG","T_DRONE","T_EXTERNAL","T_FULL","T_INVISIBLE","T_IPV4","T_IPV6",
1398     "T_LOCOPS","T_LOGPATH","T_L_CRIT","T_L_DEBUG","T_L_ERROR","T_L_INFO",
1399     "T_L_NOTICE","T_L_TRACE","T_L_WARN","T_MAX_CLIENTS","T_NCHANGE","T_OPERWALL",
1400     "T_REJ","T_SERVNOTICE","T_SKILL","T_SPY","T_SSL","T_UMODES","T_UNAUTH",
1401     "T_UNRESV","T_UNXLINE","T_WALLOP","THROTTLE_TIME","TOPICBURST",
1402     "TRUE_NO_OPER_FLOOD","TKLINE","TXLINE","TRESV","UNKLINE","USER","USE_EGD",
1403     "USE_EXCEPT","USE_INVEX","USE_KNOCK","USE_LOGGING","USE_WHOIS_ACTUALLY","VHOST",
1404     "VHOST6","XLINE","WARN","WARN_NO_NLINE",
1405 adx 30 };
1406 db 136 const char * const yyrule[] = {
1407     "$accept : conf",
1408     "conf :",
1409     "conf : conf conf_item",
1410     "conf_item : admin_entry",
1411     "conf_item : logging_entry",
1412     "conf_item : oper_entry",
1413     "conf_item : channel_entry",
1414     "conf_item : class_entry",
1415     "conf_item : listen_entry",
1416     "conf_item : auth_entry",
1417     "conf_item : serverinfo_entry",
1418     "conf_item : serverhide_entry",
1419     "conf_item : resv_entry",
1420     "conf_item : shared_entry",
1421     "conf_item : cluster_entry",
1422     "conf_item : connect_entry",
1423     "conf_item : kill_entry",
1424     "conf_item : deny_entry",
1425     "conf_item : exempt_entry",
1426     "conf_item : general_entry",
1427     "conf_item : gline_entry",
1428     "conf_item : gecos_entry",
1429     "conf_item : modules_entry",
1430     "conf_item : error ';'",
1431     "conf_item : error '}'",
1432     "timespec_ :",
1433     "timespec_ : timespec",
1434     "timespec : NUMBER timespec_",
1435     "timespec : NUMBER SECONDS timespec_",
1436     "timespec : NUMBER MINUTES timespec_",
1437     "timespec : NUMBER HOURS timespec_",
1438     "timespec : NUMBER DAYS timespec_",
1439     "timespec : NUMBER WEEKS timespec_",
1440     "sizespec_ :",
1441     "sizespec_ : sizespec",
1442     "sizespec : NUMBER sizespec_",
1443     "sizespec : NUMBER BYTES sizespec_",
1444     "sizespec : NUMBER KBYTES sizespec_",
1445     "sizespec : NUMBER MBYTES sizespec_",
1446     "modules_entry : MODULES '{' modules_items '}' ';'",
1447     "modules_items : modules_items modules_item",
1448     "modules_items : modules_item",
1449     "modules_item : modules_module",
1450     "modules_item : modules_path",
1451     "modules_item : error ';'",
1452     "modules_module : MODULE '=' QSTRING ';'",
1453     "modules_path : PATH '=' QSTRING ';'",
1454     "serverinfo_entry : SERVERINFO '{' serverinfo_items '}' ';'",
1455     "serverinfo_items : serverinfo_items serverinfo_item",
1456     "serverinfo_items : serverinfo_item",
1457     "serverinfo_item : serverinfo_name",
1458     "serverinfo_item : serverinfo_vhost",
1459     "serverinfo_item : serverinfo_hub",
1460     "serverinfo_item : serverinfo_description",
1461     "serverinfo_item : serverinfo_network_name",
1462     "serverinfo_item : serverinfo_network_desc",
1463     "serverinfo_item : serverinfo_max_clients",
1464     "serverinfo_item : serverinfo_rsa_private_key_file",
1465     "serverinfo_item : serverinfo_vhost6",
1466     "serverinfo_item : serverinfo_sid",
1467     "serverinfo_item : serverinfo_ssl_certificate_file",
1468     "serverinfo_item : error ';'",
1469     "serverinfo_ssl_certificate_file : SSL_CERTIFICATE_FILE '=' QSTRING ';'",
1470     "serverinfo_rsa_private_key_file : RSA_PRIVATE_KEY_FILE '=' QSTRING ';'",
1471     "serverinfo_name : NAME '=' QSTRING ';'",
1472     "serverinfo_sid : IRCD_SID '=' QSTRING ';'",
1473     "serverinfo_description : DESCRIPTION '=' QSTRING ';'",
1474     "serverinfo_network_name : NETWORK_NAME '=' QSTRING ';'",
1475     "serverinfo_network_desc : NETWORK_DESC '=' QSTRING ';'",
1476     "serverinfo_vhost : VHOST '=' QSTRING ';'",
1477     "serverinfo_vhost6 : VHOST6 '=' QSTRING ';'",
1478     "serverinfo_max_clients : T_MAX_CLIENTS '=' NUMBER ';'",
1479     "serverinfo_hub : HUB '=' TBOOL ';'",
1480     "admin_entry : ADMIN '{' admin_items '}' ';'",
1481     "admin_items : admin_items admin_item",
1482     "admin_items : admin_item",
1483     "admin_item : admin_name",
1484     "admin_item : admin_description",
1485     "admin_item : admin_email",
1486     "admin_item : error ';'",
1487     "admin_name : NAME '=' QSTRING ';'",
1488     "admin_email : EMAIL '=' QSTRING ';'",
1489     "admin_description : DESCRIPTION '=' QSTRING ';'",
1490     "logging_entry : LOGGING '{' logging_items '}' ';'",
1491     "logging_items : logging_items logging_item",
1492     "logging_items : logging_item",
1493     "logging_item : logging_path",
1494     "logging_item : logging_oper_log",
1495     "logging_item : logging_log_level",
1496     "logging_item : logging_use_logging",
1497     "logging_item : logging_fuserlog",
1498     "logging_item : logging_foperlog",
1499     "logging_item : logging_fglinelog",
1500     "logging_item : logging_fklinelog",
1501     "logging_item : logging_killlog",
1502     "logging_item : logging_foperspylog",
1503     "logging_item : logging_ioerrlog",
1504     "logging_item : logging_ffailed_operlog",
1505     "logging_item : error ';'",
1506     "logging_path : T_LOGPATH '=' QSTRING ';'",
1507     "logging_oper_log : OPER_LOG '=' QSTRING ';'",
1508     "logging_fuserlog : FUSERLOG '=' QSTRING ';'",
1509     "logging_ffailed_operlog : FFAILED_OPERLOG '=' QSTRING ';'",
1510     "logging_foperlog : FOPERLOG '=' QSTRING ';'",
1511     "logging_foperspylog : FOPERSPYLOG '=' QSTRING ';'",
1512     "logging_fglinelog : FGLINELOG '=' QSTRING ';'",
1513     "logging_fklinelog : FKLINELOG '=' QSTRING ';'",
1514     "logging_ioerrlog : FIOERRLOG '=' QSTRING ';'",
1515     "logging_killlog : FKILLLOG '=' QSTRING ';'",
1516     "logging_log_level : LOG_LEVEL '=' T_L_CRIT ';'",
1517     "logging_log_level : LOG_LEVEL '=' T_L_ERROR ';'",
1518     "logging_log_level : LOG_LEVEL '=' T_L_WARN ';'",
1519     "logging_log_level : LOG_LEVEL '=' T_L_NOTICE ';'",
1520     "logging_log_level : LOG_LEVEL '=' T_L_TRACE ';'",
1521     "logging_log_level : LOG_LEVEL '=' T_L_INFO ';'",
1522     "logging_log_level : LOG_LEVEL '=' T_L_DEBUG ';'",
1523     "logging_use_logging : USE_LOGGING '=' TBOOL ';'",
1524     "$$1 :",
1525     "oper_entry : OPERATOR $$1 oper_name_b '{' oper_items '}' ';'",
1526     "oper_name_b :",
1527     "oper_name_b : oper_name_t",
1528     "oper_items : oper_items oper_item",
1529     "oper_items : oper_item",
1530     "oper_item : oper_name",
1531     "oper_item : oper_user",
1532     "oper_item : oper_password",
1533     "oper_item : oper_hidden_admin",
1534     "oper_item : oper_hidden_oper",
1535     "oper_item : oper_umodes",
1536     "oper_item : oper_class",
1537     "oper_item : oper_global_kill",
1538     "oper_item : oper_remote",
1539     "oper_item : oper_kline",
1540     "oper_item : oper_xline",
1541     "oper_item : oper_unkline",
1542     "oper_item : oper_gline",
1543     "oper_item : oper_nick_changes",
1544     "oper_item : oper_remoteban",
1545     "oper_item : oper_die",
1546     "oper_item : oper_rehash",
1547     "oper_item : oper_admin",
1548     "oper_item : oper_operwall",
1549     "oper_item : oper_encrypted",
1550     "oper_item : oper_rsa_public_key_file",
1551     "oper_item : oper_flags",
1552     "oper_item : error ';'",
1553     "oper_name : NAME '=' QSTRING ';'",
1554     "oper_name_t : QSTRING",
1555     "oper_user : USER '=' QSTRING ';'",
1556     "oper_password : PASSWORD '=' QSTRING ';'",
1557     "oper_encrypted : ENCRYPTED '=' TBOOL ';'",
1558     "oper_rsa_public_key_file : RSA_PUBLIC_KEY_FILE '=' QSTRING ';'",
1559     "oper_class : CLASS '=' QSTRING ';'",
1560     "$$2 :",
1561     "oper_umodes : T_UMODES $$2 '=' oper_umodes_items ';'",
1562     "oper_umodes_items : oper_umodes_items ',' oper_umodes_item",
1563     "oper_umodes_items : oper_umodes_item",
1564     "oper_umodes_item : T_BOTS",
1565     "oper_umodes_item : T_CCONN",
1566     "oper_umodes_item : T_DEAF",
1567     "oper_umodes_item : T_DEBUG",
1568     "oper_umodes_item : T_FULL",
1569     "oper_umodes_item : T_SKILL",
1570     "oper_umodes_item : T_NCHANGE",
1571     "oper_umodes_item : T_REJ",
1572     "oper_umodes_item : T_UNAUTH",
1573     "oper_umodes_item : T_SPY",
1574     "oper_umodes_item : T_EXTERNAL",
1575     "oper_umodes_item : T_OPERWALL",
1576     "oper_umodes_item : T_SERVNOTICE",
1577     "oper_umodes_item : T_INVISIBLE",
1578     "oper_umodes_item : T_WALLOP",
1579     "oper_umodes_item : T_SOFTCALLERID",
1580     "oper_umodes_item : T_CALLERID",
1581     "oper_umodes_item : T_LOCOPS",
1582     "oper_global_kill : GLOBAL_KILL '=' TBOOL ';'",
1583     "oper_remote : REMOTE '=' TBOOL ';'",
1584     "oper_remoteban : REMOTEBAN '=' TBOOL ';'",
1585     "oper_kline : KLINE '=' TBOOL ';'",
1586     "oper_xline : XLINE '=' TBOOL ';'",
1587     "oper_unkline : UNKLINE '=' TBOOL ';'",
1588     "oper_gline : GLINE '=' TBOOL ';'",
1589     "oper_nick_changes : NICK_CHANGES '=' TBOOL ';'",
1590     "oper_die : DIE '=' TBOOL ';'",
1591     "oper_rehash : REHASH '=' TBOOL ';'",
1592     "oper_admin : ADMIN '=' TBOOL ';'",
1593     "oper_hidden_admin : HIDDEN_ADMIN '=' TBOOL ';'",
1594     "oper_hidden_oper : HIDDEN_OPER '=' TBOOL ';'",
1595     "oper_operwall : T_OPERWALL '=' TBOOL ';'",
1596     "$$3 :",
1597     "oper_flags : IRCD_FLAGS $$3 '=' oper_flags_items ';'",
1598     "oper_flags_items : oper_flags_items ',' oper_flags_item",
1599     "oper_flags_items : oper_flags_item",
1600     "$$4 :",
1601     "oper_flags_item : NOT $$4 oper_flags_item_atom",
1602     "$$5 :",
1603     "oper_flags_item : $$5 oper_flags_item_atom",
1604     "oper_flags_item_atom : GLOBAL_KILL",
1605     "oper_flags_item_atom : REMOTE",
1606     "oper_flags_item_atom : KLINE",
1607     "oper_flags_item_atom : UNKLINE",
1608     "oper_flags_item_atom : XLINE",
1609     "oper_flags_item_atom : GLINE",
1610     "oper_flags_item_atom : DIE",
1611     "oper_flags_item_atom : REHASH",
1612     "oper_flags_item_atom : ADMIN",
1613     "oper_flags_item_atom : HIDDEN_ADMIN",
1614     "oper_flags_item_atom : NICK_CHANGES",
1615     "oper_flags_item_atom : T_OPERWALL",
1616     "oper_flags_item_atom : OPER_SPY_T",
1617     "oper_flags_item_atom : HIDDEN_OPER",
1618     "oper_flags_item_atom : REMOTEBAN",
1619     "oper_flags_item_atom : ENCRYPTED",
1620     "$$6 :",
1621     "class_entry : CLASS $$6 class_name_b '{' class_items '}' ';'",
1622     "class_name_b :",
1623     "class_name_b : class_name_t",
1624     "class_items : class_items class_item",
1625     "class_items : class_item",
1626     "class_item : class_name",
1627     "class_item : class_cidr_bitlen_ipv4",
1628     "class_item : class_cidr_bitlen_ipv6",
1629     "class_item : class_ping_time",
1630     "class_item : class_ping_warning",
1631     "class_item : class_number_per_cidr",
1632     "class_item : class_number_per_ip",
1633     "class_item : class_connectfreq",
1634     "class_item : class_max_number",
1635     "class_item : class_max_global",
1636     "class_item : class_max_local",
1637     "class_item : class_max_ident",
1638     "class_item : class_sendq",
1639     "class_item : error ';'",
1640     "class_name : NAME '=' QSTRING ';'",
1641     "class_name_t : QSTRING",
1642     "class_ping_time : PING_TIME '=' timespec ';'",
1643     "class_ping_warning : PING_WARNING '=' timespec ';'",
1644     "class_number_per_ip : NUMBER_PER_IP '=' NUMBER ';'",
1645     "class_connectfreq : CONNECTFREQ '=' timespec ';'",
1646     "class_max_number : MAX_NUMBER '=' NUMBER ';'",
1647     "class_max_global : MAX_GLOBAL '=' NUMBER ';'",
1648     "class_max_local : MAX_LOCAL '=' NUMBER ';'",
1649     "class_max_ident : MAX_IDENT '=' NUMBER ';'",
1650     "class_sendq : SENDQ '=' sizespec ';'",
1651     "class_cidr_bitlen_ipv4 : CIDR_BITLEN_IPV4 '=' NUMBER ';'",
1652     "class_cidr_bitlen_ipv6 : CIDR_BITLEN_IPV6 '=' NUMBER ';'",
1653     "class_number_per_cidr : NUMBER_PER_CIDR '=' NUMBER ';'",
1654     "$$7 :",
1655     "listen_entry : LISTEN $$7 '{' listen_items '}' ';'",
1656     "$$8 :",
1657     "listen_flags : IRCD_FLAGS $$8 '=' listen_flags_items ';'",
1658     "listen_flags_items : listen_flags_items ',' listen_flags_item",
1659     "listen_flags_items : listen_flags_item",
1660     "listen_flags_item : T_SSL",
1661     "listen_flags_item : HIDDEN",
1662     "listen_items : listen_items listen_item",
1663     "listen_items : listen_item",
1664     "listen_item : listen_port",
1665     "listen_item : listen_flags",
1666     "listen_item : listen_address",
1667     "listen_item : listen_host",
1668     "listen_item : error ';'",
1669     "listen_port : PORT '=' port_items ';'",
1670     "port_items : port_items ',' port_item",
1671     "port_items : port_item",
1672     "port_item : NUMBER",
1673     "port_item : NUMBER TWODOTS NUMBER",
1674     "listen_address : IP '=' QSTRING ';'",
1675     "listen_host : HOST '=' QSTRING ';'",
1676     "$$9 :",
1677     "auth_entry : IRCD_AUTH $$9 '{' auth_items '}' ';'",
1678     "auth_items : auth_items auth_item",
1679     "auth_items : auth_item",
1680     "auth_item : auth_user",
1681     "auth_item : auth_passwd",
1682     "auth_item : auth_class",
1683     "auth_item : auth_flags",
1684     "auth_item : auth_kline_exempt",
1685     "auth_item : auth_need_ident",
1686     "auth_item : auth_exceed_limit",
1687     "auth_item : auth_no_tilde",
1688     "auth_item : auth_gline_exempt",
1689     "auth_item : auth_spoof",
1690     "auth_item : auth_spoof_notice",
1691     "auth_item : auth_redir_serv",
1692     "auth_item : auth_redir_port",
1693     "auth_item : auth_can_flood",
1694     "auth_item : auth_need_password",
1695     "auth_item : auth_encrypted",
1696     "auth_item : error ';'",
1697     "auth_user : USER '=' QSTRING ';'",
1698     "auth_passwd : PASSWORD '=' QSTRING ';'",
1699     "auth_spoof_notice : SPOOF_NOTICE '=' TBOOL ';'",
1700     "auth_class : CLASS '=' QSTRING ';'",
1701     "auth_encrypted : ENCRYPTED '=' TBOOL ';'",
1702     "$$10 :",
1703     "auth_flags : IRCD_FLAGS $$10 '=' auth_flags_items ';'",
1704     "auth_flags_items : auth_flags_items ',' auth_flags_item",
1705     "auth_flags_items : auth_flags_item",
1706     "$$11 :",
1707     "auth_flags_item : NOT $$11 auth_flags_item_atom",
1708     "$$12 :",
1709     "auth_flags_item : $$12 auth_flags_item_atom",
1710     "auth_flags_item_atom : SPOOF_NOTICE",
1711     "auth_flags_item_atom : EXCEED_LIMIT",
1712     "auth_flags_item_atom : KLINE_EXEMPT",
1713     "auth_flags_item_atom : NEED_IDENT",
1714     "auth_flags_item_atom : CAN_FLOOD",
1715     "auth_flags_item_atom : CAN_IDLE",
1716     "auth_flags_item_atom : NO_TILDE",
1717     "auth_flags_item_atom : GLINE_EXEMPT",
1718     "auth_flags_item_atom : RESV_EXEMPT",
1719     "auth_flags_item_atom : NEED_PASSWORD",
1720     "auth_kline_exempt : KLINE_EXEMPT '=' TBOOL ';'",
1721     "auth_need_ident : NEED_IDENT '=' TBOOL ';'",
1722     "auth_exceed_limit : EXCEED_LIMIT '=' TBOOL ';'",
1723     "auth_can_flood : CAN_FLOOD '=' TBOOL ';'",
1724     "auth_no_tilde : NO_TILDE '=' TBOOL ';'",
1725     "auth_gline_exempt : GLINE_EXEMPT '=' TBOOL ';'",
1726     "auth_spoof : SPOOF '=' QSTRING ';'",
1727     "auth_redir_serv : REDIRSERV '=' QSTRING ';'",
1728     "auth_redir_port : REDIRPORT '=' NUMBER ';'",
1729     "auth_need_password : NEED_PASSWORD '=' TBOOL ';'",
1730     "$$13 :",
1731     "resv_entry : RESV $$13 '{' resv_items '}' ';'",
1732     "resv_items : resv_items resv_item",
1733     "resv_items : resv_item",
1734     "resv_item : resv_creason",
1735     "resv_item : resv_channel",
1736     "resv_item : resv_nick",
1737     "resv_item : error ';'",
1738     "resv_creason : REASON '=' QSTRING ';'",
1739     "resv_channel : CHANNEL '=' QSTRING ';'",
1740     "resv_nick : NICK '=' QSTRING ';'",
1741     "$$14 :",
1742     "shared_entry : T_SHARED $$14 '{' shared_items '}' ';'",
1743     "shared_items : shared_items shared_item",
1744     "shared_items : shared_item",
1745     "shared_item : shared_name",
1746     "shared_item : shared_user",
1747     "shared_item : shared_type",
1748     "shared_item : error ';'",
1749     "shared_name : NAME '=' QSTRING ';'",
1750     "shared_user : USER '=' QSTRING ';'",
1751     "$$15 :",
1752     "shared_type : TYPE $$15 '=' shared_types ';'",
1753     "shared_types : shared_types ',' shared_type_item",
1754     "shared_types : shared_type_item",
1755     "shared_type_item : KLINE",
1756     "shared_type_item : TKLINE",
1757     "shared_type_item : UNKLINE",
1758     "shared_type_item : XLINE",
1759     "shared_type_item : TXLINE",
1760     "shared_type_item : T_UNXLINE",
1761     "shared_type_item : RESV",
1762     "shared_type_item : TRESV",
1763     "shared_type_item : T_UNRESV",
1764     "shared_type_item : T_LOCOPS",
1765     "shared_type_item : T_ALL",
1766     "$$16 :",
1767     "cluster_entry : T_CLUSTER $$16 '{' cluster_items '}' ';'",
1768     "cluster_items : cluster_items cluster_item",
1769     "cluster_items : cluster_item",
1770     "cluster_item : cluster_name",
1771     "cluster_item : cluster_type",
1772     "cluster_item : error ';'",
1773     "cluster_name : NAME '=' QSTRING ';'",
1774     "$$17 :",
1775     "cluster_type : TYPE $$17 '=' cluster_types ';'",
1776     "cluster_types : cluster_types ',' cluster_type_item",
1777     "cluster_types : cluster_type_item",
1778     "cluster_type_item : KLINE",
1779     "cluster_type_item : TKLINE",
1780     "cluster_type_item : UNKLINE",
1781     "cluster_type_item : XLINE",
1782     "cluster_type_item : TXLINE",
1783     "cluster_type_item : T_UNXLINE",
1784     "cluster_type_item : RESV",
1785     "cluster_type_item : TRESV",
1786     "cluster_type_item : T_UNRESV",
1787     "cluster_type_item : T_LOCOPS",
1788     "cluster_type_item : T_ALL",
1789     "$$18 :",
1790     "connect_entry : CONNECT $$18 connect_name_b '{' connect_items '}' ';'",
1791     "connect_name_b :",
1792     "connect_name_b : connect_name_t",
1793     "connect_items : connect_items connect_item",
1794     "connect_items : connect_item",
1795     "connect_item : connect_name",
1796     "connect_item : connect_host",
1797     "connect_item : connect_vhost",
1798     "connect_item : connect_send_password",
1799     "connect_item : connect_accept_password",
1800     "connect_item : connect_aftype",
1801     "connect_item : connect_port",
1802     "connect_item : connect_fakename",
1803     "connect_item : connect_flags",
1804     "connect_item : connect_hub_mask",
1805     "connect_item : connect_leaf_mask",
1806     "connect_item : connect_class",
1807     "connect_item : connect_auto",
1808     "connect_item : connect_encrypted",
1809     "connect_item : connect_compressed",
1810     "connect_item : connect_cryptlink",
1811     "connect_item : connect_rsa_public_key_file",
1812     "connect_item : connect_cipher_preference",
1813     "connect_item : error ';'",
1814     "connect_name : NAME '=' QSTRING ';'",
1815     "connect_name_t : QSTRING",
1816     "connect_host : HOST '=' QSTRING ';'",
1817     "connect_vhost : VHOST '=' QSTRING ';'",
1818     "connect_send_password : SEND_PASSWORD '=' QSTRING ';'",
1819     "connect_accept_password : ACCEPT_PASSWORD '=' QSTRING ';'",
1820     "connect_port : PORT '=' NUMBER ';'",
1821     "connect_aftype : AFTYPE '=' T_IPV4 ';'",
1822     "connect_aftype : AFTYPE '=' T_IPV6 ';'",
1823     "connect_fakename : FAKENAME '=' QSTRING ';'",
1824     "$$19 :",
1825     "connect_flags : IRCD_FLAGS $$19 '=' connect_flags_items ';'",
1826     "connect_flags_items : connect_flags_items ',' connect_flags_item",
1827     "connect_flags_items : connect_flags_item",
1828     "$$20 :",
1829     "connect_flags_item : NOT $$20 connect_flags_item_atom",
1830     "$$21 :",
1831     "connect_flags_item : $$21 connect_flags_item_atom",
1832     "connect_flags_item_atom : LAZYLINK",
1833     "connect_flags_item_atom : COMPRESSED",
1834     "connect_flags_item_atom : CRYPTLINK",
1835     "connect_flags_item_atom : AUTOCONN",
1836     "connect_flags_item_atom : BURST_AWAY",
1837     "connect_flags_item_atom : TOPICBURST",
1838     "connect_rsa_public_key_file : RSA_PUBLIC_KEY_FILE '=' QSTRING ';'",
1839     "connect_encrypted : ENCRYPTED '=' TBOOL ';'",
1840     "connect_cryptlink : CRYPTLINK '=' TBOOL ';'",
1841     "connect_compressed : COMPRESSED '=' TBOOL ';'",
1842     "connect_auto : AUTOCONN '=' TBOOL ';'",
1843     "connect_hub_mask : HUB_MASK '=' QSTRING ';'",
1844     "connect_leaf_mask : LEAF_MASK '=' QSTRING ';'",
1845     "connect_class : CLASS '=' QSTRING ';'",
1846     "connect_cipher_preference : CIPHER_PREFERENCE '=' QSTRING ';'",
1847     "$$22 :",
1848     "kill_entry : KILL $$22 '{' kill_items '}' ';'",
1849     "$$23 :",
1850     "kill_type : TYPE $$23 '=' kill_type_items ';'",
1851     "kill_type_items : kill_type_items ',' kill_type_item",
1852     "kill_type_items : kill_type_item",
1853     "kill_type_item : REGEX_T",
1854     "kill_items : kill_items kill_item",
1855     "kill_items : kill_item",
1856     "kill_item : kill_user",
1857     "kill_item : kill_reason",
1858     "kill_item : kill_type",
1859     "kill_item : error",
1860     "kill_user : USER '=' QSTRING ';'",
1861     "kill_reason : REASON '=' QSTRING ';'",
1862     "$$24 :",
1863     "deny_entry : DENY $$24 '{' deny_items '}' ';'",
1864     "deny_items : deny_items deny_item",
1865     "deny_items : deny_item",
1866     "deny_item : deny_ip",
1867     "deny_item : deny_reason",
1868     "deny_item : error",
1869     "deny_ip : IP '=' QSTRING ';'",
1870     "deny_reason : REASON '=' QSTRING ';'",
1871     "exempt_entry : EXEMPT '{' exempt_items '}' ';'",
1872     "exempt_items : exempt_items exempt_item",
1873     "exempt_items : exempt_item",
1874     "exempt_item : exempt_ip",
1875     "exempt_item : error",
1876     "exempt_ip : IP '=' QSTRING ';'",
1877     "$$25 :",
1878     "gecos_entry : GECOS $$25 '{' gecos_items '}' ';'",
1879     "$$26 :",
1880     "gecos_flags : TYPE $$26 '=' gecos_flags_items ';'",
1881     "gecos_flags_items : gecos_flags_items ',' gecos_flags_item",
1882     "gecos_flags_items : gecos_flags_item",
1883     "gecos_flags_item : REGEX_T",
1884     "gecos_items : gecos_items gecos_item",
1885     "gecos_items : gecos_item",
1886     "gecos_item : gecos_name",
1887     "gecos_item : gecos_reason",
1888     "gecos_item : gecos_flags",
1889     "gecos_item : error",
1890     "gecos_name : NAME '=' QSTRING ';'",
1891     "gecos_reason : REASON '=' QSTRING ';'",
1892     "general_entry : GENERAL '{' general_items '}' ';'",
1893     "general_items : general_items general_item",
1894     "general_items : general_item",
1895     "general_item : general_hide_spoof_ips",
1896     "general_item : general_ignore_bogus_ts",
1897     "general_item : general_failed_oper_notice",
1898     "general_item : general_anti_nick_flood",
1899     "general_item : general_max_nick_time",
1900     "general_item : general_max_nick_changes",
1901     "general_item : general_max_accept",
1902     "general_item : general_anti_spam_exit_message_time",
1903     "general_item : general_ts_warn_delta",
1904     "general_item : general_ts_max_delta",
1905     "general_item : general_kill_chase_time_limit",
1906     "general_item : general_kline_with_reason",
1907     "general_item : general_kline_reason",
1908     "general_item : general_invisible_on_connect",
1909     "general_item : general_warn_no_nline",
1910     "general_item : general_dots_in_ident",
1911     "general_item : general_stats_o_oper_only",
1912     "general_item : general_stats_k_oper_only",
1913     "general_item : general_pace_wait",
1914     "general_item : general_stats_i_oper_only",
1915     "general_item : general_pace_wait_simple",
1916     "general_item : general_stats_P_oper_only",
1917     "general_item : general_short_motd",
1918     "general_item : general_no_oper_flood",
1919     "general_item : general_true_no_oper_flood",
1920     "general_item : general_oper_pass_resv",
1921     "general_item : general_idletime",
1922     "general_item : general_message_locale",
1923     "general_item : general_oper_only_umodes",
1924     "general_item : general_max_targets",
1925     "general_item : general_use_egd",
1926     "general_item : general_egdpool_path",
1927     "general_item : general_oper_umodes",
1928     "general_item : general_caller_id_wait",
1929     "general_item : general_opers_bypass_callerid",
1930     "general_item : general_default_floodcount",
1931     "general_item : general_min_nonwildcard",
1932     "general_item : general_min_nonwildcard_simple",
1933     "general_item : general_servlink_path",
1934     "general_item : general_disable_remote_commands",
1935     "general_item : general_default_cipher_preference",
1936     "general_item : general_compression_level",
1937     "general_item : general_client_flood",
1938     "general_item : general_throttle_time",
1939     "general_item : general_havent_read_conf",
1940     "general_item : general_dot_in_ip6_addr",
1941     "general_item : general_ping_cookie",
1942     "general_item : general_disable_auth",
1943     "general_item : general_burst_away",
1944     "general_item : general_tkline_expire_notices",
1945     "general_item : general_gline_min_cidr",
1946     "general_item : general_gline_min_cidr6",
1947     "general_item : general_use_whois_actually",
1948     "general_item : general_reject_hold_time",
1949     "general_item : error",
1950     "general_gline_min_cidr : GLINE_MIN_CIDR '=' NUMBER ';'",
1951     "general_gline_min_cidr6 : GLINE_MIN_CIDR6 '=' NUMBER ';'",
1952     "general_burst_away : BURST_AWAY '=' TBOOL ';'",
1953     "general_use_whois_actually : USE_WHOIS_ACTUALLY '=' TBOOL ';'",
1954     "general_reject_hold_time : TREJECT_HOLD_TIME '=' timespec ';'",
1955     "general_tkline_expire_notices : TKLINE_EXPIRE_NOTICES '=' TBOOL ';'",
1956     "general_kill_chase_time_limit : KILL_CHASE_TIME_LIMIT '=' NUMBER ';'",
1957     "general_hide_spoof_ips : HIDE_SPOOF_IPS '=' TBOOL ';'",
1958     "general_ignore_bogus_ts : IGNORE_BOGUS_TS '=' TBOOL ';'",
1959     "general_disable_remote_commands : DISABLE_REMOTE_COMMANDS '=' TBOOL ';'",
1960     "general_failed_oper_notice : FAILED_OPER_NOTICE '=' TBOOL ';'",
1961     "general_anti_nick_flood : ANTI_NICK_FLOOD '=' TBOOL ';'",
1962     "general_max_nick_time : MAX_NICK_TIME '=' timespec ';'",
1963     "general_max_nick_changes : MAX_NICK_CHANGES '=' NUMBER ';'",
1964     "general_max_accept : MAX_ACCEPT '=' NUMBER ';'",
1965     "general_anti_spam_exit_message_time : ANTI_SPAM_EXIT_MESSAGE_TIME '=' timespec ';'",
1966     "general_ts_warn_delta : TS_WARN_DELTA '=' timespec ';'",
1967     "general_ts_max_delta : TS_MAX_DELTA '=' timespec ';'",
1968     "general_havent_read_conf : HAVENT_READ_CONF '=' NUMBER ';'",
1969     "general_kline_with_reason : KLINE_WITH_REASON '=' TBOOL ';'",
1970     "general_kline_reason : KLINE_REASON '=' QSTRING ';'",
1971     "general_invisible_on_connect : INVISIBLE_ON_CONNECT '=' TBOOL ';'",
1972     "general_warn_no_nline : WARN_NO_NLINE '=' TBOOL ';'",
1973     "general_stats_o_oper_only : STATS_O_OPER_ONLY '=' TBOOL ';'",
1974     "general_stats_P_oper_only : STATS_P_OPER_ONLY '=' TBOOL ';'",
1975     "general_stats_k_oper_only : STATS_K_OPER_ONLY '=' TBOOL ';'",
1976     "general_stats_k_oper_only : STATS_K_OPER_ONLY '=' TMASKED ';'",
1977     "general_stats_i_oper_only : STATS_I_OPER_ONLY '=' TBOOL ';'",
1978     "general_stats_i_oper_only : STATS_I_OPER_ONLY '=' TMASKED ';'",
1979     "general_pace_wait : PACE_WAIT '=' timespec ';'",
1980     "general_caller_id_wait : CALLER_ID_WAIT '=' timespec ';'",
1981     "general_opers_bypass_callerid : OPERS_BYPASS_CALLERID '=' TBOOL ';'",
1982     "general_pace_wait_simple : PACE_WAIT_SIMPLE '=' timespec ';'",
1983     "general_short_motd : SHORT_MOTD '=' TBOOL ';'",
1984     "general_no_oper_flood : NO_OPER_FLOOD '=' TBOOL ';'",
1985     "general_true_no_oper_flood : TRUE_NO_OPER_FLOOD '=' TBOOL ';'",
1986     "general_oper_pass_resv : OPER_PASS_RESV '=' TBOOL ';'",
1987     "general_message_locale : MESSAGE_LOCALE '=' QSTRING ';'",
1988     "general_idletime : IDLETIME '=' timespec ';'",
1989     "general_dots_in_ident : DOTS_IN_IDENT '=' NUMBER ';'",
1990     "general_max_targets : MAX_TARGETS '=' NUMBER ';'",
1991     "general_servlink_path : SERVLINK_PATH '=' QSTRING ';'",
1992     "general_default_cipher_preference : DEFAULT_CIPHER_PREFERENCE '=' QSTRING ';'",
1993     "general_compression_level : COMPRESSION_LEVEL '=' NUMBER ';'",
1994     "general_use_egd : USE_EGD '=' TBOOL ';'",
1995     "general_egdpool_path : EGDPOOL_PATH '=' QSTRING ';'",
1996     "general_ping_cookie : PING_COOKIE '=' TBOOL ';'",
1997     "general_disable_auth : DISABLE_AUTH '=' TBOOL ';'",
1998     "general_throttle_time : THROTTLE_TIME '=' timespec ';'",
1999     "$$27 :",
2000     "general_oper_umodes : OPER_UMODES $$27 '=' umode_oitems ';'",
2001     "umode_oitems : umode_oitems ',' umode_oitem",
2002     "umode_oitems : umode_oitem",
2003     "umode_oitem : T_BOTS",
2004     "umode_oitem : T_CCONN",
2005     "umode_oitem : T_DEAF",
2006     "umode_oitem : T_DEBUG",
2007     "umode_oitem : T_FULL",
2008     "umode_oitem : T_SKILL",
2009     "umode_oitem : T_NCHANGE",
2010     "umode_oitem : T_REJ",
2011     "umode_oitem : T_UNAUTH",
2012     "umode_oitem : T_SPY",
2013     "umode_oitem : T_EXTERNAL",
2014     "umode_oitem : T_OPERWALL",
2015     "umode_oitem : T_SERVNOTICE",
2016     "umode_oitem : T_INVISIBLE",
2017     "umode_oitem : T_WALLOP",
2018     "umode_oitem : T_SOFTCALLERID",
2019     "umode_oitem : T_CALLERID",
2020     "umode_oitem : T_LOCOPS",
2021     "$$28 :",
2022     "general_oper_only_umodes : OPER_ONLY_UMODES $$28 '=' umode_items ';'",
2023     "umode_items : umode_items ',' umode_item",
2024     "umode_items : umode_item",
2025     "umode_item : T_BOTS",
2026     "umode_item : T_CCONN",
2027     "umode_item : T_DEAF",
2028     "umode_item : T_DEBUG",
2029     "umode_item : T_FULL",
2030     "umode_item : T_SKILL",
2031     "umode_item : T_NCHANGE",
2032     "umode_item : T_REJ",
2033     "umode_item : T_UNAUTH",
2034     "umode_item : T_SPY",
2035     "umode_item : T_EXTERNAL",
2036     "umode_item : T_OPERWALL",
2037     "umode_item : T_SERVNOTICE",
2038     "umode_item : T_INVISIBLE",
2039     "umode_item : T_WALLOP",
2040     "umode_item : T_SOFTCALLERID",
2041     "umode_item : T_CALLERID",
2042     "umode_item : T_LOCOPS",
2043     "general_min_nonwildcard : MIN_NONWILDCARD '=' NUMBER ';'",
2044     "general_min_nonwildcard_simple : MIN_NONWILDCARD_SIMPLE '=' NUMBER ';'",
2045     "general_default_floodcount : DEFAULT_FLOODCOUNT '=' NUMBER ';'",
2046     "general_client_flood : T_CLIENT_FLOOD '=' sizespec ';'",
2047     "general_dot_in_ip6_addr : DOT_IN_IP6_ADDR '=' TBOOL ';'",
2048     "$$29 :",
2049     "gline_entry : GLINES $$29 '{' gline_items '}' ';'",
2050     "gline_items : gline_items gline_item",
2051     "gline_items : gline_item",
2052     "gline_item : gline_enable",
2053     "gline_item : gline_duration",
2054     "gline_item : gline_logging",
2055     "gline_item : gline_user",
2056     "gline_item : gline_server",
2057     "gline_item : gline_action",
2058     "gline_item : error",
2059     "gline_enable : ENABLE '=' TBOOL ';'",
2060     "gline_duration : DURATION '=' timespec ';'",
2061     "$$30 :",
2062     "gline_logging : LOGGING $$30 '=' gline_logging_types ';'",
2063     "gline_logging_types : gline_logging_types ',' gline_logging_type_item",
2064     "gline_logging_types : gline_logging_type_item",
2065     "gline_logging_type_item : T_REJECT",
2066     "gline_logging_type_item : T_BLOCK",
2067     "gline_user : USER '=' QSTRING ';'",
2068     "gline_server : NAME '=' QSTRING ';'",
2069     "$$31 :",
2070     "gline_action : ACTION $$31 '=' gdeny_types ';'",
2071     "gdeny_types : gdeny_types ',' gdeny_type_item",
2072     "gdeny_types : gdeny_type_item",
2073     "gdeny_type_item : T_REJECT",
2074     "gdeny_type_item : T_BLOCK",
2075     "channel_entry : CHANNEL '{' channel_items '}' ';'",
2076     "channel_items : channel_items channel_item",
2077     "channel_items : channel_item",
2078     "channel_item : channel_disable_local_channels",
2079     "channel_item : channel_use_except",
2080     "channel_item : channel_use_invex",
2081     "channel_item : channel_use_knock",
2082     "channel_item : channel_max_bans",
2083     "channel_item : channel_knock_delay",
2084     "channel_item : channel_knock_delay_channel",
2085     "channel_item : channel_invite_ops_only",
2086     "channel_item : channel_max_chans_per_user",
2087     "channel_item : channel_quiet_on_ban",
2088     "channel_item : channel_default_split_user_count",
2089     "channel_item : channel_default_split_server_count",
2090     "channel_item : channel_no_create_on_split",
2091     "channel_item : channel_restrict_channels",
2092     "channel_item : channel_no_join_on_split",
2093     "channel_item : channel_burst_topicwho",
2094     "channel_item : channel_jflood_count",
2095     "channel_item : channel_jflood_time",
2096     "channel_item : error",
2097     "channel_restrict_channels : RESTRICT_CHANNELS '=' TBOOL ';'",
2098     "channel_disable_local_channels : DISABLE_LOCAL_CHANNELS '=' TBOOL ';'",
2099     "channel_use_except : USE_EXCEPT '=' TBOOL ';'",
2100     "channel_use_invex : USE_INVEX '=' TBOOL ';'",
2101     "channel_use_knock : USE_KNOCK '=' TBOOL ';'",
2102     "channel_knock_delay : KNOCK_DELAY '=' timespec ';'",
2103     "channel_knock_delay_channel : KNOCK_DELAY_CHANNEL '=' timespec ';'",
2104     "channel_invite_ops_only : INVITE_OPS_ONLY '=' TBOOL ';'",
2105     "channel_max_chans_per_user : MAX_CHANS_PER_USER '=' NUMBER ';'",
2106     "channel_quiet_on_ban : QUIET_ON_BAN '=' TBOOL ';'",
2107     "channel_max_bans : MAX_BANS '=' NUMBER ';'",
2108     "channel_default_split_user_count : DEFAULT_SPLIT_USER_COUNT '=' NUMBER ';'",
2109     "channel_default_split_server_count : DEFAULT_SPLIT_SERVER_COUNT '=' NUMBER ';'",
2110     "channel_no_create_on_split : NO_CREATE_ON_SPLIT '=' TBOOL ';'",
2111     "channel_no_join_on_split : NO_JOIN_ON_SPLIT '=' TBOOL ';'",
2112     "channel_burst_topicwho : BURST_TOPICWHO '=' TBOOL ';'",
2113     "channel_jflood_count : JOIN_FLOOD_COUNT '=' NUMBER ';'",
2114     "channel_jflood_time : JOIN_FLOOD_TIME '=' timespec ';'",
2115     "serverhide_entry : SERVERHIDE '{' serverhide_items '}' ';'",
2116     "serverhide_items : serverhide_items serverhide_item",
2117     "serverhide_items : serverhide_item",
2118     "serverhide_item : serverhide_flatten_links",
2119     "serverhide_item : serverhide_hide_servers",
2120     "serverhide_item : serverhide_links_delay",
2121     "serverhide_item : serverhide_disable_hidden",
2122     "serverhide_item : serverhide_hidden",
2123     "serverhide_item : serverhide_hidden_name",
2124     "serverhide_item : serverhide_hide_server_ips",
2125     "serverhide_item : error",
2126     "serverhide_flatten_links : FLATTEN_LINKS '=' TBOOL ';'",
2127     "serverhide_hide_servers : HIDE_SERVERS '=' TBOOL ';'",
2128     "serverhide_hidden_name : HIDDEN_NAME '=' QSTRING ';'",
2129     "serverhide_links_delay : LINKS_DELAY '=' timespec ';'",
2130     "serverhide_hidden : HIDDEN '=' TBOOL ';'",
2131     "serverhide_disable_hidden : DISABLE_HIDDEN '=' TBOOL ';'",
2132     "serverhide_hide_server_ips : HIDE_SERVER_IPS '=' TBOOL ';'",
2133 adx 30 };
2134     #endif
2135 db 136 #if YYDEBUG
2136     #include <stdio.h>
2137 adx 30 #endif
2138 db 136 #ifdef YYSTACKSIZE
2139     #undef YYMAXDEPTH
2140     #define YYMAXDEPTH YYSTACKSIZE
2141 michael 56 #else
2142 db 136 #ifdef YYMAXDEPTH
2143     #define YYSTACKSIZE YYMAXDEPTH
2144 michael 56 #else
2145 db 136 #define YYSTACKSIZE 10000
2146     #define YYMAXDEPTH 10000
2147 michael 56 #endif
2148     #endif
2149 db 136 #define YYINITSTACKSIZE 200
2150 adx 30 int yydebug;
2151 db 136 int yynerrs;
2152     int yyerrflag;
2153     int yychar;
2154     short *yyssp;
2155     YYSTYPE *yyvsp;
2156     YYSTYPE yyval;
2157     YYSTYPE yylval;
2158     short *yyss;
2159     short *yysslim;
2160     YYSTYPE *yyvs;
2161     int yystacksize;
2162     /* allocate initial stack or double stack size, up to YYMAXDEPTH */
2163     static int yygrowstack()
2164 adx 30 {
2165 db 136 int newsize, i;
2166     short *newss;
2167     YYSTYPE *newvs;
2168 adx 30
2169 db 136 if ((newsize = yystacksize) == 0)
2170     newsize = YYINITSTACKSIZE;
2171     else if (newsize >= YYMAXDEPTH)
2172     return -1;
2173     else if ((newsize *= 2) > YYMAXDEPTH)
2174     newsize = YYMAXDEPTH;
2175     i = yyssp - yyss;
2176     newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :
2177     (short *)malloc(newsize * sizeof *newss);
2178     if (newss == NULL)
2179     return -1;
2180     yyss = newss;
2181     yyssp = newss + i;
2182     newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :
2183     (YYSTYPE *)malloc(newsize * sizeof *newvs);
2184     if (newvs == NULL)
2185     return -1;
2186     yyvs = newvs;
2187     yyvsp = newvs + i;
2188     yystacksize = newsize;
2189     yysslim = yyss + newsize - 1;
2190     return 0;
2191 adx 30 }
2192    
2193 db 136 #define YYABORT goto yyabort
2194     #define YYREJECT goto yyabort
2195     #define YYACCEPT goto yyaccept
2196     #define YYERROR goto yyerrlab
2197 adx 30
2198 db 136 #ifndef YYPARSE_PARAM
2199     #if defined(__cplusplus) || __STDC__
2200     #define YYPARSE_PARAM_ARG void
2201     #define YYPARSE_PARAM_DECL
2202     #else /* ! ANSI-C/C++ */
2203     #define YYPARSE_PARAM_ARG
2204     #define YYPARSE_PARAM_DECL
2205     #endif /* ANSI-C/C++ */
2206     #else /* YYPARSE_PARAM */
2207     #ifndef YYPARSE_PARAM_TYPE
2208     #define YYPARSE_PARAM_TYPE void *
2209 adx 30 #endif
2210 db 136 #if defined(__cplusplus) || __STDC__
2211     #define YYPARSE_PARAM_ARG YYPARSE_PARAM_TYPE YYPARSE_PARAM
2212     #define YYPARSE_PARAM_DECL
2213     #else /* ! ANSI-C/C++ */
2214     #define YYPARSE_PARAM_ARG YYPARSE_PARAM
2215     #define YYPARSE_PARAM_DECL YYPARSE_PARAM_TYPE YYPARSE_PARAM;
2216     #endif /* ANSI-C/C++ */
2217     #endif /* ! YYPARSE_PARAM */
2218 adx 30
2219 db 136 int
2220     yyparse (YYPARSE_PARAM_ARG)
2221     YYPARSE_PARAM_DECL
2222 adx 30 {
2223 db 136 int yym, yyn, yystate;
2224     #if YYDEBUG
2225     const char *yys;
2226 adx 30
2227 db 136 if ((yys = getenv("YYDEBUG")))
2228 adx 30 {
2229 db 136 yyn = *yys;
2230     if (yyn >= '0' && yyn <= '9')
2231     yydebug = yyn - '0';
2232 adx 30 }
2233     #endif
2234    
2235 db 136 yynerrs = 0;
2236     yyerrflag = 0;
2237     yychar = (-1);
2238 adx 30
2239 db 136 if (yyss == NULL && yygrowstack()) goto yyoverflow;
2240     yyssp = yyss;
2241     yyvsp = yyvs;
2242     *yyssp = yystate = 0;
2243 michael 56
2244 db 136 yyloop:
2245     if ((yyn = yydefred[yystate])) goto yyreduce;
2246     if (yychar < 0)
2247     {
2248     if ((yychar = yylex()) < 0) yychar = 0;
2249     #if YYDEBUG
2250     if (yydebug)
2251     {
2252     yys = 0;
2253     if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
2254     if (!yys) yys = "illegal-symbol";
2255     printf("%sdebug: state %d, reading %d (%s)\n",
2256     YYPREFIX, yystate, yychar, yys);
2257     }
2258 michael 102 #endif
2259 adx 30 }
2260 db 136 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
2261     yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
2262 adx 30 {
2263 db 136 #if YYDEBUG
2264     if (yydebug)
2265     printf("%sdebug: state %d, shifting to state %d\n",
2266     YYPREFIX, yystate, yytable[yyn]);
2267     #endif
2268     if (yyssp >= yysslim && yygrowstack())
2269     {
2270     goto yyoverflow;
2271     }
2272     *++yyssp = yystate = yytable[yyn];
2273     *++yyvsp = yylval;
2274     yychar = (-1);
2275     if (yyerrflag > 0) --yyerrflag;
2276     goto yyloop;
2277 adx 30 }
2278 db 136 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
2279     yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
2280 adx 30 {
2281 db 136 yyn = yytable[yyn];
2282     goto yyreduce;
2283 adx 30 }
2284 db 136 if (yyerrflag) goto yyinrecovery;
2285     #if defined(lint) || defined(__GNUC__)
2286     goto yynewerror;
2287     #endif
2288     yynewerror:
2289     yyerror("syntax error");
2290     #if defined(lint) || defined(__GNUC__)
2291     goto yyerrlab;
2292     #endif
2293     yyerrlab:
2294     ++yynerrs;
2295     yyinrecovery:
2296     if (yyerrflag < 3)
2297 adx 30 {
2298 db 136 yyerrflag = 3;
2299     for (;;)
2300     {
2301     if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
2302     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
2303     {
2304     #if YYDEBUG
2305     if (yydebug)
2306     printf("%sdebug: state %d, error recovery shifting\
2307     to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
2308     #endif
2309     if (yyssp >= yysslim && yygrowstack())
2310     {
2311     goto yyoverflow;
2312     }
2313     *++yyssp = yystate = yytable[yyn];
2314     *++yyvsp = yylval;
2315     goto yyloop;
2316     }
2317     else
2318     {
2319     #if YYDEBUG
2320     if (yydebug)
2321     printf("%sdebug: error recovery discarding state %d\n",
2322     YYPREFIX, *yyssp);
2323     #endif
2324     if (yyssp <= yyss) goto yyabort;
2325     --yyssp;
2326     --yyvsp;
2327     }
2328     }
2329 adx 30 }
2330 db 136 else
2331 adx 30 {
2332 db 136 if (yychar == 0) goto yyabort;
2333     #if YYDEBUG
2334     if (yydebug)
2335     {
2336     yys = 0;
2337     if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
2338     if (!yys) yys = "illegal-symbol";
2339     printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
2340     YYPREFIX, yystate, yychar, yys);
2341     }
2342     #endif
2343     yychar = (-1);
2344     goto yyloop;
2345 adx 30 }
2346     yyreduce:
2347 db 136 #if YYDEBUG
2348     if (yydebug)
2349     printf("%sdebug: state %d, reducing by rule %d (%s)\n",
2350     YYPREFIX, yystate, yyn, yyrule[yyn]);
2351     #endif
2352     yym = yylen[yyn];
2353     yyval = yyvsp[1-yym];
2354     switch (yyn)
2355 adx 30 {
2356 db 136 case 25:
2357 michael 56 #line 422 "ircd_parser.y"
2358 db 136 { yyval.number = 0; }
2359     break;
2360     case 27:
2361 michael 56 #line 424 "ircd_parser.y"
2362 db 136 {
2363     yyval.number = yyvsp[-1].number + yyvsp[0].number;
2364 adx 30 }
2365 db 136 break;
2366     case 28:
2367 michael 56 #line 428 "ircd_parser.y"
2368 db 136 {
2369     yyval.number = yyvsp[-2].number + yyvsp[0].number;
2370 adx 30 }
2371 db 136 break;
2372     case 29:
2373 michael 56 #line 432 "ircd_parser.y"
2374 db 136 {
2375     yyval.number = yyvsp[-2].number * 60 + yyvsp[0].number;
2376 adx 30 }
2377 db 136 break;
2378     case 30:
2379 michael 56 #line 436 "ircd_parser.y"
2380 db 136 {
2381     yyval.number = yyvsp[-2].number * 60 * 60 + yyvsp[0].number;
2382 adx 30 }
2383 db 136 break;
2384     case 31:
2385 michael 56 #line 440 "ircd_parser.y"
2386 db 136 {
2387     yyval.number = yyvsp[-2].number * 60 * 60 * 24 + yyvsp[0].number;
2388 adx 30 }
2389 db 136 break;
2390     case 32:
2391 michael 56 #line 444 "ircd_parser.y"
2392 db 136 {
2393     yyval.number = yyvsp[-2].number * 60 * 60 * 24 * 7 + yyvsp[0].number;
2394 adx 30 }
2395 db 136 break;
2396     case 33:
2397 michael 56 #line 449 "ircd_parser.y"
2398 db 136 { yyval.number = 0; }
2399     break;
2400     case 35:
2401 michael 56 #line 450 "ircd_parser.y"
2402 db 136 { yyval.number = yyvsp[-1].number + yyvsp[0].number; }
2403     break;
2404     case 36:
2405 michael 56 #line 451 "ircd_parser.y"
2406 db 136 { yyval.number = yyvsp[-2].number + yyvsp[0].number; }
2407     break;
2408     case 37:
2409 michael 56 #line 452 "ircd_parser.y"
2410 db 136 { yyval.number = yyvsp[-2].number * 1024 + yyvsp[0].number; }
2411     break;
2412     case 38:
2413 michael 56 #line 453 "ircd_parser.y"
2414 db 136 { yyval.number = yyvsp[-2].number * 1024 * 1024 + yyvsp[0].number; }
2415     break;
2416     case 45:
2417 michael 56 #line 467 "ircd_parser.y"
2418 db 136 {
2419 adx 30 #ifndef STATIC_MODULES /* NOOP in the static case */
2420     if (ypass == 2)
2421     {
2422     char *m_bn;
2423    
2424     m_bn = basename(yylval.string);
2425    
2426     /* I suppose we should just ignore it if it is already loaded(since
2427     * otherwise we would flood the opers on rehash) -A1kmm.
2428     */
2429     add_conf_module(yylval.string);
2430     }
2431     #endif
2432     }
2433 db 136 break;
2434     case 46:
2435 michael 56 #line 484 "ircd_parser.y"
2436 db 136 {
2437 adx 30 #ifndef STATIC_MODULES
2438     if (ypass == 2)
2439     mod_add_path(yylval.string);
2440     #endif
2441     }
2442 db 136 break;
2443     case 62:
2444 michael 56 #line 508 "ircd_parser.y"
2445 db 136 {
2446 adx 30 #ifdef HAVE_LIBCRYPTO
2447     if (ypass == 2 && ServerInfo.ctx)
2448     {
2449     if (!ServerInfo.rsa_private_key_file)
2450     {
2451     yyerror("No rsa_private_key_file specified, SSL disabled");
2452     break;
2453     }
2454    
2455     if (SSL_CTX_use_certificate_file(ServerInfo.ctx,
2456     yylval.string, SSL_FILETYPE_PEM) <= 0)
2457     {
2458     yyerror(ERR_lib_error_string(ERR_get_error()));
2459     break;
2460     }
2461    
2462     if (SSL_CTX_use_PrivateKey_file(ServerInfo.ctx,
2463     ServerInfo.rsa_private_key_file, SSL_FILETYPE_PEM) <= 0)
2464     {
2465     yyerror(ERR_lib_error_string(ERR_get_error()));
2466     break;
2467     }
2468    
2469     if (!SSL_CTX_check_private_key(ServerInfo.ctx))
2470     {
2471     yyerror("RSA private key does not match the SSL certificate public key!");
2472     break;
2473     }
2474     }
2475     #endif
2476     }
2477 db 136 break;
2478     case 63:
2479 michael 56 #line 542 "ircd_parser.y"
2480 db 136 {
2481 adx 30 #ifdef HAVE_LIBCRYPTO
2482     if (ypass == 1)
2483     {
2484     BIO *file;
2485    
2486     if (ServerInfo.rsa_private_key)
2487     {
2488     RSA_free(ServerInfo.rsa_private_key);
2489     ServerInfo.rsa_private_key = NULL;
2490     }
2491    
2492     if (ServerInfo.rsa_private_key_file)
2493     {
2494     MyFree(ServerInfo.rsa_private_key_file);
2495     ServerInfo.rsa_private_key_file = NULL;
2496     }
2497    
2498     DupString(ServerInfo.rsa_private_key_file, yylval.string);
2499    
2500     if ((file = BIO_new_file(yylval.string, "r")) == NULL)
2501     {
2502     yyerror("File open failed, ignoring");
2503     break;
2504     }
2505    
2506     ServerInfo.rsa_private_key = (RSA *)PEM_read_bio_RSAPrivateKey(file, NULL,
2507     0, NULL);
2508    
2509     BIO_set_close(file, BIO_CLOSE);
2510     BIO_free(file);
2511    
2512     if (ServerInfo.rsa_private_key == NULL)
2513     {
2514     yyerror("Couldn't extract key, ignoring");
2515     break;
2516     }
2517    
2518     if (!RSA_check_key(ServerInfo.rsa_private_key))
2519     {
2520     RSA_free(ServerInfo.rsa_private_key);
2521     ServerInfo.rsa_private_key = NULL;
2522    
2523     yyerror("Invalid key, ignoring");
2524     break;
2525     }
2526    
2527     /* require 2048 bit (256 byte) key */
2528     if (RSA_size(ServerInfo.rsa_private_key) != 256)
2529     {
2530     RSA_free(ServerInfo.rsa_private_key);
2531     ServerInfo.rsa_private_key = NULL;
2532    
2533     yyerror("Not a 2048 bit key, ignoring");
2534     }
2535     }
2536     #endif
2537     }
2538 db 136 break;
2539     case 64:
2540 michael 56 #line 602 "ircd_parser.y"
2541 db 136 {
2542 adx 30 /* this isn't rehashable */
2543     if (ypass == 2)
2544     {
2545     if (ServerInfo.name == NULL)
2546     {
2547     /* the ircd will exit() in main() if we dont set one */
2548     if (strlen(yylval.string) <= HOSTLEN)
2549     DupString(ServerInfo.name, yylval.string);
2550     }
2551     }
2552     }
2553 db 136 break;
2554     case 65:
2555 michael 56 #line 616 "ircd_parser.y"
2556 db 136 {
2557 adx 30 /* this isn't rehashable */
2558     if (ypass == 2 && !ServerInfo.sid)
2559     {
2560     if ((strlen(yylval.string) == IRC_MAXSID) && IsDigit(yylval.string[0])
2561     && IsAlNum(yylval.string[1]) && IsAlNum(yylval.string[2]))
2562     {
2563     DupString(ServerInfo.sid, yylval.string);
2564     }
2565     else
2566     {
2567     ilog(L_ERROR, "Ignoring config file entry SID -- invalid SID. Aborting.");
2568     exit(0);
2569     }
2570     }
2571     }
2572 db 136 break;
2573     case 66:
2574 michael 56 #line 634 "ircd_parser.y"
2575 db 136 {
2576 adx 30 if (ypass == 2)
2577     {
2578     MyFree(ServerInfo.description);
2579     DupString(ServerInfo.description,yylval.string);
2580     }
2581     }
2582 db 136 break;
2583     case 67:
2584 michael 56 #line 643 "ircd_parser.y"
2585 db 136 {
2586 adx 30 if (ypass == 2)
2587     {
2588     char *p;
2589    
2590     if ((p = strchr(yylval.string, ' ')) != NULL)
2591     p = '\0';
2592    
2593     MyFree(ServerInfo.network_name);
2594     DupString(ServerInfo.network_name, yylval.string);
2595     }
2596     }
2597 db 136 break;
2598     case 68:
2599 michael 56 #line 657 "ircd_parser.y"
2600 db 136 {
2601 adx 30 if (ypass == 2)
2602     {
2603     MyFree(ServerInfo.network_desc);
2604     DupString(ServerInfo.network_desc, yylval.string);
2605     }
2606     }
2607 db 136 break;
2608     case 69:
2609 michael 56 #line 666 "ircd_parser.y"
2610 db 136 {
2611 adx 30 if (ypass == 2 && *yylval.string != '*')
2612     {
2613     struct addrinfo hints, *res;
2614    
2615     memset(&hints, 0, sizeof(hints));
2616    
2617     hints.ai_family = AF_UNSPEC;
2618     hints.ai_socktype = SOCK_STREAM;
2619     hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST;
2620    
2621     if (irc_getaddrinfo(yylval.string, NULL, &hints, &res))
2622     ilog(L_ERROR, "Invalid netmask for server vhost(%s)", yylval.string);
2623     else
2624     {
2625     assert(res != NULL);
2626    
2627     memcpy(&ServerInfo.ip, res->ai_addr, res->ai_addrlen);
2628     ServerInfo.ip.ss.ss_family = res->ai_family;
2629     ServerInfo.ip.ss_len = res->ai_addrlen;
2630     irc_freeaddrinfo(res);
2631    
2632     ServerInfo.specific_ipv4_vhost = 1;
2633     }
2634     }
2635     }
2636 db 136 break;
2637     case 70:
2638 michael 56 #line 694 "ircd_parser.y"
2639 db 136 {
2640 adx 30 #ifdef IPV6
2641     if (ypass == 2 && *yylval.string != '*')
2642     {
2643     struct addrinfo hints, *res;
2644    
2645     memset(&hints, 0, sizeof(hints));
2646    
2647     hints.ai_family = AF_UNSPEC;
2648     hints.ai_socktype = SOCK_STREAM;
2649     hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST;
2650    
2651     if (irc_getaddrinfo(yylval.string, NULL, &hints, &res))
2652     ilog(L_ERROR, "Invalid netmask for server vhost6(%s)", yylval.string);
2653     else
2654     {
2655     assert(res != NULL);
2656    
2657     memcpy(&ServerInfo.ip6, res->ai_addr, res->ai_addrlen);
2658     ServerInfo.ip6.ss.ss_family = res->ai_family;
2659     ServerInfo.ip6.ss_len = res->ai_addrlen;
2660     irc_freeaddrinfo(res);
2661    
2662     ServerInfo.specific_ipv6_vhost = 1;
2663     }
2664     }
2665     #endif
2666     }
2667 db 136 break;
2668     case 71:
2669 michael 56 #line 724 "ircd_parser.y"
2670 db 136 {
2671 adx 30 if (ypass == 2)
2672     {
2673     recalc_fdlimit(NULL);
2674    
2675 db 136 if (yyvsp[-1].number < MAXCLIENTS_MIN)
2676 adx 30 {
2677     char buf[IRCD_BUFSIZE];
2678     ircsprintf(buf, "MAXCLIENTS too low, setting to %d", MAXCLIENTS_MIN);
2679     yyerror(buf);
2680     }
2681 db 136 else if (yyvsp[-1].number > MAXCLIENTS_MAX)
2682 adx 30 {
2683     char buf[IRCD_BUFSIZE];
2684     ircsprintf(buf, "MAXCLIENTS too high, setting to %d", MAXCLIENTS_MAX);
2685     yyerror(buf);
2686     }
2687     else
2688 db 136 ServerInfo.max_clients = yyvsp[-1].number;
2689 adx 30 }
2690     }
2691 db 136 break;
2692     case 72:
2693 michael 56 #line 747 "ircd_parser.y"
2694 db 136 {
2695 adx 30 if (ypass == 2)
2696     {
2697     if (yylval.number)
2698     {
2699     /* Don't become a hub if we have a lazylink active. */
2700     if (!ServerInfo.hub && uplink && IsCapable(uplink, CAP_LL))
2701     {
2702     sendto_realops_flags(UMODE_ALL, L_ALL,
2703     "Ignoring config file line hub=yes; "
2704     "due to active LazyLink (%s)", uplink->name);
2705     }
2706     else
2707     {
2708     ServerInfo.hub = 1;
2709     uplink = NULL;
2710     delete_capability("HUB");
2711     add_capability("HUB", CAP_HUB, 1);
2712     }
2713     }
2714     else if (ServerInfo.hub)
2715     {
2716     dlink_node *ptr = NULL;
2717    
2718     ServerInfo.hub = 0;
2719     delete_capability("HUB");
2720    
2721     /* Don't become a leaf if we have a lazylink active. */
2722     DLINK_FOREACH(ptr, serv_list.head)
2723     {
2724     const struct Client *acptr = ptr->data;
2725     if (MyConnect(acptr) && IsCapable(acptr, CAP_LL))
2726     {
2727     sendto_realops_flags(UMODE_ALL, L_ALL,
2728     "Ignoring config file line hub=no; "
2729     "due to active LazyLink (%s)",
2730     acptr->name);
2731     add_capability("HUB", CAP_HUB, 1);
2732     ServerInfo.hub = 1;
2733     break;
2734     }
2735     }
2736     }
2737     }
2738     }
2739 db 136 break;
2740     case 80:
2741 michael 56 #line 803 "ircd_parser.y"
2742 db 136 {
2743 adx 30 if (ypass == 2)
2744     {
2745     MyFree(AdminInfo.name);
2746     DupString(AdminInfo.name, yylval.string);
2747     }
2748     }
2749 db 136 break;
2750     case 81:
2751 michael 56 #line 812 "ircd_parser.y"
2752 db 136 {
2753 adx 30 if (ypass == 2)
2754     {
2755     MyFree(AdminInfo.email);
2756     DupString(AdminInfo.email, yylval.string);
2757     }
2758     }
2759 db 136 break;
2760     case 82:
2761 michael 56 #line 821 "ircd_parser.y"
2762 db 136 {
2763 adx 30 if (ypass == 2)
2764     {
2765     MyFree(AdminInfo.description);
2766     DupString(AdminInfo.description, yylval.string);
2767     }
2768     }
2769 db 136 break;
2770     case 99:
2771 michael 56 #line 848 "ircd_parser.y"
2772 db 136 {
2773 adx 30 }
2774 db 136 break;
2775     case 100:
2776 michael 56 #line 852 "ircd_parser.y"
2777 db 136 {
2778 adx 30 }
2779 db 136 break;
2780     case 101:
2781 michael 56 #line 856 "ircd_parser.y"
2782 db 136 {
2783 adx 30 if (ypass == 2)
2784     strlcpy(ConfigLoggingEntry.userlog, yylval.string,
2785     sizeof(ConfigLoggingEntry.userlog));
2786     }
2787 db 136 break;
2788     case 102:
2789 michael 56 #line 863 "ircd_parser.y"
2790 db 136 {
2791 adx 30 if (ypass == 2)
2792     strlcpy(ConfigLoggingEntry.failed_operlog, yylval.string,
2793     sizeof(ConfigLoggingEntry.failed_operlog));
2794     }
2795 db 136 break;
2796     case 103:
2797 michael 56 #line 870 "ircd_parser.y"
2798 db 136 {
2799 adx 30 if (ypass == 2)
2800     strlcpy(ConfigLoggingEntry.operlog, yylval.string,
2801     sizeof(ConfigLoggingEntry.operlog));
2802     }
2803 db 136 break;
2804     case 104:
2805 michael 56 #line 877 "ircd_parser.y"
2806 db 136 {
2807 adx 30 if (ypass == 2)
2808     strlcpy(ConfigLoggingEntry.operspylog, yylval.string,
2809     sizeof(ConfigLoggingEntry.operspylog));
2810     }
2811 db 136 break;
2812     case 105:
2813 michael 56 #line 884 "ircd_parser.y"
2814 db 136 {
2815 adx 30 if (ypass == 2)
2816     strlcpy(ConfigLoggingEntry.glinelog, yylval.string,
2817     sizeof(ConfigLoggingEntry.glinelog));
2818     }
2819 db 136 break;
2820     case 106:
2821 michael 56 #line 891 "ircd_parser.y"
2822 db 136 {
2823 adx 30 if (ypass == 2)
2824     strlcpy(ConfigLoggingEntry.klinelog, yylval.string,
2825     sizeof(ConfigLoggingEntry.klinelog));
2826     }
2827 db 136 break;
2828     case 107:
2829 michael 56 #line 898 "ircd_parser.y"
2830 db 136 {
2831 adx 30 if (ypass == 2)
2832     strlcpy(ConfigLoggingEntry.ioerrlog, yylval.string,
2833     sizeof(ConfigLoggingEntry.ioerrlog));
2834     }
2835 db 136 break;
2836     case 108:
2837 michael 56 #line 905 "ircd_parser.y"
2838 db 136 {
2839 adx 30 if (ypass == 2)
2840     strlcpy(ConfigLoggingEntry.killlog, yylval.string,
2841     sizeof(ConfigLoggingEntry.killlog));
2842     }
2843 db 136 break;
2844     case 109:
2845 michael 56 #line 912 "ircd_parser.y"
2846 db 136 {
2847 adx 30 if (ypass == 2)
2848     set_log_level(L_CRIT);
2849     }
2850 db 136 break;
2851     case 110:
2852 michael 56 #line 916 "ircd_parser.y"
2853 db 136 {
2854 adx 30 if (ypass == 2)
2855     set_log_level(L_ERROR);
2856     }
2857 db 136 break;
2858     case 111:
2859 michael 56 #line 920 "ircd_parser.y"
2860 db 136 {
2861 adx 30 if (ypass == 2)
2862     set_log_level(L_WARN);
2863     }
2864 db 136 break;
2865     case 112:
2866 michael 56 #line 924 "ircd_parser.y"
2867 db 136 {
2868 adx 30 if (ypass == 2)
2869     set_log_level(L_NOTICE);
2870     }
2871 db 136 break;
2872     case 113:
2873 michael 56 #line 928 "ircd_parser.y"
2874 db 136 {
2875 adx 30 if (ypass == 2)
2876     set_log_level(L_TRACE);
2877     }
2878 db 136 break;
2879     case 114:
2880 michael 56 #line 932 "ircd_parser.y"
2881 db 136 {
2882 adx 30 if (ypass == 2)
2883     set_log_level(L_INFO);
2884     }
2885 db 136 break;
2886     case 115:
2887 michael 56 #line 936 "ircd_parser.y"
2888 db 136 {
2889 adx 30 if (ypass == 2)
2890     set_log_level(L_DEBUG);
2891     }
2892 db 136 break;
2893     case 116:
2894 michael 56 #line 942 "ircd_parser.y"
2895 db 136 {
2896 adx 30 if (ypass == 2)
2897     ConfigLoggingEntry.use_logging = yylval.number;
2898     }
2899 db 136 break;
2900     case 117:
2901 michael 56 #line 951 "ircd_parser.y"
2902 db 136 {
2903 adx 30 if (ypass == 2)
2904     {
2905     yy_conf = make_conf_item(OPER_TYPE);
2906     yy_aconf = map_to_conf(yy_conf);
2907     SetConfEncrypted(yy_aconf); /* Yes, the default is encrypted */
2908     }
2909     else
2910     {
2911     MyFree(class_name);
2912     class_name = NULL;
2913     }
2914     }
2915 db 136 break;
2916     case 118:
2917 michael 56 #line 964 "ircd_parser.y"
2918 db 136 {
2919 adx 30 if (ypass == 2)
2920     {
2921     struct CollectItem *yy_tmp;
2922     dlink_node *ptr;
2923     dlink_node *next_ptr;
2924    
2925     conf_add_class_to_conf(yy_conf, class_name);
2926    
2927     /* Now, make sure there is a copy of the "base" given oper
2928     * block in each of the collected copies
2929     */
2930    
2931     DLINK_FOREACH_SAFE(ptr, next_ptr, col_conf_list.head)
2932     {
2933     struct AccessItem *new_aconf;
2934     struct ConfItem *new_conf;
2935     yy_tmp = ptr->data;
2936    
2937     new_conf = make_conf_item(OPER_TYPE);
2938     new_aconf = (struct AccessItem *)map_to_conf(new_conf);
2939    
2940     new_aconf->flags = yy_aconf->flags;
2941    
2942     if (yy_conf->name != NULL)
2943     DupString(new_conf->name, yy_conf->name);
2944     if (yy_tmp->user != NULL)
2945     DupString(new_aconf->user, yy_tmp->user);
2946     else
2947     DupString(new_aconf->user, "*");
2948     if (yy_tmp->host != NULL)
2949     DupString(new_aconf->host, yy_tmp->host);
2950     else
2951     DupString(new_aconf->host, "*");
2952     conf_add_class_to_conf(new_conf, class_name);
2953     if (yy_aconf->passwd != NULL)
2954     DupString(new_aconf->passwd, yy_aconf->passwd);
2955    
2956     new_aconf->port = yy_aconf->port;
2957     #ifdef HAVE_LIBCRYPTO
2958     if (yy_aconf->rsa_public_key_file != NULL)
2959     {
2960     BIO *file;
2961    
2962     DupString(new_aconf->rsa_public_key_file,
2963     yy_aconf->rsa_public_key_file);
2964    
2965     file = BIO_new_file(yy_aconf->rsa_public_key_file, "r");
2966     new_aconf->rsa_public_key = (RSA *)PEM_read_bio_RSA_PUBKEY(file,
2967     NULL, 0, NULL);
2968     BIO_set_close(file, BIO_CLOSE);
2969     BIO_free(file);
2970     }
2971     #endif
2972    
2973     #ifdef HAVE_LIBCRYPTO
2974     if (yy_tmp->name && (yy_tmp->passwd || yy_aconf->rsa_public_key)
2975     && yy_tmp->host)
2976     #else
2977     if (yy_tmp->name && yy_tmp->passwd && yy_tmp->host)
2978     #endif
2979     {
2980     conf_add_class_to_conf(new_conf, class_name);
2981     if (yy_tmp->name != NULL)
2982     DupString(new_conf->name, yy_tmp->name);
2983     }
2984    
2985     dlinkDelete(&yy_tmp->node, &col_conf_list);
2986     free_collect_item(yy_tmp);
2987     }
2988    
2989     yy_conf = NULL;
2990     yy_aconf = NULL;
2991    
2992    
2993     MyFree(class_name);
2994     class_name = NULL;
2995     }
2996     }
2997 db 136 break;
2998     case 146:
2999 michael 56 #line 1056 "ircd_parser.y"
3000 db 136 {
3001 adx 30 if (ypass == 2)
3002     {
3003     if (strlen(yylval.string) > OPERNICKLEN)
3004     yylval.string[OPERNICKLEN] = '\0';
3005    
3006     MyFree(yy_conf->name);
3007     DupString(yy_conf->name, yylval.string);
3008     }
3009     }
3010 db 136 break;
3011     case 147:
3012 michael 56 #line 1068 "ircd_parser.y"
3013 db 136 {
3014 adx 30 if (ypass == 2)
3015     {
3016     if (strlen(yylval.string) > OPERNICKLEN)
3017     yylval.string[OPERNICKLEN] = '\0';
3018    
3019     MyFree(yy_conf->name);
3020     DupString(yy_conf->name, yylval.string);
3021     }
3022     }
3023 db 136 break;
3024     case 148:
3025 michael 56 #line 1080 "ircd_parser.y"
3026 db 136 {
3027 adx 30 if (ypass == 2)
3028     {
3029     struct CollectItem *yy_tmp;
3030    
3031     if (yy_aconf->user == NULL)
3032     {
3033     split_nuh(yylval.string, NULL, &yy_aconf->user, &yy_aconf->host);
3034     }
3035     else
3036     {
3037     yy_tmp = (struct CollectItem *)MyMalloc(sizeof(struct CollectItem));
3038     split_nuh(yylval.string, NULL, &yy_tmp->user, &yy_tmp->host);
3039     dlinkAdd(yy_tmp, &yy_tmp->node, &col_conf_list);
3040     }
3041     }
3042     }
3043 db 136 break;
3044     case 149:
3045 michael 56 #line 1099 "ircd_parser.y"
3046 db 136 {
3047 adx 30 if (ypass == 2)
3048     {
3049     if (yy_aconf->passwd != NULL)
3050     memset(yy_aconf->passwd, 0, strlen(yy_aconf->passwd));
3051    
3052     MyFree(yy_aconf->passwd);
3053     DupString(yy_aconf->passwd, yylval.string);
3054     }
3055     }
3056 db 136 break;
3057     case 150:
3058 michael 56 #line 1111 "ircd_parser.y"
3059 db 136 {
3060 adx 30 if (ypass == 2)
3061     {
3062     if (yylval.number)
3063     SetConfEncrypted(yy_aconf);
3064     else
3065     ClearConfEncrypted(yy_aconf);
3066     }
3067     }
3068 db 136 break;
3069     case 151:
3070 michael 56 #line 1122 "ircd_parser.y"
3071 db 136 {
3072 adx 30 #ifdef HAVE_LIBCRYPTO
3073     if (ypass == 2)
3074     {
3075     BIO *file;
3076    
3077     if (yy_aconf->rsa_public_key != NULL)
3078     {
3079     RSA_free(yy_aconf->rsa_public_key);
3080     yy_aconf->rsa_public_key = NULL;
3081     }
3082    
3083     if (yy_aconf->rsa_public_key_file != NULL)
3084     {
3085     MyFree(yy_aconf->rsa_public_key_file);
3086     yy_aconf->rsa_public_key_file = NULL;
3087     }
3088    
3089     DupString(yy_aconf->rsa_public_key_file, yylval.string);
3090     file = BIO_new_file(yylval.string, "r");
3091    
3092     if (file == NULL)
3093     {
3094     yyerror("Ignoring rsa_public_key_file -- file doesn't exist");
3095     break;
3096     }
3097    
3098     yy_aconf->rsa_public_key = (RSA *)PEM_read_bio_RSA_PUBKEY(file, NULL, 0, NULL);
3099    
3100     if (yy_aconf->rsa_public_key == NULL)
3101     {
3102     yyerror("Ignoring rsa_public_key_file -- Key invalid; check key syntax.");
3103     break;
3104     }
3105    
3106     BIO_set_close(file, BIO_CLOSE);
3107     BIO_free(file);
3108     }
3109     #endif /* HAVE_LIBCRYPTO */
3110     }
3111 db 136 break;
3112     case 152:
3113 michael 56 #line 1164 "ircd_parser.y"
3114 db 136 {
3115 adx 30 if (ypass == 2)
3116     {
3117     MyFree(class_name);
3118     DupString(class_name, yylval.string);
3119     }
3120     }
3121 db 136 break;
3122     case 153:
3123 michael 56 #line 1173 "ircd_parser.y"
3124 db 136 {
3125 michael 56 yy_aconf->modes = 0;
3126     }
3127 db 136 break;
3128     case 157:
3129 michael 56 #line 1179 "ircd_parser.y"
3130 db 136 {
3131 michael 56 yy_aconf->modes |= UMODE_BOTS;
3132     }
3133 db 136 break;
3134     case 158:
3135 michael 56 #line 1182 "ircd_parser.y"
3136 db 136 {
3137 michael 56 yy_aconf->modes |= UMODE_CCONN;
3138     }
3139 db 136 break;
3140     case 159:
3141 michael 56 #line 1185 "ircd_parser.y"
3142 db 136 {
3143 michael 56 yy_aconf->modes |= UMODE_DEAF;
3144     }
3145 db 136 break;
3146     case 160:
3147 michael 56 #line 1188 "ircd_parser.y"
3148 db 136 {
3149 michael 56 yy_aconf->modes |= UMODE_DEBUG;
3150     }
3151 db 136 break;
3152     case 161:
3153 michael 56 #line 1191 "ircd_parser.y"
3154 db 136 {
3155 michael 56 yy_aconf->modes |= UMODE_FULL;
3156     }
3157 db 136 break;
3158     case 162:
3159 michael 56 #line 1194 "ircd_parser.y"
3160 db 136 {
3161 michael 56 yy_aconf->modes |= UMODE_SKILL;
3162     }
3163 db 136 break;
3164     case 163:
3165 michael 56 #line 1197 "ircd_parser.y"
3166 db 136 {
3167 michael 56 yy_aconf->modes |= UMODE_NCHANGE;
3168     }
3169 db 136 break;
3170     case 164:
3171 michael 56 #line 1200 "ircd_parser.y"
3172 db 136 {
3173 michael 56 yy_aconf->modes |= UMODE_REJ;
3174     }
3175 db 136 break;
3176     case 165:
3177 michael 56 #line 1203 "ircd_parser.y"
3178 db 136 {
3179 michael 56 yy_aconf->modes |= UMODE_UNAUTH;
3180     }
3181 db 136 break;
3182     case 166:
3183 michael 56 #line 1206 "ircd_parser.y"
3184 db 136 {
3185 michael 56 yy_aconf->modes |= UMODE_SPY;
3186     }
3187 db 136 break;
3188     case 167:
3189 michael 56 #line 1209 "ircd_parser.y"
3190 db 136 {
3191 michael 56 yy_aconf->modes |= UMODE_EXTERNAL;
3192     }
3193 db 136 break;
3194     case 168:
3195 michael 56 #line 1212 "ircd_parser.y"
3196 db 136 {
3197 michael 56 yy_aconf->modes |= UMODE_OPERWALL;
3198     }
3199 db 136 break;
3200     case 169:
3201 michael 56 #line 1215 "ircd_parser.y"
3202 db 136 {
3203 michael 56 yy_aconf->modes |= UMODE_SERVNOTICE;
3204     }
3205 db 136 break;
3206     case 170:
3207 michael 56 #line 1218 "ircd_parser.y"
3208 db 136 {
3209 michael 56 yy_aconf->modes |= UMODE_INVISIBLE;
3210     }
3211 db 136 break;
3212     case 171:
3213 michael 56 #line 1221 "ircd_parser.y"
3214 db 136 {
3215 michael 56 yy_aconf->modes |= UMODE_WALLOP;
3216     }
3217 db 136 break;
3218     case 172:
3219 michael 56 #line 1224 "ircd_parser.y"
3220 db 136 {
3221 michael 56 yy_aconf->modes |= UMODE_SOFTCALLERID;
3222     }
3223 db 136 break;
3224     case 173:
3225 michael 56 #line 1227 "ircd_parser.y"
3226 db 136 {
3227 michael 56 yy_aconf->modes |= UMODE_CALLERID;
3228     }
3229 db 136 break;
3230     case 174:
3231 michael 56 #line 1230 "ircd_parser.y"
3232 db 136 {
3233 michael 56 yy_aconf->modes |= UMODE_LOCOPS;
3234     }
3235 db 136 break;
3236     case 175:
3237 michael 56 #line 1235 "ircd_parser.y"
3238 db 136 {
3239 adx 30 if (ypass == 2)
3240     {
3241     if (yylval.number)
3242     yy_aconf->port |= OPER_FLAG_GLOBAL_KILL;
3243     else
3244     yy_aconf->port &= ~OPER_FLAG_GLOBAL_KILL;
3245     }
3246     }
3247 db 136 break;
3248     case 176:
3249 michael 56 #line 1246 "ircd_parser.y"
3250 db 136 {
3251 adx 30 if (ypass == 2)
3252     {
3253     if (yylval.number)
3254     yy_aconf->port |= OPER_FLAG_REMOTE;
3255     else
3256     yy_aconf->port &= ~OPER_FLAG_REMOTE;
3257     }
3258     }
3259 db 136 break;
3260     case 177:
3261 michael 56 #line 1257 "ircd_parser.y"
3262 db 136 {
3263 adx 30 if (ypass == 2)
3264     {
3265     if (yylval.number)
3266     yy_aconf->port |= OPER_FLAG_REMOTEBAN;
3267     else
3268     yy_aconf->port &= ~OPER_FLAG_REMOTEBAN;
3269     }
3270     }
3271 db 136 break;
3272     case 178:
3273 michael 56 #line 1268 "ircd_parser.y"
3274 db 136 {
3275 adx 30 if (ypass == 2)
3276     {
3277     if (yylval.number)
3278     yy_aconf->port |= OPER_FLAG_K;
3279     else
3280     yy_aconf->port &= ~OPER_FLAG_K;
3281     }
3282     }
3283 db 136 break;
3284     case 179:
3285 michael 56 #line 1279 "ircd_parser.y"
3286 db 136 {
3287 adx 30 if (ypass == 2)
3288     {
3289     if (yylval.number)
3290     yy_aconf->port |= OPER_FLAG_X;
3291     else
3292     yy_aconf->port &= ~OPER_FLAG_X;
3293     }
3294     }
3295 db 136 break;
3296     case 180:
3297 michael 56 #line 1290 "ircd_parser.y"
3298 db 136 {
3299 adx 30 if (ypass == 2)
3300     {
3301     if (yylval.number)
3302     yy_aconf->port |= OPER_FLAG_UNKLINE;
3303     else
3304     yy_aconf->port &= ~OPER_FLAG_UNKLINE;
3305     }
3306     }
3307 db 136 break;
3308     case 181:
3309 michael 56 #line 1301 "ircd_parser.y"
3310 db 136 {
3311 adx 30 if (ypass == 2)
3312     {
3313     if (yylval.number)
3314     yy_aconf->port |= OPER_FLAG_GLINE;
3315     else
3316     yy_aconf->port &= ~OPER_FLAG_GLINE;
3317     }
3318     }
3319 db 136 break;
3320     case 182:
3321 michael 56 #line 1312 "ircd_parser.y"
3322 db 136 {
3323 adx 30 if (ypass == 2)
3324     {
3325     if (yylval.number)
3326     yy_aconf->port |= OPER_FLAG_N;
3327     else
3328     yy_aconf->port &= ~OPER_FLAG_N;
3329     }
3330     }
3331 db 136 break;
3332     case 183:
3333 michael 56 #line 1323 "ircd_parser.y"
3334 db 136 {
3335 adx 30 if (ypass == 2)
3336     {
3337     if (yylval.number)
3338     yy_aconf->port |= OPER_FLAG_DIE;
3339     else
3340     yy_aconf->port &= ~OPER_FLAG_DIE;
3341     }
3342     }
3343 db 136 break;
3344     case 184:
3345 michael 56 #line 1334 "ircd_parser.y"
3346 db 136 {
3347 adx 30 if (ypass == 2)
3348     {
3349     if (yylval.number)
3350     yy_aconf->port |= OPER_FLAG_REHASH;
3351     else
3352     yy_aconf->port &= ~OPER_FLAG_REHASH;
3353     }
3354     }
3355 db 136 break;
3356     case 185:
3357 michael 56 #line 1345 "ircd_parser.y"
3358 db 136 {
3359 adx 30 if (ypass == 2)
3360     {
3361     if (yylval.number)
3362     yy_aconf->port |= OPER_FLAG_ADMIN;
3363     else
3364     yy_aconf->port &= ~OPER_FLAG_ADMIN;
3365     }
3366     }
3367 db 136 break;
3368     case 186:
3369 michael 56 #line 1356 "ircd_parser.y"
3370 db 136 {
3371 adx 30 if (ypass == 2)
3372     {
3373     if (yylval.number)
3374     yy_aconf->port |= OPER_FLAG_HIDDEN_ADMIN;
3375     else
3376     yy_aconf->port &= ~OPER_FLAG_HIDDEN_ADMIN;
3377     }
3378     }
3379 db 136 break;
3380     case 187:
3381 michael 56 #line 1367 "ircd_parser.y"
3382 db 136 {
3383 adx 30 if (ypass == 2)
3384     {
3385     if (yylval.number)
3386     yy_aconf->port |= OPER_FLAG_HIDDEN_OPER;
3387     else
3388     yy_aconf->port &= ~OPER_FLAG_HIDDEN_OPER;
3389     }
3390     }
3391 db 136 break;
3392     case 188:
3393 michael 56 #line 1378 "ircd_parser.y"
3394 db 136 {
3395 adx 30 if (ypass == 2)
3396     {
3397     if (yylval.number)
3398     yy_aconf->port |= OPER_FLAG_OPERWALL;
3399     else
3400     yy_aconf->port &= ~OPER_FLAG_OPERWALL;
3401     }
3402     }
3403 db 136 break;
3404     case 189:
3405 michael 56 #line 1389 "ircd_parser.y"
3406 db 136 {
3407 adx 30 }
3408 db 136 break;
3409     case 193:
3410 michael 56 #line 1393 "ircd_parser.y"
3411 db 136 { not_atom = 1; }
3412     break;
3413     case 195:
3414 michael 56 #line 1394 "ircd_parser.y"
3415 db 136 { not_atom = 0; }
3416     break;
3417     case 197:
3418 michael 56 #line 1397 "ircd_parser.y"
3419 db 136 {
3420 adx 30 if (ypass == 2)
3421     {
3422     if (not_atom)yy_aconf->port &= ~OPER_FLAG_GLOBAL_KILL;
3423     else yy_aconf->port |= OPER_FLAG_GLOBAL_KILL;
3424     }
3425     }
3426 db 136 break;
3427     case 198:
3428 michael 56 #line 1404 "ircd_parser.y"
3429 db 136 {
3430 adx 30 if (ypass == 2)
3431     {
3432     if (not_atom) yy_aconf->port &= ~OPER_FLAG_REMOTE;
3433     else yy_aconf->port |= OPER_FLAG_REMOTE;
3434     }
3435     }
3436 db 136 break;
3437     case 199:
3438 michael 56 #line 1411 "ircd_parser.y"
3439 db 136 {
3440 adx 30 if (ypass == 2)
3441     {
3442     if (not_atom) yy_aconf->port &= ~OPER_FLAG_K;
3443     else yy_aconf->port |= OPER_FLAG_K;
3444     }
3445     }
3446 db 136 break;
3447     case 200:
3448 michael 56 #line 1418 "ircd_parser.y"
3449 db 136 {
3450 adx 30 if (ypass == 2)
3451     {
3452     if (not_atom) yy_aconf->port &= ~OPER_FLAG_UNKLINE;
3453     else yy_aconf->port |= OPER_FLAG_UNKLINE;
3454     }
3455     }
3456 db 136 break;
3457     case 201:
3458 michael 56 #line 1425 "ircd_parser.y"
3459 db 136 {
3460 adx 30 if (ypass == 2)
3461     {
3462     if (not_atom) yy_aconf->port &= ~OPER_FLAG_X;
3463     else yy_aconf->port |= OPER_FLAG_X;
3464     }
3465     }
3466 db 136 break;
3467     case 202:
3468 michael 56 #line 1432 "ircd_parser.y"
3469 db 136 {
3470 adx 30 if (ypass == 2)
3471     {
3472     if (not_atom) yy_aconf->port &= ~OPER_FLAG_GLINE;
3473     else yy_aconf->port |= OPER_FLAG_GLINE;
3474     }
3475     }
3476 db 136 break;
3477     case 203:
3478 michael 56 #line 1439 "ircd_parser.y"
3479 db 136 {
3480 adx 30 if (ypass == 2)
3481     {
3482     if (not_atom) yy_aconf->port &= ~OPER_FLAG_DIE;
3483     else yy_aconf->port |= OPER_FLAG_DIE;
3484     }
3485     }
3486 db 136 break;
3487     case 204:
3488 michael 56 #line 1446 "ircd_parser.y"
3489 db 136 {
3490 adx 30 if (ypass == 2)
3491     {
3492     if (not_atom) yy_aconf->port &= ~OPER_FLAG_REHASH;
3493     else yy_aconf->port |= OPER_FLAG_REHASH;
3494     }
3495     }
3496 db 136 break;
3497     case 205:
3498 michael 56 #line 1453 "ircd_parser.y"
3499 db 136 {
3500 adx 30 if (ypass == 2)
3501     {
3502     if (not_atom) yy_aconf->port &= ~OPER_FLAG_ADMIN;
3503     else yy_aconf->port |= OPER_FLAG_ADMIN;
3504     }
3505     }
3506 db 136 break;
3507     case 206:
3508 michael 56 #line 1460 "ircd_parser.y"
3509 db 136 {
3510 adx 30 if (ypass == 2)
3511     {
3512     if (not_atom) yy_aconf->port &= ~OPER_FLAG_HIDDEN_ADMIN;
3513     else yy_aconf->port |= OPER_FLAG_HIDDEN_ADMIN;
3514     }
3515     }
3516 db 136 break;
3517     case 207:
3518 michael 56 #line 1467 "ircd_parser.y"
3519 db 136 {
3520 adx 30 if (ypass == 2)
3521     {
3522     if (not_atom) yy_aconf->port &= ~OPER_FLAG_N;
3523     else yy_aconf->port |= OPER_FLAG_N;
3524     }
3525     }
3526 db 136 break;
3527     case 208:
3528 michael 56 #line 1474 "ircd_parser.y"
3529 db 136 {
3530 adx 30 if (ypass == 2)
3531     {
3532     if (not_atom) yy_aconf->port &= ~OPER_FLAG_OPERWALL;
3533     else yy_aconf->port |= OPER_FLAG_OPERWALL;
3534     }
3535     }
3536 db 136 break;
3537     case 209:
3538 michael 56 #line 1481 "ircd_parser.y"
3539 db 136 {
3540 adx 30 if (ypass == 2)
3541     {
3542     if (not_atom) yy_aconf->port &= ~OPER_FLAG_OPER_SPY;
3543     else yy_aconf->port |= OPER_FLAG_OPER_SPY;
3544     }
3545     }
3546 db 136 break;
3547     case 210:
3548 michael 56 #line 1488 "ircd_parser.y"
3549 db 136 {
3550 adx 30 if (ypass == 2)
3551     {
3552     if (not_atom) yy_aconf->port &= ~OPER_FLAG_HIDDEN_OPER;
3553     else yy_aconf->port |= OPER_FLAG_HIDDEN_OPER;
3554     }
3555     }
3556 db 136 break;
3557     case 211:
3558 michael 56 #line 1495 "ircd_parser.y"
3559 db 136 {
3560 adx 30 if (ypass == 2)
3561     {
3562     if (not_atom) yy_aconf->port &= ~OPER_FLAG_REMOTEBAN;
3563     else yy_aconf->port |= OPER_FLAG_REMOTEBAN;
3564     }
3565     }
3566 db 136 break;
3567     case 212:
3568 michael 56 #line 1502 "ircd_parser.y"
3569 db 136 {
3570 adx 30 if (ypass == 2)
3571     {
3572     if (not_atom) ClearConfEncrypted(yy_aconf);
3573     else SetConfEncrypted(yy_aconf);
3574     }
3575     }
3576 db 136 break;
3577     case 213:
3578 michael 56 #line 1515 "ircd_parser.y"
3579 db 136 {
3580 adx 30 if (ypass == 1)
3581     {
3582     yy_conf = make_conf_item(CLASS_TYPE);
3583     yy_class = (struct ClassItem *)map_to_conf(yy_conf);
3584     }
3585     }
3586 db 136 break;
3587     case 214:
3588 michael 56 #line 1522 "ircd_parser.y"
3589 db 136 {
3590 adx 30 if (ypass == 1)
3591     {
3592     struct ConfItem *cconf;
3593     struct ClassItem *class = NULL;
3594    
3595     if (yy_class_name == NULL)
3596     {
3597     delete_conf_item(yy_conf);
3598     }
3599     else
3600     {
3601     cconf = find_exact_name_conf(CLASS_TYPE, yy_class_name, NULL, NULL);
3602    
3603     if (cconf != NULL) /* The class existed already */
3604     {
3605     rebuild_cidr_class(cconf, yy_class);
3606     class = (struct ClassItem *) map_to_conf(cconf);
3607     *class = *yy_class;
3608     delete_conf_item(yy_conf);
3609    
3610     MyFree(cconf->name); /* Allows case change of class name */
3611     cconf->name = yy_class_name;
3612     }
3613     else /* Brand new class */
3614     {
3615     MyFree(yy_conf->name); /* just in case it was allocated */
3616     yy_conf->name = yy_class_name;
3617     }
3618     }
3619     yy_class_name = NULL;
3620     }
3621     }
3622 db 136 break;
3623     case 233:
3624 michael 56 #line 1574 "ircd_parser.y"
3625 db 136 {
3626 adx 30 if (ypass == 1)
3627     {
3628     MyFree(yy_class_name);
3629     DupString(yy_class_name, yylval.string);
3630     }
3631     }
3632 db 136 break;
3633     case 234:
3634 michael 56 #line 1583 "ircd_parser.y"
3635 db 136 {
3636 adx 30 if (ypass == 1)
3637     {
3638     MyFree(yy_class_name);
3639     DupString(yy_class_name, yylval.string);
3640     }
3641     }
3642 db 136 break;
3643     case 235:
3644 michael 56 #line 1592 "ircd_parser.y"
3645 db 136 {
3646 adx 30 if (ypass == 1)
3647 db 136 PingFreq(yy_class) = yyvsp[-1].number;
3648 adx 30 }
3649 db 136 break;
3650     case 236:
3651 michael 56 #line 1598 "ircd_parser.y"
3652 db 136 {
3653 adx 30 if (ypass == 1)
3654 db 136 PingWarning(yy_class) = yyvsp[-1].number;
3655 adx 30 }
3656 db 136 break;
3657     case 237:
3658 michael 56 #line 1604 "ircd_parser.y"
3659 db 136 {
3660 adx 30 if (ypass == 1)
3661 db 136 MaxPerIp(yy_class) = yyvsp[-1].number;
3662 adx 30 }
3663 db 136 break;
3664     case 238:
3665 michael 56 #line 1610 "ircd_parser.y"
3666 db 136 {
3667 adx 30 if (ypass == 1)
3668 db 136 ConFreq(yy_class) = yyvsp[-1].number;
3669 adx 30 }
3670 db 136 break;
3671     case 239:
3672 michael 56 #line 1616 "ircd_parser.y"
3673 db 136 {
3674 adx 30 if (ypass == 1)
3675 db 136 MaxTotal(yy_class) = yyvsp[-1].number;
3676 adx 30 }
3677 db 136 break;
3678     case 240:
3679 michael 56 #line 1622 "ircd_parser.y"
3680 db 136 {
3681 adx 30 if (ypass == 1)
3682 db 136 MaxGlobal(yy_class) = yyvsp[-1].number;
3683 adx 30 }
3684 db 136 break;
3685     case 241:
3686 michael 56 #line 1628 "ircd_parser.y"
3687 db 136 {
3688 adx 30 if (ypass == 1)
3689 db 136 MaxLocal(yy_class) = yyvsp[-1].number;
3690 adx 30 }
3691 db 136 break;
3692     case 242:
3693 michael 56 #line 1634 "ircd_parser.y"
3694 db 136 {
3695 adx 30 if (ypass == 1)
3696 db 136 MaxIdent(yy_class) = yyvsp[-1].number;
3697 adx 30 }
3698 db 136 break;
3699     case 243:
3700 michael 56 #line 1640 "ircd_parser.y"
3701 db 136 {
3702 adx 30 if (ypass == 1)
3703 db 136 MaxSendq(yy_class) = yyvsp[-1].number;
3704 adx 30 }
3705 db 136 break;
3706     case 244:
3707 michael 56 #line 1646 "ircd_parser.y"
3708 db 136 {
3709 adx 30 if (ypass == 1)
3710 db 136 CidrBitlenIPV4(yy_class) = yyvsp[-1].number;
3711 adx 30 }
3712 db 136 break;
3713     case 245:
3714 michael 56 #line 1652 "ircd_parser.y"
3715 db 136 {
3716 adx 30 if (ypass == 1)
3717 db 136 CidrBitlenIPV6(yy_class) = yyvsp[-1].number;
3718 adx 30 }
3719 db 136 break;
3720     case 246:
3721 michael 56 #line 1658 "ircd_parser.y"
3722 db 136 {
3723 adx 30 if (ypass == 1)
3724 db 136 NumberPerCidr(yy_class) = yyvsp[-1].number;
3725 adx 30 }
3726 db 136 break;
3727     case 247:
3728 michael 56 #line 1667 "ircd_parser.y"
3729 db 136 {
3730 adx 30 if (ypass == 2)
3731     {
3732     listener_address = NULL;
3733     listener_flags = 0;
3734     }
3735     }
3736 db 136 break;
3737     case 248:
3738 michael 56 #line 1674 "ircd_parser.y"
3739 db 136 {
3740 adx 30 if (ypass == 2)
3741     {
3742     MyFree(listener_address);
3743     listener_address = NULL;
3744     }
3745     }
3746 db 136 break;
3747     case 249:
3748 michael 56 #line 1683 "ircd_parser.y"
3749 db 136 {
3750 adx 30 }
3751 db 136 break;
3752     case 253:
3753 michael 56 #line 1688 "ircd_parser.y"
3754 db 136 {
3755 adx 30 if (ypass == 2)
3756     listener_flags |= LISTENER_SSL;
3757     }
3758 db 136 break;
3759     case 254:
3760 michael 56 #line 1692 "ircd_parser.y"
3761 db 136 {
3762 adx 30 if (ypass == 2)
3763     listener_flags |= LISTENER_HIDDEN;
3764     }
3765 db 136 break;
3766     case 265:
3767 michael 56 #line 1705 "ircd_parser.y"
3768 db 136 {
3769 adx 30 if (ypass == 2)
3770     {
3771     if ((listener_flags & LISTENER_SSL))
3772     #ifdef HAVE_LIBCRYPTO
3773     if (!ServerInfo.ctx)
3774     #endif
3775     {
3776     yyerror("SSL not available - port closed");
3777     break;
3778     }
3779 db 136 add_listener(yyvsp[0].number, listener_address, listener_flags);
3780 adx 30 listener_flags = 0;
3781     }
3782     }
3783 db 136 break;
3784     case 266:
3785 michael 56 #line 1720 "ircd_parser.y"
3786 db 136 {
3787 adx 30 if (ypass == 2)
3788     {
3789     int i;
3790    
3791     if ((listener_flags & LISTENER_SSL))
3792     #ifdef HAVE_LIBCRYPTO
3793     if (!ServerInfo.ctx)
3794     #endif
3795     {
3796     yyerror("SSL not available - port closed");
3797     break;
3798     }
3799    
3800 db 136 for (i = yyvsp[-2].number; i <= yyvsp[0].number; ++i)
3801 adx 30 add_listener(i, listener_address, listener_flags);
3802    
3803     listener_flags = 0;
3804     }
3805     }
3806 db 136 break;
3807     case 267:
3808 michael 56 #line 1742 "ircd_parser.y"
3809 db 136 {
3810 adx 30 if (ypass == 2)
3811     {
3812     MyFree(listener_address);
3813     DupString(listener_address, yylval.string);
3814     }
3815     }
3816 db 136 break;
3817     case 268:
3818 michael 56 #line 1751 "ircd_parser.y"
3819 db 136 {
3820 adx 30 if (ypass == 2)
3821     {
3822     MyFree(listener_address);
3823     DupString(listener_address, yylval.string);
3824     }
3825     }
3826 db 136 break;
3827     case 269:
3828 michael 56 #line 1763 "ircd_parser.y"
3829 db 136 {
3830 adx 30 if (ypass == 2)
3831     {
3832     yy_conf = make_conf_item(CLIENT_TYPE);
3833     yy_aconf = map_to_conf(yy_conf);
3834     }
3835     else
3836     {
3837     MyFree(class_name);
3838     class_name = NULL;
3839     }
3840     }
3841 db 136 break;
3842     case 270:
3843 michael 56 #line 1775 "ircd_parser.y"
3844 db 136 {
3845 adx 30 if (ypass == 2)
3846     {
3847     struct CollectItem *yy_tmp = NULL;
3848     dlink_node *ptr = NULL, *next_ptr = NULL;
3849    
3850     if (yy_aconf->user && yy_aconf->host)
3851     {
3852     conf_add_class_to_conf(yy_conf, class_name);
3853     add_conf_by_address(CONF_CLIENT, yy_aconf);
3854     }
3855     else
3856     delete_conf_item(yy_conf);
3857    
3858     /* copy over settings from first struct */
3859     DLINK_FOREACH_SAFE(ptr, next_ptr, col_conf_list.head)
3860     {
3861     struct AccessItem *new_aconf;
3862     struct ConfItem *new_conf;
3863    
3864     new_conf = make_conf_item(CLIENT_TYPE);
3865     new_aconf = map_to_conf(new_conf);
3866    
3867     yy_tmp = ptr->data;
3868    
3869     assert(yy_tmp->user && yy_tmp->host);
3870    
3871     if (yy_aconf->passwd != NULL)
3872     DupString(new_aconf->passwd, yy_aconf->passwd);
3873     if (yy_conf->name != NULL)
3874     DupString(new_conf->name, yy_conf->name);
3875     if (yy_aconf->passwd != NULL)
3876     DupString(new_aconf->passwd, yy_aconf->passwd);
3877    
3878     new_aconf->flags = yy_aconf->flags;
3879     new_aconf->port = yy_aconf->port;
3880    
3881     DupString(new_aconf->user, yy_tmp->user);
3882     collapse(new_aconf->user);
3883    
3884     DupString(new_aconf->host, yy_tmp->host);
3885     collapse(new_aconf->host);
3886    
3887     conf_add_class_to_conf(new_conf, class_name);
3888     add_conf_by_address(CONF_CLIENT, new_aconf);
3889     dlinkDelete(&yy_tmp->node, &col_conf_list);
3890     free_collect_item(yy_tmp);
3891     }
3892    
3893     MyFree(class_name);
3894     class_name = NULL;
3895     yy_conf = NULL;
3896     yy_aconf = NULL;
3897     }
3898     }
3899 db 136 break;
3900     case 290:
3901 michael 56 #line 1840 "ircd_parser.y"
3902 db 136 {
3903 adx 30 if (ypass == 2)
3904     {
3905     struct CollectItem *yy_tmp;
3906    
3907     if (yy_aconf->user == NULL)
3908     split_nuh(yylval.string, NULL, &yy_aconf->user, &yy_aconf->host);
3909     else
3910     {
3911     yy_tmp = MyMalloc(sizeof(struct CollectItem));
3912     split_nuh(yylval.string, NULL, &yy_tmp->user, &yy_tmp->host);
3913     dlinkAdd(yy_tmp, &yy_tmp->node, &col_conf_list);
3914     }
3915     }
3916     }
3917 db 136 break;
3918     case 291:
3919 michael 56 #line 1859 "ircd_parser.y"
3920 db 136 {
3921 adx 30 if (ypass == 2)
3922     {
3923     /* be paranoid */
3924     if (yy_aconf->passwd != NULL)
3925     memset(yy_aconf->passwd, 0, strlen(yy_aconf->passwd));
3926    
3927     MyFree(yy_aconf->passwd);
3928     DupString(yy_aconf->passwd, yylval.string);
3929     }
3930     }
3931 db 136 break;
3932     case 292:
3933 michael 56 #line 1872 "ircd_parser.y"
3934 db 136 {
3935 adx 30 if (ypass == 2)
3936     {
3937     if (yylval.number)
3938     yy_aconf->flags |= CONF_FLAGS_SPOOF_NOTICE;
3939     else
3940     yy_aconf->flags &= ~CONF_FLAGS_SPOOF_NOTICE;
3941     }
3942     }
3943 db 136 break;
3944     case 293:
3945 michael 56 #line 1883 "ircd_parser.y"
3946 db 136 {
3947 adx 30 if (ypass == 2)
3948     {
3949     MyFree(class_name);
3950     DupString(class_name, yylval.string);
3951     }
3952     }
3953 db 136 break;
3954     case 294:
3955 michael 56 #line 1892 "ircd_parser.y"
3956 db 136 {
3957 adx 30 if (ypass == 2)
3958     {
3959     if (yylval.number)
3960     SetConfEncrypted(yy_aconf);
3961     else
3962     ClearConfEncrypted(yy_aconf);
3963     }
3964     }
3965 db 136 break;
3966     case 295:
3967 michael 56 #line 1903 "ircd_parser.y"
3968 db 136 {
3969 adx 30 }
3970 db 136 break;
3971     case 299:
3972 michael 56 #line 1907 "ircd_parser.y"
3973 db 136 { not_atom = 1; }
3974     break;
3975     case 301:
3976 michael 56 #line 1908 "ircd_parser.y"
3977 db 136 { not_atom = 0; }
3978     break;
3979     case 303:
3980 michael 56 #line 1911 "ircd_parser.y"
3981 db 136 {
3982 adx 30 if (ypass == 2)
3983     {
3984     if (not_atom) yy_aconf->flags &= ~CONF_FLAGS_SPOOF_NOTICE;
3985     else yy_aconf->flags |= CONF_FLAGS_SPOOF_NOTICE;
3986     }
3987    
3988     }
3989 db 136 break;
3990     case 304:
3991 michael 56 #line 1919 "ircd_parser.y"
3992 db 136 {
3993 adx 30 if (ypass == 2)
3994     {
3995     if (not_atom) yy_aconf->flags &= ~CONF_FLAGS_NOLIMIT;
3996     else yy_aconf->flags |= CONF_FLAGS_NOLIMIT;
3997     }
3998     }
3999 db 136 break;
4000     case 305:
4001 michael 56 #line 1926 "ircd_parser.y"
4002 db 136 {
4003 adx 30 if (ypass == 2)
4004     {
4005     if (not_atom) yy_aconf->flags &= ~CONF_FLAGS_EXEMPTKLINE;
4006     else yy_aconf->flags |= CONF_FLAGS_EXEMPTKLINE;
4007     }
4008     }
4009 db 136 break;
4010     case 306:
4011 michael 56 #line 1933 "ircd_parser.y"
4012 db 136 {
4013 adx 30 if (ypass == 2)
4014     {
4015     if (not_atom) yy_aconf->flags &= ~CONF_FLAGS_NEED_IDENTD;
4016     else yy_aconf->flags |= CONF_FLAGS_NEED_IDENTD;
4017     }
4018     }
4019 db 136 break;
4020     case 307:
4021 michael 56 #line 1940 "ircd_parser.y"
4022 db 136 {
4023 adx 30 if (ypass == 2)
4024     {
4025     if (not_atom) yy_aconf->flags &= ~CONF_FLAGS_CAN_FLOOD;
4026     else yy_aconf->flags |= CONF_FLAGS_CAN_FLOOD;
4027     }
4028     }
4029 db 136 break;
4030     case 308:
4031 michael 56 #line 1947 "ircd_parser.y"
4032 db 136 {
4033 adx 30 if (ypass == 2)
4034     {
4035     if (not_atom) yy_aconf->flags &= ~CONF_FLAGS_IDLE_LINED;
4036     else yy_aconf->flags |= CONF_FLAGS_IDLE_LINED;
4037     }
4038     }
4039 db 136 break;
4040     case 309:
4041 michael 56 #line 1954 "ircd_parser.y"
4042 db 136 {
4043 adx 30 if (ypass == 2)
4044     {
4045     if (not_atom) yy_aconf->flags &= ~CONF_FLAGS_NO_TILDE;
4046     else yy_aconf->flags |= CONF_FLAGS_NO_TILDE;
4047     }
4048     }
4049 db 136 break;
4050     case 310:
4051 michael 56 #line 1961 "ircd_parser.y"
4052 db 136 {
4053 adx 30 if (ypass == 2)
4054     {
4055     if (not_atom) yy_aconf->flags &= ~CONF_FLAGS_EXEMPTGLINE;
4056     else yy_aconf->flags |= CONF_FLAGS_EXEMPTGLINE;
4057     }
4058     }
4059 db 136 break;
4060     case 311:
4061 michael 56 #line 1968 "ircd_parser.y"
4062 db 136 {
4063 adx 30 if (ypass == 2)
4064     {
4065     if (not_atom) yy_aconf->flags &= ~CONF_FLAGS_EXEMPTRESV;
4066     else yy_aconf->flags |= CONF_FLAGS_EXEMPTRESV;
4067     }
4068     }
4069 db 136 break;
4070     case 312:
4071 michael 56 #line 1975 "ircd_parser.y"
4072 db 136 {
4073 adx 30 if (ypass == 2)
4074     {
4075     if (not_atom) yy_aconf->flags &= ~CONF_FLAGS_NEED_PASSWORD;
4076     else yy_aconf->flags |= CONF_FLAGS_NEED_PASSWORD;
4077     }
4078     }
4079 db 136 break;
4080     case 313:
4081 michael 56 #line 1984 "ircd_parser.y"
4082 db 136 {
4083 adx 30 if (ypass == 2)
4084     {
4085     if (yylval.number)
4086     yy_aconf->flags |= CONF_FLAGS_EXEMPTKLINE;
4087     else
4088     yy_aconf->flags &= ~CONF_FLAGS_EXEMPTKLINE;
4089     }
4090     }
4091 db 136 break;
4092     case 314:
4093 michael 56 #line 1995 "ircd_parser.y"
4094 db 136 {
4095 adx 30 if (ypass == 2)
4096     {
4097     if (yylval.number)
4098     yy_aconf->flags |= CONF_FLAGS_NEED_IDENTD;
4099     else
4100     yy_aconf->flags &= ~CONF_FLAGS_NEED_IDENTD;
4101     }
4102     }
4103 db 136 break;
4104     case 315:
4105 michael 56 #line 2006 "ircd_parser.y"
4106 db 136 {
4107 adx 30 if (ypass == 2)
4108     {
4109     if (yylval.number)
4110     yy_aconf->flags |= CONF_FLAGS_NOLIMIT;
4111     else
4112     yy_aconf->flags &= ~CONF_FLAGS_NOLIMIT;
4113     }
4114     }
4115 db 136 break;
4116     case 316:
4117 michael 56 #line 2017 "ircd_parser.y"
4118 db 136 {
4119 adx 30 if (ypass == 2)
4120     {
4121     if (yylval.number)
4122     yy_aconf->flags |= CONF_FLAGS_CAN_FLOOD;
4123     else
4124     yy_aconf->flags &= ~CONF_FLAGS_CAN_FLOOD;
4125     }
4126     }
4127 db 136 break;
4128     case 317:
4129 michael 56 #line 2028 "ircd_parser.y"
4130 db 136 {
4131 adx 30 if (ypass == 2)
4132     {
4133     if (yylval.number)
4134     yy_aconf->flags |= CONF_FLAGS_NO_TILDE;
4135     else
4136     yy_aconf->flags &= ~CONF_FLAGS_NO_TILDE;
4137     }
4138     }
4139 db 136 break;
4140     case 318:
4141 michael 56 #line 2039 "ircd_parser.y"
4142 db 136 {
4143 adx 30 if (ypass == 2)
4144     {
4145     if (yylval.number)
4146     yy_aconf->flags |= CONF_FLAGS_EXEMPTGLINE;
4147     else
4148     yy_aconf->flags &= ~CONF_FLAGS_EXEMPTGLINE;
4149     }
4150     }
4151 db 136 break;
4152     case 319:
4153 michael 56 #line 2051 "ircd_parser.y"
4154 db 136 {
4155 adx 30 if (ypass == 2)
4156     {
4157     MyFree(yy_conf->name);
4158    
4159     if (strlen(yylval.string) < HOSTLEN)
4160     {
4161     DupString(yy_conf->name, yylval.string);
4162     yy_aconf->flags |= CONF_FLAGS_SPOOF_IP;
4163     }
4164     else
4165     {
4166     ilog(L_ERROR, "Spoofs must be less than %d..ignoring it", HOSTLEN);
4167     yy_conf->name = NULL;
4168     }
4169     }
4170     }
4171 db 136 break;
4172     case 320:
4173 michael 56 #line 2070 "ircd_parser.y"
4174 db 136 {
4175 adx 30 if (ypass == 2)
4176     {
4177     yy_aconf->flags |= CONF_FLAGS_REDIR;
4178     MyFree(yy_conf->name);
4179     DupString(yy_conf->name, yylval.string);
4180     }
4181     }
4182 db 136 break;
4183     case 321:
4184 michael 56 #line 2080 "ircd_parser.y"
4185 db 136 {
4186 adx 30 if (ypass == 2)
4187     {
4188     yy_aconf->flags |= CONF_FLAGS_REDIR;
4189 db 136 yy_aconf->port = yyvsp[-1].number;
4190 adx 30 }
4191     }
4192 db 136 break;
4193     case 322:
4194 michael 56 #line 2089 "ircd_parser.y"
4195 db 136 {
4196 adx 30 if (ypass == 2)
4197     {
4198     if (yylval.number)
4199     yy_aconf->flags |= CONF_FLAGS_NEED_PASSWORD;
4200     else
4201     yy_aconf->flags &= ~CONF_FLAGS_NEED_PASSWORD;
4202     }
4203     }
4204 db 136 break;
4205     case 323:
4206 michael 56 #line 2104 "ircd_parser.y"
4207 db 136 {
4208 adx 30 if (ypass == 2)
4209     {
4210     MyFree(resv_reason);
4211     resv_reason = NULL;
4212     }
4213     }
4214 db 136 break;
4215     case 324:
4216 michael 56 #line 2111 "ircd_parser.y"
4217 db 136 {
4218 adx 30 if (ypass == 2)
4219     {
4220     MyFree(resv_reason);
4221     resv_reason = NULL;
4222     }
4223     }
4224 db 136 break;
4225     case 331:
4226 michael 56 #line 2123 "ircd_parser.y"
4227 db 136 {
4228 adx 30 if (ypass == 2)
4229     {
4230     MyFree(resv_reason);
4231     DupString(resv_reason, yylval.string);
4232     }
4233     }
4234 db 136 break;
4235     case 332:
4236 michael 56 #line 2132 "ircd_parser.y"
4237 db 136 {
4238 adx 30 if (ypass == 2)
4239     {
4240     if (IsChanPrefix(*yylval.string))
4241     {
4242     char def_reason[] = "No reason";
4243    
4244     create_channel_resv(yylval.string, resv_reason != NULL ? resv_reason : def_reason, 1);
4245     }
4246     }
4247     /* ignore it for now.. but we really should make a warning if
4248     * its an erroneous name --fl_ */
4249     }
4250 db 136 break;
4251     case 333:
4252 michael 56 #line 2147 "ircd_parser.y"
4253 db 136 {
4254 adx 30 if (ypass == 2)
4255     {
4256     char def_reason[] = "No reason";
4257    
4258     create_nick_resv(yylval.string, resv_reason != NULL ? resv_reason : def_reason, 1);
4259     }
4260     }
4261 db 136 break;
4262     case 334:
4263 michael 56 #line 2160 "ircd_parser.y"
4264 db 136 {
4265 adx 30 if (ypass == 2)
4266     {
4267     yy_conf = make_conf_item(ULINE_TYPE);
4268     yy_match_item = map_to_conf(yy_conf);
4269     yy_match_item->action = SHARED_ALL;
4270     }
4271     }
4272 db 136 break;
4273     case 335:
4274 michael 56 #line 2168 "ircd_parser.y"
4275 db 136 {
4276 adx 30 if (ypass == 2)
4277     {
4278     yy_conf = NULL;
4279     }
4280     }
4281 db 136 break;
4282     case 342:
4283 michael 56 #line 2179 "ircd_parser.y"
4284 db 136 {
4285 adx 30 if (ypass == 2)
4286     {
4287     MyFree(yy_conf->name);
4288     DupString(yy_conf->name, yylval.string);
4289     }
4290     }
4291 db 136 break;
4292     case 343:
4293 michael 56 #line 2188 "ircd_parser.y"
4294 db 136 {
4295 adx 30 if (ypass == 2)
4296     {
4297     split_nuh(yylval.string, NULL, &yy_match_item->user, &yy_match_item->host);
4298     }
4299     }
4300 db 136 break;
4301     case 344:
4302 michael 56 #line 2196 "ircd_parser.y"
4303 db 136 {
4304 adx 30 if (ypass == 2)
4305     yy_match_item->action = 0;
4306     }
4307 db 136 break;
4308     case 348:
4309 michael 56 #line 2203 "ircd_parser.y"
4310 db 136 {
4311 adx 30 if (ypass == 2)
4312     yy_match_item->action |= SHARED_KLINE;
4313     }
4314 db 136 break;
4315     case 349:
4316 michael 56 #line 2207 "ircd_parser.y"
4317 db 136 {
4318 adx 30 if (ypass == 2)
4319     yy_match_item->action |= SHARED_TKLINE;
4320     }
4321 db 136 break;
4322     case 350:
4323 michael 56 #line 2211 "ircd_parser.y"
4324 db 136 {
4325 adx 30 if (ypass == 2)
4326     yy_match_item->action |= SHARED_UNKLINE;
4327     }
4328 db 136 break;
4329     case 351:
4330 michael 56 #line 2215 "ircd_parser.y"
4331 db 136 {
4332 adx 30 if (ypass == 2)
4333     yy_match_item->action |= SHARED_XLINE;
4334     }
4335 db 136 break;
4336     case 352:
4337 michael 56 #line 2219 "ircd_parser.y"
4338 db 136 {
4339 adx 30 if (ypass == 2)
4340     yy_match_item->action |= SHARED_TXLINE;
4341     }
4342 db 136 break;
4343     case 353:
4344 michael 56 #line 2223 "ircd_parser.y"
4345 db 136 {
4346 adx 30 if (ypass == 2)
4347     yy_match_item->action |= SHARED_UNXLINE;
4348     }
4349 db 136 break;
4350     case 354:
4351 michael 56 #line 2227 "ircd_parser.y"
4352 db 136 {
4353 adx 30 if (ypass == 2)
4354     yy_match_item->action |= SHARED_RESV;
4355     }
4356 db 136 break;
4357     case 355:
4358 michael 56 #line 2231 "ircd_parser.y"
4359 db 136 {
4360 adx 30 if (ypass == 2)
4361     yy_match_item->action |= SHARED_TRESV;
4362     }
4363 db 136 break;
4364     case 356:
4365 michael 56 #line 2235 "ircd_parser.y"
4366 db 136 {
4367 adx 30 if (ypass == 2)
4368     yy_match_item->action |= SHARED_UNRESV;
4369     }
4370 db 136 break;
4371     case 357:
4372 michael 56 #line 2239 "ircd_parser.y"
4373 db 136 {
4374 adx 30 if (ypass == 2)
4375     yy_match_item->action |= SHARED_LOCOPS;
4376     }
4377 db 136 break;
4378     case 358:
4379 michael 56 #line 2243 "ircd_parser.y"
4380 db 136 {
4381 adx 30 if (ypass == 2)
4382     yy_match_item->action = SHARED_ALL;
4383     }
4384 db 136 break;
4385     case 359:
4386 michael 56 #line 2252 "ircd_parser.y"
4387 db 136 {
4388 adx 30 if (ypass == 2)
4389     {
4390     yy_conf = make_conf_item(CLUSTER_TYPE);
4391     yy_conf->flags = SHARED_ALL;
4392     }
4393     }
4394 db 136 break;
4395     case 360:
4396 michael 56 #line 2259 "ircd_parser.y"
4397 db 136 {
4398 adx 30 if (ypass == 2)
4399     {
4400     if (yy_conf->name == NULL)
4401     DupString(yy_conf->name, "*");
4402     yy_conf = NULL;
4403     }
4404     }
4405 db 136 break;
4406     case 366:
4407 michael 56 #line 2272 "ircd_parser.y"
4408 db 136 {
4409 adx 30 if (ypass == 2)
4410     DupString(yy_conf->name, yylval.string);
4411     }
4412 db 136 break;
4413     case 367:
4414 michael 56 #line 2278 "ircd_parser.y"
4415 db 136 {
4416 adx 30 if (ypass == 2)
4417     yy_conf->flags = 0;
4418     }
4419 db 136 break;
4420     case 371:
4421 michael 56 #line 2285 "ircd_parser.y"
4422 db 136 {
4423 adx 30 if (ypass == 2)
4424     yy_conf->flags |= SHARED_KLINE;
4425     }
4426 db 136 break;
4427     case 372:
4428 michael 56 #line 2289 "ircd_parser.y"
4429 db 136 {
4430 adx 30 if (ypass == 2)
4431     yy_conf->flags |= SHARED_TKLINE;
4432     }
4433 db 136 break;
4434     case 373:
4435 michael 56 #line 2293 "ircd_parser.y"
4436 db 136 {
4437 adx 30 if (ypass == 2)
4438     yy_conf->flags |= SHARED_UNKLINE;
4439     }
4440 db 136 break;
4441     case 374:
4442 michael 56 #line 2297 "ircd_parser.y"
4443 db 136 {
4444 adx 30 if (ypass == 2)
4445     yy_conf->flags |= SHARED_XLINE;
4446     }
4447 db 136 break;
4448     case 375:
4449 michael 56 #line 2301 "ircd_parser.y"
4450 db 136 {
4451 adx 30 if (ypass == 2)
4452     yy_conf->flags |= SHARED_TXLINE;
4453     }
4454 db 136 break;
4455     case 376:
4456 michael 56 #line 2305 "ircd_parser.y"
4457 db 136 {
4458 adx 30 if (ypass == 2)
4459     yy_conf->flags |= SHARED_UNXLINE;
4460     }
4461 db 136 break;
4462     case 377:
4463 michael 56 #line 2309 "ircd_parser.y"
4464 db 136 {
4465 adx 30 if (ypass == 2)
4466     yy_conf->flags |= SHARED_RESV;
4467     }
4468 db 136 break;
4469     case 378:
4470 michael 56 #line 2313 "ircd_parser.y"
4471 db 136 {
4472 adx 30 if (ypass == 2)
4473     yy_conf->flags |= SHARED_TRESV;
4474     }
4475 db 136 break;
4476     case 379:
4477 michael 56 #line 2317 "ircd_parser.y"
4478 db 136 {
4479 adx 30 if (ypass == 2)
4480     yy_conf->flags |= SHARED_UNRESV;
4481     }
4482 db 136 break;
4483     case 380:
4484 michael 56 #line 2321 "ircd_parser.y"
4485 db 136 {
4486 adx 30 if (ypass == 2)
4487     yy_conf->flags |= SHARED_LOCOPS;
4488     }
4489 db 136 break;
4490     case 381:
4491 michael 56 #line 2325 "ircd_parser.y"
4492 db 136 {
4493 adx 30 if (ypass == 2)
4494     yy_conf->flags = SHARED_ALL;
4495     }
4496 db 136 break;
4497     case 382:
4498 michael 56 #line 2334 "ircd_parser.y"
4499 db 136 {
4500 adx 30 if (ypass == 2)
4501     {
4502     yy_conf = make_conf_item(SERVER_TYPE);
4503     yy_aconf = (struct AccessItem *)map_to_conf(yy_conf);
4504     yy_aconf->passwd = NULL;
4505     /* defaults */
4506     yy_aconf->port = PORTNUM;
4507    
4508     if (ConfigFileEntry.burst_away)
4509     yy_aconf->flags = CONF_FLAGS_BURST_AWAY;
4510     }
4511     else
4512     {
4513     MyFree(class_name);
4514     class_name = NULL;
4515     }
4516     }
4517 db 136 break;
4518     case 383:
4519 michael 56 #line 2352 "ircd_parser.y"
4520 db 136 {
4521 adx 30 if (ypass == 2)
4522     {
4523     struct CollectItem *yy_hconf=NULL;
4524     struct CollectItem *yy_lconf=NULL;
4525     dlink_node *ptr;
4526     dlink_node *next_ptr;
4527     #ifdef HAVE_LIBCRYPTO
4528     if (yy_aconf->host &&
4529     ((yy_aconf->passwd && yy_aconf->spasswd) ||
4530     (yy_aconf->rsa_public_key && IsConfCryptLink(yy_aconf))))
4531     #else /* !HAVE_LIBCRYPTO */
4532     if (yy_aconf->host && !IsConfCryptLink(yy_aconf) &&
4533     yy_aconf->passwd && yy_aconf->spasswd)
4534     #endif /* !HAVE_LIBCRYPTO */
4535     {
4536     if (conf_add_server(yy_conf, scount, class_name) >= 0)
4537     {
4538     ++scount;
4539     }
4540     else
4541     {
4542     delete_conf_item(yy_conf);
4543     yy_conf = NULL;
4544     yy_aconf = NULL;
4545     }
4546     }
4547     else
4548     {
4549     /* Even if yy_conf ->name is NULL
4550     * should still unhook any hub/leaf confs still pending
4551     */
4552     unhook_hub_leaf_confs();
4553    
4554     if (yy_conf->name != NULL)
4555     {
4556     #ifndef HAVE_LIBCRYPTO
4557     if (IsConfCryptLink(yy_aconf))
4558     yyerror("Ignoring connect block -- no OpenSSL support");
4559     #else
4560     if (IsConfCryptLink(yy_aconf) && !yy_aconf->rsa_public_key)
4561     yyerror("Ignoring connect block -- missing key");
4562     #endif
4563     if (yy_aconf->host == NULL)
4564     yyerror("Ignoring connect block -- missing host");
4565     else if (!IsConfCryptLink(yy_aconf) &&
4566     (!yy_aconf->passwd || !yy_aconf->spasswd))
4567     yyerror("Ignoring connect block -- missing password");
4568     }
4569    
4570    
4571     /* XXX
4572     * This fixes a try_connections() core (caused by invalid class_ptr
4573     * pointers) reported by metalrock. That's an ugly fix, but there
4574     * is currently no better way. The entire config subsystem needs an
4575     * rewrite ASAP. make_conf_item() shouldn't really add things onto
4576     * a doubly linked list immediately without any sanity checks! -Michael
4577     */
4578     delete_conf_item(yy_conf);
4579    
4580     yy_aconf = NULL;
4581     yy_conf = NULL;
4582     }
4583    
4584     /*
4585     * yy_conf is still pointing at the server that is having
4586     * a connect block built for it. This means, y_aconf->name
4587     * points to the actual irc name this server will be known as.
4588     * Now this new server has a set or even just one hub_mask (or leaf_mask)
4589     * given in the link list at yy_hconf. Fill in the HUB confs
4590     * from this link list now.
4591     */
4592     DLINK_FOREACH_SAFE(ptr, next_ptr, hub_conf_list.head)
4593     {
4594     struct ConfItem *new_hub_conf;
4595     struct MatchItem *match_item;
4596    
4597     yy_hconf = ptr->data;
4598    
4599     /* yy_conf == NULL is a fatal error for this connect block! */
4600     if ((yy_conf != NULL) && (yy_conf->name != NULL))
4601     {
4602     new_hub_conf = make_conf_item(HUB_TYPE);
4603     match_item = (struct MatchItem *)map_to_conf(new_hub_conf);
4604     DupString(new_hub_conf->name, yy_conf->name);
4605     if (yy_hconf->user != NULL)
4606     DupString(match_item->user, yy_hconf->user);
4607     else
4608     DupString(match_item->user, "*");
4609     if (yy_hconf->host != NULL)
4610     DupString(match_item->host, yy_hconf->host);
4611     else
4612     DupString(match_item->host, "*");
4613     }
4614     dlinkDelete(&yy_hconf->node, &hub_conf_list);
4615     free_collect_item(yy_hconf);
4616     }
4617    
4618     /* Ditto for the LEAF confs */
4619    
4620     DLINK_FOREACH_SAFE(ptr, next_ptr, leaf_conf_list.head)
4621     {
4622     struct ConfItem *new_leaf_conf;
4623     struct MatchItem *match_item;
4624    
4625     yy_lconf = ptr->data;
4626    
4627     if ((yy_conf != NULL) && (yy_conf->name != NULL))
4628     {
4629     new_leaf_conf = make_conf_item(LEAF_TYPE);
4630     match_item = (struct MatchItem *)map_to_conf(new_leaf_conf);
4631     DupString(new_leaf_conf->name, yy_conf->name);
4632     if (yy_lconf->user != NULL)
4633     DupString(match_item->user, yy_lconf->user);
4634     else
4635     DupString(match_item->user, "*");
4636     if (yy_lconf->host != NULL)
4637     DupString(match_item->host, yy_lconf->host);
4638     else
4639     DupString(match_item->host, "*");
4640     }
4641     dlinkDelete(&yy_lconf->node, &leaf_conf_list);
4642     free_collect_item(yy_lconf);
4643     }
4644     MyFree(class_name);
4645     class_name = NULL;
4646     yy_conf = NULL;
4647     yy_aconf = NULL;
4648     }
4649     }
4650 db 136 break;
4651     case 407:
4652 michael 56 #line 2495 "ircd_parser.y"
4653 db 136 {
4654 adx 30 if (ypass == 2)
4655     {
4656     if (yy_conf->name != NULL)
4657     yyerror("Multiple connect name entry");
4658    
4659     MyFree(yy_conf->name);
4660     DupString(yy_conf->name, yylval.string);
4661     }
4662     }
4663 db 136 break;
4664     case 408:
4665 michael 56 #line 2507 "ircd_parser.y"
4666 db 136 {
4667 adx 30 if (ypass == 2)
4668     {
4669     if (yy_conf->name != NULL)
4670     yyerror("Multiple connect name entry");
4671    
4672     MyFree(yy_conf->name);
4673     DupString(yy_conf->name, yylval.string);
4674     }
4675     }
4676 db 136 break;
4677     case 409:
4678 michael 56 #line 2519 "ircd_parser.y"
4679 db 136 {
4680 adx 30 if (ypass == 2)
4681     {
4682     MyFree(yy_aconf->host);
4683     DupString(yy_aconf->host, yylval.string);
4684     }
4685     }
4686 db 136 break;
4687     case 410:
4688 michael 56 #line 2528 "ircd_parser.y"
4689 db 136 {
4690 adx 30 if (ypass == 2)
4691     {
4692     struct addrinfo hints, *res;
4693    
4694     memset(&hints, 0, sizeof(hints));
4695    
4696     hints.ai_family = AF_UNSPEC;
4697     hints.ai_socktype = SOCK_STREAM;
4698     hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST;
4699    
4700     if (irc_getaddrinfo(yylval.string, NULL, &hints, &res))
4701     ilog(L_ERROR, "Invalid netmask for server vhost(%s)", yylval.string);
4702     else
4703     {
4704     assert(res != NULL);
4705    
4706     memcpy(&yy_aconf->my_ipnum, res->ai_addr, res->ai_addrlen);
4707     yy_aconf->my_ipnum.ss.ss_family = res->ai_family;
4708     yy_aconf->my_ipnum.ss_len = res->ai_addrlen;
4709     irc_freeaddrinfo(res);
4710     }
4711     }
4712     }
4713 db 136 break;
4714     case 411:
4715 michael 56 #line 2554 "ircd_parser.y"
4716 db 136 {
4717 adx 30 if (ypass == 2)
4718     {
4719 db 136 if (yyvsp[-1].string[0] == ':')
4720 adx 38 yyerror("Server passwords cannot begin with a colon");
4721 db 136 else if (strchr(yyvsp[-1].string, ' ') != NULL)
4722 adx 38 yyerror("Server passwords cannot contain spaces");
4723     else {
4724     if (yy_aconf->spasswd != NULL)
4725     memset(yy_aconf->spasswd, 0, strlen(yy_aconf->spasswd));
4726 adx 30
4727 adx 38 MyFree(yy_aconf->spasswd);
4728     DupString(yy_aconf->spasswd, yylval.string);
4729     }
4730 adx 30 }
4731     }
4732 db 136 break;
4733     case 412:
4734 michael 56 #line 2572 "ircd_parser.y"
4735 db 136 {
4736 adx 30 if (ypass == 2)
4737     {
4738 db 136 if (yyvsp[-1].string[0] == ':')
4739 adx 38 yyerror("Server passwords cannot begin with a colon");
4740 db 136 else if (strchr(yyvsp[-1].string, ' ') != NULL)
4741 adx 38 yyerror("Server passwords cannot contain spaces");
4742     else {
4743     if (yy_aconf->passwd != NULL)
4744     memset(yy_aconf->passwd, 0, strlen(yy_aconf->passwd));
4745 adx 30
4746 adx 38 MyFree(yy_aconf->passwd);
4747     DupString(yy_aconf->passwd, yylval.string);
4748     }
4749 adx 30 }
4750     }
4751 db 136 break;
4752     case 413:
4753 michael 56 #line 2590 "ircd_parser.y"
4754 db 136 {
4755 adx 30 if (ypass == 2)
4756 db 136 yy_aconf->port = yyvsp[-1].number;
4757 adx 30 }
4758 db 136 break;
4759     case 414:
4760 michael 56 #line 2596 "ircd_parser.y"
4761 db 136 {
4762 adx 30 if (ypass == 2)
4763     yy_aconf->aftype = AF_INET;
4764     }
4765 db 136 break;
4766     case 415:
4767 michael 56 #line 2600 "ircd_parser.y"
4768 db 136 {
4769 adx 30 #ifdef IPV6
4770     if (ypass == 2)
4771     yy_aconf->aftype = AF_INET6;
4772     #endif
4773     }
4774 db 136 break;
4775     case 416:
4776 michael 56 #line 2608 "ircd_parser.y"
4777 db 136 {
4778 adx 30 if (ypass == 2)
4779     {
4780     MyFree(yy_aconf->fakename);
4781     DupString(yy_aconf->fakename, yylval.string);
4782     }
4783     }
4784 db 136 break;
4785     case 417:
4786 michael 56 #line 2617 "ircd_parser.y"
4787 db 136 {
4788 adx 30 }
4789 db 136 break;
4790     case 421:
4791 michael 56 #line 2621 "ircd_parser.y"
4792 db 136 { not_atom = 1; }
4793     break;
4794     case 423:
4795 michael 56 #line 2622 "ircd_parser.y"
4796 db 136 { not_atom = 0; }
4797     break;
4798     case 425:
4799 michael 56 #line 2625 "ircd_parser.y"
4800 db 136 {
4801 adx 30 if (ypass == 2)
4802     {
4803     if (not_atom)ClearConfLazyLink(yy_aconf);
4804     else SetConfLazyLink(yy_aconf);
4805     }
4806     }
4807 db 136 break;
4808     case 426:
4809 michael 56 #line 2632 "ircd_parser.y"
4810 db 136 {
4811 adx 30 if (ypass == 2)
4812     #ifndef HAVE_LIBZ
4813     yyerror("Ignoring flags = compressed; -- no zlib support");
4814     #else
4815     {
4816     if (not_atom)ClearConfCompressed(yy_aconf);
4817     else SetConfCompressed(yy_aconf);
4818     }
4819     #endif
4820     }
4821 db 136 break;
4822     case 427:
4823 michael 56 #line 2643 "ircd_parser.y"
4824 db 136 {
4825 adx 30 if (ypass == 2)
4826     {
4827     if (not_atom)ClearConfCryptLink(yy_aconf);
4828     else SetConfCryptLink(yy_aconf);
4829     }
4830     }
4831 db 136 break;
4832     case 428:
4833 michael 56 #line 2650 "ircd_parser.y"
4834 db 136 {
4835 adx 30 if (ypass == 2)
4836     {
4837     if (not_atom)ClearConfAllowAutoConn(yy_aconf);
4838     else SetConfAllowAutoConn(yy_aconf);
4839     }
4840     }
4841 db 136 break;
4842     case 429:
4843 michael 56 #line 2657 "ircd_parser.y"
4844 db 136 {
4845 adx 30 if (ypass == 2)
4846     {
4847     if (not_atom)ClearConfAwayBurst(yy_aconf);
4848     else SetConfAwayBurst(yy_aconf);
4849     }
4850     }
4851 db 136 break;
4852     case 430:
4853 michael 56 #line 2664 "ircd_parser.y"
4854 db 136 {
4855 adx 30 if (ypass == 2)
4856     {
4857     if (not_atom)ClearConfTopicBurst(yy_aconf);
4858     else SetConfTopicBurst(yy_aconf);
4859     }
4860     }
4861 db 136 break;
4862     case 431:
4863 michael 56 #line 2674 "ircd_parser.y"
4864 db 136 {
4865 adx 30 #ifdef HAVE_LIBCRYPTO
4866     if (ypass == 2)
4867     {
4868     BIO *file;
4869    
4870     if (yy_aconf->rsa_public_key != NULL)
4871     {
4872     RSA_free(yy_aconf->rsa_public_key);
4873     yy_aconf->rsa_public_key = NULL;
4874     }
4875    
4876     if (yy_aconf->rsa_public_key_file != NULL)
4877     {
4878     MyFree(yy_aconf->rsa_public_key_file);
4879     yy_aconf->rsa_public_key_file = NULL;
4880     }
4881    
4882     DupString(yy_aconf->rsa_public_key_file, yylval.string);
4883    
4884     if ((file = BIO_new_file(yylval.string, "r")) == NULL)
4885     {
4886     yyerror("Ignoring rsa_public_key_file -- file doesn't exist");
4887     break;
4888     }
4889    
4890     yy_aconf->rsa_public_key = (RSA *)PEM_read_bio_RSA_PUBKEY(file, NULL, 0, NULL);
4891    
4892     if (yy_aconf->rsa_public_key == NULL)
4893     {
4894     yyerror("Ignoring rsa_public_key_file -- Key invalid; check key syntax.");
4895     break;
4896     }
4897    
4898     BIO_set_close(file, BIO_CLOSE);
4899     BIO_free(file);
4900     }
4901     #endif /* HAVE_LIBCRYPTO */
4902     }
4903 db 136 break;
4904     case 432:
4905 michael 56 #line 2715 "ircd_parser.y"
4906 db 136 {
4907 adx 30 if (ypass == 2)
4908     {
4909     if (yylval.number)
4910     yy_aconf->flags |= CONF_FLAGS_ENCRYPTED;
4911     else
4912     yy_aconf->flags &= ~CONF_FLAGS_ENCRYPTED;
4913     }
4914     }
4915 db 136 break;
4916     case 433:
4917 michael 56 #line 2726 "ircd_parser.y"
4918 db 136 {
4919 adx 30 if (ypass == 2)
4920     {
4921     if (yylval.number)
4922     yy_aconf->flags |= CONF_FLAGS_CRYPTLINK;
4923     else
4924     yy_aconf->flags &= ~CONF_FLAGS_CRYPTLINK;
4925     }
4926     }
4927 db 136 break;
4928     case 434:
4929 michael 56 #line 2737 "ircd_parser.y"
4930 db 136 {
4931 adx 30 if (ypass == 2)
4932     {
4933     if (yylval.number)
4934     #ifndef HAVE_LIBZ
4935     yyerror("Ignoring compressed=yes; -- no zlib support");
4936     #else
4937     yy_aconf->flags |= CONF_FLAGS_COMPRESSED;
4938     #endif
4939     else
4940     yy_aconf->flags &= ~CONF_FLAGS_COMPRESSED;
4941     }
4942     }
4943 db 136 break;
4944     case 435:
4945 michael 56 #line 2752 "ircd_parser.y"
4946 db 136 {
4947 adx 30 if (ypass == 2)
4948     {
4949     if (yylval.number)
4950     yy_aconf->flags |= CONF_FLAGS_ALLOW_AUTO_CONN;
4951     else
4952     yy_aconf->flags &= ~CONF_FLAGS_ALLOW_AUTO_CONN;
4953     }
4954     }
4955 db 136 break;
4956     case 436:
4957 michael 56 #line 2763 "ircd_parser.y"
4958 db 136 {
4959 adx 30 if (ypass == 2)
4960     {
4961     struct CollectItem *yy_tmp;
4962    
4963     yy_tmp = (struct CollectItem *)MyMalloc(sizeof(struct CollectItem));
4964     DupString(yy_tmp->host, yylval.string);
4965     DupString(yy_tmp->user, "*");
4966     dlinkAdd(yy_tmp, &yy_tmp->node, &hub_conf_list);
4967     }
4968     }
4969 db 136 break;
4970     case 437:
4971 michael 56 #line 2776 "ircd_parser.y"
4972 db 136 {
4973 adx 30 if (ypass == 2)
4974     {
4975     struct CollectItem *yy_tmp;
4976    
4977     yy_tmp = (struct CollectItem *)MyMalloc(sizeof(struct CollectItem));
4978     DupString(yy_tmp->host, yylval.string);
4979     DupString(yy_tmp->user, "*");
4980     dlinkAdd(yy_tmp, &yy_tmp->node, &leaf_conf_list);
4981     }
4982     }
4983 db 136 break;
4984     case 438:
4985 michael 56 #line 2789 "ircd_parser.y"
4986 db 136 {
4987 adx 30 if (ypass == 2)
4988     {
4989     MyFree(class_name);
4990     DupString(class_name, yylval.string);
4991     }
4992     }
4993 db 136 break;
4994     case 439:
4995 michael 56 #line 2798 "ircd_parser.y"
4996 db 136 {
4997 adx 30 #ifdef HAVE_LIBCRYPTO
4998     if (ypass == 2)
4999     {
5000     struct EncCapability *ecap;
5001     const char *cipher_name;
5002     int found = 0;
5003    
5004     yy_aconf->cipher_preference = NULL;
5005     cipher_name = yylval.string;
5006    
5007     for (ecap = CipherTable; ecap->name; ecap++)
5008     {
5009     if ((irccmp(ecap->name, cipher_name) == 0) &&
5010     (ecap->cap & CAP_ENC_MASK))
5011     {
5012     yy_aconf->cipher_preference = ecap;
5013     found = 1;
5014     break;
5015     }
5016     }
5017    
5018     if (!found)
5019     yyerror("Invalid cipher");
5020     }
5021     #else
5022     if (ypass == 2)
5023     yyerror("Ignoring cipher_preference -- no OpenSSL support");
5024     #endif
5025     }
5026 db 136 break;
5027     case 440:
5028 michael 56 #line 2833 "ircd_parser.y"
5029 db 136 {
5030 adx 30 if (ypass == 2)
5031     {
5032     userbuf[0] = hostbuf[0] = reasonbuf[0] = '\0';
5033     regex_ban = 0;
5034     }
5035     }
5036 db 136 break;
5037     case 441:
5038 michael 56 #line 2840 "ircd_parser.y"
5039 db 136 {
5040 adx 30 if (ypass == 2)
5041     {
5042     if (userbuf[0] && hostbuf[0])
5043     {
5044     if (regex_ban)
5045     {
5046     pcre *exp_user = NULL;
5047     pcre *exp_host = NULL;
5048     const char *errptr = NULL;
5049    
5050     if (!(exp_user = ircd_pcre_compile(userbuf, &errptr)) ||
5051     !(exp_host = ircd_pcre_compile(hostbuf, &errptr)))
5052     {
5053     ilog(L_ERROR, "Failed to add regular expression based K-Line: %s", errptr);
5054     break;
5055     }
5056    
5057     yy_conf = make_conf_item(RKLINE_TYPE);
5058     yy_aconf->regexuser = exp_user;
5059     yy_aconf->regexhost = exp_host;
5060    
5061     DupString(yy_aconf->user, userbuf);
5062     DupString(yy_aconf->host, hostbuf);
5063    
5064     if (reasonbuf[0])
5065     DupString(yy_aconf->reason, reasonbuf);
5066     else
5067     DupString(yy_aconf->reason, "No reason");
5068     }
5069     else
5070     {
5071     yy_conf = make_conf_item(KLINE_TYPE);
5072     yy_aconf = map_to_conf(yy_conf);
5073    
5074     DupString(yy_aconf->user, userbuf);
5075     DupString(yy_aconf->host, hostbuf);
5076    
5077     if (reasonbuf[0])
5078     DupString(yy_aconf->reason, reasonbuf);
5079     else
5080     DupString(yy_aconf->reason, "No reason");
5081     add_conf_by_address(CONF_KILL, yy_aconf);
5082     }
5083     }
5084     else
5085     delete_conf_item(yy_conf);
5086    
5087     yy_conf = NULL;
5088     yy_aconf = NULL;
5089     }
5090     }
5091 db 136 break;
5092     case 442:
5093 michael 56 #line 2894 "ircd_parser.y"
5094 db 136 {
5095 adx 30 }
5096 db 136 break;
5097     case 446:
5098 michael 56 #line 2899 "ircd_parser.y"
5099 db 136 {
5100 adx 30 if (ypass == 2)
5101     regex_ban = 1;
5102     }
5103 db 136 break;
5104     case 453:
5105 michael 56 #line 2908 "ircd_parser.y"
5106 db 136 {
5107 adx 30 if (ypass == 2)
5108     {
5109     char *user = NULL, *host = NULL;
5110    
5111     split_nuh(yylval.string, NULL, &user, &host);
5112    
5113     strlcpy(userbuf, user, sizeof(userbuf));
5114     strlcpy(hostbuf, host, sizeof(hostbuf));
5115    
5116     MyFree(user);
5117     MyFree(host);
5118     }
5119     }
5120 db 136 break;
5121     case 454:
5122 michael 56 #line 2924 "ircd_parser.y"
5123 db 136 {
5124 adx 30 if (ypass == 2)
5125     strlcpy(reasonbuf, yylval.string, sizeof(reasonbuf));
5126     }
5127 db 136 break;
5128     case 455:
5129 michael 56 #line 2933 "ircd_parser.y"
5130 db 136 {
5131 adx 30 if (ypass == 2)
5132     {
5133     yy_conf = make_conf_item(DLINE_TYPE);
5134     yy_aconf = map_to_conf(yy_conf);
5135     /* default reason */
5136     DupString(yy_aconf->reason, "No reason");
5137     }
5138     }
5139 db 136 break;
5140     case 456:
5141 michael 56 #line 2942 "ircd_parser.y"
5142 db 136 {
5143 adx 30 if (ypass == 2)
5144     {
5145     if (yy_aconf->host && parse_netmask(yy_aconf->host, NULL, NULL) != HM_HOST)
5146     add_conf_by_address(CONF_DLINE, yy_aconf);
5147     else
5148     delete_conf_item(yy_conf);
5149     yy_conf = NULL;
5150     yy_aconf = NULL;
5151     }
5152     }
5153 db 136 break;
5154     case 462:
5155 michael 56 #line 2958 "ircd_parser.y"
5156 db 136 {
5157 adx 30 if (ypass == 2)
5158     {
5159     MyFree(yy_aconf->host);
5160     DupString(yy_aconf->host, yylval.string);
5161     }
5162     }
5163 db 136 break;
5164     case 463:
5165 michael 56 #line 2967 "ircd_parser.y"
5166 db 136 {
5167 adx 30 if (ypass == 2)
5168     {
5169     MyFree(yy_aconf->reason);
5170     DupString(yy_aconf->reason, yylval.string);
5171     }
5172     }
5173 db 136 break;
5174     case 469:
5175 michael 56 #line 2984 "ircd_parser.y"
5176 db 136 {
5177 adx 30 if (ypass == 2)
5178     {
5179     if (yylval.string[0] && parse_netmask(yylval.string, NULL, NULL) != HM_HOST)
5180     {
5181     yy_conf = make_conf_item(EXEMPTDLINE_TYPE);
5182     yy_aconf = map_to_conf(yy_conf);
5183     DupString(yy_aconf->host, yylval.string);
5184    
5185     add_conf_by_address(CONF_EXEMPTDLINE, yy_aconf);
5186    
5187     yy_conf = NULL;
5188     yy_aconf = NULL;
5189     }
5190     }
5191     }
5192 db 136 break;
5193     case 470:
5194 michael 56 #line 3005 "ircd_parser.y"
5195 db 136 {
5196 adx 30 if (ypass == 2)
5197     {
5198     regex_ban = 0;
5199     reasonbuf[0] = gecos_name[0] = '\0';
5200     }
5201     }
5202 db 136 break;
5203     case 471:
5204 michael 56 #line 3012 "ircd_parser.y"
5205 db 136 {
5206 adx 30 if (ypass == 2)
5207     {
5208     if (gecos_name[0])
5209     {
5210     if (regex_ban)
5211     {
5212     pcre *exp_p = NULL;
5213     const char *errptr = NULL;
5214    
5215     if (!(exp_p = ircd_pcre_compile(gecos_name, &errptr)))
5216     {
5217     ilog(L_ERROR, "Failed to add regular expression based X-Line: %s", errptr);
5218     break;
5219     }
5220    
5221     yy_conf = make_conf_item(RXLINE_TYPE);
5222     yy_conf->regexpname = exp_p;
5223     }
5224     else
5225     yy_conf = make_conf_item(XLINE_TYPE);
5226    
5227     yy_match_item = map_to_conf(yy_conf);
5228     DupString(yy_conf->name, gecos_name);
5229    
5230     if (reasonbuf[0])
5231     DupString(yy_match_item->reason, reasonbuf);
5232     else
5233     DupString(yy_match_item->reason, "No reason");
5234     }
5235     }
5236     }
5237 db 136 break;
5238     case 472:
5239 michael 56 #line 3046 "ircd_parser.y"
5240 db 136 {
5241 adx 30 }
5242 db 136 break;
5243     case 476:
5244 michael 56 #line 3051 "ircd_parser.y"
5245 db 136 {
5246 adx 30 if (ypass == 2)
5247     regex_ban = 1;
5248     }
5249 db 136 break;
5250     case 483:
5251 michael 56 #line 3060 "ircd_parser.y"
5252 db 136 {
5253 adx 30 if (ypass == 2)
5254     strlcpy(gecos_name, yylval.string, sizeof(gecos_name));
5255     }
5256 db 136 break;
5257     case 484:
5258 michael 56 #line 3066 "ircd_parser.y"
5259 db 136 {
5260 adx 30 if (ypass == 2)
5261     strlcpy(reasonbuf, yylval.string, sizeof(reasonbuf));
5262     }
5263 db 136 break;
5264     case 543:
5265 michael 56 #line 3111 "ircd_parser.y"
5266 db 136 {
5267     ConfigFileEntry.gline_min_cidr = yyvsp[-1].number;
5268 adx 30 }
5269 db 136 break;
5270     case 544:
5271 michael 56 #line 3116 "ircd_parser.y"
5272 db 136 {
5273     ConfigFileEntry.gline_min_cidr6 = yyvsp[-1].number;
5274 adx 30 }
5275 db 136 break;
5276     case 545:
5277 michael 56 #line 3121 "ircd_parser.y"
5278 db 136 {
5279 adx 30 ConfigFileEntry.burst_away = yylval.number;
5280     }
5281 db 136 break;
5282     case 546:
5283 michael 56 #line 3126 "ircd_parser.y"
5284 db 136 {
5285 adx 30 ConfigFileEntry.use_whois_actually = yylval.number;
5286     }
5287 db 136 break;
5288     case 547:
5289 michael 56 #line 3131 "ircd_parser.y"
5290 db 136 {
5291 adx 30 GlobalSetOptions.rejecttime = yylval.number;
5292     }
5293 db 136 break;
5294     case 548:
5295 michael 56 #line 3136 "ircd_parser.y"
5296 db 136 {
5297 adx 30 ConfigFileEntry.tkline_expire_notices = yylval.number;
5298     }
5299 db 136 break;
5300     case 549:
5301 michael 56 #line 3141 "ircd_parser.y"
5302 db 136 {
5303     ConfigFileEntry.kill_chase_time_limit = yyvsp[-1].number;
5304 adx 30 }
5305 db 136 break;
5306     case 550:
5307 michael 56 #line 3146 "ircd_parser.y"
5308 db 136 {
5309 adx 30 ConfigFileEntry.hide_spoof_ips = yylval.number;
5310     }
5311 db 136 break;
5312     case 551:
5313 michael 56 #line 3151 "ircd_parser.y"
5314 db 136 {
5315 adx 30 ConfigFileEntry.ignore_bogus_ts = yylval.number;
5316     }
5317 db 136 break;
5318     case 552:
5319 michael 56 #line 3156 "ircd_parser.y"
5320 db 136 {
5321 adx 30 ConfigFileEntry.disable_remote = yylval.number;
5322     }
5323 db 136 break;
5324     case 553:
5325 michael 56 #line 3161 "ircd_parser.y"
5326 db 136 {
5327 adx 30 ConfigFileEntry.failed_oper_notice = yylval.number;
5328     }
5329 db 136 break;
5330     case 554:
5331 michael 56 #line 3166 "ircd_parser.y"
5332 db 136 {
5333 adx 30 ConfigFileEntry.anti_nick_flood = yylval.number;
5334     }
5335 db 136 break;
5336     case 555:
5337 michael 56 #line 3171 "ircd_parser.y"
5338 db 136 {
5339     ConfigFileEntry.max_nick_time = yyvsp[-1].number;
5340 adx 30 }
5341 db 136 break;
5342     case 556:
5343 michael 56 #line 3176 "ircd_parser.y"
5344 db 136 {
5345     ConfigFileEntry.max_nick_changes = yyvsp[-1].number;
5346 adx 30 }
5347 db 136 break;
5348     case 557:
5349 michael 56 #line 3181 "ircd_parser.y"
5350 db 136 {
5351     ConfigFileEntry.max_accept = yyvsp[-1].number;
5352 adx 30 }
5353 db 136 break;
5354     case 558:
5355 michael 56 #line 3186 "ircd_parser.y"
5356 db 136 {
5357     ConfigFileEntry.anti_spam_exit_message_time = yyvsp[-1].number;
5358 adx 30 }
5359 db 136 break;
5360     case 559:
5361 michael 56 #line 3191 "ircd_parser.y"
5362 db 136 {
5363     ConfigFileEntry.ts_warn_delta = yyvsp[-1].number;
5364 adx 30 }
5365 db 136 break;
5366     case 560:
5367 michael 56 #line 3196 "ircd_parser.y"
5368 db 136 {
5369 adx 30 if (ypass == 2)
5370 db 136 ConfigFileEntry.ts_max_delta = yyvsp[-1].number;
5371 adx 30 }
5372 db 136 break;
5373     case 561:
5374 michael 56 #line 3202 "ircd_parser.y"
5375 db 136 {
5376     if ((yyvsp[-1].number > 0) && ypass == 1)
5377 adx 30 {
5378     ilog(L_CRIT, "You haven't read your config file properly.");
5379     ilog(L_CRIT, "There is a line in the example conf that will kill your server if not removed.");
5380     ilog(L_CRIT, "Consider actually reading/editing the conf file, and removing this line.");
5381     exit(0);
5382     }
5383     }
5384 db 136 break;
5385     case 562:
5386 michael 56 #line 3213 "ircd_parser.y"
5387 db 136 {
5388 adx 30 ConfigFileEntry.kline_with_reason = yylval.number;
5389     }
5390 db 136 break;
5391     case 563:
5392 michael 56 #line 3218 "ircd_parser.y"
5393 db 136 {
5394 adx 30 if (ypass == 2)
5395     {
5396     MyFree(ConfigFileEntry.kline_reason);
5397     DupString(ConfigFileEntry.kline_reason, yylval.string);
5398     }
5399     }
5400 db 136 break;
5401     case 564:
5402 michael 56 #line 3227 "ircd_parser.y"
5403 db 136 {
5404 adx 30 ConfigFileEntry.invisible_on_connect = yylval.number;
5405     }
5406 db 136 break;
5407     case 565:
5408 michael 56 #line 3232 "ircd_parser.y"
5409 db 136 {
5410 adx 30 ConfigFileEntry.warn_no_nline = yylval.number;
5411     }
5412 db 136 break;
5413     case 566:
5414 michael 56 #line 3237 "ircd_parser.y"
5415 db 136 {
5416 adx 30 ConfigFileEntry.stats_o_oper_only = yylval.number;
5417     }
5418 db 136 break;
5419     case 567:
5420 michael 56 #line 3242 "ircd_parser.y"
5421 db 136 {
5422 adx 30 ConfigFileEntry.stats_P_oper_only = yylval.number;
5423     }
5424 db 136 break;
5425     case 568:
5426 michael 56 #line 3247 "ircd_parser.y"
5427 db 136 {
5428 adx 30 ConfigFileEntry.stats_k_oper_only = 2 * yylval.number;
5429     }
5430 db 136 break;
5431     case 569:
5432 michael 56 #line 3250 "ircd_parser.y"
5433 db 136 {
5434 adx 30 ConfigFileEntry.stats_k_oper_only = 1;
5435     }
5436 db 136 break;
5437     case 570:
5438 michael 56 #line 3255 "ircd_parser.y"
5439 db 136 {
5440 adx 30 ConfigFileEntry.stats_i_oper_only = 2 * yylval.number;
5441     }
5442 db 136 break;
5443     case 571:
5444 michael 56 #line 3258 "ircd_parser.y"
5445 db 136 {
5446 adx 30 ConfigFileEntry.stats_i_oper_only = 1;
5447     }
5448 db 136 break;
5449     case 572:
5450 michael 56 #line 3263 "ircd_parser.y"
5451 db 136 {
5452     ConfigFileEntry.pace_wait = yyvsp[-1].number;
5453 adx 30 }
5454 db 136 break;
5455     case 573:
5456 michael 56 #line 3268 "ircd_parser.y"
5457 db 136 {
5458     ConfigFileEntry.caller_id_wait = yyvsp[-1].number;
5459 adx 30 }
5460 db 136 break;
5461     case 574:
5462 michael 56 #line 3273 "ircd_parser.y"
5463 db 136 {
5464 adx 30 ConfigFileEntry.opers_bypass_callerid = yylval.number;
5465     }
5466 db 136 break;
5467     case 575:
5468 michael 56 #line 3278 "ircd_parser.y"
5469 db 136 {
5470     ConfigFileEntry.pace_wait_simple = yyvsp[-1].number;
5471 adx 30 }
5472 db 136 break;
5473     case 576:
5474 michael 56 #line 3283 "ircd_parser.y"
5475 db 136 {
5476 adx 30 ConfigFileEntry.short_motd = yylval.number;
5477     }
5478 db 136 break;
5479     case 577:
5480 michael 56 #line 3288 "ircd_parser.y"
5481 db 136 {
5482 adx 30 ConfigFileEntry.no_oper_flood = yylval.number;
5483     }
5484 db 136 break;
5485     case 578:
5486 michael 56 #line 3293 "ircd_parser.y"
5487 db 136 {
5488 adx 30 ConfigFileEntry.true_no_oper_flood = yylval.number;
5489     }
5490 db 136 break;
5491     case 579:
5492 michael 56 #line 3298 "ircd_parser.y"
5493 db 136 {
5494 adx 30 ConfigFileEntry.oper_pass_resv = yylval.number;
5495     }
5496 db 136 break;
5497     case 580:
5498 michael 56 #line 3303 "ircd_parser.y"
5499 db 136 {
5500 adx 30 if (ypass == 2)
5501     {
5502     if (strlen(yylval.string) > LOCALE_LENGTH-2)
5503     yylval.string[LOCALE_LENGTH-1] = '\0';
5504    
5505     set_locale(yylval.string);
5506     }
5507     }
5508 db 136 break;
5509     case 581:
5510 michael 56 #line 3314 "ircd_parser.y"
5511 db 136 {
5512     ConfigFileEntry.idletime = yyvsp[-1].number;
5513 adx 30 }
5514 db 136 break;
5515     case 582:
5516 michael 56 #line 3319 "ircd_parser.y"
5517 db 136 {
5518     ConfigFileEntry.dots_in_ident = yyvsp[-1].number;
5519 adx 30 }
5520 db 136 break;
5521     case 583:
5522 michael 56 #line 3324 "ircd_parser.y"
5523 db 136 {
5524     ConfigFileEntry.max_targets = yyvsp[-1].number;
5525 adx 30 }
5526 db 136 break;
5527     case 584:
5528 michael 56 #line 3329 "ircd_parser.y"
5529 db 136 {
5530 adx 30 if (ypass == 2)
5531     {
5532     MyFree(ConfigFileEntry.servlink_path);
5533     DupString(ConfigFileEntry.servlink_path, yylval.string);
5534     }
5535     }
5536 db 136 break;
5537     case 585:
5538 michael 56 #line 3338 "ircd_parser.y"
5539 db 136 {
5540 adx 30 #ifdef HAVE_LIBCRYPTO
5541     if (ypass == 2)
5542     {
5543     struct EncCapability *ecap;
5544     const char *cipher_name;
5545     int found = 0;
5546    
5547     ConfigFileEntry.default_cipher_preference = NULL;
5548     cipher_name = yylval.string;
5549    
5550     for (ecap = CipherTable; ecap->name; ecap++)
5551     {
5552     if ((irccmp(ecap->name, cipher_name) == 0) &&
5553     (ecap->cap & CAP_ENC_MASK))
5554     {
5555     ConfigFileEntry.default_cipher_preference = ecap;
5556     found = 1;
5557     break;
5558     }
5559     }
5560    
5561     if (!found)
5562     yyerror("Invalid cipher");
5563     }
5564     #else
5565     if (ypass == 2)
5566     yyerror("Ignoring default_cipher_preference -- no OpenSSL support");
5567     #endif
5568     }
5569 db 136 break;
5570     case 586:
5571 michael 56 #line 3370 "ircd_parser.y"
5572 db 136 {
5573 adx 30 if (ypass == 2)
5574     {
5575 db 136 ConfigFileEntry.compression_level = yyvsp[-1].number;
5576 adx 30 #ifndef HAVE_LIBZ
5577     yyerror("Ignoring compression_level -- no zlib support");
5578     #else
5579     if ((ConfigFileEntry.compression_level < 1) ||
5580     (ConfigFileEntry.compression_level > 9))
5581     {
5582     yyerror("Ignoring invalid compression_level, using default");
5583     ConfigFileEntry.compression_level = 0;
5584     }
5585     #endif
5586     }
5587     }
5588 db 136 break;
5589     case 587:
5590 michael 56 #line 3388 "ircd_parser.y"
5591 db 136 {
5592 adx 30 ConfigFileEntry.use_egd = yylval.number;
5593     }
5594 db 136 break;
5595     case 588:
5596 michael 56 #line 3393 "ircd_parser.y"
5597 db 136 {
5598 adx 30 if (ypass == 2)
5599     {
5600     MyFree(ConfigFileEntry.egdpool_path);
5601     DupString(ConfigFileEntry.egdpool_path, yylval.string);
5602     }
5603     }
5604 db 136 break;
5605     case 589:
5606 michael 56 #line 3402 "ircd_parser.y"
5607 db 136 {
5608 adx 30 ConfigFileEntry.ping_cookie = yylval.number;
5609     }
5610 db 136 break;
5611     case 590:
5612 michael 56 #line 3407 "ircd_parser.y"
5613 db 136 {
5614 adx 30 ConfigFileEntry.disable_auth = yylval.number;
5615     }
5616 db 136 break;
5617     case 591:
5618 michael 56 #line 3412 "ircd_parser.y"
5619 db 136 {
5620 adx 30 ConfigFileEntry.throttle_time = yylval.number;
5621     }
5622 db 136 break;
5623     case 592:
5624 michael 56 #line 3417 "ircd_parser.y"
5625 db 136 {
5626 adx 30 ConfigFileEntry.oper_umodes = 0;
5627     }
5628 db 136 break;
5629     case 596:
5630 michael 56 #line 3423 "ircd_parser.y"
5631 db 136 {
5632 adx 30 ConfigFileEntry.oper_umodes |= UMODE_BOTS;
5633     }
5634 db 136 break;
5635     case 597:
5636 michael 56 #line 3426 "ircd_parser.y"
5637 db 136 {
5638 adx 30 ConfigFileEntry.oper_umodes |= UMODE_CCONN;
5639     }
5640 db 136 break;
5641     case 598:
5642 michael 56 #line 3429 "ircd_parser.y"
5643 db 136 {
5644 adx 30 ConfigFileEntry.oper_umodes |= UMODE_DEAF;
5645     }
5646 db 136 break;
5647     case 599:
5648 michael 56 #line 3432 "ircd_parser.y"
5649 db 136 {
5650 adx 30 ConfigFileEntry.oper_umodes |= UMODE_DEBUG;
5651     }
5652 db 136 break;
5653     case 600:
5654 michael 56 #line 3435 "ircd_parser.y"
5655 db 136 {
5656 adx 30 ConfigFileEntry.oper_umodes |= UMODE_FULL;
5657     }
5658 db 136 break;
5659     case 601:
5660 michael 56 #line 3438 "ircd_parser.y"
5661 db 136 {
5662 adx 30 ConfigFileEntry.oper_umodes |= UMODE_SKILL;
5663     }
5664 db 136 break;
5665     case 602:
5666 michael 56 #line 3441 "ircd_parser.y"
5667 db 136 {
5668 adx 30 ConfigFileEntry.oper_umodes |= UMODE_NCHANGE;
5669     }
5670 db 136 break;
5671     case 603:
5672 michael 56 #line 3444 "ircd_parser.y"
5673 db 136 {
5674 adx 30 ConfigFileEntry.oper_umodes |= UMODE_REJ;
5675     }
5676 db 136 break;
5677     case 604:
5678 michael 56 #line 3447 "ircd_parser.y"
5679 db 136 {
5680 adx 30 ConfigFileEntry.oper_umodes |= UMODE_UNAUTH;
5681     }
5682 db 136 break;
5683     case 605:
5684 michael 56 #line 3450 "ircd_parser.y"
5685 db 136 {
5686 adx 30 ConfigFileEntry.oper_umodes |= UMODE_SPY;
5687     }
5688 db 136 break;
5689     case 606:
5690 michael 56 #line 3453 "ircd_parser.y"
5691 db 136 {
5692 adx 30 ConfigFileEntry.oper_umodes |= UMODE_EXTERNAL;
5693     }
5694 db 136 break;
5695     case 607:
5696 michael 56 #line 3456 "ircd_parser.y"
5697 db 136 {
5698 adx 30 ConfigFileEntry.oper_umodes |= UMODE_OPERWALL;
5699     }
5700 db 136 break;
5701     case 608:
5702 michael 56 #line 3459 "ircd_parser.y"
5703 db 136 {
5704 adx 30 ConfigFileEntry.oper_umodes |= UMODE_SERVNOTICE;
5705     }
5706 db 136 break;
5707     case 609:
5708 michael 56 #line 3462 "ircd_parser.y"
5709 db 136 {
5710 adx 30 ConfigFileEntry.oper_umodes |= UMODE_INVISIBLE;
5711     }
5712 db 136 break;
5713     case 610:
5714 michael 56 #line 3465 "ircd_parser.y"
5715 db 136 {
5716 adx 30 ConfigFileEntry.oper_umodes |= UMODE_WALLOP;
5717     }
5718 db 136 break;
5719     case 611:
5720 michael 56 #line 3468 "ircd_parser.y"
5721 db 136 {
5722 adx 30 ConfigFileEntry.oper_umodes |= UMODE_SOFTCALLERID;
5723     }
5724 db 136 break;
5725     case 612:
5726 michael 56 #line 3471 "ircd_parser.y"
5727 db 136 {
5728 adx 30 ConfigFileEntry.oper_umodes |= UMODE_CALLERID;
5729     }
5730 db 136 break;
5731     case 613:
5732 michael 56 #line 3474 "ircd_parser.y"
5733 db 136 {
5734 adx 30 ConfigFileEntry.oper_umodes |= UMODE_LOCOPS;
5735     }
5736 db 136 break;
5737     case 614:
5738 michael 56 #line 3479 "ircd_parser.y"
5739 db 136 {
5740 adx 30 ConfigFileEntry.oper_only_umodes = 0;
5741     }
5742 db 136 break;
5743     case 618:
5744 michael 56 #line 3485 "ircd_parser.y"
5745 db 136 {
5746 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_BOTS;
5747     }
5748 db 136 break;
5749     case 619:
5750 michael 56 #line 3488 "ircd_parser.y"
5751 db 136 {
5752 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_CCONN;
5753     }
5754 db 136 break;
5755     case 620:
5756 michael 56 #line 3491 "ircd_parser.y"
5757 db 136 {
5758 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_DEAF;
5759     }
5760 db 136 break;
5761     case 621:
5762 michael 56 #line 3494 "ircd_parser.y"
5763 db 136 {
5764 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_DEBUG;
5765     }
5766 db 136 break;
5767     case 622:
5768 michael 56 #line 3497 "ircd_parser.y"
5769 db 136 {
5770 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_FULL;
5771     }
5772 db 136 break;
5773     case 623:
5774 michael 56 #line 3500 "ircd_parser.y"
5775 db 136 {
5776 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_SKILL;
5777     }
5778 db 136 break;
5779     case 624:
5780 michael 56 #line 3503 "ircd_parser.y"
5781 db 136 {
5782 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_NCHANGE;
5783     }
5784 db 136 break;
5785     case 625:
5786 michael 56 #line 3506 "ircd_parser.y"
5787 db 136 {
5788 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_REJ;
5789     }
5790 db 136 break;
5791     case 626:
5792 michael 56 #line 3509 "ircd_parser.y"
5793 db 136 {
5794 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_UNAUTH;
5795     }
5796 db 136 break;
5797     case 627:
5798 michael 56 #line 3512 "ircd_parser.y"
5799 db 136 {
5800 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_SPY;
5801     }
5802 db 136 break;
5803     case 628:
5804 michael 56 #line 3515 "ircd_parser.y"
5805 db 136 {
5806 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_EXTERNAL;
5807     }
5808 db 136 break;
5809     case 629:
5810 michael 56 #line 3518 "ircd_parser.y"
5811 db 136 {
5812 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_OPERWALL;
5813     }
5814 db 136 break;
5815     case 630:
5816 michael 56 #line 3521 "ircd_parser.y"
5817 db 136 {
5818 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_SERVNOTICE;
5819     }
5820 db 136 break;
5821     case 631:
5822 michael 56 #line 3524 "ircd_parser.y"
5823 db 136 {
5824 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_INVISIBLE;
5825     }
5826 db 136 break;
5827     case 632:
5828 michael 56 #line 3527 "ircd_parser.y"
5829 db 136 {
5830 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_WALLOP;
5831     }
5832 db 136 break;
5833     case 633:
5834 michael 56 #line 3530 "ircd_parser.y"
5835 db 136 {
5836 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_SOFTCALLERID;
5837     }
5838 db 136 break;
5839     case 634:
5840 michael 56 #line 3533 "ircd_parser.y"
5841 db 136 {
5842 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_CALLERID;
5843     }
5844 db 136 break;
5845     case 635:
5846 michael 56 #line 3536 "ircd_parser.y"
5847 db 136 {
5848 adx 30 ConfigFileEntry.oper_only_umodes |= UMODE_LOCOPS;
5849     }
5850 db 136 break;
5851     case 636:
5852 michael 56 #line 3541 "ircd_parser.y"
5853 db 136 {
5854     ConfigFileEntry.min_nonwildcard = yyvsp[-1].number;
5855 adx 30 }
5856 db 136 break;
5857     case 637:
5858 michael 56 #line 3546 "ircd_parser.y"
5859 db 136 {
5860     ConfigFileEntry.min_nonwildcard_simple = yyvsp[-1].number;
5861 adx 30 }
5862 db 136 break;
5863     case 638:
5864 michael 56 #line 3551 "ircd_parser.y"
5865 db 136 {
5866     ConfigFileEntry.default_floodcount = yyvsp[-1].number;
5867 adx 30 }
5868 db 136 break;
5869     case 639:
5870 michael 56 #line 3556 "ircd_parser.y"
5871 db 136 {
5872     ConfigFileEntry.client_flood = yyvsp[-1].number;
5873 adx 30 }
5874 db 136 break;
5875     case 640:
5876 michael 56 #line 3561 "ircd_parser.y"
5877 db 136 {
5878 adx 30 ConfigFileEntry.dot_in_ip6_addr = yylval.number;
5879     }
5880 db 136 break;
5881     case 641:
5882 michael 56 #line 3569 "ircd_parser.y"
5883 db 136 {
5884 adx 30 if (ypass == 2)
5885     {
5886     yy_conf = make_conf_item(GDENY_TYPE);
5887 michael 102 yy_aconf = map_to_conf(yy_conf);
5888 adx 30 }
5889     }
5890 db 136 break;
5891     case 642:
5892 michael 102 #line 3576 "ircd_parser.y"
5893 db 136 {
5894 adx 30 if (ypass == 2)
5895     {
5896     /*
5897     * since we re-allocate yy_conf/yy_aconf after the end of action=, at the
5898     * end we will have one extra, so we should free it.
5899     */
5900 michael 102 if (yy_conf->name == NULL || yy_aconf->user == NULL)
5901 adx 30 {
5902 michael 102 delete_conf_item(yy_conf);
5903 adx 30 yy_conf = NULL;
5904     yy_aconf = NULL;
5905     }
5906     }
5907     }
5908 db 136 break;
5909     case 652:
5910 michael 102 #line 3602 "ircd_parser.y"
5911 db 136 {
5912 adx 30 if (ypass == 2)
5913     ConfigFileEntry.glines = yylval.number;
5914     }
5915 db 136 break;
5916     case 653:
5917 michael 102 #line 3608 "ircd_parser.y"
5918 db 136 {
5919 adx 30 if (ypass == 2)
5920 db 136 ConfigFileEntry.gline_time = yyvsp[-1].number;
5921 adx 30 }
5922 db 136 break;
5923     case 654:
5924 michael 102 #line 3614 "ircd_parser.y"
5925 db 136 {
5926 adx 30 if (ypass == 2)
5927     ConfigFileEntry.gline_logging = 0;
5928     }
5929 db 136 break;
5930     case 658:
5931 michael 102 #line 3620 "ircd_parser.y"
5932 db 136 {
5933 adx 30 if (ypass == 2)
5934     ConfigFileEntry.gline_logging |= GDENY_REJECT;
5935     }
5936 db 136 break;
5937     case 659:
5938 michael 102 #line 3624 "ircd_parser.y"
5939 db 136 {
5940 adx 30 if (ypass == 2)
5941     ConfigFileEntry.gline_logging |= GDENY_BLOCK;
5942     }
5943 db 136 break;
5944     case 660:
5945 michael 102 #line 3630 "ircd_parser.y"
5946 db 136 {
5947 adx 30 if (ypass == 2)
5948     {
5949 michael 102 struct CollectItem *yy_tmp = NULL;
5950 adx 30
5951     if (yy_aconf->user == NULL)
5952     {
5953     split_nuh(yylval.string, NULL, &yy_aconf->user, &yy_aconf->host);
5954     }
5955     else
5956     {
5957 michael 102 yy_tmp = MyMalloc(sizeof(struct CollectItem));
5958 adx 30 split_nuh(yylval.string, NULL, &yy_tmp->user, &yy_tmp->host);
5959     dlinkAdd(yy_tmp, &yy_tmp->node, &col_conf_list);
5960     }
5961     }
5962     }
5963 db 136 break;
5964     case 661:
5965 michael 102 #line 3649 "ircd_parser.y"
5966 db 136 {
5967 adx 30 if (ypass == 2)
5968     {
5969     MyFree(yy_conf->name);
5970     DupString(yy_conf->name, yylval.string);
5971     }
5972     }
5973 db 136 break;
5974     case 662:
5975 michael 102 #line 3658 "ircd_parser.y"
5976 db 136 {
5977 adx 30 if (ypass == 2)
5978     yy_aconf->flags = 0;
5979     }
5980 db 136 break;
5981     case 663:
5982 michael 102 #line 3662 "ircd_parser.y"
5983 db 136 {
5984 adx 30 if (ypass == 2)
5985     {
5986 michael 102 struct CollectItem *yy_tmp = NULL;
5987 adx 30 dlink_node *ptr, *next_ptr;
5988    
5989     DLINK_FOREACH_SAFE(ptr, next_ptr, col_conf_list.head)
5990     {
5991     struct AccessItem *new_aconf;
5992     struct ConfItem *new_conf;
5993    
5994     yy_tmp = ptr->data;
5995     new_conf = make_conf_item(GDENY_TYPE);
5996 michael 102 new_aconf = map_to_conf(new_conf);
5997 adx 30
5998     new_aconf->flags = yy_aconf->flags;
5999    
6000     if (yy_conf->name != NULL)
6001     DupString(new_conf->name, yy_conf->name);
6002     else
6003     DupString(new_conf->name, "*");
6004     if (yy_aconf->user != NULL)
6005     DupString(new_aconf->user, yy_tmp->user);
6006     else
6007     DupString(new_aconf->user, "*");
6008     if (yy_aconf->host != NULL)
6009     DupString(new_aconf->host, yy_tmp->host);
6010     else
6011     DupString(new_aconf->host, "*");
6012    
6013     dlinkDelete(&yy_tmp->node, &col_conf_list);
6014     }
6015 michael 102
6016     /*
6017     * In case someone has fed us with more than one action= after user/name
6018     * which would leak memory -Michael
6019     */
6020     if (yy_conf->name == NULL || yy_aconf->user == NULL)
6021     delete_conf_item(yy_conf);
6022    
6023     yy_conf = make_conf_item(GDENY_TYPE);
6024     yy_aconf = map_to_conf(yy_conf);
6025 adx 30 }
6026     }
6027 db 136 break;
6028     case 666:
6029 michael 102 #line 3709 "ircd_parser.y"
6030 db 136 {
6031 adx 30 if (ypass == 2)
6032     yy_aconf->flags |= GDENY_REJECT;
6033     }
6034 db 136 break;
6035     case 667:
6036 michael 102 #line 3713 "ircd_parser.y"
6037 db 136 {
6038 adx 30 if (ypass == 2)
6039     yy_aconf->flags |= GDENY_BLOCK;
6040     }
6041 db 136 break;
6042     case 690:
6043 michael 102 #line 3738 "ircd_parser.y"
6044 db 136 {
6045 adx 30 ConfigChannel.restrict_channels = yylval.number;
6046     }
6047 db 136 break;
6048     case 691:
6049 michael 102 #line 3743 "ircd_parser.y"
6050 db 136 {
6051 adx 30 ConfigChannel.disable_local_channels = yylval.number;
6052     }
6053 db 136 break;
6054     case 692:
6055 michael 102 #line 3748 "ircd_parser.y"
6056 db 136 {
6057 adx 30 ConfigChannel.use_except = yylval.number;
6058     }
6059 db 136 break;
6060     case 693:
6061 michael 102 #line 3753 "ircd_parser.y"
6062 db 136 {
6063 adx 30 ConfigChannel.use_invex = yylval.number;
6064     }
6065 db 136 break;
6066     case 694:
6067 michael 102 #line 3758 "ircd_parser.y"
6068 db 136 {
6069 adx 30 ConfigChannel.use_knock = yylval.number;
6070     }
6071 db 136 break;
6072     case 695:
6073 michael 102 #line 3763 "ircd_parser.y"
6074 db 136 {
6075     ConfigChannel.knock_delay = yyvsp[-1].number;
6076 adx 30 }
6077 db 136 break;
6078     case 696:
6079 michael 102 #line 3768 "ircd_parser.y"
6080 db 136 {
6081     ConfigChannel.knock_delay_channel = yyvsp[-1].number;
6082 adx 30 }
6083 db 136 break;
6084     case 697:
6085 michael 102 #line 3773 "ircd_parser.y"
6086 db 136 {
6087 adx 30 ConfigChannel.invite_ops_only = yylval.number;
6088     }
6089 db 136 break;
6090     case 698:
6091 michael 102 #line 3778 "ircd_parser.y"
6092 db 136 {
6093     ConfigChannel.max_chans_per_user = yyvsp[-1].number;
6094 adx 30 }
6095 db 136 break;
6096     case 699:
6097 michael 102 #line 3783 "ircd_parser.y"
6098 db 136 {
6099 adx 30 ConfigChannel.quiet_on_ban = yylval.number;
6100     }
6101 db 136 break;
6102     case 700:
6103 michael 102 #line 3788 "ircd_parser.y"
6104 db 136 {
6105     ConfigChannel.max_bans = yyvsp[-1].number;
6106 adx 30 }
6107 db 136 break;
6108     case 701:
6109 michael 102 #line 3793 "ircd_parser.y"
6110 db 136 {
6111     ConfigChannel.default_split_user_count = yyvsp[-1].number;
6112 adx 30 }
6113 db 136 break;
6114     case 702:
6115 michael 102 #line 3798 "ircd_parser.y"
6116 db 136 {
6117     ConfigChannel.default_split_server_count = yyvsp[-1].number;
6118 adx 30 }
6119 db 136 break;
6120     case 703:
6121 michael 102 #line 3803 "ircd_parser.y"
6122 db 136 {
6123 adx 30 ConfigChannel.no_create_on_split = yylval.number;
6124     }
6125 db 136 break;
6126     case 704:
6127 michael 102 #line 3808 "ircd_parser.y"
6128 db 136 {
6129 adx 30 ConfigChannel.no_join_on_split = yylval.number;
6130     }
6131 db 136 break;
6132     case 705:
6133 michael 102 #line 3813 "ircd_parser.y"
6134 db 136 {
6135 adx 30 ConfigChannel.burst_topicwho = yylval.number;
6136     }
6137 db 136 break;
6138     case 706:
6139 michael 102 #line 3818 "ircd_parser.y"
6140 db 136 {
6141 adx 30 GlobalSetOptions.joinfloodcount = yylval.number;
6142     }
6143 db 136 break;
6144     case 707:
6145 michael 102 #line 3823 "ircd_parser.y"
6146 db 136 {
6147 adx 30 GlobalSetOptions.joinfloodtime = yylval.number;
6148     }
6149 db 136 break;
6150     case 719:
6151 michael 102 #line 3842 "ircd_parser.y"
6152 db 136 {
6153 adx 30 if (ypass == 2)
6154     ConfigServerHide.flatten_links = yylval.number;
6155     }
6156 db 136 break;
6157     case 720:
6158 michael 102 #line 3848 "ircd_parser.y"
6159 db 136 {
6160 adx 30 if (ypass == 2)
6161     ConfigServerHide.hide_servers = yylval.number;
6162     }
6163 db 136 break;
6164     case 721:
6165 michael 102 #line 3854 "ircd_parser.y"
6166 db 136 {
6167 adx 30 if (ypass == 2)
6168     {
6169     MyFree(ConfigServerHide.hidden_name);
6170     DupString(ConfigServerHide.hidden_name, yylval.string);
6171     }
6172     }
6173 db 136 break;
6174     case 722:
6175 michael 102 #line 3863 "ircd_parser.y"
6176 db 136 {
6177 adx 30 if (ypass == 2)
6178     {
6179 db 136 if ((yyvsp[-1].number > 0) && ConfigServerHide.links_disabled == 1)
6180 adx 30 {
6181 db 136 eventAddIsh("write_links_file", write_links_file, NULL, yyvsp[-1].number);
6182 adx 30 ConfigServerHide.links_disabled = 0;
6183     }
6184    
6185 db 136 ConfigServerHide.links_delay = yyvsp[-1].number;
6186 adx 30 }
6187     }
6188 db 136 break;
6189     case 723:
6190 michael 102 #line 3877 "ircd_parser.y"
6191 db 136 {
6192 adx 30 if (ypass == 2)
6193     ConfigServerHide.hidden = yylval.number;
6194     }
6195 db 136 break;
6196     case 724:
6197 michael 102 #line 3883 "ircd_parser.y"
6198 db 136 {
6199 adx 30 if (ypass == 2)
6200     ConfigServerHide.disable_hidden = yylval.number;
6201     }
6202 db 136 break;
6203     case 725:
6204 michael 102 #line 3889 "ircd_parser.y"
6205 db 136 {
6206 adx 30 if (ypass == 2)
6207     ConfigServerHide.hide_server_ips = yylval.number;
6208     }
6209 db 136 break;
6210     #line 6211 "y.tab.c"
6211 adx 30 }
6212 db 136 yyssp -= yym;
6213     yystate = *yyssp;
6214     yyvsp -= yym;
6215     yym = yylhs[yyn];
6216     if (yystate == 0 && yym == 0)
6217 adx 30 {
6218 db 136 #if YYDEBUG
6219     if (yydebug)
6220     printf("%sdebug: after reduction, shifting from state 0 to\
6221     state %d\n", YYPREFIX, YYFINAL);
6222     #endif
6223     yystate = YYFINAL;
6224     *++yyssp = YYFINAL;
6225     *++yyvsp = yyval;
6226     if (yychar < 0)
6227 adx 30 {
6228 db 136 if ((yychar = yylex()) < 0) yychar = 0;
6229     #if YYDEBUG
6230     if (yydebug)
6231     {
6232     yys = 0;
6233     if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
6234     if (!yys) yys = "illegal-symbol";
6235     printf("%sdebug: state %d, reading %d (%s)\n",
6236     YYPREFIX, YYFINAL, yychar, yys);
6237     }
6238     #endif
6239 adx 38 }
6240 db 136 if (yychar == 0) goto yyaccept;
6241     goto yyloop;
6242 adx 30 }
6243 db 136 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
6244     yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
6245     yystate = yytable[yyn];
6246     else
6247     yystate = yydgoto[yym];
6248     #if YYDEBUG
6249     if (yydebug)
6250     printf("%sdebug: after reduction, shifting from state %d \
6251     to state %d\n", YYPREFIX, *yyssp, yystate);
6252 michael 56 #endif
6253 db 136 if (yyssp >= yysslim && yygrowstack())
6254 adx 30 {
6255 db 136 goto yyoverflow;
6256 adx 30 }
6257 db 136 *++yyssp = yystate;
6258     *++yyvsp = yyval;
6259     goto yyloop;
6260     yyoverflow:
6261     yyerror("yacc stack overflow");
6262     yyabort:
6263     return (1);
6264     yyaccept:
6265     return (0);
6266 adx 30 }

Properties

Name Value
svn:eol-style native
svn:keywords Id Revision