ownDynDNS - Self-hosted dynamic DNS php script for Speedport Smart 4 and netcup DNS API

git clone git://git.bcharge.de/ownDynDNS.git

About | Log | Files | Refs | License

commit c2d7c114d68f007480d4d0fe34ffed66b9c473a4
parent eb34f44292f894d01f2f77c71a5e0bb2e51ab44b
Author: Felix Kretschmer <5871630+fernwerker@users.noreply.github.com>
Date:   Sun, 10 Nov 2019 19:00:12 +0100

Merge pull request #8 from b2un0/master

* ad ability to update also wildcard record
Diffstat:
Mexamples/update-dyndns.sh | 7++++---
Msrc/Handler.php | 14+++++++-------
Msrc/Payload.php | 22++++++++++++++++++++++
3 files changed, 33 insertions(+), 10 deletions(-)

diff --git a/examples/update-dyndns.sh b/examples/update-dyndns.sh @@ -8,6 +8,7 @@ DOMAIN="my-home-nas.de" #DOMAIN="nas.my-home.de" SCRIPT="https://<url of your webspace>/update.php" FORCE=0 +MODE="both" # can be undefined, "@", "*" or "both" IPV4=$(curl -4 -q ident.me) IPV6=$(curl -6 -q ident.me) @@ -15,11 +16,11 @@ IPV6=$(curl -6 -q ident.me) echo ${IPV4} echo ${IPV6} -# PAYLOAD_IPV4="force=${FORCE}&user=${USER}&password=${PASS}&ipv4=${IPV4}&domain=${DOMAIN}" +# PAYLOAD_IPV4="force=${FORCE}&user=${USER}&password=${PASS}&ipv4=${IPV4}&domain=${DOMAIN}&mode=${MODE}" # curl -X POST --data "${PAYLOAD_IPV4}" ${SCRIPT} -# PAYLOAD_IPV6="force=${FORCE}&user=${USER}&password=${PASS}&ipv6=${IPV6}&domain=${DOMAIN}" +# PAYLOAD_IPV6="force=${FORCE}&user=${USER}&password=${PASS}&ipv6=${IPV6}&domain=${DOMAIN}&mode=${MODE"} # curl -X POST --data "${PAYLOAD_IPV6}" ${SCRIPT} -PAYLOAD_BOTH="force=${FORCE}&user=${USER}&password=${PASS}&ipv4=${IPV4}&ipv6=${IPV6}&domain=${DOMAIN}" +PAYLOAD_BOTH="force=${FORCE}&user=${USER}&password=${PASS}&ipv4=${IPV4}&ipv6=${IPV6}&domain=${DOMAIN}&mode=${MODE}" curl -X POST --data "${PAYLOAD_BOTH}" ${SCRIPT} diff --git a/src/Handler.php b/src/Handler.php @@ -75,11 +75,11 @@ final class Handler if (!$this->config->isLog()) { return; } - + if (!file_exists($this->config->getLogFile())) { - if (!touch($this->config->getLogFile())) { - printf('[ERROR] unable to create %s %s', $this->config->getLogFile(), PHP_EOL); - } + if (!touch($this->config->getLogFile())) { + printf('[ERROR] unable to create %s %s', $this->config->getLogFile(), PHP_EOL); + } } // save only the newest 100 log entries for each domain @@ -125,7 +125,7 @@ final class Handler $changes = false; foreach ($infoHandle->responsedata->dnsrecords as $key => $record) { - $recordHostnameReal = ($record->hostname !== '@') ? $record->hostname . '.' . $this->payload->getHostname() : $this->payload->getHostname(); + $recordHostnameReal = (!in_array($record->hostname, $this->payload->getMatcher())) ? $record->hostname . '.' . $this->payload->getHostname() : $this->payload->getHostname(); if ($recordHostnameReal === $this->payload->getDomain()) { @@ -137,7 +137,7 @@ final class Handler ) ) { $record->destination = $this->payload->getIpv4(); - $this->doLog(sprintf('IPv4 for %s set to %s', $recordHostnameReal, $this->payload->getIpv4())); + $this->doLog(sprintf('IPv4 for %s set to %s', $record->hostname . '.' . $this->payload->getHostname(), $this->payload->getIpv4())); $changes = true; } @@ -149,7 +149,7 @@ final class Handler ) ) { $record->destination = $this->payload->getIpv6(); - $this->doLog(sprintf('IPv6 for %s set to %s', $recordHostnameReal, $this->payload->getIpv6())); + $this->doLog(sprintf('IPv6 for %s set to %s', $record->hostname . '.' . $this->payload->getHostname(), $this->payload->getIpv6())); $changes = true; } } diff --git a/src/Payload.php b/src/Payload.php @@ -22,6 +22,11 @@ final class Payload /** * @var string */ + private $mode; + + /** + * @var string + */ private $ipv4; /** @@ -88,6 +93,23 @@ final class Payload } /** + * @return array + */ + public function getMatcher() + { + switch ($this->mode) { + case 'both': + return ['@', '*']; + + case '*': + return ['*']; + + default: + return ['@']; + } + } + + /** * there is no good way to get the correct "registrable" Domain without external libs! * * @see https://github.com/jeremykendall/php-domain-parser