#!/usr/bin/env bash ENABLED=yes [[ ${ENABLED} == "yes" ]] || exit 0 DEBUGMODE=no unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/users; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null # Синхронизировать пользователе системы в глобальную конфигурацию USERADD и USERSHADOW ## Синхронизация пользователей системы /etc/passwd с глобальной конфигурацией ## USERADD_SYNC[user_name]='boot,shutdown' ## user_name # Имя пользователя, необязательное поле. Если не указано, то применяется для всех пользователей ## boot # При загрузке системы принудительно применить глобальную конфигурацию на пользователя ## shutdown # При завершении работы системы синхронизировать указанных пользователей в системе с глобальной конфигурацией exec_useradd_sync(){ set_ubconfig(){ local PARAM=$1 local GET_USERADD=$(get_conf_useradd_from_system ${PARAM}) local GET_USERSHADOW=$(get_conf_usershadow_from_system ${PARAM}) ${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] ${GET_USERADD} ${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] ${GET_USERSHADOW} [[ -n ${GET_USERADD} ]] && eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] ${GET_USERADD} [[ -n ${GET_USERSHADOW} ]] && eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] ${GET_USERSHADOW} } if [[ ${USERADD_SYNC} =~ 'shutdown@all' ]]; then set_ubconfig "@all" elif [[ ${USERADD_SYNC} =~ 'shutdown@users' ]]; then set_ubconfig "@users" elif [[ ${USERADD_SYNC} =~ 'shutdown@systems' ]]; then set_ubconfig "@systems" elif [[ ${USERADD_SYNC} =~ ^'shutdown@'(([[:digit:]]+)'-'*([[:digit:]]*))$ ]]; then set_ubconfig "${BASH_REMATCH[1]}" elif [[ ${USERADD_SYNC} =~ 'shutdown' ]]; then set_ubconfig fi if [[ "$(declare -p USERADD_SYNC 2>/dev/null)" == "declare -A"* ]]; then while IFS= read -u3 SELECT_USER; do #[[ ${USERADD_SYNC[${SELECT_USER}]} =~ 'shutdown' ]] && sync_user ${SELECT_USER} # В массиве 0 запись игнорируем, т.к. это параметр не ассоциативного массива if [[ ${SELECT_USER} != 0 && ${USERADD_SYNC[${SELECT_USER}]} =~ 'shutdown' ]]; then set_ubconfig "${SELECT_USER}" fi done 3< <(printf "%s\n" "${!USERADD_SYNC[@]}") fi } # Синхронизировать группы системы в глобальную конфигурацию GROUPADD ## Синхронизация группы системы /etc/groups и их параметры /etc/gshadow с глобальной конфигурацией ## GROUPADD_SYNC[group_name]='boot,shutdown' ## group_name # Имя группы, необязательное поле. Если не указано, то применяется для всех групп ## boot # При загрузке системы принудительно применить глобальную конфигурацию на группу ## shutdown # При завершении работы системы синхронизировать указанные группы в системе с глобальной конфигурацией exec_groupadd_sync(){ set_ubconfig(){ local PARAM=$1 local GET_GROUPADD=$(get_conf_groupadd_from_system ${PARAM}) ${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] GROUPADD[*] [[ -n ${GET_GROUPADD} ]] && eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] ${GET_GROUPADD} } if [[ ${GROUPADD_SYNC} =~ 'shutdown@all' ]]; then set_ubconfig "@all" elif [[ ${GROUPADD_SYNC} =~ 'shutdown@users' ]]; then set_ubconfig "@users" elif [[ ${GROUPADD_SYNC} =~ 'shutdown@systems' ]]; then set_ubconfig "@systems" elif [[ ${GROUPADD_SYNC} =~ ^'shutdown@'(([[:digit:]]+)'-'*([[:digit:]]*))$ ]]; then set_ubconfig "${BASH_REMATCH[1]}" elif [[ ${GROUPADD_SYNC} =~ 'shutdown' ]]; then set_ubconfig fi if [[ "$(declare -p GROUPADD_SYNC 2>/dev/null)" == "declare -A"* ]]; then while IFS= read -u3 SELECT_GROUP; do # В массиве 0 запись игнорируем, т.к. это параметр не ассоциативного массива if [[ ${SELECT_GROUP} != 0 && ${GROUPADD_SYNC[${SELECT_GROUP}]} =~ 'shutdown' ]]; then set_ubconfig "${SELECT_GROUP}" fi done 3< <(printf "%s\n" "${!GROUPADD_SYNC[@]}") fi } ################ ##### MAIN ##### ################ # Если файл подключен как ресурс с функциями, то выйти return 0 2>/dev/null && return 0 if [[ -z $@ ]]; then while read -r FUNCTION; do $"${FUNCTION##* }" done < <(declare -F | grep "declare -f exec_") else FUNCTION= while [[ $# -gt 0 ]]; do [[ -z ${1} ]] || { declare -f ${1} &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; } shift done eval ${FUNCTION#*; } fi