|
|
#!/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] USERADD[*]
|
|
|
${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] USERSHADOW[*]
|
|
|
[[ -n ${GET_USERADD} ]] && ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] ${GET_USERADD}
|
|
|
[[ -n ${GET_USERSHADOW} ]] && ${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}
|
|
|
if [[ ${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} ]] && ${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
|
|
|
if [[ ${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
|
|
|
while [[ $# -gt 0 ]]; do
|
|
|
declare -f ${1} &>/dev/null && FUNCTION+="; ${1}" && shift || { FUNCTION+=" \"${1}\"" && shift; }
|
|
|
done
|
|
|
eval ${FUNCTION#*; }
|
|
|
fi
|
|
|
|