1/* -*- Mode: C; tab-width: 4 -*- 2 * 3 * Copyright (c) 2006 Apple Computer, Inc. All rights reserved. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18%{ 19#include <string.h> 20#include <stdio.h> 21#include "dnsextd_parser.h" 22 23 24extern YYSTYPE yylval; 25 26/* Mac OS X 10.4 has flex version 2.5.4, which doesn't define yylineno for us */ 27/* Mac OS X 10.5 has flex version 2.5.33, which does define yylineno */ 28#if YY_FLEX_MAJOR_VERSION <= 2 && YY_FLEX_MINOR_VERSION <= 5 && YY_FLEX_SUBMINOR_VERSION <= 4 29int yylineno = 1; 30#endif 31 32int yylex(void); 33 34static char* 35StripQuotes 36 ( 37 const char * string 38 ) 39{ 40 char * dup; 41 42 dup = strdup( string + 1); 43 44 dup[ strlen( dup ) - 1 ] = '\0'; 45 46 return dup; 47} 48 49 50%} 51 52%option nounput 53%% 54 55options return OPTIONS; 56listen-on return LISTEN_ON; 57nameserver return NAMESERVER; 58port return PORT; 59address return ADDRESS; 60llq return LLQ; 61public return PUBLIC; 62private return PRIVATE; 63key return KEY; 64allow-update return ALLOWUPDATE; 65allow-query return ALLOWQUERY; 66algorithm return ALGORITHM; 67secret return SECRET; 68zone return ZONE; 69type return TYPE; 70allow return ALLOW; 71\{ return OBRACE; 72\} return EBRACE; 73; return SEMICOLON; 74IN return IN; 75\* yylval.string = strdup(yytext); return WILDCARD; 76[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ yylval.string = strdup(yytext); return DOTTED_DECIMAL_ADDRESS; 77[0123456789]+ yylval.number = atoi(yytext); return NUMBER; 78[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)* yylval.string = strdup(yytext); return HOSTNAME; 79[a-zA-Z0-9\.]+([a-zA-Z0-9\.]+)* yylval.string = strdup(yytext); return DOMAINNAME; 80\"([^"\\\r\n]*(\\.[^"\\\r\n]*)*)\" yylval.string = StripQuotes(yytext); return QUOTEDSTRING; 81[\/][\/].* /* ignore C++ style comments */; 82\n yylineno++; /* ignore EOL */; 83[ \t]+ /* ignore whitespace */; 84%% 85