Deleted Added
full compact
nsparser.y (92905) nsparser.y (113595)
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

--- 24 unchanged lines hidden (view full) ---

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>
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

--- 24 unchanged lines hidden (view full) ---

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#if defined(LIBC_SCCS) && !defined(lint)
42static char *rcsid =
43 "$FreeBSD: head/lib/libc/net/nsparser.y 92905 2002-03-21 22:49:10Z obrien $";
44#endif /* LIBC_SCCS and not lint */
41__FBSDID("$FreeBSD: head/lib/libc/net/nsparser.y 113595 2003-04-17 14:14:22Z nectar $");
45
42
46#include <err.h>
43#include "namespace.h"
47#define _NS_PRIVATE
48#include <nsswitch.h>
49#include <stdio.h>
50#include <string.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"
51
50
52
53static void _nsaddsrctomap(const char *);
54
55static ns_dbt curdbt;
56static ns_src cursrc;
57%}
58
59%union {
60 char *str;
61 int mapval;
62}
63
64%token NL
65%token SUCCESS UNAVAIL NOTFOUND TRYAGAIN
66%token RETURN CONTINUE
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
67%token <str> STRING
68
69%type <mapval> Status Action
70
71%%
72
73File
74 : /* empty */

--- 30 unchanged lines hidden (view full) ---

105Srclist
106 : Item
107 | Srclist Item
108 ;
109
110Item
111 : STRING
112 {
66%token <str> STRING
67
68%type <mapval> Status Action
69
70%%
71
72File
73 : /* empty */

--- 30 unchanged lines hidden (view full) ---

104Srclist
105 : Item
106 | Srclist Item
107 ;
108
109Item
110 : STRING
111 {
113 cursrc.flags = NS_SUCCESS;
112 cursrc.flags = NS_TERMINATE;
114 _nsaddsrctomap($1);
115 }
116 | STRING '[' { cursrc.flags = NS_SUCCESS; } Criteria ']'
117 {
118 _nsaddsrctomap($1);
119 }
120 ;
121
122Criteria
123 : Criterion
124 | Criteria Criterion
125 ;
126
127Criterion
128 : Status '=' Action
129 {
113 _nsaddsrctomap($1);
114 }
115 | STRING '[' { cursrc.flags = NS_SUCCESS; } Criteria ']'
116 {
117 _nsaddsrctomap($1);
118 }
119 ;
120
121Criteria
122 : Criterion
123 | Criteria Criterion
124 ;
125
126Criterion
127 : Status '=' Action
128 {
130 if ($3) /* if action == RETURN set RETURN bit */
129 if ($3) /* if action == RETURN set RETURN bit */
131 cursrc.flags |= $1;
130 cursrc.flags |= $1;
132 else /* else unset it */
131 else /* else unset it */
133 cursrc.flags &= ~$1;
134 }
135 ;
136
137Status
138 : SUCCESS { $$ = NS_SUCCESS; }
139 | UNAVAIL { $$ = NS_UNAVAIL; }
140 | NOTFOUND { $$ = NS_NOTFOUND; }
141 | TRYAGAIN { $$ = NS_TRYAGAIN; }
142 ;
143
144Action
132 cursrc.flags &= ~$1;
133 }
134 ;
135
136Status
137 : SUCCESS { $$ = NS_SUCCESS; }
138 | UNAVAIL { $$ = NS_UNAVAIL; }
139 | NOTFOUND { $$ = NS_NOTFOUND; }
140 | TRYAGAIN { $$ = NS_TRYAGAIN; }
141 ;
142
143Action
145 : RETURN { $$ = 1L; }
146 | CONTINUE { $$ = 0L; }
144 : RETURN { $$ = NS_ACTION_RETURN; }
145 | CONTINUE { $$ = NS_ACTION_CONTINUE; }
147 ;
148
149%%
150
151static void
152_nsaddsrctomap(elem)
153 const char *elem;
154{
155 int i, lineno;
156 extern int _nsyylineno;
157 extern char * _nsyytext;
158
159 lineno = _nsyylineno - (*_nsyytext == '\n' ? 1 : 0);
160 if (curdbt.srclistsize > 0) {
161 if ((strcasecmp(elem, NSSRC_COMPAT) == 0) ||
162 (strcasecmp(curdbt.srclist[0].name, NSSRC_COMPAT) == 0)) {
146 ;
147
148%%
149
150static void
151_nsaddsrctomap(elem)
152 const char *elem;
153{
154 int i, lineno;
155 extern int _nsyylineno;
156 extern char * _nsyytext;
157
158 lineno = _nsyylineno - (*_nsyytext == '\n' ? 1 : 0);
159 if (curdbt.srclistsize > 0) {
160 if ((strcasecmp(elem, NSSRC_COMPAT) == 0) ||
161 (strcasecmp(curdbt.srclist[0].name, NSSRC_COMPAT) == 0)) {
163 /* XXX: syslog the following */
164 warnx("%s line %d: 'compat' used with other sources",
162 syslog(LOG_ERR,
163 "NSSWITCH(nsparser): %s line %d: 'compat' used with other sources",
165 _PATH_NS_CONF, lineno);
166 return;
167 }
168 }
169 for (i = 0; i < curdbt.srclistsize; i++) {
170 if (strcasecmp(curdbt.srclist[i].name, elem) == 0) {
164 _PATH_NS_CONF, lineno);
165 return;
166 }
167 }
168 for (i = 0; i < curdbt.srclistsize; i++) {
169 if (strcasecmp(curdbt.srclist[i].name, elem) == 0) {
171 /* XXX: syslog the following */
172 warnx("%s line %d: duplicate source '%s'",
170 syslog(LOG_ERR,
171 "NSSWITCH(nsparser): %s line %d: duplicate source '%s'",
173 _PATH_NS_CONF, lineno, elem);
174 return;
175 }
176 }
177 cursrc.name = elem;
178 _nsdbtaddsrc(&curdbt, &cursrc);
179}
172 _PATH_NS_CONF, lineno, elem);
173 return;
174 }
175 }
176 cursrc.name = elem;
177 _nsdbtaddsrc(&curdbt, &cursrc);
178}