]> Frank Brehm's Git Trees - pixelpark/admin-tools.git/commitdiff
Adding lib/functions.rc
authorFrank Brehm <frank.brehm@pixelpark.com>
Wed, 14 Aug 2019 09:53:46 +0000 (11:53 +0200)
committerFrank Brehm <frank.brehm@pixelpark.com>
Wed, 14 Aug 2019 09:53:46 +0000 (11:53 +0200)
lib/functions.rc [new file with mode: 0644]

diff --git a/lib/functions.rc b/lib/functions.rc
new file mode 100644 (file)
index 0000000..ed02392
--- /dev/null
@@ -0,0 +1,329 @@
+#!/bin/bash
+
+HAS_TTY='y'
+
+# Defining colors
+RED=""
+YELLOW=""
+GREEN=""
+BLUE=""
+CYAN=""
+NORMAL=""
+
+VERSION="0.2.0"
+
+STD_SHORT_OPTIONS="sdvhV"
+STD_LONG_OPTIONS="simulate,debug,verbose,nocolor,help,version"
+STD_USAGE_MSG=$( cat <<-EOF
+               -s|--simulate   Simulation mode - dont apply any changes.
+               -d|--debug      Debug output (bash -x).
+               -v|--verbose    Set verbosity on.
+               --nocolor       Dont use colors on display.
+               -h|--help       Show this output and exit.
+               -V|--version    prints out version number of the script and exit
+       EOF
+    )
+
+# Standard global variables
+VERBOSE="n"
+DEBUG="n"
+DO_ASK="n"
+SIMULATE="n"
+
+declare -a REMAINING_ARGS=()
+declare -a REMAINING_OPTS=()
+
+NFS_HOMEDIR_PARENT='/mnt/nfs/home'
+
+DESCRIPTION="${DESCRIPTION:-Failing script description}"
+
+# LDAP Defaults
+LDAP_USR="cn=admin"
+LDAP_PWD_FILE="${HOME}/.private/ldap-admin-wonl.txt"
+LDAP_BASE="o=isp"
+LDAP_HOST="ldap.pixelpark.com"
+LDAP_PORT=389
+
+LDAP_STD_OPTS_SHORT="D:y:H:P:b:"
+LDAP_STD_OPTS_LONG="bind-dn:,password-file:,ldap-host:,ldap-port:,base-dn:"
+
+LDAP_USAGE_MSG=$( cat <<-EOF
+               -D|--bind-dn DN
+                               Use this Distinguished Name DN to bind to the LDAP directory.
+                               (Default: '${LDAP_USR}').
+               -y|--password-file FILE
+                               Use complete contents of PASSWD_FILE as the password for simple authentication
+                               (Default: '${LDAP_PWD_FILE}').
+               -H|--ldap-host HOSTNAME
+                               The hostname or IP address of the LDAP-Server (Default: '${LDAP_HOST}').
+               -P|--ldap-port PORT
+                               The port number of the LDAP-Server (Default: ${LDAP_PORT}).
+               -b|--base-dn SEARCH_BASE
+                               The starting point for the LDAP search (Default: '${LDAP_BASE}')
+       EOF
+    )
+
+#-------------------------------------------------------------------
+detect_color() {
+
+    local safe_term="${TERM//[^[:alnum:]]/?}"
+    local match_lhs=""
+    local use_color="false"
+    [[ -f ~/.dir_colors   ]] && match_lhs="${match_lhs}$(<~/.dir_colors)"
+    [[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(</etc/DIR_COLORS)"
+    [[ -z ${match_lhs}    ]] \
+        && type -P dircolors >/dev/null \
+        && match_lhs=$(dircolors --print-database)
+    [[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color="true"
+
+    # console colors:
+    if [ "${use_color}" = "true" ] ; then
+        RED="\033[38;5;196m"
+        YELLOW="\033[38;5;226m"
+        GREEN="\033[38;5;46m"
+        BLUE="\033[38;5;27m"
+        CYAN="\033[38;5;14m"
+        NORMAL="\033[39m"
+    else
+        RED=""
+        YELLOW=""
+        GREEN=""
+        BLUE=""
+        CYAN=""
+        NORMAL=""
+    fi
+
+    local my_tty=$(tty)
+    if [[ "${my_tty}" =~ 'not a tty' ]] ; then
+        my_tty='-'
+    fi
+
+    if [[ "${my_tty}" = '-' || "${safe_term}" = "dump" ]] ; then
+        HAS_TTY='n'
+    fi
+
+}
+
+#------------------------------------------------------------------------------
+description() {
+    echo -e "${DESCRIPTION}"
+}
+
+#------------------------------------------------------------------------------
+eval_common_options() {
+
+    REMAINING_ARGS=()
+    REMAINING_OPTS=()
+
+    if [[ "$#" -gt 0 ]] ; then
+        while true ; do
+            case "$1" in
+                -s|--simulate)
+                    SIMULATE="y"
+                    shift
+                    ;;
+                -d|--debug)
+                    DEBUG="y"
+                    shift
+                    ;;
+                -v|--verbose)
+                    VERBOSE="y"
+                    shift
+                    ;;
+                --nocolor)
+                    RED=""
+                    YELLOW=""
+                    GREEN=""
+                    BLUE=""
+                    CYAN=""
+                    NORMAL=""
+                    shift
+                    ;;
+                -h|--help)
+                    description
+                    echo
+                    usage
+                    exit 0
+                    ;;
+                -V|--version)
+                    echo "${BASE_NAME} version: ${VERSION}"
+                    exit 0
+                    ;;
+                --) shift
+                    break
+                    ;;
+                *)  REMAINING_OPTS+=($1)
+                    shift
+                    ;;
+            esac
+        done
+    fi
+
+    if [[ "${DEBUG}" = "y" ]] ; then
+        set -x
+    fi
+
+    if [[ "$#" -gt "0" ]] ; then
+        REMAINING_ARGS=("--")
+        while [[ "$#" -gt "0" ]]  ; do
+            REMAINING_ARGS+=($1)
+            shift
+        done
+    fi
+
+    if [[ "${SIMULATE}" == "y" ]] ; then
+        echo
+        echo -e "${CYAN}Simulation mode!${NORMAL}"
+        echo "Nothing is really done."
+        echo
+    fi
+
+}
+
+#------------------------------------------------------------------------------
+eval_ldap_options() {
+
+    REMAINING_ARGS=()
+    REMAINING_OPTS=()
+
+    if [[ "$#" -gt 0 ]] ; then
+        while true ; do
+            case "$1" in
+                -D|--bind-dn)
+                    LDAP_USR="$2"
+                    shift
+                    shift
+                    ;;
+                -y|--password-file)
+                    LDAP_PWD_FILE="$2"
+                    shift
+                    shift
+                    ;;
+                -H|--ldap-host)
+                    LDAP_HOST="$2"
+                    shift
+                    shift
+                    ;;
+                -P|--ldap-port)
+                    LDAP_PORT="$2"
+                    shift
+                    shift
+                    ;;
+                -b|--base-dn)
+                    LDAP_BASE="$2"
+                    shift
+                    shift
+                    ;;
+                --) shift
+                    break
+                    ;;
+                *)  REMAINING_OPTS+=($1)
+                    shift
+                    ;;
+            esac
+        done
+    fi
+
+    if [[ "$#" -gt "0" ]] ; then
+        REMAINING_ARGS=("--")
+        while [[ "$#" -gt "0" ]]  ; do
+            REMAINING_ARGS+=($1)
+            shift
+        done
+    fi
+
+    if [[ ! -f "${LDAP_PWD_FILE}" ]] ; then
+        error "Password file '${RED}${LDAP_PWD_FILE}'${NORMAL} not found."
+        exit 3
+    fi
+
+    if [[ ! -r "${LDAP_PWD_FILE}" ]] ; then
+        error "Password file '${RED}${LDAP_PWD_FILE}${NORMAL}' not readable."
+        exit 3
+    fi
+
+}
+
+#------------------------------------------------------------------------------
+my_date() {
+    date +'%F %T.%N %:::z'
+}
+
+#------------------------------------------------------------------------------
+debug() {
+    if [[ "${VERBOSE}" != "y" ]] ; then
+        return 0
+    fi
+    echo -e " * [$(my_date)] [${BASE_NAME}:DEBUG]: $@" >&2
+}
+
+#------------------------------------------------------------------------------
+info() {
+    echo -e " ${GREEN}*${NORMAL} [$(my_date)] [${BASE_NAME}:${GREEN}INFO${NORMAL}] : $@" >&2
+}
+
+#------------------------------------------------------------------------------
+warn() {
+    echo -e " ${YELLOW}*${NORMAL} [$(my_date)] [${BASE_NAME}:${YELLOW}WARN${NORMAL}] : $@" >&2
+}
+
+#------------------------------------------------------------------------------
+error() {
+    echo -e " ${RED}*${NORMAL} [$(my_date)] [${BASE_NAME}:${RED}ERROR${NORMAL}]: $@" >&2
+}
+
+#------------------------------------------------------------------------------
+RM() {
+
+    if [[ "${SIMULATE}" == "y" ]] ; then
+        debug "Simulated removing of: $*"
+        return
+    fi
+    if [[ "${VERBOSE}" != "y" ]] ; then
+        rm "$@"
+    else
+        rm --verbose "$@"
+    fi
+
+}
+
+#------------------------------------------------------------------------------
+set_locale() {
+
+    local new_locale="$1"
+    local loc=
+    local found="n"
+
+    local oifs="${IFS}"
+    IFS="
+"
+    for loc in $( locale -a ); do
+        if [[ "${loc}" == "${new_locale}" ]] ; then
+            found="y"
+            break
+        fi
+    done
+    IFS="${oifs}"
+
+    if [[ "${found}" != "y" ]] ; then
+        error "Locale '${RED}${new_locale}${NORMAL}' not found."
+    else
+        LANG="${new_locale}"
+        LC_ALL=
+        LC_CTYPE="${new_locale}"
+        LC_NUMERIC="${new_locale}"
+        LC_TIME="${new_locale}"
+        LC_COLLATE="${new_locale}"
+        LC_MONETARY="${new_locale}"
+        LC_MESSAGES="${new_locale}"
+        LC_PAPER="${new_locale}"
+        LC_NAME="${new_locale}"
+        LC_ADDRESS="${new_locale}"
+        LC_TELEPHONE="${new_locale}"
+        LC_MEASUREMENT="${new_locale}"
+        LC_IDENTIFICATION="${new_locale}"
+    fi
+
+}
+
+# vim: filetype=sh ts=4 et list