gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r29666 - in gnunet/src: gns include namestore


From: gnunet
Subject: [GNUnet-SVN] r29666 - in gnunet/src: gns include namestore
Date: Fri, 27 Sep 2013 18:37:56 +0200

Author: grothoff
Date: 2013-09-27 18:37:56 +0200 (Fri, 27 Sep 2013)
New Revision: 29666

Modified:
   gnunet/src/gns/gnunet-gns.c
   gnunet/src/gns/gnunet-service-gns_interceptor.c
   gnunet/src/gns/gnunet-service-gns_resolver.c
   gnunet/src/gns/test_gns_ns_lookup.sh
   gnunet/src/include/gnunet_namestore_service.h
   gnunet/src/namestore/namestore_api_common.c
Log:
using DNS2GNS record type instead of recycling NS record type in GNS; fixing 
testcase by properly converting DNS records back to GNS blocks

Modified: gnunet/src/gns/gnunet-gns.c
===================================================================
--- gnunet/src/gns/gnunet-gns.c 2013-09-27 15:38:59 UTC (rev 29665)
+++ gnunet/src/gns/gnunet-gns.c 2013-09-27 16:37:56 UTC (rev 29666)
@@ -133,7 +133,7 @@
  *
  * @param cls the 'const char *' name that was resolved
  * @param rd_count number of records returned
- * @param rd array of 'rd_count' records with the results
+ * @param rd array of @a rd_count records with the results
  */
 static void
 process_lookup_result (void *cls, uint32_t rd_count,
@@ -155,10 +155,21 @@
   }
   for (i=0; i<rd_count; i++)
   {
+    if ( (rd[i].record_type != rtype) &&
+        (GNUNET_NAMESTORE_TYPE_ANY != rtype) )
+      continue;
     typename = GNUNET_NAMESTORE_number_to_typename (rd[i].record_type);
     string_val = GNUNET_NAMESTORE_value_to_string (rd[i].record_type,
                                                   rd[i].data,
                                                   rd[i].data_size);
+    if (NULL == string_val)
+    {
+      fprintf (stderr,
+              "Record %u of type %d malformed, skipping\n",
+              (unsigned int) i,
+              (int) rd[i].record_type);
+      continue;
+    }
     if (raw)
       printf ("%s\n", 
              string_val);
@@ -166,7 +177,7 @@
       printf ("Got `%s' record: %s\n",
              typename, 
              string_val);
-    GNUNET_free_non_null (string_val);
+    GNUNET_free (string_val);
   }
   GNUNET_SCHEDULER_shutdown ();
 }

Modified: gnunet/src/gns/gnunet-service-gns_interceptor.c
===================================================================
--- gnunet/src/gns/gnunet-service-gns_interceptor.c     2013-09-27 15:38:59 UTC 
(rev 29665)
+++ gnunet/src/gns/gnunet-service-gns_interceptor.c     2013-09-27 16:37:56 UTC 
(rev 29666)
@@ -135,13 +135,16 @@
        case GNUNET_DNSPARSER_TYPE_NS:
        case GNUNET_DNSPARSER_TYPE_CNAME:
        case GNUNET_DNSPARSER_TYPE_PTR:
+         // FIXME: NO! need to use DNSPARSER!
          answer_records[i].data.hostname = (char*)rd[i].data;
          break;
        case GNUNET_DNSPARSER_TYPE_SOA:
+         // FIXME: NO! need to use DNSPARSER!
          answer_records[i].data.soa =
            (struct GNUNET_DNSPARSER_SoaRecord *)rd[i].data;
          break;
        case GNUNET_DNSPARSER_TYPE_MX:
+         // FIXME: NO! need to use DNSPARSER!
          answer_records[i].data.mx =
            (struct GNUNET_DNSPARSER_MxRecord *)rd[i].data;
          break;
@@ -163,17 +166,21 @@
        case GNUNET_DNSPARSER_TYPE_NS:
        case GNUNET_DNSPARSER_TYPE_CNAME:
        case GNUNET_DNSPARSER_TYPE_PTR:
+         // FIXME: NO! need to use DNSPARSER!
          additional_records[i].data.hostname = (char*)rd[i].data;
          break;
        case GNUNET_DNSPARSER_TYPE_SOA:
+         // FIXME: NO! need to use DNSPARSER!
          additional_records[i].data.soa =
            (struct GNUNET_DNSPARSER_SoaRecord *)rd[i].data;
          break;
        case GNUNET_DNSPARSER_TYPE_MX:
+         // FIXME: NO! need to use DNSPARSER!
          additional_records[i].data.mx =
            (struct GNUNET_DNSPARSER_MxRecord *)rd[i].data;
          break;
        default:
+         // FIXME: NO! need to use DNSPARSER!
          additional_records[i].data.raw.data_len = rd[i].data_size;
          additional_records[i].data.raw.data = (char*)rd[i].data;
          break;
@@ -288,7 +295,7 @@
  *
  * @param gnu_zone the zone to work in
  * @param c the configuration
- * @return GNUNET_OK on success
+ * @return #GNUNET_OK on success
  */
 int
 GNS_interceptor_init (const struct GNUNET_CRYPTO_EccPublicSignKey *gnu_zone,

Modified: gnunet/src/gns/gnunet-service-gns_resolver.c
===================================================================
--- gnunet/src/gns/gnunet-service-gns_resolver.c        2013-09-27 15:38:59 UTC 
(rev 29665)
+++ gnunet/src/gns/gnunet-service-gns_resolver.c        2013-09-27 16:37:56 UTC 
(rev 29666)
@@ -752,6 +752,7 @@
     unsigned int skip;
     char buf[UINT16_MAX];
     size_t buf_off;
+    size_t buf_start;
 
     buf_off = 0;
     skip = 0;
@@ -804,6 +805,7 @@
       case GNUNET_DNSPARSER_TYPE_CNAME:
       case GNUNET_DNSPARSER_TYPE_PTR:
       case GNUNET_DNSPARSER_TYPE_NS:
+       buf_start = buf_off;
        if (GNUNET_OK !=
            GNUNET_DNSPARSER_builder_add_name (buf,
                                               sizeof (buf),
@@ -814,8 +816,11 @@
          skip++;
          continue;
        }
+       rd[i - skip].data_size = buf_off - buf_start;
+       rd[i - skip].data = &buf[buf_start];    
        break;
       case GNUNET_DNSPARSER_TYPE_SOA:
+       buf_start = buf_off;
        if (GNUNET_OK !=
            GNUNET_DNSPARSER_builder_add_soa (buf,
                                               sizeof (buf),
@@ -826,8 +831,11 @@
          skip++;
          continue;
        }
+       rd[i - skip].data_size = buf_off - buf_start;
+       rd[i - skip].data = &buf[buf_start];    
        break;
       case GNUNET_DNSPARSER_TYPE_MX:
+       buf_start = buf_off;
        if (GNUNET_OK !=
            GNUNET_DNSPARSER_builder_add_mx (buf,
                                             sizeof (buf),
@@ -838,8 +846,11 @@
          skip++;
          continue;
        }
+       rd[i - skip].data_size = buf_off - buf_start;
+       rd[i - skip].data = &buf[buf_start];    
        break;
       case GNUNET_DNSPARSER_TYPE_SRV:
+       buf_start = buf_off;
        if (GNUNET_OK !=
            GNUNET_DNSPARSER_builder_add_srv (buf,
                                              sizeof (buf),
@@ -850,6 +861,8 @@
          skip++;
          continue;
        }
+       rd[i - skip].data_size = buf_off - buf_start;
+       rd[i - skip].data = &buf[buf_start];    
        break;
       default:
        GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -1197,6 +1210,11 @@
                                                                rh);
            return;
          }
+       case GNUNET_NAMESTORE_TYPE_GNS2DNS:
+         {
+           /* delegation to DNS */
+           goto do_recurse;
+         }
        default:
          break;
        }
@@ -1392,6 +1410,7 @@
     GNS_resolver_lookup_cancel (rh);
     return;         
   }
+ do_recurse:
   /* need to recurse, check if we can */
   for (i=0;i<rd_count;i++)
   {
@@ -1428,7 +1447,7 @@
       rh->task_id = GNUNET_SCHEDULER_add_now (&recursive_resolution,
                                              rh);
       return;
-    case GNUNET_DNSPARSER_TYPE_NS:
+    case GNUNET_NAMESTORE_TYPE_GNS2DNS:
       {
        char *ns;
        /* resolution continues within DNS */
@@ -1527,9 +1546,10 @@
           created from the remainder of the GNS name and the
           name in the NS record */
        GNUNET_asprintf (&ac->label,
-                        "%.*s.%s",
+                        "%.*s%s%s",
                         (int) rh->name_resolution_pos,
                         rh->name,
+                        (0 != rh->name_resolution_pos) ? "." : "",
                         ns);
        GNUNET_free (ns);
        GNUNET_CONTAINER_DLL_insert_tail (rh->ac_head,

Modified: gnunet/src/gns/test_gns_ns_lookup.sh
===================================================================
--- gnunet/src/gns/test_gns_ns_lookup.sh        2013-09-27 15:38:59 UTC (rev 
29665)
+++ gnunet/src/gns/test_gns_ns_lookup.sh        2013-09-27 16:37:56 UTC (rev 
29666)
@@ -6,18 +6,18 @@
 TEST_DOMAIN_ALT2="uk.homepage.gnu"
 TEST_IP_ALT2="81.187.252.184"
 TEST_IP="131.159.74.67"
-TEST_IP_NS="184.172.157.218"
+TEST_IP_GNS2DNS="184.172.157.218"
 TEST_RECORD_NAME="homepage"
-TEST_RECORD_NS="gnunet.org"
+TEST_RECORD_GNS2DNS="gnunet.org"
 gnunet-arm -s -c test_gns_lookup.conf
 gnunet-identity -C testego -c test_gns_lookup.conf
-gnunet-namestore -p -z testego -a -n $TEST_RECORD_NAME -t A -V $TEST_IP_NS -e 
never -c test_gns_lookup.conf
-gnunet-namestore -p -z testego -a -n $TEST_RECORD_NAME -t NS -V 
$TEST_RECORD_NS -e never -c test_gns_lookup.conf
+gnunet-namestore -p -z testego -a -n $TEST_RECORD_NAME -t A -V 
$TEST_IP_GNS2DNS -e never -c test_gns_lookup.conf
+gnunet-namestore -p -z testego -a -n $TEST_RECORD_NAME -t GNS2DNS -V 
$TEST_RECORD_GNS2DNS -e never -c test_gns_lookup.conf
 RES_IP=$(timeout 5 gnunet-gns --raw -z testego -u $TEST_DOMAIN -t A -c 
test_gns_lookup.conf)
 RES_IP_ALT=$(timeout 5 gnunet-gns --raw -z testego -u $TEST_DOMAIN_ALT -t A -c 
test_gns_lookup.conf)
 RES_IP_ALT2=$(timeout 5 gnunet-gns --raw -z testego -u $TEST_DOMAIN_ALT2 -t A 
-c test_gns_lookup.conf)
 gnunet-namestore -z testego -d -n www -t A -V $TEST_IP -e never -c 
test_gns_lookup.conf
-gnunet-namestore -z testego -d -n $TEST_RECORD_NAME -t NS -V $TEST_RECORD_NS 
-e never -c test_gns_lookup.conf
+gnunet-namestore -z testego -d -n $TEST_RECORD_NAME -t GNS2DNS -V 
$TEST_RECORD_GNS2DNS -e never -c test_gns_lookup.conf
 gnunet-identity -D testego -c test_gns_lookup.conf
 gnunet-arm -e -c test_gns_lookup.conf
 
@@ -25,7 +25,7 @@
 then
   echo "PASS: Resolved $TEST_DOMAIN to $RES_IP."
 else
-  echo "Failed to resolve to proper IP for $TEST_DOMAIN, got $RES_IP."
+  echo "Failed to resolve to proper IP for $TEST_DOMAIN, got $RES_IP, wanted 
$TEST_IP."
   exit 1
 fi
 
@@ -33,7 +33,7 @@
 then
   echo "PASS: Resolved $TEST_DOMAIN_ALT to $RES_IP_ALT."
 else
-  echo "Failed to resolve to proper IP for $TEST_DOMAIN_ALT, got $RES_IP_ALT."
+  echo "Failed to resolve to proper IP for $TEST_DOMAIN_ALT, got $RES_IP_ALT, 
wanted $TEST_IP."
   exit 1
 fi
 
@@ -42,6 +42,6 @@
   echo "PASS: Resolved $TEST_DOMAIN_ALT2 to $RES_IP_ALT2."
   exit 0
 else
-  echo "Failed to resolve to proper IP for $TEST_DOMAIN_ALT2, got 
$RES_IP_ALT2."
+  echo "Failed to resolve to proper IP for $TEST_DOMAIN_ALT2, got 
$RES_IP_ALT2, wanted $TEST_IP_ALT2."
   exit 1
 fi

Modified: gnunet/src/include/gnunet_namestore_service.h
===================================================================
--- gnunet/src/include/gnunet_namestore_service.h       2013-09-27 15:38:59 UTC 
(rev 29665)
+++ gnunet/src/include/gnunet_namestore_service.h       2013-09-27 16:37:56 UTC 
(rev 29666)
@@ -67,6 +67,11 @@
 #define GNUNET_NAMESTORE_TYPE_VPN 65539
 
 /**
+ * Record type for delegation to DNS.
+ */
+#define GNUNET_NAMESTORE_TYPE_GNS2DNS 65540
+
+/**
  * Record type for a social place.
  */
 #define GNUNET_NAMESTORE_TYPE_PLACE 65541

Modified: gnunet/src/namestore/namestore_api_common.c
===================================================================
--- gnunet/src/namestore/namestore_api_common.c 2013-09-27 15:38:59 UTC (rev 
29665)
+++ gnunet/src/namestore/namestore_api_common.c 2013-09-27 16:37:56 UTC (rev 
29666)
@@ -501,7 +501,7 @@
  *
  * @param type type of the record
  * @param data value in binary encoding
- * @param data_size number of bytes in data
+ * @param data_size number of bytes in @a data
  * @return NULL on error, otherwise human-readable representation of the value
  */
 char *
@@ -661,6 +661,23 @@
       }
       return vpn_str;
     }
+  case GNUNET_NAMESTORE_TYPE_GNS2DNS:
+    {
+      char *ns;
+      size_t off;
+
+      off = 0;
+      ns = GNUNET_DNSPARSER_parse_name (data,
+                                       data_size,
+                                       &off);
+      if ( (NULL == ns) ||
+          (off != data_size) )
+      {
+       GNUNET_break_op (0);
+       return NULL;
+      }      
+      return ns;
+    }
   case GNUNET_DNSPARSER_TYPE_SRV:
     {
       struct GNUNET_DNSPARSER_SrvRecord *srv;
@@ -971,6 +988,28 @@
     vpn->proto = htons ((uint16_t) proto);
     strcpy ((char*)&vpn[1], s_serv);
     return GNUNET_OK;
+  case GNUNET_NAMESTORE_TYPE_GNS2DNS:
+    {
+      char nsbuf[256];
+      size_t off;
+    
+      off = 0;
+      if (GNUNET_OK !=
+         GNUNET_DNSPARSER_builder_add_name (nsbuf,
+                                            sizeof (nsbuf),
+                                            &off,
+                                            s))
+      {
+       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                   _("Failed to serialize GNS2DNS record with value `%s'\n"),
+                   s);
+       return GNUNET_SYSERR;
+      }
+      *data_size = off;
+      *data = GNUNET_malloc (off);
+      memcpy (*data, nsbuf, off);
+      return GNUNET_OK;
+    }
   case GNUNET_DNSPARSER_TYPE_TLSA:
     *data_size = sizeof (struct GNUNET_TUN_DnsTlsaRecord) + strlen (s) - 6;
     *data = tlsa = GNUNET_malloc (*data_size);
@@ -1017,6 +1056,7 @@
   { "PSEU",  GNUNET_NAMESTORE_TYPE_PSEU },
   { "LEHO",  GNUNET_NAMESTORE_TYPE_LEHO },
   { "VPN", GNUNET_NAMESTORE_TYPE_VPN },
+  { "GNS2DNS", GNUNET_NAMESTORE_TYPE_GNS2DNS },
   { "TLSA", GNUNET_DNSPARSER_TYPE_TLSA },
   { NULL, UINT32_MAX }
 };




reply via email to

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