aboutsummaryrefslogtreecommitdiff
path: root/src/vpn/gnunet-dns-parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vpn/gnunet-dns-parser.c')
-rw-r--r--src/vpn/gnunet-dns-parser.c25
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;