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

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

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

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

And lo, there was a great rejoicing.


File Contents

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

Properties

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