gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r22344 - gnunet/src/gns


From: gnunet
Subject: [GNUnet-SVN] r22344 - gnunet/src/gns
Date: Wed, 27 Jun 2012 14:00:59 +0200

Author: schanzen
Date: 2012-06-27 14:00:59 +0200 (Wed, 27 Jun 2012)
New Revision: 22344

Modified:
   gnunet/src/gns/gnunet-service-gns.c
Log:
-add af check

Modified: gnunet/src/gns/gnunet-service-gns.c
===================================================================
--- gnunet/src/gns/gnunet-service-gns.c 2012-06-27 11:49:24 UTC (rev 22343)
+++ gnunet/src/gns/gnunet-service-gns.c 2012-06-27 12:00:59 UTC (rev 22344)
@@ -187,6 +187,12 @@
 /* name of the public zone */
 static char *shorten_zone_id;
 
+/* ipv6 support */
+static int v6_enabled;
+
+/* ipv4 support */
+static int v4_enabled;
+
 /**
  * Continue shutdown
  */
@@ -944,6 +950,26 @@
     return;
   }
 
+  if ((clh->type == GNUNET_GNS_RECORD_TYPE_A) &&
+      (GNUNET_OK != v4_enabled))
+  {
+    GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
+               "LOOKUP: Query for A record but AF_INET not supported!");
+    clh->name = NULL;
+    send_lookup_response(clh, 0, NULL);
+    return;
+  }
+  
+  if ((clh->type == GNUNET_GNS_RECORD_AAAA) &&
+      (GNUNET_OK != v6_enabled))
+  {
+    GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
+               "LOOKUP: Query for AAAA record but AF_INET6 not supported!");
+    clh->name = NULL;
+    send_lookup_response(clh, 0, NULL);
+    return;
+  }
+  
   if (1 == ntohl(sh_msg->use_default_zone))
     clh->zone = zone_hash; //Default zone
   else
@@ -967,7 +993,28 @@
   }
 }
 
+/**
+ * Test if the given AF is supported by this system.
+ *
+ * @param af to test
+ * @return GNUNET_OK if the AF is supported
+ */
+static int
+test_af (int af)
+{
+  int s;
 
+  s = socket (af, SOCK_STREAM, 0);
+  if (-1 == s)
+  {
+    if (EAFNOSUPPORT == errno)
+      return GNUNET_NO;
+    fprintf (stderr, "Failed to create test socket: %s\n", STRERROR (errno));
+    return GNUNET_SYSERR;
+  }
+  close (s);
+  return GNUNET_OK;
+}
 
 /**
  * Process GNS requests.
@@ -997,6 +1044,9 @@
 
   GNS_cfg = c;
 
+  v6_enabled = test_af (AF_INET6);
+  v4_enabled = test_af (AF_INET);
+
   if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (c, "gns",
                                              "ZONEKEY", &keyfile))
   {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]