(no commit message)
authorMatthias Wachs <wachs@net.in.tum.de>
Thu, 22 Apr 2010 11:18:48 +0000 (11:18 +0000)
committerMatthias Wachs <wachs@net.in.tum.de>
Thu, 22 Apr 2010 11:18:48 +0000 (11:18 +0000)
src/util/resolver_api.c
src/util/test_resolver_api.c

index f4844a490ef8aec20bd0ca0506033cbb529a4018..6d874cce8f6988f90758e6f4c7ac484064b9c275 100644 (file)
@@ -692,6 +692,38 @@ GNUNET_RESOLVER_local_hostname_get ( )
   return GNUNET_strdup (hostname);
 }
 
+/**
+ * Get local fully qualified domain name
+ * @return fqdn
+ */
+char *
+GNUNET_RESOLVER_local_fqdn_get ( void )
+{
+  struct hostent *host;
+  char hostname[GNUNET_OS_get_hostname_max_length() + 1];
+
+
+  if (0 != gethostname (hostname, sizeof (hostname) - 1))
+    {
+      GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR |
+                           GNUNET_ERROR_TYPE_BULK, "gethostname");
+      return NULL;
+    }
+#if DEBUG_RESOLVER
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              _("Resolving our FQDN `%s'\n"), hostname);
+#endif
+  host = gethostbyname ( hostname );
+  if ( NULL == host)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                _("Could not resolve our FQDN : %s\n"),
+                hstrerror (h_errno));
+    return NULL;
+  }
+  return GNUNET_strdup (host->h_name);
+}
+
 /**
  * Looking our own hostname.
  *
index af8ecdeec89c496acb459fd36b90654a626860b9..d0831bf498999e0adf96d3f71d2b1d180ebdaae6 100644 (file)
@@ -127,6 +127,44 @@ check_127(void *cls, const struct sockaddr *sa, socklen_t salen)
     }
 }
 
+static void
+check_local_fqdn(void *cls, const char *gnunet_fqdn)
+{
+  int result = 0;
+
+  struct hostent *host;
+  char hostname[GNUNET_OS_get_hostname_max_length() + 1];
+
+  if (0 != gethostname (hostname, sizeof (hostname) - 1))
+    {
+      GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR |
+                           GNUNET_ERROR_TYPE_BULK, "gethostname");
+      return NULL;
+    }
+#if DEBUG_RESOLVER
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              _("Resolving our FQDN `%s'\n"), hostname);
+#endif
+  host = gethostbyname ( hostname );
+  if ( NULL == host)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                _("Could not resolve our FQDN : %s %u\n"),
+                hstrerror (h_errno), h_errno);
+    return NULL;
+  }
+
+  GNUNET_assert( 0 != host);
+
+  result = strcmp(host->h_name, gnunet_fqdn);
+  if ( 0 != result )
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+        "Local resolved and resolver resolved fqdns are not equal\n");
+  }
+  GNUNET_assert( 0 == result);
+}
+
 static void
 check_local_hostname(void *cls, const char *hostname)
 {
@@ -219,6 +257,7 @@ run(void *cls, struct GNUNET_SCHEDULER_Handle *sched, char * const *args,
       GNUNET_TIME_UNIT_MILLISECONDS, 2500);
   int count_ips = 0;
   char * own_hostname;
+  char * own_fqdn;
 
   memset(&sa, 0, sizeof(sa));
   sa.sin_family = AF_INET;
@@ -239,6 +278,13 @@ run(void *cls, struct GNUNET_SCHEDULER_Handle *sched, char * const *args,
   check_local_hostname( NULL, own_hostname);
   GNUNET_free (own_hostname);
 
+  /*
+   * Looking up our own fqdn
+   */
+  own_fqdn = GNUNET_RESOLVER_local_fqdn_get();
+  check_local_fqdn( NULL, own_fqdn);
+  GNUNET_free_non_null (own_fqdn);
+
   /*
    * Testing non-local DNS resolution
    * DNS rootserver to test: a.root-servers.net - 198.41.0.4