Compare commits

..

No commits in common. "bd964d17c88ac7a3d13fe5726dd53801db910e2f" and "bcf61311f52eebb2a6d04ed8405215f2d965affb" have entirely different histories.

15 changed files with 2530 additions and 3993 deletions

View File

@ -371,22 +371,3 @@ function connectwlanif() {
wpa_supplicant -i ${1} -c "${CONF}" -B -P "/var/run/wpa_supplicant.pid.${1}" >/dev/null 2>&1
return 0
}
###############################################################################
# Find and mount the DSM root filesystem
# (based on pocopico's TCRP code)
function findDSMRoot() {
local DSMROOTS=""
local RAIDS="$(lsblk -pno KNAME,PARTN,FSTYPE,FSVER,LABEL | grep -w " 1" | grep -w "linux_raid_member")"
if echo "${RAIDS}" | grep -q "1.2"; then
# SynologyNAS:0, DiskStation:0, SynologyNVR:0, BeeStation:0
local LABELS="$(echo "${RAIDS}" | grep "1.2" | awk '{print $5}' | uniq)"
for I in ${LABELS}; do
[ -L "/dev/md/${I}" ] && DSMROOTS="${DSMROOTS} /dev/md/${I}"
done
elif echo "${RAIDS}" | grep -q "0.9"; then
DSMROOTS="$(echo "${RAIDS}" | grep "0.9" | awk '{print $1}')"
fi
echo ${DSMROOTS}
return 0
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -371,6 +371,8 @@ function productversMenu() {
###############################################################################
# Parse Pat
function ParsePat() {
rm -f "${LOG_FILE}"
if [ -n "${MODEL}" -a -n "${PRODUCTVER}" ]; then
MSG="$(printf "$(TEXT "You have selected the %s and %s.\n'Parse Pat' will overwrite the previous selection.\nDo you want to continue?")" "${MODEL}" "${PRODUCTVER}")"
DIALOG --title "$(TEXT "Parse Pat")" \
@ -400,12 +402,11 @@ function ParsePat() {
fi
while true; do
rm -f "${LOG_FILE}"
echo "$(printf "$(TEXT "Parse %s ...")" "$(basename "${PAT_PATH}")")"
extractPatFiles "${PAT_PATH}" "${UNTAR_PAT_PATH}"
if [ $? -ne 0 ]; then
rm -rf "${UNTAR_PAT_PATH}"
break
return 1
fi
if [ ! -f "${UNTAR_PAT_PATH}/GRUB_VER" -o ! -f "${UNTAR_PAT_PATH}/VERSION" ]; then
echo -e "$(TEXT "pat Invalid, try again!")" >"${LOG_FILE}"
@ -1727,15 +1728,14 @@ function formatDisks() {
function tryRecoveryDSM() {
DIALOG --title "$(TEXT "Try recovery DSM")" \
--infobox "$(TEXT "Trying to recovery a installed DSM system ...")" 0 0
DSMROOTS="$(findDSMRoot)"
if [ -z "${DSMROOTS}" ]; then
if [ -z "$(ls /dev/md/*:0 2>/dev/null)" ]; then # SynologyNAS:0, DiskStation:0, SynologyNVR:0, BeeStation:0
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "$(TEXT "No DSM system partition(md0) found!\nPlease insert all disks before continuing.")" 0 0
return
fi
mkdir -p "${TMP_PATH}/mdX"
mount "$(echo "${DSMROOTS}" | head -n 1 | cut -d' ' -f1)" "${TMP_PATH}/mdX"
mount "$(ls /dev/md/*:0 2>/dev/null | head -n 1)" "${TMP_PATH}/mdX"
if [ $? -ne 0 ]; then
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "$(TEXT "mount DSM system partition(md0) failed!\nPlease insert all disks before continuing.")" 0 0
@ -1904,24 +1904,22 @@ function allowDSMDowngrade() {
DIALOG --title "$(TEXT "Advanced")" \
--yesno "${MSG}" 0 0
[ $? -ne 0 ] && return
DSMROOTS="$(findDSMRoot)"
if [ -z "${DSMROOTS}" ]; then
if [ -z "$(ls /dev/md/*:0 2>/dev/null)" ]; then # SynologyNAS:0, DiskStation:0, SynologyNVR:0, BeeStation:0
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "$(TEXT "No DSM system partition(md0) found!\nPlease insert all disks before continuing.")" 0 0
return
fi
(
while true; do
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
mount "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
[ -f "${TMP_PATH}/mdX/etc/VERSION" ] && rm -f "${TMP_PATH}/mdX/etc/VERSION"
[ -f "${TMP_PATH}/mdX/etc.defaults/VERSION" ] && rm -f "${TMP_PATH}/mdX/etc.defaults/VERSION"
sync
umount "${TMP_PATH}/mdX"
done
mount "$(ls /dev/md/*:0 2>/dev/null | head -n 1)" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && break
[ -f "${TMP_PATH}/mdX/etc/VERSION" ] && rm -f "${TMP_PATH}/mdX/etc/VERSION"
[ -f "${TMP_PATH}/mdX/etc.defaults/VERSION" ] && rm -f "${TMP_PATH}/mdX/etc.defaults/VERSION"
sync
umount "${TMP_PATH}/mdX"
rm -rf "${TMP_PATH}/mdX"
) 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
break
done 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
--progressbox "$(TEXT "Removing ...")" 20 100
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "$(TEXT "Remove VERSION file for DSM system partition(md0) completed.")" 0 0
@ -1931,17 +1929,16 @@ function allowDSMDowngrade() {
###############################################################################
# Reset DSM system password
function resetDSMPassword() {
DSMROOTS="$(findDSMRoot)"
if [ -z "${DSMROOTS}" ]; then
if [ -z "$(ls /dev/md/*:0 2>/dev/null)" ]; then # SynologyNAS:0, DiskStation:0, SynologyNVR:0, BeeStation:0
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "$(TEXT "No DSM system partition(md0) found!\nPlease insert all disks before continuing.")" 0 0
return
fi
rm -f "${TMP_PATH}/menu"
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
mount ${I} "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
while true; do
mkdir -p "${TMP_PATH}/mdX"
mount "$(ls /dev/md/*:0 2>/dev/null | head -n 1)" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && break
if [ -f "${TMP_PATH}/mdX/etc/shadow" ]; then
while read L; do
U=$(echo "${L}" | awk -F ':' '{if ($2 != "*" && $2 != "!!") print $1;}')
@ -1953,9 +1950,9 @@ function resetDSMPassword() {
done <<<$(cat "${TMP_PATH}/mdX/etc/shadow" 2>/dev/null)
fi
umount "${TMP_PATH}/mdX"
[ -f "${TMP_PATH}/menu" ] && break
rm -rf "${TMP_PATH}/mdX"
break
done
rm -rf "${TMP_PATH}/mdX"
if [ ! -f "${TMP_PATH}/menu" ]; then
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "$(TEXT "All existing users have been disabled. Please try adding new user.")" 0 0
@ -1978,22 +1975,21 @@ function resetDSMPassword() {
--msgbox "$(TEXT "Invalid password")" 0 0
done
NEWPASSWD="$(python -c "from passlib.hash import sha512_crypt;pw=\"${VALUE}\";print(sha512_crypt.using(rounds=5000).hash(pw))")"
(
while true; do
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
mount "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
OLDPASSWD="$(cat "${TMP_PATH}/mdX/etc/shadow" 2>/dev/null | grep "^${USER}:" | awk -F ':' '{print $2}')"
if [ -n "${NEWPASSWD}" -a -n "${OLDPASSWD}" ]; then
sed -i "s|${OLDPASSWD}|${NEWPASSWD}|g" "${TMP_PATH}/mdX/etc/shadow"
sed -i "/^${USER}:/ s/\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\)/\1:\2:\3:\4:\5:\6:\7::\9/" "${TMP_PATH}/mdX/etc/shadow"
fi
sed -i "s|status=on|status=off|g" "${TMP_PATH}/mdX/usr/syno/etc/packages/SecureSignIn/preference/${USER}/method.config" 2>/dev/null
sync
umount "${TMP_PATH}/mdX"
done
mount "$(ls /dev/md/*:0 2>/dev/null | head -n 1)" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && break
OLDPASSWD="$(cat "${TMP_PATH}/mdX/etc/shadow" 2>/dev/null | grep "^${USER}:" | awk -F ':' '{print $2}')"
if [ -n "${NEWPASSWD}" -a -n "${OLDPASSWD}" ]; then
sed -i "s|${OLDPASSWD}|${NEWPASSWD}|g" "${TMP_PATH}/mdX/etc/shadow"
sed -i "/^${USER}:/ s/\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\)/\1:\2:\3:\4:\5:\6:\7::\9/" "${TMP_PATH}/mdX/etc/shadow"
fi
sed -i "s|status=on|status=off|g" "${TMP_PATH}/mdX/usr/syno/etc/packages/SecureSignIn/preference/${USER}/method.config" 2>/dev/null
sync
umount "${TMP_PATH}/mdX"
rm -rf "${TMP_PATH}/mdX"
) 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
break
done 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
--progressbox "$(TEXT "Resetting ...")" 20 100
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "$(TEXT "Password reset completed.")" 0 0
@ -2003,8 +1999,7 @@ function resetDSMPassword() {
###############################################################################
# Reset DSM system password
function addNewDSMUser() {
DSMROOTS="$(findDSMRoot)"
if [ -z "${DSMROOTS}" ]; then
if [ -z "$(ls /dev/md/*:0 2>/dev/null)" ]; then # SynologyNAS:0, DiskStation:0, SynologyNVR:0, BeeStation:0
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "$(TEXT "No DSM system partition(md0) found!\nPlease insert all disks before continuing.")" 0 0
return
@ -2021,11 +2016,10 @@ function addNewDSMUser() {
ONBOOTUP="${ONBOOTUP}if synouser --enum local | grep -q ^${username}\$; then synouser --setpw ${username} ${password}; else synouser --add ${username} ${password} rr 0 user@rr.com 1; fi\n"
ONBOOTUP="${ONBOOTUP}synogroup --member administrators ${username}\n"
ONBOOTUP="${ONBOOTUP}echo \"DELETE FROM task WHERE task_name LIKE ''RRONBOOTUPRR_ADDUSER'';\" | sqlite3 /usr/syno/etc/esynoscheduler/esynoscheduler.db\n"
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
mount "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
while true; do
mkdir -p "${TMP_PATH}/mdX"
mount "$(ls /dev/md/*:0 2>/dev/null | head -n 1)" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && break
if [ -f "${TMP_PATH}/mdX/usr/syno/etc/esynoscheduler/esynoscheduler.db" ]; then
sqlite3 ${TMP_PATH}/mdX/usr/syno/etc/esynoscheduler/esynoscheduler.db <<EOF
DELETE FROM task WHERE task_name LIKE 'RRONBOOTUPRR_ADDUSER';
@ -2036,8 +2030,9 @@ EOF
echo "true" >${TMP_PATH}/isEnable
fi
umount "${TMP_PATH}/mdX"
rm -rf "${TMP_PATH}/mdX"
break
done
rm -rf "${TMP_PATH}/mdX"
) 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
--progressbox "$(TEXT "Adding ...")" 20 100
[ "$(cat ${TMP_PATH}/isEnable 2>/dev/null)" = "true" ] && MSG="$(TEXT "User added successfully.")" || MSG="$(TEXT "User add failed.")"
@ -2049,8 +2044,7 @@ EOF
###############################################################################
# Force enable Telnet&SSH of DSM system
function forceEnableDSMTelnetSSH() {
DSMROOTS="$(findDSMRoot)"
if [ -z "${DSMROOTS}" ]; then
if [ -z "$(ls /dev/md/*:0 2>/dev/null)" ]; then # SynologyNAS:0, DiskStation:0, SynologyNVR:0, BeeStation:0
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "$(TEXT "No DSM system partition(md0) found!\nPlease insert all disks before continuing.")" 0 0
return
@ -2059,10 +2053,10 @@ function forceEnableDSMTelnetSSH() {
ONBOOTUP=""
ONBOOTUP="${ONBOOTUP}synowebapi --exec api=SYNO.Core.Terminal method=set version=3 enable_telnet=true enable_ssh=true ssh_port=22 forbid_console=false\n"
ONBOOTUP="${ONBOOTUP}echo \"DELETE FROM task WHERE task_name LIKE ''RRONBOOTUPRR_SSH'';\" | sqlite3 /usr/syno/etc/esynoscheduler/esynoscheduler.db\n"
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
mount "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
while true; do
mkdir -p "${TMP_PATH}/mdX"
mount "$(ls /dev/md/*:0 2>/dev/null | head -n 1)" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && break
if [ -f "${TMP_PATH}/mdX/usr/syno/etc/esynoscheduler/esynoscheduler.db" ]; then
sqlite3 ${TMP_PATH}/mdX/usr/syno/etc/esynoscheduler/esynoscheduler.db <<EOF
DELETE FROM task WHERE task_name LIKE 'RRONBOOTUPRR_SSH';
@ -2073,8 +2067,9 @@ EOF
echo "true" >${TMP_PATH}/isEnable
fi
umount "${TMP_PATH}/mdX"
rm -rf "${TMP_PATH}/mdX"
break
done
rm -rf "${TMP_PATH}/mdX"
) 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
--progressbox "$(TEXT "Enabling ...")" 20 100
[ "$(cat ${TMP_PATH}/isEnable 2>/dev/null)" = "true" ] && MSG="$(TEXT "Enabled Telnet&SSH successfully.")" || MSG="$(TEXT "Enabled Telnet&SSH failed.")"
@ -2092,23 +2087,21 @@ function removeBlockIPDB {
DIALOG --title "$(TEXT "Advanced")" \
--yesno "${MSG}" 0 0
[ $? -ne 0 ] && return
DSMROOTS="$(findDSMRoot)"
if [ -z "${DSMROOTS}" ]; then
if [ -z "$(ls /dev/md/*:0 2>/dev/null)" ]; then # SynologyNAS:0, DiskStation:0, SynologyNVR:0, BeeStation:0
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "$(TEXT "No DSM system partition(md0) found!\nPlease insert all disks before continuing.")" 0 0
return
fi
(
while true; do
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
mount "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
[ -f "${TMP_PATH}/mdX/etc/synoautoblock.db" ] && rm -f "${TMP_PATH}/mdX/etc/synoautoblock.db"
sync
umount "${TMP_PATH}/mdX"
done
mount "$(ls /dev/md/*:0 2>/dev/null | head -n 1)" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && break
[ -f "${TMP_PATH}/mdX/etc/synoautoblock.db" ] && rm -f "${TMP_PATH}/mdX/etc/synoautoblock.db"
sync
umount "${TMP_PATH}/mdX"
rm -rf "${TMP_PATH}/mdX"
) 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
break
done 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
--progressbox "$(TEXT "Removing ...")" 20 100
MSG="$(TEXT "The blocked ip database has been deleted.")"
DIALOG --title "$(TEXT "Advanced")" \
@ -2715,7 +2708,7 @@ function downloadExts() {
if [ ${RET} -ne 0 -o ${STATUS:-0} -ne 200 ]; then
rm -f "${TMP_PATH}/${4}-${TAG}.zip"
MSG="$(printf "$(TEXT "Error downloading new version.\nError: %d:%d\n(Please via https://curl.se/libcurl/c/libcurl-errors.html check error description.)")" "${RET}" "${STATUS}")"
echo -e "${MSG}" >"${LOG_FILE}"
echo -e "${MSG}" > "${LOG_FILE}"
fi
return 0
}