aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Schanzenbach <mschanzenbach@posteo.de>2012-03-21 14:58:41 +0000
committerMartin Schanzenbach <mschanzenbach@posteo.de>2012-03-21 14:58:41 +0000
commit6064b3d40f03db919544bae5ef2834e89ce4af10 (patch)
tree74b075412f264d3a903687aeb52ec6f555b0a7a6
parent8410fe84848841a7dbc3709ea65e0dd1445860bb (diff)
-fix mxrr
-rw-r--r--src/gns/gnunet-service-gns_resolver.c18
-rw-r--r--src/gns/test_gns_simple_mx_lookup.c21
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 e95030db67..cd4b0f1fe3 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 dbdc5b6eb9..caf95177c5 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,