#!/bin/sh YADDNS_CONF=/tmp/yaddns.conf YADDNS_PID=/var/run/yaddns.pid prepare_yaddns_conf () { . /etc/functions.sh include /lib/network > $YADDNS_CONF SECTIONS="" config_cb() { SECTIONS="$SECTIONS $2" } config_load "ddns" for section in $SECTIONS; do config_get enabled $section enabled if [ "$enabled" = "1" ]; then if [ -z "$header_filled" ]; then config_get ip_source $section ip_source #if ip source is not defined, assume we want to get ip from wan if [ "$ip_source" != "interface" ] && [ "$ip_source" != "web" ]; then ip_source="network" fi if [ "$ip_source" = "interface" ]; then config_get ip_interface $section ip_interface fi if [ "$ip_source" = "network" ]; then if [ -z "$ip_network" ]; then ip_network="wan" fi scan_interfaces config_load /var/state/network config_get ip_interface $ip_network ifname fi if [ "$ip_source" = "web" ]; then config_get ip_url $section ip_url config_get check_interval $section check_interval config_get check_unit $section check_unit if [ -z "$check_interval" ]; then check_interval=600 fi if [ -z "$check_unit" ]; then check_unit="seconds" fi if [ -z "$ip_url" ]; then ip_url="http://checkip.dyndns.org/" fi 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 hours check_interval_seconds=$(($check_interval*60*60)) ;; esac myip_host="`echo $ip_url | sed 's%.*//\([^:/]*\).*%\1%'`" myip_port="`echo $ip_url | sed -n 's%.*//[^:]*:\([0-9]\+\).*%\1%; t m; b; :m p'`" if [ -z "$myip_port" ]; then myip_port=80 fi myip_path="`echo $ip_url | sed 's%.*//[^/]*\(.*\)%\1%'`" if [ -z "$myip_path" ]; then myip_path="/" fi echo mode = \"indirect\" >> $YADDNS_CONF echo myip_host = \"$myip_host\" >> $YADDNS_CONF echo myip_path = \"$myip_path\" >> $YADDNS_CONF echo myip_port = \"$myip_port\" >> $YADDNS_CONF echo myip_upint = \"$check_interval_seconds\" >> $YADDNS_CONF else echo mode = \"direct\" >> $YADDNS_CONF echo wanifname = \"$ip_interface\" >> $YADDNS_CONF fi echo >> $YADDNS_CONF header_filled=1 fi config_get service_name $section service_name config_get domain $section domain config_get username $section username config_get password $section password echo account \{ >> $YADDNS_CONF echo -e '\tname = '\"$section\" >> $YADDNS_CONF echo -e '\tservice = '\"$service_name\" >> $YADDNS_CONF echo -e '\tusername = '\"$username\" >> $YADDNS_CONF echo -e '\tpassword = '\"$password\" >> $YADDNS_CONF echo -e '\thostname = '\"$domain\" >> $YADDNS_CONF echo \} >> $YADDNS_CONF fi done } if [ "$INTERFACE" = "wan" ] && [ "$ACTION" = "ifup" ] then prepare_yaddns_conf pid=`pidof yaddns` if [ -z "$pid" ]; then yaddns -f $YADDNS_CONF -p $YADDNS_PID -D else kill -HUP $pid fi fi