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