#!/bin/bash
FORCE=false
ENABLE_SENDMAIL=true
TO="user@yahoo.com"
FROM=user@yahoo.com
HOSTNAME="@"
DOMAINS=(
"site1.com"
"site2.com"
)
PASSWORDS=(
"xxxkey1"
"xxxkey2"
)
BASE_URL="https://dynamicdns.park-your-domain.com/update"
TMP_FILE=/tmp/dyndns_mail.txt
EMAIL_BODY=""
LOG=""
function log(){
echo $1
LOG+="$1\n"
}
function sendEmailsendNotification(){
if [ $ENABLE_SENDMAIL == true ]; then
SUBJECT="$1"
echo "Subject: $SUBJECT" > $TMP_FILE
echo "From: $FROM" >> $TMP_FILE
echo "To: $TO" >> $TMP_FILE
echo "" >> $TMP_FILE
echo -e $LOG >> $TMP_FILE
echo "" >> $TMP_FILE
if [ -f ./site.output ]; then
cat ./site.output >> $TMP_FILE
rm ./site.output
fi
cat $TMP_FILE |sendmail -t
rm $TMP_FILE
fi
}
log "-- Dynamic Ip Address Updater --"
log " "
CURRENT_IP=$(curl -s 'https://api.ipify.org')
if [[ $CURRENT_IP =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
log "CUR IP: $CURRENT_IP"
else
log "--> Failed to determine current IP"
sendEmailsendNotification "Dynamic DNS Update Failure"
exit
fi
DNS_IP=$(dig +short jmehan.com @resolver1.opendns.com)
if [[ $DNS_IP =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
log "DNS IP: $DNS_IP"
log " "
else
log "--> Failed to determine DNS IP for ${DOMAINS[$index]}"
sendEmailsendNotification "Dynamic DNS Update Failure"
exit 1
fi
NEEDS_UPDATING=false
FAILURE=false
log "Verifying Domain IPs"
for index in "${!DOMAINS[@]}"
do
if [ "$DNS_IP" != "$CURRENT_IP" ] || [ $FORCE == true ]; then
NEEDS_UPDATING=true
URL="${BASE_URL}?host=$HOSTNAME&domain=${DOMAINS[$index]}&password=${PASSWORDS[$index]}"
status_code=$(curl --write-out %{http_code} --silent --output site.output $URL)
if [[ "$status_code" -ne 200 ]] ; then
log "--> Error: StatusCode: $status_code"
sendEmailsendNotification "Dynamic DNS Update Failure"
exit 1
fi
success=$(cat site.output |grep "<ErrCount>0</ErrCount>" |wc -l)
if [[ "$success" -eq 1 ]] ; then
log "- SUCCESS [ $DNS_IP -> $CURRENT_IP ] ${DOMAINS[$index]}"
else
FAILURE=true
log "- FAILED ${DOMAINS[$index]}"
sendEmailsendNotification "Dynamic DNS Update Failure"
fi
fi
done
if [ $NEEDS_UPDATING == true ]; then
if [ $FAILURE == false ]; then
log "Done"
sendEmailsendNotification "Dynamic DNS Updated"
fi
else
log "- Nothing to Update"
log "Done"
fi |