2 * Copyright (c) 1997 Joerg Wunsch. All rights reserved.
4 * Copyright (c) 1997, 2001 Hellmuth Michaelis. All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 *---------------------------------------------------------------------------
30 * i4b daemon - runtime configuration parser
31 * -----------------------------------------
33 * $FreeBSD: src/usr.sbin/i4b/isdnd/rc_parse.y,v 1.6.2.2 2001/08/10 23:17:32 obrien Exp $
35 * last edit-date: [Fri Jul 20 19:14:23 2001]
37 *---------------------------------------------------------------------------*/
41 /* #define YYDEBUG 1 */
47 #include "monitor.h" /* monitor access rights bit definitions */
58 extern void cfg_setval(int keyword);
59 extern void cfg_set_controller_default();
60 extern void reset_scanner(FILE *infile);
61 extern void yyerror(const char *msg);
70 int controllercount = -1;
82 %token BUDGETCALLOUTPERIOD
83 %token BUDGETCALLOUTNCALLS
84 %token BUDGETCALLOUTSFILE
85 %token BUDGETCALLOUTSFILEROTATE
86 %token BUDGETCALLBACKPERIOD
87 %token BUDGETCALLBACKNCALLS
88 %token BUDGETCALLBACKSFILE
89 %token BUDGETCALLBACKSFILEROTATE
102 %token DISCONNECTPROG
115 %token ISDNCONTROLLER
119 %token LOCAL_PHONE_DIALOUT
120 %token LOCAL_PHONE_INCOMING
124 %token MAXCONNECTTIME
133 %token PPP_AUTH_RECHALLENGE
134 %token PPP_AUTH_PARANOID
135 %token PPP_EXPECT_AUTH
136 %token PPP_EXPECT_NAME
137 %token PPP_EXPECT_PASSWORD
140 %token PPP_SEND_PASSWORD
148 %token REMOTE_NUMBERS_HANDLING
149 %token REMOTE_PHONE_DIALOUT
150 %token REMOTE_PHONE_INCOMING
166 %token <str> NUMBERSTR
170 %type <booln> boolean
172 %type <num> sysfilekeyword sysnumkeyword sysstrkeyword sysboolkeyword
173 %type <num> filekeyword numkeyword strkeyword boolkeyword monrights monright
174 %type <num> cstrkeyword cfilekeyword
188 sections: possible_nullentries
194 possible_nullentries:
196 | possible_nullentries error '\n'
197 | possible_nullentries nullentry
203 entrysects: entrysect
204 | entrysects entrysect
211 cfg_set_controller_default();
215 controllersects: controllersect
216 | controllersects controllersect
223 syssect: SYSTEM sysentries
229 monitor_clear_rights();
231 | sysentries sysentry
234 sysentry: sysfileentry
246 MONITOR '=' STRING '\n'
249 switch (monitor_start_rights($3)) {
253 err = "local socket name too long: %s";
256 err = "duplicate entry: %s";
259 err = "invalid CIDR specification: %s";
262 err = "could not resolve host or net specification: %s";
267 snprintf(msg, sizeof msg, err, $3);
274 MONITORACCESS '=' monrights '\n'
275 { monitor_add_rights($3); }
278 monrights: monrights ',' monright { $$ = $1 | $3; }
279 | monright { $$ = $1; }
282 monright: FULLCMD { $$ = I4B_CA_COMMAND_FULL; }
283 | RESTRICTEDCMD { $$ = I4B_CA_COMMAND_RESTRICTED; }
284 | CHANNELSTATE { $$ = I4B_CA_EVNT_CHANSTATE; }
285 | CALLIN { $$ = I4B_CA_EVNT_CALLIN; }
286 | CALLOUT { $$ = I4B_CA_EVNT_CALLOUT; }
287 | LOGEVENTS { $$ = I4B_CA_EVNT_I4B; }
290 sysfileentry: sysfilekeyword '=' filename '\n'
296 sysboolentry: sysboolkeyword '=' boolean '\n'
303 sysnumentry: sysnumkeyword '=' NUMBERSTR '\n'
305 yylval.num = atoi($3);
310 sysstrentry: sysstrkeyword '=' STRING '\n'
314 | sysstrkeyword '=' NUMBERSTR '\n'
323 yyerror("filename doesn't start with a slash");
330 boolean: NO { $$ = FALSE; }
331 | OFF { $$ = FALSE; }
336 sysfilekeyword: RATESFILE { $$ = RATESFILE; }
337 | ACCTFILE { $$ = ACCTFILE; }
338 | ALIASFNAME { $$ = ALIASFNAME; }
339 | HOLIDAYFILE { $$ = HOLIDAYFILE; }
340 | TINAINITPROG { $$ = TINAINITPROG; }
343 sysboolkeyword: USEACCTFILE { $$ = USEACCTFILE; }
344 | ALIASING { $$ = ALIASING; }
345 | ACCTALL { $$ = ACCTALL; }
346 | BEEPCONNECT { $$ = BEEPCONNECT; }
347 | EXTCALLATTR { $$ = EXTCALLATTR; }
348 | ISDNTIME { $$ = ISDNTIME; }
349 | MONITORSW { $$ = MONITORSW; }
352 sysnumkeyword: MONITORPORT { $$ = MONITORPORT; }
353 | RTPRIO { $$ = RTPRIO; }
356 sysstrkeyword: MAILER { $$ = MAILER; }
357 | MAILTO { $$ = MAILTO; }
358 | ROTATESUFFIX { $$ = ROTATESUFFIX; }
359 | REGEXPR { $$ = REGEXPR; }
360 | REGPROG { $$ = REGPROG; }
387 fileentry: filekeyword '=' filename '\n'
394 strentry: strkeyword '=' STRING '\n'
398 | strkeyword '=' NUMBERSTR '\n'
404 boolentry: boolkeyword '=' boolean '\n'
411 numentry: numkeyword '=' NUMBERSTR '\n'
413 yylval.num = atoi($3);
418 filekeyword: BUDGETCALLBACKSFILE { $$ = BUDGETCALLBACKSFILE; }
419 | BUDGETCALLOUTSFILE { $$ = BUDGETCALLOUTSFILE; }
422 strkeyword: ANSWERPROG { $$ = ANSWERPROG; }
423 | B1PROTOCOL { $$ = B1PROTOCOL; }
424 | CONNECTPROG { $$ = CONNECTPROG; }
425 | DIALOUTTYPE { $$ = DIALOUTTYPE; }
426 | DIRECTION { $$ = DIRECTION; }
427 | DISCONNECTPROG { $$ = DISCONNECTPROG; }
428 | IDLE_ALG_OUT { $$ = IDLE_ALG_OUT; }
429 | LOCAL_PHONE_INCOMING { $$ = LOCAL_PHONE_INCOMING; }
430 | LOCAL_PHONE_DIALOUT { $$ = LOCAL_PHONE_DIALOUT; }
431 | NAME { $$ = NAME; }
432 | PPP_EXPECT_AUTH { $$ = PPP_EXPECT_AUTH; }
433 | PPP_EXPECT_NAME { $$ = PPP_EXPECT_NAME; }
434 | PPP_EXPECT_PASSWORD { $$ = PPP_EXPECT_PASSWORD; }
435 | PPP_SEND_AUTH { $$ = PPP_SEND_AUTH; }
436 | PPP_SEND_NAME { $$ = PPP_SEND_NAME; }
437 | PPP_SEND_PASSWORD { $$ = PPP_SEND_PASSWORD; }
438 | REACTION { $$ = REACTION; }
439 | REMOTE_NUMBERS_HANDLING { $$ = REMOTE_NUMBERS_HANDLING; }
440 | REMOTE_PHONE_INCOMING { $$ = REMOTE_PHONE_INCOMING; }
441 | REMOTE_PHONE_DIALOUT { $$ = REMOTE_PHONE_DIALOUT; }
442 | UNITLENGTHSRC { $$ = UNITLENGTHSRC; }
443 | USRDEVICENAME { $$ = USRDEVICENAME; }
444 | VALID { $$ = VALID; }
445 | CLONE { $$ = CLONE; }
448 numkeyword: ALERT { $$ = ALERT; }
449 | BUDGETCALLBACKPERIOD { $$ = BUDGETCALLBACKPERIOD; }
450 | BUDGETCALLBACKNCALLS { $$ = BUDGETCALLBACKNCALLS; }
451 | BUDGETCALLOUTPERIOD { $$ = BUDGETCALLOUTPERIOD; }
452 | BUDGETCALLOUTNCALLS { $$ = BUDGETCALLOUTNCALLS; }
453 | CALLBACKWAIT { $$ = CALLBACKWAIT; }
454 | CALLEDBACKWAIT { $$ = CALLEDBACKWAIT; }
455 | DIALRETRIES { $$ = DIALRETRIES; }
456 | EARLYHANGUP { $$ = EARLYHANGUP; }
457 | IDLETIME_IN { $$ = IDLETIME_IN; }
458 | IDLETIME_OUT { $$ = IDLETIME_OUT; }
459 | ISDNCONTROLLER { $$ = ISDNCONTROLLER; }
460 | ISDNCHANNEL { $$ = ISDNCHANNEL; }
461 | ISDNTXDELIN { $$ = ISDNTXDELIN; }
462 | ISDNTXDELOUT { $$ = ISDNTXDELOUT; }
463 | RATETYPE { $$ = RATETYPE; }
464 | RECOVERYTIME { $$ = RECOVERYTIME; }
465 | UNITLENGTH { $$ = UNITLENGTH; }
466 | USRDEVICEUNIT { $$ = USRDEVICEUNIT; }
467 | DOWNTIME { $$ = DOWNTIME; }
468 | DOWNTRIES { $$ = DOWNTRIES; }
469 | MAXCONNECTTIME { $$ = MAXCONNECTTIME; }
472 boolkeyword: BUDGETCALLBACKSFILEROTATE { $$ = BUDGETCALLBACKSFILEROTATE; }
473 | BUDGETCALLOUTSFILEROTATE { $$ = BUDGETCALLOUTSFILEROTATE; }
474 | DIALRANDINCR { $$ = DIALRANDINCR; }
475 | PPP_AUTH_RECHALLENGE { $$ = PPP_AUTH_RECHALLENGE; }
476 | PPP_AUTH_PARANOID { $$ = PPP_AUTH_PARANOID; }
477 | USEDOWN { $$ = USEDOWN; }
480 /* ================== */
481 /* controller section */
482 /* ================== */
484 controllersect: CONTROLLER
491 controllers: controller
492 | controllers controller
495 controller: strcontroller
500 strcontroller: cstrkeyword '=' STRING '\n'
504 | cstrkeyword '=' NUMBERSTR '\n'
508 | cfilekeyword '=' filename '\n'
514 cstrkeyword: PROTOCOL { $$ = PROTOCOL; }
517 cfilekeyword: FIRMWARE { $$ = FIRMWARE; }