ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/src/y.tab.c
Revision: 126
Committed: Fri Oct 14 02:41:46 2005 UTC (20 years, 10 months ago) by db
Content type: text/x-csrc
File size: 176687 byte(s)
Log Message:
- attach/conf cleanup take 2
- Each client has now one AccessItem for its connect
  stored in localClient->iline
- The corresponding class is now stored in localClient->class

The ramifications of this move are, there is no conf list to traverse
to find the AccessItem, the class is instantly available from the localClient
struct without having to traverse the confs list and indirectly through the
aconf. This speeds up get_sendq etc. functions. As a bonus, at least
4 fewer bytes are used in the Client struct, since a dlink list is 4 words.
It does mean there is no longer a separate conf oper, which leads to the
kludge of patching the clients iline into an oper conf when
a client opers up. I don't think the oper flags are used after the client
is opered, so the patching operation may not be necessary.

- Server confs are stored in ->serv->sconf as before but attaching
  happens much earlier.
- server hub/leaf masks continues to be a dlink list but linked from
  the ->serv which is only allocated for servers.

- cleaned up some comments, added a comment, notably to check_server()
  which badly needed it.
- Pass ClassItem or AccessItem etc. in when it makes more sense than passing
  in struct ConfItem. This simplified and clarified rebuild_cidr_class()

And lo, there was a great rejoicing.


File Contents

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

Properties

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