diff options
Diffstat (limited to 'Completion/Linux/Type')
-rw-r--r-- | Completion/Linux/Type/_selinux_contexts | 13 | ||||
-rw-r--r-- | Completion/Linux/Type/_selinux_types | 16 |
2 files changed, 24 insertions, 5 deletions
diff --git a/Completion/Linux/Type/_selinux_contexts b/Completion/Linux/Type/_selinux_contexts index 4c2cf4288..bdad8e72b 100644 --- a/Completion/Linux/Type/_selinux_contexts +++ b/Completion/Linux/Type/_selinux_contexts @@ -1,14 +1,21 @@ #autoload -local -a parts suf +local -a parts users roles types + +zparseopts -E -D a:=types P:=users + +if ! compset -S ':*'; then + users+=( -qS : ) + roles+=( -qS : ) + [[ $(</sys/fs/selinux/mls) = 0 ]] 2>/dev/null || types+=( -qS : ) +fi parts=( users roles types ) while compset -P 1 '*:' && (( $+parts[1] )) ; do shift parts done if (( $+parts[1] )); then - compset -S ':*' || suf=( -S : ) - _selinux_$parts[1] $suf + _selinux_$parts[1] ${(P)parts[1]} else _message -e selinux-ranges 'selinux range' fi diff --git a/Completion/Linux/Type/_selinux_types b/Completion/Linux/Type/_selinux_types index ef31f45d2..69047c690 100644 --- a/Completion/Linux/Type/_selinux_types +++ b/Completion/Linux/Type/_selinux_types @@ -1,7 +1,19 @@ #autoload -local -a setypes expl +# Pass -a attribute to filter types, e.g.: +# -a domain - for process types +# -a file_type - for file types +# -a port_type - for network ports + +local -a setypes expl extra + +zparseopts -E -D -a extra a: + +if (( $#extra )); then + setypes=( ${${${(f)"$(_call_program selinux-types seinfo $extra --flat -x)"}#[[:blank:]]}:1} ) +else + setypes=( ${(f)"$(_call_program selinux-types seinfo --flat -t)"} ) +fi -setypes=( ${(f)"$(_call_program selinux-types seinfo --flat -t)"} ) _description selinux-types expl "selinux type" compadd "$@" "$expl[@]" -a setypes |