]> Pileus Git - ~andy/fetchmail/blobdiff - rcfile_l.l
Caseblind comparison of names, more explicitness about Kerberos.
[~andy/fetchmail] / rcfile_l.l
index 5ac469d6f7b00cbd4c33b2ede99e336e903d439d..a23e4dc0a7fb53f9d4565406b39de98c73b0fa64 100644 (file)
@@ -1,19 +1,11 @@
 %{
 
-/* 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 */