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