diff options
Diffstat (limited to 'src/vpn/gnunet-dns-parser.c')
-rw-r--r-- | src/vpn/gnunet-dns-parser.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/vpn/gnunet-dns-parser.c b/src/vpn/gnunet-dns-parser.c index 31b0af1a7..e3b03fefd 100644 --- a/src/vpn/gnunet-dns-parser.c +++ b/src/vpn/gnunet-dns-parser.c | |||
@@ -154,6 +154,7 @@ unparse_dns_name(char* dest, char* src, size_t len) | |||
154 | cnt = 0; | 154 | cnt = 0; |
155 | b = dest; | 155 | b = dest; |
156 | dest++; | 156 | dest++; |
157 | src++; | ||
157 | } | 158 | } |
158 | *b = 0; | 159 | *b = 0; |
159 | } | 160 | } |
@@ -163,36 +164,36 @@ unparse_dns_packet (struct dns_pkt_parsed* ppkt) | |||
163 | { | 164 | { |
164 | size_t size = sizeof(struct dns_pkt) - 1; | 165 | size_t size = sizeof(struct dns_pkt) - 1; |
165 | int i; | 166 | int i; |
166 | for (i = 0; i < ppkt->s.qdcount; i++) | 167 | for (i = 0; i < ntohs(ppkt->s.qdcount); i++) |
167 | size += ppkt->queries[i]->namelen + 1; | 168 | size += ppkt->queries[i]->namelen + 1; |
168 | 169 | ||
169 | for (i = 0; i < ppkt->s.ancount; i++) | 170 | for (i = 0; i < ntohs(ppkt->s.ancount); i++) |
170 | { | 171 | { |
171 | size += ppkt->answers[i]->namelen + 1; | 172 | size += ppkt->answers[i]->namelen + 1; |
172 | size += ppkt->answers[i]->data_len; | 173 | size += ppkt->answers[i]->data_len; |
173 | } | 174 | } |
174 | for (i = 0; i < ppkt->s.nscount; i++) | 175 | for (i = 0; i < ntohs(ppkt->s.nscount); i++) |
175 | { | 176 | { |
176 | size += ppkt->nameservers[i]->namelen + 1; | 177 | size += ppkt->nameservers[i]->namelen + 1; |
177 | size += ppkt->nameservers[i]->data_len; | 178 | size += ppkt->nameservers[i]->data_len; |
178 | } | 179 | } |
179 | for (i = 0; i < ppkt->s.arcount; i++) | 180 | for (i = 0; i < ntohs(ppkt->s.arcount); i++) |
180 | { | 181 | { |
181 | size += ppkt->additional[i]->namelen + 1; | 182 | size += ppkt->additional[i]->namelen + 1; |
182 | size += ppkt->additional[i]->data_len; | 183 | size += ppkt->additional[i]->data_len; |
183 | } | 184 | } |
184 | 185 | ||
185 | size += 4*ppkt->s.qdcount + 10*( | 186 | size += 4*ntohs(ppkt->s.qdcount) + 10*( |
186 | ppkt->s.ancount+ | 187 | ntohs(ppkt->s.ancount)+ |
187 | ppkt->s.arcount+ | 188 | ntohs(ppkt->s.arcount)+ |
188 | ppkt->s.nscount); | 189 | ntohs(ppkt->s.nscount)); |
189 | 190 | ||
190 | struct dns_pkt *pkt = GNUNET_malloc(size); | 191 | struct dns_pkt *pkt = GNUNET_malloc(size); |
191 | char *pkt_c = (char*)pkt; | 192 | char *pkt_c = (char*)pkt; |
192 | memcpy(&pkt->s, &ppkt->s, sizeof ppkt->s); | 193 | memcpy(&pkt->s, &ppkt->s, sizeof ppkt->s); |
193 | size_t idx = sizeof ppkt->s; | 194 | size_t idx = sizeof ppkt->s; |
194 | 195 | ||
195 | for (i = 0; i < ppkt->s.qdcount; i++) | 196 | for (i = 0; i < ntohs(ppkt->s.qdcount); i++) |
196 | { | 197 | { |
197 | unparse_dns_name(&pkt_c[idx], ppkt->queries[i]->name, ppkt->queries[i]->namelen); | 198 | unparse_dns_name(&pkt_c[idx], ppkt->queries[i]->name, ppkt->queries[i]->namelen); |
198 | idx += ppkt->queries[i]->namelen; | 199 | idx += ppkt->queries[i]->namelen; |
@@ -202,7 +203,7 @@ unparse_dns_packet (struct dns_pkt_parsed* ppkt) | |||
202 | idx += sizeof(struct dns_query_line); | 203 | idx += sizeof(struct dns_query_line); |
203 | } | 204 | } |
204 | 205 | ||
205 | for (i = 0; i < ppkt->s.ancount; i++) | 206 | for (i = 0; i < ntohs(ppkt->s.ancount); i++) |
206 | { | 207 | { |
207 | unparse_dns_name(&pkt_c[idx], ppkt->answers[i]->name, ppkt->answers[i]->namelen); | 208 | unparse_dns_name(&pkt_c[idx], ppkt->answers[i]->name, ppkt->answers[i]->namelen); |
208 | idx += ppkt->answers[i]->namelen; | 209 | idx += ppkt->answers[i]->namelen; |
@@ -216,7 +217,7 @@ unparse_dns_packet (struct dns_pkt_parsed* ppkt) | |||
216 | idx += ppkt->answers[i]->data_len; | 217 | idx += ppkt->answers[i]->data_len; |
217 | } | 218 | } |
218 | 219 | ||
219 | for (i = 0; i < ppkt->s.nscount; i++) | 220 | for (i = 0; i < ntohs(ppkt->s.nscount); i++) |
220 | { | 221 | { |
221 | unparse_dns_name(&pkt_c[idx], ppkt->nameservers[i]->name, ppkt->nameservers[i]->namelen); | 222 | unparse_dns_name(&pkt_c[idx], ppkt->nameservers[i]->name, ppkt->nameservers[i]->namelen); |
222 | idx += ppkt->nameservers[i]->namelen; | 223 | idx += ppkt->nameservers[i]->namelen; |
@@ -230,7 +231,7 @@ unparse_dns_packet (struct dns_pkt_parsed* ppkt) | |||
230 | idx += ppkt->nameservers[i]->data_len; | 231 | idx += ppkt->nameservers[i]->data_len; |
231 | } | 232 | } |
232 | 233 | ||
233 | for (i = 0; i < ppkt->s.arcount; i++) | 234 | for (i = 0; i < ntohs(ppkt->s.arcount); i++) |
234 | { | 235 | { |
235 | unparse_dns_name(&pkt_c[idx], ppkt->additional[i]->name, ppkt->additional[i]->namelen); | 236 | unparse_dns_name(&pkt_c[idx], ppkt->additional[i]->name, ppkt->additional[i]->namelen); |
236 | idx += ppkt->additional[i]->namelen; | 237 | idx += ppkt->additional[i]->namelen; |