blob: a2fe2cbbe825c8fe5dfb17b86824ec0cad012908 (
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
%{
/*
* 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 4000
WS [ \t]*
%%
set { return SET; }
batchlimit { return BATCHLIMIT; }
fetchlimit { return FETCHLIMIT; }
logfile { return LOGFILE; }
interface { return INTERFACE; }
monitor { return MONITOR; }
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 { 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; }
pre(connect) { return PRECONNECT; }
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_TRUE; return REWRITE; }
stripcr { yylval.flag = FLAG_TRUE; return STRIPCR; }
dns { yylval.flag = FLAG_TRUE; return DNS; }
received { yylval.flag = FLAG_TRUE; return RECEIVED; }
no{WS}keep { yylval.flag = FLAG_FALSE; return KEEP; }
no{WS}flush { yylval.flag = FLAG_FALSE; return FLUSH; }
no{WS}fetchall { yylval.flag = FLAG_FALSE; return FETCHALL; }
no{WS}rewrite { yylval.flag = FLAG_FALSE; return REWRITE; }
no{WS}stripcr { yylval.flag = FLAG_FALSE; return REWRITE; }
no{WS}dns { yylval.flag = FLAG_FALSE; return DNS; }
no{WS}received { yylval.flag = FLAG_FALSE; return RECEIVED; }
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';
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 */
|