xref: /aosp_15_r20/external/selinux/libsemanage/src/conf-scan.l (revision 2d543d20722ada2425b5bdab9d0d1d29470e7bba)
1*2d543d20SAndroid Build Coastguard Worker /* Authors: Jason Tang     <[email protected]>
2*2d543d20SAndroid Build Coastguard Worker  *          James Athey    <[email protected]>
3*2d543d20SAndroid Build Coastguard Worker  *
4*2d543d20SAndroid Build Coastguard Worker  * Copyright (C) 2004-2006 Tresys Technology, LLC
5*2d543d20SAndroid Build Coastguard Worker  *
6*2d543d20SAndroid Build Coastguard Worker  *  This library is free software; you can redistribute it and/or
7*2d543d20SAndroid Build Coastguard Worker  *  modify it under the terms of the GNU Lesser General Public
8*2d543d20SAndroid Build Coastguard Worker  *  License as published by the Free Software Foundation; either
9*2d543d20SAndroid Build Coastguard Worker  *  version 2.1 of the License, or (at your option) any later version.
10*2d543d20SAndroid Build Coastguard Worker  *
11*2d543d20SAndroid Build Coastguard Worker  *  This library is distributed in the hope that it will be useful,
12*2d543d20SAndroid Build Coastguard Worker  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13*2d543d20SAndroid Build Coastguard Worker  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14*2d543d20SAndroid Build Coastguard Worker  *  Lesser General Public License for more details.
15*2d543d20SAndroid Build Coastguard Worker  *
16*2d543d20SAndroid Build Coastguard Worker  *  You should have received a copy of the GNU Lesser General Public
17*2d543d20SAndroid Build Coastguard Worker  *  License along with this library; if not, write to the Free Software
18*2d543d20SAndroid Build Coastguard Worker  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19*2d543d20SAndroid Build Coastguard Worker  */
20*2d543d20SAndroid Build Coastguard Worker 
21*2d543d20SAndroid Build Coastguard Worker %{
22*2d543d20SAndroid Build Coastguard Worker #include "conf-parse.h"
23*2d543d20SAndroid Build Coastguard Worker 
24*2d543d20SAndroid Build Coastguard Worker #include <ctype.h>
25*2d543d20SAndroid Build Coastguard Worker #include <string.h>
26*2d543d20SAndroid Build Coastguard Worker 
27*2d543d20SAndroid Build Coastguard Worker static char *my_strdup (char * s);
28*2d543d20SAndroid Build Coastguard Worker static char *my_qstrdup (char * s);
29*2d543d20SAndroid Build Coastguard Worker 
30*2d543d20SAndroid Build Coastguard Worker %}
31*2d543d20SAndroid Build Coastguard Worker 
32*2d543d20SAndroid Build Coastguard Worker %option stack prefix="semanage_"
33*2d543d20SAndroid Build Coastguard Worker %option noinput nounput noyy_push_state noyy_pop_state noyy_top_state noyywrap
34*2d543d20SAndroid Build Coastguard Worker 
35*2d543d20SAndroid Build Coastguard Worker %x arg
36*2d543d20SAndroid Build Coastguard Worker 
37*2d543d20SAndroid Build Coastguard Worker %%
38*2d543d20SAndroid Build Coastguard Worker 
39*2d543d20SAndroid Build Coastguard Worker #.*               /* ignore comments */
40*2d543d20SAndroid Build Coastguard Worker module-store      return MODULE_STORE;
41*2d543d20SAndroid Build Coastguard Worker store-root        return STORE_ROOT;
42*2d543d20SAndroid Build Coastguard Worker compiler-directory	return COMPILER_DIR;
43*2d543d20SAndroid Build Coastguard Worker ignore-module-cache return IGNORE_MODULE_CACHE;
44*2d543d20SAndroid Build Coastguard Worker policy-version    return VERSION;
45*2d543d20SAndroid Build Coastguard Worker target-platform   return TARGET_PLATFORM;
46*2d543d20SAndroid Build Coastguard Worker expand-check      return EXPAND_CHECK;
47*2d543d20SAndroid Build Coastguard Worker file-mode         return FILE_MODE;
48*2d543d20SAndroid Build Coastguard Worker save-previous     return SAVE_PREVIOUS;
49*2d543d20SAndroid Build Coastguard Worker save-linked       return SAVE_LINKED;
50*2d543d20SAndroid Build Coastguard Worker disable-genhomedircon return DISABLE_GENHOMEDIRCON;
51*2d543d20SAndroid Build Coastguard Worker usepasswd return USEPASSWD;
52*2d543d20SAndroid Build Coastguard Worker ignoredirs        return IGNOREDIRS;
53*2d543d20SAndroid Build Coastguard Worker handle-unknown    return HANDLE_UNKNOWN;
54*2d543d20SAndroid Build Coastguard Worker bzip-blocksize	return BZIP_BLOCKSIZE;
55*2d543d20SAndroid Build Coastguard Worker bzip-small	return BZIP_SMALL;
56*2d543d20SAndroid Build Coastguard Worker remove-hll	return REMOVE_HLL;
57*2d543d20SAndroid Build Coastguard Worker optimize-policy return OPTIMIZE_POLICY;
58*2d543d20SAndroid Build Coastguard Worker "[load_policy]"   return LOAD_POLICY_START;
59*2d543d20SAndroid Build Coastguard Worker "[setfiles]"      return SETFILES_START;
60*2d543d20SAndroid Build Coastguard Worker "[sefcontext_compile]"      return SEFCONTEXT_COMPILE_START;
61*2d543d20SAndroid Build Coastguard Worker "[verify module]" return VERIFY_MOD_START;
62*2d543d20SAndroid Build Coastguard Worker "[verify linked]" return VERIFY_LINKED_START;
63*2d543d20SAndroid Build Coastguard Worker "[verify kernel]" return VERIFY_KERNEL_START;
64*2d543d20SAndroid Build Coastguard Worker "[end]"           return BLOCK_END;
65*2d543d20SAndroid Build Coastguard Worker path              return PROG_PATH;
66*2d543d20SAndroid Build Coastguard Worker args              return PROG_ARGS;
67*2d543d20SAndroid Build Coastguard Worker [ \t]*=[ \t]*     BEGIN arg; return '=';
68*2d543d20SAndroid Build Coastguard Worker [ \t\n]+          /* ignore */
69*2d543d20SAndroid Build Coastguard Worker .                 return semanage_text[0];
70*2d543d20SAndroid Build Coastguard Worker <arg>\"\"         BEGIN INITIAL; semanage_lval.s = NULL; return ARG;
71*2d543d20SAndroid Build Coastguard Worker <arg>\".+\"       BEGIN INITIAL; semanage_lval.s = my_qstrdup(semanage_text); return ARG;
72*2d543d20SAndroid Build Coastguard Worker <arg>.*[^\"\n]    BEGIN INITIAL; semanage_lval.s = my_strdup(semanage_text); return ARG;
73*2d543d20SAndroid Build Coastguard Worker <arg>.|\n         BEGIN INITIAL; semanage_lval.s = NULL; return ARG;
74*2d543d20SAndroid Build Coastguard Worker 
75*2d543d20SAndroid Build Coastguard Worker %%
76*2d543d20SAndroid Build Coastguard Worker 
77*2d543d20SAndroid Build Coastguard Worker /* Like strdup(), but also trim leading and trailing whitespace.
78*2d543d20SAndroid Build Coastguard Worker  * Returns NULL on error. */
79*2d543d20SAndroid Build Coastguard Worker static char *my_strdup(char *s) {
80*2d543d20SAndroid Build Coastguard Worker 	char *t;
81*2d543d20SAndroid Build Coastguard Worker 	while (isspace(*s)) {
82*2d543d20SAndroid Build Coastguard Worker 		s++;
83*2d543d20SAndroid Build Coastguard Worker 	}
84*2d543d20SAndroid Build Coastguard Worker 	t = s + strlen(s) - 1;
85*2d543d20SAndroid Build Coastguard Worker 	while (t >= s && isspace(*t)) {
86*2d543d20SAndroid Build Coastguard Worker 		*t = '\0';
87*2d543d20SAndroid Build Coastguard Worker 		t--;
88*2d543d20SAndroid Build Coastguard Worker 	}
89*2d543d20SAndroid Build Coastguard Worker 	return strdup(s);
90*2d543d20SAndroid Build Coastguard Worker }
91*2d543d20SAndroid Build Coastguard Worker 
92*2d543d20SAndroid Build Coastguard Worker /* strdup() a string sans initial and trailing characters.  Does /not/
93*2d543d20SAndroid Build Coastguard Worker  * trim any whitespace.	 Returns NULL on error. */
94*2d543d20SAndroid Build Coastguard Worker static char *my_qstrdup(char *s) {
95*2d543d20SAndroid Build Coastguard Worker 	s++;
96*2d543d20SAndroid Build Coastguard Worker 	s[strlen(s) - 1] = '\0';
97*2d543d20SAndroid Build Coastguard Worker 	return strdup(s);
98*2d543d20SAndroid Build Coastguard Worker }
99*2d543d20SAndroid Build Coastguard Worker 
100