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 --- |