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 $
34 * $DragonFly: src/usr.sbin/i4b/isdnd/rc_parse.y,v 1.2 2003/06/17 04:29:54 dillon Exp $
36 * last edit-date: [Fri Jul 20 19:14:23 2001]
38 *---------------------------------------------------------------------------*/
42 /* #define YYDEBUG 1 */
48 #include "monitor.h" /* monitor access rights bit definitions */
59 extern
void cfg_setval
(int keyword
);
60 extern
void cfg_set_controller_default
();
61 extern
void reset_scanner
(FILE *infile
);
62 extern
void yyerror(const char *msg
);
71 int controllercount
= -1;
83 %token BUDGETCALLOUTPERIOD
84 %token BUDGETCALLOUTNCALLS
85 %token BUDGETCALLOUTSFILE
86 %token BUDGETCALLOUTSFILEROTATE
87 %token BUDGETCALLBACKPERIOD
88 %token BUDGETCALLBACKNCALLS
89 %token BUDGETCALLBACKSFILE
90 %token BUDGETCALLBACKSFILEROTATE
103 %token DISCONNECTPROG
116 %token ISDNCONTROLLER
120 %token LOCAL_PHONE_DIALOUT
121 %token LOCAL_PHONE_INCOMING
125 %token MAXCONNECTTIME
134 %token PPP_AUTH_RECHALLENGE
135 %token PPP_AUTH_PARANOID
136 %token PPP_EXPECT_AUTH
137 %token PPP_EXPECT_NAME
138 %token PPP_EXPECT_PASSWORD
141 %token PPP_SEND_PASSWORD
149 %token REMOTE_NUMBERS_HANDLING
150 %token REMOTE_PHONE_DIALOUT
151 %token REMOTE_PHONE_INCOMING
167 %token
<str
> NUMBERSTR
171 %type
<booln
> boolean
173 %type
<num
> sysfilekeyword sysnumkeyword sysstrkeyword sysboolkeyword
174 %type
<num
> filekeyword numkeyword strkeyword boolkeyword monrights monright
175 %type
<num
> cstrkeyword cfilekeyword
189 sections: possible_nullentries
195 possible_nullentries:
197 | possible_nullentries
error '\n'
198 | possible_nullentries nullentry
204 entrysects: entrysect
205 | entrysects entrysect
212 cfg_set_controller_default
();
216 controllersects: controllersect
217 | controllersects controllersect
224 syssect: SYSTEM sysentries
230 monitor_clear_rights
();
232 | sysentries sysentry
235 sysentry: sysfileentry
247 MONITOR
'=' STRING
'\n'
250 switch
(monitor_start_rights
($3)) {
254 err
= "local socket name too long: %s";
257 err
= "duplicate entry: %s";
260 err
= "invalid CIDR specification: %s";
263 err
= "could not resolve host or net specification: %s";
268 snprintf
(msg
, sizeof msg
, err
, $3);
275 MONITORACCESS
'=' monrights
'\n'
276 { monitor_add_rights
($3); }
279 monrights: monrights
',' monright
{ $$
= $1 |
$3; }
280 | monright
{ $$
= $1; }
283 monright: FULLCMD
{ $$
= I4B_CA_COMMAND_FULL
; }
284 | RESTRICTEDCMD
{ $$
= I4B_CA_COMMAND_RESTRICTED
; }
285 | CHANNELSTATE
{ $$
= I4B_CA_EVNT_CHANSTATE
; }
286 | CALLIN
{ $$
= I4B_CA_EVNT_CALLIN
; }
287 | CALLOUT
{ $$
= I4B_CA_EVNT_CALLOUT
; }
288 | LOGEVENTS
{ $$
= I4B_CA_EVNT_I4B
; }
291 sysfileentry: sysfilekeyword
'=' filename
'\n'
297 sysboolentry: sysboolkeyword
'=' boolean
'\n'
304 sysnumentry: sysnumkeyword
'=' NUMBERSTR
'\n'
306 yylval.num
= atoi
($3);
311 sysstrentry: sysstrkeyword
'=' STRING
'\n'
315 | sysstrkeyword
'=' NUMBERSTR
'\n'
324 yyerror("filename doesn't start with a slash");
331 boolean: NO
{ $$
= FALSE
; }
332 | OFF
{ $$
= FALSE
; }
337 sysfilekeyword: RATESFILE
{ $$
= RATESFILE
; }
338 | ACCTFILE
{ $$
= ACCTFILE
; }
339 | ALIASFNAME
{ $$
= ALIASFNAME
; }
340 | HOLIDAYFILE
{ $$
= HOLIDAYFILE
; }
341 | TINAINITPROG
{ $$
= TINAINITPROG
; }
344 sysboolkeyword: USEACCTFILE
{ $$
= USEACCTFILE
; }
345 | ALIASING
{ $$
= ALIASING
; }
346 | ACCTALL
{ $$
= ACCTALL
; }
347 | BEEPCONNECT
{ $$
= BEEPCONNECT
; }
348 | EXTCALLATTR
{ $$
= EXTCALLATTR
; }
349 | ISDNTIME
{ $$
= ISDNTIME
; }
350 | MONITORSW
{ $$
= MONITORSW
; }
353 sysnumkeyword: MONITORPORT
{ $$
= MONITORPORT
; }
354 | RTPRIO
{ $$
= RTPRIO
; }
357 sysstrkeyword: MAILER
{ $$
= MAILER
; }
358 | MAILTO
{ $$
= MAILTO
; }
359 | ROTATESUFFIX
{ $$
= ROTATESUFFIX
; }
360 | REGEXPR
{ $$
= REGEXPR
; }
361 | REGPROG
{ $$
= REGPROG
; }
388 fileentry: filekeyword
'=' filename
'\n'
395 strentry: strkeyword
'=' STRING
'\n'
399 | strkeyword
'=' NUMBERSTR
'\n'
405 boolentry: boolkeyword
'=' boolean
'\n'
412 numentry: numkeyword
'=' NUMBERSTR
'\n'
414 yylval.num
= atoi
($3);
419 filekeyword: BUDGETCALLBACKSFILE
{ $$
= BUDGETCALLBACKSFILE
; }
420 | BUDGETCALLOUTSFILE
{ $$
= BUDGETCALLOUTSFILE
; }
423 strkeyword: ANSWERPROG
{ $$
= ANSWERPROG
; }
424 | B1PROTOCOL
{ $$
= B1PROTOCOL
; }
425 | CONNECTPROG
{ $$
= CONNECTPROG
; }
426 | DIALOUTTYPE
{ $$
= DIALOUTTYPE
; }
427 | DIRECTION
{ $$
= DIRECTION
; }
428 | DISCONNECTPROG
{ $$
= DISCONNECTPROG
; }
429 | IDLE_ALG_OUT
{ $$
= IDLE_ALG_OUT
; }
430 | LOCAL_PHONE_INCOMING
{ $$
= LOCAL_PHONE_INCOMING
; }
431 | LOCAL_PHONE_DIALOUT
{ $$
= LOCAL_PHONE_DIALOUT
; }
432 | NAME
{ $$
= NAME
; }
433 | PPP_EXPECT_AUTH
{ $$
= PPP_EXPECT_AUTH
; }
434 | PPP_EXPECT_NAME
{ $$
= PPP_EXPECT_NAME
; }
435 | PPP_EXPECT_PASSWORD
{ $$
= PPP_EXPECT_PASSWORD
; }
436 | PPP_SEND_AUTH
{ $$
= PPP_SEND_AUTH
; }
437 | PPP_SEND_NAME
{ $$
= PPP_SEND_NAME
; }
438 | PPP_SEND_PASSWORD
{ $$
= PPP_SEND_PASSWORD
; }
439 | REACTION
{ $$
= REACTION
; }
440 | REMOTE_NUMBERS_HANDLING
{ $$
= REMOTE_NUMBERS_HANDLING
; }
441 | REMOTE_PHONE_INCOMING
{ $$
= REMOTE_PHONE_INCOMING
; }
442 | REMOTE_PHONE_DIALOUT
{ $$
= REMOTE_PHONE_DIALOUT
; }
443 | UNITLENGTHSRC
{ $$
= UNITLENGTHSRC
; }
444 | USRDEVICENAME
{ $$
= USRDEVICENAME
; }
445 | VALID
{ $$
= VALID
; }
446 | CLONE
{ $$
= CLONE
; }
449 numkeyword: ALERT
{ $$
= ALERT
; }
450 | BUDGETCALLBACKPERIOD
{ $$
= BUDGETCALLBACKPERIOD
; }
451 | BUDGETCALLBACKNCALLS
{ $$
= BUDGETCALLBACKNCALLS
; }
452 | BUDGETCALLOUTPERIOD
{ $$
= BUDGETCALLOUTPERIOD
; }
453 | BUDGETCALLOUTNCALLS
{ $$
= BUDGETCALLOUTNCALLS
; }
454 | CALLBACKWAIT
{ $$
= CALLBACKWAIT
; }
455 | CALLEDBACKWAIT
{ $$
= CALLEDBACKWAIT
; }
456 | DIALRETRIES
{ $$
= DIALRETRIES
; }
457 | EARLYHANGUP
{ $$
= EARLYHANGUP
; }
458 | IDLETIME_IN
{ $$
= IDLETIME_IN
; }
459 | IDLETIME_OUT
{ $$
= IDLETIME_OUT
; }
460 | ISDNCONTROLLER
{ $$
= ISDNCONTROLLER
; }
461 | ISDNCHANNEL
{ $$
= ISDNCHANNEL
; }
462 | ISDNTXDELIN
{ $$
= ISDNTXDELIN
; }
463 | ISDNTXDELOUT
{ $$
= ISDNTXDELOUT
; }
464 | RATETYPE
{ $$
= RATETYPE
; }
465 | RECOVERYTIME
{ $$
= RECOVERYTIME
; }
466 | UNITLENGTH
{ $$
= UNITLENGTH
; }
467 | USRDEVICEUNIT
{ $$
= USRDEVICEUNIT
; }
468 | DOWNTIME
{ $$
= DOWNTIME
; }
469 | DOWNTRIES
{ $$
= DOWNTRIES
; }
470 | MAXCONNECTTIME
{ $$
= MAXCONNECTTIME
; }
473 boolkeyword: BUDGETCALLBACKSFILEROTATE
{ $$
= BUDGETCALLBACKSFILEROTATE
; }
474 | BUDGETCALLOUTSFILEROTATE
{ $$
= BUDGETCALLOUTSFILEROTATE
; }
475 | DIALRANDINCR
{ $$
= DIALRANDINCR
; }
476 | PPP_AUTH_RECHALLENGE
{ $$
= PPP_AUTH_RECHALLENGE
; }
477 | PPP_AUTH_PARANOID
{ $$
= PPP_AUTH_PARANOID
; }
478 | USEDOWN
{ $$
= USEDOWN
; }
481 /* ================== */
482 /* controller section */
483 /* ================== */
485 controllersect: CONTROLLER
492 controllers: controller
493 | controllers controller
496 controller: strcontroller
501 strcontroller: cstrkeyword
'=' STRING
'\n'
505 | cstrkeyword
'=' NUMBERSTR
'\n'
509 | cfilekeyword
'=' filename
'\n'
515 cstrkeyword: PROTOCOL
{ $$
= PROTOCOL
; }
518 cfilekeyword: FIRMWARE
{ $$
= FIRMWARE
; }