From: Michael Tremer Date: Mon, 16 Jun 2014 09:47:33 +0000 (+0200) Subject: Merge remote-tracking branch 'stevee/freedns.afraid.org' X-Git-Tag: 001~46 X-Git-Url: http://git.ipfire.org/?p=oddments%2Fddns.git;a=commitdiff_plain;h=68fce572223e618c85e2aba1f15b96f26d04db91 Merge remote-tracking branch 'stevee/freedns.afraid.org' Conflicts: ddns.conf.sample src/ddns/__init__.py src/ddns/providers.py --- 68fce572223e618c85e2aba1f15b96f26d04db91 diff --cc ddns.conf.sample index bb0e839,bf31b59..888137e --- a/ddns.conf.sample +++ b/ddns.conf.sample @@@ -29,11 -29,11 +29,16 @@@ # provider = dtdns.org # password = pass +# [test.dyndns.org] +# provider = dnydns.org +# username = user +# password = pass + + # [test.freedns.afraid.org] + # provider = freedns.afraid.org + # token = token + # proto = ipv4 OR ipv6 + # [test.no-ip.org] # provider = no-ip.com # username = user diff --cc src/ddns/__init__.py index 5172832,8af99d7..494bf76 --- a/src/ddns/__init__.py +++ b/src/ddns/__init__.py @@@ -94,7 -94,7 +94,8 @@@ class DDNSCore(object) DDNSProviderDHS, DDNSProviderDNSpark, DDNSProviderDtDNS, + DDNSProviderDynDNS, + DDNSProviderFreeDNSAfraidOrg, DDNSProviderNOIP, DDNSProviderLightningWireLabs, DDNSProviderSelfhost, diff --cc src/ddns/providers.py index 8a5185f,cbbeeea..919642f --- a/src/ddns/providers.py +++ b/src/ddns/providers.py @@@ -258,7 -275,7 +265,6 @@@ class DDNSProviderDtDNS(DDNSProvider) # http://www.dtdns.com/dtsite/updatespec url = "https://www.dtdns.com/api/autodns.cfm" -- def update(self): data = { "ip" : self.get_address("ipv4"), @@@ -302,54 -319,52 +308,93 @@@ 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 DDNSProviderFreeDNSAfraidOrg(DDNSProvider): + INFO = { + "handle" : "freedns.afraid.org", + "name" : "freedns.afraid.org", + "website" : "http://freedns.afraid.org/", + "protocols" : ["ipv6", "ipv4",] + } + + # No information about the request or response could be found on the vendor + # page. All used values have been collected by testing. + url = "https://freedns.afraid.org/dynamic/update.php" + + @property + def proto(self): + return self.get("proto") + + def update(self): + address = self.get_address(self.proto) + + data = { + "address" : address, + } + + # Add auth token to the update url. + url = "%s?%s" % (self.url, self.token) + + # Send update to the server. + response = self.send_request(url, data=data) + - # Get the full response message. - output = response.read() - - # Handle success messages. + if output.startswith("Updated") or "has not changed" in output: + return + + # Handle error codes. + if output == "ERROR: Unable to locate this record": + raise DDNSAuthenticationError + elif "is an invalid IP address" in output: + raise DDNSRequestError(_("Invalid IP address has been sent.")) + - # If we got here, some other update error happened. - raise DDNSUpdateError - + class DDNSProviderLightningWireLabs(DDNSProvider): INFO = { "handle" : "dns.lightningwirelabs.com",