From bfed6701c10d1ba7370a275cc0f43cf2b72fd32b Mon Sep 17 00:00:00 2001 From: Stefan Schantl Date: Sat, 14 Jun 2014 18:50:32 +0200 Subject: [PATCH] Add DynDNS as new provider. --- ddns.conf.sample | 5 +++++ src/ddns/__init__.py | 1 + src/ddns/providers.py | 48 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/ddns.conf.sample b/ddns.conf.sample index 9ac67e4..bb0e839 100644 --- a/ddns.conf.sample +++ b/ddns.conf.sample @@ -29,6 +29,11 @@ # provider = dtdns.org # password = pass +# [test.dyndns.org] +# provider = dnydns.org +# username = user +# password = pass + # [test.no-ip.org] # provider = no-ip.com # username = user diff --git a/src/ddns/__init__.py b/src/ddns/__init__.py index e728c37..5172832 100644 --- a/src/ddns/__init__.py +++ b/src/ddns/__init__.py @@ -94,6 +94,7 @@ class DDNSCore(object): DDNSProviderDHS, DDNSProviderDNSpark, DDNSProviderDtDNS, + DDNSProviderDynDNS, DDNSProviderNOIP, DDNSProviderLightningWireLabs, DDNSProviderSelfhost, diff --git a/src/ddns/providers.py b/src/ddns/providers.py index 2788c97..545e731 100644 --- a/src/ddns/providers.py +++ b/src/ddns/providers.py @@ -312,6 +312,54 @@ class DDNSProviderDtDNS(DDNSProvider): raise DDNSUpdateError +class DDNSProviderDynDNS(DDNSProvider): + INFO = { + "handle" : "dyndns.org", + "name" : "Dyn", + "website" : "http://dyn.com/dns/", + "protocols" : ["ipv4",] + } + + # Information about the format of the request is to be found + # http://http://dyn.com/support/developers/api/perform-update/ + # http://dyn.com/support/developers/api/return-codes/ + url = "https://members.dyndns.org/nic/update" + + def update(self): + data = { + "hostname" : self.hostname, + "myip" : self.get_address("ipv4"), + } + + # Send update to the server. + response = self.send_request(self.url, username=self.username, password=self.password, + data=data) + + # Get the full response message. + output = response.read() + + # Handle success messages. + if output.startswith("good") or output.startswith("nochg"): + return + + # Handle error codes. + if output == "badauth": + raise DDNSAuthenticationError + elif output == "aduse": + raise DDNSAbuseError + elif output == "notfqdn": + raise DDNSRequestError(_("No valid FQDN was given.")) + elif output == "nohost": + raise DDNSRequestError(_("Specified host does not exist.")) + elif output == "911": + raise DDNSInternalServerError + elif output == "dnserr": + raise DDNSInternalServerError(_("DNS error encountered.")) + + # If we got here, some other update error happened. + raise DDNSUpdateError + + class DDNSProviderLightningWireLabs(DDNSProvider): INFO = { "handle" : "dns.lightningwirelabs.com", -- 2.39.2