#!/usr/bin/env bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin function usage() { echo if [ -n "$1" ];then echo -e "Error: $1\n" fi echo -e "" echo -e "\tusage: `basename $0` < dyndns-name>\n" exit 1 } [ $# -eq "0" -o $# -gt "2" ] && usage "wrong number of arguments" DYNDNS_NAME=$1 _SKIP_IP=false ## - only run ddclient, if it is installed ## - if [ ! -x "/usr/sbin/ddclient" ]; then exit 0 fi if [ -f "/etc/ddclient.conf" ]; then ## - read variable "if" from configurationd file "/etc/ddclient.conf" ## - eval `sed -n 's/\(if=[^ ,]*\)/\1/p' /etc/ddclient.conf` ## - check if interface used by dyndns is present ## if [ -n "$if" ];then for _IFACE in `ifconfig | grep -e"^ppp" | cut -d" " -f1 `; do if [ "$_IFACE" = $if ];then PPP_IFACE=$_IFACE break fi done ## - exit if no connection for dydns interface exists ## - if [ "X" = "X$PPP_IFACE" ]; then echo "No interface for dydns exists. exiting now.." exit 0 fi else _SKIP_IP=true fi else ## - No configuration file found, so do not run ## - echo "No configuration file \"/etc/ddclient.conf\" found, so do not run" exit 0 fi if ! $_SKIP_IP ; then PPP_REMOTE=`ifconfig $PPP_IFACE 2>/dev/null | grep -e "P-[tz]-P" | cut -d":" -f3 | cut -d " " -f1` PPP_LOCAL=`ifconfig $PPP_IFACE 2>/dev/null | grep -e "P-[tz]-P" | cut -d":" -f2 | cut -d " " -f1` fi if [ "X$PPP_REMOTE" != "X" -a "X$PPP_LOCAL" != "X" ] ; then if $_SKIP_IP ; then # Load defaults if [ -f /etc/default/ddclient ]; then source /etc/default/ddclient if [ "$run_daemon" = "true" ]; then exit 0 fi fi /usr/sbin/ddclient else DYNDNS_IP=`dig $DYNDNS_NAME +short` #echo "$DYNDNS_NAME: $DYNDNS_IP - Local (PPP) IP: $PPP_LOCAL" if [ "$DYNDNS_IP" != "$PPP_LOCAL" ] ; then ## - Run ddclient with the IP address of the ppp device ## - echo "try to update ipadress entry at dyndns.org.." echo /usr/sbin/ddclient -syslog -ip $PPP_LOCAL fi fi fi exit 0;