1c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh/*	$NetBSD: cftoken.l,v 1.11.4.2 2007/09/03 18:07:29 mgrooms Exp $	*/
20a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
30a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* Id: cftoken.l,v 1.53 2006/08/22 18:17:17 manubsd Exp */
40a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
50a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%{
60a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/*
70a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 and 2003 WIDE Project.
80a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * All rights reserved.
90a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *
100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * Redistribution and use in source and binary forms, with or without
110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * modification, are permitted provided that the following conditions
120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * are met:
130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 1. Redistributions of source code must retain the above copyright
140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *    notice, this list of conditions and the following disclaimer.
150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 2. Redistributions in binary form must reproduce the above copyright
160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *    notice, this list of conditions and the following disclaimer in the
170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *    documentation and/or other materials provided with the distribution.
180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 3. Neither the name of the project nor the names of its contributors
190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *    may be used to endorse or promote products derived from this software
200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *    without specific prior written permission.
210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *
220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * SUCH DAMAGE.
330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang */
340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "config.h"
360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/types.h>
380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/param.h>
390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/socket.h>
400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <netinet/in.h>
420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include PATH_IPSEC_H
430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <stdlib.h>
450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <stdio.h>
460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <string.h>
470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <errno.h>
480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <limits.h>
490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <ctype.h>
500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <glob.h>
510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef HAVE_STDARG_H
520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <stdarg.h>
530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <varargs.h>
550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "var.h"
580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "misc.h"
590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "vmbuf.h"
600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "plog.h"
610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "debug.h"
620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "algorithm.h"
640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "cfparse_proto.h"
650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "cftoken_proto.h"
660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "localconf.h"
670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "oakley.h"
680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "isakmp_var.h"
690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "isakmp.h"
700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "ipsec_doi.h"
710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "policy.h"
720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "proposal.h"
730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "remoteconf.h"
740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef GC
750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "gcmalloc.h"
760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "cfparse.h"
790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint yyerrorcount = 0;
810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#if defined(YIPS_DEBUG)
830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#  define YYDB plog(LLV_DEBUG2, LOCATION, NULL,                                \
840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		"begin <%d>%s\n", yy_start, yytext);
850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#  define YYD {                                                                \
860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	plog(LLV_DEBUG2, LOCATION, NULL, "<%d>%s",                             \
870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    yy_start, loglevel >= LLV_DEBUG2 ? "\n" : "");                     \
880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#  define YYDB
910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#  define YYD
920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif /* defined(YIPS_DEBUG) */
930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define MAX_INCLUDE_DEPTH 10
950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic struct include_stack {
970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	char *path;
980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	FILE *fp;
990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	YY_BUFFER_STATE prevstate;
1000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	int lineno;
1010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	glob_t matches;
1020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	int matchon;
1030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} incstack[MAX_INCLUDE_DEPTH];
1040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic int incstackp = 0;
1050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic int yy_first_time = 1;
1070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%}
1080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* common seciton */
1100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangnl		\n
1110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangws		[ \t]+
1120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdigit		[0-9]
1130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangletter		[A-Za-z]
1140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghexdigit	[0-9A-Fa-f]
1150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/*octet		(([01]?{digit}?{digit})|((2([0-4]{digit}))|(25[0-5]))) */
1160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangspecial		[()+\|\?\*]
1170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangcomma		\,
1180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdot		\.
1190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangslash		\/
1200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangbcl		\{
1210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangecl		\}
1220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangblcl		\[
1230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangelcl		\]
1240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghyphen          \-
1250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangpercent		\%
1260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangsemi		\;
1270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangcomment		\#.*
1280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangccomment	"/*"
1290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangbracketstring	\<[^>]*\>
1300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangquotedstring	\"[^"]*\"
1310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangaddrstring	[a-fA-F0-9:]([a-fA-F0-9:\.]*|[a-fA-F0-9:\.]*%[a-zA-Z0-9]*)
1320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdecstring	{digit}+
1330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghexstring	0x{hexdigit}+
1340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
135c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh%s S_INI S_PRIV S_PTH S_INF S_LOG S_PAD S_LST S_RTRY S_CFG S_LDAP
1360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%s S_ALGST S_ALGCL
1370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%s S_SAINF S_SAINFS
1380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%s S_RMT S_RMTS S_RMTP
1390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%s S_SA
1400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%s S_GSSENC
1410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%%
1430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%{
1440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (yy_first_time) {
1450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		BEGIN S_INI;
1460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		yy_first_time = 0;
1470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
1480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%}
1490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* privsep */
1510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_INI>privsep		{ BEGIN S_PRIV; YYDB; return(PRIVSEP); }
1520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PRIV>{bcl}		{ return(BOC); }
1530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PRIV>user		{ YYD; return(USER); }
1540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PRIV>group		{ YYD; return(GROUP); }
1550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PRIV>chroot		{ YYD; return(CHROOT); }
1560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PRIV>{ecl}		{ BEGIN S_INI; return(EOC); }
1570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* path */
1590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_INI>path		{ BEGIN S_PTH; YYDB; return(PATH); }
1600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PTH>include		{ YYD; yylval.num = LC_PATHTYPE_INCLUDE;
1610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				return(PATHTYPE); }
1620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PTH>pre_shared_key	{ YYD; yylval.num = LC_PATHTYPE_PSK;
1630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				return(PATHTYPE); }
1640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PTH>certificate	{ YYD; yylval.num = LC_PATHTYPE_CERT;
1650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				return(PATHTYPE); }
1660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PTH>script		{ YYD; yylval.num = LC_PATHTYPE_SCRIPT;
1670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				return(PATHTYPE); }
1680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PTH>backupsa		{ YYD; yylval.num = LC_PATHTYPE_BACKUPSA;
1690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				return(PATHTYPE); }
1700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PTH>pidfile		{ YYD; yylval.num = LC_PATHTYPE_PIDFILE;
1710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				return(PATHTYPE); }
1720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PTH>{semi}		{ BEGIN S_INI; YYDB; return(EOS); }
1730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* include */
1750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_INI>include		{ YYDB; return(INCLUDE); }
1760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
177c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh	/* self information */
178c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh<S_INI>identifier	{ BEGIN S_INF; YYDB; yywarn("it is obsoleted.  use \"my_identifier\" in each remote directives."); return(IDENTIFIER); }
179c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh<S_INF>{semi}		{ BEGIN S_INI; return(EOS); }
1800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* special */
1820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_INI>complex_bundle	{ YYDB; return(COMPLEX_BUNDLE); }
1830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* logging */
1850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_INI>log		{ BEGIN S_LOG; YYDB; return(LOGGING); }
1860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LOG>error		{ YYD; yylval.num = LLV_ERROR; return(LOGLEV); }
1870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LOG>warning		{ YYD; yylval.num = LLV_WARNING; return(LOGLEV); }
1880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LOG>notify		{ YYD; yylval.num = LLV_NOTIFY; return(LOGLEV); }
1890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LOG>info		{ YYD; yylval.num = LLV_INFO; return(LOGLEV); }
1900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LOG>debug		{ YYD; yylval.num = LLV_DEBUG; return(LOGLEV); }
1910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LOG>debug2		{ YYD; yylval.num = LLV_DEBUG2; return(LOGLEV); }
192c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh<S_LOG>debug3		{ YYD; yywarn("it is obsoleted.  use \"debug2\""); yylval.num = LLV_DEBUG2; return(LOGLEV); }
193c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh<S_LOG>debug4		{ YYD; yywarn("it is obsoleted.  use \"debug2\""); yylval.num = LLV_DEBUG2; return(LOGLEV); }
1940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LOG>{semi}		{ BEGIN S_INI; return(EOS); }
1950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* padding */
1970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_INI>padding		{ BEGIN S_PAD; YYDB; return(PADDING); }
1980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PAD>{bcl}		{ return(BOC); }
1990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PAD>randomize	{ YYD; return(PAD_RANDOMIZE); }
2000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PAD>randomize_length	{ YYD; return(PAD_RANDOMIZELEN); }
2010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PAD>maximum_length	{ YYD; return(PAD_MAXLEN); }
2020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PAD>strict_check	{ YYD; return(PAD_STRICT); }
2030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PAD>exclusive_tail	{ YYD; return(PAD_EXCLTAIL); }
2040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_PAD>{ecl}		{ BEGIN S_INI; return(EOC); }
2050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* listen */
2070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_INI>listen		{ BEGIN S_LST; YYDB; return(LISTEN); }
2080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LST>{bcl}		{ return(BOC); }
2090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LST>isakmp		{ YYD; return(X_ISAKMP); }
2100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LST>isakmp_natt	{ YYD; return(X_ISAKMP_NATT); }
2110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LST>admin		{ YYD; return(X_ADMIN); }
2120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LST>adminsock	{ YYD; return(ADMINSOCK); }
2130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LST>disabled		{ YYD; return(DISABLED); }
2140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LST>strict_address	{ YYD; return(STRICT_ADDRESS); }
2150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LST>{ecl}		{ BEGIN S_INI; return(EOC); }
2160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* ldap config */
2180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_INI>ldapcfg		{ BEGIN S_LDAP; YYDB; return(LDAPCFG); }
2190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LDAP>{bcl}		{ return(BOC); }
2200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LDAP>version		{ YYD; return(LDAP_PVER); }
2210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LDAP>host		{ YYD; return(LDAP_HOST); }
2220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LDAP>port		{ YYD; return(LDAP_PORT); }
2230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LDAP>base		{ YYD; return(LDAP_BASE); }
2240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LDAP>subtree		{ YYD; return(LDAP_SUBTREE); }
2250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LDAP>bind_dn		{ YYD; return(LDAP_BIND_DN); }
2260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LDAP>bind_pw		{ YYD; return(LDAP_BIND_PW); }
2270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LDAP>attr_user	{ YYD; return(LDAP_ATTR_USER); }
2280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LDAP>attr_addr	{ YYD; return(LDAP_ATTR_ADDR); }
2290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LDAP>attr_mask	{ YYD; return(LDAP_ATTR_MASK); }
2300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LDAP>attr_group	{ YYD; return(LDAP_ATTR_GROUP); }
2310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LDAP>attr_member	{ YYD; return(LDAP_ATTR_MEMBER); }
2320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_LDAP>{ecl}		{ BEGIN S_INI; return(EOC); }
2330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* mode_cfg */
2350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_INI>mode_cfg		{ BEGIN S_CFG; YYDB; return(MODECFG); }
2360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>{bcl}		{ return(BOC); }
2370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>network4		{ YYD; return(CFG_NET4); }
2380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>netmask4		{ YYD; return(CFG_MASK4); }
2390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>dns4		{ YYD; return(CFG_DNS4); }
2400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>nbns4		{ YYD; return(CFG_NBNS4); }
2410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>wins4		{ YYD; return(CFG_NBNS4); }
2420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>default_domain	{ YYD; return(CFG_DEFAULT_DOMAIN); }
2430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>auth_source	{ YYD; return(CFG_AUTH_SOURCE); }
2440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>auth_groups	{ YYD; return(CFG_AUTH_GROUPS); }
2450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>group_source	{ YYD; return(CFG_GROUP_SOURCE); }
2460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>conf_source	{ YYD; return(CFG_CONF_SOURCE); }
2470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>accounting	{ YYD; return(CFG_ACCOUNTING); }
2480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>system		{ YYD; return(CFG_SYSTEM); }
2490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>local		{ YYD; return(CFG_LOCAL); }
2500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>none		{ YYD; return(CFG_NONE); }
2510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>radius		{ YYD; return(CFG_RADIUS); }
2520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>pam		{ YYD; return(CFG_PAM); }
2530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>ldap		{ YYD; return(CFG_LDAP); }
2540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>pool_size	{ YYD; return(CFG_POOL_SIZE); }
2550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>banner		{ YYD; return(CFG_MOTD); }
2560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>auth_throttle	{ YYD; return(CFG_AUTH_THROTTLE); }
2570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>split_network	{ YYD; return(CFG_SPLIT_NETWORK); }
2580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>local_lan	{ YYD; return(CFG_SPLIT_LOCAL); }
2590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>include		{ YYD; return(CFG_SPLIT_INCLUDE); }
2600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>split_dns	{ YYD; return(CFG_SPLIT_DNS); }
2610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>pfs_group	{ YYD; return(CFG_PFS_GROUP); }
2620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>save_passwd	{ YYD; return(CFG_SAVE_PASSWD); }
2630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>{comma}		{ YYD; return(COMMA); }
2640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_CFG>{ecl}		{ BEGIN S_INI; return(EOC); }
2650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* timer */
2670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_INI>timer		{ BEGIN S_RTRY; YYDB; return(RETRY); }
2680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RTRY>{bcl}		{ return(BOC); }
2690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RTRY>counter		{ YYD; return(RETRY_COUNTER); }
2700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RTRY>interval	{ YYD; return(RETRY_INTERVAL); }
2710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RTRY>persend		{ YYD; return(RETRY_PERSEND); }
2720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RTRY>phase1		{ YYD; return(RETRY_PHASE1); }
2730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RTRY>phase2		{ YYD; return(RETRY_PHASE2); }
2740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RTRY>natt_keepalive	{ YYD; return(NATT_KA); }
2750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RTRY>{ecl}		{ BEGIN S_INI; return(EOC); }
2760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sainfo */
2780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_INI>sainfo		{ BEGIN S_SAINF; YYDB; return(SAINFO); }
2790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINF>anonymous	{ YYD; return(ANONYMOUS); }
2800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINF>{blcl}any{elcl}	{ YYD; return(PORTANY); }
2810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINF>any		{ YYD; return(ANY); }
2820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINF>from		{ YYD; return(FROM); }
2830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINF>group		{ YYD; return(GROUP); }
2840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sainfo spec */
2850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINF>{bcl}		{ BEGIN S_SAINFS; return(BOC); }
2860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINF>{semi}		{ BEGIN S_INI; return(EOS); }
2870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINFS>{ecl}		{ BEGIN S_INI; return(EOC); }
2880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINFS>pfs_group	{ YYD; return(PFS_GROUP); }
2890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINFS>remoteid	{ YYD; return(REMOTEID); }
290c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh<S_SAINFS>identifier	{ YYD; yywarn("it is obsoleted.  use \"my_identifier\"."); return(IDENTIFIER); }
2910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINFS>my_identifier	{ YYD; return(MY_IDENTIFIER); }
2920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINFS>lifetime	{ YYD; return(LIFETIME); }
2930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINFS>time		{ YYD; return(LIFETYPE_TIME); }
2940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINFS>byte		{ YYD; return(LIFETYPE_BYTE); }
2950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINFS>encryption_algorithm { YYD; yylval.num = algclass_ipsec_enc; return(ALGORITHM_CLASS); }
2960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINFS>authentication_algorithm { YYD; yylval.num = algclass_ipsec_auth; return(ALGORITHM_CLASS); }
2970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINFS>compression_algorithm	{ YYD; yylval.num = algclass_ipsec_comp; return(ALGORITHM_CLASS); }
2980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_SAINFS>{comma}	{ YYD; return(COMMA); }
2990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* remote */
3010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_INI>remote		{ BEGIN S_RMT; YYDB; return(REMOTE); }
3020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMT>anonymous	{ YYD; return(ANONYMOUS); }
3030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMT>inherit		{ YYD; return(INHERIT); }
3040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* remote spec */
3050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMT>{bcl}		{ BEGIN S_RMTS; return(BOC); }
3060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>{ecl}		{ BEGIN S_INI; return(EOC); }
3070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>exchange_mode	{ YYD; return(EXCHANGE_MODE); }
3080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>{comma}		{ YYD; /* XXX ignored, but to be handled. */ ; }
3090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>base		{ YYD; yylval.num = ISAKMP_ETYPE_BASE; return(EXCHANGETYPE); }
3100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>main		{ YYD; yylval.num = ISAKMP_ETYPE_IDENT; return(EXCHANGETYPE); }
3110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>aggressive	{ YYD; yylval.num = ISAKMP_ETYPE_AGG; return(EXCHANGETYPE); }
3120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>doi		{ YYD; return(DOI); }
3130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>ipsec_doi	{ YYD; yylval.num = IPSEC_DOI; return(DOITYPE); }
3140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>situation	{ YYD; return(SITUATION); }
3150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>identity_only	{ YYD; yylval.num = IPSECDOI_SIT_IDENTITY_ONLY; return(SITUATIONTYPE); }
3160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>secrecy		{ YYD; yylval.num = IPSECDOI_SIT_SECRECY; return(SITUATIONTYPE); }
3170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>integrity	{ YYD; yylval.num = IPSECDOI_SIT_INTEGRITY; return(SITUATIONTYPE); }
318c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh<S_RMTS>identifier	{ YYD; yywarn("it is obsoleted.  use \"my_identifier\"."); return(IDENTIFIER); }
3190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>my_identifier	{ YYD; return(MY_IDENTIFIER); }
3200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>xauth_login	{ YYD; return(XAUTH_LOGIN); /* formerly identifier type login */ }
3210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>peers_identifier	{ YYD; return(PEERS_IDENTIFIER); }
3220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>verify_identifier	{ YYD; return(VERIFY_IDENTIFIER); }
3230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>certificate_type	{ YYD; return(CERTIFICATE_TYPE); }
3240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>ca_type		{ YYD; return(CA_TYPE); }
3250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>x509		{ YYD; yylval.num = ISAKMP_CERT_X509SIGN; return(CERT_X509); }
3260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>plain_rsa	{ YYD; yylval.num = ISAKMP_CERT_PLAINRSA; return(CERT_PLAINRSA); }
3270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>peers_certfile	{ YYD; return(PEERS_CERTFILE); }
3280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>dnssec		{ YYD; return(DNSSEC); }
3290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>verify_cert	{ YYD; return(VERIFY_CERT); }
3300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>send_cert	{ YYD; return(SEND_CERT); }
3310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>send_cr		{ YYD; return(SEND_CR); }
3320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>dh_group	{ YYD; return(DH_GROUP); }
3330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>nonce_size	{ YYD; return(NONCE_SIZE); }
3340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>generate_policy	{ YYD; return(GENERATE_POLICY); }
3350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>unique		{ YYD; yylval.num = GENERATE_POLICY_UNIQUE; return(GENERATE_LEVEL); }
3360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>require		{ YYD; yylval.num = GENERATE_POLICY_REQUIRE; return(GENERATE_LEVEL); }
337c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh<S_RMTS>support_mip6	{ YYD; yywarn("it is obsoleted.  use \"support_proxy\"."); return(SUPPORT_PROXY); }
3380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>support_proxy	{ YYD; return(SUPPORT_PROXY); }
3390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>initial_contact	{ YYD; return(INITIAL_CONTACT); }
3400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>nat_traversal	{ YYD; return(NAT_TRAVERSAL); }
3410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>force		{ YYD; return(REMOTE_FORCE_LEVEL); }
3420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>proposal_check	{ YYD; return(PROPOSAL_CHECK); }
3430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>obey		{ YYD; yylval.num = PROP_CHECK_OBEY; return(PROPOSAL_CHECK_LEVEL); }
3440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>strict		{ YYD; yylval.num = PROP_CHECK_STRICT; return(PROPOSAL_CHECK_LEVEL); }
3450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>exact		{ YYD; yylval.num = PROP_CHECK_EXACT; return(PROPOSAL_CHECK_LEVEL); }
3460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>claim		{ YYD; yylval.num = PROP_CHECK_CLAIM; return(PROPOSAL_CHECK_LEVEL); }
3470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>keepalive	{ YYD; return(KEEPALIVE); }
3480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>passive		{ YYD; return(PASSIVE); }
3490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>lifetime	{ YYD; return(LIFETIME); }
3500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>time		{ YYD; return(LIFETYPE_TIME); }
3510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>byte		{ YYD; return(LIFETYPE_BYTE); }
3520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>dpd			{ YYD; return(DPD); }
3530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>dpd_delay	{ YYD; return(DPD_DELAY); }
3540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>dpd_retry	{ YYD; return(DPD_RETRY); }
3550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>dpd_maxfail	{ YYD; return(DPD_MAXFAIL); }
3560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>ph1id		{ YYD; return(PH1ID); }
3570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>ike_frag	{ YYD; return(IKE_FRAG); }
3580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>esp_frag	{ YYD; return(ESP_FRAG); }
3590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>script		{ YYD; return(SCRIPT); }
3600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>phase1_up	{ YYD; return(PHASE1_UP); }
3610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>phase1_down	{ YYD; return(PHASE1_DOWN); }
3620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>mode_cfg	{ YYD; return(MODE_CFG); }
3630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>weak_phase1_check { YYD; return(WEAK_PHASE1_CHECK); }
3640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* remote proposal */
3650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTS>proposal	{ BEGIN S_RMTP; YYDB; return(PROPOSAL); }
3660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTP>{bcl}		{ return(BOC); }
3670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTP>{ecl}		{ BEGIN S_RMTS; return(EOC); }
3680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTP>lifetime	{ YYD; return(LIFETIME); }
3690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTP>time		{ YYD; return(LIFETYPE_TIME); }
3700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTP>byte		{ YYD; return(LIFETYPE_BYTE); }
3710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTP>encryption_algorithm { YYD; yylval.num = algclass_isakmp_enc; return(ALGORITHM_CLASS); }
3720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTP>authentication_method { YYD; yylval.num = algclass_isakmp_ameth; return(ALGORITHM_CLASS); }
3730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTP>hash_algorithm	{ YYD; yylval.num = algclass_isakmp_hash; return(ALGORITHM_CLASS); }
3740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTP>dh_group	{ YYD; return(DH_GROUP); }
3750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTP>gss_id		{ YYD; return(GSS_ID); }
3760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_RMTP>gssapi_id	{ YYD; return(GSS_ID); } /* for back compatibility */
3770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* GSS ID encoding type (global) */
3790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_INI>gss_id_enc	{ BEGIN S_GSSENC; YYDB; return(GSS_ID_ENC); }
3800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_GSSENC>latin1	{ YYD; yylval.num = LC_GSSENC_LATIN1;
3810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				return(GSS_ID_ENCTYPE); }
3820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_GSSENC>utf-16le	{ YYD; yylval.num = LC_GSSENC_UTF16LE;
3830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				return(GSS_ID_ENCTYPE); }
3840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<S_GSSENC>{semi}	{ BEGIN S_INI; YYDB; return(EOS); }
3850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* parameter */
3870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangon		{ YYD; yylval.num = TRUE; return(SWITCH); }
3880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangoff		{ YYD; yylval.num = FALSE; return(SWITCH); }
3890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* prefix */
3910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{slash}{digit}{1,3} {
3920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			YYD;
3930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yytext++;
3940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yylval.num = atoi(yytext);
3950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			return(PREFIX);
3960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
3970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* port number */
3990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{blcl}{decstring}{elcl}	{
4000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			char *p = yytext;
4010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			YYD;
4020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			while (*++p != ']') ;
4030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			*p = 0;
4040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yytext++;
4050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yylval.num = atoi(yytext);
4060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			return(PORT);
4070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
4080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* address range */
4100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{hyphen}{addrstring} {
4110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang                        YYD;
4120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang                        yytext++;
4130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yylval.val = vmalloc(yyleng + 1);
4140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			if (yylval.val == NULL) {
4150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				yyerror("vmalloc failed");
4160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				return -1;
4170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			}
4180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			memcpy(yylval.val->v, yytext, yylval.val->l);
4190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang                        return(ADDRRANGE);
4200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang                }
4210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* upper protocol */
4230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangesp		{ YYD; yylval.num = IPPROTO_ESP; return(UL_PROTO); }
4240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangah		{ YYD; yylval.num = IPPROTO_AH; return(UL_PROTO); }
4250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangipcomp		{ YYD; yylval.num = IPPROTO_IPCOMP; return(UL_PROTO); }
4260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangicmp		{ YYD; yylval.num = IPPROTO_ICMP; return(UL_PROTO); }
4270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangicmp6		{ YYD; yylval.num = IPPROTO_ICMPV6; return(UL_PROTO); }
4280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangtcp		{ YYD; yylval.num = IPPROTO_TCP; return(UL_PROTO); }
4290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangudp		{ YYD; yylval.num = IPPROTO_UDP; return(UL_PROTO); }
4300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* algorithm type */
4320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdes_iv64	{ YYD; yylval.num = algtype_des_iv64;	return(ALGORITHMTYPE); }
4330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdes		{ YYD; yylval.num = algtype_des;	return(ALGORITHMTYPE); }
4340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang3des		{ YYD; yylval.num = algtype_3des;	return(ALGORITHMTYPE); }
4350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangrc5		{ YYD; yylval.num = algtype_rc5;	return(ALGORITHMTYPE); }
4360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangidea 		{ YYD; yylval.num = algtype_idea;	return(ALGORITHMTYPE); }
4370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangcast128		{ YYD; yylval.num = algtype_cast128;	return(ALGORITHMTYPE); }
4380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangblowfish	{ YYD; yylval.num = algtype_blowfish;	return(ALGORITHMTYPE); }
4390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang3idea		{ YYD; yylval.num = algtype_3idea;	return(ALGORITHMTYPE); }
4400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdes_iv32	{ YYD; yylval.num = algtype_des_iv32;	return(ALGORITHMTYPE); }
4410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangrc4 		{ YYD; yylval.num = algtype_rc4;	return(ALGORITHMTYPE); }
4420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangnull_enc	{ YYD; yylval.num = algtype_null_enc;	return(ALGORITHMTYPE); }
4430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangnull		{ YYD; yylval.num = algtype_null_enc;	return(ALGORITHMTYPE); }
4440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangaes		{ YYD; yylval.num = algtype_aes;	return(ALGORITHMTYPE); }
4450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangrijndael	{ YYD; yylval.num = algtype_aes;	return(ALGORITHMTYPE); }
4460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangtwofish		{ YYD; yylval.num = algtype_twofish;	return(ALGORITHMTYPE); }
4470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangcamellia	{ YYD; yylval.num = algtype_camellia;	return(ALGORITHMTYPE); }
4480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangnon_auth	{ YYD; yylval.num = algtype_non_auth;	return(ALGORITHMTYPE); }
4490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghmac_md5	{ YYD; yylval.num = algtype_hmac_md5;	return(ALGORITHMTYPE); }
4500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghmac_sha1	{ YYD; yylval.num = algtype_hmac_sha1;	return(ALGORITHMTYPE); }
4510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghmac_sha2_256	{ YYD; yylval.num = algtype_hmac_sha2_256;	return(ALGORITHMTYPE); }
4520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghmac_sha256	{ YYD; yylval.num = algtype_hmac_sha2_256;	return(ALGORITHMTYPE); }
4530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghmac_sha2_384	{ YYD; yylval.num = algtype_hmac_sha2_384;	return(ALGORITHMTYPE); }
4540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghmac_sha384	{ YYD; yylval.num = algtype_hmac_sha2_384;	return(ALGORITHMTYPE); }
4550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghmac_sha2_512	{ YYD; yylval.num = algtype_hmac_sha2_512;	return(ALGORITHMTYPE); }
4560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghmac_sha512	{ YYD; yylval.num = algtype_hmac_sha2_512;	return(ALGORITHMTYPE); }
4570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdes_mac		{ YYD; yylval.num = algtype_des_mac;	return(ALGORITHMTYPE); }
4580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkpdk		{ YYD; yylval.num = algtype_kpdk;	return(ALGORITHMTYPE); }
4590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangmd5		{ YYD; yylval.num = algtype_md5;	return(ALGORITHMTYPE); }
4600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangsha1		{ YYD; yylval.num = algtype_sha1;	return(ALGORITHMTYPE); }
4610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangtiger		{ YYD; yylval.num = algtype_tiger;	return(ALGORITHMTYPE); }
4620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangsha2_256	{ YYD; yylval.num = algtype_sha2_256;	return(ALGORITHMTYPE); }
4630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangsha256		{ YYD; yylval.num = algtype_sha2_256;	return(ALGORITHMTYPE); }
4640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangsha2_384	{ YYD; yylval.num = algtype_sha2_384;	return(ALGORITHMTYPE); }
4650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangsha384		{ YYD; yylval.num = algtype_sha2_384;	return(ALGORITHMTYPE); }
4660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangsha2_512	{ YYD; yylval.num = algtype_sha2_512;	return(ALGORITHMTYPE); }
4670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangsha512		{ YYD; yylval.num = algtype_sha2_512;	return(ALGORITHMTYPE); }
4680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangoui		{ YYD; yylval.num = algtype_oui;	return(ALGORITHMTYPE); }
4690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdeflate		{ YYD; yylval.num = algtype_deflate;	return(ALGORITHMTYPE); }
4700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanglzs		{ YYD; yylval.num = algtype_lzs;	return(ALGORITHMTYPE); }
4710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangmodp768		{ YYD; yylval.num = algtype_modp768;	return(ALGORITHMTYPE); }
4720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangmodp1024	{ YYD; yylval.num = algtype_modp1024;	return(ALGORITHMTYPE); }
4730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangmodp1536	{ YYD; yylval.num = algtype_modp1536;	return(ALGORITHMTYPE); }
4740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangec2n155		{ YYD; yylval.num = algtype_ec2n155;	return(ALGORITHMTYPE); }
4750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangec2n185		{ YYD; yylval.num = algtype_ec2n185;	return(ALGORITHMTYPE); }
4760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangmodp2048	{ YYD; yylval.num = algtype_modp2048;	return(ALGORITHMTYPE); }
4770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangmodp3072	{ YYD; yylval.num = algtype_modp3072;	return(ALGORITHMTYPE); }
4780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangmodp4096	{ YYD; yylval.num = algtype_modp4096;	return(ALGORITHMTYPE); }
4790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangmodp6144	{ YYD; yylval.num = algtype_modp6144;	return(ALGORITHMTYPE); }
4800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangmodp8192	{ YYD; yylval.num = algtype_modp8192;	return(ALGORITHMTYPE); }
4810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangpre_shared_key	{ YYD; yylval.num = algtype_psk;	return(ALGORITHMTYPE); }
4820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangrsasig		{ YYD; yylval.num = algtype_rsasig;	return(ALGORITHMTYPE); }
4830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdsssig		{ YYD; yylval.num = algtype_dsssig;	return(ALGORITHMTYPE); }
4840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangrsaenc		{ YYD; yylval.num = algtype_rsaenc;	return(ALGORITHMTYPE); }
4850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangrsarev		{ YYD; yylval.num = algtype_rsarev;	return(ALGORITHMTYPE); }
4860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanggssapi_krb	{ YYD; yylval.num = algtype_gssapikrb;	return(ALGORITHMTYPE); }
4870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghybrid_rsa_server {
4880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef ENABLE_HYBRID
4890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	YYD; yylval.num = algtype_hybrid_rsa_s; return(ALGORITHMTYPE);
4900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
4910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	yyerror("racoon not configured with --enable-hybrid");
4920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
4930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
4940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghybrid_dss_server {
4950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef ENABLE_HYBRID
4960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	YYD; yylval.num = algtype_hybrid_dss_s; return(ALGORITHMTYPE);
4970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
4980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	yyerror("racoon not configured with --enable-hybrid");
4990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
5000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
5010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghybrid_rsa_client {
5020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef ENABLE_HYBRID
5030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	YYD; yylval.num = algtype_hybrid_rsa_c; return(ALGORITHMTYPE);
5040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
5050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	yyerror("racoon not configured with --enable-hybrid");
5060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
5070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
5080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghybrid_dss_client {
5090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef ENABLE_HYBRID
5100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	YYD; yylval.num = algtype_hybrid_dss_c; return(ALGORITHMTYPE);
5110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
5120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	yyerror("racoon not configured with --enable-hybrid");
5130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
5140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
5150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangxauth_psk_server {
5160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef ENABLE_HYBRID
5170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	YYD; yylval.num = algtype_xauth_psk_s; return(ALGORITHMTYPE);
5180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
5190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	yyerror("racoon not configured with --enable-hybrid");
5200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
5210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
5220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangxauth_psk_client {
5230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef ENABLE_HYBRID
5240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	YYD; yylval.num = algtype_xauth_psk_c; return(ALGORITHMTYPE);
5250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
5260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	yyerror("racoon not configured with --enable-hybrid");
5270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
5280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
5290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangxauth_rsa_server {
5300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef ENABLE_HYBRID
5310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	YYD; yylval.num = algtype_xauth_rsa_s; return(ALGORITHMTYPE);
5320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
5330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	yyerror("racoon not configured with --enable-hybrid");
5340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
5350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
5360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangxauth_rsa_client {
5370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef ENABLE_HYBRID
5380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	YYD; yylval.num = algtype_xauth_rsa_c; return(ALGORITHMTYPE);
5390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
5400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	yyerror("racoon not configured with --enable-hybrid");
5410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
5420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
5430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* identifier type */
546c91307af2622f6625525f3c1f9c954376df950adChia-chi Yehvendor_id	{ YYD; yywarn("it is obsoleted."); return(VENDORID); }
5470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanguser_fqdn	{ YYD; yylval.num = IDTYPE_USERFQDN; return(IDENTIFIERTYPE); }
5480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangfqdn		{ YYD; yylval.num = IDTYPE_FQDN; return(IDENTIFIERTYPE); }
5490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkeyid		{ YYD; yylval.num = IDTYPE_KEYID; return(IDENTIFIERTYPE); }
5500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangaddress		{ YYD; yylval.num = IDTYPE_ADDRESS; return(IDENTIFIERTYPE); }
5510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangsubnet		{ YYD; yylval.num = IDTYPE_SUBNET; return(IDENTIFIERTYPE); }
5520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangasn1dn		{ YYD; yylval.num = IDTYPE_ASN1DN; return(IDENTIFIERTYPE); }
553c91307af2622f6625525f3c1f9c954376df950adChia-chi Yehcertname	{ YYD; yywarn("certname will be obsoleted in near future."); yylval.num = IDTYPE_ASN1DN; return(IDENTIFIERTYPE); }
5540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* identifier qualifier */
5560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangtag		{ YYD; yylval.num = IDQUAL_TAG;  return(IDENTIFIERQUAL); }
5570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangfile		{ YYD; yylval.num = IDQUAL_FILE; return(IDENTIFIERQUAL); }
5580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* units */
5600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih WangB|byte|bytes		{ YYD; return(UNITTYPE_BYTE); }
5610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih WangKB			{ YYD; return(UNITTYPE_KBYTES); }
5620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih WangMB			{ YYD; return(UNITTYPE_MBYTES); }
5630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih WangTB			{ YYD; return(UNITTYPE_TBYTES); }
5640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangsec|secs|second|seconds	{ YYD; return(UNITTYPE_SEC); }
5650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangmin|mins|minute|minutes	{ YYD; return(UNITTYPE_MIN); }
5660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghour|hours		{ YYD; return(UNITTYPE_HOUR); }
5670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* boolean */
5690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangyes		{ YYD; yylval.num = TRUE; return(BOOLEAN); }
5700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangno		{ YYD; yylval.num = FALSE; return(BOOLEAN); }
5710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{decstring}	{
5730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			char *bp;
5740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			YYD;
576c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh			yylval.num = strtol(yytext, &bp, 10);
5770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			return(NUMBER);
5780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
5790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{hexstring}	{
5810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			char *p;
5820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			YYD;
5840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yylval.val = vmalloc(yyleng + (yyleng & 1) + 1);
5850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			if (yylval.val == NULL) {
5860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				yyerror("vmalloc failed");
5870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				return -1;
5880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			}
5890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			p = yylval.val->v;
5910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			*p++ = '0';
5920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			*p++ = 'x';
5930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			/* fixed string if length is odd. */
5950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			if (yyleng & 1)
5960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				*p++ = '0';
5970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			memcpy(p, &yytext[2], yyleng - 1);
5980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			return(HEXSTRING);
6000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
6010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{quotedstring}	{
6030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			char *p = yytext;
6040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			YYD;
6060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			while (*++p != '"') ;
6070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			*p = '\0';
6080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yylval.val = vmalloc(yyleng - 1);
6100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			if (yylval.val == NULL) {
6110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				yyerror("vmalloc failed");
6120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				return -1;
6130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			}
6140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			memcpy(yylval.val->v, &yytext[1], yylval.val->l);
6150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			return(QUOTEDSTRING);
6170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
6180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{addrstring}	{
6200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			YYD;
6210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yylval.val = vmalloc(yyleng + 1);
6230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			if (yylval.val == NULL) {
6240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				yyerror("vmalloc failed");
6250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				return -1;
6260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			}
6270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			memcpy(yylval.val->v, yytext, yylval.val->l);
6280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			return(ADDRSTRING);
6300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
6310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang<<EOF>>		{
6330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yy_delete_buffer(YY_CURRENT_BUFFER);
6340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			incstackp--;
6350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang    nextfile:
6360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			if (incstack[incstackp].matchon <
6370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			    incstack[incstackp].matches.gl_pathc) {
6380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				char* filepath = incstack[incstackp].matches.gl_pathv[incstack[incstackp].matchon];
6390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				incstack[incstackp].matchon++;
6400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				incstackp++;
6410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				if (yycf_set_buffer(filepath) != 0) {
6420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang					incstackp--;
6430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang					goto nextfile;
6440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				}
6450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
6460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				BEGIN(S_INI);
6470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			} else {
6480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				globfree(&incstack[incstackp].matches);
6490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				if (incstackp == 0)
6500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang					yyterminate();
6510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				else
6520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang					yy_switch_to_buffer(incstack[incstackp].prevstate);
6530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			}
6540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
6550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* ... */
6570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ws}		{ ; }
6580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{nl}		{ incstack[incstackp].lineno++; }
6590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{comment}	{ YYD; }
6600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{semi}		{ return(EOS); }
6610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang.		{ yymore(); }
6620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%%
6640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
6660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangyyerror(char *s, ...)
6670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
6680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	char fmt[512];
6690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	va_list ap;
6710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef HAVE_STDARG_H
6720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	va_start(ap, s);
6730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
6740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	va_start(ap);
6750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
6760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	snprintf(fmt, sizeof(fmt), "%s:%d: \"%s\" %s\n",
6770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		incstack[incstackp].path, incstack[incstackp].lineno,
6780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		yytext, s);
6790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	plogv(LLV_ERROR, LOCATION, NULL, fmt, ap);
6800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	va_end(ap);
6810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	yyerrorcount++;
6830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
6840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
6860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangyywarn(char *s, ...)
6870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
6880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	char fmt[512];
6890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	va_list ap;
6910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef HAVE_STDARG_H
6920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	va_start(ap, s);
6930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
6940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	va_start(ap);
6950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
6960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	snprintf(fmt, sizeof(fmt), "%s:%d: \"%s\" %s\n",
6970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		incstack[incstackp].path, incstack[incstackp].lineno,
6980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		yytext, s);
6990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	plogv(LLV_WARNING, LOCATION, NULL, fmt, ap);
7000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	va_end(ap);
7010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
7020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint
7040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangyycf_switch_buffer(path)
7050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	char *path;
7060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
7070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	char *filepath = NULL;
7080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* got the include file name */
7100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (incstackp >= MAX_INCLUDE_DEPTH) {
7110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		plog(LLV_ERROR, LOCATION, NULL,
7120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			"Includes nested too deeply");
7130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		return -1;
7140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
7150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (glob(path, GLOB_TILDE, NULL, &incstack[incstackp].matches) != 0 ||
7170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    incstack[incstackp].matches.gl_pathc == 0) {
7180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		plog(LLV_ERROR, LOCATION, NULL,
7190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			"glob found no matches for path \"%s\"\n", path);
7200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		return -1;
7210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
7220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	incstack[incstackp].matchon = 0;
7230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	incstack[incstackp].prevstate = YY_CURRENT_BUFFER;
7240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang    nextmatch:
7260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (incstack[incstackp].matchon >= incstack[incstackp].matches.gl_pathc)
7270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		return -1;
7280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	filepath =
7290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    incstack[incstackp].matches.gl_pathv[incstack[incstackp].matchon];
7300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	incstack[incstackp].matchon++;
7310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	incstackp++;
7320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (yycf_set_buffer(filepath) != 0) {
7340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	      incstackp--;
7350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	      goto nextmatch;
7360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
7370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
7390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	BEGIN(S_INI);
7410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return 0;
7430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
7440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint
7460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangyycf_set_buffer(path)
7470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	char *path;
7480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
7490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	yyin = fopen(path, "r");
7500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (yyin == NULL) {
7510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		fprintf(stderr, "failed to open file %s (%s)\n",
7520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			path, strerror(errno));
7530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		plog(LLV_ERROR, LOCATION, NULL,
7540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			"failed to open file %s (%s)\n",
7550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			path, strerror(errno));
7560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		return -1;
7570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
7580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* initialize */
7600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	incstack[incstackp].fp = yyin;
7610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (incstack[incstackp].path != NULL)
7620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		racoon_free(incstack[incstackp].path);
7630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	incstack[incstackp].path = racoon_strdup(path);
7640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	STRDUP_FATAL(incstack[incstackp].path);
7650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	incstack[incstackp].lineno = 1;
7660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	plog(LLV_DEBUG, LOCATION, NULL,
7670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		"reading config file %s\n", path);
7680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return 0;
7700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
7710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
7730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangyycf_init_buffer()
7740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
7750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	int i;
7760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	for (i = 0; i < MAX_INCLUDE_DEPTH; i++)
7780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		memset(&incstack[i], 0, sizeof(incstack[i]));
7790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	incstackp = 0;
7800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
7810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
7830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangyycf_clean_buffer()
7840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
7850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	int i;
7860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	for (i = 0; i < MAX_INCLUDE_DEPTH; i++) {
7880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		if (incstack[i].path != NULL) {
7890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			fclose(incstack[i].fp);
7900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			racoon_free(incstack[i].path);
7910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			incstack[i].path = NULL;
7920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
7930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
7940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
7950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
796