aboutsummaryrefslogtreecommitdiff
path: root/src
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 /src
parent8410fe84848841a7dbc3709ea65e0dd1445860bb (diff)
downloadgnunet-6064b3d40f03db919544bae5ef2834e89ce4af10.tar.gz
gnunet-6064b3d40f03db919544bae5ef2834e89ce4af10.zip
-fix mxrr
Diffstat (limited to 'src')
-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 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,
943 int i; 943 int i;
944 char* s_value; 944 char* s_value;
945 char new_s_value[256]; 945 char new_s_value[256];
946 char new_mx_value[sizeof(struct GNUNET_DNSPARSER_MxRecord)+256]; 946 char new_mx_value[sizeof(uint16_t)+256];
947 int s_len; 947 int s_len;
948 struct GNUNET_NAMESTORE_RecordData p_rd[rd_count]; 948 struct GNUNET_NAMESTORE_RecordData p_rd[rd_count];
949 char* pos; 949 char* pos;
950 char* trailer; 950 char* trailer;
951 struct GNUNET_DNSPARSER_MxRecord *mx;
952 951
953 if (rd_count > 0) 952 if (rd_count > 0)
954 memcpy(p_rd, rd, rd_count*sizeof(struct GNUNET_NAMESTORE_RecordData)); 953 memcpy(p_rd, rd, rd_count*sizeof(struct GNUNET_NAMESTORE_RecordData));
@@ -971,8 +970,7 @@ finish_lookup(struct ResolverHandle *rh,
971 */ 970 */
972 if (rd[i].record_type == GNUNET_GNS_RECORD_MX) 971 if (rd[i].record_type == GNUNET_GNS_RECORD_MX)
973 { 972 {
974 mx = (struct GNUNET_DNSPARSER_MxRecord*)rd[i].data; 973 s_value = (char*)rd[i].data+sizeof(uint16_t);
975 s_value = (char*)&mx[1];
976 } 974 }
977 else 975 else
978 { 976 {
@@ -1011,15 +1009,13 @@ finish_lookup(struct ResolverHandle *rh,
1011 if (rd[i].record_type == GNUNET_GNS_RECORD_MX) 1009 if (rd[i].record_type == GNUNET_GNS_RECORD_MX)
1012 { 1010 {
1013 1011
1014 p_rd[i].data_size = sizeof(struct GNUNET_DNSPARSER_MxRecord) 1012 p_rd[i].data_size = sizeof(uint16_t)+strlen(new_s_value)+1;
1015 +strlen(new_s_value)+1;
1016 1013
1017 p_rd[i].data = new_mx_value; 1014 p_rd[i].data = new_mx_value;
1018 mx = (struct GNUNET_DNSPARSER_MxRecord*)p_rd[i].data; 1015 /* cpy preference */
1019 mx->preference = 1016 memcpy(new_mx_value, (char*)rd[i].data, sizeof(uint16_t));
1020 ((struct GNUNET_DNSPARSER_MxRecord*)rd[i].data)->preference; 1017 /* cpy string */
1021 memcpy((char*)&mx[1], new_s_value, strlen(new_s_value)+1); 1018 memcpy(new_mx_value+sizeof(uint16_t), new_s_value, strlen(new_s_value)+1);
1022 mx->mxhost = (char*)&mx[1];
1023 } 1019 }
1024 else 1020 else
1025 { 1021 {
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,
97 char* addr; 97 char* addr;
98 int mx_found = 0; 98 int mx_found = 0;
99 int ip_found = 0; 99 int ip_found = 0;
100 struct GNUNET_DNSPARSER_MxRecord *mx; 100 uint16_t mx_preference;
101 char* mx;
101 102
102 if (rd_count == 0) 103 if (rd_count == 0)
103 { 104 {
@@ -126,11 +127,11 @@ on_lookup_result(void *cls, uint32_t rd_count,
126 } 127 }
127 else if (rd[i].record_type == GNUNET_GNS_RECORD_MX) 128 else if (rd[i].record_type == GNUNET_GNS_RECORD_MX)
128 { 129 {
129 mx = (struct GNUNET_DNSPARSER_MxRecord*)rd[i].data; 130 mx = (char*)rd[i].data+sizeof(uint16_t);
130 mx->mxhost = (char*)&mx[1]; 131 mx_preference = *(uint16_t*)rd[i].data;
131 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 132 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
132 "Got MX %s\n", mx->mxhost); 133 "Got MX %s with preference %d\n", mx, mx_preference);
133 if (0 == strcmp(mx->mxhost, TEST_EXPECTED_MX)) 134 if (0 == strcmp(mx, TEST_EXPECTED_MX))
134 { 135 {
135 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 136 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
136 "%s correctly resolved to %s!\n", TEST_DOMAIN, 137 "%s correctly resolved to %s!\n", TEST_DOMAIN,
@@ -253,7 +254,8 @@ do_lookup(void *cls, const struct GNUNET_PeerIdentity *id,
253 struct GNUNET_NAMESTORE_RecordData rd; 254 struct GNUNET_NAMESTORE_RecordData rd;
254 char* ip = TEST_IP; 255 char* ip = TEST_IP;
255 struct in_addr *mail = GNUNET_malloc(sizeof(struct in_addr)); 256 struct in_addr *mail = GNUNET_malloc(sizeof(struct in_addr));
256 struct GNUNET_DNSPARSER_MxRecord *mx_record; 257 char *mx_record;
258 uint16_t mx_preference = 1;
257 rd.expiration = GNUNET_TIME_absolute_get_forever (); 259 rd.expiration = GNUNET_TIME_absolute_get_forever ();
258 GNUNET_assert(1 == inet_pton (AF_INET, ip, mail)); 260 GNUNET_assert(1 == inet_pton (AF_INET, ip, mail));
259 261
@@ -289,10 +291,9 @@ do_lookup(void *cls, const struct GNUNET_PeerIdentity *id,
289 NULL); 291 NULL);
290 292
291 rd.data_size = sizeof(struct GNUNET_DNSPARSER_MxRecord)+strlen(TEST_MX_NAME)+1; 293 rd.data_size = sizeof(struct GNUNET_DNSPARSER_MxRecord)+strlen(TEST_MX_NAME)+1;
292 mx_record = GNUNET_malloc(rd.data_size); 294 mx_record = GNUNET_malloc(sizeof(uint16_t)+strlen(TEST_MX_NAME)+1);
293 mx_record->preference = 1; 295 memcpy(mx_record, &mx_preference, sizeof(uint16_t));
294 mx_record->mxhost = (char*)&mx_record[1]; 296 strcpy(mx_record+sizeof(uint16_t), TEST_MX_NAME);
295 strcpy(mx_record->mxhost, TEST_MX_NAME);
296 rd.data = mx_record; 297 rd.data = mx_record;
297 rd.record_type = GNUNET_GNS_RECORD_MX; 298 rd.record_type = GNUNET_GNS_RECORD_MX;
298 sig = GNUNET_NAMESTORE_create_signature(bob_key, 299 sig = GNUNET_NAMESTORE_create_signature(bob_key,