gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r20053 - gnunet/src/gns
Date: Mon, 27 Feb 2012 10:22:41 +0100

Author: schanzen
Date: 2012-02-27 10:22:41 +0100 (Mon, 27 Feb 2012)
New Revision: 20053

Modified:
   gnunet/src/gns/gns.conf.in
   gnunet/src/gns/gnunet-service-gns.c
   gnunet/src/gns/plugin_block_gns.c
Log:
-fixes


Modified: gnunet/src/gns/gns.conf.in
===================================================================
--- gnunet/src/gns/gns.conf.in  2012-02-27 09:22:12 UTC (rev 20052)
+++ gnunet/src/gns/gns.conf.in  2012-02-27 09:22:41 UTC (rev 20053)
@@ -5,8 +5,9 @@
 CONFIG = $DEFAULTCONFIG
 BINARY = gnunet-service-gns
 UNIXPATH = /tmp/gnunet-service-gns.sock
-ZONEKEY = $SERVICEHOME/zonekey
-TRUSTED = bob:$SERVICEHOME/bobkey
+ZONEKEY = /tmp/zonekey
+TRUSTED = bob:/tmp/bobkey
+HIJACK_DNS = YES
 OPTIONS = -L INFO
 
 # Access to this service can compromise all DNS queries in this

Modified: gnunet/src/gns/gnunet-service-gns.c
===================================================================
--- gnunet/src/gns/gnunet-service-gns.c 2012-02-27 09:22:12 UTC (rev 20052)
+++ gnunet/src/gns/gnunet-service-gns.c 2012-02-27 09:22:41 UTC (rev 20053)
@@ -215,8 +215,6 @@
   int i;
   GNUNET_HashCode zone, name_hash;
   
-  //FIXME GNS block check
-
   if (data == NULL)
     return;
   
@@ -229,7 +227,7 @@
   num_records = ntohl(nrb->rd_count);
   struct GNUNET_NAMESTORE_RecordData rd[num_records];
   name = (char*)&nrb[1];
-  rb = (struct GNSRecordBlock *)(&nrb[1] + strlen(name));
+  rb = (struct GNSRecordBlock *)(&nrb[1] + strlen(name) + 1);
 
   for (i=0; i<num_records; i++)
   {
@@ -283,7 +281,7 @@
 void
 resolve_authority_dht(struct GNUNET_GNS_ResolverHandle *rh, const char* name)
 {
-  enum GNUNET_GNS_RecordType rtype = GNUNET_GNS_RECORD_PKEY;
+  uint32_t xquery;
   struct GNUNET_TIME_Relative timeout;
   GNUNET_HashCode name_hash;
   GNUNET_HashCode lookup_key;
@@ -293,13 +291,14 @@
 
   timeout = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 20);
   
+  xquery = htonl(GNUNET_GNS_RECORD_PKEY);
   //FIXME how long to wait for results?
   rh->get_handle = GNUNET_DHT_get_start(dht_handle, timeout,
                        GNUNET_BLOCK_TYPE_TEST, //FIXME todo
                        &lookup_key,
                        5, //Replication level FIXME
                        GNUNET_DHT_RO_NONE,
-                       &rtype, //xquery FIXME this is bad
+                       &xquery, //xquery FIXME is this bad?
                        sizeof(GNUNET_GNS_RECORD_PKEY),
                        &process_authority_dht_result,
                        rh);
@@ -354,7 +353,7 @@
   struct GNUNET_NAMESTORE_RecordData rd[num_records];
 
   name = (char*)&nrb[1];
-  rb = (struct GNSRecordBlock*)(&nrb[1] + strlen(name));
+  rb = (struct GNSRecordBlock*)(&nrb[1] + strlen(name) + 1);
   
   for (i=0; i<num_records; i++)
   {
@@ -406,6 +405,7 @@
 void
 resolve_name_dht(struct GNUNET_GNS_ResolverHandle *rh, const char* name)
 {
+  uint32_t xquery;
   struct GNUNET_TIME_Relative timeout;
   GNUNET_HashCode name_hash;
   GNUNET_HashCode lookup_key;
@@ -416,13 +416,14 @@
 
   timeout = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 20);
   
+  xquery = htonl(rh->query->type);
   //FIXME how long to wait for results?
   rh->get_handle = GNUNET_DHT_get_start(dht_handle, timeout,
                        GNUNET_BLOCK_TYPE_TEST, //FIXME todo
                        &lookup_key,
                        5, //Replication level FIXME
                        GNUNET_DHT_RO_NONE,
-                       &rh->query->type, //xquery
+                       &xquery, //xquery FIXME is this bad?
                        sizeof(rh->query->type),
                        &process_name_dht_result,
                        rh);
@@ -1055,7 +1056,7 @@
   }
   
   rd_payload_length = rd_count * sizeof(struct GNSRecordBlock);
-  rd_payload_length += strlen(name) + sizeof(struct GNSNameRecordBlock);
+  rd_payload_length += strlen(name) + 1 + sizeof(struct GNSNameRecordBlock);
   //Calculate payload size
   for (i=0; i<rd_count; i++)
   {
@@ -1073,9 +1074,9 @@
 
   nrb->rd_count = htonl(rd_count);
 
-  memcpy(&nrb[1], name, strlen(name)); //FIXME is this 0 terminated??
+  memcpy(&nrb[1], name, strlen(name) + 1); //FIXME is this 0 terminated??-sure 
hope so for we use strlen
 
-  rb = (struct GNSRecordBlock *)(&nrb[1]+strlen(name));
+  rb = (struct GNSRecordBlock *)(&nrb[1] + strlen(name) + 1);
 
   for (i=0; i<rd_count; i++)
   {
@@ -1089,6 +1090,7 @@
 
   /**
    * FIXME magic number 20 move to config file
+   * DHT_WAIT_TIMEOUT
    */
   timeout = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 20);
   GNUNET_CRYPTO_hash(name, strlen(name), &name_hash);
@@ -1171,24 +1173,26 @@
   zone_key = GNUNET_CRYPTO_rsa_key_create_from_file (keyfile);
   //zone_key = GNUNET_CRYPTO_rsa_key_create ();
 
-  GNUNET_CRYPTO_hash(zone_key, GNUNET_CRYPTO_RSA_KEY_LENGTH,//FIXME is this ok?
+  GNUNET_CRYPTO_hash(zone_key, GNUNET_CRYPTO_RSA_KEY_LENGTH,
                      &zone_hash);
   nc = GNUNET_SERVER_notification_context_create (server, 1);
 
-  /* FIXME - do some config parsing 
-   *       - Maybe only hijack dns if option is set (HIJACK_DNS=1)
-   */
-
   GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
                                 NULL);
-  /**
-   * Do gnunet dns init here
-   */
-  dns_handle = GNUNET_DNS_connect(c,
-                                  GNUNET_DNS_FLAG_PRE_RESOLUTION,
-                                  &handle_dns_request, /* rh */
-                                  NULL); /* Closure */
 
+  if (GNUNET_YES ==
+      GNUNET_CONFIGURATION_get_value_yesno (c, "gns",
+                                            "HIJACK_DNS"))
+  {
+    /**
+     * Do gnunet dns init here
+     */
+    dns_handle = GNUNET_DNS_connect(c,
+                                    GNUNET_DNS_FLAG_PRE_RESOLUTION,
+                                    &handle_dns_request, /* rh */
+                                    NULL); /* Closure */
+  }
+
   if (NULL == dns_handle)
   {
     GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
@@ -1225,7 +1229,7 @@
    * We have roughly an hour for all records;
    */
   dht_update_interval = GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
-                                                      1); //FIXME from cfg
+                                                      1);
   zone_update_taskid = GNUNET_SCHEDULER_add_now (&update_zone_dht_start, NULL);
   GNUNET_log(GNUNET_ERROR_TYPE_INFO, "GNS Init done!\n");
 

Modified: gnunet/src/gns/plugin_block_gns.c
===================================================================
--- gnunet/src/gns/plugin_block_gns.c   2012-02-27 09:22:12 UTC (rev 20052)
+++ gnunet/src/gns/plugin_block_gns.c   2012-02-27 09:22:41 UTC (rev 20053)
@@ -72,6 +72,8 @@
   GNUNET_HashCode pkey_hash;
   GNUNET_HashCode query_pkey;
   GNUNET_HashCode name_hash;
+  GNUNET_HashCode mhash;
+  GNUNET_HashCode chash;
   struct GNSNameRecordBlock *nrb;
   struct GNSRecordBlock *rb;
   uint32_t rd_count;
@@ -96,7 +98,8 @@
 
   struct GNUNET_NAMESTORE_RecordData rd[rd_count];
   int i = 0;
-  rb = (struct GNSRecordBlock*)(&nrb[1] + strlen(name));
+  int record_match = 0;
+  rb = (struct GNSRecordBlock*)(&nrb[1] + strlen(name) + 1);
 
   for (i=0; i<rd_count; i++)
   {
@@ -107,7 +110,13 @@
     rd[i].flags = ntohl(rb->flags);
     rd[i].data = (char*)&rb[1];
     rb = &rb[1] + rd[i].data_size;
+    if (xquery_size > 0 && (rd[i].record_type == *((uint32_t*)xquery)))
+      record_match++;
   }
+  
+  //No record matches query
+  if (xquery_size > 0 && (record_match == 0))
+    return GNUNET_BLOCK_EVALUATION_REQUEST_INVALID;
 
   if (GNUNET_OK != GNUNET_NAMESTORE_verify_signature (&nrb->public_key,
                                                       name,
@@ -119,16 +128,23 @@
     return GNUNET_BLOCK_EVALUATION_REQUEST_INVALID;
   }
 
-  //Cache FIXME we need a static function here to namestore?
-  /*GNUNET_NAMESTORE_record_put (handle, //FIXME where do i get this from?
-                               &pkey_hash,
-                               name,
-                               expiration, //FIXME uh where do i get this from?
-                               rd_count,
-                               rd,
-                               signature,
-                               NULL, //cont
-                               NULL); //cls*/
+  //FIXME do bf check before or after crypto??
+  if (NULL != bf)
+  {
+    GNUNET_CRYPTO_hash(reply_block, reply_block_size, &chash);
+    GNUNET_BLOCK_mingle_hash(&chash, bf_mutator, &mhash);
+    if (NULL != *bf)
+    {
+      if (GNUNET_YES == GNUNET_CONTAINER_bloomfilter_test(*bf, &mhash))
+        return GNUNET_BLOCK_EVALUATION_OK_DUPLICATE;
+    }
+    else
+    {
+      *bf = GNUNET_CONTAINER_bloomfilter_init(NULL, 8, BLOOMFILTER_K);
+    }
+    GNUNET_CONTAINER_bloomfilter_add(*bf, &mhash);
+  }
+
   return GNUNET_BLOCK_EVALUATION_REQUEST_VALID;
 }
 




reply via email to

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