Blame


1 5cdb1798 2005-10-29 devnull %{
2 5cdb1798 2005-10-29 devnull #include "common.h"
3 5cdb1798 2005-10-29 devnull #include <ctype.h>
4 5cdb1798 2005-10-29 devnull #include "smtpd.h"
5 5cdb1798 2005-10-29 devnull
6 5cdb1798 2005-10-29 devnull #define YYSTYPE yystype
7 5cdb1798 2005-10-29 devnull typedef struct quux yystype;
8 5cdb1798 2005-10-29 devnull struct quux {
9 5cdb1798 2005-10-29 devnull String *s;
10 5cdb1798 2005-10-29 devnull int c;
11 5cdb1798 2005-10-29 devnull };
12 5cdb1798 2005-10-29 devnull Biobuf *yyfp;
13 5cdb1798 2005-10-29 devnull YYSTYPE *bang;
14 5cdb1798 2005-10-29 devnull extern Biobuf bin;
15 5cdb1798 2005-10-29 devnull extern int debug;
16 5cdb1798 2005-10-29 devnull
17 5cdb1798 2005-10-29 devnull YYSTYPE cat(YYSTYPE*, YYSTYPE*, YYSTYPE*, YYSTYPE*, YYSTYPE*, YYSTYPE*, YYSTYPE*);
18 5cdb1798 2005-10-29 devnull int yyparse(void);
19 5cdb1798 2005-10-29 devnull int yylex(void);
20 5cdb1798 2005-10-29 devnull YYSTYPE anonymous(void);
21 5cdb1798 2005-10-29 devnull %}
22 5cdb1798 2005-10-29 devnull
23 5cdb1798 2005-10-29 devnull %term SPACE
24 5cdb1798 2005-10-29 devnull %term CNTRL
25 5cdb1798 2005-10-29 devnull %term CRLF
26 5cdb1798 2005-10-29 devnull %start conversation
27 5cdb1798 2005-10-29 devnull %%
28 5cdb1798 2005-10-29 devnull
29 5cdb1798 2005-10-29 devnull conversation : cmd
30 5cdb1798 2005-10-29 devnull | conversation cmd
31 5cdb1798 2005-10-29 devnull ;
32 5cdb1798 2005-10-29 devnull cmd : error
33 5cdb1798 2005-10-29 devnull | 'h' 'e' 'l' 'o' spaces sdomain CRLF
34 5cdb1798 2005-10-29 devnull { hello($6.s, 0); }
35 5cdb1798 2005-10-29 devnull | 'e' 'h' 'l' 'o' spaces sdomain CRLF
36 5cdb1798 2005-10-29 devnull { hello($6.s, 1); }
37 5cdb1798 2005-10-29 devnull | 'm' 'a' 'i' 'l' spaces 'f' 'r' 'o' 'm' ':' spath CRLF
38 5cdb1798 2005-10-29 devnull { sender($11.s); }
39 5cdb1798 2005-10-29 devnull | 'm' 'a' 'i' 'l' spaces 'f' 'r' 'o' 'm' ':' spath spaces 'a' 'u' 't' 'h' '=' sauth CRLF
40 5cdb1798 2005-10-29 devnull { sender($11.s); }
41 5cdb1798 2005-10-29 devnull | 'r' 'c' 'p' 't' spaces 't' 'o' ':' spath CRLF
42 5cdb1798 2005-10-29 devnull { receiver($9.s); }
43 5cdb1798 2005-10-29 devnull | 'd' 'a' 't' 'a' CRLF
44 5cdb1798 2005-10-29 devnull { data(); }
45 5cdb1798 2005-10-29 devnull | 'r' 's' 'e' 't' CRLF
46 5cdb1798 2005-10-29 devnull { reset(); }
47 5cdb1798 2005-10-29 devnull | 's' 'e' 'n' 'd' spaces 'f' 'r' 'o' 'm' ':' spath CRLF
48 5cdb1798 2005-10-29 devnull { sender($11.s); }
49 5cdb1798 2005-10-29 devnull | 's' 'o' 'm' 'l' spaces 'f' 'r' 'o' 'm' ':' spath CRLF
50 5cdb1798 2005-10-29 devnull { sender($11.s); }
51 5cdb1798 2005-10-29 devnull | 's' 'a' 'm' 'l' spaces 'f' 'r' 'o' 'm' ':' spath CRLF
52 5cdb1798 2005-10-29 devnull { sender($11.s); }
53 5cdb1798 2005-10-29 devnull | 'v' 'r' 'f' 'y' spaces string CRLF
54 5cdb1798 2005-10-29 devnull { verify($6.s); }
55 5cdb1798 2005-10-29 devnull | 'e' 'x' 'p' 'n' spaces string CRLF
56 5cdb1798 2005-10-29 devnull { verify($6.s); }
57 5cdb1798 2005-10-29 devnull | 'h' 'e' 'l' 'p' CRLF
58 5cdb1798 2005-10-29 devnull { help(0); }
59 5cdb1798 2005-10-29 devnull | 'h' 'e' 'l' 'p' spaces string CRLF
60 5cdb1798 2005-10-29 devnull { help($6.s); }
61 5cdb1798 2005-10-29 devnull | 'n' 'o' 'o' 'p' CRLF
62 5cdb1798 2005-10-29 devnull { noop(); }
63 5cdb1798 2005-10-29 devnull | 'q' 'u' 'i' 't' CRLF
64 5cdb1798 2005-10-29 devnull { quit(); }
65 5cdb1798 2005-10-29 devnull | 't' 'u' 'r' 'n' CRLF
66 5cdb1798 2005-10-29 devnull { turn(); }
67 5cdb1798 2005-10-29 devnull | 's' 't' 'a' 'r' 't' 't' 'l' 's' CRLF
68 5cdb1798 2005-10-29 devnull { starttls(); }
69 5cdb1798 2005-10-29 devnull | 'a' 'u' 't' 'h' spaces name spaces string CRLF
70 5cdb1798 2005-10-29 devnull { auth($6.s, $8.s); }
71 5cdb1798 2005-10-29 devnull | 'a' 'u' 't' 'h' spaces name CRLF
72 5cdb1798 2005-10-29 devnull { auth($6.s, nil); }
73 5cdb1798 2005-10-29 devnull | CRLF
74 5cdb1798 2005-10-29 devnull { reply("501 illegal command or bad syntax\r\n"); }
75 5cdb1798 2005-10-29 devnull ;
76 5cdb1798 2005-10-29 devnull path : '<' '>' ={ $$ = anonymous(); }
77 5cdb1798 2005-10-29 devnull | '<' mailbox '>' ={ $$ = $2; }
78 5cdb1798 2005-10-29 devnull | '<' a_d_l ':' mailbox '>' ={ $$ = cat(&$2, bang, &$4, 0, 0 ,0, 0); }
79 5cdb1798 2005-10-29 devnull ;
80 5cdb1798 2005-10-29 devnull spath : path ={ $$ = $1; }
81 5cdb1798 2005-10-29 devnull | spaces path ={ $$ = $2; }
82 5cdb1798 2005-10-29 devnull ;
83 5cdb1798 2005-10-29 devnull auth : path ={ $$ = $1; }
84 5cdb1798 2005-10-29 devnull | mailbox ={ $$ = $1; }
85 5cdb1798 2005-10-29 devnull ;
86 5cdb1798 2005-10-29 devnull sauth : auth ={ $$ = $1; }
87 5cdb1798 2005-10-29 devnull | spaces auth ={ $$ = $2; }
88 5cdb1798 2005-10-29 devnull ;
89 5cdb1798 2005-10-29 devnull ;
90 5cdb1798 2005-10-29 devnull a_d_l : at_domain ={ $$ = cat(&$1, 0, 0, 0, 0 ,0, 0); }
91 5cdb1798 2005-10-29 devnull | at_domain ',' a_d_l ={ $$ = cat(&$1, bang, &$3, 0, 0, 0, 0); }
92 5cdb1798 2005-10-29 devnull ;
93 5cdb1798 2005-10-29 devnull at_domain : '@' domain ={ $$ = cat(&$2, 0, 0, 0, 0 ,0, 0); }
94 5cdb1798 2005-10-29 devnull ;
95 5cdb1798 2005-10-29 devnull sdomain : domain ={ $$ = $1; }
96 5cdb1798 2005-10-29 devnull | domain spaces ={ $$ = $1; }
97 5cdb1798 2005-10-29 devnull ;
98 5cdb1798 2005-10-29 devnull domain : element ={ $$ = cat(&$1, 0, 0, 0, 0 ,0, 0); }
99 5cdb1798 2005-10-29 devnull | element '.' ={ $$ = cat(&$1, 0, 0, 0, 0 ,0, 0); }
100 5cdb1798 2005-10-29 devnull | element '.' domain ={ $$ = cat(&$1, &$2, &$3, 0, 0 ,0, 0); }
101 5cdb1798 2005-10-29 devnull ;
102 5cdb1798 2005-10-29 devnull element : name ={ $$ = cat(&$1, 0, 0, 0, 0 ,0, 0); }
103 5cdb1798 2005-10-29 devnull | '#' number ={ $$ = cat(&$1, &$2, 0, 0, 0 ,0, 0); }
104 5cdb1798 2005-10-29 devnull | '[' ']' ={ $$ = cat(&$1, &$2, 0, 0, 0 ,0, 0); }
105 5cdb1798 2005-10-29 devnull | '[' dotnum ']' ={ $$ = cat(&$1, &$2, &$3, 0, 0 ,0, 0); }
106 5cdb1798 2005-10-29 devnull ;
107 5cdb1798 2005-10-29 devnull mailbox : local_part ={ $$ = cat(&$1, 0, 0, 0, 0 ,0, 0); }
108 5cdb1798 2005-10-29 devnull | local_part '@' domain ={ $$ = cat(&$3, bang, &$1, 0, 0 ,0, 0); }
109 5cdb1798 2005-10-29 devnull ;
110 5cdb1798 2005-10-29 devnull local_part : dot_string ={ $$ = cat(&$1, 0, 0, 0, 0 ,0, 0); }
111 5cdb1798 2005-10-29 devnull | quoted_string ={ $$ = cat(&$1, 0, 0, 0, 0 ,0, 0); }
112 5cdb1798 2005-10-29 devnull ;
113 5cdb1798 2005-10-29 devnull name : let_dig ={ $$ = cat(&$1, 0, 0, 0, 0 ,0, 0); }
114 5cdb1798 2005-10-29 devnull | let_dig ld_str ={ $$ = cat(&$1, &$2, 0, 0, 0 ,0, 0); }
115 5cdb1798 2005-10-29 devnull | let_dig ldh_str ld_str ={ $$ = cat(&$1, &$2, &$3, 0, 0 ,0, 0); }
116 5cdb1798 2005-10-29 devnull ;
117 5cdb1798 2005-10-29 devnull ld_str : let_dig
118 5cdb1798 2005-10-29 devnull | let_dig ld_str ={ $$ = cat(&$1, &$2, 0, 0, 0 ,0, 0); }
119 5cdb1798 2005-10-29 devnull ;
120 5cdb1798 2005-10-29 devnull ldh_str : hunder
121 5cdb1798 2005-10-29 devnull | ld_str hunder ={ $$ = cat(&$1, &$2, 0, 0, 0 ,0, 0); }
122 5cdb1798 2005-10-29 devnull | ldh_str ld_str hunder ={ $$ = cat(&$1, &$2, &$3, 0, 0 ,0, 0); }
123 5cdb1798 2005-10-29 devnull ;
124 5cdb1798 2005-10-29 devnull let_dig : a
125 5cdb1798 2005-10-29 devnull | d
126 5cdb1798 2005-10-29 devnull ;
127 5cdb1798 2005-10-29 devnull dot_string : string ={ $$ = cat(&$1, 0, 0, 0, 0 ,0, 0); }
128 5cdb1798 2005-10-29 devnull | string '.' dot_string ={ $$ = cat(&$1, &$2, &$3, 0, 0 ,0, 0); }
129 5cdb1798 2005-10-29 devnull ;
130 5cdb1798 2005-10-29 devnull
131 5cdb1798 2005-10-29 devnull string : char ={ $$ = cat(&$1, 0, 0, 0, 0 ,0, 0); }
132 5cdb1798 2005-10-29 devnull | string char ={ $$ = cat(&$1, &$2, 0, 0, 0 ,0, 0); }
133 5cdb1798 2005-10-29 devnull ;
134 5cdb1798 2005-10-29 devnull
135 5cdb1798 2005-10-29 devnull quoted_string : '"' qtext '"' ={ $$ = cat(&$1, &$2, &$3, 0, 0 ,0, 0); }
136 5cdb1798 2005-10-29 devnull ;
137 5cdb1798 2005-10-29 devnull qtext : '\\' x ={ $$ = cat(&$2, 0, 0, 0, 0 ,0, 0); }
138 5cdb1798 2005-10-29 devnull | qtext '\\' x ={ $$ = cat(&$1, &$3, 0, 0, 0 ,0, 0); }
139 5cdb1798 2005-10-29 devnull | q
140 5cdb1798 2005-10-29 devnull | qtext q ={ $$ = cat(&$1, &$2, 0, 0, 0 ,0, 0); }
141 5cdb1798 2005-10-29 devnull ;
142 5cdb1798 2005-10-29 devnull char : c
143 5cdb1798 2005-10-29 devnull | '\\' x ={ $$ = $2; }
144 5cdb1798 2005-10-29 devnull ;
145 5cdb1798 2005-10-29 devnull dotnum : snum '.' snum '.' snum '.' snum ={ $$ = cat(&$1, &$2, &$3, &$4, &$5, &$6, &$7); }
146 5cdb1798 2005-10-29 devnull ;
147 5cdb1798 2005-10-29 devnull number : d ={ $$ = cat(&$1, 0, 0, 0, 0 ,0, 0); }
148 5cdb1798 2005-10-29 devnull | number d ={ $$ = cat(&$1, &$2, 0, 0, 0 ,0, 0); }
149 5cdb1798 2005-10-29 devnull ;
150 5cdb1798 2005-10-29 devnull snum : number ={ if(atoi(s_to_c($1.s)) > 255) print("bad snum\n"); }
151 5cdb1798 2005-10-29 devnull ;
152 5cdb1798 2005-10-29 devnull spaces : SPACE ={ $$ = $1; }
153 5cdb1798 2005-10-29 devnull | SPACE spaces ={ $$ = $1; }
154 5cdb1798 2005-10-29 devnull ;
155 5cdb1798 2005-10-29 devnull hunder : '-' | '_'
156 5cdb1798 2005-10-29 devnull ;
157 5cdb1798 2005-10-29 devnull special1 : CNTRL
158 5cdb1798 2005-10-29 devnull | '(' | ')' | ',' | '.'
159 5cdb1798 2005-10-29 devnull | ':' | ';' | '<' | '>' | '@'
160 5cdb1798 2005-10-29 devnull ;
161 5cdb1798 2005-10-29 devnull special : special1 | '\\' | '"'
162 5cdb1798 2005-10-29 devnull ;
163 5cdb1798 2005-10-29 devnull notspecial : '!' | '#' | '$' | '%' | '&' | '\''
164 5cdb1798 2005-10-29 devnull | '*' | '+' | '-' | '/'
165 5cdb1798 2005-10-29 devnull | '=' | '?'
166 5cdb1798 2005-10-29 devnull | '[' | ']' | '^' | '_' | '`' | '{' | '|' | '}' | '~'
167 5cdb1798 2005-10-29 devnull ;
168 5cdb1798 2005-10-29 devnull
169 5cdb1798 2005-10-29 devnull a : 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i'
170 5cdb1798 2005-10-29 devnull | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r'
171 5cdb1798 2005-10-29 devnull | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z'
172 5cdb1798 2005-10-29 devnull ;
173 5cdb1798 2005-10-29 devnull d : '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
174 5cdb1798 2005-10-29 devnull ;
175 5cdb1798 2005-10-29 devnull c : a | d | notspecial
176 5cdb1798 2005-10-29 devnull ;
177 5cdb1798 2005-10-29 devnull q : a | d | special1 | notspecial | SPACE
178 5cdb1798 2005-10-29 devnull ;
179 5cdb1798 2005-10-29 devnull x : a | d | special | notspecial | SPACE
180 5cdb1798 2005-10-29 devnull ;
181 5cdb1798 2005-10-29 devnull %%
182 5cdb1798 2005-10-29 devnull
183 5cdb1798 2005-10-29 devnull void
184 5cdb1798 2005-10-29 devnull parseinit(void)
185 5cdb1798 2005-10-29 devnull {
186 5cdb1798 2005-10-29 devnull bang = (YYSTYPE*)malloc(sizeof(YYSTYPE));
187 5cdb1798 2005-10-29 devnull bang->c = '!';
188 5cdb1798 2005-10-29 devnull bang->s = 0;
189 5cdb1798 2005-10-29 devnull yyfp = &bin;
190 5cdb1798 2005-10-29 devnull }
191 5cdb1798 2005-10-29 devnull
192 5cdb1798 2005-10-29 devnull yylex(void)
193 5cdb1798 2005-10-29 devnull {
194 5cdb1798 2005-10-29 devnull int c;
195 5cdb1798 2005-10-29 devnull
196 5cdb1798 2005-10-29 devnull for(;;){
197 5cdb1798 2005-10-29 devnull c = Bgetc(yyfp);
198 5cdb1798 2005-10-29 devnull if(c == -1)
199 5cdb1798 2005-10-29 devnull return 0;
200 5cdb1798 2005-10-29 devnull if(debug)
201 5cdb1798 2005-10-29 devnull fprint(2, "%c", c);
202 5cdb1798 2005-10-29 devnull yylval.c = c = c & 0x7F;
203 5cdb1798 2005-10-29 devnull if(c == '\n'){
204 5cdb1798 2005-10-29 devnull return CRLF;
205 5cdb1798 2005-10-29 devnull }
206 5cdb1798 2005-10-29 devnull if(c == '\r'){
207 5cdb1798 2005-10-29 devnull c = Bgetc(yyfp);
208 5cdb1798 2005-10-29 devnull if(c != '\n'){
209 5cdb1798 2005-10-29 devnull Bungetc(yyfp);
210 5cdb1798 2005-10-29 devnull c = '\r';
211 5cdb1798 2005-10-29 devnull } else {
212 5cdb1798 2005-10-29 devnull if(debug)
213 5cdb1798 2005-10-29 devnull fprint(2, "%c", c);
214 5cdb1798 2005-10-29 devnull return CRLF;
215 5cdb1798 2005-10-29 devnull }
216 5cdb1798 2005-10-29 devnull }
217 5cdb1798 2005-10-29 devnull if(isalpha(c))
218 5cdb1798 2005-10-29 devnull return tolower(c);
219 5cdb1798 2005-10-29 devnull if(isspace(c))
220 5cdb1798 2005-10-29 devnull return SPACE;
221 5cdb1798 2005-10-29 devnull if(iscntrl(c))
222 5cdb1798 2005-10-29 devnull return CNTRL;
223 5cdb1798 2005-10-29 devnull return c;
224 5cdb1798 2005-10-29 devnull }
225 5cdb1798 2005-10-29 devnull }
226 5cdb1798 2005-10-29 devnull
227 5cdb1798 2005-10-29 devnull YYSTYPE
228 5cdb1798 2005-10-29 devnull cat(YYSTYPE *y1, YYSTYPE *y2, YYSTYPE *y3, YYSTYPE *y4, YYSTYPE *y5, YYSTYPE *y6, YYSTYPE *y7)
229 5cdb1798 2005-10-29 devnull {
230 5cdb1798 2005-10-29 devnull YYSTYPE rv;
231 5cdb1798 2005-10-29 devnull
232 5cdb1798 2005-10-29 devnull if(y1->s)
233 5cdb1798 2005-10-29 devnull rv.s = y1->s;
234 5cdb1798 2005-10-29 devnull else {
235 5cdb1798 2005-10-29 devnull rv.s = s_new();
236 5cdb1798 2005-10-29 devnull s_putc(rv.s, y1->c);
237 5cdb1798 2005-10-29 devnull s_terminate(rv.s);
238 5cdb1798 2005-10-29 devnull }
239 5cdb1798 2005-10-29 devnull if(y2){
240 5cdb1798 2005-10-29 devnull if(y2->s){
241 5cdb1798 2005-10-29 devnull s_append(rv.s, s_to_c(y2->s));
242 5cdb1798 2005-10-29 devnull s_free(y2->s);
243 5cdb1798 2005-10-29 devnull } else {
244 5cdb1798 2005-10-29 devnull s_putc(rv.s, y2->c);
245 5cdb1798 2005-10-29 devnull s_terminate(rv.s);
246 5cdb1798 2005-10-29 devnull }
247 5cdb1798 2005-10-29 devnull } else
248 5cdb1798 2005-10-29 devnull return rv;
249 5cdb1798 2005-10-29 devnull if(y3){
250 5cdb1798 2005-10-29 devnull if(y3->s){
251 5cdb1798 2005-10-29 devnull s_append(rv.s, s_to_c(y3->s));
252 5cdb1798 2005-10-29 devnull s_free(y3->s);
253 5cdb1798 2005-10-29 devnull } else {
254 5cdb1798 2005-10-29 devnull s_putc(rv.s, y3->c);
255 5cdb1798 2005-10-29 devnull s_terminate(rv.s);
256 5cdb1798 2005-10-29 devnull }
257 5cdb1798 2005-10-29 devnull } else
258 5cdb1798 2005-10-29 devnull return rv;
259 5cdb1798 2005-10-29 devnull if(y4){
260 5cdb1798 2005-10-29 devnull if(y4->s){
261 5cdb1798 2005-10-29 devnull s_append(rv.s, s_to_c(y4->s));
262 5cdb1798 2005-10-29 devnull s_free(y4->s);
263 5cdb1798 2005-10-29 devnull } else {
264 5cdb1798 2005-10-29 devnull s_putc(rv.s, y4->c);
265 5cdb1798 2005-10-29 devnull s_terminate(rv.s);
266 5cdb1798 2005-10-29 devnull }
267 5cdb1798 2005-10-29 devnull } else
268 5cdb1798 2005-10-29 devnull return rv;
269 5cdb1798 2005-10-29 devnull if(y5){
270 5cdb1798 2005-10-29 devnull if(y5->s){
271 5cdb1798 2005-10-29 devnull s_append(rv.s, s_to_c(y5->s));
272 5cdb1798 2005-10-29 devnull s_free(y5->s);
273 5cdb1798 2005-10-29 devnull } else {
274 5cdb1798 2005-10-29 devnull s_putc(rv.s, y5->c);
275 5cdb1798 2005-10-29 devnull s_terminate(rv.s);
276 5cdb1798 2005-10-29 devnull }
277 5cdb1798 2005-10-29 devnull } else
278 5cdb1798 2005-10-29 devnull return rv;
279 5cdb1798 2005-10-29 devnull if(y6){
280 5cdb1798 2005-10-29 devnull if(y6->s){
281 5cdb1798 2005-10-29 devnull s_append(rv.s, s_to_c(y6->s));
282 5cdb1798 2005-10-29 devnull s_free(y6->s);
283 5cdb1798 2005-10-29 devnull } else {
284 5cdb1798 2005-10-29 devnull s_putc(rv.s, y6->c);
285 5cdb1798 2005-10-29 devnull s_terminate(rv.s);
286 5cdb1798 2005-10-29 devnull }
287 5cdb1798 2005-10-29 devnull } else
288 5cdb1798 2005-10-29 devnull return rv;
289 5cdb1798 2005-10-29 devnull if(y7){
290 5cdb1798 2005-10-29 devnull if(y7->s){
291 5cdb1798 2005-10-29 devnull s_append(rv.s, s_to_c(y7->s));
292 5cdb1798 2005-10-29 devnull s_free(y7->s);
293 5cdb1798 2005-10-29 devnull } else {
294 5cdb1798 2005-10-29 devnull s_putc(rv.s, y7->c);
295 5cdb1798 2005-10-29 devnull s_terminate(rv.s);
296 5cdb1798 2005-10-29 devnull }
297 5cdb1798 2005-10-29 devnull } else
298 5cdb1798 2005-10-29 devnull return rv;
299 5cdb1798 2005-10-29 devnull }
300 5cdb1798 2005-10-29 devnull
301 5cdb1798 2005-10-29 devnull void
302 5cdb1798 2005-10-29 devnull yyerror(char *x)
303 5cdb1798 2005-10-29 devnull {
304 5cdb1798 2005-10-29 devnull USED(x);
305 5cdb1798 2005-10-29 devnull }
306 5cdb1798 2005-10-29 devnull
307 5cdb1798 2005-10-29 devnull /*
308 5cdb1798 2005-10-29 devnull * an anonymous user
309 5cdb1798 2005-10-29 devnull */
310 5cdb1798 2005-10-29 devnull YYSTYPE
311 5cdb1798 2005-10-29 devnull anonymous(void)
312 5cdb1798 2005-10-29 devnull {
313 5cdb1798 2005-10-29 devnull YYSTYPE rv;
314 5cdb1798 2005-10-29 devnull
315 5cdb1798 2005-10-29 devnull rv.s = s_copy("/dev/null");
316 5cdb1798 2005-10-29 devnull return rv;
317 5cdb1798 2005-10-29 devnull }