#
. /usr/lib/ddns/dynamic_dns_functions.sh
-. /usr/lib/ddns/shell_get.sh
-
-
-
-
service_id=$1
#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
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
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 --no-check-certificate -O - ";
-if [ -h "/usr/bin/wget" ]
+retrieve_prog="/usr/bin/wget -O - ";
+if [ "x$use_https" = "x1" ]
then
- busybox_wget=$(ls -l /usr/bin/wget | awk ' { if ($0~/busybox/) { print "BUSYBOX"}} ')
- if [ -n "$busybox_wget" ]; then
- retrieve_prog="shell_get"
+ /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
-verbose_echo "retrieve_prog=\"$retrieve_prog\""
service_file="/usr/lib/ddns/services"
NEWLINE_IFS='
'
-
#determine what update url we're using if the service_name is supplied
if [ -n "$service_name" ]
then
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" )
esac
-
#compute check interval in seconds
case "$check_unit" in
"days" )
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"
#determine when the last update was
-current_time=$(date +%s)
+current_time=$(monotonic_time)
last_update=$(( $current_time - (2*$force_interval_seconds) ))
if [ -e "/var/run/dynamic_dns/$service_id.update" ]
then
-
-registered_ip=$(echo $(nslookup "$domain" 2>/dev/null) | grep -o "Name:.*" | grep -o "$ip_regex")
-
-
#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=$(date +%s)
+ 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"
final_url=$update_url
for option_var in $ALL_OPTION_VARIABLES
do
- replace_name=$(echo "\[$option_var\]" | tr 'a-z' 'A-Z')
- replace_value=$(eval echo "\$$option_var")
- final_url=$(echo $final_url | sed s/"$replace_name"/"$replace_value"/g )
- done
+ 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=$(date +%s)
+ 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)