You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ublinux-init/ublinux/rc.halt.pre/25-accounts-sync

106 lines
5.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/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}
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} ]] && 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
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
FUNCTION=
while [[ $# -gt 0 ]]; do
[[ -z ${1} ]] || { declare -f ${1} &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; }
shift
done
eval ${FUNCTION#*; }
fi