1009ea47eSEdward Tomasz Napierala %{
2009ea47eSEdward Tomasz Napierala /*-
34d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause
41de7b4b8SPedro F. Giffuni *
5009ea47eSEdward Tomasz Napierala * Copyright (c) 2012 The FreeBSD Foundation
6009ea47eSEdward Tomasz Napierala *
7009ea47eSEdward Tomasz Napierala * This software was developed by Edward Tomasz Napierala under sponsorship
8009ea47eSEdward Tomasz Napierala * from the FreeBSD Foundation.
9009ea47eSEdward Tomasz Napierala *
10009ea47eSEdward Tomasz Napierala * Redistribution and use in source and binary forms, with or without
11009ea47eSEdward Tomasz Napierala * modification, are permitted provided that the following conditions
12009ea47eSEdward Tomasz Napierala * are met:
13009ea47eSEdward Tomasz Napierala * 1. Redistributions of source code must retain the above copyright
14009ea47eSEdward Tomasz Napierala * notice, this list of conditions and the following disclaimer.
15009ea47eSEdward Tomasz Napierala * 2. Redistributions in binary form must reproduce the above copyright
16009ea47eSEdward Tomasz Napierala * notice, this list of conditions and the following disclaimer in the
17009ea47eSEdward Tomasz Napierala * documentation and/or other materials provided with the distribution.
18009ea47eSEdward Tomasz Napierala *
19009ea47eSEdward Tomasz Napierala * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20009ea47eSEdward Tomasz Napierala * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21009ea47eSEdward Tomasz Napierala * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22009ea47eSEdward Tomasz Napierala * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23009ea47eSEdward Tomasz Napierala * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24009ea47eSEdward Tomasz Napierala * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25009ea47eSEdward Tomasz Napierala * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26009ea47eSEdward Tomasz Napierala * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27009ea47eSEdward Tomasz Napierala * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28009ea47eSEdward Tomasz Napierala * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29009ea47eSEdward Tomasz Napierala * SUCH DAMAGE.
30009ea47eSEdward Tomasz Napierala */
31009ea47eSEdward Tomasz Napierala
32009ea47eSEdward Tomasz Napierala #include <sys/types.h>
33703b03a8SJohn Baldwin #include <sys/nv.h>
34703b03a8SJohn Baldwin #include <sys/queue.h>
35009ea47eSEdward Tomasz Napierala #include <sys/stat.h>
36009ea47eSEdward Tomasz Napierala #include <assert.h>
37009ea47eSEdward Tomasz Napierala #include <stdio.h>
38009ea47eSEdward Tomasz Napierala #include <stdlib.h>
39009ea47eSEdward Tomasz Napierala #include <string.h>
40009ea47eSEdward Tomasz Napierala
41009ea47eSEdward Tomasz Napierala #include "ctld.h"
4264ffe6d4SRichard Scheffenegger #include <netinet/in.h>
4364ffe6d4SRichard Scheffenegger #include <netinet/ip.h>
44009ea47eSEdward Tomasz Napierala
45009ea47eSEdward Tomasz Napierala extern FILE *yyin;
46009ea47eSEdward Tomasz Napierala extern char *yytext;
47009ea47eSEdward Tomasz Napierala extern int lineno;
48009ea47eSEdward Tomasz Napierala
49009ea47eSEdward Tomasz Napierala static struct conf *conf = NULL;
50009ea47eSEdward Tomasz Napierala static struct auth_group *auth_group = NULL;
51009ea47eSEdward Tomasz Napierala static struct portal_group *portal_group = NULL;
52009ea47eSEdward Tomasz Napierala static struct target *target = NULL;
53009ea47eSEdward Tomasz Napierala static struct lun *lun = NULL;
54009ea47eSEdward Tomasz Napierala
55009ea47eSEdward Tomasz Napierala extern void yyerror(const char *);
56009ea47eSEdward Tomasz Napierala extern void yyrestart(FILE *);
57009ea47eSEdward Tomasz Napierala
58009ea47eSEdward Tomasz Napierala %}
59009ea47eSEdward Tomasz Napierala
60df9900fbSEdward Tomasz Napierala %token ALIAS AUTH_GROUP AUTH_TYPE BACKEND BLOCKSIZE CHAP CHAP_MUTUAL
6191be33dcSAlexander Motin %token CLOSING_BRACKET CTL_LUN DEBUG DEVICE_ID DEVICE_TYPE
6264ffe6d4SRichard Scheffenegger %token DISCOVERY_AUTH_GROUP DISCOVERY_FILTER DSCP FOREIGN
63dbb1ee18SEdward Tomasz Napierala %token INITIATOR_NAME INITIATOR_PORTAL ISNS_SERVER ISNS_PERIOD ISNS_TIMEOUT
6407b49a3eSEdward Tomasz Napierala %token LISTEN LISTEN_ISER LUN MAXPROC OFFLOAD OPENING_BRACKET OPTION
65ea8f1280SRichard Scheffenegger %token PATH PCP PIDFILE PORT PORTAL_GROUP REDIRECT SEMICOLON SERIAL
66ea8f1280SRichard Scheffenegger %token SIZE STR TAG TARGET TIMEOUT
6764ffe6d4SRichard Scheffenegger %token AF11 AF12 AF13 AF21 AF22 AF23 AF31 AF32 AF33 AF41 AF42 AF43
6864ffe6d4SRichard Scheffenegger %token BE EF CS0 CS1 CS2 CS3 CS4 CS5 CS6 CS7
69009ea47eSEdward Tomasz Napierala
70009ea47eSEdward Tomasz Napierala %union
71009ea47eSEdward Tomasz Napierala {
72009ea47eSEdward Tomasz Napierala char *str;
73009ea47eSEdward Tomasz Napierala }
74009ea47eSEdward Tomasz Napierala
75009ea47eSEdward Tomasz Napierala %token <str> STR
76009ea47eSEdward Tomasz Napierala
77009ea47eSEdward Tomasz Napierala %%
78009ea47eSEdward Tomasz Napierala
79009ea47eSEdward Tomasz Napierala statements:
80009ea47eSEdward Tomasz Napierala |
81009ea47eSEdward Tomasz Napierala statements statement
82f9488580SEdward Tomasz Napierala |
83f9488580SEdward Tomasz Napierala statements statement SEMICOLON
84009ea47eSEdward Tomasz Napierala ;
85009ea47eSEdward Tomasz Napierala
86009ea47eSEdward Tomasz Napierala statement:
87e1c0d0d8SEdward Tomasz Napierala debug
88009ea47eSEdward Tomasz Napierala |
89e1c0d0d8SEdward Tomasz Napierala timeout
90009ea47eSEdward Tomasz Napierala |
91e1c0d0d8SEdward Tomasz Napierala maxproc
92009ea47eSEdward Tomasz Napierala |
93e1c0d0d8SEdward Tomasz Napierala pidfile
94009ea47eSEdward Tomasz Napierala |
95829603e2SAlexander Motin isns_server
96829603e2SAlexander Motin |
97829603e2SAlexander Motin isns_period
98829603e2SAlexander Motin |
99829603e2SAlexander Motin isns_timeout
100829603e2SAlexander Motin |
101e1c0d0d8SEdward Tomasz Napierala auth_group
102009ea47eSEdward Tomasz Napierala |
103e1c0d0d8SEdward Tomasz Napierala portal_group
104009ea47eSEdward Tomasz Napierala |
105920c6cbaSAlexander Motin lun
106920c6cbaSAlexander Motin |
107e1c0d0d8SEdward Tomasz Napierala target
108009ea47eSEdward Tomasz Napierala ;
109009ea47eSEdward Tomasz Napierala
1104524db57SEdward Tomasz Napierala debug: DEBUG STR
111009ea47eSEdward Tomasz Napierala {
1124524db57SEdward Tomasz Napierala uint64_t tmp;
1134524db57SEdward Tomasz Napierala
1144524db57SEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) {
115d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
1164524db57SEdward Tomasz Napierala free($2);
1174524db57SEdward Tomasz Napierala return (1);
1184524db57SEdward Tomasz Napierala }
119*6de7a0d6SJohn Baldwin free($2);
1204524db57SEdward Tomasz Napierala
1214524db57SEdward Tomasz Napierala conf->conf_debug = tmp;
122009ea47eSEdward Tomasz Napierala }
123009ea47eSEdward Tomasz Napierala ;
124009ea47eSEdward Tomasz Napierala
1254524db57SEdward Tomasz Napierala timeout: TIMEOUT STR
126009ea47eSEdward Tomasz Napierala {
1274524db57SEdward Tomasz Napierala uint64_t tmp;
1284524db57SEdward Tomasz Napierala
1294524db57SEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) {
130d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
1314524db57SEdward Tomasz Napierala free($2);
1324524db57SEdward Tomasz Napierala return (1);
1334524db57SEdward Tomasz Napierala }
134*6de7a0d6SJohn Baldwin free($2);
1354524db57SEdward Tomasz Napierala
1364524db57SEdward Tomasz Napierala conf->conf_timeout = tmp;
137009ea47eSEdward Tomasz Napierala }
138009ea47eSEdward Tomasz Napierala ;
139009ea47eSEdward Tomasz Napierala
1404524db57SEdward Tomasz Napierala maxproc: MAXPROC STR
141009ea47eSEdward Tomasz Napierala {
1424524db57SEdward Tomasz Napierala uint64_t tmp;
1434524db57SEdward Tomasz Napierala
1444524db57SEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) {
145d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
1464524db57SEdward Tomasz Napierala free($2);
1474524db57SEdward Tomasz Napierala return (1);
1484524db57SEdward Tomasz Napierala }
149*6de7a0d6SJohn Baldwin free($2);
1504524db57SEdward Tomasz Napierala
1514524db57SEdward Tomasz Napierala conf->conf_maxproc = tmp;
152009ea47eSEdward Tomasz Napierala }
153009ea47eSEdward Tomasz Napierala ;
154009ea47eSEdward Tomasz Napierala
155e1c0d0d8SEdward Tomasz Napierala pidfile: PIDFILE STR
156009ea47eSEdward Tomasz Napierala {
157009ea47eSEdward Tomasz Napierala if (conf->conf_pidfile_path != NULL) {
158009ea47eSEdward Tomasz Napierala log_warnx("pidfile specified more than once");
159009ea47eSEdward Tomasz Napierala free($2);
160009ea47eSEdward Tomasz Napierala return (1);
161009ea47eSEdward Tomasz Napierala }
162009ea47eSEdward Tomasz Napierala conf->conf_pidfile_path = $2;
163009ea47eSEdward Tomasz Napierala }
164009ea47eSEdward Tomasz Napierala ;
165009ea47eSEdward Tomasz Napierala
166829603e2SAlexander Motin isns_server: ISNS_SERVER STR
167829603e2SAlexander Motin {
168450a84c2SJohn Baldwin bool ok;
169829603e2SAlexander Motin
170450a84c2SJohn Baldwin ok = isns_new(conf, $2);
171829603e2SAlexander Motin free($2);
172450a84c2SJohn Baldwin if (!ok)
173829603e2SAlexander Motin return (1);
174829603e2SAlexander Motin }
175829603e2SAlexander Motin ;
176829603e2SAlexander Motin
177d9b4554dSEdward Tomasz Napierala isns_period: ISNS_PERIOD STR
178829603e2SAlexander Motin {
179d9b4554dSEdward Tomasz Napierala uint64_t tmp;
180d9b4554dSEdward Tomasz Napierala
181d9b4554dSEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) {
182d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
183d9b4554dSEdward Tomasz Napierala free($2);
184d9b4554dSEdward Tomasz Napierala return (1);
185d9b4554dSEdward Tomasz Napierala }
186*6de7a0d6SJohn Baldwin free($2);
187d9b4554dSEdward Tomasz Napierala
188d9b4554dSEdward Tomasz Napierala conf->conf_isns_period = tmp;
189829603e2SAlexander Motin }
190829603e2SAlexander Motin ;
191829603e2SAlexander Motin
192d9b4554dSEdward Tomasz Napierala isns_timeout: ISNS_TIMEOUT STR
193829603e2SAlexander Motin {
194d9b4554dSEdward Tomasz Napierala uint64_t tmp;
195d9b4554dSEdward Tomasz Napierala
196d9b4554dSEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) {
197d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
198d9b4554dSEdward Tomasz Napierala free($2);
199d9b4554dSEdward Tomasz Napierala return (1);
200d9b4554dSEdward Tomasz Napierala }
201*6de7a0d6SJohn Baldwin free($2);
202d9b4554dSEdward Tomasz Napierala
203d9b4554dSEdward Tomasz Napierala conf->conf_isns_timeout = tmp;
204829603e2SAlexander Motin }
205829603e2SAlexander Motin ;
206829603e2SAlexander Motin
207e1c0d0d8SEdward Tomasz Napierala auth_group: AUTH_GROUP auth_group_name
208009ea47eSEdward Tomasz Napierala OPENING_BRACKET auth_group_entries CLOSING_BRACKET
209009ea47eSEdward Tomasz Napierala {
210009ea47eSEdward Tomasz Napierala auth_group = NULL;
211009ea47eSEdward Tomasz Napierala }
212009ea47eSEdward Tomasz Napierala ;
213009ea47eSEdward Tomasz Napierala
214009ea47eSEdward Tomasz Napierala auth_group_name: STR
215009ea47eSEdward Tomasz Napierala {
216e7977549SEdward Tomasz Napierala /*
217e7977549SEdward Tomasz Napierala * Make it possible to redefine default
218e7977549SEdward Tomasz Napierala * auth-group. but only once.
219e7977549SEdward Tomasz Napierala */
220e7977549SEdward Tomasz Napierala if (strcmp($1, "default") == 0 &&
221e7977549SEdward Tomasz Napierala conf->conf_default_ag_defined == false) {
222e7977549SEdward Tomasz Napierala auth_group = auth_group_find(conf, $1);
223e7977549SEdward Tomasz Napierala conf->conf_default_ag_defined = true;
224e7977549SEdward Tomasz Napierala } else {
225009ea47eSEdward Tomasz Napierala auth_group = auth_group_new(conf, $1);
226e7977549SEdward Tomasz Napierala }
227009ea47eSEdward Tomasz Napierala free($1);
228009ea47eSEdward Tomasz Napierala if (auth_group == NULL)
229009ea47eSEdward Tomasz Napierala return (1);
230009ea47eSEdward Tomasz Napierala }
231009ea47eSEdward Tomasz Napierala ;
232009ea47eSEdward Tomasz Napierala
233009ea47eSEdward Tomasz Napierala auth_group_entries:
234009ea47eSEdward Tomasz Napierala |
235009ea47eSEdward Tomasz Napierala auth_group_entries auth_group_entry
236f9488580SEdward Tomasz Napierala |
237f9488580SEdward Tomasz Napierala auth_group_entries auth_group_entry SEMICOLON
238009ea47eSEdward Tomasz Napierala ;
239009ea47eSEdward Tomasz Napierala
240009ea47eSEdward Tomasz Napierala auth_group_entry:
241df9900fbSEdward Tomasz Napierala auth_group_auth_type
242df9900fbSEdward Tomasz Napierala |
243009ea47eSEdward Tomasz Napierala auth_group_chap
244009ea47eSEdward Tomasz Napierala |
245009ea47eSEdward Tomasz Napierala auth_group_chap_mutual
2468cb2e958SEdward Tomasz Napierala |
2478cb2e958SEdward Tomasz Napierala auth_group_initiator_name
2488cb2e958SEdward Tomasz Napierala |
2498cb2e958SEdward Tomasz Napierala auth_group_initiator_portal
250009ea47eSEdward Tomasz Napierala ;
251009ea47eSEdward Tomasz Napierala
252df9900fbSEdward Tomasz Napierala auth_group_auth_type: AUTH_TYPE STR
253df9900fbSEdward Tomasz Napierala {
254450a84c2SJohn Baldwin bool ok;
255df9900fbSEdward Tomasz Napierala
256450a84c2SJohn Baldwin ok = auth_group_set_type(auth_group, $2);
257df9900fbSEdward Tomasz Napierala free($2);
258450a84c2SJohn Baldwin if (!ok)
259df9900fbSEdward Tomasz Napierala return (1);
260df9900fbSEdward Tomasz Napierala }
261df9900fbSEdward Tomasz Napierala ;
262df9900fbSEdward Tomasz Napierala
263009ea47eSEdward Tomasz Napierala auth_group_chap: CHAP STR STR
264009ea47eSEdward Tomasz Napierala {
265009ea47eSEdward Tomasz Napierala const struct auth *ca;
266009ea47eSEdward Tomasz Napierala
267009ea47eSEdward Tomasz Napierala ca = auth_new_chap(auth_group, $2, $3);
268009ea47eSEdward Tomasz Napierala free($2);
269009ea47eSEdward Tomasz Napierala free($3);
270009ea47eSEdward Tomasz Napierala if (ca == NULL)
271009ea47eSEdward Tomasz Napierala return (1);
272009ea47eSEdward Tomasz Napierala }
273009ea47eSEdward Tomasz Napierala ;
274009ea47eSEdward Tomasz Napierala
275009ea47eSEdward Tomasz Napierala auth_group_chap_mutual: CHAP_MUTUAL STR STR STR STR
276009ea47eSEdward Tomasz Napierala {
277009ea47eSEdward Tomasz Napierala const struct auth *ca;
278009ea47eSEdward Tomasz Napierala
279009ea47eSEdward Tomasz Napierala ca = auth_new_chap_mutual(auth_group, $2, $3, $4, $5);
280009ea47eSEdward Tomasz Napierala free($2);
281009ea47eSEdward Tomasz Napierala free($3);
282009ea47eSEdward Tomasz Napierala free($4);
283009ea47eSEdward Tomasz Napierala free($5);
284009ea47eSEdward Tomasz Napierala if (ca == NULL)
285009ea47eSEdward Tomasz Napierala return (1);
286009ea47eSEdward Tomasz Napierala }
287009ea47eSEdward Tomasz Napierala ;
288009ea47eSEdward Tomasz Napierala
2898cb2e958SEdward Tomasz Napierala auth_group_initiator_name: INITIATOR_NAME STR
2908cb2e958SEdward Tomasz Napierala {
2918cb2e958SEdward Tomasz Napierala const struct auth_name *an;
2928cb2e958SEdward Tomasz Napierala
2938cb2e958SEdward Tomasz Napierala an = auth_name_new(auth_group, $2);
2948cb2e958SEdward Tomasz Napierala free($2);
2958cb2e958SEdward Tomasz Napierala if (an == NULL)
2968cb2e958SEdward Tomasz Napierala return (1);
2978cb2e958SEdward Tomasz Napierala }
2988cb2e958SEdward Tomasz Napierala ;
2998cb2e958SEdward Tomasz Napierala
3008cb2e958SEdward Tomasz Napierala auth_group_initiator_portal: INITIATOR_PORTAL STR
3018cb2e958SEdward Tomasz Napierala {
3028cb2e958SEdward Tomasz Napierala const struct auth_portal *ap;
3038cb2e958SEdward Tomasz Napierala
3048cb2e958SEdward Tomasz Napierala ap = auth_portal_new(auth_group, $2);
3058cb2e958SEdward Tomasz Napierala free($2);
3068cb2e958SEdward Tomasz Napierala if (ap == NULL)
3078cb2e958SEdward Tomasz Napierala return (1);
3088cb2e958SEdward Tomasz Napierala }
3098cb2e958SEdward Tomasz Napierala ;
3108cb2e958SEdward Tomasz Napierala
311e1c0d0d8SEdward Tomasz Napierala portal_group: PORTAL_GROUP portal_group_name
312009ea47eSEdward Tomasz Napierala OPENING_BRACKET portal_group_entries CLOSING_BRACKET
313009ea47eSEdward Tomasz Napierala {
314009ea47eSEdward Tomasz Napierala portal_group = NULL;
315009ea47eSEdward Tomasz Napierala }
316009ea47eSEdward Tomasz Napierala ;
317009ea47eSEdward Tomasz Napierala
318009ea47eSEdward Tomasz Napierala portal_group_name: STR
319009ea47eSEdward Tomasz Napierala {
320252d941cSEdward Tomasz Napierala /*
321252d941cSEdward Tomasz Napierala * Make it possible to redefine default
322252d941cSEdward Tomasz Napierala * portal-group. but only once.
323252d941cSEdward Tomasz Napierala */
324252d941cSEdward Tomasz Napierala if (strcmp($1, "default") == 0 &&
325252d941cSEdward Tomasz Napierala conf->conf_default_pg_defined == false) {
326252d941cSEdward Tomasz Napierala portal_group = portal_group_find(conf, $1);
327252d941cSEdward Tomasz Napierala conf->conf_default_pg_defined = true;
328252d941cSEdward Tomasz Napierala } else {
329009ea47eSEdward Tomasz Napierala portal_group = portal_group_new(conf, $1);
330252d941cSEdward Tomasz Napierala }
331009ea47eSEdward Tomasz Napierala free($1);
332009ea47eSEdward Tomasz Napierala if (portal_group == NULL)
333009ea47eSEdward Tomasz Napierala return (1);
334009ea47eSEdward Tomasz Napierala }
335009ea47eSEdward Tomasz Napierala ;
336009ea47eSEdward Tomasz Napierala
337009ea47eSEdward Tomasz Napierala portal_group_entries:
338009ea47eSEdward Tomasz Napierala |
339009ea47eSEdward Tomasz Napierala portal_group_entries portal_group_entry
340f9488580SEdward Tomasz Napierala |
341f9488580SEdward Tomasz Napierala portal_group_entries portal_group_entry SEMICOLON
342009ea47eSEdward Tomasz Napierala ;
343009ea47eSEdward Tomasz Napierala
344009ea47eSEdward Tomasz Napierala portal_group_entry:
345009ea47eSEdward Tomasz Napierala portal_group_discovery_auth_group
346009ea47eSEdward Tomasz Napierala |
34705374883SEdward Tomasz Napierala portal_group_discovery_filter
34805374883SEdward Tomasz Napierala |
349db7bf2baSAlexander Motin portal_group_foreign
350db7bf2baSAlexander Motin |
351009ea47eSEdward Tomasz Napierala portal_group_listen
352009ea47eSEdward Tomasz Napierala |
353009ea47eSEdward Tomasz Napierala portal_group_listen_iser
3546dbdbf82SEdward Tomasz Napierala |
355a9d78210SEdward Tomasz Napierala portal_group_offload
356a9d78210SEdward Tomasz Napierala |
357398290f2SAlexander Motin portal_group_option
358398290f2SAlexander Motin |
3596dbdbf82SEdward Tomasz Napierala portal_group_redirect
360db7bf2baSAlexander Motin |
361db7bf2baSAlexander Motin portal_group_tag
36264ffe6d4SRichard Scheffenegger |
36364ffe6d4SRichard Scheffenegger portal_group_dscp
364ea8f1280SRichard Scheffenegger |
365ea8f1280SRichard Scheffenegger portal_group_pcp
366009ea47eSEdward Tomasz Napierala ;
367009ea47eSEdward Tomasz Napierala
368009ea47eSEdward Tomasz Napierala portal_group_discovery_auth_group: DISCOVERY_AUTH_GROUP STR
369009ea47eSEdward Tomasz Napierala {
370009ea47eSEdward Tomasz Napierala if (portal_group->pg_discovery_auth_group != NULL) {
371009ea47eSEdward Tomasz Napierala log_warnx("discovery-auth-group for portal-group "
372009ea47eSEdward Tomasz Napierala "\"%s\" specified more than once",
373009ea47eSEdward Tomasz Napierala portal_group->pg_name);
374*6de7a0d6SJohn Baldwin free($2);
375009ea47eSEdward Tomasz Napierala return (1);
376009ea47eSEdward Tomasz Napierala }
377009ea47eSEdward Tomasz Napierala portal_group->pg_discovery_auth_group =
378009ea47eSEdward Tomasz Napierala auth_group_find(conf, $2);
379009ea47eSEdward Tomasz Napierala if (portal_group->pg_discovery_auth_group == NULL) {
380009ea47eSEdward Tomasz Napierala log_warnx("unknown discovery-auth-group \"%s\" "
381009ea47eSEdward Tomasz Napierala "for portal-group \"%s\"",
382009ea47eSEdward Tomasz Napierala $2, portal_group->pg_name);
383*6de7a0d6SJohn Baldwin free($2);
384009ea47eSEdward Tomasz Napierala return (1);
385009ea47eSEdward Tomasz Napierala }
386009ea47eSEdward Tomasz Napierala free($2);
387009ea47eSEdward Tomasz Napierala }
388009ea47eSEdward Tomasz Napierala ;
389009ea47eSEdward Tomasz Napierala
39005374883SEdward Tomasz Napierala portal_group_discovery_filter: DISCOVERY_FILTER STR
39105374883SEdward Tomasz Napierala {
392450a84c2SJohn Baldwin bool ok;
39305374883SEdward Tomasz Napierala
394450a84c2SJohn Baldwin ok = portal_group_set_filter(portal_group, $2);
39505374883SEdward Tomasz Napierala free($2);
396450a84c2SJohn Baldwin if (!ok)
39705374883SEdward Tomasz Napierala return (1);
39805374883SEdward Tomasz Napierala }
39905374883SEdward Tomasz Napierala ;
40005374883SEdward Tomasz Napierala
401db7bf2baSAlexander Motin portal_group_foreign: FOREIGN
402db7bf2baSAlexander Motin {
403db7bf2baSAlexander Motin
404450a84c2SJohn Baldwin portal_group->pg_foreign = true;
405db7bf2baSAlexander Motin }
406db7bf2baSAlexander Motin ;
407db7bf2baSAlexander Motin
408009ea47eSEdward Tomasz Napierala portal_group_listen: LISTEN STR
409009ea47eSEdward Tomasz Napierala {
410450a84c2SJohn Baldwin bool ok;
411009ea47eSEdward Tomasz Napierala
412450a84c2SJohn Baldwin ok = portal_group_add_listen(portal_group, $2, false);
413009ea47eSEdward Tomasz Napierala free($2);
414450a84c2SJohn Baldwin if (!ok)
415009ea47eSEdward Tomasz Napierala return (1);
416009ea47eSEdward Tomasz Napierala }
417009ea47eSEdward Tomasz Napierala ;
418009ea47eSEdward Tomasz Napierala
419009ea47eSEdward Tomasz Napierala portal_group_listen_iser: LISTEN_ISER STR
420009ea47eSEdward Tomasz Napierala {
421450a84c2SJohn Baldwin bool ok;
422009ea47eSEdward Tomasz Napierala
423450a84c2SJohn Baldwin ok = portal_group_add_listen(portal_group, $2, true);
424009ea47eSEdward Tomasz Napierala free($2);
425450a84c2SJohn Baldwin if (!ok)
426009ea47eSEdward Tomasz Napierala return (1);
427009ea47eSEdward Tomasz Napierala }
428009ea47eSEdward Tomasz Napierala ;
429009ea47eSEdward Tomasz Napierala
430a9d78210SEdward Tomasz Napierala portal_group_offload: OFFLOAD STR
431a9d78210SEdward Tomasz Napierala {
432450a84c2SJohn Baldwin bool ok;
433a9d78210SEdward Tomasz Napierala
434450a84c2SJohn Baldwin ok = portal_group_set_offload(portal_group, $2);
435a9d78210SEdward Tomasz Napierala free($2);
436450a84c2SJohn Baldwin if (!ok)
437a9d78210SEdward Tomasz Napierala return (1);
438a9d78210SEdward Tomasz Napierala }
439a9d78210SEdward Tomasz Napierala ;
440a9d78210SEdward Tomasz Napierala
441398290f2SAlexander Motin portal_group_option: OPTION STR STR
442398290f2SAlexander Motin {
443703b03a8SJohn Baldwin bool ok;
444398290f2SAlexander Motin
445703b03a8SJohn Baldwin ok = option_new(portal_group->pg_options, $2, $3);
446398290f2SAlexander Motin free($2);
447398290f2SAlexander Motin free($3);
448703b03a8SJohn Baldwin if (!ok)
449398290f2SAlexander Motin return (1);
450398290f2SAlexander Motin }
451398290f2SAlexander Motin ;
452398290f2SAlexander Motin
4536dbdbf82SEdward Tomasz Napierala portal_group_redirect: REDIRECT STR
4546dbdbf82SEdward Tomasz Napierala {
455450a84c2SJohn Baldwin bool ok;
4566dbdbf82SEdward Tomasz Napierala
457450a84c2SJohn Baldwin ok = portal_group_set_redirection(portal_group, $2);
4586dbdbf82SEdward Tomasz Napierala free($2);
459450a84c2SJohn Baldwin if (!ok)
4606dbdbf82SEdward Tomasz Napierala return (1);
4616dbdbf82SEdward Tomasz Napierala }
4626dbdbf82SEdward Tomasz Napierala ;
4636dbdbf82SEdward Tomasz Napierala
464db7bf2baSAlexander Motin portal_group_tag: TAG STR
465db7bf2baSAlexander Motin {
466db7bf2baSAlexander Motin uint64_t tmp;
467db7bf2baSAlexander Motin
468db7bf2baSAlexander Motin if (expand_number($2, &tmp) != 0) {
469db7bf2baSAlexander Motin yyerror("invalid numeric value");
470db7bf2baSAlexander Motin free($2);
471db7bf2baSAlexander Motin return (1);
472db7bf2baSAlexander Motin }
473*6de7a0d6SJohn Baldwin free($2);
474db7bf2baSAlexander Motin
475db7bf2baSAlexander Motin portal_group->pg_tag = tmp;
476db7bf2baSAlexander Motin }
477db7bf2baSAlexander Motin ;
478db7bf2baSAlexander Motin
47964ffe6d4SRichard Scheffenegger portal_group_dscp
48064ffe6d4SRichard Scheffenegger : DSCP STR
48164ffe6d4SRichard Scheffenegger {
48264ffe6d4SRichard Scheffenegger uint64_t tmp;
48364ffe6d4SRichard Scheffenegger
48464ffe6d4SRichard Scheffenegger if (strcmp($2, "0x") == 0) {
48564ffe6d4SRichard Scheffenegger tmp = strtol($2 + 2, NULL, 16);
48664ffe6d4SRichard Scheffenegger } else if (expand_number($2, &tmp) != 0) {
48764ffe6d4SRichard Scheffenegger yyerror("invalid numeric value");
48864ffe6d4SRichard Scheffenegger free($2);
48964ffe6d4SRichard Scheffenegger return(1);
49064ffe6d4SRichard Scheffenegger }
491*6de7a0d6SJohn Baldwin free($2);
49264ffe6d4SRichard Scheffenegger if (tmp >= 0x40) {
49364ffe6d4SRichard Scheffenegger yyerror("invalid dscp value");
49464ffe6d4SRichard Scheffenegger return(1);
49564ffe6d4SRichard Scheffenegger }
49664ffe6d4SRichard Scheffenegger
49764ffe6d4SRichard Scheffenegger portal_group->pg_dscp = tmp;
49864ffe6d4SRichard Scheffenegger }
49964ffe6d4SRichard Scheffenegger | DSCP BE { portal_group->pg_dscp = IPTOS_DSCP_CS0 >> 2 ; }
50064ffe6d4SRichard Scheffenegger | DSCP EF { portal_group->pg_dscp = IPTOS_DSCP_EF >> 2 ; }
50164ffe6d4SRichard Scheffenegger | DSCP CS0 { portal_group->pg_dscp = IPTOS_DSCP_CS0 >> 2 ; }
50264ffe6d4SRichard Scheffenegger | DSCP CS1 { portal_group->pg_dscp = IPTOS_DSCP_CS1 >> 2 ; }
50364ffe6d4SRichard Scheffenegger | DSCP CS2 { portal_group->pg_dscp = IPTOS_DSCP_CS2 >> 2 ; }
50464ffe6d4SRichard Scheffenegger | DSCP CS3 { portal_group->pg_dscp = IPTOS_DSCP_CS3 >> 2 ; }
50564ffe6d4SRichard Scheffenegger | DSCP CS4 { portal_group->pg_dscp = IPTOS_DSCP_CS4 >> 2 ; }
50664ffe6d4SRichard Scheffenegger | DSCP CS5 { portal_group->pg_dscp = IPTOS_DSCP_CS5 >> 2 ; }
50764ffe6d4SRichard Scheffenegger | DSCP CS6 { portal_group->pg_dscp = IPTOS_DSCP_CS6 >> 2 ; }
50864ffe6d4SRichard Scheffenegger | DSCP CS7 { portal_group->pg_dscp = IPTOS_DSCP_CS7 >> 2 ; }
50964ffe6d4SRichard Scheffenegger | DSCP AF11 { portal_group->pg_dscp = IPTOS_DSCP_AF11 >> 2 ; }
51064ffe6d4SRichard Scheffenegger | DSCP AF12 { portal_group->pg_dscp = IPTOS_DSCP_AF12 >> 2 ; }
51164ffe6d4SRichard Scheffenegger | DSCP AF13 { portal_group->pg_dscp = IPTOS_DSCP_AF13 >> 2 ; }
51264ffe6d4SRichard Scheffenegger | DSCP AF21 { portal_group->pg_dscp = IPTOS_DSCP_AF21 >> 2 ; }
51364ffe6d4SRichard Scheffenegger | DSCP AF22 { portal_group->pg_dscp = IPTOS_DSCP_AF22 >> 2 ; }
51464ffe6d4SRichard Scheffenegger | DSCP AF23 { portal_group->pg_dscp = IPTOS_DSCP_AF23 >> 2 ; }
51564ffe6d4SRichard Scheffenegger | DSCP AF31 { portal_group->pg_dscp = IPTOS_DSCP_AF31 >> 2 ; }
51664ffe6d4SRichard Scheffenegger | DSCP AF32 { portal_group->pg_dscp = IPTOS_DSCP_AF32 >> 2 ; }
51764ffe6d4SRichard Scheffenegger | DSCP AF33 { portal_group->pg_dscp = IPTOS_DSCP_AF33 >> 2 ; }
51864ffe6d4SRichard Scheffenegger | DSCP AF41 { portal_group->pg_dscp = IPTOS_DSCP_AF41 >> 2 ; }
51964ffe6d4SRichard Scheffenegger | DSCP AF42 { portal_group->pg_dscp = IPTOS_DSCP_AF42 >> 2 ; }
52064ffe6d4SRichard Scheffenegger | DSCP AF43 { portal_group->pg_dscp = IPTOS_DSCP_AF43 >> 2 ; }
52164ffe6d4SRichard Scheffenegger ;
52264ffe6d4SRichard Scheffenegger
523ea8f1280SRichard Scheffenegger portal_group_pcp: PCP STR
524ea8f1280SRichard Scheffenegger {
525ea8f1280SRichard Scheffenegger uint64_t tmp;
526ea8f1280SRichard Scheffenegger
527ea8f1280SRichard Scheffenegger if (expand_number($2, &tmp) != 0) {
528ea8f1280SRichard Scheffenegger yyerror("invalid numeric value");
529ea8f1280SRichard Scheffenegger free($2);
530ea8f1280SRichard Scheffenegger return (1);
531ea8f1280SRichard Scheffenegger }
532*6de7a0d6SJohn Baldwin free($2);
533e72a100bSAdrian Chadd if (tmp > 7) {
534ea8f1280SRichard Scheffenegger yyerror("invalid pcp value");
535ea8f1280SRichard Scheffenegger return (1);
536ea8f1280SRichard Scheffenegger }
537ea8f1280SRichard Scheffenegger
538ea8f1280SRichard Scheffenegger portal_group->pg_pcp = tmp;
539ea8f1280SRichard Scheffenegger }
540ea8f1280SRichard Scheffenegger ;
54164ffe6d4SRichard Scheffenegger
542920c6cbaSAlexander Motin lun: LUN lun_name
543920c6cbaSAlexander Motin OPENING_BRACKET lun_entries CLOSING_BRACKET
544920c6cbaSAlexander Motin {
545920c6cbaSAlexander Motin lun = NULL;
546920c6cbaSAlexander Motin }
547920c6cbaSAlexander Motin ;
548920c6cbaSAlexander Motin
549920c6cbaSAlexander Motin lun_name: STR
550920c6cbaSAlexander Motin {
551920c6cbaSAlexander Motin lun = lun_new(conf, $1);
552920c6cbaSAlexander Motin free($1);
553920c6cbaSAlexander Motin if (lun == NULL)
554920c6cbaSAlexander Motin return (1);
555920c6cbaSAlexander Motin }
556920c6cbaSAlexander Motin ;
557920c6cbaSAlexander Motin
558e1c0d0d8SEdward Tomasz Napierala target: TARGET target_name
559009ea47eSEdward Tomasz Napierala OPENING_BRACKET target_entries CLOSING_BRACKET
560009ea47eSEdward Tomasz Napierala {
561009ea47eSEdward Tomasz Napierala target = NULL;
562009ea47eSEdward Tomasz Napierala }
563009ea47eSEdward Tomasz Napierala ;
564009ea47eSEdward Tomasz Napierala
565e1c0d0d8SEdward Tomasz Napierala target_name: STR
566009ea47eSEdward Tomasz Napierala {
567009ea47eSEdward Tomasz Napierala target = target_new(conf, $1);
568009ea47eSEdward Tomasz Napierala free($1);
569009ea47eSEdward Tomasz Napierala if (target == NULL)
570009ea47eSEdward Tomasz Napierala return (1);
571009ea47eSEdward Tomasz Napierala }
572009ea47eSEdward Tomasz Napierala ;
573009ea47eSEdward Tomasz Napierala
574009ea47eSEdward Tomasz Napierala target_entries:
575009ea47eSEdward Tomasz Napierala |
576009ea47eSEdward Tomasz Napierala target_entries target_entry
577f9488580SEdward Tomasz Napierala |
578f9488580SEdward Tomasz Napierala target_entries target_entry SEMICOLON
579009ea47eSEdward Tomasz Napierala ;
580009ea47eSEdward Tomasz Napierala
581009ea47eSEdward Tomasz Napierala target_entry:
582e1c0d0d8SEdward Tomasz Napierala target_alias
583009ea47eSEdward Tomasz Napierala |
584e1c0d0d8SEdward Tomasz Napierala target_auth_group
585009ea47eSEdward Tomasz Napierala |
586df9900fbSEdward Tomasz Napierala target_auth_type
587df9900fbSEdward Tomasz Napierala |
588e1c0d0d8SEdward Tomasz Napierala target_chap
589009ea47eSEdward Tomasz Napierala |
590e1c0d0d8SEdward Tomasz Napierala target_chap_mutual
591009ea47eSEdward Tomasz Napierala |
592e1c0d0d8SEdward Tomasz Napierala target_initiator_name
5938cb2e958SEdward Tomasz Napierala |
594e1c0d0d8SEdward Tomasz Napierala target_initiator_portal
5958cb2e958SEdward Tomasz Napierala |
596e1c0d0d8SEdward Tomasz Napierala target_portal_group
597009ea47eSEdward Tomasz Napierala |
598057abcb0SAlexander Motin target_port
599057abcb0SAlexander Motin |
6006dbdbf82SEdward Tomasz Napierala target_redirect
6016dbdbf82SEdward Tomasz Napierala |
602e1c0d0d8SEdward Tomasz Napierala target_lun
603920c6cbaSAlexander Motin |
604920c6cbaSAlexander Motin target_lun_ref
605009ea47eSEdward Tomasz Napierala ;
606009ea47eSEdward Tomasz Napierala
607e1c0d0d8SEdward Tomasz Napierala target_alias: ALIAS STR
608009ea47eSEdward Tomasz Napierala {
609009ea47eSEdward Tomasz Napierala if (target->t_alias != NULL) {
610009ea47eSEdward Tomasz Napierala log_warnx("alias for target \"%s\" "
611f7ae5bf8SEdward Tomasz Napierala "specified more than once", target->t_name);
612*6de7a0d6SJohn Baldwin free($2);
613009ea47eSEdward Tomasz Napierala return (1);
614009ea47eSEdward Tomasz Napierala }
615009ea47eSEdward Tomasz Napierala target->t_alias = $2;
616009ea47eSEdward Tomasz Napierala }
617009ea47eSEdward Tomasz Napierala ;
618009ea47eSEdward Tomasz Napierala
619e1c0d0d8SEdward Tomasz Napierala target_auth_group: AUTH_GROUP STR
620009ea47eSEdward Tomasz Napierala {
621009ea47eSEdward Tomasz Napierala if (target->t_auth_group != NULL) {
622009ea47eSEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL)
623009ea47eSEdward Tomasz Napierala log_warnx("auth-group for target \"%s\" "
624f7ae5bf8SEdward Tomasz Napierala "specified more than once", target->t_name);
625009ea47eSEdward Tomasz Napierala else
626df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and explicit "
627009ea47eSEdward Tomasz Napierala "authorisations for target \"%s\"",
628f7ae5bf8SEdward Tomasz Napierala target->t_name);
629*6de7a0d6SJohn Baldwin free($2);
630009ea47eSEdward Tomasz Napierala return (1);
631009ea47eSEdward Tomasz Napierala }
632009ea47eSEdward Tomasz Napierala target->t_auth_group = auth_group_find(conf, $2);
633009ea47eSEdward Tomasz Napierala if (target->t_auth_group == NULL) {
634009ea47eSEdward Tomasz Napierala log_warnx("unknown auth-group \"%s\" for target "
635f7ae5bf8SEdward Tomasz Napierala "\"%s\"", $2, target->t_name);
636*6de7a0d6SJohn Baldwin free($2);
637009ea47eSEdward Tomasz Napierala return (1);
638009ea47eSEdward Tomasz Napierala }
639009ea47eSEdward Tomasz Napierala free($2);
640009ea47eSEdward Tomasz Napierala }
641009ea47eSEdward Tomasz Napierala ;
642009ea47eSEdward Tomasz Napierala
643df9900fbSEdward Tomasz Napierala target_auth_type: AUTH_TYPE STR
644df9900fbSEdward Tomasz Napierala {
645450a84c2SJohn Baldwin bool ok;
646df9900fbSEdward Tomasz Napierala
647df9900fbSEdward Tomasz Napierala if (target->t_auth_group != NULL) {
648df9900fbSEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) {
649df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and "
650df9900fbSEdward Tomasz Napierala "auth-type for target \"%s\"",
651df9900fbSEdward Tomasz Napierala target->t_name);
652*6de7a0d6SJohn Baldwin free($2);
653df9900fbSEdward Tomasz Napierala return (1);
654df9900fbSEdward Tomasz Napierala }
655df9900fbSEdward Tomasz Napierala } else {
656df9900fbSEdward Tomasz Napierala target->t_auth_group = auth_group_new(conf, NULL);
657df9900fbSEdward Tomasz Napierala if (target->t_auth_group == NULL) {
658df9900fbSEdward Tomasz Napierala free($2);
659df9900fbSEdward Tomasz Napierala return (1);
660df9900fbSEdward Tomasz Napierala }
661df9900fbSEdward Tomasz Napierala target->t_auth_group->ag_target = target;
662df9900fbSEdward Tomasz Napierala }
663450a84c2SJohn Baldwin ok = auth_group_set_type(target->t_auth_group, $2);
664df9900fbSEdward Tomasz Napierala free($2);
665450a84c2SJohn Baldwin if (!ok)
666df9900fbSEdward Tomasz Napierala return (1);
667df9900fbSEdward Tomasz Napierala }
668df9900fbSEdward Tomasz Napierala ;
669df9900fbSEdward Tomasz Napierala
670e1c0d0d8SEdward Tomasz Napierala target_chap: CHAP STR STR
671009ea47eSEdward Tomasz Napierala {
672009ea47eSEdward Tomasz Napierala const struct auth *ca;
673009ea47eSEdward Tomasz Napierala
674009ea47eSEdward Tomasz Napierala if (target->t_auth_group != NULL) {
675009ea47eSEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) {
676df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and "
677df9900fbSEdward Tomasz Napierala "chap for target \"%s\"",
678f7ae5bf8SEdward Tomasz Napierala target->t_name);
679009ea47eSEdward Tomasz Napierala free($2);
680009ea47eSEdward Tomasz Napierala free($3);
681009ea47eSEdward Tomasz Napierala return (1);
682009ea47eSEdward Tomasz Napierala }
683009ea47eSEdward Tomasz Napierala } else {
684009ea47eSEdward Tomasz Napierala target->t_auth_group = auth_group_new(conf, NULL);
685009ea47eSEdward Tomasz Napierala if (target->t_auth_group == NULL) {
686009ea47eSEdward Tomasz Napierala free($2);
687009ea47eSEdward Tomasz Napierala free($3);
688009ea47eSEdward Tomasz Napierala return (1);
689009ea47eSEdward Tomasz Napierala }
690009ea47eSEdward Tomasz Napierala target->t_auth_group->ag_target = target;
691009ea47eSEdward Tomasz Napierala }
692009ea47eSEdward Tomasz Napierala ca = auth_new_chap(target->t_auth_group, $2, $3);
693009ea47eSEdward Tomasz Napierala free($2);
694009ea47eSEdward Tomasz Napierala free($3);
695009ea47eSEdward Tomasz Napierala if (ca == NULL)
696009ea47eSEdward Tomasz Napierala return (1);
697009ea47eSEdward Tomasz Napierala }
698009ea47eSEdward Tomasz Napierala ;
699009ea47eSEdward Tomasz Napierala
700e1c0d0d8SEdward Tomasz Napierala target_chap_mutual: CHAP_MUTUAL STR STR STR STR
701009ea47eSEdward Tomasz Napierala {
702009ea47eSEdward Tomasz Napierala const struct auth *ca;
703009ea47eSEdward Tomasz Napierala
704009ea47eSEdward Tomasz Napierala if (target->t_auth_group != NULL) {
705009ea47eSEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) {
706df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and "
707df9900fbSEdward Tomasz Napierala "chap-mutual for target \"%s\"",
708f7ae5bf8SEdward Tomasz Napierala target->t_name);
709009ea47eSEdward Tomasz Napierala free($2);
710009ea47eSEdward Tomasz Napierala free($3);
711009ea47eSEdward Tomasz Napierala free($4);
712009ea47eSEdward Tomasz Napierala free($5);
713009ea47eSEdward Tomasz Napierala return (1);
714009ea47eSEdward Tomasz Napierala }
715009ea47eSEdward Tomasz Napierala } else {
716009ea47eSEdward Tomasz Napierala target->t_auth_group = auth_group_new(conf, NULL);
717009ea47eSEdward Tomasz Napierala if (target->t_auth_group == NULL) {
718009ea47eSEdward Tomasz Napierala free($2);
719009ea47eSEdward Tomasz Napierala free($3);
720009ea47eSEdward Tomasz Napierala free($4);
721009ea47eSEdward Tomasz Napierala free($5);
722009ea47eSEdward Tomasz Napierala return (1);
723009ea47eSEdward Tomasz Napierala }
724009ea47eSEdward Tomasz Napierala target->t_auth_group->ag_target = target;
725009ea47eSEdward Tomasz Napierala }
726009ea47eSEdward Tomasz Napierala ca = auth_new_chap_mutual(target->t_auth_group,
727009ea47eSEdward Tomasz Napierala $2, $3, $4, $5);
728009ea47eSEdward Tomasz Napierala free($2);
729009ea47eSEdward Tomasz Napierala free($3);
730009ea47eSEdward Tomasz Napierala free($4);
731009ea47eSEdward Tomasz Napierala free($5);
732009ea47eSEdward Tomasz Napierala if (ca == NULL)
733009ea47eSEdward Tomasz Napierala return (1);
734009ea47eSEdward Tomasz Napierala }
735009ea47eSEdward Tomasz Napierala ;
736009ea47eSEdward Tomasz Napierala
737e1c0d0d8SEdward Tomasz Napierala target_initiator_name: INITIATOR_NAME STR
7388cb2e958SEdward Tomasz Napierala {
7398cb2e958SEdward Tomasz Napierala const struct auth_name *an;
7408cb2e958SEdward Tomasz Napierala
7418cb2e958SEdward Tomasz Napierala if (target->t_auth_group != NULL) {
7428cb2e958SEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) {
743df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and "
7448cb2e958SEdward Tomasz Napierala "initiator-name for target \"%s\"",
745f7ae5bf8SEdward Tomasz Napierala target->t_name);
7468cb2e958SEdward Tomasz Napierala free($2);
7478cb2e958SEdward Tomasz Napierala return (1);
7488cb2e958SEdward Tomasz Napierala }
7498cb2e958SEdward Tomasz Napierala } else {
7508cb2e958SEdward Tomasz Napierala target->t_auth_group = auth_group_new(conf, NULL);
7518cb2e958SEdward Tomasz Napierala if (target->t_auth_group == NULL) {
7528cb2e958SEdward Tomasz Napierala free($2);
7538cb2e958SEdward Tomasz Napierala return (1);
7548cb2e958SEdward Tomasz Napierala }
7558cb2e958SEdward Tomasz Napierala target->t_auth_group->ag_target = target;
7568cb2e958SEdward Tomasz Napierala }
7578cb2e958SEdward Tomasz Napierala an = auth_name_new(target->t_auth_group, $2);
7588cb2e958SEdward Tomasz Napierala free($2);
7598cb2e958SEdward Tomasz Napierala if (an == NULL)
7608cb2e958SEdward Tomasz Napierala return (1);
7618cb2e958SEdward Tomasz Napierala }
7628cb2e958SEdward Tomasz Napierala ;
7638cb2e958SEdward Tomasz Napierala
764e1c0d0d8SEdward Tomasz Napierala target_initiator_portal: INITIATOR_PORTAL STR
7658cb2e958SEdward Tomasz Napierala {
7668cb2e958SEdward Tomasz Napierala const struct auth_portal *ap;
7678cb2e958SEdward Tomasz Napierala
7688cb2e958SEdward Tomasz Napierala if (target->t_auth_group != NULL) {
7698cb2e958SEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) {
770df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and "
7718cb2e958SEdward Tomasz Napierala "initiator-portal for target \"%s\"",
772f7ae5bf8SEdward Tomasz Napierala target->t_name);
7738cb2e958SEdward Tomasz Napierala free($2);
7748cb2e958SEdward Tomasz Napierala return (1);
7758cb2e958SEdward Tomasz Napierala }
7768cb2e958SEdward Tomasz Napierala } else {
7778cb2e958SEdward Tomasz Napierala target->t_auth_group = auth_group_new(conf, NULL);
7788cb2e958SEdward Tomasz Napierala if (target->t_auth_group == NULL) {
7798cb2e958SEdward Tomasz Napierala free($2);
7808cb2e958SEdward Tomasz Napierala return (1);
7818cb2e958SEdward Tomasz Napierala }
7828cb2e958SEdward Tomasz Napierala target->t_auth_group->ag_target = target;
7838cb2e958SEdward Tomasz Napierala }
7848cb2e958SEdward Tomasz Napierala ap = auth_portal_new(target->t_auth_group, $2);
7858cb2e958SEdward Tomasz Napierala free($2);
7868cb2e958SEdward Tomasz Napierala if (ap == NULL)
7878cb2e958SEdward Tomasz Napierala return (1);
7888cb2e958SEdward Tomasz Napierala }
7898cb2e958SEdward Tomasz Napierala ;
7908cb2e958SEdward Tomasz Napierala
79192847ee1SAlexander Motin target_portal_group: PORTAL_GROUP STR STR
792009ea47eSEdward Tomasz Napierala {
79392847ee1SAlexander Motin struct portal_group *tpg;
79492847ee1SAlexander Motin struct auth_group *tag;
79592847ee1SAlexander Motin struct port *tp;
79692847ee1SAlexander Motin
79792847ee1SAlexander Motin tpg = portal_group_find(conf, $2);
79892847ee1SAlexander Motin if (tpg == NULL) {
79992847ee1SAlexander Motin log_warnx("unknown portal-group \"%s\" for target "
80092847ee1SAlexander Motin "\"%s\"", $2, target->t_name);
80192847ee1SAlexander Motin free($2);
80292847ee1SAlexander Motin free($3);
80392847ee1SAlexander Motin return (1);
80492847ee1SAlexander Motin }
805*6de7a0d6SJohn Baldwin free($2);
80692847ee1SAlexander Motin tag = auth_group_find(conf, $3);
80792847ee1SAlexander Motin if (tag == NULL) {
80892847ee1SAlexander Motin log_warnx("unknown auth-group \"%s\" for target "
80992847ee1SAlexander Motin "\"%s\"", $3, target->t_name);
81092847ee1SAlexander Motin free($3);
81192847ee1SAlexander Motin return (1);
81292847ee1SAlexander Motin }
813*6de7a0d6SJohn Baldwin free($3);
81492847ee1SAlexander Motin tp = port_new(conf, target, tpg);
81592847ee1SAlexander Motin if (tp == NULL) {
81692847ee1SAlexander Motin log_warnx("can't link portal-group \"%s\" to target "
817*6de7a0d6SJohn Baldwin "\"%s\"", tpg->pg_name, target->t_name);
818009ea47eSEdward Tomasz Napierala return (1);
819009ea47eSEdward Tomasz Napierala }
82092847ee1SAlexander Motin tp->p_auth_group = tag;
82192847ee1SAlexander Motin }
82292847ee1SAlexander Motin | PORTAL_GROUP STR
82392847ee1SAlexander Motin {
82492847ee1SAlexander Motin struct portal_group *tpg;
82592847ee1SAlexander Motin struct port *tp;
82692847ee1SAlexander Motin
82792847ee1SAlexander Motin tpg = portal_group_find(conf, $2);
82892847ee1SAlexander Motin if (tpg == NULL) {
829009ea47eSEdward Tomasz Napierala log_warnx("unknown portal-group \"%s\" for target "
830f7ae5bf8SEdward Tomasz Napierala "\"%s\"", $2, target->t_name);
831009ea47eSEdward Tomasz Napierala free($2);
832009ea47eSEdward Tomasz Napierala return (1);
833009ea47eSEdward Tomasz Napierala }
834*6de7a0d6SJohn Baldwin free($2);
83592847ee1SAlexander Motin tp = port_new(conf, target, tpg);
83692847ee1SAlexander Motin if (tp == NULL) {
83792847ee1SAlexander Motin log_warnx("can't link portal-group \"%s\" to target "
838*6de7a0d6SJohn Baldwin "\"%s\"", tpg->pg_name, target->t_name);
83992847ee1SAlexander Motin return (1);
84092847ee1SAlexander Motin }
841009ea47eSEdward Tomasz Napierala }
842009ea47eSEdward Tomasz Napierala ;
843009ea47eSEdward Tomasz Napierala
844057abcb0SAlexander Motin target_port: PORT STR
845057abcb0SAlexander Motin {
846969876fcSAlan Somers target->t_pport = strdup($2);
8478951f055SMarcelo Araujo
848057abcb0SAlexander Motin free($2);
849057abcb0SAlexander Motin }
850057abcb0SAlexander Motin ;
851057abcb0SAlexander Motin
8526dbdbf82SEdward Tomasz Napierala target_redirect: REDIRECT STR
8536dbdbf82SEdward Tomasz Napierala {
854450a84c2SJohn Baldwin bool ok;
8556dbdbf82SEdward Tomasz Napierala
856450a84c2SJohn Baldwin ok = target_set_redirection(target, $2);
8576dbdbf82SEdward Tomasz Napierala free($2);
858450a84c2SJohn Baldwin if (!ok)
8596dbdbf82SEdward Tomasz Napierala return (1);
8606dbdbf82SEdward Tomasz Napierala }
8616dbdbf82SEdward Tomasz Napierala ;
8626dbdbf82SEdward Tomasz Napierala
863e1c0d0d8SEdward Tomasz Napierala target_lun: LUN lun_number
864e1c0d0d8SEdward Tomasz Napierala OPENING_BRACKET lun_entries CLOSING_BRACKET
865009ea47eSEdward Tomasz Napierala {
866009ea47eSEdward Tomasz Napierala lun = NULL;
867009ea47eSEdward Tomasz Napierala }
868009ea47eSEdward Tomasz Napierala ;
869009ea47eSEdward Tomasz Napierala
8704524db57SEdward Tomasz Napierala lun_number: STR
871009ea47eSEdward Tomasz Napierala {
8724524db57SEdward Tomasz Napierala uint64_t tmp;
873f584f51dSEdward Tomasz Napierala int ret;
874920c6cbaSAlexander Motin char *name;
8754524db57SEdward Tomasz Napierala
8764524db57SEdward Tomasz Napierala if (expand_number($1, &tmp) != 0) {
877d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
8784524db57SEdward Tomasz Napierala free($1);
8794524db57SEdward Tomasz Napierala return (1);
8804524db57SEdward Tomasz Napierala }
881*6de7a0d6SJohn Baldwin free($1);
882dad99db2SAlexander Motin if (tmp >= MAX_LUNS) {
883dad99db2SAlexander Motin yyerror("LU number is too big");
884dad99db2SAlexander Motin return (1);
885dad99db2SAlexander Motin }
8864524db57SEdward Tomasz Napierala
887f584f51dSEdward Tomasz Napierala ret = asprintf(&name, "%s,lun,%ju", target->t_name, tmp);
888f584f51dSEdward Tomasz Napierala if (ret <= 0)
889f584f51dSEdward Tomasz Napierala log_err(1, "asprintf");
890920c6cbaSAlexander Motin lun = lun_new(conf, name);
891009ea47eSEdward Tomasz Napierala if (lun == NULL)
892009ea47eSEdward Tomasz Napierala return (1);
893920c6cbaSAlexander Motin
894920c6cbaSAlexander Motin lun_set_scsiname(lun, name);
895920c6cbaSAlexander Motin target->t_luns[tmp] = lun;
896920c6cbaSAlexander Motin }
897920c6cbaSAlexander Motin ;
898920c6cbaSAlexander Motin
899920c6cbaSAlexander Motin target_lun_ref: LUN STR STR
900920c6cbaSAlexander Motin {
901920c6cbaSAlexander Motin uint64_t tmp;
902920c6cbaSAlexander Motin
903920c6cbaSAlexander Motin if (expand_number($2, &tmp) != 0) {
904920c6cbaSAlexander Motin yyerror("invalid numeric value");
905920c6cbaSAlexander Motin free($2);
906920c6cbaSAlexander Motin free($3);
907920c6cbaSAlexander Motin return (1);
908920c6cbaSAlexander Motin }
909920c6cbaSAlexander Motin free($2);
910dad99db2SAlexander Motin if (tmp >= MAX_LUNS) {
911dad99db2SAlexander Motin yyerror("LU number is too big");
912dad99db2SAlexander Motin free($3);
913dad99db2SAlexander Motin return (1);
914dad99db2SAlexander Motin }
915920c6cbaSAlexander Motin
916920c6cbaSAlexander Motin lun = lun_find(conf, $3);
917920c6cbaSAlexander Motin free($3);
918920c6cbaSAlexander Motin if (lun == NULL)
919920c6cbaSAlexander Motin return (1);
920920c6cbaSAlexander Motin
921920c6cbaSAlexander Motin target->t_luns[tmp] = lun;
922009ea47eSEdward Tomasz Napierala }
923009ea47eSEdward Tomasz Napierala ;
924009ea47eSEdward Tomasz Napierala
925e1c0d0d8SEdward Tomasz Napierala lun_entries:
926009ea47eSEdward Tomasz Napierala |
927e1c0d0d8SEdward Tomasz Napierala lun_entries lun_entry
928f9488580SEdward Tomasz Napierala |
929f9488580SEdward Tomasz Napierala lun_entries lun_entry SEMICOLON
930009ea47eSEdward Tomasz Napierala ;
931009ea47eSEdward Tomasz Napierala
932e1c0d0d8SEdward Tomasz Napierala lun_entry:
933e1c0d0d8SEdward Tomasz Napierala lun_backend
934009ea47eSEdward Tomasz Napierala |
935e1c0d0d8SEdward Tomasz Napierala lun_blocksize
936009ea47eSEdward Tomasz Napierala |
937e1c0d0d8SEdward Tomasz Napierala lun_device_id
938009ea47eSEdward Tomasz Napierala |
93991be33dcSAlexander Motin lun_device_type
94091be33dcSAlexander Motin |
9413933f7b1SAlexander Motin lun_ctl_lun
9423933f7b1SAlexander Motin |
943e1c0d0d8SEdward Tomasz Napierala lun_option
944009ea47eSEdward Tomasz Napierala |
945e1c0d0d8SEdward Tomasz Napierala lun_path
946009ea47eSEdward Tomasz Napierala |
947e1c0d0d8SEdward Tomasz Napierala lun_serial
948009ea47eSEdward Tomasz Napierala |
949e1c0d0d8SEdward Tomasz Napierala lun_size
950009ea47eSEdward Tomasz Napierala ;
951009ea47eSEdward Tomasz Napierala
952e1c0d0d8SEdward Tomasz Napierala lun_backend: BACKEND STR
953009ea47eSEdward Tomasz Napierala {
954009ea47eSEdward Tomasz Napierala if (lun->l_backend != NULL) {
955920c6cbaSAlexander Motin log_warnx("backend for lun \"%s\" "
956009ea47eSEdward Tomasz Napierala "specified more than once",
957920c6cbaSAlexander Motin lun->l_name);
958009ea47eSEdward Tomasz Napierala free($2);
959009ea47eSEdward Tomasz Napierala return (1);
960009ea47eSEdward Tomasz Napierala }
961009ea47eSEdward Tomasz Napierala lun_set_backend(lun, $2);
962009ea47eSEdward Tomasz Napierala free($2);
963009ea47eSEdward Tomasz Napierala }
964009ea47eSEdward Tomasz Napierala ;
965009ea47eSEdward Tomasz Napierala
9664524db57SEdward Tomasz Napierala lun_blocksize: BLOCKSIZE STR
967009ea47eSEdward Tomasz Napierala {
9684524db57SEdward Tomasz Napierala uint64_t tmp;
9694524db57SEdward Tomasz Napierala
9704524db57SEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) {
971d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
9724524db57SEdward Tomasz Napierala free($2);
9734524db57SEdward Tomasz Napierala return (1);
9744524db57SEdward Tomasz Napierala }
975*6de7a0d6SJohn Baldwin free($2);
9764524db57SEdward Tomasz Napierala
977009ea47eSEdward Tomasz Napierala if (lun->l_blocksize != 0) {
978920c6cbaSAlexander Motin log_warnx("blocksize for lun \"%s\" "
979009ea47eSEdward Tomasz Napierala "specified more than once",
980920c6cbaSAlexander Motin lun->l_name);
981009ea47eSEdward Tomasz Napierala return (1);
982009ea47eSEdward Tomasz Napierala }
9834524db57SEdward Tomasz Napierala lun_set_blocksize(lun, tmp);
984009ea47eSEdward Tomasz Napierala }
985009ea47eSEdward Tomasz Napierala ;
986009ea47eSEdward Tomasz Napierala
987e1c0d0d8SEdward Tomasz Napierala lun_device_id: DEVICE_ID STR
988009ea47eSEdward Tomasz Napierala {
989009ea47eSEdward Tomasz Napierala if (lun->l_device_id != NULL) {
990920c6cbaSAlexander Motin log_warnx("device_id for lun \"%s\" "
991009ea47eSEdward Tomasz Napierala "specified more than once",
992920c6cbaSAlexander Motin lun->l_name);
993009ea47eSEdward Tomasz Napierala free($2);
994009ea47eSEdward Tomasz Napierala return (1);
995009ea47eSEdward Tomasz Napierala }
996009ea47eSEdward Tomasz Napierala lun_set_device_id(lun, $2);
997009ea47eSEdward Tomasz Napierala free($2);
998009ea47eSEdward Tomasz Napierala }
999009ea47eSEdward Tomasz Napierala ;
1000009ea47eSEdward Tomasz Napierala
100191be33dcSAlexander Motin lun_device_type: DEVICE_TYPE STR
100291be33dcSAlexander Motin {
100391be33dcSAlexander Motin uint64_t tmp;
100491be33dcSAlexander Motin
100591be33dcSAlexander Motin if (strcasecmp($2, "disk") == 0 ||
100691be33dcSAlexander Motin strcasecmp($2, "direct") == 0)
100791be33dcSAlexander Motin tmp = 0;
100891be33dcSAlexander Motin else if (strcasecmp($2, "processor") == 0)
100991be33dcSAlexander Motin tmp = 3;
101091be33dcSAlexander Motin else if (strcasecmp($2, "cd") == 0 ||
101191be33dcSAlexander Motin strcasecmp($2, "cdrom") == 0 ||
101291be33dcSAlexander Motin strcasecmp($2, "dvd") == 0 ||
101391be33dcSAlexander Motin strcasecmp($2, "dvdrom") == 0)
101491be33dcSAlexander Motin tmp = 5;
101591be33dcSAlexander Motin else if (expand_number($2, &tmp) != 0 ||
101691be33dcSAlexander Motin tmp > 15) {
101791be33dcSAlexander Motin yyerror("invalid numeric value");
101891be33dcSAlexander Motin free($2);
101991be33dcSAlexander Motin return (1);
102091be33dcSAlexander Motin }
1021*6de7a0d6SJohn Baldwin free($2);
102291be33dcSAlexander Motin
102391be33dcSAlexander Motin lun_set_device_type(lun, tmp);
102491be33dcSAlexander Motin }
102591be33dcSAlexander Motin ;
102691be33dcSAlexander Motin
10273933f7b1SAlexander Motin lun_ctl_lun: CTL_LUN STR
10283933f7b1SAlexander Motin {
10293933f7b1SAlexander Motin uint64_t tmp;
10303933f7b1SAlexander Motin
10313933f7b1SAlexander Motin if (expand_number($2, &tmp) != 0) {
10323933f7b1SAlexander Motin yyerror("invalid numeric value");
10333933f7b1SAlexander Motin free($2);
10343933f7b1SAlexander Motin return (1);
10353933f7b1SAlexander Motin }
1036*6de7a0d6SJohn Baldwin free($2);
10373933f7b1SAlexander Motin
10383933f7b1SAlexander Motin if (lun->l_ctl_lun >= 0) {
10393933f7b1SAlexander Motin log_warnx("ctl_lun for lun \"%s\" "
10403933f7b1SAlexander Motin "specified more than once",
10413933f7b1SAlexander Motin lun->l_name);
10423933f7b1SAlexander Motin return (1);
10433933f7b1SAlexander Motin }
10443933f7b1SAlexander Motin lun_set_ctl_lun(lun, tmp);
10453933f7b1SAlexander Motin }
10463933f7b1SAlexander Motin ;
10473933f7b1SAlexander Motin
1048e1c0d0d8SEdward Tomasz Napierala lun_option: OPTION STR STR
1049009ea47eSEdward Tomasz Napierala {
1050703b03a8SJohn Baldwin bool ok;
1051009ea47eSEdward Tomasz Napierala
1052703b03a8SJohn Baldwin ok = option_new(lun->l_options, $2, $3);
1053009ea47eSEdward Tomasz Napierala free($2);
1054009ea47eSEdward Tomasz Napierala free($3);
1055703b03a8SJohn Baldwin if (!ok)
1056009ea47eSEdward Tomasz Napierala return (1);
1057009ea47eSEdward Tomasz Napierala }
1058009ea47eSEdward Tomasz Napierala ;
1059009ea47eSEdward Tomasz Napierala
1060e1c0d0d8SEdward Tomasz Napierala lun_path: PATH STR
1061009ea47eSEdward Tomasz Napierala {
1062009ea47eSEdward Tomasz Napierala if (lun->l_path != NULL) {
1063920c6cbaSAlexander Motin log_warnx("path for lun \"%s\" "
1064009ea47eSEdward Tomasz Napierala "specified more than once",
1065920c6cbaSAlexander Motin lun->l_name);
1066009ea47eSEdward Tomasz Napierala free($2);
1067009ea47eSEdward Tomasz Napierala return (1);
1068009ea47eSEdward Tomasz Napierala }
1069009ea47eSEdward Tomasz Napierala lun_set_path(lun, $2);
1070009ea47eSEdward Tomasz Napierala free($2);
1071009ea47eSEdward Tomasz Napierala }
1072009ea47eSEdward Tomasz Napierala ;
1073009ea47eSEdward Tomasz Napierala
1074e1c0d0d8SEdward Tomasz Napierala lun_serial: SERIAL STR
1075009ea47eSEdward Tomasz Napierala {
1076009ea47eSEdward Tomasz Napierala if (lun->l_serial != NULL) {
1077920c6cbaSAlexander Motin log_warnx("serial for lun \"%s\" "
1078009ea47eSEdward Tomasz Napierala "specified more than once",
1079920c6cbaSAlexander Motin lun->l_name);
1080009ea47eSEdward Tomasz Napierala free($2);
1081009ea47eSEdward Tomasz Napierala return (1);
1082009ea47eSEdward Tomasz Napierala }
1083009ea47eSEdward Tomasz Napierala lun_set_serial(lun, $2);
1084009ea47eSEdward Tomasz Napierala free($2);
1085009ea47eSEdward Tomasz Napierala }
1086009ea47eSEdward Tomasz Napierala ;
1087009ea47eSEdward Tomasz Napierala
10884524db57SEdward Tomasz Napierala lun_size: SIZE STR
1089009ea47eSEdward Tomasz Napierala {
10904524db57SEdward Tomasz Napierala uint64_t tmp;
10914524db57SEdward Tomasz Napierala
10924524db57SEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) {
1093d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
10944524db57SEdward Tomasz Napierala free($2);
10954524db57SEdward Tomasz Napierala return (1);
10964524db57SEdward Tomasz Napierala }
1097*6de7a0d6SJohn Baldwin free($2);
10984524db57SEdward Tomasz Napierala
1099009ea47eSEdward Tomasz Napierala if (lun->l_size != 0) {
1100920c6cbaSAlexander Motin log_warnx("size for lun \"%s\" "
1101009ea47eSEdward Tomasz Napierala "specified more than once",
1102920c6cbaSAlexander Motin lun->l_name);
1103009ea47eSEdward Tomasz Napierala return (1);
1104009ea47eSEdward Tomasz Napierala }
11054524db57SEdward Tomasz Napierala lun_set_size(lun, tmp);
1106009ea47eSEdward Tomasz Napierala }
1107009ea47eSEdward Tomasz Napierala ;
1108009ea47eSEdward Tomasz Napierala %%
1109009ea47eSEdward Tomasz Napierala
1110009ea47eSEdward Tomasz Napierala void
1111009ea47eSEdward Tomasz Napierala yyerror(const char *str)
1112009ea47eSEdward Tomasz Napierala {
1113009ea47eSEdward Tomasz Napierala
1114009ea47eSEdward Tomasz Napierala log_warnx("error in configuration file at line %d near '%s': %s",
1115009ea47eSEdward Tomasz Napierala lineno, yytext, str);
1116009ea47eSEdward Tomasz Napierala }
1117009ea47eSEdward Tomasz Napierala
1118450a84c2SJohn Baldwin bool
parse_conf(struct conf * newconf,const char * path)11195c734b04SJakub Wojciech Klama parse_conf(struct conf *newconf, const char *path)
1120009ea47eSEdward Tomasz Napierala {
1121009ea47eSEdward Tomasz Napierala int error;
1122009ea47eSEdward Tomasz Napierala
11235c734b04SJakub Wojciech Klama conf = newconf;
1124009ea47eSEdward Tomasz Napierala yyin = fopen(path, "r");
1125009ea47eSEdward Tomasz Napierala if (yyin == NULL) {
1126009ea47eSEdward Tomasz Napierala log_warn("unable to open configuration file %s", path);
1127450a84c2SJohn Baldwin return (false);
1128009ea47eSEdward Tomasz Napierala }
11295c734b04SJakub Wojciech Klama
11306dc3a9f4SEdward Tomasz Napierala lineno = 1;
1131009ea47eSEdward Tomasz Napierala yyrestart(yyin);
1132009ea47eSEdward Tomasz Napierala error = yyparse();
1133009ea47eSEdward Tomasz Napierala auth_group = NULL;
1134009ea47eSEdward Tomasz Napierala portal_group = NULL;
1135009ea47eSEdward Tomasz Napierala target = NULL;
1136009ea47eSEdward Tomasz Napierala lun = NULL;
1137009ea47eSEdward Tomasz Napierala fclose(yyin);
1138009ea47eSEdward Tomasz Napierala
1139450a84c2SJohn Baldwin return (error == 0);
1140009ea47eSEdward Tomasz Napierala }
1141