[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r20604 - gnunet/src/gns
From: |
gnunet |
Subject: |
[GNUnet-SVN] r20604 - gnunet/src/gns |
Date: |
Mon, 19 Mar 2012 15:17:20 +0100 |
Author: schanzen
Date: 2012-03-19 15:17:20 +0100 (Mon, 19 Mar 2012)
New Revision: 20604
Modified:
gnunet/src/gns/gns.h
gnunet/src/gns/gnunet-service-gns_interceptor.c
gnunet/src/gns/gnunet-service-gns_resolver.c
gnunet/src/gns/gnunet-service-gns_resolver.h
Log:
-less malloc more stack
Modified: gnunet/src/gns/gns.h
===================================================================
--- gnunet/src/gns/gns.h 2012-03-19 12:20:30 UTC (rev 20603)
+++ gnunet/src/gns/gns.h 2012-03-19 14:17:20 UTC (rev 20604)
@@ -29,6 +29,7 @@
#define GNS_H
#define GNUNET_GNS_TLD "gnunet"
+#define GNUNET_GNS_TLD_ZKEY "zkey"
#define GNUNET_GNS_DHT_MAX_UPDATE_INTERVAL 3600
GNUNET_NETWORK_STRUCT_BEGIN
Modified: gnunet/src/gns/gnunet-service-gns_interceptor.c
===================================================================
--- gnunet/src/gns/gnunet-service-gns_interceptor.c 2012-03-19 12:20:30 UTC
(rev 20603)
+++ gnunet/src/gns/gnunet-service-gns_interceptor.c 2012-03-19 14:17:20 UTC
(rev 20604)
@@ -140,8 +140,25 @@
{
additional_records[i].name = ilh->query->name;
additional_records[i].type = rd[i].record_type;
- additional_records[i].data.raw.data_len = rd[i].data_size;
- additional_records[i].data.raw.data = (char*)rd[i].data;
+ switch(rd[i].record_type)
+ {
+ case GNUNET_GNS_RECORD_TYPE_NS:
+ case GNUNET_GNS_RECORD_TYPE_CNAME:
+ case GNUNET_GNS_RECORD_TYPE_PTR:
+ additional_records[i].data.hostname = (char*)rd[i].data;
+ break;
+ case GNUNET_GNS_RECORD_TYPE_SOA:
+ additional_records[i].data.soa =
+ (struct GNUNET_DNSPARSER_SoaRecord *)rd[i].data;
+ break;
+ case GNUNET_GNS_RECORD_MX:
+ additional_records[i].data.mx =
+ (struct GNUNET_DNSPARSER_MxRecord *)rd[i].data;
+ break;
+ default:
+ additional_records[i].data.raw.data_len = rd[i].data_size;
+ additional_records[i].data.raw.data = (char*)rd[i].data;
+ }
additional_records[i].expiration_time = rd[i].expiration;
additional_records[i].class = GNUNET_DNSPARSER_CLASS_INTERNET;//hmmn
}
Modified: gnunet/src/gns/gnunet-service-gns_resolver.c
===================================================================
--- gnunet/src/gns/gnunet-service-gns_resolver.c 2012-03-19 12:20:30 UTC
(rev 20603)
+++ gnunet/src/gns/gnunet-service-gns_resolver.c 2012-03-19 14:17:20 UTC
(rev 20604)
@@ -85,16 +85,12 @@
{
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"Intelligent replacement not implemented\n", name);
- GNUNET_free(gph->new_name);
- GNUNET_free(gph->name);
GNUNET_free(gph);
return;
}
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"Trying delegated name %s\n", gph->name);
- GNUNET_free(gph->new_name);
- gph->new_name = GNUNET_malloc(strlen(gph->name)+1);
memcpy(gph->new_name, gph->name, strlen(gph->name)+1);
GNUNET_NAMESTORE_lookup_record(namestore_handle,
&gph->zone,
@@ -119,8 +115,6 @@
&new_pkey,
NULL, //cont
NULL); //cls
- GNUNET_free(gph->new_name);
- GNUNET_free(gph->name);
GNUNET_free(gph);
}
@@ -136,12 +130,10 @@
{
if (NULL == name)
{
- gph->new_name = GNUNET_malloc(strlen(gph->name)+1);
memcpy(gph->new_name, name, strlen(gph->name)+1);
}
else
{
- gph->new_name = GNUNET_malloc(strlen(name)+1);
memcpy(gph->new_name, name, strlen(name)+1);
}
@@ -216,8 +208,6 @@
{
GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "got dht result null!\n", size);
GNUNET_break(0);
- GNUNET_free(gph->new_name);
- GNUNET_free(gph->name);
GNUNET_free(gph);
return;
}
@@ -247,8 +237,6 @@
{
GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Error deserializing data!\n");
GNUNET_break(0);
- GNUNET_free(gph->new_name);
- GNUNET_free(gph->name);
GNUNET_free(gph);
return;
}
@@ -297,8 +285,6 @@
{
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"name for zone in our root %d\n", strlen(name));
- GNUNET_free(gph->new_name);
- GNUNET_free(gph->name);
GNUNET_free(gph);
}
else
@@ -359,7 +345,6 @@
gph = GNUNET_malloc(sizeof(struct GetPseuAuthorityHandle));
namelen = strlen(name) + 1;
- gph->name = GNUNET_malloc(namelen);
memcpy(gph->name, name, namelen);
gph->new_zone = zone;
@@ -409,15 +394,11 @@
if (NULL == rh)
return;
- GNUNET_free_non_null (rh->name);
- GNUNET_free_non_null (rh->authority_name);
-
ac = rh->authority_chain_head;
while (NULL != ac)
{
ac_next = ac->next;
- GNUNET_free_non_null (ac->name);
GNUNET_free(ac);
ac = ac_next;
}
@@ -886,7 +867,6 @@
struct AuthorityChain *auth =
GNUNET_malloc(sizeof(struct AuthorityChain));
auth->zone = rh->authority;
- auth->name = GNUNET_malloc(strlen(rh->authority_name)+1);
memset(auth->name, 0, strlen(rh->authority_name)+1);
strcpy(auth->name, rh->authority_name);
GNUNET_CONTAINER_DLL_insert (rh->authority_chain_head,
@@ -1043,7 +1023,6 @@
}
rlh->proc(rlh->proc_cls, rd_count, p_rd);
- GNUNET_free(rlh->name);
GNUNET_free(rlh);
}
@@ -1185,6 +1164,32 @@
}
/**
+ * Checks if name is in .zkey TLD
+ *
+ * @param name the name to check
+ * @return GNUNET_YES or GNUNET_NO
+ */
+int
+is_zkey_tld(const char* name)
+{
+ int offset = 0;
+
+ if (strlen(name) <= strlen(GNUNET_GNS_TLD_ZKEY))
+ {
+ return GNUNET_NO;
+ }
+
+ offset = strlen(name)-strlen(GNUNET_GNS_TLD_ZKEY);
+ if (strcmp(name+offset, GNUNET_GNS_TLD_ZKEY) != 0)
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_INFO,
+ "%s is not in zkey TLD\n", name);
+ return GNUNET_NO;
+ }
+ return GNUNET_YES;
+}
+
+/**
* DHT resolution for delegation finished. Processing result.
*
* @param cls the closure
@@ -1213,8 +1218,6 @@
/* We resolved full name for delegation. resolving record */
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"Resolved full name for delegation via DHT. resolving record '' in
ns\n");
- GNUNET_free(rh->name);
- rh->name = GNUNET_malloc(strlen("+")+1);
strcpy(rh->name, "+\0");
rh->proc = &handle_record_ns;
resolve_record_ns(rh);
@@ -1308,8 +1311,6 @@
/* We resolved full name for delegation. resolving record */
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"Resolved full name for delegation. resolving record '+'\n");
- GNUNET_free(rh->name);
- rh->name = GNUNET_malloc(strlen("+")+1);
strcpy(rh->name, "+\0");
rh->proc = &handle_record_ns;
resolve_record_ns(rh);
@@ -1381,7 +1382,7 @@
struct ResolverHandle *rh;
struct GNUNET_TIME_Relative remaining_time;
GNUNET_HashCode zone;
- char* new_name;
+ char new_name[MAX_DNS_NAME_LENGTH];
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Got %d records from authority lookup\n",
rd_count);
@@ -1431,14 +1432,11 @@
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"Adding %s back to %s\n",
rh->authority_name, rh->name);
- new_name = GNUNET_malloc(strlen(rh->name)
- + strlen(rh->authority_name) + 2);
memset(new_name, 0, strlen(rh->name) + strlen(rh->authority_name) + 2);
strcpy(new_name, rh->name);
strcpy(new_name+strlen(new_name)+1, ".");
strcpy(new_name+strlen(new_name)+2, rh->authority_name);
- GNUNET_free(rh->name);
- rh->name = new_name;
+ strcpy(rh->name, new_name);
}
rh->proc(rh->proc_cls, rh, 0, NULL);
return;
@@ -1479,7 +1477,6 @@
memcpy(&rh->authority, rd[i].data, sizeof(GNUNET_HashCode));
struct AuthorityChain *auth = GNUNET_malloc(sizeof(struct AuthorityChain));
auth->zone = rh->authority;
- auth->name = GNUNET_malloc(strlen(rh->authority_name)+1);
memset(auth->name, 0, strlen(rh->authority_name)+1);
strcpy(auth->name, rh->authority_name);
GNUNET_CONTAINER_DLL_insert (rh->authority_chain_head,
@@ -1547,6 +1544,7 @@
{
struct ResolverHandle *rh;
struct RecordLookupHandle* rlh;
+ char* string_hash = "";
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Starting resolution for %s (type=%d)!\n",
@@ -1556,7 +1554,7 @@
if (is_canonical((char*)name) && (strcmp(GNUNET_GNS_TLD, name) != 0))
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "%s is canonical and gnunet not our TLD!\n", name);
+ "%s is canonical and not gnunet -> cannot resolve!\n", name);
proc(cls, 0, NULL);
return;
}
@@ -1570,30 +1568,64 @@
if (strcmp(GNUNET_GNS_TLD, name) == 0)
{
- rh->name = GNUNET_malloc(2);
- strcpy(rh->name, "");
+ /**
+ * Only 'gnunet' given
+ */
+ strcpy(rh->name, "\0");
}
else
{
- rh->name = GNUNET_malloc(strlen(name)
- - strlen(GNUNET_GNS_TLD));
- memset(rh->name, 0,
- strlen(name)-strlen(GNUNET_GNS_TLD));
- memcpy(rh->name, name,
- strlen(name)-strlen(GNUNET_GNS_TLD) - 1);
+ if (is_zkey_tld(name) == GNUNET_YES)
+ {
+ /**
+ * This is a zkey tld
+ * build hash and use as initial authority
+ */
+ memset(rh->name, 0,
+ strlen(name)-strlen(GNUNET_GNS_TLD_ZKEY));
+ memcpy(rh->name, name,
+ strlen(name)-strlen(GNUNET_GNS_TLD_ZKEY) - 1);
+ pop_tld(rh->name, string_hash);
+
+ if (GNUNET_OK != GNUNET_CRYPTO_hash_from_string(string_hash,
+ &rh->authority))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Cannot convert ZKEY %s to hash!\n", string_hash);
+ GNUNET_free(rh);
+ GNUNET_free(rlh);
+ proc(cls, 0, NULL);
+ return;
+ }
+
+ }
+ else
+ {
+ /**
+ * Presumably GNUNET tld
+ */
+ memset(rh->name, 0,
+ strlen(name)-strlen(GNUNET_GNS_TLD));
+ memcpy(rh->name, name,
+ strlen(name)-strlen(GNUNET_GNS_TLD) - 1);
+ }
}
- rh->authority_name = GNUNET_malloc(sizeof(char)*MAX_DNS_LABEL_LENGTH);
+ /**
+ * Initialize authority chain
+ */
rh->authority_chain_head = GNUNET_malloc(sizeof(struct AuthorityChain));
rh->authority_chain_head->prev = NULL;
rh->authority_chain_head->next = NULL;
rh->authority_chain_tail = rh->authority_chain_head;
- rh->authority_chain_head->zone = zone;
-
+ rh->authority_chain_head->zone = rh->authority;
+
+ /**
+ * Copy original query into lookup handle
+ */
rlh->record_type = record_type;
- rlh->name = GNUNET_malloc(strlen(name) + 1);
memset(rlh->name, 0, strlen(name) + 1);
- strcpy(rlh->name, name); //FIXME
+ strcpy(rlh->name, name);
rlh->proc = proc;
rlh->proc_cls = cls;
@@ -1629,8 +1661,8 @@
struct NameShortenHandle* nsh = (struct NameShortenHandle*)rh->proc_cls;
struct AuthorityChain *next_authority;
- char* result;
- char* next_authority_name;
+ char result[MAX_DNS_NAME_LENGTH];
+ char next_authority_name[MAX_DNS_LABEL_LENGTH];
size_t answer_len;
/* we found a match in our own zone */
@@ -1639,7 +1671,6 @@
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"result strlen %d\n", strlen(name));
answer_len = strlen(rh->name) + strlen(name) + strlen(GNUNET_GNS_TLD) + 3;
- result = GNUNET_malloc(answer_len);
memset(result, 0, answer_len);
if (strlen(rh->name) > 0)
{
@@ -1657,14 +1688,12 @@
nsh->proc(nsh->proc_cls, result);
GNUNET_free(nsh);
free_resolver_handle(rh);
- GNUNET_free(result);
}
else if (GNUNET_CRYPTO_hash_cmp(&rh->authority_chain_head->zone,
&rh->authority_chain_tail->zone))
{
/* our zone, just append .gnunet */
answer_len = strlen(rh->name) + strlen(GNUNET_GNS_TLD) + 2;
- result = GNUNET_malloc(answer_len);
memset(result, 0, answer_len);
strcpy(result, rh->name);
strcpy(result+strlen(rh->name), ".");
@@ -1676,7 +1705,6 @@
nsh->proc(nsh->proc_cls, result);
GNUNET_free(nsh);
free_resolver_handle(rh);
- GNUNET_free(result);
}
else
{
@@ -1685,16 +1713,14 @@
* continue with next authority
*/
next_authority = rh->authority_chain_head;
- next_authority_name = GNUNET_malloc(strlen(rh->name)+
- strlen(next_authority->name) + 2);
+ // strlen(next_authority->name) + 2);
memset(next_authority_name, 0, strlen(rh->name)+
strlen(next_authority->name) + 2);
strcpy(next_authority_name, rh->name);
strcpy(next_authority_name+strlen(rh->name)+1, ".");
strcpy(next_authority_name+strlen(rh->name)+2, next_authority->name);
- GNUNET_free(rh->name);
- rh->name = next_authority_name;
+ strcpy(rh->name, next_authority_name);
GNUNET_CONTAINER_DLL_remove(rh->authority_chain_head,
rh->authority_chain_tail,
next_authority);
@@ -1724,7 +1750,7 @@
const struct GNUNET_NAMESTORE_RecordData *rd)
{
struct NameShortenHandle *nsh;
- char* result;
+ char result[MAX_DNS_NAME_LENGTH];
size_t answer_len;
nsh = (struct NameShortenHandle *)cls;
@@ -1749,7 +1775,6 @@
**/
answer_len = strlen(rh->name) + strlen(GNUNET_GNS_TLD) + 2;
- result = GNUNET_malloc(answer_len);
memset(result, 0, answer_len);
strcpy(result, rh->name);
strcpy(result+strlen(rh->name), ".");
@@ -1761,7 +1786,6 @@
nsh->proc(nsh->proc_cls, result);
GNUNET_free(nsh);
free_resolver_handle(rh);
- GNUNET_free(result);
return;
}
@@ -1810,14 +1834,11 @@
rh = GNUNET_malloc(sizeof (struct ResolverHandle));
rh->authority = zone;
- rh->name = GNUNET_malloc(strlen(name)
- - strlen(GNUNET_GNS_TLD));
memset(rh->name, 0,
strlen(name)-strlen(GNUNET_GNS_TLD));
memcpy(rh->name, name,
strlen(name)-strlen(GNUNET_GNS_TLD)-1);
- rh->authority_name = GNUNET_malloc(sizeof(char)*MAX_DNS_LABEL_LENGTH);
rh->authority_chain_head = GNUNET_malloc(sizeof(struct AuthorityChain));
rh->authority_chain_tail = rh->authority_chain_head;
rh->authority_chain_head->zone = zone;
@@ -1847,7 +1868,7 @@
const struct GNUNET_NAMESTORE_RecordData *rd)
{
struct GetNameAuthorityHandle* nah;
- char* result;
+ char result[MAX_DNS_NAME_LENGTH];
size_t answer_len;
nah = (struct GetNameAuthorityHandle*) rh->proc_cls;
@@ -1881,7 +1902,6 @@
answer_len = strlen(nah->name) - strlen(rh->name)
+ strlen(GNUNET_GNS_TLD) + 1;
- result = GNUNET_malloc(answer_len);
memset(result, 0, answer_len);
strcpy(result, nah->name + strlen(rh->name) + 1);
@@ -1889,17 +1909,14 @@
"Got authority result %s\n", result);
nah->proc(nah->proc_cls, result);
- GNUNET_free(nah->name);
GNUNET_free(nah);
free_resolver_handle(rh);
- GNUNET_free(result);
}
else
{
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"Unable to resolve authority for remaining %s!\n", rh->name);
nah->proc(nah->proc_cls, "");
- GNUNET_free(nah->name);
GNUNET_free(nah);
free_resolver_handle(rh);
}
@@ -1935,26 +1952,20 @@
if (strcmp(GNUNET_GNS_TLD, name) == 0)
{
- rh->name = GNUNET_malloc(2);
- strcpy(rh->name, "");
+ strcpy(rh->name, "\0");
}
else
{
- rh->name = GNUNET_malloc(strlen(name)
- - strlen(GNUNET_GNS_TLD));
memset(rh->name, 0,
strlen(name)-strlen(GNUNET_GNS_TLD));
memcpy(rh->name, name,
strlen(name)-strlen(GNUNET_GNS_TLD) - 1);
}
- nah->name = GNUNET_malloc(strlen(name)+1);
memset(nah->name, 0,
strlen(name)+1);
strcpy(nah->name, name);
- rh->authority_name = GNUNET_malloc(MAX_DNS_LABEL_LENGTH);
-
rh->authority_chain_head = GNUNET_malloc(sizeof(struct AuthorityChain));
rh->authority_chain_tail = rh->authority_chain_head;
rh->authority_chain_head->zone = zone;
Modified: gnunet/src/gns/gnunet-service-gns_resolver.h
===================================================================
--- gnunet/src/gns/gnunet-service-gns_resolver.h 2012-03-19 12:20:30 UTC
(rev 20603)
+++ gnunet/src/gns/gnunet-service-gns_resolver.h 2012-03-19 14:17:20 UTC
(rev 20604)
@@ -8,6 +8,7 @@
#define DHT_LOOKUP_TIMEOUT DHT_OPERATION_TIMEOUT
#define DHT_GNS_REPLICATION_LEVEL 5
#define MAX_DNS_LABEL_LENGTH 63
+#define MAX_DNS_NAME_LENGTH 253
/*
* DLL to hold the authority chain
@@ -23,7 +24,7 @@
GNUNET_HashCode zone;
/* (local) name of the authority */
- char* name;
+ char name[MAX_DNS_LABEL_LENGTH];
/* was the ns entry fresh */
int fresh;
@@ -94,7 +95,7 @@
struct ResolverHandle
{
/* The name to resolve */
- char *name;
+ char name[MAX_DNS_NAME_LENGTH];
/* has this query been answered? how many matches */
int answered;
@@ -103,7 +104,7 @@
GNUNET_HashCode authority;
/* the name of the authoritative zone to query */
- char *authority_name;
+ char authority_name[MAX_DNS_LABEL_LENGTH];
/**
* we have an authority in namestore that
@@ -146,7 +147,7 @@
enum GNUNET_GNS_RecordType record_type;
/* the name to look up */
- char *name;
+ char name[MAX_DNS_NAME_LENGTH];
/* Method to call on record resolution result */
RecordLookupProcessor proc;
@@ -179,7 +180,7 @@
{
/* the name to look up authority for */
- char* name;
+ char name[MAX_DNS_NAME_LENGTH];
/* Method to call on result */
GetAuthorityResultProcessor proc;
@@ -195,10 +196,10 @@
struct GetPseuAuthorityHandle
{
/* the name given from delegation */
- char* name;
+ char name[MAX_DNS_LABEL_LENGTH];
/* name to store the pseu under */
- char* new_name;
+ char new_name[MAX_DNS_LABEL_LENGTH];
/* the zone of discovered authority */
GNUNET_HashCode new_zone;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r20604 - gnunet/src/gns,
gnunet <=