#ifndef lint static char const yyrcsid[] = "$FreeBSD: src/usr.bin/yacc/skeleton.c,v 1.28 2000/01/17 02:04:06 bde Exp $"; #endif #include #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 #define YYLEX yylex() #define YYEMPTY -1 #define yyclearin (yychar=(YYEMPTY)) #define yyerrok (yyerrflag=0) #define YYRECOVERING() (yyerrflag!=0) static int yygrowstack(); #define YYPREFIX "yy" #line 2 "./config_parse.y" /* * The Spread Toolkit. * * The contents of this file are subject to the Spread Open-Source * License, Version 1.0 (the ``License''); you may not use * this file except in compliance with the License. You may obtain a * copy of the License at: * * http://www.spread.org/license/ * * or in the file ``license.txt'' found in this distribution. * * Software distributed under the License is distributed on an AS IS basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Creators of Spread are: * Yair Amir, Michal Miskin-Amir, Jonathan Stanton. * * Copyright (C) 1993-2002 Spread Concepts LLC * * All Rights Reserved. * * Major Contributor(s): * --------------- * Cristina Nita-Rotaru crisn@cnds.jhu.edu - group communication security. * Theo Schlossnagle jesus@omniti.com - Perl, skiplists, autoconf. * Dan Schoenblum dansch@cnds.jhu.edu - Java interface. * John Schultz jschultz@cnds.jhu.edu - contribution to process group membership. * */ #include "arch.h" #include #include #include #ifndef ARCH_PC_WIN95 #include #include #include #include #include #include #include #else /* ARCH_PC_WIN95 */ #include #endif /* ARCH_PC_WIN95 */ #include "alarm.h" #include "configuration.h" #include "skiplist.h" #include "memory.h" #include "objects.h" #include "conf_body.h" #include "acm.h" int line_num, semantic_errors; extern char *yytext; extern int yyerror(char *str); extern void yywarn(char *str); extern int yylex(); static int num_procs = 0; static int segment_procs = 0; static int segments = 0; static int rvec_num = 0; static int procs_interfaces = 0; static int authentication_configured = 0; static char *segment2str(int seg) { static char ipstr[40]; int id = Config.segments[seg].bcast_address; sprintf(ipstr, "%d.%d.%d.%d:%d", (id & 0xff000000)>>24, (id & 0xff0000)>>16, (id & 0xff00)>>8, (id & 0xff), Config.segments[seg].port); return ipstr; } static void alarm_print_proc(proc *p, int port) { if(port == p->port) Alarm(CONF, "\t%20s: %d.%d.%d.%d\n", p->name, (p->id & 0xff000000)>>24, (p->id & 0xff0000)>>16, (p->id & 0xff00)>>8, (p->id & 0xff)); else Alarm(CONF, "\t%20s: %d.%d.%d.%d:%d\n", p->name, (p->id & 0xff000000)>>24, (p->id & 0xff0000)>>16, (p->id & 0xff00)>>8, (p->id & 0xff), p->port); } static int32u name2ip(char *name) { int anip, i1, i2, i3, i4; struct hostent *host_ptr; host_ptr = gethostbyname(name); if ( host_ptr == 0) Alarm( EXIT, "Conf_init: no such host %s\n", name); memcpy(&anip, host_ptr->h_addr_list[0], sizeof(int32) ); anip = htonl( anip ); i1= ( anip & 0xff000000 ) >> 24; i2= ( anip & 0x00ff0000 ) >> 16; i3= ( anip & 0x0000ff00 ) >> 8; i4= anip & 0x000000ff; return ((i1<<24)|(i2<<16)|(i3<<8)|i4); } static void expand_filename(char *out_string, int str_size, const char *in_string) { const char *in_loc; char *out_loc; char hostn[256]; for ( in_loc = in_string, out_loc = out_string; out_loc - out_string < str_size; in_loc++ ) { if (*in_loc == '%' ) { switch( in_loc[1] ) { case 'h': case 'H': gethostname(hostn, sizeof(hostn) ); out_loc += snprintf(out_loc, str_size - (out_loc - out_string), "%s", hostn); in_loc++; continue; default: break; } } *out_loc = *in_loc; out_loc++; if (*in_loc == '\0') break; } out_string[str_size-1] = '\0'; } static int get_parsed_proc_info( char *name, proc *p ) { int i; for ( i=0; i < num_procs; i++ ) { if ( strcmp( Config_procs[i].name, name ) == 0 ) { *p = Config_procs[i]; return( i ); } } return( -1 ); } #define PROC_NAME_CHECK( stoken ) { \ char strbuf[80]; \ int ret; \ proc p; \ if ( strlen((stoken)) >= MAX_PROC_NAME ) { \ snprintf(strbuf, 80, "Too long name(%d max): %s)\n", MAX_PROC_NAME, (stoken)); \ return (yyerror(strbuf)); \ } \ ret = get_parsed_proc_info( stoken, &p ); \ if (ret >= 0) { \ snprintf(strbuf, 80, "Name not unique. name: %s equals (%s, %d.%d.%d.%d)\n", (stoken), p.name, IP1(p.id), IP2(p.id), IP3(p.id), IP4(p.id) ); \ return (yyerror(strbuf)); \ } \ } #define PROCS_CHECK( num_procs, stoken ) { \ char strbuf[80]; \ if ( (num_procs) >= MAX_PROCS_RING ) { \ snprintf(strbuf, 80, "%s (Too many daemons configured--%d max)\n", (stoken), MAX_PROCS_RING); \ return (yyerror(strbuf)); \ } \ } #define SEGMENT_CHECK( num_segments, stoken ) { \ char strbuf[80]; \ if ( (num_segments) >= MAX_SEGMENTS ) { \ snprintf(strbuf, 80, "%s (Too many segments configured--%d max)\n", (stoken), MAX_SEGMENTS); \ return( yyerror(strbuf)); \ } \ } #define SEGMENT_SIZE_CHECK( num_procs, stoken ) { \ char strbuf[80]; \ if ( (num_procs) >= MAX_PROCS_SEGMENT ) { \ snprintf(strbuf, 80, "%s (Too many daemons configured in segment--%d max)\n", (stoken), MAX_PROCS_SEGMENT); \ return( yyerror(strbuf)); \ } \ } #define INTERFACE_NUM_CHECK( num_ifs, stoken ) { \ char strbuf[80]; \ if ( (num_ifs) >= MAX_INTERFACES_PROC ) { \ snprintf(strbuf, 80, "%s (Too many interfaces configured in proc--%d max)\n", (stoken), MAX_INTERFACES_PROC); \ return( yyerror(strbuf)); \ } \ } #line 227 "y.tab.c" #define YYERRCODE 256 #define SEGMENT 257 #define EVENTLOGFILE 258 #define EVENTTIMESTAMP 259 #define EVENTPRIORITY 260 #define IPADDR 261 #define NUMBER 262 #define COLON 263 #define PDEBUG 264 #define PINFO 265 #define PWARNING 266 #define PERROR 267 #define PCRITICAL 268 #define PFATAL 269 #define OPENBRACE 270 #define CLOSEBRACE 271 #define EQUALS 272 #define STRING 273 #define DEBUGFLAGS 274 #define BANG 275 #define DDEBUG 276 #define DEXIT 277 #define DPRINT 278 #define DDATA_LINK 279 #define DNETWORK 280 #define DPROTOCOL 281 #define DSESSION 282 #define DCONF 283 #define DMEMB 284 #define DFLOW_CONTROL 285 #define DSTATUS 286 #define DEVENTS 287 #define DGROUPS 288 #define DMEMORY 289 #define DSKIPLIST 290 #define DACM 291 #define DALL 292 #define DNONE 293 #define DANGEROUSMONITOR 294 #define SOCKETPORTREUSE 295 #define RUNTIMEDIR 296 #define SPUSER 297 #define SPGROUP 298 #define ALLOWEDAUTHMETHODS 299 #define REQUIREDAUTHMETHODS 300 #define ACCESSCONTROLPOLICY 301 #define SP_BOOL 302 #define SP_TRIVAL 303 #define LINKPROTOCOL 304 #define PHOP 305 #define PTCPHOP 306 #define IMONITOR 307 #define ICLIENT 308 #define IDAEMON 309 #define ROUTEMATRIX 310 #define LINKCOST 311 const short yylhs[] = { -1, 0, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 8, 8, 9, 9, 9, 9, 11, 11, 11, 12, 12, 10, 10, 13, 4, 14, 14, 15, 15, }; const short yylen[] = { 2, 1, 2, 2, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 0, 1, 1, 1, 1, 1, 1, 5, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 2, 0, 5, 4, 2, 1, 1, 1, 1, 2, 0, 2, 0, 2, 4, 2, 0, 1, 0, }; const short yydefred[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 2, 3, 4, 0, 35, 36, 27, 28, 29, 30, 31, 32, 34, 26, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 63, 66, 64, 0, 0, 48, 49, 33, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 0, 0, 0, 25, 0, 52, 62, 55, 56, 57, 58, 60, 51, }; const short yydgoto[] = { 16, 17, 18, 19, 20, 92, 64, 48, 62, 63, 94, 104, 95, 96, 60, 67, }; const short yysindex[] = { -255, -249, -266, -239, -238, -237, -236, -235, -234, -224, -222, -221, -220, -219, -218, -242, 0, 0, -255, -255, -255, -207, -208, -170, -243, -206, -271, -199, -168, -167, -166, -165, -164, -163, -288, 0, 0, 0, 0, -162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -264, -261, -159, -162, -209, 0, 0, 0, -157, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, -248, 0, 0, -155, 0, 0, 0, 0, 0, 0, 0, 0, }; const short yyrindex[] = { 114, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 114, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -244, 0, -154, 0, 0, 0, 0, -241, -251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -251, 0, 0, -251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; const short yygindex[] = { 0, -4, 0, 0, 0, 45, 0, 0, 56, 0, -85, 0, 0, 0, 0, 0, }; #define YYTABLESIZE 311 const short yytable[] = { 68, 37, 1, 2, 3, 4, 22, 65, 98, 69, 59, 105, 21, 100, 36, 37, 38, 58, 59, 5, 61, 42, 43, 44, 45, 46, 47, 54, 35, 54, 53, 50, 53, 23, 24, 25, 26, 27, 28, 6, 7, 8, 9, 10, 11, 12, 13, 66, 29, 14, 30, 31, 32, 33, 34, 15, 59, 59, 59, 101, 102, 103, 72, 39, 49, 40, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 41, 51, 52, 53, 54, 55, 56, 57, 61, 70, 93, 5, 99, 106, 50, 97, 71, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 37, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, 0, 0, 37, 0, 0, 0, 0, 0, 37, }; const short yycheck[] = { 261, 0, 257, 258, 259, 260, 272, 271, 93, 270, 261, 96, 261, 261, 18, 19, 20, 305, 306, 274, 271, 264, 265, 266, 267, 268, 269, 271, 270, 273, 271, 302, 273, 272, 272, 272, 272, 272, 272, 294, 295, 296, 297, 298, 299, 300, 301, 311, 272, 304, 272, 272, 272, 272, 272, 310, 307, 308, 309, 307, 308, 309, 271, 270, 270, 273, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 273, 303, 273, 273, 273, 273, 273, 273, 273, 271, 270, 0, 271, 271, 271, 73, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 274, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, 304, -1, -1, -1, -1, -1, 310, }; #define YYFINAL 16 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 311 #if YYDEBUG const char * const yyname[] = { "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, 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, 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, 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, 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, 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, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"SEGMENT","EVENTLOGFILE", "EVENTTIMESTAMP","EVENTPRIORITY","IPADDR","NUMBER","COLON","PDEBUG","PINFO", "PWARNING","PERROR","PCRITICAL","PFATAL","OPENBRACE","CLOSEBRACE","EQUALS", "STRING","DEBUGFLAGS","BANG","DDEBUG","DEXIT","DPRINT","DDATA_LINK","DNETWORK", "DPROTOCOL","DSESSION","DCONF","DMEMB","DFLOW_CONTROL","DSTATUS","DEVENTS", "DGROUPS","DMEMORY","DSKIPLIST","DACM","DALL","DNONE","DANGEROUSMONITOR", "SOCKETPORTREUSE","RUNTIMEDIR","SPUSER","SPGROUP","ALLOWEDAUTHMETHODS", "REQUIREDAUTHMETHODS","ACCESSCONTROLPOLICY","SP_BOOL","SP_TRIVAL", "LINKPROTOCOL","PHOP","PTCPHOP","IMONITOR","ICLIENT","IDAEMON","ROUTEMATRIX", "LINKCOST", }; const char * const yyrule[] = { "$accept : Config", "Config : ConfigStructs", "ConfigStructs : SegmentStruct ConfigStructs", "ConfigStructs : ParamStruct ConfigStructs", "ConfigStructs : RouteStruct ConfigStructs", "ConfigStructs :", "AlarmBit : DDEBUG", "AlarmBit : DEXIT", "AlarmBit : DPRINT", "AlarmBit : DDATA_LINK", "AlarmBit : DNETWORK", "AlarmBit : DPROTOCOL", "AlarmBit : DSESSION", "AlarmBit : DCONF", "AlarmBit : DMEMB", "AlarmBit : DFLOW_CONTROL", "AlarmBit : DSTATUS", "AlarmBit : DEVENTS", "AlarmBit : DGROUPS", "AlarmBit : DMEMORY", "AlarmBit : DSKIPLIST", "AlarmBit : DACM", "AlarmBit : DALL", "AlarmBit : DNONE", "AlarmBitComp : AlarmBitComp AlarmBit", "AlarmBitComp : AlarmBitComp BANG AlarmBit", "AlarmBitComp :", "PriorityLevel : PDEBUG", "PriorityLevel : PINFO", "PriorityLevel : PWARNING", "PriorityLevel : PERROR", "PriorityLevel : PCRITICAL", "PriorityLevel : PFATAL", "ParamStruct : DEBUGFLAGS EQUALS OPENBRACE AlarmBitComp CLOSEBRACE", "ParamStruct : EVENTPRIORITY EQUALS PriorityLevel", "ParamStruct : EVENTLOGFILE EQUALS STRING", "ParamStruct : EVENTTIMESTAMP EQUALS STRING", "ParamStruct : EVENTTIMESTAMP", "ParamStruct : DANGEROUSMONITOR EQUALS SP_BOOL", "ParamStruct : SOCKETPORTREUSE EQUALS SP_TRIVAL", "ParamStruct : RUNTIMEDIR EQUALS STRING", "ParamStruct : SPUSER EQUALS STRING", "ParamStruct : SPGROUP EQUALS STRING", "ParamStruct : ALLOWEDAUTHMETHODS EQUALS STRING", "ParamStruct : REQUIREDAUTHMETHODS EQUALS STRING", "ParamStruct : ACCESSCONTROLPOLICY EQUALS STRING", "ParamStruct : LINKPROTOCOL EQUALS PHOP", "ParamStruct : LINKPROTOCOL EQUALS PTCPHOP", "SegmentStruct : SEGMENT IPADDR OPENBRACE Segmentparams CLOSEBRACE", "Segmentparams : Segmentparam Segmentparams", "Segmentparams :", "Segmentparam : STRING IPADDR OPENBRACE Interfaceparams CLOSEBRACE", "Segmentparam : STRING OPENBRACE Interfaceparams CLOSEBRACE", "Segmentparam : STRING IPADDR", "Segmentparam : STRING", "IfType : IMONITOR", "IfType : ICLIENT", "IfType : IDAEMON", "IfTypeComp : IfTypeComp IfType", "IfTypeComp :", "Interfaceparams : Interfaceparam Interfaceparams", "Interfaceparams :", "Interfaceparam : IfTypeComp IPADDR", "RouteStruct : ROUTEMATRIX OPENBRACE Routevectors CLOSEBRACE", "Routevectors : Routevectors Routevector", "Routevectors :", "Routevector : LINKCOST", "Routevector :", }; #endif #ifndef YYSTYPE typedef int YYSTYPE; #endif #if YYDEBUG #include #endif #ifdef YYSTACKSIZE #undef YYMAXDEPTH #define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 10000 #define YYMAXDEPTH 10000 #endif #endif #define YYINITSTACKSIZE 200 int yydebug; int yynerrs; int yyerrflag; int yychar; short *yyssp; YYSTYPE *yyvsp; YYSTYPE yyval; YYSTYPE yylval; short *yyss; short *yysslim; YYSTYPE *yyvs; int yystacksize; #line 585 "./config_parse.y" void yywarn(char *str) { fprintf(stderr, "-------Parse Warning-----------\n"); fprintf(stderr, "Parser warning on or before line %d\n", line_num); fprintf(stderr, "Error type; %s\n", str); fprintf(stderr, "Offending token: %s\n", yytext); } int yyerror(char *str) { fprintf(stderr, "-------------------------------------------\n"); fprintf(stderr, "Parser error on or before line %d\n", line_num); fprintf(stderr, "Error type; %s\n", str); fprintf(stderr, "Offending token: %s\n", yytext); exit(1); } #line 557 "y.tab.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack() { int newsize, i; short *newss; YYSTYPE *newvs; if ((newsize = yystacksize) == 0) newsize = YYINITSTACKSIZE; else if (newsize >= YYMAXDEPTH) return -1; else if ((newsize *= 2) > YYMAXDEPTH) newsize = YYMAXDEPTH; i = yyssp - yyss; newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) : (short *)malloc(newsize * sizeof *newss); if (newss == NULL) return -1; yyss = newss; yyssp = newss + i; newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) : (YYSTYPE *)malloc(newsize * sizeof *newvs); if (newvs == NULL) return -1; yyvs = newvs; yyvsp = newvs + i; yystacksize = newsize; yysslim = yyss + newsize - 1; return 0; } #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #ifndef YYPARSE_PARAM #if defined(__cplusplus) || __STDC__ #define YYPARSE_PARAM_ARG void #define YYPARSE_PARAM_DECL #else /* ! ANSI-C/C++ */ #define YYPARSE_PARAM_ARG #define YYPARSE_PARAM_DECL #endif /* ANSI-C/C++ */ #else /* YYPARSE_PARAM */ #ifndef YYPARSE_PARAM_TYPE #define YYPARSE_PARAM_TYPE void * #endif #if defined(__cplusplus) || __STDC__ #define YYPARSE_PARAM_ARG YYPARSE_PARAM_TYPE YYPARSE_PARAM #define YYPARSE_PARAM_DECL #else /* ! ANSI-C/C++ */ #define YYPARSE_PARAM_ARG YYPARSE_PARAM #define YYPARSE_PARAM_DECL YYPARSE_PARAM_TYPE YYPARSE_PARAM; #endif /* ANSI-C/C++ */ #endif /* ! YYPARSE_PARAM */ int yyparse (YYPARSE_PARAM_ARG) YYPARSE_PARAM_DECL { register int yym, yyn, yystate; #if YYDEBUG register const char *yys; if ((yys = getenv("YYDEBUG"))) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } #endif yynerrs = 0; yyerrflag = 0; yychar = (-1); if (yyss == NULL && yygrowstack()) goto yyoverflow; yyssp = yyss; yyvsp = yyvs; *yyssp = yystate = 0; yyloop: if ((yyn = yydefred[yystate])) goto yyreduce; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; yychar = (-1); if (yyerrflag > 0) --yyerrflag; goto yyloop; } if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag) goto yyinrecovery; #if defined(lint) || defined(__GNUC__) goto yynewerror; #endif yynewerror: yyerror("syntax error"); #if defined(lint) || defined(__GNUC__) goto yyerrlab; #endif yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; goto yyloop; } else { #if YYDEBUG if (yydebug) printf("%sdebug: error recovery discarding state %d\n", YYPREFIX, *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; --yyvsp; } } } else { if (yychar == 0) goto yyabort; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, error recovery discards token %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif yychar = (-1); goto yyloop; } yyreduce: #if YYDEBUG if (yydebug) printf("%sdebug: state %d, reducing by rule %d (%s)\n", YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; yyval = yyvsp[1-yym]; switch (yyn) { case 1: #line 226 "./config_parse.y" { Config.num_segments = segments; Num_procs = num_procs; Alarm(CONF, "Finished configuration file.\n"); } break; case 6: #line 239 "./config_parse.y" { yyval = yyvsp[0]; } break; case 7: #line 240 "./config_parse.y" { yyval = yyvsp[0]; } break; case 8: #line 241 "./config_parse.y" { yyval = yyvsp[0]; } break; case 9: #line 242 "./config_parse.y" { yyval = yyvsp[0]; } break; case 10: #line 243 "./config_parse.y" { yyval = yyvsp[0]; } break; case 11: #line 244 "./config_parse.y" { yyval = yyvsp[0]; } break; case 12: #line 245 "./config_parse.y" { yyval = yyvsp[0]; } break; case 13: #line 246 "./config_parse.y" { yyval = yyvsp[0]; } break; case 14: #line 247 "./config_parse.y" { yyval = yyvsp[0]; } break; case 15: #line 248 "./config_parse.y" { yyval = yyvsp[0]; } break; case 16: #line 249 "./config_parse.y" { yyval = yyvsp[0]; } break; case 17: #line 250 "./config_parse.y" { yyval = yyvsp[0]; } break; case 18: #line 251 "./config_parse.y" { yyval = yyvsp[0]; } break; case 19: #line 252 "./config_parse.y" { yyval = yyvsp[0]; } break; case 20: #line 253 "./config_parse.y" { yyval = yyvsp[0]; } break; case 21: #line 254 "./config_parse.y" { yyval = yyvsp[0]; } break; case 22: #line 255 "./config_parse.y" { yyval = yyvsp[0]; } break; case 23: #line 256 "./config_parse.y" { yyval = yyvsp[0]; } break; case 24: #line 260 "./config_parse.y" { yyval.mask = (yyvsp[-1].mask | yyvsp[0].mask); } break; case 25: #line 264 "./config_parse.y" { yyval.mask = (yyvsp[-2].mask & ~(yyvsp[0].mask)); } break; case 26: #line 267 "./config_parse.y" { yyval.mask = NONE; } break; case 27: #line 269 "./config_parse.y" { yyval = yyvsp[0]; } break; case 28: #line 270 "./config_parse.y" { yyval = yyvsp[0]; } break; case 29: #line 271 "./config_parse.y" { yyval = yyvsp[0]; } break; case 30: #line 272 "./config_parse.y" { yyval = yyvsp[0]; } break; case 31: #line 273 "./config_parse.y" { yyval = yyvsp[0]; } break; case 32: #line 274 "./config_parse.y" { yyval = yyvsp[0]; } break; case 33: #line 278 "./config_parse.y" { if (! Alarm_get_interactive() ) { Alarm_clear_types(ALL); Alarm_set_types(yyvsp[-1].mask); Alarm(CONF, "Set Alarm mask to: %x\n", Alarm_get_types()); } } break; case 34: #line 286 "./config_parse.y" { if (! Alarm_get_interactive() ) { Alarm_set_priority(yyvsp[0].number); } } break; case 35: #line 293 "./config_parse.y" { if (! Alarm_get_interactive() ) { char file_buf[MAXPATHLEN]; expand_filename(file_buf, MAXPATHLEN, yyvsp[0].string); Alarm_set_output(file_buf); } } break; case 36: #line 301 "./config_parse.y" { if (! Alarm_get_interactive() ) { Alarm_enable_timestamp(yyvsp[0].string); } } break; case 37: #line 307 "./config_parse.y" { if (! Alarm_get_interactive() ) { Alarm_enable_timestamp(NULL); } } break; case 38: #line 313 "./config_parse.y" { if (! Alarm_get_interactive() ) { Conf_set_dangerous_monitor_state(yyvsp[0].boolean); } } break; case 39: #line 319 "./config_parse.y" { port_reuse state; if (yyvsp[0].number == 1) { state = port_reuse_on; } else if (yyvsp[0].number == 0) { state = port_reuse_off; } else { /* Default to AUTO. */ state = port_reuse_auto; } Conf_set_port_reuse_type(state); } break; case 40: #line 337 "./config_parse.y" { Conf_set_runtime_dir(yyvsp[0].string); } break; case 41: #line 341 "./config_parse.y" { Conf_set_user(yyvsp[0].string); } break; case 42: #line 345 "./config_parse.y" { Conf_set_group(yyvsp[0].string); } break; case 43: #line 349 "./config_parse.y" { char auth_list[MAX_AUTH_LIST_LEN]; int i, len; char *c_ptr; if (!authentication_configured) { Acm_auth_set_disabled("NULL"); } authentication_configured = 1; strncpy(auth_list, yyvsp[0].string, MAX_AUTH_LIST_LEN); len = strlen(auth_list); for (i=0; i < len; ) { c_ptr = strchr(&auth_list[i], ' '); if (c_ptr != NULL) { *c_ptr = '\0'; } Acm_auth_set_enabled(&auth_list[i]); i += strlen(&auth_list[i]); i++; /* for null */ } } break; case 44: #line 373 "./config_parse.y" { char auth_list[MAX_AUTH_LIST_LEN]; int i, len; char *c_ptr; if (!authentication_configured) { Acm_auth_set_disabled("NULL"); } authentication_configured = 1; strncpy(auth_list, yyvsp[0].string, MAX_AUTH_LIST_LEN); len = strlen(auth_list); for (i=0; i < len; ) { c_ptr = strchr(&auth_list[i], ' '); if (c_ptr != NULL) { *c_ptr = '\0'; } Acm_auth_set_required(&auth_list[i]); i += strlen(&auth_list[i]); i++; /* for null */ } } break; case 45: #line 397 "./config_parse.y" { int ret; ret = Acm_acp_set_policy(yyvsp[0].string); if (!ret) { yyerror("Invalid Access Control Policy name. Make sure it is spelled right and any needed mocdules are loaded"); } } break; case 46: #line 406 "./config_parse.y" { Conf_set_link_protocol(HOP_PROT); } break; case 47: #line 410 "./config_parse.y" { Conf_set_link_protocol(TCP_PROT); } break; case 48: #line 415 "./config_parse.y" { int i; SEGMENT_CHECK( segments, inet_ntoa(yyvsp[-3].ip.addr) ); Config.segments[segments].num_procs = segment_procs; Config.segments[segments].port = yyvsp[-3].ip.port; Config.segments[segments].bcast_address = yyvsp[-3].ip.addr.s_addr; if(Config.segments[segments].port == 0) Config.segments[segments].port = DEFAULT_SPREAD_PORT; Alarm(CONF, "Successfully configured Segment %d [%s] with %d procs:\n", segments, segment2str(segments), segment_procs); for(i=(num_procs - segment_procs); i= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", YYPREFIX, *yyssp, yystate); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate; *++yyvsp = yyval; goto yyloop; yyoverflow: yyerror("yacc stack overflow"); yyabort: return (1); yyaccept: return (0); }