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