diff options
author | Martin Schanzenbach <mschanzenbach@posteo.de> | 2012-03-21 14:58:41 +0000 |
---|---|---|
committer | Martin Schanzenbach <mschanzenbach@posteo.de> | 2012-03-21 14:58:41 +0000 |
commit | 6064b3d40f03db919544bae5ef2834e89ce4af10 (patch) | |
tree | 74b075412f264d3a903687aeb52ec6f555b0a7a6 /src | |
parent | 8410fe84848841a7dbc3709ea65e0dd1445860bb (diff) | |
download | gnunet-6064b3d40f03db919544bae5ef2834e89ce4af10.tar.gz gnunet-6064b3d40f03db919544bae5ef2834e89ce4af10.zip |
-fix mxrr
Diffstat (limited to 'src')
-rw-r--r-- | src/gns/gnunet-service-gns_resolver.c | 18 | ||||
-rw-r--r-- | 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, | |||
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, |