1c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh/*	$NetBSD: policy_token.l,v 1.6.6.1 2007/08/01 11:52:19 vanhu Exp $	*/
20a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
30a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* Id: policy_token.l,v 1.12 2005/05/05 12:32:18 manubsd Exp */
40a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
50a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/*
60a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
70a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * All rights reserved.
80a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *
90a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * Redistribution and use in source and binary forms, with or without
100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * modification, are permitted provided that the following conditions
110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * are met:
120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 1. Redistributions of source code must retain the above copyright
130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *    notice, this list of conditions and the following disclaimer.
140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 2. Redistributions in binary form must reproduce the above copyright
150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *    notice, this list of conditions and the following disclaimer in the
160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *    documentation and/or other materials provided with the distribution.
170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 3. Neither the name of the project nor the names of its contributors
180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *    may be used to endorse or promote products derived from this software
190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *    without specific prior written permission.
200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *
210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * SUCH DAMAGE.
320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang */
330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%{
350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef HAVE_CONFIG_H
360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "config.h"
370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/types.h>
400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/param.h>
410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/socket.h>
420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <net/pfkeyv2.h>
430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <netinet/in.h>
440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include PATH_IPSEC_H
450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <stdlib.h>
470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <limits.h>
480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <string.h>
490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <unistd.h>
500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <errno.h>
510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "libpfkey.h"
530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#if !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(__linux__)  && \
550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang!defined(__APPLE__) && !defined(__MACH__)
560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "y.tab.h"
570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "policy_parse.h"
590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define yylval __libipseclval	/* XXX */
610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint yylex __P((void));
630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%}
640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%option noyywrap
660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%option nounput
670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* common section */
690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangnl		\n
700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangws		[ \t]+
710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdigit		[0-9]
720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghexdigit	[0-9A-Fa-f]
730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangspecial		[()+\|\?\*,]
740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdot		\.
750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangcomma		\,
760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghyphen		\-
770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangcolon		\:
780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangslash		\/
790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangbcl		\{
800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangecl		\}
810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangblcl		\[
820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangelcl		\]
830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangpercent		\%
840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangsemi		\;
850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangplus	\+
860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangusec		{dot}{digit}{1,6}
870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangcomment		\#.*
880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangccomment	"/*"
890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangbracketstring	\<[^>]*\>
900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangquotedstring	\"[^"]*\"
910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdecstring	{digit}+
920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghexpair		{hexdigit}{hexdigit}
930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghexstring	0[xX]{hexdigit}+
940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangoctetstring	{octet}({dot}{octet})+
950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangipaddress	[a-zA-Z0-9:\._][a-zA-Z0-9:\._]*(%[a-zA-Z0-9]+)?
960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%%
980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangin		{ yylval.num = IPSEC_DIR_INBOUND; return(DIR); }
1000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangout		{ yylval.num = IPSEC_DIR_OUTBOUND; return(DIR); }
1010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangfwd		{
1020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef HAVE_POLICY_FWD
1030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		  yylval.num = IPSEC_DIR_FWD; return(DIR);
1040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
1050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		  yylval.num = IPSEC_DIR_INBOUND; return(DIR);
1060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
1070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
1080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangpriority	{ return(PRIORITY); }
1100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangprio	{ return(PRIORITY); }
1110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanglow	{ yylval.num32 = PRIORITY_LOW; return(PRIO_BASE); }
1120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdef { yylval.num32 = PRIORITY_DEFAULT; return(PRIO_BASE); }
1130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghigh	{ yylval.num32 = PRIORITY_HIGH; return(PRIO_BASE); }
1140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{plus}	{ return(PLUS); }
1150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{decstring}	{
1160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yylval.val.len = strlen(yytext);
1170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yylval.val.buf = yytext;
1180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			return(PRIO_OFFSET);
1190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
1200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdiscard		{ yylval.num = IPSEC_POLICY_DISCARD; return(ACTION); }
1220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangnone		{ yylval.num = IPSEC_POLICY_NONE; return(ACTION); }
1230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangipsec		{ yylval.num = IPSEC_POLICY_IPSEC; return(ACTION); }
1240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangbypass		{ yylval.num = IPSEC_POLICY_BYPASS; return(ACTION); }
1250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangentrust		{ yylval.num = IPSEC_POLICY_ENTRUST; return(ACTION); }
1260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangesp		{ yylval.num = IPPROTO_ESP; return(PROTOCOL); }
1280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangah		{ yylval.num = IPPROTO_AH; return(PROTOCOL); }
1290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangipcomp		{ yylval.num = IPPROTO_IPCOMP; return(PROTOCOL); }
1300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangtransport	{ yylval.num = IPSEC_MODE_TRANSPORT; return(MODE); }
1320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangtunnel		{ yylval.num = IPSEC_MODE_TUNNEL; return(MODE); }
1330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangme		{ return(ME); }
1350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangany		{ return(ANY); }
1360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdefault		{ yylval.num = IPSEC_LEVEL_DEFAULT; return(LEVEL); }
1380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanguse		{ yylval.num = IPSEC_LEVEL_USE; return(LEVEL); }
1390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangrequire		{ yylval.num = IPSEC_LEVEL_REQUIRE; return(LEVEL); }
1400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangunique{colon}{decstring} {
1410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yylval.val.len = strlen(yytext + 7);
1420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yylval.val.buf = yytext + 7;
1430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			return(LEVEL_SPECIFY);
1440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
1450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangunique		{ yylval.num = IPSEC_LEVEL_UNIQUE; return(LEVEL); }
1460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{slash}		{ return(SLASH); }
1470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ipaddress}	{
1490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yylval.val.len = strlen(yytext);
1500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yylval.val.buf = yytext;
1510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			return(IPADDRESS);
1520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
1530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{hyphen}	{ return(HYPHEN); }
1550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{blcl}{decstring}{elcl} {
1570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			/* Remove leading '[' and trailing ']' */
1580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yylval.val.buf = yytext + 1;
1590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			yylval.val.len = strlen(yytext) - 2;
1600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			return(PORT);
1620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
1630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ws}		{ ; }
1650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{nl}		{ ; }
1660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang%%
1680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid __policy__strbuffer__init__ __P((char *));
1700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid __policy__strbuffer__free__ __P((void));
1710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic YY_BUFFER_STATE strbuffer;
1730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
1750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang__policy__strbuffer__init__(msg)
1760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	char *msg;
1770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
1780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (YY_CURRENT_BUFFER)
1790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		yy_delete_buffer(YY_CURRENT_BUFFER);
1800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	strbuffer = (YY_BUFFER_STATE)yy_scan_string(msg);
1810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	yy_switch_to_buffer(strbuffer);
1820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
1840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
1850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
1870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang__policy__strbuffer__free__()
1880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
1890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	yy_delete_buffer(strbuffer);
1900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
1920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
193