#!/bin/bash

RUTA_LOGS="/var/www/ddns/log/ddns_rename_host.log"

if [ ! -f "$RUTA_LOGS" ]; then
    echo 0 > "$RUTA_LOGS"
fi

OLD_FQDN="$1"
NEW_FQDN="$2"
IP="$3"
ZONE="$4"

url_decode() {
    printf '%b' "$(echo "$1" | sed 's/+/ /g;s/%\([0-9A-Fa-f][0-9A-Fa-f]\)/\\x\1/g')"
}

OLD_FQDN=$(url_decode "$OLD_FQDN")
NEW_FQDN=$(url_decode "$NEW_FQDN")
IP=$(url_decode "$IP")
ZONE=$(url_decode "$ZONE")

if [ -z "$OLD_FQDN" ] || [ -z "$NEW_FQDN" ] || [ -z "$IP" ] || [ -z "$ZONE" ]; then
    echo "$(date) - Error: parametros incompletos para renombrar host." >> "$RUTA_LOGS"
    printf '2\n'
    exit 0
fi

SERVER="localhost"
DNS_KEY="/var/www/ddns/cgi/ddns.key"

echo "$(date) - Rename DNS solicitado: $OLD_FQDN -> $NEW_FQDN ($IP) [zona: $ZONE]" >> "$RUTA_LOGS"

nsupdate -k "$DNS_KEY" <<EOF >> "$RUTA_LOGS" 2>&1
server $SERVER
zone $ZONE
update delete $OLD_FQDN A
update delete $NEW_FQDN A
update add $NEW_FQDN 300 A $IP
send
EOF

if [ $? -eq 0 ]; then
    echo "$(date) - Rename DNS exitoso: $OLD_FQDN -> $NEW_FQDN ($IP)" >> "$RUTA_LOGS"
    printf '1\n'
else
    echo "$(date) - Error: nsupdate fallo para rename DNS: $OLD_FQDN -> $NEW_FQDN ($IP)" >> "$RUTA_LOGS"
    printf '2\n'
fi
