]> git.ipfire.org Git - oddments/ddns.git/blobdiff - src/ddns/providers.py
Merge remote-tracking branch 'stevee/fixes'
[oddments/ddns.git] / src / ddns / providers.py
index a36651ede616914431534f0f78e4865dc3568281..b0443a1a0d77f99a13de4da4851d0339e12fe0ac 100644 (file)
@@ -129,12 +129,16 @@ class DDNSProvider(object):
 
                # 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.debug(_("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
 
@@ -316,6 +320,11 @@ class DDNSProviderBindNsupdate(DDNSProvider):
                if server:
                        scriptlet.append("server %s" % server)
 
+               # Set the DNS zone the host should be added to.
+               zone = self.get("zone", None)
+               if zone:
+                       scriptlet.append("zone %s" % zone)
+
                key = self.get("key", None)
                if key:
                        secret = self.get("secret")
@@ -509,12 +518,14 @@ class DDNSProviderDynU(DDNSProtocolDynDNS2, DDNSProvider):
        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({
-                       "myipv6"   : self.get_address("ipv6"),
-               })
+               myipv6 = self.get_address("ipv6")
+
+               # Add update information if we have an IPv6 address.
+               if myipv6:
+                       data["myipv6"] = myipv6
 
                return data
 
@@ -532,6 +543,17 @@ class DDNSProviderEasyDNS(DDNSProtocolDynDNS2, DDNSProvider):
        url = "http://api.cp.easydns.com/dyn/tomato.php"
 
 
+class DDNSProviderDomopoli(DDNSProtocolDynDNS2, DDNSProvider):
+       handle    = "domopoli.de"
+       name      = "domopoli.de"
+       website   = "http://domopoli.de/"
+       protocols = ("ipv4",)
+
+       # https://www.domopoli.de/?page=howto#DynDns_start
+
+       url = "http://dyndns.domopoli.de/nic/update"
+
+
 class DDNSProviderEnomCom(DDNSResponseParserXML, DDNSProvider):
        handle    = "enom.com"
        name      = "eNom Inc."
@@ -594,7 +616,7 @@ class DDNSProviderEntryDNS(DDNSProvider):
 
                # Send update to the server.
                try:
-                       response = self.send_request(url, method="PUT", data=data)
+                       response = self.send_request(url, data=data)
 
                # Handle error codes
                except urllib2.HTTPError, e:
@@ -812,6 +834,30 @@ class DDNSProviderNsupdateINFO(DDNSProtocolDynDNS2, DDNSProvider):
                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"
@@ -915,7 +961,7 @@ class DDNSProviderSelfhost(DDNSProtocolDynDNS2, DDNSProvider):
        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",
                })