Deleted Added
full compact
dname.c (356345) dname.c (361435)
1/*
2 * util/data/dname.h - domain name handling
3 *
4 * Copyright (c) 2007, NLnet Labs. All rights reserved.
5 *
6 * This software is open source.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 219 unchanged lines hidden (view full) ---

228
229 return len;
230}
231
232int
233dname_pkt_compare(sldns_buffer* pkt, uint8_t* d1, uint8_t* d2)
234{
235 uint8_t len1, len2;
1/*
2 * util/data/dname.h - domain name handling
3 *
4 * Copyright (c) 2007, NLnet Labs. All rights reserved.
5 *
6 * This software is open source.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 219 unchanged lines hidden (view full) ---

228
229 return len;
230}
231
232int
233dname_pkt_compare(sldns_buffer* pkt, uint8_t* d1, uint8_t* d2)
234{
235 uint8_t len1, len2;
236 int count1 = 0, count2 = 0;
236 log_assert(pkt && d1 && d2);
237 len1 = *d1++;
238 len2 = *d2++;
239 while( len1 != 0 || len2 != 0 ) {
240 /* resolve ptrs */
241 if(LABEL_IS_PTR(len1)) {
237 log_assert(pkt && d1 && d2);
238 len1 = *d1++;
239 len2 = *d2++;
240 while( len1 != 0 || len2 != 0 ) {
241 /* resolve ptrs */
242 if(LABEL_IS_PTR(len1)) {
243 if((size_t)PTR_OFFSET(len1, *d1)
244 >= sldns_buffer_limit(pkt))
245 return -1;
246 if(count1++ > MAX_COMPRESS_PTRS)
247 return -1;
242 d1 = sldns_buffer_at(pkt, PTR_OFFSET(len1, *d1));
243 len1 = *d1++;
244 continue;
245 }
246 if(LABEL_IS_PTR(len2)) {
248 d1 = sldns_buffer_at(pkt, PTR_OFFSET(len1, *d1));
249 len1 = *d1++;
250 continue;
251 }
252 if(LABEL_IS_PTR(len2)) {
253 if((size_t)PTR_OFFSET(len2, *d2)
254 >= sldns_buffer_limit(pkt))
255 return 1;
256 if(count2++ > MAX_COMPRESS_PTRS)
257 return 1;
247 d2 = sldns_buffer_at(pkt, PTR_OFFSET(len2, *d2));
248 len2 = *d2++;
249 continue;
250 }
251 /* check label length */
252 log_assert(len1 <= LDNS_MAX_LABELLEN);
253 log_assert(len2 <= LDNS_MAX_LABELLEN);
254 if(len1 != len2) {

--- 42 unchanged lines hidden (view full) ---

297}
298
299hashvalue_type
300dname_pkt_hash(sldns_buffer* pkt, uint8_t* dname, hashvalue_type h)
301{
302 uint8_t labuf[LDNS_MAX_LABELLEN+1];
303 uint8_t lablen;
304 int i;
258 d2 = sldns_buffer_at(pkt, PTR_OFFSET(len2, *d2));
259 len2 = *d2++;
260 continue;
261 }
262 /* check label length */
263 log_assert(len1 <= LDNS_MAX_LABELLEN);
264 log_assert(len2 <= LDNS_MAX_LABELLEN);
265 if(len1 != len2) {

--- 42 unchanged lines hidden (view full) ---

308}
309
310hashvalue_type
311dname_pkt_hash(sldns_buffer* pkt, uint8_t* dname, hashvalue_type h)
312{
313 uint8_t labuf[LDNS_MAX_LABELLEN+1];
314 uint8_t lablen;
315 int i;
316 int count = 0;
305
306 /* preserve case of query, make hash label by label */
307 lablen = *dname++;
308 while(lablen) {
309 if(LABEL_IS_PTR(lablen)) {
310 /* follow pointer */
317
318 /* preserve case of query, make hash label by label */
319 lablen = *dname++;
320 while(lablen) {
321 if(LABEL_IS_PTR(lablen)) {
322 /* follow pointer */
323 if((size_t)PTR_OFFSET(lablen, *dname)
324 >= sldns_buffer_limit(pkt))
325 return h;
326 if(count++ > MAX_COMPRESS_PTRS)
327 return h;
311 dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname));
312 lablen = *dname++;
313 continue;
314 }
315 log_assert(lablen <= LDNS_MAX_LABELLEN);
316 labuf[0] = lablen;
317 i=0;
318 while(lablen--) {

--- 17 unchanged lines hidden (view full) ---

336 while(lablen) {
337 if(LABEL_IS_PTR(lablen)) {
338 if(comprcount++ > MAX_COMPRESS_PTRS) {
339 /* too many compression pointers */
340 *to = 0; /* end the result prematurely */
341 return;
342 }
343 /* follow pointer */
328 dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname));
329 lablen = *dname++;
330 continue;
331 }
332 log_assert(lablen <= LDNS_MAX_LABELLEN);
333 labuf[0] = lablen;
334 i=0;
335 while(lablen--) {

--- 17 unchanged lines hidden (view full) ---

353 while(lablen) {
354 if(LABEL_IS_PTR(lablen)) {
355 if(comprcount++ > MAX_COMPRESS_PTRS) {
356 /* too many compression pointers */
357 *to = 0; /* end the result prematurely */
358 return;
359 }
360 /* follow pointer */
361 if((size_t)PTR_OFFSET(lablen, *dname)
362 >= sldns_buffer_limit(pkt))
363 return;
344 dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname));
345 lablen = *dname++;
346 continue;
347 }
348 if(lablen > LDNS_MAX_LABELLEN) {
349 *to = 0; /* end the result prematurely */
350 return;
351 }

--- 12 unchanged lines hidden (view full) ---

364 }
365 /* copy last \0 */
366 *to = 0;
367}
368
369void dname_print(FILE* out, struct sldns_buffer* pkt, uint8_t* dname)
370{
371 uint8_t lablen;
364 dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname));
365 lablen = *dname++;
366 continue;
367 }
368 if(lablen > LDNS_MAX_LABELLEN) {
369 *to = 0; /* end the result prematurely */
370 return;
371 }

--- 12 unchanged lines hidden (view full) ---

384 }
385 /* copy last \0 */
386 *to = 0;
387}
388
389void dname_print(FILE* out, struct sldns_buffer* pkt, uint8_t* dname)
390{
391 uint8_t lablen;
392 int count = 0;
372 if(!out) out = stdout;
373 if(!dname) return;
374
375 lablen = *dname++;
376 if(!lablen)
377 fputc('.', out);
378 while(lablen) {
379 if(LABEL_IS_PTR(lablen)) {
380 /* follow pointer */
381 if(!pkt) {
382 fputs("??compressionptr??", out);
383 return;
384 }
393 if(!out) out = stdout;
394 if(!dname) return;
395
396 lablen = *dname++;
397 if(!lablen)
398 fputc('.', out);
399 while(lablen) {
400 if(LABEL_IS_PTR(lablen)) {
401 /* follow pointer */
402 if(!pkt) {
403 fputs("??compressionptr??", out);
404 return;
405 }
406 if((size_t)PTR_OFFSET(lablen, *dname)
407 >= sldns_buffer_limit(pkt)) {
408 fputs("??compressionptr??", out);
409 return;
410 }
411 if(count++ > MAX_COMPRESS_PTRS) {
412 fputs("??compressionptr??", out);
413 return;
414 }
385 dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname));
386 lablen = *dname++;
387 continue;
388 }
389 if(lablen > LDNS_MAX_LABELLEN) {
390 fputs("??extendedlabel??", out);
391 return;
392 }

--- 160 unchanged lines hidden (view full) ---

553 if(orig_plen < lablen)
554 *endptr = (char *)label;
555 else
556 /* prefix length == label length */
557 *endptr = NULL;
558 return 1;
559}
560
415 dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname));
416 lablen = *dname++;
417 continue;
418 }
419 if(lablen > LDNS_MAX_LABELLEN) {
420 fputs("??extendedlabel??", out);
421 return;
422 }

--- 160 unchanged lines hidden (view full) ---

583 if(orig_plen < lablen)
584 *endptr = (char *)label;
585 else
586 /* prefix length == label length */
587 *endptr = NULL;
588 return 1;
589}
590
591int
592dname_has_label(uint8_t* dname, size_t dnamelen, uint8_t* label)
593{
594 size_t len;
595
596 /* 1 byte needed for the label length */
597 if(dnamelen < 1)
598 return 0;
599
600 len = *dname;
601 while(len <= dnamelen) {
602 if(!(*dname)) {
603 if(*dname == *label)
604 return 1; /* empty label match */
605 /* termination label found, stop iterating */
606 return 0;
607 }
608 if(*dname == *label && *label &&
609 memlowercmp(dname+1, label+1, *dname) == 0)
610 return 1;
611 len += *dname;
612 dname += *dname;
613 dname++;
614 len++;
615 }
616 return 0;
617}
618
561int
562dname_buffer_write(sldns_buffer* pkt, uint8_t* dname)
563{
564 uint8_t lablen;
565
566 if(sldns_buffer_remaining(pkt) < 1)
567 return 0;
568 lablen = *dname++;

--- 255 unchanged lines hidden ---
619int
620dname_buffer_write(sldns_buffer* pkt, uint8_t* dname)
621{
622 uint8_t lablen;
623
624 if(sldns_buffer_remaining(pkt) < 1)
625 return 0;
626 lablen = *dname++;

--- 255 unchanged lines hidden ---