Annotation of embedaddon/ipsec-tools/src/libipsec/policy_token.l, revision 1.1
1.1 ! misho 1: /* $NetBSD: policy_token.l,v 1.7 2007/07/18 12:07:50 vanhu Exp $ */
! 2:
! 3: /* Id: policy_token.l,v 1.12 2005/05/05 12:32:18 manubsd Exp */
! 4:
! 5: /*
! 6: * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
! 7: * All rights reserved.
! 8: *
! 9: * Redistribution and use in source and binary forms, with or without
! 10: * modification, are permitted provided that the following conditions
! 11: * are met:
! 12: * 1. Redistributions of source code must retain the above copyright
! 13: * notice, this list of conditions and the following disclaimer.
! 14: * 2. Redistributions in binary form must reproduce the above copyright
! 15: * notice, this list of conditions and the following disclaimer in the
! 16: * documentation and/or other materials provided with the distribution.
! 17: * 3. Neither the name of the project nor the names of its contributors
! 18: * may be used to endorse or promote products derived from this software
! 19: * without specific prior written permission.
! 20: *
! 21: * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
! 22: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 23: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 24: * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
! 25: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 26: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 27: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 28: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 29: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 31: * SUCH DAMAGE.
! 32: */
! 33:
! 34: %{
! 35: #ifdef HAVE_CONFIG_H
! 36: #include "config.h"
! 37: #endif
! 38:
! 39: #include <sys/types.h>
! 40: #include <sys/param.h>
! 41: #include <sys/socket.h>
! 42: #include <net/pfkeyv2.h>
! 43: #include <netinet/in.h>
! 44: #include PATH_IPSEC_H
! 45:
! 46: #include <stdlib.h>
! 47: #include <limits.h>
! 48: #include <string.h>
! 49: #include <unistd.h>
! 50: #include <errno.h>
! 51:
! 52: #include "libpfkey.h"
! 53:
! 54: #if !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(__linux__) && \
! 55: !defined(__APPLE__) && !defined(__MACH__)
! 56: #include "y.tab.h"
! 57: #else
! 58: #include "policy_parse.h"
! 59: #endif
! 60: #define yylval __libipseclval /* XXX */
! 61:
! 62: int yylex __P((void));
! 63: %}
! 64:
! 65: %option noyywrap
! 66: %option nounput
! 67:
! 68: /* common section */
! 69: nl \n
! 70: ws [ \t]+
! 71: digit [0-9]
! 72: hexdigit [0-9A-Fa-f]
! 73: special [()+\|\?\*,]
! 74: dot \.
! 75: comma \,
! 76: hyphen \-
! 77: colon \:
! 78: slash \/
! 79: bcl \{
! 80: ecl \}
! 81: blcl \[
! 82: elcl \]
! 83: percent \%
! 84: semi \;
! 85: plus \+
! 86: usec {dot}{digit}{1,6}
! 87: comment \#.*
! 88: ccomment "/*"
! 89: bracketstring \<[^>]*\>
! 90: quotedstring \"[^"]*\"
! 91: decstring {digit}+
! 92: hexpair {hexdigit}{hexdigit}
! 93: hexstring 0[xX]{hexdigit}+
! 94: octetstring {octet}({dot}{octet})+
! 95: ipaddress [a-zA-Z0-9:\._][a-zA-Z0-9:\._]*(%[a-zA-Z0-9]+)?
! 96:
! 97: %%
! 98:
! 99: in { yylval.num = IPSEC_DIR_INBOUND; return(DIR); }
! 100: out { yylval.num = IPSEC_DIR_OUTBOUND; return(DIR); }
! 101: fwd {
! 102: #ifdef HAVE_POLICY_FWD
! 103: yylval.num = IPSEC_DIR_FWD; return(DIR);
! 104: #else
! 105: yylval.num = IPSEC_DIR_INBOUND; return(DIR);
! 106: #endif
! 107: }
! 108:
! 109: priority { return(PRIORITY); }
! 110: prio { return(PRIORITY); }
! 111: low { yylval.num32 = PRIORITY_LOW; return(PRIO_BASE); }
! 112: def { yylval.num32 = PRIORITY_DEFAULT; return(PRIO_BASE); }
! 113: high { yylval.num32 = PRIORITY_HIGH; return(PRIO_BASE); }
! 114: {plus} { return(PLUS); }
! 115: {decstring} {
! 116: yylval.val.len = strlen(yytext);
! 117: yylval.val.buf = yytext;
! 118: return(PRIO_OFFSET);
! 119: }
! 120:
! 121: discard { yylval.num = IPSEC_POLICY_DISCARD; return(ACTION); }
! 122: none { yylval.num = IPSEC_POLICY_NONE; return(ACTION); }
! 123: ipsec { yylval.num = IPSEC_POLICY_IPSEC; return(ACTION); }
! 124: bypass { yylval.num = IPSEC_POLICY_BYPASS; return(ACTION); }
! 125: entrust { yylval.num = IPSEC_POLICY_ENTRUST; return(ACTION); }
! 126:
! 127: esp { yylval.num = IPPROTO_ESP; return(PROTOCOL); }
! 128: ah { yylval.num = IPPROTO_AH; return(PROTOCOL); }
! 129: ipcomp { yylval.num = IPPROTO_IPCOMP; return(PROTOCOL); }
! 130:
! 131: transport { yylval.num = IPSEC_MODE_TRANSPORT; return(MODE); }
! 132: tunnel { yylval.num = IPSEC_MODE_TUNNEL; return(MODE); }
! 133:
! 134: me { return(ME); }
! 135: any { return(ANY); }
! 136:
! 137: default { yylval.num = IPSEC_LEVEL_DEFAULT; return(LEVEL); }
! 138: use { yylval.num = IPSEC_LEVEL_USE; return(LEVEL); }
! 139: require { yylval.num = IPSEC_LEVEL_REQUIRE; return(LEVEL); }
! 140: unique{colon}{decstring} {
! 141: yylval.val.len = strlen(yytext + 7);
! 142: yylval.val.buf = yytext + 7;
! 143: return(LEVEL_SPECIFY);
! 144: }
! 145: unique { yylval.num = IPSEC_LEVEL_UNIQUE; return(LEVEL); }
! 146: {slash} { return(SLASH); }
! 147:
! 148: {ipaddress} {
! 149: yylval.val.len = strlen(yytext);
! 150: yylval.val.buf = yytext;
! 151: return(IPADDRESS);
! 152: }
! 153:
! 154: {hyphen} { return(HYPHEN); }
! 155:
! 156: {blcl}{decstring}{elcl} {
! 157: /* Remove leading '[' and trailing ']' */
! 158: yylval.val.buf = yytext + 1;
! 159: yylval.val.len = strlen(yytext) - 2;
! 160:
! 161: return(PORT);
! 162: }
! 163:
! 164: {ws} { ; }
! 165: {nl} { ; }
! 166:
! 167: %%
! 168:
! 169: void __policy__strbuffer__init__ __P((char *));
! 170: void __policy__strbuffer__free__ __P((void));
! 171:
! 172: static YY_BUFFER_STATE strbuffer;
! 173:
! 174: void
! 175: __policy__strbuffer__init__(msg)
! 176: char *msg;
! 177: {
! 178: if (YY_CURRENT_BUFFER)
! 179: yy_delete_buffer(YY_CURRENT_BUFFER);
! 180: strbuffer = (YY_BUFFER_STATE)yy_scan_string(msg);
! 181: yy_switch_to_buffer(strbuffer);
! 182:
! 183: return;
! 184: }
! 185:
! 186: void
! 187: __policy__strbuffer__free__()
! 188: {
! 189: yy_delete_buffer(strbuffer);
! 190:
! 191: return;
! 192: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>