diff --git a/net/ddns-scripts/Makefile b/net/ddns-scripts/Makefile index 4b50e8d8d5..5104c9d60c 100644 --- a/net/ddns-scripts/Makefile +++ b/net/ddns-scripts/Makefile @@ -2,7 +2,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ddns-scripts PKG_VERSION:=1.0.0 -PKG_RELEASE:=22 +PKG_RELEASE:=23 +PKG_LICENSE:=GPL-2.0 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) @@ -14,6 +15,7 @@ define Package/ddns-scripts SUBMENU:=IP Addresses and Names TITLE:=Dynamic DNS Scripts PKGARCH:=all + MAINTAINER:=Christian Schoenebeck endef define Package/ddns-scripts/description diff --git a/net/ddns-scripts/files/etc/hotplug.d/iface/25-ddns b/net/ddns-scripts/files/etc/hotplug.d/iface/25-ddns index 4495b5d854..f337a674ee 100644 --- a/net/ddns-scripts/files/etc/hotplug.d/iface/25-ddns +++ b/net/ddns-scripts/files/etc/hotplug.d/iface/25-ddns @@ -1,9 +1,7 @@ #!/bin/sh -. /usr/lib/ddns/dynamic_dns_functions.sh - if [ "$ACTION" = "ifup" ]; then - start_daemon_for_all_ddns_sections "$INTERFACE" + . /usr/lib/ddns/dynamic_dns_functions.sh + /etc/init.d/ddns enabled && start_daemon_for_all_ddns_sections "$INTERFACE" fi - diff --git a/net/ddns-scripts/files/etc/init.d/ddns b/net/ddns-scripts/files/etc/init.d/ddns index 3171d5ae92..1194543cba 100644 --- a/net/ddns-scripts/files/etc/init.d/ddns +++ b/net/ddns-scripts/files/etc/init.d/ddns @@ -1,6 +1,10 @@ #!/bin/sh /etc/rc.common START=95 +boot() { + return 0 +} + start() { . /usr/lib/ddns/dynamic_dns_functions.sh start_daemon_for_all_ddns_sections diff --git a/net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_updater.sh~ b/net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_updater.sh~ deleted file mode 100755 index e6d298740d..0000000000 --- a/net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_updater.sh~ +++ /dev/null @@ -1,360 +0,0 @@ -#!/bin/sh -# /usr/lib/dynamic_dns/dynamic_dns_updater.sh -# -# Written by Eric Paul Bishop, Janary 2008 -# Distributed under the terms of the GNU General Public License (GPL) version 2.0 -# -# This script is (loosely) based on the one posted by exobyte in the forums here: -# http://forum.openwrt.org/viewtopic.php?id=14040 -# - -. /usr/lib/ddns/dynamic_dns_functions.sh - - -service_id=$1 -if [ -z "$service_id" ] -then - echo "ERRROR: You must specify a service id (the section name in the /etc/config/ddns file) to initialize dynamic DNS." - return 1 -fi - -#default mode is verbose_mode, but easily turned off with second parameter -verbose_mode="1" -if [ -n "$2" ] -then - verbose_mode="$2" -fi - -############################################################### -# Leave this comment here, to clearly document variable names -# that are expected/possible -# -# Now use load_all_config_options to load config -# options, which is a much more flexible solution. -# -# -#config_load "ddns" -# -#config_get enabled $service_id enabled -#config_get service_name $service_id service_name -#config_get update_url $service_id update_url -# -# -#config_get username $service_id username -#config_get password $service_id password -#config_get domain $service_id domain -# -# -#config_get use_https $service_id use_https -#config_get use_syslog $service_id use_syslog -#config_get cacert $service_id cacert -# -#config_get ip_source $service_id ip_source -#config_get ip_interface $service_id ip_interface -#config_get ip_network $service_id ip_network -#config_get ip_url $service_id ip_url -# -#config_get force_interval $service_id force_interval -#config_get force_unit $service_id force_unit -# -#config_get check_interval $service_id check_interval -#config_get check_unit $service_id check_unit -######################################################### -load_all_config_options "ddns" "$service_id" - - -#some defaults -if [ -z "$check_interval" ] -then - check_interval=600 -fi - -if [ -z "$retry_interval" ] -then - retry_interval=60 -fi - -if [ -z "$check_unit" ] -then - check_unit="seconds" -fi - -if [ -z "$force_interval" ] -then - force_interval=72 -fi - -if [ -z "$force_unit" ] -then - force_unit="hours" -fi - -if [ -z $use_syslog ] -then - use_syslog=0 -fi - -if [ -z "$use_https" ] -then - use_https=0 -fi - - -#some constants - -retrieve_prog="/usr/bin/wget -O - "; -if [ "x$use_https" = "x1" ] -then - /usr/bin/wget --version 2>&1 |grep -q "\+ssl" - if [ $? -eq 0 ] - then - if [ -f "$cacert" ] - then - retrieve_prog="${retrieve_prog}--ca-certificate=${cacert} " - elif [ -d "$cacert" ] - then - retrieve_prog="${retrieve_prog}--ca-directory=${cacert} " - fi - else - retrieve_prog="/usr/bin/curl " - if [ -f "$cacert" ] - then - retrieve_prog="${retrieve_prog}--cacert $cacert " - elif [ -d "$cacert" ] - then - retrieve_prog="${retrieve_prog}--capath $cacert " - fi - fi -fi - - -service_file="/usr/lib/ddns/services" - -ip_regex="[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" - -NEWLINE_IFS=' -' - -#determine what update url we're using if the service_name is supplied -if [ -n "$service_name" ] -then - #remove any lines not containing data, and then make sure fields are enclosed in double quotes - quoted_services=$(cat $service_file | grep "^[\t ]*[^#]" | awk ' gsub("\x27", "\"") { if ($1~/^[^\"]*$/) $1="\""$1"\"" }; { if ( $NF~/^[^\"]*$/) $NF="\""$NF"\"" }; { print $0 }' ) - - - #echo "quoted_services = $quoted_services" - OLD_IFS=$IFS - IFS=$NEWLINE_IFS - for service_line in $quoted_services - do - #grep out proper parts of data and use echo to remove quotes - next_name=$(echo $service_line | grep -o "^[\t ]*\"[^\"]*\"" | xargs -r -n1 echo) - next_url=$(echo $service_line | grep -o "\"[^\"]*\"[\t ]*$" | xargs -r -n1 echo) - - if [ "$next_name" = "$service_name" ] - then - update_url=$next_url - fi - done - IFS=$OLD_IFS -fi - -if [ "x$use_https" = x1 ] -then - update_url=$(echo $update_url | sed -e 's/^http:/https:/') -fi - -verbose_echo "update_url=$update_url" - -#if this service isn't enabled then quit -if [ "$enabled" != "1" ] -then - return 0 -fi - -#compute update interval in seconds -case "$force_unit" in - "days" ) - force_interval_seconds=$(($force_interval*60*60*24)) - ;; - "hours" ) - force_interval_seconds=$(($force_interval*60*60)) - ;; - "minutes" ) - force_interval_seconds=$(($force_interval*60)) - ;; - "seconds" ) - force_interval_seconds=$force_interval - ;; - * ) - #default is hours - force_interval_seconds=$(($force_interval*60*60)) - ;; -esac - - -#compute check interval in seconds -case "$check_unit" in - "days" ) - check_interval_seconds=$(($check_interval*60*60*24)) - ;; - "hours" ) - check_interval_seconds=$(($check_interval*60*60)) - ;; - "minutes" ) - check_interval_seconds=$(($check_interval*60)) - ;; - "seconds" ) - check_interval_seconds=$check_interval - ;; - * ) - #default is seconds - check_interval_seconds=$check_interval - ;; -esac - - -#compute retry interval in seconds -case "$retry_unit" in - "days" ) - retry_interval_seconds=$(($retry_interval*60*60*24)) - ;; - "hours" ) - retry_interval_seconds=$(($retry_interval*60*60)) - ;; - "minutes" ) - retry_interval_seconds=$(($retry_interval*60)) - ;; - "seconds" ) - retry_interval_seconds=$retry_interval - ;; - * ) - #default is seconds - retry_interval_seconds=$retry_interval - ;; -esac - - -verbose_echo "force seconds = $force_interval_seconds" -verbose_echo "check seconds = $check_interval_seconds" - -#kill old process if it exists & set new pid file -if [ -d /var/run/dynamic_dns ] -then - #if process is already running, stop it - if [ -e "/var/run/dynamic_dns/$service_id.pid" ] - then - old_pid=$(cat /var/run/dynamic_dns/$service_id.pid) - test_match=$(ps | grep "^[\t ]*$old_pid") - verbose_echo "old process id (if it exists) = \"$test_match\"" - if [ -n "$test_match" ] - then - kill $old_pid - fi - fi - -else - #make dir since it doesn't exist - mkdir /var/run/dynamic_dns -fi -echo $$ > /var/run/dynamic_dns/$service_id.pid - - - - -#determine when the last update was -current_time=$(monotonic_time) -last_update=$(( $current_time - (2*$force_interval_seconds) )) -if [ -e "/var/run/dynamic_dns/$service_id.update" ] -then - last_update=$(cat /var/run/dynamic_dns/$service_id.update) -fi -time_since_update=$(($current_time - $last_update)) - - -human_time_since_update=$(( $time_since_update / ( 60 * 60 ) )) -verbose_echo "time_since_update = $human_time_since_update hours" - - - -#do update and then loop endlessly, checking ip every check_interval and forcing an updating once every force_interval - -while [ true ] -do - registered_ip=$(echo $(nslookup "$domain" 2>/dev/null) | grep -o "Name:.*" | grep -o "$ip_regex") - current_ip=$(get_current_ip) - - - current_time=$(monotonic_time) - time_since_update=$(($current_time - $last_update)) - - syslog_echo "Running IP check ..." - verbose_echo "Running IP check..." - verbose_echo "current system ip = $current_ip" - verbose_echo "registered domain ip = $registered_ip" - - - if [ "$current_ip" != "$registered_ip" ] || [ $force_interval_seconds -lt $time_since_update ] - then - verbose_echo "update necessary, performing update ..." - - #do replacement - final_url=$update_url - for option_var in $ALL_OPTION_VARIABLES - do - if [ "$option_var" != "update_url" ] - then - replace_name=$(echo "\[$option_var\]" | tr 'a-z' 'A-Z') - replace_value=$(eval echo "\$$option_var") - replace_value=$(echo $replace_value | sed -f /usr/lib/ddns/url_escape.sed) - final_url=$(echo $final_url | sed s^"$replace_name"^"$replace_value"^g ) - fi - done - final_url=$(echo $final_url | sed s^"\[HTTPAUTH\]"^"${username//^/\\^}${password:+:${password//^/\\^}}"^g ) - final_url=$(echo $final_url | sed s/"\[IP\]"/"$current_ip"/g ) - - - verbose_echo "updating with url=\"$final_url\"" - - #here we actually connect, and perform the update - update_output=$( $retrieve_prog "$final_url" ) - if [ $? -gt 0 ] - then - syslog_echo "update failed, retrying in $retry_interval_seconds seconds" - verbose_echo "update failed" - sleep $retry_interval_seconds - continue - fi - syslog_echo "Update successful" - verbose_echo "Update Output:" - verbose_echo "$update_output" - verbose_echo "" - - #save the time of the update - current_time=$(monotonic_time) - last_update=$current_time - time_since_update='0' - registered_ip=$current_ip - - human_time=$(date) - verbose_echo "update complete, time is: $human_time" - - echo "$last_update" > "/var/run/dynamic_dns/$service_id.update" - else - human_time=$(date) - human_time_since_update=$(( $time_since_update / ( 60 * 60 ) )) - verbose_echo "update unnecessary" - verbose_echo "time since last update = $human_time_since_update hours" - verbose_echo "the time is now $human_time" - fi - - #sleep for 10 minutes, then re-check ip && time since last update - sleep $check_interval_seconds -done - -#should never get here since we're a daemon, but I'll throw it in anyway -return 0 - - - - diff --git a/net/ddns-scripts/files/usr/lib/ddns/services b/net/ddns-scripts/files/usr/lib/ddns/services index 744de025af..39a9e8b31d 100644 --- a/net/ddns-scripts/files/usr/lib/ddns/services +++ b/net/ddns-scripts/files/usr/lib/ddns/services @@ -63,3 +63,9 @@ # Mythic Beasts (https://www.mythic-beasts.com) Dynamic DNS "mythic-beasts.com" "http://dnsapi4.mythic-beasts.com/?domain=[USERNAME]&password=[PASSWORD]&command=REPLACE%20[DOMAIN]%2060%20A%20DYNAMIC_IP" + +# Securepoint Dynamic-DNS-Service (http://www.spdns.de) +"spdns.de" "http://[USERNAME]:[PASSWORD]@update.spdns.de/nic/update?hostname=[DOMAIN]&myip=[IP]" + +# duiadns.net - free dynamic DNS +"duiadns.net" "http://ipv4.duia.ro/dynamic.duia?host=[DOMAIN]&password=[PASSWORD]&ip4=[IP]"