From 4f48ce208b89b0790f113642aab200a65abf7816 Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Fri, 27 Sep 2019 00:27:45 +0200 Subject: 44781: add completion of SELinux contexts --- Completion/Linux/Command/_chcon | 24 ++++++++++++++++++++++++ Completion/Linux/Type/_selinux_contexts | 14 ++++++++++++++ Completion/Linux/Type/_selinux_roles | 7 +++++++ Completion/Linux/Type/_selinux_types | 7 +++++++ Completion/Linux/Type/_selinux_users | 8 ++++++++ 5 files changed, 60 insertions(+) create mode 100644 Completion/Linux/Command/_chcon create mode 100644 Completion/Linux/Type/_selinux_contexts create mode 100644 Completion/Linux/Type/_selinux_roles create mode 100644 Completion/Linux/Type/_selinux_types create mode 100644 Completion/Linux/Type/_selinux_users (limited to 'Completion/Linux') diff --git a/Completion/Linux/Command/_chcon b/Completion/Linux/Command/_chcon new file mode 100644 index 000000000..2d523f287 --- /dev/null +++ b/Completion/Linux/Command/_chcon @@ -0,0 +1,24 @@ +#compdef chcon + +local ign + +(( $#words > 2 )) && ign='!' +_arguments -C -s -S \ + '(-h --no-dereference)--dereference[dereference symlinks]' \ + '(-h --no-dereference --dereference)'{-h,--no-dereference}'[operate on symlinks themselves]' \ + '(1 -u --user -r --role -l --range -t --type)--reference=[copy security context of specified file]:file:_files' \ + '(1 --reference -u --user)'{-u+,--user=}'[set user in the target security context]: :_selinux_users' \ + '(1 --reference -r --role)'{-r+,--role=}'[set role in the target security context]: :_selinux_roles' \ + '(1 --reference -t --type)'{-t+,--type=}'[set type in the target security context]: :_selinux_types' \ + '(1 --reference -l --range)'{-l+,--range=}'[set range in the target security context]:selinux range' \ + '(--recursive -R)'{--recursive,-R}'[recurse subdirectories]' \ + '(-v --verbose)'{-v,--verbose}'[output a diagnostic for every file processed]' \ + '(-H -L -P)-H[follow symlinks on the command line]' \ + '(-H -L -P)-L[follow all symlinks]' \ + "(-H -L -P)-P[don't follow symlinks (default)]" \ + '!(--preserve-root)--no-preserve-root' \ + "--preserve-root[fail to operate recursively on '/']" \ + '(--reference -u --user -r --role -l --range -t --type)1:security context:_selinux_contexts' \ + "${ign}--help[display help information]" \ + "${ign}--version[display version information]" \ + '*:file:_files' diff --git a/Completion/Linux/Type/_selinux_contexts b/Completion/Linux/Type/_selinux_contexts new file mode 100644 index 000000000..4c2cf4288 --- /dev/null +++ b/Completion/Linux/Type/_selinux_contexts @@ -0,0 +1,14 @@ +#autoload + +local -a parts suf + +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 +else + _message -e selinux-ranges 'selinux range' +fi diff --git a/Completion/Linux/Type/_selinux_roles b/Completion/Linux/Type/_selinux_roles new file mode 100644 index 000000000..92b4c36cb --- /dev/null +++ b/Completion/Linux/Type/_selinux_roles @@ -0,0 +1,7 @@ +#autoload + +local -a seroles expl + +seroles=( ${(f)"$(_call_program selinux-roles seinfo --flat -r)"} ) +_description selinux-roles expl "selinux role" +compadd "$@" "$expl[@]" -a seroles diff --git a/Completion/Linux/Type/_selinux_types b/Completion/Linux/Type/_selinux_types new file mode 100644 index 000000000..ef31f45d2 --- /dev/null +++ b/Completion/Linux/Type/_selinux_types @@ -0,0 +1,7 @@ +#autoload + +local -a setypes expl + +setypes=( ${(f)"$(_call_program selinux-types seinfo --flat -t)"} ) +_description selinux-types expl "selinux type" +compadd "$@" "$expl[@]" -a setypes diff --git a/Completion/Linux/Type/_selinux_users b/Completion/Linux/Type/_selinux_users new file mode 100644 index 000000000..f046c92cf --- /dev/null +++ b/Completion/Linux/Type/_selinux_users @@ -0,0 +1,8 @@ +#autoload + +local -a seusers expl + +seusers=( ${(f)"$(_call_program selinux-users seinfo --flat -u)"} ) +(( $#seusers )) || seusers=( guest_u root staff_u sysadm_u system_u unconfined_u user_u ) +_description selinux-users expl "selinux user" +compadd "$@" "$expl[@]" -a seusers -- cgit 1.4.1