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

4.1155-freebsd-126-freebsd-12freebsd-9.3
Last change on this file since c52d922 was c52d922, checked in by Joel Sherrill <joel.sherrill@…>, on Sep 12, 2012 at 10:09:48 PM

nsdispatch.c: New file added along with required dependencies

This file uses dynamic loading and is using some magic for
statically linked modules included in it. These modules may
or may not show up magically in an RTEMS executable. This will
eventually have to be investigated and resolved.

  • 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 <string.h>
48#include <syslog.h>
49#include "un-namespace.h"
50
51static  void    _nsaddsrctomap(const char *);
52
53static  ns_dbt          curdbt;
54static  ns_src          cursrc;
55%}
56
57%union {
58        char *str;
59        int   mapval;
60}
61
62%token  NL
63%token  SUCCESS UNAVAIL NOTFOUND TRYAGAIN
64%token  RETURN CONTINUE
65%token  ERRORTOKEN
66%token  <str> STRING
67
68%type   <mapval> Status Action
69
70%%
71
72File
73        :       /* empty */
74        | Lines
75        ;
76
77Lines
78        : Entry
79        | Lines Entry
80        ;
81
82Entry
83        : NL
84        | Database ':' NL
85                {
86                        free((char*)curdbt.name);
87                }
88        | Database ':' Srclist NL
89                {
90                        _nsdbtput(&curdbt);
91                }
92        | error NL
93                {
94                        yyerrok;
95                }
96        ;
97
98Database
99        : STRING
100                {
101                        curdbt.name = yylval.str;
102                        curdbt.srclist = NULL;
103                        curdbt.srclistsize = 0;
104                }
105        ;
106
107Srclist
108        : Item
109        | Srclist Item
110        ;
111
112Item
113        : STRING
114                {
115                        cursrc.flags = NS_TERMINATE;
116                        _nsaddsrctomap($1);
117                }
118        | STRING '[' { cursrc.flags = NS_SUCCESS; } Criteria ']'
119                {
120                        _nsaddsrctomap($1);
121                }
122        ;
123
124Criteria
125        : Criterion
126        | Criteria Criterion
127        ;
128
129Criterion
130        : Status '=' Action
131                {
132                        if ($3)      /* if action == RETURN set RETURN bit */
133                                cursrc.flags |= $1; 
134                        else         /* else unset it */
135                                cursrc.flags &= ~$1;
136                }
137        ;
138
139Status
140        : SUCCESS       { $$ = NS_SUCCESS; }
141        | UNAVAIL       { $$ = NS_UNAVAIL; }
142        | NOTFOUND      { $$ = NS_NOTFOUND; }
143        | TRYAGAIN      { $$ = NS_TRYAGAIN; }
144        ;
145
146Action
147        : RETURN        { $$ = NS_ACTION_RETURN; }
148        | CONTINUE      { $$ = NS_ACTION_CONTINUE; }
149        ;
150
151%%
152
153static void
154_nsaddsrctomap(elem)
155        const char *elem;
156{
157        int             i, lineno;
158        extern int      _nsyylineno;
159        extern char *   _nsyytext;
160
161        lineno = _nsyylineno - (*_nsyytext == '\n' ? 1 : 0);
162        if (curdbt.srclistsize > 0) {
163                if (((strcasecmp(elem, NSSRC_COMPAT) == 0) &&
164                    (strcasecmp(curdbt.srclist[0].name, NSSRC_CACHE) != 0)) ||
165                    (strcasecmp(curdbt.srclist[0].name, NSSRC_COMPAT) == 0)) {
166                        syslog(LOG_ERR,
167            "NSSWITCH(nsparser): %s line %d: 'compat' used with sources, other than 'cache'",
168                            _PATH_NS_CONF, lineno);
169                        free((void*)elem);
170                        return;
171                }
172        }
173        for (i = 0; i < curdbt.srclistsize; i++) {
174                if (strcasecmp(curdbt.srclist[i].name, elem) == 0) {
175                        syslog(LOG_ERR,
176                       "NSSWITCH(nsparser): %s line %d: duplicate source '%s'",
177                            _PATH_NS_CONF, lineno, elem);
178                        free((void*)elem);
179                        return;
180                }
181        }
182        cursrc.name = elem;
183        _nsdbtaddsrc(&curdbt, &cursrc);
184}
Note: See TracBrowser for help on using the repository browser.