cc2df17c109626b5bcdf44e07eefd14dbe0837b2
[abartlet/samba.git/.git] / source4 / heimdal / lib / hx509 / sel-lex.c
1 #include "config.h"
2
3 #line 3 "heimdal/lib/hx509/sel-lex.c"
4
5 #define  YY_INT_ALIGNED short int
6
7 /* A lexical scanner generated by flex */
8
9 #define FLEX_SCANNER
10 #define YY_FLEX_MAJOR_VERSION 2
11 #define YY_FLEX_MINOR_VERSION 5
12 #define YY_FLEX_SUBMINOR_VERSION 35
13 #if YY_FLEX_SUBMINOR_VERSION > 0
14 #define FLEX_BETA
15 #endif
16
17 /* First, we deal with  platform-specific or compiler-specific issues. */
18
19 /* begin standard C headers. */
20 #include <stdio.h>
21 #include <string.h>
22 #include <errno.h>
23 #include <stdlib.h>
24
25 /* end standard C headers. */
26
27 /* flex integer type definitions */
28
29 #ifndef FLEXINT_H
30 #define FLEXINT_H
31
32 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
33
34 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
35
36 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
37  * if you want the limit (max/min) macros for int types. 
38  */
39 #ifndef __STDC_LIMIT_MACROS
40 #define __STDC_LIMIT_MACROS 1
41 #endif
42
43 #include <inttypes.h>
44 typedef int8_t flex_int8_t;
45 typedef uint8_t flex_uint8_t;
46 typedef int16_t flex_int16_t;
47 typedef uint16_t flex_uint16_t;
48 typedef int32_t flex_int32_t;
49 typedef uint32_t flex_uint32_t;
50 #else
51 typedef signed char flex_int8_t;
52 typedef short int flex_int16_t;
53 typedef int flex_int32_t;
54 typedef unsigned char flex_uint8_t; 
55 typedef unsigned short int flex_uint16_t;
56 typedef unsigned int flex_uint32_t;
57 #endif /* ! C99 */
58
59 /* Limits of integral types. */
60 #ifndef INT8_MIN
61 #define INT8_MIN               (-128)
62 #endif
63 #ifndef INT16_MIN
64 #define INT16_MIN              (-32767-1)
65 #endif
66 #ifndef INT32_MIN
67 #define INT32_MIN              (-2147483647-1)
68 #endif
69 #ifndef INT8_MAX
70 #define INT8_MAX               (127)
71 #endif
72 #ifndef INT16_MAX
73 #define INT16_MAX              (32767)
74 #endif
75 #ifndef INT32_MAX
76 #define INT32_MAX              (2147483647)
77 #endif
78 #ifndef UINT8_MAX
79 #define UINT8_MAX              (255U)
80 #endif
81 #ifndef UINT16_MAX
82 #define UINT16_MAX             (65535U)
83 #endif
84 #ifndef UINT32_MAX
85 #define UINT32_MAX             (4294967295U)
86 #endif
87
88 #endif /* ! FLEXINT_H */
89
90 #ifdef __cplusplus
91
92 /* The "const" storage-class-modifier is valid. */
93 #define YY_USE_CONST
94
95 #else   /* ! __cplusplus */
96
97 /* C99 requires __STDC__ to be defined as 1. */
98 #if defined (__STDC__)
99
100 #define YY_USE_CONST
101
102 #endif  /* defined (__STDC__) */
103 #endif  /* ! __cplusplus */
104
105 #ifdef YY_USE_CONST
106 #define yyconst const
107 #else
108 #define yyconst
109 #endif
110
111 /* Returned upon end-of-file. */
112 #define YY_NULL 0
113
114 /* Promotes a possibly negative, possibly signed char to an unsigned
115  * integer for use as an array index.  If the signed char is negative,
116  * we want to instead treat it as an 8-bit unsigned char, hence the
117  * double cast.
118  */
119 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
120
121 /* Enter a start condition.  This macro really ought to take a parameter,
122  * but we do it the disgusting crufty way forced on us by the ()-less
123  * definition of BEGIN.
124  */
125 #define BEGIN (yy_start) = 1 + 2 *
126
127 /* Translate the current start state into a value that can be later handed
128  * to BEGIN to return to the state.  The YYSTATE alias is for lex
129  * compatibility.
130  */
131 #define YY_START (((yy_start) - 1) / 2)
132 #define YYSTATE YY_START
133
134 /* Action number for EOF rule of a given start state. */
135 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
136
137 /* Special action meaning "start processing a new file". */
138 #define YY_NEW_FILE yyrestart(yyin  )
139
140 #define YY_END_OF_BUFFER_CHAR 0
141
142 /* Size of default input buffer. */
143 #ifndef YY_BUF_SIZE
144 #define YY_BUF_SIZE 16384
145 #endif
146
147 /* The state buf must be large enough to hold one state per character in the main buffer.
148  */
149 #define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
150
151 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
152 #define YY_TYPEDEF_YY_BUFFER_STATE
153 typedef struct yy_buffer_state *YY_BUFFER_STATE;
154 #endif
155
156 extern int yyleng;
157
158 extern FILE *yyin, *yyout;
159
160 #define EOB_ACT_CONTINUE_SCAN 0
161 #define EOB_ACT_END_OF_FILE 1
162 #define EOB_ACT_LAST_MATCH 2
163
164     #define YY_LESS_LINENO(n)
165     
166 /* Return all but the first "n" matched characters back to the input stream. */
167 #define yyless(n) \
168         do \
169                 { \
170                 /* Undo effects of setting up yytext. */ \
171         int yyless_macro_arg = (n); \
172         YY_LESS_LINENO(yyless_macro_arg);\
173                 *yy_cp = (yy_hold_char); \
174                 YY_RESTORE_YY_MORE_OFFSET \
175                 (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
176                 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
177                 } \
178         while ( 0 )
179
180 #define unput(c) yyunput( c, (yytext_ptr)  )
181
182 #ifndef YY_TYPEDEF_YY_SIZE_T
183 #define YY_TYPEDEF_YY_SIZE_T
184 typedef size_t yy_size_t;
185 #endif
186
187 #ifndef YY_STRUCT_YY_BUFFER_STATE
188 #define YY_STRUCT_YY_BUFFER_STATE
189 struct yy_buffer_state
190         {
191         FILE *yy_input_file;
192
193         char *yy_ch_buf;                /* input buffer */
194         char *yy_buf_pos;               /* current position in input buffer */
195
196         /* Size of input buffer in bytes, not including room for EOB
197          * characters.
198          */
199         yy_size_t yy_buf_size;
200
201         /* Number of characters read into yy_ch_buf, not including EOB
202          * characters.
203          */
204         int yy_n_chars;
205
206         /* Whether we "own" the buffer - i.e., we know we created it,
207          * and can realloc() it to grow it, and should free() it to
208          * delete it.
209          */
210         int yy_is_our_buffer;
211
212         /* Whether this is an "interactive" input source; if so, and
213          * if we're using stdio for input, then we want to use getc()
214          * instead of fread(), to make sure we stop fetching input after
215          * each newline.
216          */
217         int yy_is_interactive;
218
219         /* Whether we're considered to be at the beginning of a line.
220          * If so, '^' rules will be active on the next match, otherwise
221          * not.
222          */
223         int yy_at_bol;
224
225     int yy_bs_lineno; /**< The line count. */
226     int yy_bs_column; /**< The column count. */
227     
228         /* Whether to try to fill the input buffer when we reach the
229          * end of it.
230          */
231         int yy_fill_buffer;
232
233         int yy_buffer_status;
234
235 #define YY_BUFFER_NEW 0
236 #define YY_BUFFER_NORMAL 1
237         /* When an EOF's been seen but there's still some text to process
238          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
239          * shouldn't try reading from the input source any more.  We might
240          * still have a bunch of tokens to match, though, because of
241          * possible backing-up.
242          *
243          * When we actually see the EOF, we change the status to "new"
244          * (via yyrestart()), so that the user can continue scanning by
245          * just pointing yyin at a new input file.
246          */
247 #define YY_BUFFER_EOF_PENDING 2
248
249         };
250 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
251
252 /* Stack of input buffers. */
253 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
254 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
255 static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
256
257 /* We provide macros for accessing buffer states in case in the
258  * future we want to put the buffer states in a more general
259  * "scanner state".
260  *
261  * Returns the top of the stack, or NULL.
262  */
263 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
264                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
265                           : NULL)
266
267 /* Same as previous macro, but useful when we know that the buffer stack is not
268  * NULL or when we need an lvalue. For internal use only.
269  */
270 #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
271
272 /* yy_hold_char holds the character lost when yytext is formed. */
273 static char yy_hold_char;
274 static int yy_n_chars;          /* number of characters read into yy_ch_buf */
275 int yyleng;
276
277 /* Points to current character in buffer. */
278 static char *yy_c_buf_p = (char *) 0;
279 static int yy_init = 0;         /* whether we need to initialize */
280 static int yy_start = 0;        /* start state number */
281
282 /* Flag which is used to allow yywrap()'s to do buffer switches
283  * instead of setting up a fresh yyin.  A bit of a hack ...
284  */
285 static int yy_did_buffer_switch_on_eof;
286
287 void yyrestart (FILE *input_file  );
288 void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
289 YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
290 void yy_delete_buffer (YY_BUFFER_STATE b  );
291 void yy_flush_buffer (YY_BUFFER_STATE b  );
292 void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
293 void yypop_buffer_state (void );
294
295 static void yyensure_buffer_stack (void );
296 static void yy_load_buffer_state (void );
297 static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
298
299 #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
300
301 YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
302 YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
303 YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len  );
304
305 void *yyalloc (yy_size_t  );
306 void *yyrealloc (void *,yy_size_t  );
307 void yyfree (void *  );
308
309 #define yy_new_buffer yy_create_buffer
310
311 #define yy_set_interactive(is_interactive) \
312         { \
313         if ( ! YY_CURRENT_BUFFER ){ \
314         yyensure_buffer_stack (); \
315                 YY_CURRENT_BUFFER_LVALUE =    \
316             yy_create_buffer(yyin,YY_BUF_SIZE ); \
317         } \
318         YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
319         }
320
321 #define yy_set_bol(at_bol) \
322         { \
323         if ( ! YY_CURRENT_BUFFER ){\
324         yyensure_buffer_stack (); \
325                 YY_CURRENT_BUFFER_LVALUE =    \
326             yy_create_buffer(yyin,YY_BUF_SIZE ); \
327         } \
328         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
329         }
330
331 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
332
333 /* Begin user sect3 */
334
335 typedef unsigned char YY_CHAR;
336
337 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
338
339 typedef int yy_state_type;
340
341 extern int yylineno;
342
343 int yylineno = 1;
344
345 extern char *yytext;
346 #define yytext_ptr yytext
347
348 static yy_state_type yy_get_previous_state (void );
349 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
350 static int yy_get_next_buffer (void );
351 static void yy_fatal_error (yyconst char msg[]  );
352
353 /* Done after the current pattern has been matched and before the
354  * corresponding action - sets up yytext.
355  */
356 #define YY_DO_BEFORE_ACTION \
357         (yytext_ptr) = yy_bp; \
358         yyleng = (size_t) (yy_cp - yy_bp); \
359         (yy_hold_char) = *yy_cp; \
360         *yy_cp = '\0'; \
361         (yy_c_buf_p) = yy_cp;
362
363 #define YY_NUM_RULES 12
364 #define YY_END_OF_BUFFER 13
365 /* This struct is not used in this scanner,
366    but its presence is necessary. */
367 struct yy_trans_info
368         {
369         flex_int32_t yy_verify;
370         flex_int32_t yy_nxt;
371         };
372 static yyconst flex_int16_t yy_accept[36] =
373     {   0,
374         0,    0,   13,   12,   11,    9,   10,    8,    7,    7,
375         7,    7,    7,    7,    7,    7,    7,    5,    4,    7,
376         7,    3,    7,    7,    7,    7,    7,    1,    2,    7,
377         7,    7,    7,    6,    0
378     } ;
379
380 static yyconst flex_int32_t yy_ec[256] =
381     {   0,
382         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
383         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
384         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
385         1,    2,    4,    5,    1,    1,    4,    1,    1,    4,
386         4,    1,    1,    4,    6,    4,    1,    6,    6,    6,
387         6,    6,    6,    6,    6,    6,    6,    1,    1,    1,
388         4,    1,    1,    1,    7,    8,    9,   10,   11,   12,
389         8,   13,   14,    8,    8,   15,   16,   17,   18,    8,
390         8,   19,   20,   21,   22,    8,    8,    8,    8,    8,
391         1,    1,    1,    1,    6,    1,    8,    8,    8,    8,
392
393         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
394         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
395         8,    8,    4,    1,    4,    1,    1,    1,    1,    1,
396         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
397         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
398         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
399         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
400         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
401         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
402         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
403
404         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
405         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
406         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
407         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
408         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
409         1,    1,    1,    1,    1
410     } ;
411
412 static yyconst flex_int32_t yy_meta[23] =
413     {   0,
414         1,    1,    1,    1,    1,    2,    2,    2,    2,    2,
415         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
416         2,    2
417     } ;
418
419 static yyconst flex_int16_t yy_base[37] =
420     {   0,
421         0,    0,   43,   44,   44,   44,   44,   44,   25,    0,
422        34,   23,   20,   16,    0,   28,   22,    0,    0,   22,
423        12,    0,   13,   17,   20,   19,   13,    0,    0,   21,
424         6,   17,   12,    0,   44,   22
425     } ;
426
427 static yyconst flex_int16_t yy_def[37] =
428     {   0,
429        35,    1,   35,   35,   35,   35,   35,   35,   36,   36,
430        36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
431        36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
432        36,   36,   36,   36,    0,   35
433     } ;
434
435 static yyconst flex_int16_t yy_nxt[67] =
436     {   0,
437         4,    5,    6,    7,    8,    4,    9,   10,   10,   10,
438        10,   11,   10,   12,   10,   10,   10,   13,   10,   10,
439        14,   10,   20,   15,   34,   33,   32,   31,   30,   29,
440        28,   27,   26,   25,   21,   24,   23,   22,   19,   18,
441        17,   16,   35,    3,   35,   35,   35,   35,   35,   35,
442        35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
443        35,   35,   35,   35,   35,   35
444     } ;
445
446 static yyconst flex_int16_t yy_chk[67] =
447     {   0,
448         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
449         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
450         1,    1,   14,   36,   33,   32,   31,   30,   27,   26,
451        25,   24,   23,   21,   14,   20,   17,   16,   13,   12,
452        11,    9,    3,   35,   35,   35,   35,   35,   35,   35,
453        35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
454        35,   35,   35,   35,   35,   35
455     } ;
456
457 static yy_state_type yy_last_accepting_state;
458 static char *yy_last_accepting_cpos;
459
460 extern int yy_flex_debug;
461 int yy_flex_debug = 0;
462
463 /* The intent behind this definition is that it'll catch
464  * any uses of REJECT which flex missed.
465  */
466 #define REJECT reject_used_but_not_detected
467 #define yymore() yymore_used_but_not_detected
468 #define YY_MORE_ADJ 0
469 #define YY_RESTORE_YY_MORE_OFFSET
470 char *yytext;
471 #line 1 "sel-lex.l"
472 #line 2 "sel-lex.l"
473 /*
474  * Copyright (c) 2004, 2008 Kungliga Tekniska Högskolan
475  * (Royal Institute of Technology, Stockholm, Sweden).
476  * All rights reserved.
477  *
478  * Redistribution and use in source and binary forms, with or without
479  * modification, are permitted provided that the following conditions
480  * are met:
481  *
482  * 1. Redistributions of source code must retain the above copyright
483  *    notice, this list of conditions and the following disclaimer.
484  *
485  * 2. Redistributions in binary form must reproduce the above copyright
486  *    notice, this list of conditions and the following disclaimer in the
487  *    documentation and/or other materials provided with the distribution.
488  *
489  * 3. Neither the name of the Institute nor the names of its contributors
490  *    may be used to endorse or promote products derived from this software
491  *    without specific prior written permission.
492  *
493  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
494  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
495  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
496  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
497  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
498  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
499  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
500  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
501  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
502  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
503  * SUCH DAMAGE.
504  */
505
506 /* $Id$ */
507
508 #ifdef HAVE_CONFIG_H
509 #include <config.h>
510 #endif
511
512 #undef ECHO
513
514 #include <stdio.h>
515 #include <string.h>
516 #include <stdarg.h>
517 #include <stdlib.h>
518 #include "sel.h"
519 #include "sel-gram.h"
520 unsigned lineno = 1;
521
522 static char * handle_string(void);
523 static int lex_input(char *, int);
524
525 struct hx_expr_input _hx509_expr_input;
526
527 #ifndef YY_NULL
528 #define YY_NULL 0
529 #endif
530
531 #define YY_NO_UNPUT 1
532
533 #undef YY_INPUT
534 #define YY_INPUT(buf,res,maxsize) (res = lex_input(buf, maxsize))
535
536 #undef ECHO
537
538 #line 538 "heimdal/lib/hx509/sel-lex.c"
539
540 #define INITIAL 0
541
542 #ifndef YY_NO_UNISTD_H
543 /* Special case for "unistd.h", since it is non-ANSI. We include it way
544  * down here because we want the user's section 1 to have been scanned first.
545  * The user has a chance to override it with an option.
546  */
547 #include <unistd.h>
548 #endif
549
550 #ifndef YY_EXTRA_TYPE
551 #define YY_EXTRA_TYPE void *
552 #endif
553
554 static int yy_init_globals (void );
555
556 /* Accessor methods to globals.
557    These are made visible to non-reentrant scanners for convenience. */
558
559 int yylex_destroy (void );
560
561 int yyget_debug (void );
562
563 void yyset_debug (int debug_flag  );
564
565 YY_EXTRA_TYPE yyget_extra (void );
566
567 void yyset_extra (YY_EXTRA_TYPE user_defined  );
568
569 FILE *yyget_in (void );
570
571 void yyset_in  (FILE * in_str  );
572
573 FILE *yyget_out (void );
574
575 void yyset_out  (FILE * out_str  );
576
577 int yyget_leng (void );
578
579 char *yyget_text (void );
580
581 int yyget_lineno (void );
582
583 void yyset_lineno (int line_number  );
584
585 /* Macros after this point can all be overridden by user definitions in
586  * section 1.
587  */
588
589 #ifndef YY_SKIP_YYWRAP
590 #ifdef __cplusplus
591 extern "C" int yywrap (void );
592 #else
593 extern int yywrap (void );
594 #endif
595 #endif
596
597     static void yyunput (int c,char *buf_ptr  );
598     
599 #ifndef yytext_ptr
600 static void yy_flex_strncpy (char *,yyconst char *,int );
601 #endif
602
603 #ifdef YY_NEED_STRLEN
604 static int yy_flex_strlen (yyconst char * );
605 #endif
606
607 #ifndef YY_NO_INPUT
608
609 #ifdef __cplusplus
610 static int yyinput (void );
611 #else
612 static int input (void );
613 #endif
614
615 #endif
616
617 /* Amount of stuff to slurp up with each read. */
618 #ifndef YY_READ_BUF_SIZE
619 #define YY_READ_BUF_SIZE 8192
620 #endif
621
622 /* Copy whatever the last rule matched to the standard output. */
623 #ifndef ECHO
624 /* This used to be an fputs(), but since the string might contain NUL's,
625  * we now use fwrite().
626  */
627 #define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
628 #endif
629
630 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
631  * is returned in "result".
632  */
633 #ifndef YY_INPUT
634 #define YY_INPUT(buf,result,max_size) \
635         if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
636                 { \
637                 int c = '*'; \
638                 unsigned n; \
639                 for ( n = 0; n < max_size && \
640                              (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
641                         buf[n] = (char) c; \
642                 if ( c == '\n' ) \
643                         buf[n++] = (char) c; \
644                 if ( c == EOF && ferror( yyin ) ) \
645                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
646                 result = n; \
647                 } \
648         else \
649                 { \
650                 errno=0; \
651                 while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
652                         { \
653                         if( errno != EINTR) \
654                                 { \
655                                 YY_FATAL_ERROR( "input in flex scanner failed" ); \
656                                 break; \
657                                 } \
658                         errno=0; \
659                         clearerr(yyin); \
660                         } \
661                 }\
662 \
663
664 #endif
665
666 /* No semi-colon after return; correct usage is to write "yyterminate();" -
667  * we don't want an extra ';' after the "return" because that will cause
668  * some compilers to complain about unreachable statements.
669  */
670 #ifndef yyterminate
671 #define yyterminate() return YY_NULL
672 #endif
673
674 /* Number of entries by which start-condition stack grows. */
675 #ifndef YY_START_STACK_INCR
676 #define YY_START_STACK_INCR 25
677 #endif
678
679 /* Report a fatal error. */
680 #ifndef YY_FATAL_ERROR
681 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
682 #endif
683
684 /* end tables serialization structures and prototypes */
685
686 /* Default declaration of generated scanner - a define so the user can
687  * easily add parameters.
688  */
689 #ifndef YY_DECL
690 #define YY_DECL_IS_OURS 1
691
692 extern int yylex (void);
693
694 #define YY_DECL int yylex (void)
695 #endif /* !YY_DECL */
696
697 /* Code executed at the beginning of each rule, after yytext and yyleng
698  * have been set up.
699  */
700 #ifndef YY_USER_ACTION
701 #define YY_USER_ACTION
702 #endif
703
704 /* Code executed at the end of each rule. */
705 #ifndef YY_BREAK
706 #define YY_BREAK break;
707 #endif
708
709 #define YY_RULE_SETUP \
710         YY_USER_ACTION
711
712 /** The main scanner function which does all the work.
713  */
714 YY_DECL
715 {
716         register yy_state_type yy_current_state;
717         register char *yy_cp, *yy_bp;
718         register int yy_act;
719     
720 #line 68 "sel-lex.l"
721
722
723 #line 723 "heimdal/lib/hx509/sel-lex.c"
724
725         if ( !(yy_init) )
726                 {
727                 (yy_init) = 1;
728
729 #ifdef YY_USER_INIT
730                 YY_USER_INIT;
731 #endif
732
733                 if ( ! (yy_start) )
734                         (yy_start) = 1; /* first start state */
735
736                 if ( ! yyin )
737                         yyin = stdin;
738
739                 if ( ! yyout )
740                         yyout = stdout;
741
742                 if ( ! YY_CURRENT_BUFFER ) {
743                         yyensure_buffer_stack ();
744                         YY_CURRENT_BUFFER_LVALUE =
745                                 yy_create_buffer(yyin,YY_BUF_SIZE );
746                 }
747
748                 yy_load_buffer_state( );
749                 }
750
751         while ( 1 )             /* loops until end-of-file is reached */
752                 {
753                 yy_cp = (yy_c_buf_p);
754
755                 /* Support of yytext. */
756                 *yy_cp = (yy_hold_char);
757
758                 /* yy_bp points to the position in yy_ch_buf of the start of
759                  * the current run.
760                  */
761                 yy_bp = yy_cp;
762
763                 yy_current_state = (yy_start);
764 yy_match:
765                 do
766                         {
767                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
768                         if ( yy_accept[yy_current_state] )
769                                 {
770                                 (yy_last_accepting_state) = yy_current_state;
771                                 (yy_last_accepting_cpos) = yy_cp;
772                                 }
773                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
774                                 {
775                                 yy_current_state = (int) yy_def[yy_current_state];
776                                 if ( yy_current_state >= 36 )
777                                         yy_c = yy_meta[(unsigned int) yy_c];
778                                 }
779                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
780                         ++yy_cp;
781                         }
782                 while ( yy_base[yy_current_state] != 44 );
783
784 yy_find_action:
785                 yy_act = yy_accept[yy_current_state];
786                 if ( yy_act == 0 )
787                         { /* have to back up */
788                         yy_cp = (yy_last_accepting_cpos);
789                         yy_current_state = (yy_last_accepting_state);
790                         yy_act = yy_accept[yy_current_state];
791                         }
792
793                 YY_DO_BEFORE_ACTION;
794
795 do_action:      /* This label is used only to access EOF actions. */
796
797                 switch ( yy_act )
798         { /* beginning of action switch */
799                         case 0: /* must back up */
800                         /* undo the effects of YY_DO_BEFORE_ACTION */
801                         *yy_cp = (yy_hold_char);
802                         yy_cp = (yy_last_accepting_cpos);
803                         yy_current_state = (yy_last_accepting_state);
804                         goto yy_find_action;
805
806 case 1:
807 YY_RULE_SETUP
808 #line 70 "sel-lex.l"
809 { return kw_TRUE; }
810         YY_BREAK
811 case 2:
812 YY_RULE_SETUP
813 #line 71 "sel-lex.l"
814 { return kw_FALSE; }
815         YY_BREAK
816 case 3:
817 YY_RULE_SETUP
818 #line 72 "sel-lex.l"
819 { return kw_AND; }
820         YY_BREAK
821 case 4:
822 YY_RULE_SETUP
823 #line 73 "sel-lex.l"
824 { return kw_OR; }
825         YY_BREAK
826 case 5:
827 YY_RULE_SETUP
828 #line 74 "sel-lex.l"
829 { return kw_IN; }
830         YY_BREAK
831 case 6:
832 YY_RULE_SETUP
833 #line 75 "sel-lex.l"
834 { return kw_TAILMATCH; }
835         YY_BREAK
836 case 7:
837 YY_RULE_SETUP
838 #line 77 "sel-lex.l"
839 {
840                           yylval.string = strdup ((const char *)yytext);
841                           return IDENTIFIER;
842                         }
843         YY_BREAK
844 case 8:
845 YY_RULE_SETUP
846 #line 81 "sel-lex.l"
847 { yylval.string = handle_string(); return STRING; }
848         YY_BREAK
849 case 9:
850 /* rule 9 can match eol */
851 YY_RULE_SETUP
852 #line 82 "sel-lex.l"
853 { ++lineno; }
854         YY_BREAK
855 case 10:
856 YY_RULE_SETUP
857 #line 83 "sel-lex.l"
858 { return *yytext; }
859         YY_BREAK
860 case 11:
861 YY_RULE_SETUP
862 #line 84 "sel-lex.l"
863 ;
864         YY_BREAK
865 case 12:
866 YY_RULE_SETUP
867 #line 85 "sel-lex.l"
868 ECHO;
869         YY_BREAK
870 #line 870 "heimdal/lib/hx509/sel-lex.c"
871 case YY_STATE_EOF(INITIAL):
872         yyterminate();
873
874         case YY_END_OF_BUFFER:
875                 {
876                 /* Amount of text matched not including the EOB char. */
877                 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
878
879                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
880                 *yy_cp = (yy_hold_char);
881                 YY_RESTORE_YY_MORE_OFFSET
882
883                 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
884                         {
885                         /* We're scanning a new file or input source.  It's
886                          * possible that this happened because the user
887                          * just pointed yyin at a new source and called
888                          * yylex().  If so, then we have to assure
889                          * consistency between YY_CURRENT_BUFFER and our
890                          * globals.  Here is the right place to do so, because
891                          * this is the first action (other than possibly a
892                          * back-up) that will match for the new input source.
893                          */
894                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
895                         YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
896                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
897                         }
898
899                 /* Note that here we test for yy_c_buf_p "<=" to the position
900                  * of the first EOB in the buffer, since yy_c_buf_p will
901                  * already have been incremented past the NUL character
902                  * (since all states make transitions on EOB to the
903                  * end-of-buffer state).  Contrast this with the test
904                  * in input().
905                  */
906                 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
907                         { /* This was really a NUL. */
908                         yy_state_type yy_next_state;
909
910                         (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
911
912                         yy_current_state = yy_get_previous_state(  );
913
914                         /* Okay, we're now positioned to make the NUL
915                          * transition.  We couldn't have
916                          * yy_get_previous_state() go ahead and do it
917                          * for us because it doesn't know how to deal
918                          * with the possibility of jamming (and we don't
919                          * want to build jamming into it because then it
920                          * will run more slowly).
921                          */
922
923                         yy_next_state = yy_try_NUL_trans( yy_current_state );
924
925                         yy_bp = (yytext_ptr) + YY_MORE_ADJ;
926
927                         if ( yy_next_state )
928                                 {
929                                 /* Consume the NUL. */
930                                 yy_cp = ++(yy_c_buf_p);
931                                 yy_current_state = yy_next_state;
932                                 goto yy_match;
933                                 }
934
935                         else
936                                 {
937                                 yy_cp = (yy_c_buf_p);
938                                 goto yy_find_action;
939                                 }
940                         }
941
942                 else switch ( yy_get_next_buffer(  ) )
943                         {
944                         case EOB_ACT_END_OF_FILE:
945                                 {
946                                 (yy_did_buffer_switch_on_eof) = 0;
947
948                                 if ( yywrap( ) )
949                                         {
950                                         /* Note: because we've taken care in
951                                          * yy_get_next_buffer() to have set up
952                                          * yytext, we can now set up
953                                          * yy_c_buf_p so that if some total
954                                          * hoser (like flex itself) wants to
955                                          * call the scanner after we return the
956                                          * YY_NULL, it'll still work - another
957                                          * YY_NULL will get returned.
958                                          */
959                                         (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
960
961                                         yy_act = YY_STATE_EOF(YY_START);
962                                         goto do_action;
963                                         }
964
965                                 else
966                                         {
967                                         if ( ! (yy_did_buffer_switch_on_eof) )
968                                                 YY_NEW_FILE;
969                                         }
970                                 break;
971                                 }
972
973                         case EOB_ACT_CONTINUE_SCAN:
974                                 (yy_c_buf_p) =
975                                         (yytext_ptr) + yy_amount_of_matched_text;
976
977                                 yy_current_state = yy_get_previous_state(  );
978
979                                 yy_cp = (yy_c_buf_p);
980                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
981                                 goto yy_match;
982
983                         case EOB_ACT_LAST_MATCH:
984                                 (yy_c_buf_p) =
985                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
986
987                                 yy_current_state = yy_get_previous_state(  );
988
989                                 yy_cp = (yy_c_buf_p);
990                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
991                                 goto yy_find_action;
992                         }
993                 break;
994                 }
995
996         default:
997                 YY_FATAL_ERROR(
998                         "fatal flex scanner internal error--no action found" );
999         } /* end of action switch */
1000                 } /* end of scanning one token */
1001 } /* end of yylex */
1002
1003 /* yy_get_next_buffer - try to read in a new buffer
1004  *
1005  * Returns a code representing an action:
1006  *      EOB_ACT_LAST_MATCH -
1007  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
1008  *      EOB_ACT_END_OF_FILE - end of file
1009  */
1010 static int yy_get_next_buffer (void)
1011 {
1012         register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
1013         register char *source = (yytext_ptr);
1014         register int number_to_move, i;
1015         int ret_val;
1016
1017         if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
1018                 YY_FATAL_ERROR(
1019                 "fatal flex scanner internal error--end of buffer missed" );
1020
1021         if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
1022                 { /* Don't try to fill the buffer, so this is an EOF. */
1023                 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
1024                         {
1025                         /* We matched a single character, the EOB, so
1026                          * treat this as a final EOF.
1027                          */
1028                         return EOB_ACT_END_OF_FILE;
1029                         }
1030
1031                 else
1032                         {
1033                         /* We matched some text prior to the EOB, first
1034                          * process it.
1035                          */
1036                         return EOB_ACT_LAST_MATCH;
1037                         }
1038                 }
1039
1040         /* Try to read more data. */
1041
1042         /* First move last chars to start of buffer. */
1043         number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
1044
1045         for ( i = 0; i < number_to_move; ++i )
1046                 *(dest++) = *(source++);
1047
1048         if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
1049                 /* don't do the read, it's not guaranteed to return an EOF,
1050                  * just force an EOF
1051                  */
1052                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
1053
1054         else
1055                 {
1056                         int num_to_read =
1057                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
1058
1059                 while ( num_to_read <= 0 )
1060                         { /* Not enough room in the buffer - grow it. */
1061
1062                         /* just a shorter name for the current buffer */
1063                         YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
1064
1065                         int yy_c_buf_p_offset =
1066                                 (int) ((yy_c_buf_p) - b->yy_ch_buf);
1067
1068                         if ( b->yy_is_our_buffer )
1069                                 {
1070                                 int new_size = b->yy_buf_size * 2;
1071
1072                                 if ( new_size <= 0 )
1073                                         b->yy_buf_size += b->yy_buf_size / 8;
1074                                 else
1075                                         b->yy_buf_size *= 2;
1076
1077                                 b->yy_ch_buf = (char *)
1078                                         /* Include room in for 2 EOB chars. */
1079                                         yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
1080                                 }
1081                         else
1082                                 /* Can't grow it, we don't own it. */
1083                                 b->yy_ch_buf = 0;
1084
1085                         if ( ! b->yy_ch_buf )
1086                                 YY_FATAL_ERROR(
1087                                 "fatal error - scanner input buffer overflow" );
1088
1089                         (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
1090
1091                         num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
1092                                                 number_to_move - 1;
1093
1094                         }
1095
1096                 if ( num_to_read > YY_READ_BUF_SIZE )
1097                         num_to_read = YY_READ_BUF_SIZE;
1098
1099                 /* Read in more data. */
1100                 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
1101                         (yy_n_chars), (size_t) num_to_read );
1102
1103                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
1104                 }
1105
1106         if ( (yy_n_chars) == 0 )
1107                 {
1108                 if ( number_to_move == YY_MORE_ADJ )
1109                         {
1110                         ret_val = EOB_ACT_END_OF_FILE;
1111                         yyrestart(yyin  );
1112                         }
1113
1114                 else
1115                         {
1116                         ret_val = EOB_ACT_LAST_MATCH;
1117                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
1118                                 YY_BUFFER_EOF_PENDING;
1119                         }
1120                 }
1121
1122         else
1123                 ret_val = EOB_ACT_CONTINUE_SCAN;
1124
1125         if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
1126                 /* Extend the array by 50%, plus the number we really need. */
1127                 yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
1128                 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
1129                 if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
1130                         YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
1131         }
1132
1133         (yy_n_chars) += number_to_move;
1134         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
1135         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
1136
1137         (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
1138
1139         return ret_val;
1140 }
1141
1142 /* yy_get_previous_state - get the state just before the EOB char was reached */
1143
1144     static yy_state_type yy_get_previous_state (void)
1145 {
1146         register yy_state_type yy_current_state;
1147         register char *yy_cp;
1148     
1149         yy_current_state = (yy_start);
1150
1151         for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
1152                 {
1153                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
1154                 if ( yy_accept[yy_current_state] )
1155                         {
1156                         (yy_last_accepting_state) = yy_current_state;
1157                         (yy_last_accepting_cpos) = yy_cp;
1158                         }
1159                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1160                         {
1161                         yy_current_state = (int) yy_def[yy_current_state];
1162                         if ( yy_current_state >= 36 )
1163                                 yy_c = yy_meta[(unsigned int) yy_c];
1164                         }
1165                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1166                 }
1167
1168         return yy_current_state;
1169 }
1170
1171 /* yy_try_NUL_trans - try to make a transition on the NUL character
1172  *
1173  * synopsis
1174  *      next_state = yy_try_NUL_trans( current_state );
1175  */
1176     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
1177 {
1178         register int yy_is_jam;
1179         register char *yy_cp = (yy_c_buf_p);
1180
1181         register YY_CHAR yy_c = 1;
1182         if ( yy_accept[yy_current_state] )
1183                 {
1184                 (yy_last_accepting_state) = yy_current_state;
1185                 (yy_last_accepting_cpos) = yy_cp;
1186                 }
1187         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1188                 {
1189                 yy_current_state = (int) yy_def[yy_current_state];
1190                 if ( yy_current_state >= 36 )
1191                         yy_c = yy_meta[(unsigned int) yy_c];
1192                 }
1193         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1194         yy_is_jam = (yy_current_state == 35);
1195
1196         return yy_is_jam ? 0 : yy_current_state;
1197 }
1198
1199     static void yyunput (int c, register char * yy_bp )
1200 {
1201         register char *yy_cp;
1202     
1203     yy_cp = (yy_c_buf_p);
1204
1205         /* undo effects of setting up yytext */
1206         *yy_cp = (yy_hold_char);
1207
1208         if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
1209                 { /* need to shift things up to make room */
1210                 /* +2 for EOB chars. */
1211                 register int number_to_move = (yy_n_chars) + 2;
1212                 register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
1213                                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
1214                 register char *source =
1215                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
1216
1217                 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
1218                         *--dest = *--source;
1219
1220                 yy_cp += (int) (dest - source);
1221                 yy_bp += (int) (dest - source);
1222                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
1223                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
1224
1225                 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
1226                         YY_FATAL_ERROR( "flex scanner push-back overflow" );
1227                 }
1228
1229         *--yy_cp = (char) c;
1230
1231         (yytext_ptr) = yy_bp;
1232         (yy_hold_char) = *yy_cp;
1233         (yy_c_buf_p) = yy_cp;
1234 }
1235
1236 #ifndef YY_NO_INPUT
1237 #ifdef __cplusplus
1238     static int yyinput (void)
1239 #else
1240     static int input  (void)
1241 #endif
1242
1243 {
1244         int c;
1245     
1246         *(yy_c_buf_p) = (yy_hold_char);
1247
1248         if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
1249                 {
1250                 /* yy_c_buf_p now points to the character we want to return.
1251                  * If this occurs *before* the EOB characters, then it's a
1252                  * valid NUL; if not, then we've hit the end of the buffer.
1253                  */
1254                 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
1255                         /* This was really a NUL. */
1256                         *(yy_c_buf_p) = '\0';
1257
1258                 else
1259                         { /* need more input */
1260                         int offset = (yy_c_buf_p) - (yytext_ptr);
1261                         ++(yy_c_buf_p);
1262
1263                         switch ( yy_get_next_buffer(  ) )
1264                                 {
1265                                 case EOB_ACT_LAST_MATCH:
1266                                         /* This happens because yy_g_n_b()
1267                                          * sees that we've accumulated a
1268                                          * token and flags that we need to
1269                                          * try matching the token before
1270                                          * proceeding.  But for input(),
1271                                          * there's no matching to consider.
1272                                          * So convert the EOB_ACT_LAST_MATCH
1273                                          * to EOB_ACT_END_OF_FILE.
1274                                          */
1275
1276                                         /* Reset buffer status. */
1277                                         yyrestart(yyin );
1278
1279                                         /*FALLTHROUGH*/
1280
1281                                 case EOB_ACT_END_OF_FILE:
1282                                         {
1283                                         if ( yywrap( ) )
1284                                                 return EOF;
1285
1286                                         if ( ! (yy_did_buffer_switch_on_eof) )
1287                                                 YY_NEW_FILE;
1288 #ifdef __cplusplus
1289                                         return yyinput();
1290 #else
1291                                         return input();
1292 #endif
1293                                         }
1294
1295                                 case EOB_ACT_CONTINUE_SCAN:
1296                                         (yy_c_buf_p) = (yytext_ptr) + offset;
1297                                         break;
1298                                 }
1299                         }
1300                 }
1301
1302         c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
1303         *(yy_c_buf_p) = '\0';   /* preserve yytext */
1304         (yy_hold_char) = *++(yy_c_buf_p);
1305
1306         return c;
1307 }
1308 #endif  /* ifndef YY_NO_INPUT */
1309
1310 /** Immediately switch to a different input stream.
1311  * @param input_file A readable stream.
1312  * 
1313  * @note This function does not reset the start condition to @c INITIAL .
1314  */
1315     void yyrestart  (FILE * input_file )
1316 {
1317     
1318         if ( ! YY_CURRENT_BUFFER ){
1319         yyensure_buffer_stack ();
1320                 YY_CURRENT_BUFFER_LVALUE =
1321             yy_create_buffer(yyin,YY_BUF_SIZE );
1322         }
1323
1324         yy_init_buffer(YY_CURRENT_BUFFER,input_file );
1325         yy_load_buffer_state( );
1326 }
1327
1328 /** Switch to a different input buffer.
1329  * @param new_buffer The new input buffer.
1330  * 
1331  */
1332     void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
1333 {
1334     
1335         /* TODO. We should be able to replace this entire function body
1336          * with
1337          *              yypop_buffer_state();
1338          *              yypush_buffer_state(new_buffer);
1339      */
1340         yyensure_buffer_stack ();
1341         if ( YY_CURRENT_BUFFER == new_buffer )
1342                 return;
1343
1344         if ( YY_CURRENT_BUFFER )
1345                 {
1346                 /* Flush out information for old buffer. */
1347                 *(yy_c_buf_p) = (yy_hold_char);
1348                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
1349                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
1350                 }
1351
1352         YY_CURRENT_BUFFER_LVALUE = new_buffer;
1353         yy_load_buffer_state( );
1354
1355         /* We don't actually know whether we did this switch during
1356          * EOF (yywrap()) processing, but the only time this flag
1357          * is looked at is after yywrap() is called, so it's safe
1358          * to go ahead and always set it.
1359          */
1360         (yy_did_buffer_switch_on_eof) = 1;
1361 }
1362
1363 static void yy_load_buffer_state  (void)
1364 {
1365         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1366         (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
1367         yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
1368         (yy_hold_char) = *(yy_c_buf_p);
1369 }
1370
1371 /** Allocate and initialize an input buffer state.
1372  * @param file A readable stream.
1373  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
1374  * 
1375  * @return the allocated buffer state.
1376  */
1377     YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
1378 {
1379         YY_BUFFER_STATE b;
1380     
1381         b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
1382         if ( ! b )
1383                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
1384
1385         b->yy_buf_size = size;
1386
1387         /* yy_ch_buf has to be 2 characters longer than the size given because
1388          * we need to put in 2 end-of-buffer characters.
1389          */
1390         b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
1391         if ( ! b->yy_ch_buf )
1392                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
1393
1394         b->yy_is_our_buffer = 1;
1395
1396         yy_init_buffer(b,file );
1397
1398         return b;
1399 }
1400
1401 /** Destroy the buffer.
1402  * @param b a buffer created with yy_create_buffer()
1403  * 
1404  */
1405     void yy_delete_buffer (YY_BUFFER_STATE  b )
1406 {
1407     
1408         if ( ! b )
1409                 return;
1410
1411         if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
1412                 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
1413
1414         if ( b->yy_is_our_buffer )
1415                 yyfree((void *) b->yy_ch_buf  );
1416
1417         yyfree((void *) b  );
1418 }
1419
1420 #ifndef __cplusplus
1421 extern int isatty (int );
1422 #endif /* __cplusplus */
1423     
1424 /* Initializes or reinitializes a buffer.
1425  * This function is sometimes called more than once on the same buffer,
1426  * such as during a yyrestart() or at EOF.
1427  */
1428     static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
1429
1430 {
1431         int oerrno = errno;
1432     
1433         yy_flush_buffer(b );
1434
1435         b->yy_input_file = file;
1436         b->yy_fill_buffer = 1;
1437
1438     /* If b is the current buffer, then yy_init_buffer was _probably_
1439      * called from yyrestart() or through yy_get_next_buffer.
1440      * In that case, we don't want to reset the lineno or column.
1441      */
1442     if (b != YY_CURRENT_BUFFER){
1443         b->yy_bs_lineno = 1;
1444         b->yy_bs_column = 0;
1445     }
1446
1447         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
1448     
1449         errno = oerrno;
1450 }
1451
1452 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
1453  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
1454  * 
1455  */
1456     void yy_flush_buffer (YY_BUFFER_STATE  b )
1457 {
1458         if ( ! b )
1459                 return;
1460
1461         b->yy_n_chars = 0;
1462
1463         /* We always need two end-of-buffer characters.  The first causes
1464          * a transition to the end-of-buffer state.  The second causes
1465          * a jam in that state.
1466          */
1467         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
1468         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
1469
1470         b->yy_buf_pos = &b->yy_ch_buf[0];
1471
1472         b->yy_at_bol = 1;
1473         b->yy_buffer_status = YY_BUFFER_NEW;
1474
1475         if ( b == YY_CURRENT_BUFFER )
1476                 yy_load_buffer_state( );
1477 }
1478
1479 /** Pushes the new state onto the stack. The new state becomes
1480  *  the current state. This function will allocate the stack
1481  *  if necessary.
1482  *  @param new_buffer The new state.
1483  *  
1484  */
1485 void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
1486 {
1487         if (new_buffer == NULL)
1488                 return;
1489
1490         yyensure_buffer_stack();
1491
1492         /* This block is copied from yy_switch_to_buffer. */
1493         if ( YY_CURRENT_BUFFER )
1494                 {
1495                 /* Flush out information for old buffer. */
1496                 *(yy_c_buf_p) = (yy_hold_char);
1497                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
1498                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
1499                 }
1500
1501         /* Only push if top exists. Otherwise, replace top. */
1502         if (YY_CURRENT_BUFFER)
1503                 (yy_buffer_stack_top)++;
1504         YY_CURRENT_BUFFER_LVALUE = new_buffer;
1505
1506         /* copied from yy_switch_to_buffer. */
1507         yy_load_buffer_state( );
1508         (yy_did_buffer_switch_on_eof) = 1;
1509 }
1510
1511 /** Removes and deletes the top of the stack, if present.
1512  *  The next element becomes the new top.
1513  *  
1514  */
1515 void yypop_buffer_state (void)
1516 {
1517         if (!YY_CURRENT_BUFFER)
1518                 return;
1519
1520         yy_delete_buffer(YY_CURRENT_BUFFER );
1521         YY_CURRENT_BUFFER_LVALUE = NULL;
1522         if ((yy_buffer_stack_top) > 0)
1523                 --(yy_buffer_stack_top);
1524
1525         if (YY_CURRENT_BUFFER) {
1526                 yy_load_buffer_state( );
1527                 (yy_did_buffer_switch_on_eof) = 1;
1528         }
1529 }
1530
1531 /* Allocates the stack if it does not exist.
1532  *  Guarantees space for at least one push.
1533  */
1534 static void yyensure_buffer_stack (void)
1535 {
1536         int num_to_alloc;
1537     
1538         if (!(yy_buffer_stack)) {
1539
1540                 /* First allocation is just for 2 elements, since we don't know if this
1541                  * scanner will even need a stack. We use 2 instead of 1 to avoid an
1542                  * immediate realloc on the next call.
1543          */
1544                 num_to_alloc = 1;
1545                 (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
1546                                                                 (num_to_alloc * sizeof(struct yy_buffer_state*)
1547                                                                 );
1548                 if ( ! (yy_buffer_stack) )
1549                         YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
1550                                                                   
1551                 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
1552                                 
1553                 (yy_buffer_stack_max) = num_to_alloc;
1554                 (yy_buffer_stack_top) = 0;
1555                 return;
1556         }
1557
1558         if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
1559
1560                 /* Increase the buffer to prepare for a possible push. */
1561                 int grow_size = 8 /* arbitrary grow size */;
1562
1563                 num_to_alloc = (yy_buffer_stack_max) + grow_size;
1564                 (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
1565                                                                 ((yy_buffer_stack),
1566                                                                 num_to_alloc * sizeof(struct yy_buffer_state*)
1567                                                                 );
1568                 if ( ! (yy_buffer_stack) )
1569                         YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
1570
1571                 /* zero only the new slots.*/
1572                 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
1573                 (yy_buffer_stack_max) = num_to_alloc;
1574         }
1575 }
1576
1577 /** Setup the input buffer state to scan directly from a user-specified character buffer.
1578  * @param base the character buffer
1579  * @param size the size in bytes of the character buffer
1580  * 
1581  * @return the newly allocated buffer state object. 
1582  */
1583 YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
1584 {
1585         YY_BUFFER_STATE b;
1586     
1587         if ( size < 2 ||
1588              base[size-2] != YY_END_OF_BUFFER_CHAR ||
1589              base[size-1] != YY_END_OF_BUFFER_CHAR )
1590                 /* They forgot to leave room for the EOB's. */
1591                 return 0;
1592
1593         b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
1594         if ( ! b )
1595                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
1596
1597         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
1598         b->yy_buf_pos = b->yy_ch_buf = base;
1599         b->yy_is_our_buffer = 0;
1600         b->yy_input_file = 0;
1601         b->yy_n_chars = b->yy_buf_size;
1602         b->yy_is_interactive = 0;
1603         b->yy_at_bol = 1;
1604         b->yy_fill_buffer = 0;
1605         b->yy_buffer_status = YY_BUFFER_NEW;
1606
1607         yy_switch_to_buffer(b  );
1608
1609         return b;
1610 }
1611
1612 /** Setup the input buffer state to scan a string. The next call to yylex() will
1613  * scan from a @e copy of @a str.
1614  * @param yystr a NUL-terminated string to scan
1615  * 
1616  * @return the newly allocated buffer state object.
1617  * @note If you want to scan bytes that may contain NUL values, then use
1618  *       yy_scan_bytes() instead.
1619  */
1620 YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
1621 {
1622     
1623         return yy_scan_bytes(yystr,strlen(yystr) );
1624 }
1625
1626 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
1627  * scan from a @e copy of @a bytes.
1628  * @param bytes the byte buffer to scan
1629  * @param len the number of bytes in the buffer pointed to by @a bytes.
1630  * 
1631  * @return the newly allocated buffer state object.
1632  */
1633 YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
1634 {
1635         YY_BUFFER_STATE b;
1636         char *buf;
1637         yy_size_t n;
1638         int i;
1639     
1640         /* Get memory for full buffer, including space for trailing EOB's. */
1641         n = _yybytes_len + 2;
1642         buf = (char *) yyalloc(n  );
1643         if ( ! buf )
1644                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
1645
1646         for ( i = 0; i < _yybytes_len; ++i )
1647                 buf[i] = yybytes[i];
1648
1649         buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
1650
1651         b = yy_scan_buffer(buf,n );
1652         if ( ! b )
1653                 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
1654
1655         /* It's okay to grow etc. this buffer, and we should throw it
1656          * away when we're done.
1657          */
1658         b->yy_is_our_buffer = 1;
1659
1660         return b;
1661 }
1662
1663 #ifndef YY_EXIT_FAILURE
1664 #define YY_EXIT_FAILURE 2
1665 #endif
1666
1667 static void yy_fatal_error (yyconst char* msg )
1668 {
1669         (void) fprintf( stderr, "%s\n", msg );
1670         exit( YY_EXIT_FAILURE );
1671 }
1672
1673 /* Redefine yyless() so it works in section 3 code. */
1674
1675 #undef yyless
1676 #define yyless(n) \
1677         do \
1678                 { \
1679                 /* Undo effects of setting up yytext. */ \
1680         int yyless_macro_arg = (n); \
1681         YY_LESS_LINENO(yyless_macro_arg);\
1682                 yytext[yyleng] = (yy_hold_char); \
1683                 (yy_c_buf_p) = yytext + yyless_macro_arg; \
1684                 (yy_hold_char) = *(yy_c_buf_p); \
1685                 *(yy_c_buf_p) = '\0'; \
1686                 yyleng = yyless_macro_arg; \
1687                 } \
1688         while ( 0 )
1689
1690 /* Accessor  methods (get/set functions) to struct members. */
1691
1692 /** Get the current line number.
1693  * 
1694  */
1695 int yyget_lineno  (void)
1696 {
1697         
1698     return yylineno;
1699 }
1700
1701 /** Get the input stream.
1702  * 
1703  */
1704 FILE *yyget_in  (void)
1705 {
1706         return yyin;
1707 }
1708
1709 /** Get the output stream.
1710  * 
1711  */
1712 FILE *yyget_out  (void)
1713 {
1714         return yyout;
1715 }
1716
1717 /** Get the length of the current token.
1718  * 
1719  */
1720 int yyget_leng  (void)
1721 {
1722         return yyleng;
1723 }
1724
1725 /** Get the current token.
1726  * 
1727  */
1728
1729 char *yyget_text  (void)
1730 {
1731         return yytext;
1732 }
1733
1734 /** Set the current line number.
1735  * @param line_number
1736  * 
1737  */
1738 void yyset_lineno (int  line_number )
1739 {
1740     
1741     yylineno = line_number;
1742 }
1743
1744 /** Set the input stream. This does not discard the current
1745  * input buffer.
1746  * @param in_str A readable stream.
1747  * 
1748  * @see yy_switch_to_buffer
1749  */
1750 void yyset_in (FILE *  in_str )
1751 {
1752         yyin = in_str ;
1753 }
1754
1755 void yyset_out (FILE *  out_str )
1756 {
1757         yyout = out_str ;
1758 }
1759
1760 int yyget_debug  (void)
1761 {
1762         return yy_flex_debug;
1763 }
1764
1765 void yyset_debug (int  bdebug )
1766 {
1767         yy_flex_debug = bdebug ;
1768 }
1769
1770 static int yy_init_globals (void)
1771 {
1772         /* Initialization is the same as for the non-reentrant scanner.
1773      * This function is called from yylex_destroy(), so don't allocate here.
1774      */
1775
1776     (yy_buffer_stack) = 0;
1777     (yy_buffer_stack_top) = 0;
1778     (yy_buffer_stack_max) = 0;
1779     (yy_c_buf_p) = (char *) 0;
1780     (yy_init) = 0;
1781     (yy_start) = 0;
1782
1783 /* Defined in main.c */
1784 #ifdef YY_STDINIT
1785     yyin = stdin;
1786     yyout = stdout;
1787 #else
1788     yyin = (FILE *) 0;
1789     yyout = (FILE *) 0;
1790 #endif
1791
1792     /* For future reference: Set errno on error, since we are called by
1793      * yylex_init()
1794      */
1795     return 0;
1796 }
1797
1798 /* yylex_destroy is for both reentrant and non-reentrant scanners. */
1799 int yylex_destroy  (void)
1800 {
1801     
1802     /* Pop the buffer stack, destroying each element. */
1803         while(YY_CURRENT_BUFFER){
1804                 yy_delete_buffer(YY_CURRENT_BUFFER  );
1805                 YY_CURRENT_BUFFER_LVALUE = NULL;
1806                 yypop_buffer_state();
1807         }
1808
1809         /* Destroy the stack itself. */
1810         yyfree((yy_buffer_stack) );
1811         (yy_buffer_stack) = NULL;
1812
1813     /* Reset the globals. This is important in a non-reentrant scanner so the next time
1814      * yylex() is called, initialization will occur. */
1815     yy_init_globals( );
1816
1817     return 0;
1818 }
1819
1820 /*
1821  * Internal utility routines.
1822  */
1823
1824 #ifndef yytext_ptr
1825 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
1826 {
1827         register int i;
1828         for ( i = 0; i < n; ++i )
1829                 s1[i] = s2[i];
1830 }
1831 #endif
1832
1833 #ifdef YY_NEED_STRLEN
1834 static int yy_flex_strlen (yyconst char * s )
1835 {
1836         register int n;
1837         for ( n = 0; s[n]; ++n )
1838                 ;
1839
1840         return n;
1841 }
1842 #endif
1843
1844 void *yyalloc (yy_size_t  size )
1845 {
1846         return (void *) malloc( size );
1847 }
1848
1849 void *yyrealloc  (void * ptr, yy_size_t  size )
1850 {
1851         /* The cast to (char *) in the following accommodates both
1852          * implementations that use char* generic pointers, and those
1853          * that use void* generic pointers.  It works with the latter
1854          * because both ANSI C and C++ allow castless assignment from
1855          * any pointer type to void*, and deal with argument conversions
1856          * as though doing an assignment.
1857          */
1858         return (void *) realloc( (char *) ptr, size );
1859 }
1860
1861 void yyfree (void * ptr )
1862 {
1863         free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
1864 }
1865
1866 #define YYTABLES_NAME "yytables"
1867
1868 #line 85 "sel-lex.l"
1869
1870
1871
1872 static char *
1873 handle_string(void)
1874 {
1875     char x[1024];
1876     int i = 0;
1877     int c;
1878     int quote = 0;
1879     while((c = input()) != EOF){
1880         if(quote) {
1881             x[i++] = '\\';
1882             x[i++] = c;
1883             quote = 0;
1884             continue;
1885         }
1886         if(c == '\n'){
1887             _hx509_sel_yyerror("unterminated string");
1888             lineno++;
1889             break;
1890         }
1891         if(c == '\\'){
1892             quote++;
1893             continue;
1894         }
1895         if(c == '\"')
1896             break;
1897         x[i++] = c;
1898     }
1899     x[i] = '\0';
1900     return strdup(x);
1901 }
1902
1903 int
1904 yywrap ()
1905 {
1906      return 1;
1907 }
1908
1909 static int
1910 lex_input(char *buf, int max_size)
1911 {
1912     int n;
1913
1914     n = _hx509_expr_input.length - _hx509_expr_input.offset;
1915     if (max_size < n)
1916         n = max_size;
1917     if (n <= 0)
1918         return YY_NULL;
1919
1920     memcpy(buf, _hx509_expr_input.buf + _hx509_expr_input.offset, n);
1921     _hx509_expr_input.offset += n;
1922
1923     return n;
1924 }
1925