# bash completion for shadow utils

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
        COMPREPLY=( $( 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

# Local variables:
# mode: shell-script
# sh-basic-offset: 4
# sh-indent-comment: t
# indent-tabs-mode: nil
# End:
# ex: ts=4 sw=4 et filetype=sh
