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


File Contents

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

Properties

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