mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2025-12-10 07:44:50 +01:00
170 lines
5.1 KiB
Bash
170 lines
5.1 KiB
Bash
#!/bin/sh
|
|
|
|
. /lib/functions.sh
|
|
|
|
cl_id=1
|
|
srv_id=1
|
|
|
|
function get_ddns_config_option() {
|
|
local val
|
|
|
|
val="$(uci -q get ddns.${1}.${2})"
|
|
|
|
if [ -z "${val}" ] && [ -n "${3}" ]; then
|
|
val="${3}"
|
|
fi
|
|
|
|
echo "${val}"
|
|
}
|
|
|
|
function config_supported_service() {
|
|
if ! uci -q get ddnsmngr.global >/dev/null 2>&1; then
|
|
uci -q set ddnsmngr.global="ddnsmngr"
|
|
fi
|
|
|
|
servers=""
|
|
|
|
for i in $(find /etc/ddnsmngr/servers/ -name '*.json' | cut -d'/' -f 5 | sed "s/.json//")
|
|
do
|
|
if [ -z "${servers}" ]; then
|
|
servers="${i}"
|
|
else
|
|
servers="${servers},${i}"
|
|
fi
|
|
done
|
|
|
|
uci -q set ddnsmngr.global.supported_services="${servers}"
|
|
}
|
|
|
|
function migrate_service_section() {
|
|
client_sec=""
|
|
enabled="$(get_ddns_config_option ${1} enabled "0")"
|
|
service_name="$(get_ddns_config_option ${1} service_name)"
|
|
interface="$(get_ddns_config_option ${1} interface)"
|
|
ip_network="$(get_ddns_config_option ${1} ip_network)"
|
|
username="$(get_ddns_config_option ${1} username)"
|
|
password="$(get_ddns_config_option ${1} password)"
|
|
lookup_host="$(get_ddns_config_option ${1} lookup_host)"
|
|
use_ipv6="$(get_ddns_config_option ${1} use_ipv6 "0")"
|
|
force_ipversion="$(get_ddns_config_option ${1} force_ipversion "0")"
|
|
use_https="$(get_ddns_config_option ${1} use_https "0")"
|
|
force_dnstcp="$(get_ddns_config_option ${1} force_dnstcp "0")"
|
|
|
|
if [ -z "${service_name}" ]; then
|
|
uci -q delete ddns."${1}"
|
|
return 0
|
|
fi
|
|
|
|
# check server file is present in device
|
|
if [ ! -f "/etc/ddnsmngr/servers/${service_name}.json" ]; then
|
|
uci -q delete ddns."${1}"
|
|
return 0
|
|
fi
|
|
|
|
# Check if client section is already added for this service
|
|
clients=$(uci -q show ddnsmngr | grep "=client")
|
|
client_count=$(echo "${clients}" | wc -l)
|
|
|
|
tmp=0
|
|
while [ $tmp -lt $client_count ]
|
|
do
|
|
mngr_serv="$(uci -q get ddnsmngr.@client[$tmp].service_name)"
|
|
mngr_intf="$(uci -q get ddnsmngr.@client[$tmp].interface)"
|
|
mngr_netw="$(uci -q get ddnsmngr.@client[$tmp].ip_network)"
|
|
mngr_user="$(uci -q get ddnsmngr.@client[$tmp].username)"
|
|
mngr_ipv6="$(uci -q get ddnsmngr.@client[$tmp].use_ipv6)"
|
|
mngr_forceip="$(uci -q get ddnsmngr.@client[$tmp].force_ipversion)"
|
|
mngr_https="$(uci -q get ddnsmngr.@client[$tmp].use_https)"
|
|
mngr_dnstcp="$(uci -q get ddnsmngr.@client[$tmp].force_dnstcp)"
|
|
|
|
[ -z "${mngr_ipv6}" ] && mngr_ipv6="0"
|
|
[ -z "${mngr_forceip}" ] && mngr_forceip="0"
|
|
[ -z "${mngr_https}" ] && mngr_https="0"
|
|
[ -z "${mngr_dnstcp}" ] && mngr_dnstcp="0"
|
|
|
|
if [ "${mngr_serv}" == "${service_name}" ] && [ "${mngr_intf}" == "${interface}" ] && \
|
|
[ "${mngr_netw}" == "${ip_network}" ] && [ "${mngr_user}" == "${username}" ] && \
|
|
[ "${mngr_ipv6}" == "${use_ipv6}" ] && [ "${mngr_forceip}" == "${force_ipversion}" ] && \
|
|
[ "${mngr_https}" == "${use_https}" ] && [ "${mngr_dnstcp}" == "${force_dnstcp}" ]; then
|
|
break
|
|
fi
|
|
|
|
tmp=$(( tmp + 1 ))
|
|
done
|
|
|
|
if [ $tmp -ne $client_count ]; then
|
|
i=0
|
|
for client in $clients; do
|
|
if [ $i -eq $tmp ]; then
|
|
client_sec="$(echo $client | cut -d'=' -f 1 | cut -d'.' -f 2)"
|
|
break
|
|
fi
|
|
i=$(( i + 1 ))
|
|
done
|
|
|
|
if [ $enabled -eq 1 ]; then
|
|
uci -q set ddnsmngr."${client_sec}".enabled="1"
|
|
fi
|
|
else
|
|
client_sec=ddns_mig_client_"${cl_id}"
|
|
|
|
uci -q set ddnsmngr."${client_sec}"="client"
|
|
uci -q set ddnsmngr."${client_sec}".enabled="${enabled}"
|
|
uci -q set ddnsmngr."${client_sec}".service_name="${service_name}"
|
|
uci -q set ddnsmngr."${client_sec}".interface="${interface}"
|
|
uci -q set ddnsmngr."${client_sec}".ip_network="${ip_network}"
|
|
uci -q set ddnsmngr."${client_sec}".username="${username}"
|
|
uci -q set ddnsmngr."${client_sec}".password="${password}"
|
|
uci -q set ddnsmngr."${client_sec}".use_ipv6="${use_ipv6}"
|
|
uci -q set ddnsmngr."${client_sec}".force_ipversion="${force_ipversion}"
|
|
uci -q set ddnsmngr."${client_sec}".use_https="${use_https}"
|
|
uci -q set ddnsmngr."${client_sec}".force_dnstcp="${force_dnstcp}"
|
|
|
|
cl_id=$(( cl_id + 1 ))
|
|
|
|
# add server section if not added
|
|
servers=$(uci -q show ddnsmngr | grep "service=\'${service_name}\'")
|
|
if [ -z "${servers}" ]; then
|
|
server_sec=ddns_mig_server_"${srv_id}"
|
|
uci -q set ddnsmngr."${server_sec}"="server"
|
|
uci -q set ddnsmngr."${server_sec}".enabled="1"
|
|
uci -q set ddnsmngr."${server_sec}".service="${service_name}"
|
|
uci -q set ddnsmngr."${server_sec}".name="${service_name}"
|
|
|
|
srv_id=$(( srv_id + 1 ))
|
|
fi
|
|
fi
|
|
|
|
|
|
# if lookup_host is set then add host section
|
|
if [ -n "${lookup_host}" ] && [ -n "${client_sec}" ]; then
|
|
# check number of hosts present for this client
|
|
host_count=$(uci -q show ddnsmngr | grep "dm_parent=\'${client_sec}\'" | wc -l)
|
|
host_ix=$(( host_count + 1 ))
|
|
host_sec="${client_sec}"_host_"${host_ix}"
|
|
|
|
uci -q set ddnsmngr."${host_sec}"="host"
|
|
uci -q set ddnsmngr."${host_sec}".enabled="${enabled}"
|
|
uci -q set ddnsmngr."${host_sec}".lookup_host="${lookup_host}"
|
|
uci -q set ddnsmngr."${host_sec}".dm_parent="${client_sec}"
|
|
fi
|
|
|
|
uci -q delete ddns."${1}"
|
|
}
|
|
|
|
function migrate_ddns_config() {
|
|
if [ ! -f "/etc/config/ddnsmngr" ]; then
|
|
# Create ddnsmngr config file
|
|
touch /etc/config/ddnsmngr
|
|
fi
|
|
|
|
config_supported_service
|
|
|
|
config_load ddns
|
|
config_foreach migrate_service_section service
|
|
|
|
uci -q commit ddns
|
|
uci -q commit ddnsmngr
|
|
}
|
|
|
|
migrate_ddns_config
|