# Check if we actually need to update this host.
elif self.is_uptodate(self.protocols):
- logger.debug(_("%s is already up to date") % self.hostname)
+ logger.info(_("The dynamic host %(hostname)s (%(provider)s) is already up to date") % \
+ { "hostname" : self.hostname, "provider" : self.name })
return
# Execute the update.
self.update()
+ logger.info(_("Dynamic DNS update for %(hostname)s (%(provider)s) successful") % \
+ { "hostname" : self.hostname, "provider" : self.name })
+
def update(self):
raise NotImplementedError
url = "https://api.dynu.com/nic/update"
def _prepare_request_data(self):
- data = DDNSProviderDynDNS._prepare_request_data(self)
+ data = DDNSProtocolDynDNS2._prepare_request_data(self)
# This one supports IPv6
data.update({
raise DDNSUpdateError
+class DDNSProviderEntryDNS(DDNSProvider):
+ handle = "entrydns.net"
+ name = "EntryDNS"
+ website = "http://entrydns.net/"
+ protocols = ("ipv4",)
+
+ # Some very tiny details about their so called "Simple API" can be found
+ # here: https://entrydns.net/help
+ url = "https://entrydns.net/records/modify"
+
+ def update(self):
+ data = {
+ "ip" : self.get_address("ipv4")
+ }
+
+ # Add auth token to the update url.
+ url = "%s/%s" % (self.url, self.token)
+
+ # Send update to the server.
+ try:
+ response = self.send_request(url, method="PUT", data=data)
+
+ # Handle error codes
+ except urllib2.HTTPError, e:
+ if e.code == 404:
+ raise DDNSAuthenticationError
+
+ elif e.code == 422:
+ raise DDNSRequestError(_("An invalid IP address was submitted"))
+
+ raise
+
+ # Handle success messages.
+ if response.code == 200:
+ return
+
+ # If we got here, some other update error happened.
+ raise DDNSUpdateError
+
+
class DDNSProviderFreeDNSAfraidOrg(DDNSProvider):
handle = "freedns.afraid.org"
name = "freedns.afraid.org"
# 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
return data
+class DDNSProviderOpenDNS(DDNSProtocolDynDNS2, DDNSProvider):
+ handle = "opendns.com"
+ name = "OpenDNS"
+ website = "http://www.opendns.com"
+
+ # Detailed information about the update request and possible
+ # response codes can be obtained from here:
+ # https://support.opendns.com/entries/23891440
+
+ url = "https://updates.opendns.com/nic/update"
+
+ @property
+ def proto(self):
+ return self.get("proto")
+
+ def _prepare_request_data(self):
+ data = {
+ "hostname" : self.hostname,
+ "myip" : self.get_address(self.proto)
+ }
+
+ return data
+
+
class DDNSProviderOVH(DDNSProtocolDynDNS2, DDNSProvider):
handle = "ovh.com"
name = "OVH"
url = "https://carol.selfhost.de/nic/update"
def _prepare_request_data(self):
- data = DDNSProviderDynDNS._prepare_request_data(self)
+ data = DDNSProtocolDynDNS2._prepare_request_data(self)
data.update({
"hostname" : "1",
})