@ -89,22 +89,24 @@ shopt -s extglob
# $3 # Если указано, то принудительно копировать /etc/skel в домашний каталог пользователя
# $3 # Если указано, то принудительно копировать /etc/skel в домашний каталог пользователя
create_home(){
create_home(){
local SELECT_USERNAME="${1}"
local SELECT_USERNAME="${1}"
local SELECT_GROUP="${2}"
local SELECT_FORCESKEL="${2}"
local SELECT_FORCESKEL="${3}"
local ARG_RECURSIVE=
local ARG_RECURSIVE=
[[ ${SELECT_GROUP} == "" || ${SELECT_GROUP} == "-" ]] && SELECT_GROUP=${SELECT_USERNAME}
local SELECT_GROUP="$(${CMD_CHROOT} /usr/bin/id -g ${SELECT_USERNAME})"
[[ ${SELECT_USERNAME} != "" ]] || return 1
local SELECT_HOME="$(${CMD_CHROOT} getent passwd ${SELECT_USERNAME} | cut -d: -f6)"
if [[ -d "${ROOTFS}${DEFAULT_HOME_USER}/${SELECT_USERNAME}" ]]; then
[[ -n ${SELECT_USERNAME} && -n ${SELECT_GROUP} && -n ${SELECT_HOME} ]] || return 1
${CMD_CHROOT} /usr/bin/chmod -f u+rw,g-rwx,o-rwx "${DEFAULT_HOME_USER}/${SELECT_USERNAME}"
if [[ -d "${ROOTFS}${SELECT_HOME}" ]]; then
[[ -z ${SELECT_FORCESKEL} ]] || cp -Taf ${ROOTFS}/etc/skel "${ROOTFS}${DEFAULT_HOME_USER}/${SELECT_USERNAME}"
${CMD_CHROOT} /usr/bin/chown -f ${SELECT_USERNAME}:${SELECT_GROUP} "${SELECT_HOME}"
${CMD_CHROOT} /usr/bin/chmod -f u+rw,g-rwx,o-rwx "${SELECT_HOME}"
if [[ -n ${SELECT_FORCESKEL} ]]; then
cp -Taf ${ROOTFS}/etc/skel "${ROOTFS}${SELECT_HOME}"
${CMD_CHROOT} cd /etc/skel && find . -exec chown -f ${SELECT_USERNAME}:${SELECT_GROUP} ${SELECT_HOME}/{} \;
fi
else
else
install -dm700 "${ROOTFS}${DEFAULT_HOME_USER}/${SELECT_USERNAME}"
${CMD_CHROOT} install -dm700 -o ${SELECT_USERNAME} -g ${SELECT_GROUP} "${SELECT_HOME}"
cp -Taf ${ROOTFS}/etc/skel "${ROOTFS}${DEFAULT_HOME_USER}/${SELECT_USERNAME}"
cp -Taf ${ROOTFS}/etc/skel "${ROOTFS}${SELECT_HOME}"
${CMD_CHROOT} chown -fR ${SELECT_USERNAME}:${SELECT_GROUP} ${SELECT_HOME}
fi
fi
#rsync -rlpt --ignore-existing etc/skel/ "${ROOTFS}${DEFAULT_HOME_USER}/${SELECT_USERNAME}"
#rsync -rlpt --ignore-existing etc/skel/ "${ROOTFS}${DEFAULT_HOME_USER}/${SELECT_USERNAME}"
[[ -n ${ROOTFS} ]] && ARG_RECURSIVE="-R" || ARG_RECURSIVE=
${CMD_CHROOT} /usr/bin/chown -f ${ARG_RECURSIVE} "${SELECT_USERNAME}" ${DEFAULT_HOME_USER}/"${SELECT_USERNAME}"
${CMD_CHROOT} /usr/bin/chown -f ${ARG_RECURSIVE} :"${SELECT_GROUP}" "${DEFAULT_HOME_USER}/${SELECT_USERNAME}"
}
}
# Задаём пароль root пользователю
# Задаём пароль root пользователю
@ -197,7 +199,7 @@ exec_03_add_groups(){
>&2 echo "ERROR: '${SELECT_GROUP}' cannot be a group name"
>&2 echo "ERROR: '${SELECT_GROUP}' cannot be a group name"
fi
fi
fi
fi
done 3<<< "${GROUPADD_GROUPS//,/$'\n'}"
done 3< <(sort -V < << "${GROUPADD_GROUPS//,/$'\n'}")
fi
fi
}
}
@ -290,7 +292,7 @@ exec_04_groupadd(){
else
else
LIST_GROUPADD_NOGID+="groupadd_local ${SELECT_GROUP}; "
LIST_GROUPADD_NOGID+="groupadd_local ${SELECT_GROUP}; "
fi
fi
done 3< <(printf "%s\n" "${!GROUPADD[@]}")
done 3< <(printf "%s\n" "${!GROUPADD[@]}" | sort -V )
[[ -n ${LIST_GROUPADD_GID} ]] && eval "${LIST_GROUPADD_GID}"
[[ -n ${LIST_GROUPADD_GID} ]] && eval "${LIST_GROUPADD_GID}"
[[ -n ${LIST_GROUPADD_NOGID} ]] && eval "${LIST_GROUPADD_NOGID}"
[[ -n ${LIST_GROUPADD_NOGID} ]] && eval "${LIST_GROUPADD_NOGID}"
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
@ -309,7 +311,6 @@ exec_04_groupadd(){
fi
fi
}
}
# Создаем пользователей из ${NEEDEDUSERS} и добавляем в группы
# Создаем пользователей из ${NEEDEDUSERS} и добавляем в группы
# $1 Команды set или remove с режимом, варианты: set=|set+=|set++=|set-=|set--=|remove
# $1 Команды set или remove с режимом, варианты: set=|set+=|set++=|set-=|set--=|remove
# $2 Для команды set=|set+=|set++= параметр с о значением, пример:
# $2 Для команды set=|set+=|set++= параметр с о значением, пример:
@ -378,7 +379,7 @@ exec_05_neededusers(){
if [[ ! -d ${ROOTFS}${DEFAULT_HOME_USER}/"${SELECT_USERNAME}" \
if [[ ! -d ${ROOTFS}${DEFAULT_HOME_USER}/"${SELECT_USERNAME}" \
|| ${UPDATEHOME[${SELECT_USERNAME}],,} == @(yes|y|enable) \
|| ${UPDATEHOME[${SELECT_USERNAME}],,} == @(yes|y|enable) \
|| ${UPDATEHOME,,} == @(yes|y|enable) ]]; then
|| ${UPDATEHOME,,} == @(yes|y|enable) ]]; then
create_home "${SELECT_USERNAME}" - force
create_home "${SELECT_USERNAME}" force
fi
fi
done 3< <(tr ",;" "\n" <<< "${NEEDEDUSERS}")
done 3< <(tr ",;" "\n" <<< "${NEEDEDUSERS}")
fi
fi
@ -456,6 +457,8 @@ exec_06_useradd(){
local DATA_FILE_GROUP=$(cat ${FILE_GROUP})
local DATA_FILE_GROUP=$(cat ${FILE_GROUP})
useradd_local(){
useradd_local(){
local SELECT_USERNAME=$1
local SELECT_USERNAME=$1
local SELECT_GECOS= SELECT_UID= SELECT_GROUP= SELECT_EXTRAGROUPS= SELECT_OPTIONAL= SELECT_PASSWORD= NULL=
local SELECT_HOME= SELECT_SHELL= SELECT_MKHOME=
# Проверяем существует ли пользователь в системе
# Проверяем существует ли пользователь в системе
[[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}": ]] && IS_USERNAME_PASSWD=yes || IS_USERNAME_PASSWD=
[[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}": ]] && IS_USERNAME_PASSWD=yes || IS_USERNAME_PASSWD=
# Проверяем отсутствие пользователя в системе или параметр принудительного обновления
# Проверяем отсутствие пользователя в системе или параметр принудительного обновления
@ -463,20 +466,35 @@ exec_06_useradd(){
IFS=: read -r SELECT_GECOS SELECT_UID SELECT_GROUP SELECT_EXTRAGROUPS SELECT_OPTIONAL SELECT_PASSWORD NULL <<< "${USERADD[${SELECT_USERNAME}]}"
IFS=: read -r SELECT_GECOS SELECT_UID SELECT_GROUP SELECT_EXTRAGROUPS SELECT_OPTIONAL SELECT_PASSWORD NULL <<< "${USERADD[${SELECT_USERNAME}]}"
[[ ${NULL} == "" ]] || { >&2 echo "WARNING: Unnecessary processing of the ':' character. USERADD[${SELECT_USERNAME}]"; }
[[ ${NULL} == "" ]] || { >&2 echo "WARNING: Unnecessary processing of the ':' character. USERADD[${SELECT_USERNAME}]"; }
#echo -e "\n===> exec_06_useradd: ${SELECT_USERNAME}=${SELECT_GECOS}:${SELECT_UID}:${SELECT_GROUP}:${SELECT_EXTRAGROUPS}:${SELECT_OPTIONAL}:${SELECT_PASSWORD}"
#echo -e "\n===> exec_06_useradd: ${SELECT_USERNAME}=${SELECT_GECOS}:${SELECT_UID}:${SELECT_GROUP}:${SELECT_EXTRAGROUPS}:${SELECT_OPTIONAL}:${SELECT_PASSWORD}"
# -----------
[[ ${SELECT_OPTIONAL,,} == "x" ]] && SELECT_OPTIONAL=
[[ ${SELECT_OPTIONAL} =~ ("--home-dir "|"-d ")([^' ']*)(' '|$) ]] && SELECT_HOME="${BASH_REMATCH[2]}" || SELECT_HOME="${DEFAULT_HOME_USER}/${SELECT_USERNAME}"
[[ ${SELECT_OPTIONAL} =~ ("--shell "|"-s ")([^' ']*)(' '|$) ]] && SELECT_SHELL="${BASH_REMATCH[2]}" || SELECT_SHELL="+"
[[ ${SELECT_OPTIONAL} =~ ("--no-create-home"|"-M") ]] && SELECT_MKHOME= || SELECT_MKHOME="yes"
# -----------
[[ ${SELECT_PASSWORD} == @(""|"x") ]] && SELECT_PASSWORD="${DEFAULTPASSWD}"
[[ ${SELECT_PASSWORD} != @(""|'!*'|'!'|'!!'|'*') ]] && SELECT_PASSWORD="$(return_hash_password hash ${HASHPASSWD} ${SELECT_PASSWORD})"
# -----------
[[ ${SELECT_GECOS,,} == "x" ]] && SELECT_GECOS=
[[ ${SELECT_GECOS,,} == "x" ]] && SELECT_GECOS=
# -----------
# -----------
[[ ${SELECT_UID,,} == "x" || ${SELECT_UID} =~ ^[^0-9]+$ ]] && SELECT_UID=
[[ ${SELECT_UID,,} == "x" || ${SELECT_UID} =~ ^[^0-9]+$ ]] && SELECT_UID=
# Если существует домашний каталог пользователя, то UID берём от каталога
# Если существует домашний каталог пользователя, то UID берём от каталога
if [[ -z ${SELECT_UID} && -d "${ROOTFS}${SELECT_HOME}" ]]; then
if [[ -z ${SELECT_UID} && -d "${ROOTFS}${SELECT_HOME}" ]]; then
SELECT_UID=$(stat -c %u "${ROOTFS}${SELECT_HOME}")
SELECT_UID=$(stat -c %u "${ROOTFS}${SELECT_HOME}")
[[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+[^:]*:[^:]*:"${SELECT_UID}": ]] && SELECT_UID=
[[ ! ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}":[^:]*:"${SELECT_UID}": ]] \
&& [[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+[^:]*:[^:]*:"${SELECT_UID}": ]] && SELECT_UID=
fi
if [[ -z ${SELECT_UID} && ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}":[^:]*:([[:digit:]]+): ]]; then
# Если пользователь присутствует в списке, то берём е г о UID
SELECT_UID=${BASH_REMATCH[2]}
fi
fi
# -----------
# -----------
[[ ${SELECT_GROUP,,} == "x" ]] && SELECT_GROUP=
[[ ${SELECT_GROUP,,} == "x" ]] && SELECT_GROUP=
# Если существует домашний каталог пользователя, то GID берём от каталога
# Если существует домашний каталог пользователя, то GID берём от каталога
if [[ -z ${SELECT_GROUP} && -d "${ROOTFS}${SELECT_HOME}" ]]; then
if [[ -z ${SELECT_GROUP} && -d "${ROOTFS}${SELECT_HOME}" ]]; then
SELECT_GROUP=$(stat -c %g "${ROOTFS}${SELECT_HOME}")
SELECT_GROUP=$(stat -c %g "${ROOTFS}${SELECT_HOME}")
[[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+[^:]*:[^:]*:[^:]*:"${SELECT_GROUP}": ]] && SELECT_GROUP=
[[ ! ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}":[^:]*:[^:]*:"${SELECT_GROUP}": ]] \
&& [[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+[^:]*:[^:]*:[^:]*:"${SELECT_GROUP}": ]] && SELECT_GROUP=
fi
fi
# Если указана основная группа, но она не создана, то создать
# Если указана основная группа, но она не создана, то создать
if [[ -n ${SELECT_GROUP} && ${DATA_FILE_GROUP} =~ ($'\n'|^)+"${SELECT_GROUP}":[^$'\n']+:([[:digit:]]+):.*($'\n'|$) ]]; then
if [[ -n ${SELECT_GROUP} && ${DATA_FILE_GROUP} =~ ($'\n'|^)+"${SELECT_GROUP}":[^$'\n']+:([[:digit:]]+):.*($'\n'|$) ]]; then
@ -486,7 +504,7 @@ exec_06_useradd(){
# Если группа имеет цифровое имя и присутствует в списке, то берём её GUID
# Если группа имеет цифровое имя и присутствует в списке, то берём её GUID
SELECT_GROUP=${SELECT_GROUP}
SELECT_GROUP=${SELECT_GROUP}
elif [[ ${SELECT_OPTIONAL} =~ ("--no-user-group"|"-N") && ${DATA_FILE_GROUP} =~ ($'\n'|^)+"users":[^$'\n']+:([[:digit:]]+):.*($'\n'|$) ]]; then
elif [[ ${SELECT_OPTIONAL} =~ ("--no-user-group"|"-N") && ${DATA_FILE_GROUP} =~ ($'\n'|^)+"users":[^$'\n']+:([[:digit:]]+):.*($'\n'|$) ]]; then
# Если указан параметр не создавать группу по имени пользователя, то задаём GIT группы users
# Если указан параметр не создавать группу по имени пользователя, то задаём GID группы users
SELECT_GROUP=${BASH_REMATCH[2]}
SELECT_GROUP=${BASH_REMATCH[2]}
elif [[ ${SELECT_OPTIONAL} =~ ("--system"|"-r") ]]; then
elif [[ ${SELECT_OPTIONAL} =~ ("--system"|"-r") ]]; then
# Если указан параметр создавать системную группу
# Если указан параметр создавать системную группу
@ -513,28 +531,21 @@ exec_06_useradd(){
fi
fi
fi
fi
# -----------
# -----------
[[ ${SELECT_OPTIONAL,,} == "x" ]] && SELECT_OPTIONAL=
[[ ${SELECT_OPTIONAL} =~ ("--home-dir "|"-d ")([^' ']*)(' '|$) ]] && SELECT_HOME="${BASH_REMATCH[2]}" || SELECT_HOME="${DEFAULT_HOME_USER}/${SELECT_USERNAME}"
[[ ${SELECT_OPTIONAL} =~ ("--shell "|"-s ")([^' ']*)(' '|$) ]] && SELECT_SHELL="${BASH_REMATCH[2]}" || SELECT_SHELL="+"
[[ ${SELECT_OPTIONAL} =~ ("--no-create-home"|"-M") ]] && SELECT_MKHOME= || SELECT_MKHOME="yes"
# -----------
[[ ${SELECT_PASSWORD} == @(""|"x") ]] && SELECT_PASSWORD="${DEFAULTPASSWD}"
[[ ${SELECT_PASSWORD} != @(""|'!*'|'!'|'!!'|'*') ]] && SELECT_PASSWORD="$(return_hash_password hash ${HASHPASSWD} ${SELECT_PASSWORD})"
# -----------
# Создаём/Изменяем пользователя
# Создаём/Изменяем пользователя
user_add "${SELECT_USERNAME}:${SELECT_GECOS}:${SELECT_UID}:${SELECT_GROUP}:${SELECT_PASSWORD}:${SELECT_HOME}:${SELECT_SHELL}:+:+:+:+:+:+"
user_add "${SELECT_USERNAME}:${SELECT_GECOS}:${SELECT_UID}:${SELECT_GROUP}:${SELECT_PASSWORD}:${SELECT_HOME}:${SELECT_SHELL}:+:+:+:+:+:+"
# -----------
# -----------
# Проверим права на домашнем каталоге пользователя, если не совпадают с указанным польователем, то переназначим
# Проверим права на домашнем каталоге пользователя, если не совпадают с указанным пользователем, то переназначим
if [[ -d ${ROOTFS}${SELECT_HOME} ]]; then
if [[ -d ${ROOTFS}${SELECT_HOME} ]]; then
GET_UID_GID_HOME=$(${CMD_CHROOT} /usr/bin/stat -c "%U:%G" ${SELECT_HOME} )
GET_UID_GID_HOME=$(stat -c "%u:%g" "${ROOTFS}${SELECT_HOME}")
GET_UID_GID_SELECT="$(${CMD_CHROOT} /usr/bin/id -u ${SELECT_USERNAME} 2>/dev/null):$(${CMD_CHROOT} /usr/bin/id -g ${SELECT_GROUP:-${SELECT_ USERNAME} } 2>/dev/null)"
GET_UID_GID_SELECT="$(${CMD_CHROOT} /usr/bin/id -u ${SELECT_USERNAME} 2>/dev/null):$(${CMD_CHROOT} /usr/bin/id -g ${SELECT_USERNAME} 2>/dev/null)"
if [[ ${GET_UID_GID_HOME} != ${GET_UID_GID_SELECT} ]]; then
if [[ ${GET_UID_GID_HOME} != ${GET_UID_GID_SELECT} ]]; then
eval ${CMD_CHROOT} /usr/bin/chown -f -h "${SELECT_USERNAME}: " \
eval ${CMD_CHROOT} /usr/bin/chown -f -h "${GET_UID_GID_SELECT} " \
$(${CMD_CHROOT} find ${SELECT_HOME} -maxdepth 1 -printf '"%p"\n') \
$(${CMD_CHROOT} find ${SELECT_HOME} -maxdepth 1 -printf '"%p"\n') \
$(cat ${ROOTFS}/etc/xdg/user-dirs.defaults 2>/dev/null | grep -v "^\s*#" | sed -E "s|.*=(.*)|${SELECT_HOME}/\1|") \
$(cat ${ROOTFS}/etc/xdg/user-dirs.defaults 2>/dev/null | grep -v "^\s*#" | sed -E "s|.*=(.*)|${SELECT_HOME}/\1|") \
$(cat ${ROOTFS}${SELECT_HOME}/.config/user-dirs.dirs 2>/dev/null | grep -v "^\s*#"| sed -E "s|.*HOME/(.*)|${SELECT_HOME}/\"\1|")
$(cat ${ROOTFS}${SELECT_HOME}/.config/user-dirs.dirs 2>/dev/null | grep -v "^\s*#"| sed -E "s|.*HOME/(.*)|${SELECT_HOME}/\"\1|")
ARG_RECURSIVE="-hRP"
ARG_RECURSIVE="-hRP"
eval ${CMD_CHROOT} /usr/bin/chown -f ${ARG_RECURSIVE} "${SELECT_USERNAME}:" \
# В с е скрытые файлы глубиной 1
eval ${CMD_CHROOT} /usr/bin/chown -f ${ARG_RECURSIVE} "${GET_UID_GID_SELECT}" \
$(${CMD_CHROOT} find ${SELECT_HOME} -maxdepth 1 -name ".*" -printf '"%p"\n')
$(${CMD_CHROOT} find ${SELECT_HOME} -maxdepth 1 -name ".*" -printf '"%p"\n')
fi
fi
fi
fi
@ -556,9 +567,9 @@ exec_06_useradd(){
[[ -n ${ROOTFS} ]] || echo "INFO: The user '${SELECT_USERNAME}' exists in the system, the settings are not applied. To force the settings, enable the '[users] USERADD_SYNC[${SELECT_USERNAME}]=boot' option"
[[ -n ${ROOTFS} ]] || echo "INFO: The user '${SELECT_USERNAME}' exists in the system, the settings are not applied. To force the settings, enable the '[users] USERADD_SYNC[${SELECT_USERNAME}]=boot' option"
fi
fi
# Создаём домашний каталог принудительно и копируем /etc/skel
# Создаём домашний каталог принудительно и копируем /etc/skel
[[ ! -d ${ROOTFS}${DEFAULT_HOME_USER}/" ${SELECT_USERNAME}" && SELECT_MKHOME == "yes" ]] && UPDATEHOME[${SELECT_USERNAME}]=yes
[[ ! -d " ${ROOTFS}${DEFAULT_HOME_USER}/${SELECT_USERNAME}" && ${ SELECT_MKHOME} == "yes" ]] && UPDATEHOME[${SELECT_USERNAME}]=" yes"
if [[ ${UPDATEHOME,,} == @(yes|y|enable) || ${UPDATEHOME[${SELECT_USERNAME}],,} == @(yes|y|enable) ]]; then
if [[ ${UPDATEHOME,,} == @(yes|y|enable) || ${UPDATEHOME[${SELECT_USERNAME}],,} == @(yes|y|enable) ]]; then
create_home "${SELECT_USERNAME}" "${SELECT_GROUP}" force
create_home "${SELECT_USERNAME}" force
fi
fi
}
}
@ -572,7 +583,7 @@ exec_06_useradd(){
else
else
LIST_USERADD_NOUID+="useradd_local ${SELECT_USERNAME}; "
LIST_USERADD_NOUID+="useradd_local ${SELECT_USERNAME}; "
fi
fi
done 3< <(printf "%s\n" "${!USERADD[@]}")
done 3< <(printf "%s\n" "${!USERADD[@]}" | sort -V )
eval "${LIST_USERADD_UID}"
eval "${LIST_USERADD_UID}"
eval "${LIST_USERADD_NOUID}"
eval "${LIST_USERADD_NOUID}"
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]] && [[ ${#USERADD[@]} -ne 0 ]]; then
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]] && [[ ${#USERADD[@]} -ne 0 ]]; then
@ -645,7 +656,7 @@ exec_07_usershadow(){
[[ ${SELECT_INACTIVE} =~ (-1|^[0-9]*$) ]] || SELECT_INACTIVE=
[[ ${SELECT_INACTIVE} =~ (-1|^[0-9]*$) ]] || SELECT_INACTIVE=
[[ ${SELECT_EXPIRE} =~ (^[0-9]*$|^[0-9]{4,4}'-'[0-9]{1,2}'-'[0-9]{1,2}$) ]] || SELECT_EXPIRE=
[[ ${SELECT_EXPIRE} =~ (^[0-9]*$|^[0-9]{4,4}'-'[0-9]{1,2}'-'[0-9]{1,2}$) ]] || SELECT_EXPIRE=
user_add "${SELECT_USERNAME}:+:+:+:+:+:+:${SELECT_LASTCHANGED}:${SELECT_MINDAY}:${SELECT_MAXDAY}:${SELECT_WARN}:${SELECT_INACTIVE}:${SELECT_EXPIRE}"
user_add "${SELECT_USERNAME}:+:+:+:+:+:+:${SELECT_LASTCHANGED}:${SELECT_MINDAY}:${SELECT_MAXDAY}:${SELECT_WARN}:${SELECT_INACTIVE}:${SELECT_EXPIRE}"
done 3< <(printf "%s\n" "${!USERSHADOW[@]}")
done 3< <(printf "%s\n" "${!USERSHADOW[@]}" | sort -V )
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]] && [[ ${#USERSHADOW[@]} -ne 0 ]]; then
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]] && [[ ${#USERSHADOW[@]} -ne 0 ]]; then
if [[ ${PARAM%%=*} =~ ^.*'['(.*)']' ]]; then
if [[ ${PARAM%%=*} =~ ^.*'['(.*)']' ]]; then
local SELECT_USERNAME=${BASH_REMATCH[1]}
local SELECT_USERNAME=${BASH_REMATCH[1]}
@ -710,7 +721,7 @@ exec_08_user_members(){
# Добавить пользователей в группы
# Добавить пользователей в группы
while IFS= read -ru3 SELECT_USERNAME; do
while IFS= read -ru3 SELECT_USERNAME; do
useradd_local ${SELECT_USERNAME}
useradd_local ${SELECT_USERNAME}
done 3< <(printf "%s\n" "${!USERADD[@]}")
done 3< <(printf "%s\n" "${!USERADD[@]}" | sort -V )
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]] && [[ ${#USERADD[@]} -ne 0 ]]; then
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]] && [[ ${#USERADD[@]} -ne 0 ]]; then
if [[ ${PARAM%%=*} =~ ^'USERADD['(.*)']' ]]; then
if [[ ${PARAM%%=*} =~ ^'USERADD['(.*)']' ]]; then
local SELECT_USERNAME=${BASH_REMATCH[1]}
local SELECT_USERNAME=${BASH_REMATCH[1]}
@ -735,7 +746,7 @@ exec_08_user_members(){
}
}
while IFS= read -ru3 SELECT_GROUP; do
while IFS= read -ru3 SELECT_GROUP; do
groupadd_local "${SELECT_GROUP}"
groupadd_local "${SELECT_GROUP}"
done 3< <(printf "%s\n" "${!GROUPADD[@]}")
done 3< <(printf "%s\n" "${!GROUPADD[@]}" | sort -V )
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]] && [[ ${#GROUPADD[@]} -ne 0 ]]; then
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]] && [[ ${#GROUPADD[@]} -ne 0 ]]; then
if [[ ${PARAM%%=*} =~ ^'GROUPADD['(.*)']' ]]; then
if [[ ${PARAM%%=*} =~ ^'GROUPADD['(.*)']' ]]; then
local SELECT_GROUP=${BASH_REMATCH[1]}
local SELECT_GROUP=${BASH_REMATCH[1]}