1e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh# This file is part of systemd. 2e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh# 31886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh# Copyright 2011-2013 Dan Walsh 4e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh# 5e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh# systemd is free software; you can redistribute it and/or modify it 6e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh# under the terms of the GNU General Public License as published by 7e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh# the Free Software Foundation; either version 2 of the License, or 8e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh# (at your option) any later version. 9e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh# 10e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh# systemd is distributed in the hope that it will be useful, but 11e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh# WITHOUT ANY WARRANTY; without even the implied warranty of 12e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh# General Public License for more details. 14e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh# 15e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh# You should have received a copy of the GNU General Public License 16e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh# along with systemd; If not, see <http://www.gnu.org/licenses/>. 17e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh 18e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__contains_word () { 19e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh local word=$1; shift 20e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh for w in $*; do [[ $w = $word ]] && return 0; done 21e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 1 22e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh} 23e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh 24e5a81c715fa31147d5ef79cf1c116ce68744b02aDan WalshALL_OPTS='-l --list -S -o -n --noheading -h --help' 25e5a81c715fa31147d5ef79cf1c116ce68744b02aDan WalshMANAGED_OPTS='-a --add -m --modify -d --delete -D --deleteall -C --locallist ' 26e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh 27e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_all_stores () { 28e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh dir -1 -F /etc/selinux/ | grep '/' | cut -d'/' -f 1 29e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh} 30e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_all_ftypes () { 31e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh echo '-- -d -c -b -s -l -p' 32e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh} 33e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_all_users () { 34e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh seinfo -u 2> /dev/null | tail -n +3 35e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh} 36e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_all_types () { 37e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh seinfo -t 2> /dev/null | tail -n +3 38e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh} 39e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_all_port_types () { 40e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh seinfo -aport_type -x 2>/dev/null | tail -n +2 41e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh} 42e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_all_domains () { 43e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh seinfo -adomain -x 2>/dev/null | tail -n +2 44e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh} 45e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_all_node_types () { 46e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh seinfo -anode_type -x 2>/dev/null | tail -n +2 47e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh} 48e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_all_file_types () { 49e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh seinfo -afile_type -x 2>/dev/null | tail -n +2 50e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh} 51e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_all_roles () { 521886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh seinfo -r 2> /dev/null | tail -n +3 53e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh} 54e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_all_stores () { 55e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh dir -1 -F /etc/selinux/ | grep '/' | cut -d'/' -f 1 56e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh} 571886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh__get_import_opts () { echo '$ALL_OPTS --f --input_file' ; } 581886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh__get_export_opts () { echo '$ALL_OPTS --f --output_file' ; } 591886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh__get_boolean_opts () { echo '$ALL_OPTS --on -off -1 -0' ; } 601886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh__get_user_opts () { echo '$ALL_OPTS $MANAGED_OPTS -L --level -r --range -R --role '; } 611886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh__get_login_opts () { echo '$ALL_OPTS $MANAGED_OPTS -s --seuser -r --range'; } 62e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_port_opts () { echo '$ALL_OPTS $MANAGED_OPTS -t -type -r --range -p --proto'; } 63e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_interface_opts () { echo '$ALL_OPTS $MANAGED_OPTS -t --type '; } 64e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_node_opts () { echo '$ALL_OPTS $MANAGED_OPTS -t --type -M --mask -p --proto'; } 65e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_fcontext_opts () { echo '$ALL_OPTS $MANAGED_OPTS -t --type -e --equal -f --ftype '; } 66b68435fbead85c707aa736f052b1b9999dcf8b70Dan Walsh__get_module_opts () { echo '$ALL_OPTS $MANAGED_OPTS --enable --disable '; } 67e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_dontaudit_opts () { echo '-S on off' ; } 68e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh__get_permissive_opts () { echo '$ALL_OPTS -a --add -d --delete' ; } 69e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh 70e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh_semanage () { 71e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh local command=${COMP_WORDS[1]} 72e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} 73e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh local verb comps 74e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh local -A VERBS=( 751886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh [BOOLEAN]='boolean' 761886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh [DONTAUDIT]='dontaudit' 771886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh [EXPORT]='export' 781886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh [FCONTEXT]='fcontext' 791886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh [IMPORT]='import' 80e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh [INTERFACE]='interface' 811886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh [LOGIN]='login' 82e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh [MODULE]='module' 83e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh [NODE]='node' 84e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh [PERMISSIVE]='permissive' 851886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh [PORT]='port' 861886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh [USER]='user' 87e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh ) 88e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh if [ "$prev" = "-a" -a "$command" = "permissive" ]; then 89e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_all_domains ) " -- "$cur") ) 90e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 91e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh fi 92e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh if [ "$verb" = "" -a "$prev" = "semanage" ]; then 93e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh comps="${VERBS[*]}" 94e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh elif [ "$verb" = "" -a "$prev" = "-S" -o "$prev" = "--store" ]; then 95e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_all_stores ) " -- "$cur") ) 96e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 97e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh elif [ "$verb" = "" -a "$prev" = "-p" -o "$prev" = "--proto" ]; then 98e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "tcp udp" -- "$cur") ) 99e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 1001886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh elif [ "$verb" = "" -a "$prev" = "-R" -o "$prev" = "-r" -o "$prev" = "--role" ]; then 1011886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh if [ "$command" != "user" -o "$prev" != "-r" ]; then 102e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_all_roles ) " -- "$cur") ) 103e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 1041886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh else 1051886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh return 0 1061886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh fi 107e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh elif [ "$verb" = "" -a "$prev" = "-s" -o "$prev" = "--seuser" ]; then 108e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_all_users ) " -- "$cur") ) 109e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 110e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh elif [ "$verb" = "" -a "$prev" = "-f" -o "$prev" = "--ftype" ]; then 111e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_all_ftypes ) " -- "$cur") ) 112e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 113e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh elif [ "$verb" = "" -a "$prev" = "-t" -o "$prev" = "--types" ]; then 114e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh if [ "$command" = "port" ]; then 115e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_all_port_types ) " -- "$cur") ) 116e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 117e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh fi 118e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh if [ "$command" = "fcontext" ]; then 119e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_all_file_types ) " -- "$cur") ) 120e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 121e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh fi 122e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_all_types ) " -- "$cur") ) 123e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 124e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh elif __contains_word "$command" ${VERBS[LOGIN]} ; then 125e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_login_opts ) " -- "$cur") ) 126e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 127e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh elif __contains_word "$command" ${VERBS[USER]} ; then 128e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_user_opts ) " -- "$cur") ) 129e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 130e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh elif __contains_word "$command" ${VERBS[PORT]} ; then 131e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_port_opts ) " -- "$cur") ) 132e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 133e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh elif __contains_word "$command" ${VERBS[INTERFACE]} ; then 134e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_interface_opts ) " -- "$cur") ) 1351886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh return 0 136e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh elif __contains_word "$command" ${VERBS[MODULE]} ; then 137e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_module_opts ) " -- "$cur") ) 138e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 139e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh elif __contains_word "$command" ${VERBS[NODE]} ; then 140e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_node_opts ) " -- "$cur") ) 141e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 142e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh elif __contains_word "$command" ${VERBS[FCONTEXT]} ; then 143e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_fcontext_opts ) " -- "$cur") ) 144e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 145e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh elif __contains_word "$command" ${VERBS[BOOLEAN]} ; then 146e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_boolean_opts ) " -- "$cur") ) 147e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 148e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh elif __contains_word "$command" ${VERBS[PERMISSIVE]} ; then 149e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_permissive_opts ) " -- "$cur") ) 150e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 151e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh elif __contains_word "$command" ${VERBS[DONTAUDIT]} ; then 152e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$( __get_dontaudit_opts ) " -- "$cur") ) 153e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 1541886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh elif __contains_word "$command" ${VERBS[IMPORT]} ; then 1551886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh COMPREPLY=( $(compgen -W "$( __get_import_opts ) " -- "$cur") ) 1561886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh return 0 1571886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh elif __contains_word "$command" ${VERBS[EXPORT]} ; then 1581886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh COMPREPLY=( $(compgen -W "$( __get_export_opts ) " -- "$cur") ) 1591886d463c6e748fccf02f7384521354fa98bf9d9Dan Walsh return 0 160e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh fi 161e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh COMPREPLY=( $(compgen -W "$comps" -- "$cur") ) 162e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh return 0 163e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walsh} 164e5a81c715fa31147d5ef79cf1c116ce68744b02aDan Walshcomplete -F _semanage semanage 165