%{ /* * Copyright (c) 2001 Ian Freislich * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $Id: parser.l,v 1.6 2003/01/24 09:35:19 ianf Exp $ */ #include #include #include "parser.y.h" extern int yyerror(char *); extern int yyline; %} %% "address:" return ADDRESS; "address_family:" return ADDRESS_FAMILY; "authentication:" return AUTHENTICATION; "autodelete:" return AUTODELETE; "bulletins:" return BULLETINS; "check_passwords:" return CHECK_PASSWORDS; "command_logging:" return COMMAND_LOGGING; "debug_mode:" return DEBUG_MODE; "delivery_time" return DELIVERY_TIME; "disable_top:" return DISABLE_TOP; "disable_uidl:" return DISABLE_UIDL; "fascist_logging:" return FASCIST_LOGGING; "false" return ISFALSE; "falsify_uidl:" return FALSIFY_UIDL; "format:" return FORMAT; "hash_depth:" return HASH_DEPTH; "inactivity_timeout:" return INACTIVITY_TIMEOUT; "inet4" return INET4; "inet6" return INET6; "interactive_debug:" return INTERACTIVE_DEBUG; "listen:" return LISTEN; "local_users:" return LOCAL_USERS; "mail:" return MAIL; "mailbox" return MAILBOX; "maildir" return MAILDIR; "maildircompat" return MAILDIRCOMPAT; "mailidx" return MAILIDX; "message_size" return MESSAGE_SIZE; "pop3_proxy:" return POP3_PROXY; "proxy:" return PROXY; "proxy_address:" return PROXY_ADDRESS; "proxy_port:" return PROXY_PORT; "radius:" return RADIUS; "sort_by:" return SORT_BY; "ssl:" return SSL; "ssl_both" return SSL_BOTH; "ssl_mode:" return SSL_MODE; "ssl_proxy" return SSL_PROXY; "ssl_server" return SSL_SERVER; "timeout:" return R_TIMEOUT; "tries:" return TRIES; "true" return ISTRUE; "unspec" return UNSPEC; "virtual_server:" return VIRTUAL_SERVER; "wire_format:" return WIRE_FORMAT; "address:"[ \t]*[^ ^\t ^\n ^#^;]+ { char *p; for (p = yytext; *p != ' ' && *p != '\t'; p++); for (; *p == ' ' || *p == '\t'; p++); strncpy(yylval.text, p, 1024); yylval.text[1023] = '\0'; return ADDRESS; } "apop_secrets:"[ \t]*[^ ^\t ^\n ^#^;]+ { char *p; for (p = yytext; *p != ' ' && *p != '\t'; p++); for (; *p == ' ' || *p == '\t'; p++); strncpy(yylval.text, p, 1024); yylval.text[1023] = '\0'; return APOP_SECRETS; } "certificate:"[ \t]*[^ ^\t ^\n ^#^;]+ { char *p; for (p = yytext; *p != ' ' && *p != '\t'; p++); for (; *p == ' ' || *p == '\t'; p++); strncpy(yylval.text, p, 1024); yylval.text[1023] = '\0'; return CERTIFICATE; } "bulletins:"[ \t]*[^ ^\t ^\n ^#^;]+ { char *p; for (p = yytext; *p != ' ' && *p != '\t'; p++); for (; *p == ' ' || *p == '\t'; p++); strncpy(yylval.text, p, 1024); yylval.text[1023] = '\0'; return BULLETINS; } "default_realm:"[ \t]*[^ ^\t ^\n ^#^;]+ { char *p; for (p = yytext; *p != ' ' && *p != '\t'; p++); for (; *p == ' ' || *p == '\t'; p++); strncpy(yylval.text, p, 1024); yylval.text[1023] = '\0'; return DEFAULT_REALM; } "etc_directory:"[ \t]*[^ ^\t ^\n ^#^;]+ { char *p; for (p = yytext; *p != ' ' && *p != '\t'; p++); for (; *p == ' ' || *p == '\t'; p++); strncpy(yylval.text, p, 1024); yylval.text[1023] = '\0'; return ETC_DIRECTORY; } "expire_after:"[ \t]*[^ ^\t ^\n ^#^;]+ { char *p; for (p = yytext; *p != ' ' && *p != '\t'; p++); for (; *p == ' ' || *p == '\t'; p++); strncpy(yylval.text, p, 1024); yylval.text[1023] = '\0'; return EXPIRE_AFTER; } "host:"[ \t]*[^ ^\t ^\n ^#^;]+ { char *p; for (p = yytext; *p != ' ' && *p != '\t'; p++); for (; *p == ' ' || *p == '\t'; p++); strncpy(yylval.text, p, 1024); yylval.text[1023] = '\0'; return HOST; } "port:"[ \t]*[^ ^\t ^\n ^#^;]+ { char *p; for (p = yytext; *p != ' ' && *p != '\t'; p++); for (; *p == ' ' || *p == '\t'; p++); strncpy(yylval.text, p, 1024); yylval.text[1023] = '\0'; return PORT; } "private_key:"[ \t]*[^ ^\t ^\n ^#^;]+ { char *p; for (p = yytext; *p != ' ' && *p != '\t'; p++); for (; *p == ' ' || *p == '\t'; p++); strncpy(yylval.text, p, 1024); yylval.text[1023] = '\0'; return PRIVATE_KEY; } "remove_after:"[ \t]*[^ ^\t ^\n ^#^;]+ { char *p; for (p = yytext; *p != ' ' && *p != '\t'; p++); for (; *p == ' ' || *p == '\t'; p++); strncpy(yylval.text, p, 1024); yylval.text[1023] = '\0'; return REMOVE_AFTER; } "secret:"[ \t]*[^ ^\t ^\n ^#^;]+ { char *p; for (p = yytext; *p != ' ' && *p != '\t'; p++); for (; *p == ' ' || *p == '\t'; p++); strncpy(yylval.text, p, 1024); yylval.text[1023] = '\0'; return SECRET; } "spool:"[ \t]*[^ ^\t ^\n ^#^;]+ { char *p; for (p = yytext; *p != ' ' && *p != '\t'; p++); for (; *p == ' ' || *p == '\t'; p++); strncpy(yylval.text, p, 1024); yylval.text[1023] = '\0'; return SPOOL; } "virtual_user:"[ \t]*[^ ^\t ^\n ^#^;]+ { char *p; for (p = yytext; *p != ' ' && *p != '\t'; p++); for (; *p == ' ' || *p == '\t'; p++); strncpy(yylval.text, p, 1024); yylval.text[1023] = '\0'; return USER; } "virtual_passwords:"[ \t]*[^ ^\t ^\n ^#^;]+ { char *p; for (p = yytext; *p != ' ' && *p != '\t'; p++); for (; *p == ' ' || *p == '\t'; p++); strncpy(yylval.text, p, 1024); yylval.text[1023] = '\0'; return VIRTUAL_PASSWORDS; } "#".* ; [ \t]* ; [\n]* {yyline++;} ; [{};] return *yytext; [0-9]{1,3}"."[0-9]{1,3}"."[0-9]{1,3}"."[0-9]{1,3}":"[0-9]{1,5} { strncpy(yylval.text, yytext, 1024); yylval.text[1023] = '\0'; return IPPORT; } [0-9]{1,3}"."[0-9]{1,3}"."[0-9]{1,3}"."[0-9]{1,3} { strncpy(yylval.text, yytext, 1024); yylval.text[1023] = '\0'; return IPADDR; } [0-9^"."]+ { yylval.num = atoi(yytext); return NUMBER; } . { yyerror("unmatched characters in config file"); } %% int yywrap(void) { return(1); }