source: rtems-libbsd/freebsd/lib/libc/net/nsparser.y @ f41a394

55-freebsd-126-freebsd-12freebsd-9.3
Last change on this file since f41a394 was e33fe4a, checked in by Sebastian Huber <sebastian.huber@…>, on 11/15/13 at 14:14:20

NSDISPATCH(3): Fix for small-data area

  • Property mode set to 100644
File size: 4.3 KB
Line 
1%{
2/*      $NetBSD: nsparser.y,v 1.3 1999/01/25 00:16:18 lukem Exp $       */
3
4/*-
5 * Copyright (c) 1997, 1998, 1999 The NetBSD Foundation, Inc.
6 * All rights reserved.
7 *
8 * This code is derived from software contributed to The NetBSD Foundation
9 * by Luke Mewburn.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 *    notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 *    notice, this list of conditions and the following disclaimer in the
18 *    documentation and/or other materials provided with the distribution.
19 * 3. All advertising materials mentioning features or use of this software
20 *    must display the following acknowledgement:
21 *        This product includes software developed by the NetBSD
22 *        Foundation, Inc. and its contributors.
23 * 4. Neither the name of The NetBSD Foundation nor the names of its
24 *    contributors may be used to endorse or promote products derived
25 *    from this software without specific prior written permission.
26 *
27 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
28 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
29 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
30 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
31 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37 * POSSIBILITY OF SUCH DAMAGE.
38 */
39
40#include <sys/cdefs.h>
41__FBSDID("$FreeBSD$");
42
43#include "namespace.h"
44#define _NS_PRIVATE
45#include <nsswitch.h>
46#include <stdio.h>
47#include <stdlib.h>
48#include <string.h>
49#include <syslog.h>
50#include "un-namespace.h"
51
52static  void    _nsaddsrctomap(const char *);
53
54static  ns_dbt          curdbt;
55static  ns_src          cursrc;
56%}
57
58%union {
59        char *str;
60        int   mapval;
61}
62
63%token  NL
64%token  SUCCESS UNAVAIL NOTFOUND TRYAGAIN
65%token  RETURN CONTINUE
66%token  ERRORTOKEN
67%token  <str> STRING
68
69%type   <mapval> Status Action
70
71%%
72
73File
74        :       /* empty */
75        | Lines
76        ;
77
78Lines
79        : Entry
80        | Lines Entry
81        ;
82
83Entry
84        : NL
85        | Database ':' NL
86                {
87                        free((char*)curdbt.name);
88                }
89        | Database ':' Srclist NL
90                {
91                        _nsdbtput(&curdbt);
92                }
93        | error NL
94                {
95                        yyerrok;
96                }
97        ;
98
99Database
100        : STRING
101                {
102                        curdbt.name = yylval.str;
103                        curdbt.srclist = NULL;
104                        curdbt.srclistsize = 0;
105                }
106        ;
107
108Srclist
109        : Item
110        | Srclist Item
111        ;
112
113Item
114        : STRING
115                {
116                        cursrc.flags = NS_TERMINATE;
117                        _nsaddsrctomap($1);
118                }
119        | STRING '[' { cursrc.flags = NS_SUCCESS; } Criteria ']'
120                {
121                        _nsaddsrctomap($1);
122                }
123        ;
124
125Criteria
126        : Criterion
127        | Criteria Criterion
128        ;
129
130Criterion
131        : Status '=' Action
132                {
133                        if ($3)      /* if action == RETURN set RETURN bit */
134                                cursrc.flags |= $1; 
135                        else         /* else unset it */
136                                cursrc.flags &= ~$1;
137                }
138        ;
139
140Status
141        : SUCCESS       { $$ = NS_SUCCESS; }
142        | UNAVAIL       { $$ = NS_UNAVAIL; }
143        | NOTFOUND      { $$ = NS_NOTFOUND; }
144        | TRYAGAIN      { $$ = NS_TRYAGAIN; }
145        ;
146
147Action
148        : RETURN        { $$ = NS_ACTION_RETURN; }
149        | CONTINUE      { $$ = NS_ACTION_CONTINUE; }
150        ;
151
152%%
153
154static void
155_nsaddsrctomap(elem)
156        const char *elem;
157{
158        int             i, lineno;
159        extern int      _nsyylineno;
160        extern char     _nsyytext[];
161
162        lineno = _nsyylineno - (_nsyytext[0] == '\n' ? 1 : 0);
163        if (curdbt.srclistsize > 0) {
164                if (((strcasecmp(elem, NSSRC_COMPAT) == 0) &&
165                    (strcasecmp(curdbt.srclist[0].name, NSSRC_CACHE) != 0)) ||
166                    (strcasecmp(curdbt.srclist[0].name, NSSRC_COMPAT) == 0)) {
167                        syslog(LOG_ERR,
168            "NSSWITCH(nsparser): %s line %d: 'compat' used with sources, other than 'cache'",
169                            _PATH_NS_CONF, lineno);
170                        free((void*)elem);
171                        return;
172                }
173        }
174        for (i = 0; i < curdbt.srclistsize; i++) {
175                if (strcasecmp(curdbt.srclist[i].name, elem) == 0) {
176                        syslog(LOG_ERR,
177                       "NSSWITCH(nsparser): %s line %d: duplicate source '%s'",
178                            _PATH_NS_CONF, lineno, elem);
179                        free((void*)elem);
180                        return;
181                }
182        }
183        cursrc.name = elem;
184        _nsdbtaddsrc(&curdbt, &cursrc);
185}
Note: See TracBrowser for help on using the repository browser.