From 6064b3d40f03db919544bae5ef2834e89ce4af10 Mon Sep 17 00:00:00 2001 From: Martin Schanzenbach Date: Wed, 21 Mar 2012 14:58:41 +0000 Subject: [PATCH] -fix mxrr --- src/gns/gnunet-service-gns_resolver.c | 18 +++++++----------- src/gns/test_gns_simple_mx_lookup.c | 21 +++++++++++---------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/src/gns/gnunet-service-gns_resolver.c b/src/gns/gnunet-service-gns_resolver.c index e95030db6..cd4b0f1fe 100644 --- a/src/gns/gnunet-service-gns_resolver.c +++ b/src/gns/gnunet-service-gns_resolver.c @@ -943,12 +943,11 @@ finish_lookup(struct ResolverHandle *rh, int i; char* s_value; char new_s_value[256]; - char new_mx_value[sizeof(struct GNUNET_DNSPARSER_MxRecord)+256]; + char new_mx_value[sizeof(uint16_t)+256]; int s_len; struct GNUNET_NAMESTORE_RecordData p_rd[rd_count]; char* pos; char* trailer; - struct GNUNET_DNSPARSER_MxRecord *mx; if (rd_count > 0) memcpy(p_rd, rd, rd_count*sizeof(struct GNUNET_NAMESTORE_RecordData)); @@ -971,8 +970,7 @@ finish_lookup(struct ResolverHandle *rh, */ if (rd[i].record_type == GNUNET_GNS_RECORD_MX) { - mx = (struct GNUNET_DNSPARSER_MxRecord*)rd[i].data; - s_value = (char*)&mx[1]; + s_value = (char*)rd[i].data+sizeof(uint16_t); } else { @@ -1011,15 +1009,13 @@ finish_lookup(struct ResolverHandle *rh, if (rd[i].record_type == GNUNET_GNS_RECORD_MX) { - p_rd[i].data_size = sizeof(struct GNUNET_DNSPARSER_MxRecord) - +strlen(new_s_value)+1; + p_rd[i].data_size = sizeof(uint16_t)+strlen(new_s_value)+1; p_rd[i].data = new_mx_value; - mx = (struct GNUNET_DNSPARSER_MxRecord*)p_rd[i].data; - mx->preference = - ((struct GNUNET_DNSPARSER_MxRecord*)rd[i].data)->preference; - memcpy((char*)&mx[1], new_s_value, strlen(new_s_value)+1); - mx->mxhost = (char*)&mx[1]; + /* cpy preference */ + memcpy(new_mx_value, (char*)rd[i].data, sizeof(uint16_t)); + /* cpy string */ + memcpy(new_mx_value+sizeof(uint16_t), new_s_value, strlen(new_s_value)+1); } else { diff --git a/src/gns/test_gns_simple_mx_lookup.c b/src/gns/test_gns_simple_mx_lookup.c index dbdc5b6eb..caf95177c 100644 --- a/src/gns/test_gns_simple_mx_lookup.c +++ b/src/gns/test_gns_simple_mx_lookup.c @@ -97,7 +97,8 @@ on_lookup_result(void *cls, uint32_t rd_count, char* addr; int mx_found = 0; int ip_found = 0; - struct GNUNET_DNSPARSER_MxRecord *mx; + uint16_t mx_preference; + char* mx; if (rd_count == 0) { @@ -126,11 +127,11 @@ on_lookup_result(void *cls, uint32_t rd_count, } else if (rd[i].record_type == GNUNET_GNS_RECORD_MX) { - mx = (struct GNUNET_DNSPARSER_MxRecord*)rd[i].data; - mx->mxhost = (char*)&mx[1]; + mx = (char*)rd[i].data+sizeof(uint16_t); + mx_preference = *(uint16_t*)rd[i].data; GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "Got MX %s\n", mx->mxhost); - if (0 == strcmp(mx->mxhost, TEST_EXPECTED_MX)) + "Got MX %s with preference %d\n", mx, mx_preference); + if (0 == strcmp(mx, TEST_EXPECTED_MX)) { GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%s correctly resolved to %s!\n", TEST_DOMAIN, @@ -253,7 +254,8 @@ do_lookup(void *cls, const struct GNUNET_PeerIdentity *id, struct GNUNET_NAMESTORE_RecordData rd; char* ip = TEST_IP; struct in_addr *mail = GNUNET_malloc(sizeof(struct in_addr)); - struct GNUNET_DNSPARSER_MxRecord *mx_record; + char *mx_record; + uint16_t mx_preference = 1; rd.expiration = GNUNET_TIME_absolute_get_forever (); GNUNET_assert(1 == inet_pton (AF_INET, ip, mail)); @@ -289,10 +291,9 @@ do_lookup(void *cls, const struct GNUNET_PeerIdentity *id, NULL); rd.data_size = sizeof(struct GNUNET_DNSPARSER_MxRecord)+strlen(TEST_MX_NAME)+1; - mx_record = GNUNET_malloc(rd.data_size); - mx_record->preference = 1; - mx_record->mxhost = (char*)&mx_record[1]; - strcpy(mx_record->mxhost, TEST_MX_NAME); + mx_record = GNUNET_malloc(sizeof(uint16_t)+strlen(TEST_MX_NAME)+1); + memcpy(mx_record, &mx_preference, sizeof(uint16_t)); + strcpy(mx_record+sizeof(uint16_t), TEST_MX_NAME); rd.data = mx_record; rd.record_type = GNUNET_GNS_RECORD_MX; sig = GNUNET_NAMESTORE_create_signature(bob_key, -- 2.25.1