| /* Authors: Jason Tang <[email protected]> |
| * James Athey <[email protected]> |
| * |
| * 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 <ctype.h> |
| #include <string.h> |
| |
| 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; |
| optimize-policy return OPTIMIZE_POLICY; |
| "[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]; |
| <arg>\"\" BEGIN INITIAL; semanage_lval.s = NULL; return ARG; |
| <arg>\".+\" BEGIN INITIAL; semanage_lval.s = my_qstrdup(semanage_text); return ARG; |
| <arg>.*[^\"\n] BEGIN INITIAL; semanage_lval.s = my_strdup(semanage_text); return ARG; |
| <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); |
| } |
| |