]> git.ipfire.org Git - ddns.git/commitdiff
Silently fall back to the guess the IP address with a remote server
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 12 Aug 2015 00:06:43 +0000 (01:06 +0100)
committerStefan Schantl <stefan.schantl@ipfire.org>
Mon, 2 May 2016 19:44:30 +0000 (21:44 +0200)
For most OSes we do not implement a way to read the current IP
address from the local configuration. In that case ddns used to
throw an exception and stop. This patch changes that in the way
that ddns will fall back to guess the IP address with help
of a remote server.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
src/ddns/system.py

index 0d90ce66ee38e6d604420449aa2cfabdecb7ffc8..c268ba5cbae57dbbdd3aa1e1023ab96ca0cf41b1 100644 (file)
@@ -66,6 +66,13 @@ class DDNSSystem(object):
                return proxy
 
        def get_local_ip_address(self, proto):
+               ip_address = self._get_local_ip_address(proto)
+
+               # Check if the IP address is usable and only return it then
+               if self._is_usable_ip_address(proto, ip_address):
+                       return ip_address
+
+       def _get_local_ip_address(self, proto):
                # Legacy code for IPFire 2.
                if self.distro == "ipfire-2" and proto == "ipv4":
                        try:
@@ -281,16 +288,18 @@ class DDNSSystem(object):
                guess_ip = self.core.settings.get("guess_external_ip", "true")
                guess_ip = guess_ip in ("true", "yes", "1")
 
-               # If the external IP address should be used, we just do that.
-               if guess_ip:
-                       return self.guess_external_ip_address(proto)
-
                # Get the local IP address.
-               local_ip_address = self.get_local_ip_address(proto)
+               local_ip_address = None
+
+               if not guess_ip:
+                       try:
+                               local_ip_address = self.get_local_ip_address(proto)
+                       except NotImplementedError:
+                               logger.warning(_("Falling back to check the IP address with help of a public server"))
 
-               # If the local IP address is not usable, we must guess
-               # the correct IP address...
-               if not self._is_usable_ip_address(proto, local_ip_address):
+               # If no local IP address could be determined, we will fall back to the guess
+               # it with help of an external server...
+               if not local_ip_address:
                        local_ip_address = self.guess_external_ip_address(proto)
 
                return local_ip_address