%{
-/* Copyright 1993-95 by Carl Harris, Jr. Copyright 1996 by Eric S. Raymond
- * All rights reserved.
+/*
+ * rcfile_l.l -- lexer for the run control file
+ *
* For license terms, see the file COPYING in this directory.
*/
-/***********************************************************************
- module: rcfile_l.l
- project: fetchmail
- programmer: Carl Harris, ceharris@mal.com
- Extensively hacked by esr.
- description: configuration lexer
-
- ***********************************************************************/
-
#include <config.h>
#include "fetchmail.h"
#include "rcfile_y.h"
int prc_lineno = 1;
%}
+/* this doesn't work with Linux lex, see the INSTALL file */
+%o 5000
+%a 4000
%%
-defaults { return KW_DEFAULTS; }
-server { return KW_SERVER; }
-proto(col)? { return KW_PROTOCOL; }
-user(name)? { return KW_USERNAME; }
-pass(word)? { return KW_PASSWORD; }
-rpopid { return KW_RPOPID; }
-remote(folder)? { return KW_REMOTEFOLDER; }
-local(folder)? { return KW_LOCALFOLDER; }
-smtp(host)? { return KW_SMTPHOST; }
-mda { return KW_MDA; }
-keep { yylval.flag = TRUE; return KW_KEEP; }
-flush { yylval.flag = TRUE; return KW_FLUSH; }
-fetchall { yylval.flag = TRUE; return KW_FETCHALL; }
-rewrite { yylval.flag = TRUE; return KW_REWRITE; }
-explicit { yylval.flag = TRUE; return KW_EXPLICIT; }
-nokeep { yylval.flag = FALSE; return KW_KEEP; }
-noflush { yylval.flag = FALSE; return KW_FLUSH; }
-nofetchall { yylval.flag = FALSE; return KW_FETCHALL; }
-norewrite { yylval.flag = FALSE; return KW_REWRITE; }
-noexplicit { yylval.flag = FALSE; return KW_EXPLICIT; }
-port { return KW_PORT; }
-
-(auto)|(AUTO) { yylval.proto = P_AUTO; return PROTO_AUTO; }
-(pop2)|(POP2) { yylval.proto = P_POP2; return PROTO_POP2; }
-(pop3)|(POP3) { yylval.proto = P_POP3; return PROTO_POP3; }
-(imap)|(IMAP) { yylval.proto = P_IMAP; return PROTO_IMAP; }
-(apop)|(APOP) { yylval.proto = P_APOP; return PROTO_APOP; }
-(rpop)|(RPOP) { yylval.proto = P_RPOP; return PROTO_RPOP; }
-
-(#.*)?\\\n { prc_lineno++; } /* escaped newline is ignored */
-
-(#.*)?\n { prc_lineno++; return KW_EOL; }
+set { return SET; }
+batchlimit { return BATCHLIMIT; }
+fetchlimit { return FETCHLIMIT; }
+logfile { return LOGFILE; }
+daemon { return DAEMON; }
+
+defaults { return DEFAULTS; }
+server { return POLL; }
+poll { return POLL; }
+skip { return SKIP; }
+aka { return AKA; }
+local(domains) { return LOCALDOMAINS; }
+proto(col)? { return PROTOCOL; }
+port { return PORT; }
+auth(enticate)? { return AUTHENTICATE; }
+kerberos_v4 { return KERBEROS_V4; }
+kerberos { return KERBEROS_V4; }
+timeout { return TIMEOUT;}
+envelope { return ENVELOPE; }
+
+user(name)? { return USERNAME; }
+pass(word)? { return PASSWORD; }
+remote(folder)? { return FOLDER; }
+smtp(host)? { return SMTPHOST; }
+mda { return MDA; }
+pre(connect) { return PRECONNECT; }
+interface { return INTERFACE; }
+monitor { return MONITOR; }
+
+is { return IS; }
+here { return HERE; }
+there { return THERE; }
+to { return TO; }
+= { return MAP; }
+"*" { return WILDCARD; }
+
+no/.* { return NO;}
+
+keep { return KEEP; }
+flush { return FLUSH; }
+fetchall { return FETCHALL; }
+rewrite { return REWRITE; }
+forcecr { return FORCECR; }
+stripcr { return STRIPCR; }
+dns { return DNS; }
+uidl { return UIDL; }
+
+limit { return LIMIT; }
+
+with {/* EMPTY */}
+and {/* EMPTY */}
+has {/* EMPTY */}
+wants {/* EMPTY */}
+options {/* EMPTY */}
+[;:,] {/* EMPTY */}
+
+(auto)|(AUTO) { yylval.proto = P_AUTO; return PROTO; }
+(pop2)|(POP2) { yylval.proto = P_POP2; return PROTO; }
+(pop3)|(POP3) { yylval.proto = P_POP3; return PROTO; }
+(imap)|(IMAP) { yylval.proto = P_IMAP; return PROTO; }
+(apop)|(APOP) { yylval.proto = P_APOP; return PROTO; }
+(etrn)|(ETRN) { yylval.proto = P_ETRN; return PROTO; }
+(kpop)|(KPOP) { return KPOP; }
+
+
+(#.*)?\\?\n { prc_lineno++; } /* newline is ignored */
+
+[0-9]+ { yylval.number = atoi(yytext); return NUMBER; }
\"[^\"]*\" {
+ char buf[POPBUFSIZE];
+
yytext[strlen(yytext)-1] = '\0';
- yylval.sval = (char *) strdup(yytext+1);
- return PARAM_STRING;
+ escapes(yytext+1, buf);
+ yylval.sval = (char *) xstrdup(buf);
+ return STRING;
+ }
+[^=;:, \t\r\n]+ {
+ char buf[POPBUFSIZE];
+
+ escapes(yytext, buf);
+ yylval.sval = (char *) xstrdup(buf);
+ return STRING;
}
-[^ \t\r\n]+ { yylval.sval = (char *) strdup(yytext); return PARAM_STRING; }
[ \t\r]+ ; /* whitespace */