--- opendd.c.orig	2010-09-17 21:10:03.000000000 +0200
+++ opendd.c	2010-09-17 21:10:05.000000000 +0200
@@ -527,32 +527,28 @@
  * @return int
  * -------------------------------------------------------------------------- */
  
-  option_type type;
   void *value = NULL;
-  struct sockaddr addr;
   
-  /* iface (mandatory) */
-  /* Get my IP from an interface */
-  value = get_option("iface", &type);
-  if (value == NULL) {
-    logmsg(LOG_ERR, "dyndns() : \"iface\" is mandatory !");
-    return 0;
-  }
-  switch(type) {
-  case OPTION_STRING:     
-    if (getaddrbyif((const char *)value, &addr)) {
-      *ip = strdup(inet_ntoa(((struct sockaddr_in *)&addr)->sin_addr));
+  struct in_addr in;
+  FILE *file;
+  char buffer[20];
+
+  /* Get my IP from an /tmp/.opendd.ip */
+  file = fopen("/tmp/.opendd.ip", "r");
+  if (NULL == file) {
+    logmsg(LOG_ERR, "dyndns() : Can't read external IP file!");
+    return 0;
+  }
+  fgets(buffer, sizeof(buffer), file);
+  fclose (file);
+  file = NULL;
+  if (inet_aton(buffer, &in)) {
+    *ip = strdup(inet_ntoa(in));
       if (*ip != NULL) {
         return 1;
       }
     }
-    else
-      logmsg(LOG_ERR, "dyndns() : Cannot find interface %s", (const char *)value);
-    break;
-  default:
-    logmsg(LOG_ERR, "dyndns() : \"iface\" is not a valid option !");
-    break;    
-  }
+  logmsg(LOG_ERR, "dyndns() : Can't determine external IP!");
   return 0;
 }
 
