1248aee62SJacques Vidrine %{
2248aee62SJacques Vidrine /* $NetBSD: nslexer.l,v 1.3 1999/01/25 00:16:17 lukem Exp $ */
3248aee62SJacques Vidrine
4248aee62SJacques Vidrine /*-
5*b61a5730SWarner Losh * SPDX-License-Identifier: BSD-2-Clause
6d915a14eSPedro F. Giffuni *
7248aee62SJacques Vidrine * Copyright (c) 1997, 1998, 1999 The NetBSD Foundation, Inc.
8248aee62SJacques Vidrine * All rights reserved.
9248aee62SJacques Vidrine *
10248aee62SJacques Vidrine * This code is derived from software contributed to The NetBSD Foundation
11248aee62SJacques Vidrine * by Luke Mewburn.
12248aee62SJacques Vidrine *
13248aee62SJacques Vidrine * Redistribution and use in source and binary forms, with or without
14248aee62SJacques Vidrine * modification, are permitted provided that the following conditions
15248aee62SJacques Vidrine * are met:
16248aee62SJacques Vidrine * 1. Redistributions of source code must retain the above copyright
17248aee62SJacques Vidrine * notice, this list of conditions and the following disclaimer.
18248aee62SJacques Vidrine * 2. Redistributions in binary form must reproduce the above copyright
19248aee62SJacques Vidrine * notice, this list of conditions and the following disclaimer in the
20248aee62SJacques Vidrine * documentation and/or other materials provided with the distribution.
21248aee62SJacques Vidrine *
22248aee62SJacques Vidrine * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
23248aee62SJacques Vidrine * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
24248aee62SJacques Vidrine * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
25248aee62SJacques Vidrine * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
26248aee62SJacques Vidrine * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27248aee62SJacques Vidrine * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28248aee62SJacques Vidrine * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29248aee62SJacques Vidrine * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30248aee62SJacques Vidrine * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31248aee62SJacques Vidrine * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32248aee62SJacques Vidrine * POSSIBILITY OF SUCH DAMAGE.
33248aee62SJacques Vidrine */
34248aee62SJacques Vidrine
352bbd7cf8SJacques Vidrine #include "namespace.h"
36248aee62SJacques Vidrine #include <ctype.h>
37248aee62SJacques Vidrine #define _NS_PRIVATE
38248aee62SJacques Vidrine #include <nsswitch.h>
39248aee62SJacques Vidrine #include <string.h>
4046d93063SJacques Vidrine #include <syslog.h>
412bbd7cf8SJacques Vidrine #include "un-namespace.h"
42248aee62SJacques Vidrine
43248aee62SJacques Vidrine #include "nsparser.h"
44248aee62SJacques Vidrine
45248aee62SJacques Vidrine %}
46248aee62SJacques Vidrine
47d3450d02SEdward Tomasz Napierala %option never-interactive
48a7880d59SJung-uk Kim %option noinput
49a7880d59SJung-uk Kim %option nounput
50248aee62SJacques Vidrine %option yylineno
51248aee62SJacques Vidrine
52248aee62SJacques Vidrine BLANK [ \t]
53248aee62SJacques Vidrine CR \n
54248aee62SJacques Vidrine STRING [a-zA-Z][a-zA-Z0-9_]*
55248aee62SJacques Vidrine
56248aee62SJacques Vidrine %%
57248aee62SJacques Vidrine
58248aee62SJacques Vidrine {BLANK}+ ; /* skip whitespace */
59248aee62SJacques Vidrine
60248aee62SJacques Vidrine #.* ; /* skip comments */
61248aee62SJacques Vidrine
62248aee62SJacques Vidrine \\{CR} ; /* allow continuation */
63248aee62SJacques Vidrine
64248aee62SJacques Vidrine {CR} return NL;
65248aee62SJacques Vidrine
66248aee62SJacques Vidrine [sS][uU][cC][cC][eE][sS][sS] return SUCCESS;
67248aee62SJacques Vidrine [uU][nN][aA][vV][aA][iI][lL] return UNAVAIL;
68248aee62SJacques Vidrine [nN][oO][tT][fF][oO][uU][nN][dD] return NOTFOUND;
69248aee62SJacques Vidrine [tT][rR][yY][aA][gG][aA][iI][nN] return TRYAGAIN;
70248aee62SJacques Vidrine
71248aee62SJacques Vidrine [rR][eE][tT][uU][rR][nN] return RETURN;
72248aee62SJacques Vidrine [cC][oO][nN][tT][iI][nN][uU][eE] return CONTINUE;
73248aee62SJacques Vidrine
74248aee62SJacques Vidrine {STRING} {
75248aee62SJacques Vidrine char *p;
76248aee62SJacques Vidrine int i;
77248aee62SJacques Vidrine
7846d93063SJacques Vidrine if ((p = strdup(yytext)) == NULL) {
7946d93063SJacques Vidrine syslog(LOG_ERR,
8046d93063SJacques Vidrine "NSSWITCH(nslexer): memory allocation failure");
8146d93063SJacques Vidrine return ERRORTOKEN;
8246d93063SJacques Vidrine }
83248aee62SJacques Vidrine for (i = 0; i < strlen(p); i++) {
84248aee62SJacques Vidrine if (isupper((unsigned char)p[i]))
85248aee62SJacques Vidrine p[i] = tolower((unsigned char)p[i]);
86248aee62SJacques Vidrine }
87248aee62SJacques Vidrine _nsyylval.str = p;
88248aee62SJacques Vidrine return STRING;
89248aee62SJacques Vidrine }
90248aee62SJacques Vidrine
9170982dcaSBill Fenner . return yytext[0];
92248aee62SJacques Vidrine
93248aee62SJacques Vidrine %%
94248aee62SJacques Vidrine
95248aee62SJacques Vidrine #undef _nsyywrap
96248aee62SJacques Vidrine int
97626c9d74SCraig Rodrigues _nsyywrap(void)
98248aee62SJacques Vidrine {
99248aee62SJacques Vidrine return 1;
100248aee62SJacques Vidrine } /* _nsyywrap */
101248aee62SJacques Vidrine
102248aee62SJacques Vidrine void
_nsyyerror(const char * msg)103626c9d74SCraig Rodrigues _nsyyerror(const char *msg)
104248aee62SJacques Vidrine {
105248aee62SJacques Vidrine
10646d93063SJacques Vidrine syslog(LOG_ERR, "NSSWITCH(nslexer): %s line %d: %s at '%s'",
10746d93063SJacques Vidrine _PATH_NS_CONF, yylineno, msg, yytext);
108248aee62SJacques Vidrine } /* _nsyyerror */
109