From 10127f462e8b6f846c977fe5557bd8c9a37d8be7 Mon Sep 17 00:00:00 2001 From: Stefan Bader Date: Fri, 26 Dec 2014 00:28:50 +0100 Subject: [PATCH] added support for mx records: set MX=YES in your .config file if the DOMAIN specified in the .config file is actually an mx record. currently only supported when using nslookup and not drill. added SILENT mode: if SILENT is set to NO the output and the logmessages remain the same. if SILENT is set to something else than NO or not set then neither will there be an output nor a log message as long as the ip-address doesn't change --- nsupdate.d/sample.config.dist | 3 ++- nsupdate.sh | 35 +++++++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/nsupdate.d/sample.config.dist b/nsupdate.d/sample.config.dist index 6861db9..92b6690 100755 --- a/nsupdate.d/sample.config.dist +++ b/nsupdate.d/sample.config.dist @@ -6,6 +6,7 @@ IP_CHECK_SITE="http://ip.dblx.io" # use drill instead of nslookup for hostname lookup USE_DRILL="YES" IPV6="NO" +MX="NO" # Login credentials for the inwx admin interface INWX_USER="USERNAME" @@ -14,4 +15,4 @@ INWX_PASS="PASSWORD" # The hostname that you want to update and it's ID from the inwx interface # You get the ID when you edit the given nameserver entry and hover the save button. DOMAIN="DOMAIN" -INWX_DOMAIN_ID="123456789" \ No newline at end of file +INWX_DOMAIN_ID="123456789" diff --git a/nsupdate.sh b/nsupdate.sh index f9f9e3b..252680c 100755 --- a/nsupdate.sh +++ b/nsupdate.sh @@ -1,4 +1,4 @@ -#!/usr/local/bin/bash +#!/bin/bash # Update a nameserver entry at inwx with the current WAN IP (DynDNS) @@ -25,17 +25,24 @@ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. LOG=$0.log - +SILENT=NO # Loop through configs for f in $(dirname $0)/nsupdate.d/*.config do - echo "Starting nameserver update with config file $f" + if [ "$SILENT" == "NO" ]; then + echo "Starting nameserver update with config file $f" + fi ## Set record type to IPv4 TYPE=A CONNECTION_TYPE=4 source $f + ## Set record type to MX + if [[ "$MX" == "YES" ]]; then + TYPE=MX + fi + ## Set record type to IPv6 if [[ "$IPV6" == "YES" ]]; then TYPE=AAAA @@ -43,14 +50,25 @@ do fi if [[ "$USE_DRILL" == "YES" ]]; then - NSLOOKUP=$(drill $DOMAIN @ns.inwx.de $TYPE | head -7 | tail -1 | awk '{print $5}') + if [[ "$TYPE" == "MX" ]]; then + echo looking up MX records with drill currently not supported! + exit 1; + else + NSLOOKUP=$(drill $DOMAIN @ns.inwx.de $TYPE | head -7 | tail -1 | awk '{print $5}') + fi else - NSLOOKUP=$(nslookup -sil -type=$TYPE $DOMAIN - ns.inwx.de | tail -2 | head -1 | cut -d' ' -f2) + if [[ "$TYPE" == "MX" ]]; then + PART_NSLOOKUP=$(nslookup -sil -type=$TYPE $DOMAIN - ns.inwx.de | tail -2 | head -1 | cut -d' ' -f5) + NSLOOKUP=${PART_NSLOOKUP%"."} + else + NSLOOKUP=$(nslookup -sil -type=$TYPE $DOMAIN - ns.inwx.de | tail -2 | head -1 | cut -d' ' -f2) + fi fi # WAN_IP=`curl -s -$CONNECTION_TYPE ${IP_CHECK_SITE}| grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'` WAN_IP=`curl -s -$CONNECTION_TYPE ${IP_CHECK_SITE}` + API_XML=" nameserver.updateRecord @@ -87,19 +105,20 @@ do " - + if [ ! "$NSLOOKUP" == "$WAN_IP" ]; then curl -silent -v -XPOST -H"Content-Type: application/xml" -d "$API_XML" https://api.domrobot.com/xmlrpc/ echo "$(date) - $DOMAIN updated. Old IP: "$NSLOOKUP "New IP: "$WAN_IP >> $LOG - else + elif [ "$SILENT" == "NO" ]; then echo "$(date) - No update needed for $DOMAIN. Current IP: "$NSLOOKUP >> $LOG fi unset DOMAIN unset IPV6 + unset MX unset WAN_IP unset NSLOOKUP unset INWX_PASS unset INWX_USER unset INWX_DOMAIN_ID -done \ No newline at end of file +done