/* Authors: Jason Tang * James Athey * * Copyright (C) 2004-2006 Tresys Technology, LLC * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ %{ #include "conf-parse.h" #include #include static char *my_strdup (char * s); static char *my_qstrdup (char * s); %} %option stack prefix="semanage_" %option noinput nounput noyy_push_state noyy_pop_state noyy_top_state noyywrap %x arg %% #.* /* ignore comments */ module-store return MODULE_STORE; store-root return STORE_ROOT; compiler-directory return COMPILER_DIR; ignore-module-cache return IGNORE_MODULE_CACHE; policy-version return VERSION; target-platform return TARGET_PLATFORM; expand-check return EXPAND_CHECK; file-mode return FILE_MODE; save-previous return SAVE_PREVIOUS; save-linked return SAVE_LINKED; disable-genhomedircon return DISABLE_GENHOMEDIRCON; usepasswd return USEPASSWD; ignoredirs return IGNOREDIRS; handle-unknown return HANDLE_UNKNOWN; bzip-blocksize return BZIP_BLOCKSIZE; bzip-small return BZIP_SMALL; remove-hll return REMOVE_HLL; "[load_policy]" return LOAD_POLICY_START; "[setfiles]" return SETFILES_START; "[sefcontext_compile]" return SEFCONTEXT_COMPILE_START; "[verify module]" return VERIFY_MOD_START; "[verify linked]" return VERIFY_LINKED_START; "[verify kernel]" return VERIFY_KERNEL_START; "[end]" return BLOCK_END; path return PROG_PATH; args return PROG_ARGS; [ \t]*=[ \t]* BEGIN arg; return '='; [ \t\n]+ /* ignore */ . return semanage_text[0]; \"\" BEGIN INITIAL; semanage_lval.s = NULL; return ARG; \".+\" BEGIN INITIAL; semanage_lval.s = my_qstrdup(semanage_text); return ARG; .*[^\"\n] BEGIN INITIAL; semanage_lval.s = my_strdup(semanage_text); return ARG; .|\n BEGIN INITIAL; semanage_lval.s = NULL; return ARG; %% /* Like strdup(), but also trim leading and trailing whitespace. * Returns NULL on error. */ static char *my_strdup(char *s) { char *t; while (isspace(*s)) { s++; } t = s + strlen(s) - 1; while (t >= s && isspace(*t)) { *t = '\0'; t--; } return strdup(s); } /* strdup() a string sans initial and trailing characters. Does /not/ * trim any whitespace. Returns NULL on error. */ static char *my_qstrdup(char *s) { s++; s[strlen(s) - 1] = '\0'; return strdup(s); }