#!/usr/bin/env bash #--------------------------------------- #----------------------------- # Predifined Variables #----------------------------- #--------------------------------------- conf_file="/etc/ddclient.conf" ddclient_script="/usr/bin/ddclient" _SKIP_IP=false #--------------------------------------- #----------------------------- # Functions #----------------------------- #--------------------------------------- usage() { echo if [ -n "$1" ];then echo -e "Error: $1\n" fi echo -e "" echo -e "\tusage: `basename $0` < dyndns-name>\n" exit 1 } fatal(){ echo "" echo -e " [ Fatal ] $*" echo "" echo -e "\tScript terminated.." echo "" exit 1 } info (){ echo "" echo -e " [ Info ] $*" echo "" } ok (){ echo "" echo -e " [ Ok ] $*" echo "" } #--------------------------------------- #----------------------------- # Evaluate command line #----------------------------- #--------------------------------------- [ $# -eq "0" -o $# -gt "2" ] && usage "wrong number of arguments" DYNDNS_NAME=$1 #--------------------------------------- #----------------------------- # Some checks #----------------------------- #--------------------------------------- # - Only run ddclient, if it is installed # - if [[ ! -x "$ddclient_script" ]]; then fatal "Script '${ddclient_script}' not found!" fi # - Configuration present? # - if [[ ! -f "$conf_file" ]]; then fatal "ddclient Configuration '${conf_file}' not found!" fi # - Running on a terminal? # - if [[ -t 1 ]] ; then LOGGING=true else LOGGING=false fi # - Check, if ddclient uses a local interface (variable "if") # - # - if true, interface name will be stored into variable 'if' # - 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 fatal "No interface for dydns exists." fi else _SKIP_IP=true fi #--------------------------------------- #----------------------------- # Update DynDNS IP-Address if needed #----------------------------- #--------------------------------------- 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` if [ "X$PPP_REMOTE" != "X" -a "X$PPP_LOCAL" != "X" ] ; then DYNDNS_IP=`dig $DYNDNS_NAME +short` if [ "$DYNDNS_IP" != "$PPP_LOCAL" ] ; then # - Run ddclient with the IP address of the ppp device # - info "Try to update ip-adress entry at dyndns.org.." /usr/sbin/ddclient -syslog -ip $PPP_LOCAL else if $LOGGING ; then ok "DynDNS IP is up-to-date" fi fi fi else # - Load defaults source /etc/default/ddclient if $(ps -e f | grep -E "[[:digit:]]\ .*ddclient" | grep -q -v grep) || [[ "$run_daemon" = "true" ]]; then if $LOGGING ; then info "'ddclient' is configured to run as daemon. So nothing to do here." fi else if $LOGGING ; then info "Going to run '${ddclient_script}'.." fi /usr/sbin/ddclient -file $conf_file fi fi exit 0;