#!/usr/bin/bash

# source bash base library
# shellcheck disable=SC1091
source /usr/libexec/bash-base.bash || {
   echo "$0: fatal error: failed to source /usr/libexec/bash-base.bash" >&2
   exit 1
}

bb_require_libs bash-ini ldapusermgmt/common

# shellcheck disable=SC2120,SC2034
function local_usage() {
    usage "${1-1}" "${2-}" "dn <dn> <attr> [..]" <<EOF
  Displays on or more LDAP attrributes for user, group or autofs entries.
EOF
}

# shellcheck disable=SC2178
function main() {
    # shellcheck disable=SC2119
    (( $# > 2 )) || local_usage 1 "Missing mandatory arguments"

    config_init

    local _mode="$1"
    local _key="$2"
    shift 2

    case "$_mode" in
        dn)
            local _filter="${_key%%,*}"
            local _base="${_key#*,}"
            [[ "$_filter" != "$_base" ]] || _base=""
            ;;
        *)
            local_usage 2 "unknown argument: $_mode"
    esac

    local _attr
    local -a _matrix=()
    for _attr in "$@"
    do
        # shellcheck disable=SC2140
        local -a "attr_$_attr"
        local -n _ref="attr_$_attr"

        _ref=()
        _matrix+=("$_attr" "attr_$_attr")
    done

    ldap_extract_attributes "${_matrix[@]}" < \
        <(ldap_cmd read ldapsearch -LLL -b "$_base" "$_filter" "$@")

    for _attr in "$@"
    do
        local -n _ref="attr_$_attr"
        printf "%s: %s\n" "$_attr" "${_ref[*]}"
    done
}

parse_common_args main "" "" "$@"
bb_quit
