blob: 24c027e825ee01d86a4576c3ce6d18002f4dc2b9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
%{
/*
* rcfile_l.l -- lexer for the run control file
*
* For license terms, see the file COPYING in this directory.
*/
#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 3000
%%
set { return SET; }
batchlimit { return BATCHLIMIT; }
fetchlimit { return FETCHLIMIT; }
logfile { return LOGFILE; }
defaults { return DEFAULTS; }
server { return POLL; }
poll { return POLL; }
skip { return SKIP; }
aka { return AKA; }
proto(col)? { return PROTOCOL; }
port { return PORT; }
auth(enticate)? { return AUTHENTICATE; }
kerberos { return KERBEROS; }
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; }
is { return IS; }
here { return HERE; }
there { return THERE; }
to { return TO; }
= { return MAP; }
"*" { return WILDCARD; }
keep { yylval.flag = FLAG_TRUE; return KEEP; }
flush { yylval.flag = FLAG_TRUE; return FLUSH; }
fetchall { yylval.flag = FLAG_TRUE; return FETCHALL; }
rewrite { yylval.flag = FLAG_FALSE; return REWRITE; }
nokeep { yylval.flag = FLAG_FALSE; return KEEP; }
noflush { yylval.flag = FLAG_FALSE; return FLUSH; }
nofetchall { yylval.flag = FLAG_FALSE; return FETCHALL; }
norewrite { yylval.flag = FLAG_TRUE; return REWRITE; }
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; }
(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';
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]+ ; /* whitespace */
|