diff --git a/to_review/shadow b/to_review/shadow new file mode 100644 index 00000000..717cbd3a --- /dev/null +++ b/to_review/shadow @@ -0,0 +1,499 @@ +# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- +# ex: ts=8 sw=8 noet filetype=sh +# +# bash completion for shadow utils + +# Note: the following should be removed from main bash_completion once this +# is reviewed: chage, groupdel, groupmod, newgrp, userdel, usermod + +have useradd && +_useradd() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + # TODO: if -o/--non-unique is given, could complete on existing uids + # with -u/--uid + + case "$prev" in + -c|--comment|-h|--help|-e|--expiredate|-f|--inactive|-k|--key|-p|--password|-u|--uid|-Z|--selinux-user) + return 0 + ;; + -b|--base-dir|-d|--home|-k|--skel) + _filedir -d + return 0 + ;; + -g|--gid) + _gids + [ -n "$bash205" ] && \ + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -g ) ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- $cur ) ) + return 0 + ;; + -G|--groups) + [ -n "$bash205" ] && \ + COMPREPLY=( $( compgen -g -- $cur ) ) + return 0 + ;; + -s|--shell) + _shells + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMREPLY=( $( compgen -W '-b --base-dir -c --comment -d --home \ + -D --defaults -e --expiredate -f --inactive -g --gid \ + -G --groups -h --help -k --skel -K --key -l -M \ + -m --create-home -N --no-user-group -o --non-unique \ + -p --password -r --system -s --shell -u --uid \ + -U --user-group -Z --selinux-user' -- $cur ) ) + return 0 + fi +} && +complete -F _useradd useradd + +have usermod && +_usermod() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + # TODO: if -o/--non-unique is given, could complete on existing uids + # with -u/--uid + + case "$prev" in + -c|--comment|-d|--home|-e|--expiredate|-f|--inactive|-h|--help|-l|--login|-p|--password|-u|--uid|-Z|--selinux-user) + return 0 + ;; + -g|--gid) + _gids + [ -n "$bash205" ] && \ + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -g ) ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- $cur ) ) + return 0 + ;; + -G|--groups) + [ -n "$bash205" ] && \ + COMPREPLY=( $( compgen -g -- $cur ) ) + return 0 + ;; + -s|--shell) + _shells + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + # TODO: -U/--unlock, -p/--password, -L/--lock mutually exclusive + COMPREPLY=( $( compgen -W '-a --append -c --comment -d --home \ + -e --expiredate -f --inactive -g --gid -G --groups \ + -h --help -l --login -L --lock -o --non-unique \ + -p --password -s --shell -u --uid -U --unlock \ + -Z --selinux-user' -- $cur ) ) + return 0 + fi + + COMPREPLY=( $( compgen -u -- $cur ) ) +} && +complete -F _usermod usermod + +have userdel && +_userdel() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-f --force -h --help -r --remove' \ + -- $cur ) ) + return 0 + fi + + COMPREPLY=( $( compgen -u -- $cur ) ) +} && +complete -F _userdel userdel + +have chage && +_chage() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -d|--lastday|-E|--expiredate|-h|--help|-I|--inactive|-m|--mindays|-M|--maxdays|-W|--warndays) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d --lastday -E --expiredate \ + -h --help -I --inactive -l --list -m --mindays \ + -M --maxdays -W --warndays' -- $cur ) ) + return 0 + fi + + COMPREPLY=( $( compgen -u -- $cur ) ) +} && +complete -F _chage chage + +have passwd && +_passwd() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -n|-x|-w|-i|-\?|--help|--usage) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-k -l --stdin -u -d -n -x -w -i -S \ + -? --help --usage' -- $cur ) ) + return 0 + fi + + COMPREPLY=( $( compgen -u -- $cur ) ) +} && +complete -F _passwd passwd + +have chpasswd && +_chpasswd() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -c|--crypt) + COMPREPLY=( $( compgen -W 'DES MD5 NONE SHA256 SHA512' \ + -- $cur ) ) + return 0 + ;; + -s|--sha-rounds) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c --crypt-method -e --encrypted \ + -h --help -m --md5 -s --sha-rounds' -- $cur ) ) + return 0 + fi +} && +complete -F _chpasswd chpasswd + +have newusers && +_newusers() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -c|--crypt) + COMPREPLY=( $( compgen -W 'DES MD5 NONE SHA256 SHA512' \ + -- $cur ) ) + return 0 + ;; + -s|--sha-rounds) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c --crypt-method --r --system \ + -s --sha-rounds' -- $cur ) ) + return 0 + fi + + _filedir +} && +complete -F _newusers $filenames newusers + +have pwck && +_pwck() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-q -r -s' -- $cur ) ) + return 0 + fi + + _filedir +} && +complete -F _pwck $filenames pwck + +have groupadd && +_groupadd() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + # TODO: if -o/--non-unique is given, could complete on existing gids + # with -g/--gid + + case "$prev" in + -g|--gid|-K|--key|-p|--password) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-f --force -g --gid -h --help \ + -K --key -o --non-unique -p --password -r --system' \ + -- $cur ) ) + return 0 + fi +} && +complete -F _groupadd groupadd + +have groupmod && +_groupmod() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + # TODO: if -o/--non-unique is given, could complete on existing gids + # with -g/--gid + + case "$prev" in + -g|--gid|-h|--help|-n|--new-name|-p|--password) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-g --gid -h --help -n --new-name \ + -o --non-unique -p --password' -- $cur ) ) + return 0 + fi + + [ -n "$bash205" ] && COMPREPLY=( $( compgen -g -- $cur ) ) +} && +complete -F _groupmod groupmod + +[ -n "$bash205" ] && complete -g groupdel + +have newgrp && +_newgrp() +{ + COMPREPLY=() + if [[ "`_get_cword`" == "-" ]]; then + COMPREPLY=( - ) + fi +} && +complete ${bash205:+-g} -F _newgrp newgrp + +have gpasswd && +_gpasswd() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -a|-d|-A|-M) + COMPREPLY=( $( compgen -u -- $cur ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a -d -r -R -A -M' -- $cur ) ) + return 0 + fi + + [ -n "$bash205" ] && COMPREPLY=( $( compgen -g -- $cur ) ) +} && +complete -F _gpasswd gpasswd + +have groupmems && +_groupmems() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -a|-d) + COMPREPLY=( $( compgen -u -- $cur ) ) + return 0 + ;; + -g) + [ -n "$bash205" ] && \ + COMPREPLY=( $( compgen -g -- $cur ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a -d -p -g -l' -- $cur ) ) + return 0 + fi +} && +complete -F _groupmems groupmems + +have grpck && +_grpck() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-r -s' -- $cur ) ) + return 0 + fi + + _filedir +} && +complete -F _grpck $filenames grpck + +have vipw || have vigr && +_vipw() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -h|--help) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-g --group -h --help -p --passwd \ + -q --quiet -s --shadow' -- $cur ) ) + return 0 + fi +} && +complete -F _vipw vipw vigr + +have faillog && +_faillog() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -h|--help|-l|--lock-time|-m|--maximum|-t|--time) + return 0 + ;; + -u|--user) + COMPREPLY=( $( compgen -u -- $cur ) ) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a --all -h --help -l --lock-time \ + -m --maximum -r --reset -t --time -u --user' -- $cur ) ) + return 0 + fi +} && +complete -F _faillog faillog + +have lastlog && +_lastlog() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -b|--before|-h|--help|-t|--time) + return 0 + ;; + -u|--user) + COMPREPLY=( $( compgen -u -- $cur ) ) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-b --before -h --help -t --time \ + -u --user' -- $cur ) ) + return 0 + fi +} && +complete -F _lastlog lastlog