Fix 25-accounts-sync

master v2.113
Dmitry Razumov 4 months ago
parent 354d32a80b
commit bf388bf124
Signed by: asmeron
GPG Key ID: 50BC1DB583B79706

@ -95,10 +95,6 @@ exec_01_useradd_sync(){
local GET_USERADD=$(get_conf_useradd_from_system "${PARAM}")
if [[ ${GET_USERADD} != "" ]]; then
eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] ${GET_USERADD}
# Если в системной конфигурации заданы USERADD_SYNC= USERADD_SYNC[${PARAM}]= то установить в глобальной конфигурации
[[ -n ${USERADD_SYNC} ]] && ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] USERADD_SYNC="${USERADD_SYNC}"
[[ -n ${PARAM} && "$(declare -p USERADD_SYNC 2>/dev/null)" == "declare -A"* && -n ${USERADD_SYNC[${PARAM}]} ]] \
&& ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] USERADD_SYNC["${PARAM}"]="${USERADD_SYNC[${PARAM}]}"
local GET_USERSHADOW=$(get_conf_usershadow_from_system ${PARAM})
# TODO: Если задан диапазон пользователей, пример 0-999, то GET_USERSHADOW будет содержать всех пользователей в этом диапазоте
# А нужно выбрать только пользователей которые содержатся в GET_USERADD
@ -106,44 +102,71 @@ exec_01_useradd_sync(){
eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] ${GET_USERSHADOW}
fi
fi
}
set_ubconfig_global_allsync(){
# Если в системной конфигурации заданы USERADD_SYNC= то установить в глобальной конфигурации
[[ -n ${USERADD_SYNC} ]] && ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] USERADD_SYNC="${USERADD_SYNC}"
}
set_ubconfig_global_selectsync(){
local PARAM="$1"
# Если в системной конфигурации заданы USERADD_SYNC[${PARAM}]= то установить в глобальной конфигурации
[[ -n ${PARAM} && "$(declare -p USERADD_SYNC 2>/dev/null)" == "declare -A"* && -n ${USERADD_SYNC[${PARAM}]} ]] \
&& ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] USERADD_SYNC["${PARAM}"]="${USERADD_SYNC[${PARAM}]}"
}
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift
[[ -n ${COMMAND} ]] || COMMAND="set="
local PARAM="$@"
if [[ -n ${PARAM} ]]; then
local USERADD_SYNC=
declare -A USERADD_SYNC=()
# Параметр вида USERADD_SYNC=
if [[ ${PARAM} =~ ^[^'[']+'=' ]]; then
USERADD_SYNC=
else
# Параметр вида USERADD_SYNC[*]=
local USERADD_SYNC=
declare -A USERADD_SYNC=()
fi
[[ ${PARAM} =~ ^[[:alnum:]_]+("="|"[".*"]=") ]] && eval "${PARAM%%=*}=\${PARAM#*=}"
fi
while IFS= read -u3 SELECT_USERADD_SYNC; do
if [[ ${SELECT_USERADD_SYNC} == 'shutdown@all' ]]; then
remove_ubconfig "@all"
set_ubconfig "@all"
elif [[ ${SELECT_USERADD_SYNC} == 'shutdown@users' ]]; then
remove_ubconfig "@users"
set_ubconfig "@users"
elif [[ ${SELECT_USERADD_SYNC} == 'shutdown@systems' ]]; then
remove_ubconfig "@systems"
set_ubconfig "@systems"
elif [[ ${SELECT_USERADD_SYNC} == 'shutdown' ]]; then
remove_ubconfig "@users"
remove_ubconfig "@systems"
set_ubconfig
elif [[ ${SELECT_USERADD_SYNC} =~ ^'shutdown@'(([[:digit:]]+)'-'*([[:digit:]]*))$ ]]; then
local LIST_USERS="${BASH_REMATCH[1]}"
remove_ubconfig "${LIST_USERS}"
set_ubconfig "${LIST_USERS}"
fi
done 3<<< "${USERADD_SYNC//@(,|;)/$'\n'}"
if [[ "$(declare -p USERADD_SYNC 2>/dev/null)" == "declare -A"* ]]; then
[[ -n ${!USERADD_SYNC[@]} ]] && while IFS= read -u3 SELECT_USER; do
# В массиве 0 запись игнорируем, т.к. это параметр не ассоциативного массива
if [[ ${SELECT_USER} != 0 && ${USERADD_SYNC[${SELECT_USER}]} =~ 'shutdown' ]]; then
remove_ubconfig "${SELECT_USER}"
set_ubconfig "${SELECT_USER}"
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]]; then
# Обработка всех пользователей параметр USERADD_SYNC=...
while IFS= read -u3 SELECT_USERADD_SYNC; do
if [[ ${SELECT_USERADD_SYNC} == 'shutdown@all' ]]; then
remove_ubconfig "@all"
set_ubconfig "@all"
elif [[ ${SELECT_USERADD_SYNC} == 'shutdown@users' ]]; then
remove_ubconfig "@users"
set_ubconfig "@users"
elif [[ ${SELECT_USERADD_SYNC} == 'shutdown@systems' ]]; then
remove_ubconfig "@systems"
set_ubconfig "@systems"
elif [[ ${SELECT_USERADD_SYNC} == 'shutdown' ]]; then
remove_ubconfig "@users"
remove_ubconfig "@systems"
set_ubconfig
elif [[ ${SELECT_USERADD_SYNC} =~ ^'shutdown@'(([[:digit:]]+)'-'*([[:digit:]]*))$ ]]; then
local LIST_USERS="${BASH_REMATCH[1]}"
remove_ubconfig "${LIST_USERS}"
set_ubconfig "${LIST_USERS}"
fi
done 3< <(printf "%s\n" "${!USERADD_SYNC[@]}")
set_ubconfig_global_allsync
done 3<<< "${USERADD_SYNC//@(,|;)/$'\n'}"
# Обработка выбранних пользователей параметр USERADD_SYNC[...]=...
if [[ "$(declare -p USERADD_SYNC 2>/dev/null)" == "declare -A"* ]]; then
[[ -n ${!USERADD_SYNC[@]} ]] && while IFS= read -u3 SELECT_USER; do
# В массиве 0 запись игнорируем, т.к. это параметр не ассоциативного массива
if [[ ${SELECT_USER} != 0 && ${USERADD_SYNC[${SELECT_USER}]} =~ 'shutdown' ]]; then
# Если все пользователи уже были синхронизироаны, то пропустить
if [[ ! ${USERADD_SYNC} =~ (^|,)('shutdown@all'|'shutdown')(,|$) ]]; then
remove_ubconfig "${SELECT_USER}"
set_ubconfig "${SELECT_USER}"
fi
set_ubconfig_global_selectsync "${SELECT_USER}"
fi
done 3< <(printf "%s\n" "${!USERADD_SYNC[@]}")
fi
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
true
fi
}
@ -168,44 +191,67 @@ exec_02_groupadd_sync(){
if [[ ${GET_GROUPADD} != "" ]]; then
eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] ${GET_GROUPADD}
eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] ${GET_GROUPADD}
# Если в системной конфигурации заданы GROUPADD_SYNC= GROUPADD_SYNC[${PARAM}]= то установить в глобальной конфигурации
[[ -n ${GROUPADD_SYNC} ]] && ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] GROUPADD_SYNC="${GROUPADD_SYNC}"
[[ -n ${PARAM} && "$(declare -p GROUPADD_SYNC 2>/dev/null)" == "declare -A"* && -n ${GROUPADD_SYNC[${PARAM}]} ]] \
&& ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] GROUPADD_SYNC["${PARAM}"]="${GROUPADD_SYNC[${PARAM}]}"
fi
}
set_ubconfig_global_allsync(){
# Если в системной конфигурации заданы GROUPADD_SYNC= то установить в глобальной конфигурации
[[ -n ${GROUPADD_SYNC} ]] && ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] GROUPADD_SYNC="${GROUPADD_SYNC}"
}
set_ubconfig_global_selectsync(){
local PARAM="$1"
# Если в системной конфигурации заданы GROUPADD_SYNC[${PARAM}]= то установить в глобальной конфигурации
[[ -n ${PARAM} && "$(declare -p GROUPADD_SYNC 2>/dev/null)" == "declare -A"* && -n ${GROUPADD_SYNC[${PARAM}]} ]] \
&& ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] GROUPADD_SYNC["${PARAM}"]="${GROUPADD_SYNC[${PARAM}]}"
}
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift
[[ -n ${COMMAND} ]] || COMMAND="set="
local PARAM="$@"
if [[ -n ${PARAM} ]]; then
local GROUPADD_SYNC=
declare -A GROUPADD_SYNC=()
# Параметр вида GROUPADD_SYNC=
if [[ ${PARAM} =~ ^[^'[']+'=' ]]; then
GROUPADD_SYNC=
else
# Параметр вида GROUPADD_SYNC[*]=
local GROUPADD_SYNC=
declare -A GROUPADD_SYNC=()
fi
[[ ${PARAM} =~ ^[[:alnum:]_]+("="|"[".*"]=") ]] && eval "${PARAM%%=*}=\${PARAM#*=}"
fi
# Если синхронизируем группы по шаблону, то удалим все группы из глобальной конфигурации
if [[ ${USERADD_SYNC} =~ 'shutdown' ]]; then
${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] GROUPADD[*]
fi
while IFS= read -u3 SELECT_GROUPADD_SYNC; do
if [[ ${SELECT_GROUPADD_SYNC} == 'shutdown@all' ]]; then
set_ubconfig "@all"
elif [[ ${SELECT_GROUPADD_SYNC} == 'shutdown@groups' ]]; then
set_ubconfig "@groups"
elif [[ ${SELECT_GROUPADD_SYNC} == 'shutdown@systems' ]]; then
set_ubconfig "@systems"
elif [[ ${SELECT_GROUPADD_SYNC} =~ ^'shutdown@'(([[:digit:]]+)'-'*([[:digit:]]*))$ ]]; then
set_ubconfig "${BASH_REMATCH[1]}"
elif [[ ${SELECT_GROUPADD_SYNC} == 'shutdown' ]]; then
set_ubconfig
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]]; then
# Обработка всех групп, параметр GROUPADD_SYNC=...
# Если синхронизируем группы по шаблону, то удалим все группы из глобальной конфигурации
if [[ ${USERADD_SYNC} =~ 'shutdown' ]]; then
${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] GROUPADD[*]
fi
done 3<<< "${GROUPADD_SYNC//@(,|;)/$'\n'}"
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}"
while IFS= read -u3 SELECT_GROUPADD_SYNC; do
if [[ ${SELECT_GROUPADD_SYNC} == 'shutdown@all' ]]; then
set_ubconfig "@all"
elif [[ ${SELECT_GROUPADD_SYNC} == 'shutdown@groups' ]]; then
set_ubconfig "@groups"
elif [[ ${SELECT_GROUPADD_SYNC} == 'shutdown@systems' ]]; then
set_ubconfig "@systems"
elif [[ ${SELECT_GROUPADD_SYNC} =~ ^'shutdown@'(([[:digit:]]+)'-'*([[:digit:]]*))$ ]]; then
set_ubconfig "${BASH_REMATCH[1]}"
elif [[ ${SELECT_GROUPADD_SYNC} == 'shutdown' ]]; then
set_ubconfig
fi
done 3< <(printf "%s\n" "${!GROUPADD_SYNC[@]}")
set_ubconfig_global_allsync
done 3<<< "${GROUPADD_SYNC//@(,|;)/$'\n'}"
# Обработка выбранних групп параметр GROUPADD_SYNC[...]=...
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
# Если все пользователи уже были синхронизироаны, то пропустить
if [[ ! ${GROUPADD_SYNC} =~ (^|,)('shutdown@all'|'shutdown')(,|$) ]]; then
set_ubconfig "${SELECT_GROUP}"
fi
set_ubconfig_global_selectsync "${SELECT_GROUP}"
fi
done 3< <(printf "%s\n" "${!GROUPADD_SYNC[@]}")
fi
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
true
fi
}

Loading…
Cancel
Save