Files
2023-07-23 09:37:27 -05:00

72 lines
2.8 KiB
Bash

#!/command/with-contenv bashio
# shellcheck shell=bash
# ------------------------------------------------------------------------------
# Perform a pre-check if the Samba share is configured correctly.
#
# Returns 1 in case of a failure
# ------------------------------------------------------------------------------
function smb-precheck {
local result
local shares
# check if we can access the share at all
if ! result=$(eval "${SMB} -c 'exit'"); then
bashio::log.warning "$result"
# host not found
if [[ "$result" =~ "NT_STATUS_NOT_FOUND" ]]; then
bashio::log.fatal "The provided host cannot be found. If you've specified a DNS name, please try using an IP address instead."
# host unreachable
elif [[ "$result" =~ "NT_STATUS_HOST_UNREACHABLE" ]]; then
bashio::log.fatal "The provided host is unreachable. Please check your config and network."
# SMB1 problem
elif [[ "$result" =~ "NT_STATUS_CONNECTION_DISCONNECTED" ]]; then
bashio::log.fatal "Cannot access share. It seems that your share only supports insecure SMB protocols."
bashio::log.fatal "If you want me to connect, please check the \"compatibility_mode\" option. Use at your own risk."
# share does not exist
elif [[ "$result" =~ "NT_STATUS_BAD_NETWORK_NAME" ]]; then
bashio::log.fatal "Cannot access share. It seems that your configured share does not exist."
# try to find out which shares exist
if shares=$(eval "${ALL_SHARES}"); then
bashio::log.fatal "I found the following shares on your host. Did you mean one of those?"
bashio::log.fatal "$shares"
fi
# access denied
elif [[ "$result" =~ "NT_STATUS_ACCESS_DENIED" ]]; then
bashio::log.fatal "Cannot access share. Access denied. Please check your share permissions."
# login failed
elif [[ "$result" =~ "NT_STATUS_LOGON_FAILURE" ]]; then
bashio::log.fatal "Cannot access share. Login failed. Please check your credentials."
# unknown reason
else
bashio::log.fatal "Cannot access share. Unknown reason."
fi
return 1
fi
# check if the target directory exists
if ! run-and-log "${SMB} -c 'cd \"${TARGET_DIR}\"'"; then
bashio::log.fatal "Target directory does not exist. Please check your config."
return 1
fi
# check if we have write permissions
touch samba-tmp123
if ! run-and-log "${SMB} -c 'cd \"${TARGET_DIR}\"; put samba-tmp123; rm samba-tmp123'"; then
bashio::log.fatal "Missing write permissions on target folder. Please check your share settings."
return 1
fi
rm samba-tmp123
return 0
}