config file checks and sample config

Changed the way the existence of config files is checked. It may be a
bit slower than before when there are many config files but maybe it
avoids other trouble.
Updated the sample config.
This commit is contained in:
Christian Busch 2015-07-22 21:50:01 +02:00
parent 1684ab6599
commit ea6830ed92
2 changed files with 108 additions and 104 deletions

View File

@ -5,9 +5,16 @@ IP_CHECK_SITE="https://ip.dblx.io"
# use drill instead of nslookup for hostname lookup # use drill instead of nslookup for hostname lookup
USE_DRILL="YES" USE_DRILL="YES"
# Use IPv6 connection
IPV6="NO" IPV6="NO"
# Update an MX record
MX="NO" MX="NO"
# Suppress all messages
SILENT=NO
# Login credentials for the inwx admin interface # Login credentials for the inwx admin interface
INWX_USER="USERNAME" INWX_USER="USERNAME"
INWX_PASS='PASSWORD' INWX_PASS='PASSWORD'

View File

@ -24,116 +24,113 @@
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
################## # check required tools
# check required #
##################
command -v curl >/dev/null 2>&1 || { echo >&2 "I require curl but it's not installed. Note: all needed items are listed in the README.md file."; exit 1; } command -v curl >/dev/null 2>&1 || { echo >&2 "I require curl but it's not installed. Note: all needed items are listed in the README.md file."; exit 1; }
command -v awk >/dev/null 2>&1 || { echo >&2 "I require awk but it's not installed. Note: all needed items are listed in the README.md file."; exit 1; } command -v awk >/dev/null 2>&1 || { echo >&2 "I require awk but it's not installed. Note: all needed items are listed in the README.md file."; exit 1; }
command -v drill >/dev/null 2>&1 || command -v nslookup >/dev/null 2>&1 || { echo >&2 "I need drill or nslookup installed. Note: all needed items are listed in the README.md file."; exit 1; } command -v drill >/dev/null 2>&1 || command -v nslookup >/dev/null 2>&1 || { echo >&2 "I need drill or nslookup installed. Note: all needed items are listed in the README.md file."; exit 1; }
##################
# check config #
##################
configfiles=$(shopt -s nullglob dotglob; echo nsupdate.d/*.config)
if (( ! ${#configfiles} ));then
echo "There does not seem to be any config file available." ; exit 1;
fi
##################
LOG=$0.log LOG=$0.log
SILENT=NO SILENT=NO
# Loop through configs
for f in $(dirname $0)/nsupdate.d/*.config
do
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 # Check if there are any usable config files
if ls $(dirname $0)/nsupdate.d/*.config 1> /dev/null 2>&1; then
## Set record type to MX # Loop through configs
if [[ "$MX" == "YES" ]]; then for f in $(dirname $0)/nsupdate.d/*.config
TYPE=MX do
fi if [ "$SILENT" == "NO" ]; then
echo "Starting nameserver update with config file $f"
fi
## Set record type to IPv4
TYPE=A
CONNECTION_TYPE=4
## Set record type to IPv6 source $f
if [[ "$IPV6" == "YES" ]]; then
TYPE=AAAA
CONNECTION_TYPE=6
fi
if [[ "$USE_DRILL" == "YES" ]]; then ## Set record type to MX
if [[ "$TYPE" == "MX" ]]; then if [[ "$MX" == "YES" ]]; then
echo looking up MX records with drill currently not supported! TYPE=MX
exit 1; fi
else
NSLOOKUP=$(drill $DOMAIN @ns.inwx.de $TYPE | head -7 | tail -1 | awk '{print $5}') ## Set record type to IPv6
fi if [[ "$IPV6" == "YES" ]]; then
else TYPE=AAAA
if [[ "$TYPE" == "MX" ]]; then CONNECTION_TYPE=6
PART_NSLOOKUP=$(nslookup -sil -type=$TYPE $DOMAIN - ns.inwx.de | tail -2 | head -1 | cut -d' ' -f5) fi
NSLOOKUP=${PART_NSLOOKUP%"."}
if [[ "$USE_DRILL" == "YES" ]]; then
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 else
NSLOOKUP=$(nslookup -sil -type=$TYPE $DOMAIN - ns.inwx.de | tail -2 | head -1 | cut -d' ' -f2) if [[ "$TYPE" == "MX" ]]; then
fi PART_NSLOOKUP=$(nslookup -sil -type=$TYPE $DOMAIN - ns.inwx.de | tail -2 | head -1 | cut -d' ' -f5)
fi 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}| grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'`
WAN_IP=`curl -s -$CONNECTION_TYPE ${IP_CHECK_SITE}` WAN_IP=`curl -s -$CONNECTION_TYPE ${IP_CHECK_SITE}`
API_XML="<?xml version=\"1.0\"?> API_XML="<?xml version=\"1.0\"?>
<methodCall> <methodCall>
<methodName>nameserver.updateRecord</methodName> <methodName>nameserver.updateRecord</methodName>
<params> <params>
<param> <param>
<value> <value>
<struct> <struct>
<member> <member>
<name>user</name> <name>user</name>
<value> <value>
<string>$INWX_USER</string> <string>$INWX_USER</string>
</value> </value>
</member> </member>
<member> <member>
<name>pass</name> <name>pass</name>
<value> <value>
<string>$INWX_PASS</string> <string>$INWX_PASS</string>
</value> </value>
</member> </member>
<member> <member>
<name>id</name> <name>id</name>
<value> <value>
<int>$INWX_DOMAIN_ID</int> <int>$INWX_DOMAIN_ID</int>
</value> </value>
</member> </member>
<member> <member>
<name>content</name> <name>content</name>
<value> <value>
<string>$WAN_IP</string> <string>$WAN_IP</string>
</value> </value>
</member> </member>
</struct> </struct>
</value> </value>
</param> </param>
</params> </params>
</methodCall>" </methodCall>"
if [ ! "$NSLOOKUP" == "$WAN_IP" ]; then if [ ! "$NSLOOKUP" == "$WAN_IP" ]; then
curl -silent -v -XPOST -H"Content-Type: application/xml" -d "$API_XML" https://api.domrobot.com/xmlrpc/ 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 echo "$(date) - $DOMAIN updated. Old IP: "$NSLOOKUP "New IP: "$WAN_IP >> $LOG
elif [ "$SILENT" == "NO" ]; then elif [ "$SILENT" == "NO" ]; then
echo "$(date) - No update needed for $DOMAIN. Current IP: "$NSLOOKUP >> $LOG echo "$(date) - No update needed for $DOMAIN. Current IP: "$NSLOOKUP >> $LOG
fi fi
unset DOMAIN unset DOMAIN
unset IPV6 unset IPV6
unset MX unset MX
unset WAN_IP unset WAN_IP
unset NSLOOKUP unset NSLOOKUP
unset INWX_PASS unset INWX_PASS
unset INWX_USER unset INWX_USER
unset INWX_DOMAIN_ID unset INWX_DOMAIN_ID
done done
else
echo "There does not seem to be any config file available in $(dirname $0)/nsupdate.d/." ; exit 1;
fi