00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <ldns/config.h>
00011
00012 #include <ldns/ldns.h>
00013
00014 #include <strings.h>
00015 #include <limits.h>
00016
00017 #include <errno.h>
00018
00019 #define LDNS_SYNTAX_DATALEN 16
00020 #define LDNS_TTL_DATALEN 21
00021 #define LDNS_RRLIST_INIT 8
00022
00023 ldns_rr *
00024 ldns_rr_new(void)
00025 {
00026 ldns_rr *rr;
00027 rr = LDNS_MALLOC(ldns_rr);
00028 if (!rr) {
00029 return NULL;
00030 }
00031
00032 ldns_rr_set_owner(rr, NULL);
00033 ldns_rr_set_rd_count(rr, 0);
00034 rr->_rdata_fields = NULL;
00035 ldns_rr_set_class(rr, LDNS_RR_CLASS_IN);
00036 ldns_rr_set_ttl(rr, LDNS_DEFAULT_TTL);
00037 return rr;
00038 }
00039
00040 ldns_rr *
00041 ldns_rr_new_frm_type(ldns_rr_type t)
00042 {
00043 ldns_rr *rr;
00044 const ldns_rr_descriptor *desc;
00045 size_t i;
00046
00047 rr = LDNS_MALLOC(ldns_rr);
00048 if (!rr) {
00049 return NULL;
00050 }
00051
00052 desc = ldns_rr_descript(t);
00053
00054 rr->_rdata_fields = LDNS_XMALLOC(ldns_rdf *, ldns_rr_descriptor_minimum(desc));
00055 for (i = 0; i < ldns_rr_descriptor_minimum(desc); i++) {
00056 rr->_rdata_fields[i] = NULL;
00057 }
00058
00059
00060 ldns_rr_set_rd_count(rr, ldns_rr_descriptor_minimum(desc));
00061 ldns_rr_set_class(rr, LDNS_RR_CLASS_IN);
00062 ldns_rr_set_ttl(rr, LDNS_DEFAULT_TTL);
00063 ldns_rr_set_type(rr, t);
00064 return rr;
00065 }
00066
00067 void
00068 ldns_rr_free(ldns_rr *rr)
00069 {
00070 size_t i;
00071 if (rr) {
00072 if (ldns_rr_owner(rr)) {
00073 ldns_rdf_deep_free(ldns_rr_owner(rr));
00074 }
00075 for (i = 0; i < ldns_rr_rd_count(rr); i++) {
00076 ldns_rdf_deep_free(ldns_rr_rdf(rr, i));
00077 }
00078 LDNS_FREE(rr->_rdata_fields);
00079 LDNS_FREE(rr);
00080 }
00081 }
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096 ldns_status
00097 ldns_rr_new_frm_str(ldns_rr **newrr, const char *str, uint32_t default_ttl, ldns_rdf *origin,
00098 ldns_rdf **prev)
00099 {
00100 ldns_rr *new;
00101 const ldns_rr_descriptor *desc;
00102 ldns_rr_type rr_type;
00103 ldns_buffer *rr_buf;
00104 ldns_buffer *rd_buf;
00105 uint32_t ttl_val;
00106 char *owner;
00107 char *ttl;
00108 ldns_rr_class clas_val;
00109 char *clas;
00110 char *type = NULL;
00111 char *rdata;
00112 char *rd;
00113 char *b64;
00114 size_t rd_strlen;
00115 const char *delimiters;
00116 ssize_t c;
00117 ldns_rdf *owner_dname;
00118
00119
00120 bool done;
00121 bool quoted;
00122
00123 ldns_rdf *r = NULL;
00124 uint16_t r_cnt;
00125 uint16_t r_min;
00126 uint16_t r_max;
00127
00128 uint16_t hex_data_size;
00129 char *hex_data_str;
00130 uint16_t cur_hex_data_size;
00131 uint8_t *hex_data;
00132 size_t hex_pos;
00133
00134 new = ldns_rr_new();
00135
00136 owner = LDNS_XMALLOC(char, LDNS_MAX_DOMAINLEN + 1);
00137 ttl = LDNS_XMALLOC(char, 21);
00138 clas = LDNS_XMALLOC(char, 11);
00139 rdata = LDNS_XMALLOC(char, LDNS_MAX_PACKETLEN + 1);
00140 rr_buf = LDNS_MALLOC(ldns_buffer);
00141 rd_buf = LDNS_MALLOC(ldns_buffer);
00142 rd = LDNS_XMALLOC(char, LDNS_MAX_RDFLEN);
00143 b64 = LDNS_XMALLOC(char, LDNS_MAX_RDFLEN);
00144 if (!new || !owner || !ttl || !clas || !rdata || !rr_buf || !rd_buf || !rd | !b64) {
00145 return LDNS_STATUS_MEM_ERR;
00146 }
00147 r_cnt = 0;
00148 ttl_val = 0;
00149 clas_val = 0;
00150
00151 ldns_buffer_new_frm_data(rr_buf, (char*)str, strlen(str));
00152
00153
00154 if (ldns_bget_token(rr_buf, owner, "\t\n ", LDNS_MAX_DOMAINLEN) == -1) {
00155 LDNS_FREE(owner);
00156 LDNS_FREE(ttl);
00157 LDNS_FREE(clas);
00158 LDNS_FREE(rdata);
00159 LDNS_FREE(rd);
00160 LDNS_FREE(rd_buf);
00161 ldns_buffer_free(rr_buf);
00162 ldns_rr_free(new);
00163 return LDNS_STATUS_SYNTAX_ERR;
00164 }
00165
00166 if (ldns_bget_token(rr_buf, ttl, "\t\n ", LDNS_TTL_DATALEN) == -1) {
00167 LDNS_FREE(owner);
00168 LDNS_FREE(ttl);
00169 LDNS_FREE(clas);
00170 LDNS_FREE(rdata);
00171 LDNS_FREE(rd);
00172 LDNS_FREE(rd_buf);
00173 ldns_buffer_free(rr_buf);
00174 ldns_rr_free(new);
00175 return LDNS_STATUS_SYNTAX_TTL_ERR;
00176 }
00177 ttl_val = (uint32_t) strtol(ttl, NULL, 10);
00178
00179 if (strlen(ttl) > 0 && !isdigit(ttl[0])) {
00180
00181 if (default_ttl == 0) {
00182 ttl_val = LDNS_DEFAULT_TTL;
00183 } else {
00184 ttl_val = default_ttl;
00185 }
00186
00187
00188
00189
00190
00191 clas_val = ldns_get_rr_class_by_name(ttl);
00192
00193
00194
00195 if (clas_val == 0) {
00196 clas_val = LDNS_RR_CLASS_IN;
00197 type = LDNS_XMALLOC(char, strlen(ttl) + 1);
00198 strncpy(type, ttl, strlen(ttl) + 1);
00199 }
00200 } else {
00201 if (ldns_bget_token(rr_buf, clas, "\t\n ", LDNS_SYNTAX_DATALEN) == -1) {
00202 LDNS_FREE(owner);
00203 LDNS_FREE(ttl);
00204 LDNS_FREE(clas);
00205 LDNS_FREE(rdata);
00206 LDNS_FREE(rd);
00207 LDNS_FREE(rd_buf);
00208 ldns_buffer_free(rr_buf);
00209 ldns_rr_free(new);
00210 return LDNS_STATUS_SYNTAX_CLASS_ERR;
00211 }
00212 clas_val = ldns_get_rr_class_by_name(clas);
00213
00214
00215
00216 if (clas_val == 0) {
00217 clas_val = LDNS_RR_CLASS_IN;
00218 type = LDNS_XMALLOC(char, strlen(clas) + 1);
00219 strncpy(type, clas, strlen(clas) + 1);
00220 }
00221 }
00222
00223
00224 if (!type) {
00225 type = LDNS_XMALLOC(char, LDNS_SYNTAX_DATALEN);
00226 if (ldns_bget_token(rr_buf, type, "\t\n ", LDNS_SYNTAX_DATALEN) == -1) {
00227 LDNS_FREE(owner);
00228 LDNS_FREE(ttl);
00229 LDNS_FREE(clas);
00230 LDNS_FREE(rdata);
00231 LDNS_FREE(rd);
00232 LDNS_FREE(rd_buf);
00233 ldns_buffer_free(rr_buf);
00234 ldns_rr_free(new);
00235 return LDNS_STATUS_SYNTAX_TYPE_ERR;
00236 }
00237 }
00238
00239 if (ldns_bget_token(rr_buf, rdata, "\0", LDNS_MAX_PACKETLEN) == -1) {
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253 }
00254
00255 ldns_buffer_new_frm_data(rd_buf, rdata, strlen(rdata));
00256
00257 if (strlen(owner) <= 1 && strncmp(owner, "@", 1) == 0) {
00258 if (origin) {
00259 ldns_rr_set_owner(new, ldns_rdf_clone(origin));
00260 } else if (prev && *prev) {
00261 ldns_rr_set_owner(new, ldns_rdf_clone(*prev));
00262 } else {
00263
00264 ldns_rr_set_owner(new, ldns_dname_new_frm_str("."));
00265 }
00266 } else {
00267 if (strlen(owner) == 0) {
00268
00269
00270 if (prev && *prev) {
00271 ldns_rr_set_owner(new, ldns_rdf_clone(*prev));
00272 } else if (origin) {
00273 ldns_rr_set_owner(new, ldns_rdf_clone(origin));
00274 } else {
00275 ldns_rr_set_owner(new, ldns_dname_new_frm_str("."));
00276 }
00277 } else {
00278 owner_dname = ldns_dname_new_frm_str(owner);
00279 if (!owner_dname) {
00280 LDNS_FREE(owner);
00281 LDNS_FREE(ttl);
00282 LDNS_FREE(clas);
00283 LDNS_FREE(type);
00284 LDNS_FREE(rdata);
00285 LDNS_FREE(rd);
00286 LDNS_FREE(rd_buf);
00287 ldns_buffer_free(rr_buf);
00288 ldns_rr_free(new);
00289 return LDNS_STATUS_SYNTAX_ERR;
00290 }
00291
00292 ldns_rr_set_owner(new, owner_dname);
00293 if (!ldns_dname_str_absolute(owner) && origin) {
00294 if(ldns_dname_cat(ldns_rr_owner(new),
00295 origin) != LDNS_STATUS_OK) {
00296 LDNS_FREE(owner);
00297 LDNS_FREE(ttl);
00298 LDNS_FREE(clas);
00299 LDNS_FREE(type);
00300 LDNS_FREE(rdata);
00301 LDNS_FREE(rd);
00302 LDNS_FREE(rd_buf);
00303 ldns_buffer_free(rr_buf);
00304 ldns_rr_free(new);
00305 return LDNS_STATUS_SYNTAX_ERR;
00306 }
00307 }
00308 if (prev) {
00309 ldns_rdf_deep_free(*prev);
00310 *prev = ldns_rdf_clone(ldns_rr_owner(new));
00311 }
00312 }
00313 }
00314 LDNS_FREE(owner);
00315
00316 ldns_rr_set_ttl(new, ttl_val);
00317 LDNS_FREE(ttl);
00318
00319 ldns_rr_set_class(new, clas_val);
00320 LDNS_FREE(clas);
00321
00322 rr_type = ldns_get_rr_type_by_name(type);
00323 LDNS_FREE(type);
00324
00325 desc = ldns_rr_descript((uint16_t)rr_type);
00326 ldns_rr_set_type(new, rr_type);
00327 if (desc) {
00328
00329 r_max = ldns_rr_descriptor_maximum(desc);
00330 r_min = ldns_rr_descriptor_minimum(desc);
00331 } else {
00332 r_min = 1;
00333 r_max = 1;
00334 }
00335
00336
00337
00338 switch(rr_type) {
00339 default:
00340 done = false;
00341
00342 for (r_cnt = 0; !done && r_cnt < r_max;
00343 r_cnt++) {
00344 quoted = false;
00345
00346 if (ldns_rr_descriptor_field_type(desc,
00347 r_cnt) == LDNS_RDF_TYPE_B64 ||
00348 ldns_rr_descriptor_field_type(desc,
00349 r_cnt) == LDNS_RDF_TYPE_LOC ||
00350 ldns_rr_descriptor_field_type(desc,
00351 r_cnt) == LDNS_RDF_TYPE_WKS ||
00352 ldns_rr_descriptor_field_type(desc,
00353 r_cnt) == LDNS_RDF_TYPE_NSEC ||
00354 ldns_rr_descriptor_field_type(desc,
00355 r_cnt) == LDNS_RDF_TYPE_STR) {
00356 delimiters = "\n\t";
00357 } else {
00358 delimiters = "\n\t ";
00359 }
00360
00361 if (ldns_rr_descriptor_field_type(desc,
00362 r_cnt) == LDNS_RDF_TYPE_STR &&
00363 ldns_buffer_remaining(rd_buf) > 0
00364 ) {
00365
00366 while (*(ldns_buffer_current(rd_buf)) == ' ') {
00367 ldns_buffer_skip(rd_buf, 1);
00368 }
00369
00370 if (*(ldns_buffer_current(rd_buf)) == '\"') {
00371 delimiters = "\"\0";
00372 ldns_buffer_skip(rd_buf, 1);
00373 }
00374
00375 quoted = true;
00376 }
00377
00378
00379
00380 if ((c = ldns_bget_token(rd_buf, rd, delimiters,
00381 LDNS_MAX_RDFLEN)) != -1) {
00382
00383
00384
00385
00386 rd_strlen = strlen(rd);
00387
00388
00389 if (rd_strlen == 2 && strncmp(rd, "\\#", 2) == 0 && !quoted) {
00390 c = ldns_bget_token(rd_buf, rd, delimiters, LDNS_MAX_RDFLEN);
00391 if (c == -1) {
00392
00393 ldns_buffer_free(rd_buf);
00394 LDNS_FREE(rd);
00395 return LDNS_STATUS_SYNTAX_RDATA_ERR;
00396 }
00397 hex_data_size = (uint16_t) atoi(rd);
00398
00399 hex_data_str = LDNS_XMALLOC(char, 2 * hex_data_size + 1);
00400 if (!hex_data_str) {
00401
00402 ldns_buffer_free(rd_buf);
00403 LDNS_FREE(rd);
00404 return LDNS_STATUS_SYNTAX_RDATA_ERR;
00405 }
00406 cur_hex_data_size = 0;
00407 while(cur_hex_data_size < 2 * hex_data_size) {
00408 c = ldns_bget_token(rd_buf, rd, delimiters, LDNS_MAX_RDFLEN);
00409 rd_strlen = strlen(rd);
00410 strncpy(hex_data_str + cur_hex_data_size, rd, rd_strlen);
00411 cur_hex_data_size += rd_strlen;
00412 }
00413 hex_data_str[cur_hex_data_size] = '\0';
00414
00415
00416
00417 if (desc) {
00418 hex_data = LDNS_XMALLOC(uint8_t, hex_data_size + 2);
00419 ldns_write_uint16(hex_data, hex_data_size);
00420 ldns_hexstring_to_data(hex_data + 2, hex_data_str);
00421 hex_pos = 0;
00422 ldns_wire2rdf(new, hex_data, hex_data_size+2, &hex_pos);
00423 LDNS_FREE(hex_data);
00424 } else {
00425 r = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_HEX, hex_data_str);
00426 ldns_rdf_set_type(r, LDNS_RDF_TYPE_UNKNOWN);
00427 ldns_rr_push_rdf(new, r);
00428 }
00429 LDNS_FREE(hex_data_str);
00430 } else {
00431
00432 switch(ldns_rr_descriptor_field_type(desc, r_cnt)) {
00433 case LDNS_RDF_TYPE_B64:
00434
00435
00436 if ((c = ldns_bget_token(rd_buf, b64, "\n", LDNS_MAX_RDFLEN)) != -1) {
00437 rd = strncat(rd, b64, LDNS_MAX_RDFLEN);
00438 }
00439 r = ldns_rdf_new_frm_str(
00440 ldns_rr_descriptor_field_type(desc, r_cnt),
00441 rd);
00442 break;
00443 case LDNS_RDF_TYPE_DNAME:
00444 r = ldns_rdf_new_frm_str(
00445 ldns_rr_descriptor_field_type(desc, r_cnt),
00446 rd);
00447
00448
00449 if (rd_strlen == 1 && ldns_rdf_data(r)[1] == '@') {
00450 ldns_rdf_deep_free(r);
00451 if (origin) {
00452 r = ldns_rdf_clone(origin);
00453 } else {
00454
00455 if (rr_type == LDNS_RR_TYPE_SOA) {
00456 r = ldns_rdf_clone(ldns_rr_owner(new));
00457 } else {
00458 r = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, ".");
00459 }
00460 }
00461 } else if (rd_strlen > 1 && !ldns_dname_str_absolute(rd) && origin) {
00462 if (ldns_dname_cat(r, origin) != LDNS_STATUS_OK) {
00463 return LDNS_STATUS_ERR;
00464 }
00465 }
00466 break;
00467 default:
00468 r = ldns_rdf_new_frm_str(
00469 ldns_rr_descriptor_field_type(desc, r_cnt),
00470 rd);
00471 break;
00472 }
00473 if (r) {
00474 ldns_rr_push_rdf(new, r);
00475 } else {
00476 LDNS_FREE(rd);
00477 LDNS_FREE(b64);
00478 ldns_buffer_free(rd_buf);
00479 ldns_buffer_free(rr_buf);
00480 LDNS_FREE(rdata);
00481 ldns_rr_free(new);
00482 return LDNS_STATUS_SYNTAX_RDATA_ERR;
00483 }
00484
00485 }
00486 if (quoted) {
00487 if (ldns_buffer_available(rd_buf, 1)) {
00488 ldns_buffer_skip(rd_buf, 1);
00489 } else {
00490 done = true;
00491 }
00492 }
00493 } else {
00494 done = true;
00495 }
00496 }
00497 }
00498 LDNS_FREE(rd);
00499 LDNS_FREE(b64);
00500 ldns_buffer_free(rd_buf);
00501 ldns_buffer_free(rr_buf);
00502 LDNS_FREE(rdata);
00503
00504 if (newrr) {
00505 *newrr = new;
00506 }
00507 return LDNS_STATUS_OK;
00508 }
00509
00510 ldns_status
00511 ldns_rr_new_frm_fp(ldns_rr **newrr, FILE *fp, uint32_t *ttl, ldns_rdf **origin, ldns_rdf **prev)
00512 {
00513 return ldns_rr_new_frm_fp_l(newrr, fp, ttl, origin, prev, NULL);
00514 }
00515
00516 ldns_status
00517 ldns_rr_new_frm_fp_l(ldns_rr **newrr, FILE *fp, uint32_t *default_ttl, ldns_rdf **origin, ldns_rdf **prev, int *line_nr)
00518 {
00519 char *line;
00520 const char *endptr;
00521 ldns_rr *rr;
00522 char *keyword;
00523 uint32_t ttl;
00524 ldns_rdf *tmp;
00525 ldns_status s;
00526 ssize_t size;
00527
00528 s = LDNS_STATUS_ERR;
00529 if (default_ttl) {
00530 ttl = *default_ttl;
00531 } else {
00532 ttl = 0;
00533 }
00534
00535 line = LDNS_XMALLOC(char, LDNS_MAX_LINELEN + 1);
00536 if (!line) {
00537 return LDNS_STATUS_MEM_ERR;
00538 }
00539
00540
00541 if ((size = ldns_fget_token_l(fp, line, LDNS_PARSE_SKIP_SPACE, LDNS_MAX_LINELEN, line_nr)) == -1) {
00542 LDNS_FREE(line);
00543
00544
00545
00546
00547 return LDNS_STATUS_SYNTAX_ERR;
00548 }
00549
00550
00551
00552
00553 if (size == 0) {
00554 LDNS_FREE(line);
00555 return LDNS_STATUS_SYNTAX_EMPTY;
00556 }
00557
00558 if ((keyword = strstr(line, "$ORIGIN "))) {
00559 if (*origin) {
00560 ldns_rdf_deep_free(*origin);
00561 *origin = NULL;
00562 }
00563 tmp = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, keyword + 8);
00564 if (!tmp) {
00565
00566 LDNS_FREE(line);
00567 return LDNS_STATUS_SYNTAX_DNAME_ERR;
00568 }
00569 *origin = tmp;
00570 s = LDNS_STATUS_SYNTAX_ORIGIN;
00571 } else if ((keyword = strstr(line, "$TTL "))) {
00572 if (default_ttl) {
00573 *default_ttl = ldns_str2period(keyword + 5, &endptr);
00574 }
00575 s = LDNS_STATUS_SYNTAX_TTL;
00576 } else {
00577 if (origin && *origin) {
00578 s = ldns_rr_new_frm_str(&rr, (const char*) line, ttl, *origin, prev);
00579 } else {
00580 s = ldns_rr_new_frm_str(&rr, (const char*) line, ttl, NULL, prev);
00581 }
00582
00583 }
00584 LDNS_FREE(line);
00585 if (newrr && s == LDNS_STATUS_OK) {
00586 *newrr = rr;
00587 }
00588 return s;
00589 }
00590
00591 void
00592 ldns_rr_set_owner(ldns_rr *rr, ldns_rdf *owner)
00593 {
00594 rr->_owner = owner;
00595 }
00596
00597 void
00598 ldns_rr_set_ttl(ldns_rr *rr, uint32_t ttl)
00599 {
00600 rr->_ttl = ttl;
00601 }
00602
00603 void
00604 ldns_rr_set_rd_count(ldns_rr *rr, size_t count)
00605 {
00606 rr->_rd_count = count;
00607 }
00608
00609 void
00610 ldns_rr_set_type(ldns_rr *rr, ldns_rr_type rr_type)
00611 {
00612 rr->_rr_type = rr_type;
00613 }
00614
00615 void
00616 ldns_rr_set_class(ldns_rr *rr, ldns_rr_class rr_class)
00617 {
00618 rr->_rr_class = rr_class;
00619 }
00620
00621 ldns_rdf *
00622 ldns_rr_set_rdf(ldns_rr *rr, const ldns_rdf *f, size_t position)
00623 {
00624 size_t rd_count;
00625 ldns_rdf *pop;
00626 ldns_rdf **rdata_fields;
00627
00628 rd_count = ldns_rr_rd_count(rr);
00629 if (position < rd_count) {
00630 rdata_fields = rr->_rdata_fields;
00631
00632 pop = rr->_rdata_fields[position];
00633 rr->_rdata_fields[position] = (ldns_rdf*)f;
00634 return pop;
00635 } else {
00636 return NULL;
00637 }
00638 }
00639
00640 bool
00641 ldns_rr_push_rdf(ldns_rr *rr, const ldns_rdf *f)
00642 {
00643 size_t rd_count;
00644 ldns_rdf **rdata_fields;
00645
00646 rd_count = ldns_rr_rd_count(rr);
00647
00648
00649 rdata_fields = LDNS_XREALLOC(
00650 rr->_rdata_fields, ldns_rdf *, rd_count + 1);
00651 if (!rdata_fields) {
00652 return false;
00653 }
00654
00655
00656 rr->_rdata_fields = rdata_fields;
00657 rr->_rdata_fields[rd_count] = (ldns_rdf*)f;
00658
00659 ldns_rr_set_rd_count(rr, rd_count + 1);
00660 return true;
00661 }
00662
00663 ldns_rdf *
00664 ldns_rr_pop_rdf(ldns_rr *rr)
00665 {
00666 size_t rd_count;
00667 ldns_rdf *pop;
00668
00669 rd_count = ldns_rr_rd_count(rr);
00670
00671 if (rd_count == 0) {
00672 return NULL;
00673 }
00674
00675 pop = rr->_rdata_fields[rd_count];
00676
00677
00678 rr->_rdata_fields = LDNS_XREALLOC(
00679 rr->_rdata_fields, ldns_rdf *, rd_count - 1);
00680
00681 ldns_rr_set_rd_count(rr, rd_count - 1);
00682 return pop;
00683 }
00684
00685 ldns_rdf *
00686 ldns_rr_rdf(const ldns_rr *rr, size_t nr)
00687 {
00688 if (nr < ldns_rr_rd_count(rr)) {
00689 return rr->_rdata_fields[nr];
00690 } else {
00691 return NULL;
00692 }
00693 }
00694
00695 ldns_rdf *
00696 ldns_rr_owner(const ldns_rr *rr)
00697 {
00698 return rr->_owner;
00699 }
00700
00701 uint32_t
00702 ldns_rr_ttl(const ldns_rr *rr)
00703 {
00704 return rr->_ttl;
00705 }
00706
00707 size_t
00708 ldns_rr_rd_count(const ldns_rr *rr)
00709 {
00710 return rr->_rd_count;
00711 }
00712
00713 ldns_rr_type
00714 ldns_rr_get_type(const ldns_rr *rr)
00715 {
00716 return rr->_rr_type;
00717 }
00718
00719 ldns_rr_class
00720 ldns_rr_get_class(const ldns_rr *rr)
00721 {
00722 return rr->_rr_class;
00723 }
00724
00725
00726
00727 size_t
00728 ldns_rr_list_rr_count(const ldns_rr_list *rr_list)
00729 {
00730 if (rr_list) {
00731 return rr_list->_rr_count;
00732 } else {
00733 return 0;
00734 }
00735 }
00736
00737 ldns_rr *
00738 ldns_rr_list_set_rr(ldns_rr_list *rr_list, const ldns_rr *r, size_t count)
00739 {
00740 ldns_rr *old;
00741
00742 if (count > ldns_rr_list_rr_count(rr_list)) {
00743 return NULL;
00744 }
00745
00746 old = ldns_rr_list_rr(rr_list, count);
00747
00748
00749 rr_list->_rrs[count] = (ldns_rr*)r;
00750 return old;
00751 }
00752
00753 void
00754 ldns_rr_list_set_rr_count(ldns_rr_list *rr_list, size_t count)
00755 {
00756 assert(count <= rr_list->_rr_capacity);
00757 rr_list->_rr_count = count;
00758 }
00759
00760 ldns_rr *
00761 ldns_rr_list_rr(const ldns_rr_list *rr_list, size_t nr)
00762 {
00763 if (nr < ldns_rr_list_rr_count(rr_list)) {
00764 return rr_list->_rrs[nr];
00765 } else {
00766 return NULL;
00767 }
00768 }
00769
00770 ldns_rr_list *
00771 ldns_rr_list_new()
00772 {
00773 ldns_rr_list *rr_list = LDNS_MALLOC(ldns_rr_list);
00774 rr_list->_rr_count = 0;
00775 rr_list->_rr_capacity = 0;
00776 rr_list->_rrs = NULL;
00777 return rr_list;
00778 }
00779
00780 void
00781 ldns_rr_list_free(ldns_rr_list *rr_list)
00782 {
00783 if (rr_list) {
00784 LDNS_FREE(rr_list->_rrs);
00785 LDNS_FREE(rr_list);
00786 }
00787 }
00788
00789 void
00790 ldns_rr_list_deep_free(ldns_rr_list *rr_list)
00791 {
00792 size_t i;
00793
00794 if (rr_list) {
00795 for (i=0; i < ldns_rr_list_rr_count(rr_list); i++) {
00796 ldns_rr_free(ldns_rr_list_rr(rr_list, i));
00797 }
00798 LDNS_FREE(rr_list->_rrs);
00799 LDNS_FREE(rr_list);
00800 }
00801 }
00802
00803
00804
00805 bool
00806 ldns_rr_list_cat(ldns_rr_list *left, ldns_rr_list *right)
00807 {
00808 size_t r_rr_count;
00809 size_t l_rr_count;
00810 size_t i;
00811
00812 if (left) {
00813 l_rr_count = ldns_rr_list_rr_count(left);
00814 } else {
00815 return false;
00816 }
00817
00818 if (right) {
00819 r_rr_count = ldns_rr_list_rr_count(right);
00820 } else {
00821 r_rr_count = 0;
00822 }
00823
00824
00825 for(i = 0; i < r_rr_count; i++) {
00826 ldns_rr_list_push_rr(left, ldns_rr_list_rr(right, i));
00827 }
00828 return true;
00829 }
00830
00831 ldns_rr_list *
00832 ldns_rr_list_cat_clone(ldns_rr_list *left, ldns_rr_list *right)
00833 {
00834 size_t l_rr_count;
00835 size_t r_rr_count;
00836 size_t i;
00837 ldns_rr_list *cat;
00838
00839 l_rr_count = 0;
00840
00841 if (left) {
00842 l_rr_count = ldns_rr_list_rr_count(left);
00843 } else {
00844 return ldns_rr_list_clone(right);
00845 }
00846
00847 if (right) {
00848 r_rr_count = ldns_rr_list_rr_count(right);
00849 } else {
00850 r_rr_count = 0;
00851 }
00852
00853 cat = ldns_rr_list_new();
00854
00855 if (!cat) {
00856 return NULL;
00857 }
00858
00859
00860 for(i = 0; i < l_rr_count; i++) {
00861 ldns_rr_list_push_rr(cat,
00862 ldns_rr_clone(ldns_rr_list_rr(left, i)));
00863 }
00864
00865 for(i = 0; i < r_rr_count; i++) {
00866 ldns_rr_list_push_rr(cat,
00867 ldns_rr_clone(ldns_rr_list_rr(right, i)));
00868 }
00869 return cat;
00870 }
00871
00872 ldns_rr_list *
00873 ldns_rr_list_subtype_by_rdf(ldns_rr_list *l, ldns_rdf *r, size_t pos)
00874 {
00875 size_t i;
00876 ldns_rr_list *subtyped;
00877 ldns_rdf *list_rdf;
00878
00879 subtyped = ldns_rr_list_new();
00880
00881 for(i = 0; i < ldns_rr_list_rr_count(l); i++) {
00882 list_rdf = ldns_rr_rdf(
00883 ldns_rr_list_rr(l, i),
00884 pos);
00885 if (!list_rdf) {
00886
00887 return NULL;
00888 }
00889
00890 if (ldns_rdf_compare(list_rdf, r) == 0) {
00891
00892 ldns_rr_list_push_rr(subtyped,
00893 ldns_rr_clone(ldns_rr_list_rr(l, i)));
00894 }
00895 }
00896
00897 if (ldns_rr_list_rr_count(subtyped) > 0) {
00898 return subtyped;
00899 } else {
00900 return NULL;
00901 }
00902 }
00903
00904 bool
00905 ldns_rr_list_push_rr(ldns_rr_list *rr_list, const ldns_rr *rr)
00906 {
00907 size_t rr_count;
00908 size_t cap;
00909
00910 rr_count = ldns_rr_list_rr_count(rr_list);
00911 cap = rr_list->_rr_capacity;
00912
00913
00914 if(rr_count+1 > cap) {
00915 ldns_rr **rrs;
00916
00917 if(cap == 0)
00918 cap = LDNS_RRLIST_INIT;
00919 else cap *= 2;
00920 rrs = LDNS_XREALLOC(rr_list->_rrs, ldns_rr *, cap);
00921 if (!rrs) {
00922 return false;
00923 }
00924 rr_list->_rrs = rrs;
00925 rr_list->_rr_capacity = cap;
00926 }
00927
00928
00929 rr_list->_rrs[rr_count] = (ldns_rr*)rr;
00930
00931 ldns_rr_list_set_rr_count(rr_list, rr_count + 1);
00932 return true;
00933 }
00934
00935 bool
00936 ldns_rr_list_push_rr_list(ldns_rr_list *rr_list, const ldns_rr_list *push_list)
00937 {
00938 size_t i;
00939
00940 for(i = 0; i < ldns_rr_list_rr_count(push_list); i++) {
00941 if (!ldns_rr_list_push_rr(rr_list,
00942 ldns_rr_list_rr(push_list, i))) {
00943 return false;
00944 }
00945 }
00946 return true;
00947 }
00948
00949 ldns_rr *
00950 ldns_rr_list_pop_rr(ldns_rr_list *rr_list)
00951 {
00952 size_t rr_count;
00953 size_t cap;
00954 ldns_rr *pop;
00955
00956 rr_count = ldns_rr_list_rr_count(rr_list);
00957
00958 if (rr_count == 0) {
00959 return NULL;
00960 }
00961
00962 cap = rr_list->_rr_capacity;
00963 pop = ldns_rr_list_rr(rr_list, rr_count - 1);
00964
00965
00966 if(cap > LDNS_RRLIST_INIT && rr_count-1 <= cap/2) {
00967 cap /= 2;
00968 rr_list->_rrs = LDNS_XREALLOC(rr_list->_rrs, ldns_rr *, cap);
00969 rr_list->_rr_capacity = cap;
00970 }
00971
00972 ldns_rr_list_set_rr_count(rr_list, rr_count - 1);
00973
00974 return pop;
00975 }
00976
00977 ldns_rr_list *
00978 ldns_rr_list_pop_rr_list(ldns_rr_list *rr_list, size_t howmany)
00979 {
00980
00981 ldns_rr_list *popped;
00982 ldns_rr *p;
00983 size_t i = howmany;
00984
00985 popped = ldns_rr_list_new();
00986
00987 if (!popped) {
00988 return NULL;
00989 }
00990
00991
00992 while(i > 0 &&
00993 (p = ldns_rr_list_pop_rr(rr_list)) != NULL) {
00994 ldns_rr_list_push_rr(popped, p);
00995 i--;
00996 }
00997
00998 if (i == howmany) {
00999 return NULL;
01000 } else {
01001 return popped;
01002 }
01003 }
01004
01005
01006 bool
01007 ldns_rr_list_contains_rr(const ldns_rr_list *rr_list, ldns_rr *rr)
01008 {
01009 size_t i;
01010
01011 if (!rr_list || !rr || ldns_rr_list_rr_count(rr_list) == 0) {
01012 return false;
01013 }
01014
01015 for (i = 0; i < ldns_rr_list_rr_count(rr_list); i++) {
01016 if (rr == ldns_rr_list_rr(rr_list, i)) {
01017 return true;
01018 } else if (ldns_rr_compare(rr, ldns_rr_list_rr(rr_list, i)) == 0) {
01019 return true;
01020 }
01021 }
01022 return false;
01023 }
01024
01025 bool
01026 ldns_is_rrset(ldns_rr_list *rr_list)
01027 {
01028 ldns_rr_type t;
01029 ldns_rr_class c;
01030 ldns_rdf *o;
01031 ldns_rr *tmp;
01032 size_t i;
01033
01034 if (!rr_list) {
01035 return false;
01036 }
01037
01038 tmp = ldns_rr_list_rr(rr_list, 0);
01039
01040 t = ldns_rr_get_type(tmp);
01041 c = ldns_rr_get_class(tmp);
01042 o = ldns_rr_owner(tmp);
01043
01044
01045 for (i = 1; i < ldns_rr_list_rr_count(rr_list); i++) {
01046 tmp = ldns_rr_list_rr(rr_list, 1);
01047 if (t != ldns_rr_get_type(tmp)) {
01048 return false;
01049 }
01050 if (c != ldns_rr_get_class(tmp)) {
01051 return false;
01052 }
01053 if (ldns_rdf_compare(o, ldns_rr_owner(tmp)) != 0) {
01054 return false;
01055 }
01056 }
01057 return true;
01058 }
01059
01060 bool
01061 ldns_rr_set_push_rr(ldns_rr_list *rr_list, ldns_rr *rr)
01062 {
01063 size_t rr_count;
01064 size_t i;
01065 ldns_rr *last;
01066
01067 assert(rr != NULL);
01068
01069 rr_count = ldns_rr_list_rr_count(rr_list);
01070
01071 if (rr_count == 0) {
01072
01073
01074 return ldns_rr_list_push_rr(rr_list, rr);
01075 } else {
01076
01077 last = ldns_rr_list_rr(rr_list, rr_count - 1);
01078
01079 if (ldns_rr_get_class(last) != ldns_rr_get_class(rr)) {
01080 return false;
01081 }
01082 if (ldns_rr_get_type(last) != ldns_rr_get_type(rr)) {
01083 return false;
01084 }
01085
01086 if (ldns_rr_get_type(rr) != LDNS_RR_TYPE_RRSIG) {
01087 if (ldns_rr_ttl(last) != ldns_rr_ttl(rr)) {
01088 return false;
01089 }
01090 }
01091 if (ldns_rdf_compare(ldns_rr_owner(last),
01092 ldns_rr_owner(rr)) != 0) {
01093 return false;
01094 }
01095
01096
01097 for(i = 0; i < rr_count; i++) {
01098 if(ldns_rr_compare(
01099 ldns_rr_list_rr(rr_list, i), rr) == 0) {
01100 return false;
01101 }
01102 }
01103
01104 return ldns_rr_list_push_rr(rr_list, rr);
01105 }
01106 }
01107
01108 ldns_rr *
01109 ldns_rr_set_pop_rr(ldns_rr_list *rr_list)
01110 {
01111 return ldns_rr_list_pop_rr(rr_list);
01112 }
01113
01114 ldns_rr_list *
01115 ldns_rr_list_pop_rrset(ldns_rr_list *rr_list)
01116 {
01117 ldns_rr_list *rrset;
01118 ldns_rr *last_rr = NULL;
01119 ldns_rr *next_rr;
01120
01121 if (!rr_list) {
01122 return NULL;
01123 }
01124
01125 rrset = ldns_rr_list_new();
01126 if (!last_rr) {
01127 last_rr = ldns_rr_list_pop_rr(rr_list);
01128 if (!last_rr) {
01129 ldns_rr_list_free(rrset);
01130 return NULL;
01131 } else {
01132 ldns_rr_list_push_rr(rrset, last_rr);
01133 }
01134 }
01135
01136 if (ldns_rr_list_rr_count(rr_list) > 0) {
01137 next_rr = ldns_rr_list_rr(rr_list, ldns_rr_list_rr_count(rr_list) - 1);
01138 } else {
01139 next_rr = NULL;
01140 }
01141
01142 while (next_rr) {
01143 if (
01144 ldns_rdf_compare(ldns_rr_owner(next_rr),
01145 ldns_rr_owner(last_rr)) == 0
01146 &&
01147 ldns_rr_get_type(next_rr) == ldns_rr_get_type(last_rr)
01148 &&
01149 ldns_rr_get_class(next_rr) == ldns_rr_get_class(last_rr)
01150 ) {
01151 ldns_rr_list_push_rr(rrset, ldns_rr_list_pop_rr(rr_list));
01152 if (ldns_rr_list_rr_count(rr_list) > 0) {
01153 last_rr = next_rr;
01154 next_rr = ldns_rr_list_rr(rr_list, ldns_rr_list_rr_count(rr_list) - 1);
01155 } else {
01156 next_rr = NULL;
01157 }
01158 } else {
01159 next_rr = NULL;
01160 }
01161 }
01162
01163 return rrset;
01164 }
01165
01166 ldns_rr *
01167 ldns_rr_clone(const ldns_rr *rr)
01168 {
01169 size_t i;
01170 ldns_rr *new_rr;
01171
01172 if (!rr) {
01173 return NULL;
01174 }
01175
01176 new_rr = ldns_rr_new();
01177 if (!new_rr) {
01178 return NULL;
01179 }
01180 if (ldns_rr_owner(rr)) {
01181 ldns_rr_set_owner(new_rr, ldns_rdf_clone(ldns_rr_owner(rr)));
01182 }
01183 ldns_rr_set_ttl(new_rr, ldns_rr_ttl(rr));
01184 ldns_rr_set_type(new_rr, ldns_rr_get_type(rr));
01185 ldns_rr_set_class(new_rr, ldns_rr_get_class(rr));
01186
01187 for (i = 0; i < ldns_rr_rd_count(rr); i++) {
01188 if (ldns_rr_rdf(rr,i)) {
01189 ldns_rr_push_rdf(new_rr, ldns_rdf_clone(ldns_rr_rdf(rr, i)));
01190 }
01191 }
01192
01193 return new_rr;
01194 }
01195
01196 ldns_rr_list *
01197 ldns_rr_list_clone(const ldns_rr_list *rrlist)
01198 {
01199 size_t i;
01200 ldns_rr_list *new_list;
01201 ldns_rr *r;
01202
01203 if (!rrlist) {
01204 return NULL;
01205 }
01206
01207 new_list = ldns_rr_list_new();
01208 if (!new_list) {
01209 return NULL;
01210 }
01211 for (i = 0; i < ldns_rr_list_rr_count(rrlist); i++) {
01212 r = ldns_rr_clone(
01213 ldns_rr_list_rr(rrlist, i)
01214 );
01215 if (!r) {
01216
01217 ldns_rr_list_free(new_list);
01218 return NULL;
01219 }
01220 ldns_rr_list_push_rr(new_list, r);
01221 }
01222 return new_list;
01223 }
01224
01225
01226 int
01227 qsort_rr_compare(const void *a, const void *b)
01228 {
01229 const ldns_rr *rr1 = * (const ldns_rr **) a;
01230 const ldns_rr *rr2 = * (const ldns_rr **) b;
01231
01232 if (rr1 == NULL && rr2 == NULL) {
01233 return 0;
01234 }
01235 if (rr1 == NULL) {
01236 return -1;
01237 }
01238 if (rr2 == NULL) {
01239 return 1;
01240 }
01241 return ldns_rr_compare(rr1, rr2);
01242 }
01243
01244 int
01245 qsort_schwartz_rr_compare(const void *a, const void *b)
01246 {
01247 int result = 0;
01248 ldns_rr *rr1, *rr2;
01249 ldns_buffer *rr1_buf, *rr2_buf;
01250 struct ldns_schwartzian_compare_struct *sa = *(struct ldns_schwartzian_compare_struct **) a;
01251 struct ldns_schwartzian_compare_struct *sb = *(struct ldns_schwartzian_compare_struct **) b;
01252
01253
01254
01255
01256 ldns_rr *canonical_a, *canonical_b;
01257
01258 rr1 = (ldns_rr *) sa->original_object;
01259 rr2 = (ldns_rr *) sb->original_object;
01260
01261 result = ldns_rr_compare_no_rdata(rr1, rr2);
01262
01263 if (result == 0) {
01264 if (!sa->transformed_object) {
01265 canonical_a = ldns_rr_clone(sa->original_object);
01266 ldns_rr2canonical(canonical_a);
01267 sa->transformed_object = ldns_buffer_new(ldns_rr_uncompressed_size(canonical_a));
01268 if (ldns_rr2buffer_wire(sa->transformed_object, canonical_a, LDNS_SECTION_ANY) != LDNS_STATUS_OK) {
01269 fprintf(stderr, "ERR!\n");
01270 ldns_rr_free(canonical_a);
01271 return 0;
01272 }
01273 ldns_rr_free(canonical_a);
01274 }
01275 if (!sb->transformed_object) {
01276 canonical_b = ldns_rr_clone(sb->original_object);
01277 ldns_rr2canonical(canonical_b);
01278 sb->transformed_object = ldns_buffer_new(ldns_rr_uncompressed_size(canonical_b));
01279 if (ldns_rr2buffer_wire(sb->transformed_object, canonical_b, LDNS_SECTION_ANY) != LDNS_STATUS_OK) {
01280 fprintf(stderr, "ERR!\n");
01281 ldns_rr_free(canonical_b);
01282 return 0;
01283 }
01284 ldns_rr_free(canonical_b);
01285 }
01286 rr1_buf = (ldns_buffer *) sa->transformed_object;
01287 rr2_buf = (ldns_buffer *) sb->transformed_object;
01288
01289 result = ldns_rr_compare_wire(rr1_buf, rr2_buf);
01290 }
01291
01292 return result;
01293 }
01294
01295 void
01296 ldns_rr_list_sort(ldns_rr_list *unsorted)
01297 {
01298 struct ldns_schwartzian_compare_struct **sortables;
01299 size_t item_count;
01300 size_t i;
01301
01302 if (unsorted) {
01303 item_count = ldns_rr_list_rr_count(unsorted);
01304
01305 sortables = LDNS_XMALLOC(struct ldns_schwartzian_compare_struct *,
01306 item_count);
01307 for (i = 0; i < item_count; i++) {
01308 sortables[i] = LDNS_XMALLOC(struct ldns_schwartzian_compare_struct, 1);
01309 sortables[i]->original_object = ldns_rr_list_rr(unsorted, i);
01310 sortables[i]->transformed_object = NULL;
01311 }
01312 qsort(sortables,
01313 item_count,
01314 sizeof(struct ldns_schwartzian_compare_struct *),
01315 qsort_schwartz_rr_compare);
01316 for (i = 0; i < item_count; i++) {
01317 unsorted->_rrs[i] = sortables[i]->original_object;
01318 if (sortables[i]->transformed_object) {
01319 ldns_buffer_free(sortables[i]->transformed_object);
01320 }
01321 LDNS_FREE(sortables[i]);
01322 }
01323 LDNS_FREE(sortables);
01324 }
01325 }
01326
01327 int
01328 ldns_rr_compare_no_rdata(const ldns_rr *rr1, const ldns_rr *rr2)
01329 {
01330 size_t rr1_len;
01331 size_t rr2_len;
01332 size_t offset;
01333
01334 assert(rr1 != NULL);
01335 assert(rr2 != NULL);
01336
01337 rr1_len = ldns_rr_uncompressed_size(rr1);
01338 rr2_len = ldns_rr_uncompressed_size(rr2);
01339
01340 if (ldns_dname_compare(ldns_rr_owner(rr1), ldns_rr_owner(rr2)) < 0) {
01341 return -1;
01342 } else if (ldns_dname_compare(ldns_rr_owner(rr1), ldns_rr_owner(rr2)) > 0) {
01343 return 1;
01344 }
01345
01346 if (ldns_rr_get_class(rr1) != ldns_rr_get_class(rr2)) {
01347 return ldns_rr_get_class(rr2) - ldns_rr_get_class(rr1);
01348 }
01349
01350 if (ldns_rr_get_type(rr1) != ldns_rr_get_type(rr2)) {
01351 return ldns_rr_get_type(rr2) - ldns_rr_get_type(rr1);
01352 }
01353
01354
01355 offset = ldns_rdf_size(ldns_rr_owner(rr1)) + 4 + 2 + 2 + 2;
01356
01357 if (offset > rr1_len || offset > rr2_len) {
01358 if (rr1_len == rr2_len) {
01359 return 0;
01360 }
01361 return ((int) rr2_len - (int) rr1_len);
01362 }
01363
01364 return 0;
01365 }
01366
01367 int ldns_rr_compare_wire(ldns_buffer *rr1_buf, ldns_buffer *rr2_buf)
01368 {
01369 size_t rr1_len, rr2_len, min_len, i, offset;
01370
01371 rr1_len = ldns_buffer_capacity(rr1_buf);
01372 rr2_len = ldns_buffer_capacity(rr2_buf);
01373
01374
01375
01376 offset = 0;
01377 while (offset < rr1_len && *ldns_buffer_at(rr1_buf, offset) != 0) {
01378 offset += *ldns_buffer_at(rr1_buf, offset) + 1;
01379 }
01380
01381
01382 offset += 11;
01383 min_len = (rr1_len < rr2_len) ? rr1_len : rr2_len;
01384
01385 for(i = offset; i < min_len; i++) {
01386 if (*ldns_buffer_at(rr1_buf,i) < *ldns_buffer_at(rr2_buf,i)) {
01387 return -1;
01388 } else if (*ldns_buffer_at(rr1_buf,i) > *ldns_buffer_at(rr2_buf,i)) {
01389 return +1;
01390 }
01391 }
01392
01393
01394 if (rr1_len < rr2_len) {
01395 return -1;
01396 } else if (rr1_len > rr2_len) {
01397 return +1;
01398 }
01399
01400 return 0;
01401
01402 }
01403
01404 int
01405 ldns_rr_compare(const ldns_rr *rr1, const ldns_rr *rr2)
01406 {
01407 int result;
01408 size_t rr1_len, rr2_len;
01409
01410 ldns_buffer *rr1_buf;
01411 ldns_buffer *rr2_buf;
01412
01413 result = ldns_rr_compare_no_rdata(rr1, rr2);
01414 if (result == 0) {
01415 rr1_len = ldns_rr_uncompressed_size(rr1);
01416 rr2_len = ldns_rr_uncompressed_size(rr2);
01417
01418 rr1_buf = ldns_buffer_new(rr1_len);
01419 rr2_buf = ldns_buffer_new(rr2_len);
01420
01421 if (ldns_rr2buffer_wire(rr1_buf, rr1, LDNS_SECTION_ANY) != LDNS_STATUS_OK) {
01422 ldns_buffer_free(rr1_buf);
01423 ldns_buffer_free(rr2_buf);
01424 return 0;
01425 }
01426 if (ldns_rr2buffer_wire(rr2_buf, rr2, LDNS_SECTION_ANY) != LDNS_STATUS_OK) {
01427 ldns_buffer_free(rr1_buf);
01428 ldns_buffer_free(rr2_buf);
01429 return 0;
01430 }
01431
01432 result = ldns_rr_compare_wire(rr1_buf, rr2_buf);
01433
01434 ldns_buffer_free(rr1_buf);
01435 ldns_buffer_free(rr2_buf);
01436 }
01437
01438 return result;
01439 }
01440
01441 bool
01442 ldns_rr_compare_ds(const ldns_rr *orr1, const ldns_rr *orr2)
01443 {
01444 bool result;
01445 #ifdef HAVE_SSL
01446 ldns_rr *ds_repr;
01447 #endif
01448 ldns_rr *rr1 = ldns_rr_clone(orr1);
01449 ldns_rr *rr2 = ldns_rr_clone(orr2);
01450
01451
01452 ldns_rr_set_ttl(rr1, 0);
01453 ldns_rr_set_ttl(rr2, 0);
01454
01455 #ifdef HAVE_SSL
01456 if (ldns_rr_get_type(rr1) == LDNS_RR_TYPE_DS &&
01457 ldns_rr_get_type(rr2) == LDNS_RR_TYPE_DNSKEY) {
01458 ds_repr = ldns_key_rr2ds(rr2, LDNS_SHA1);
01459 result = (ldns_rr_compare(rr1, ds_repr) == 0);
01460 ldns_rr_free(ds_repr);
01461 } else if (ldns_rr_get_type(rr1) == LDNS_RR_TYPE_DNSKEY &&
01462 ldns_rr_get_type(rr2) == LDNS_RR_TYPE_DS) {
01463 ds_repr = ldns_key_rr2ds(rr1, LDNS_SHA1);
01464 result = (ldns_rr_compare(rr2, ds_repr) == 0);
01465
01466 ldns_rr_free(ds_repr);
01467 } else {
01468 result = (ldns_rr_compare(rr1, rr2) == 0);
01469 }
01470 #else
01471 result = (ldns_rr_compare(rr1, rr2) == 0);
01472 #endif
01473
01474 ldns_rr_free(rr1);
01475 ldns_rr_free(rr2);
01476
01477 return result;
01478 }
01479
01480 int
01481 ldns_rr_list_compare(const ldns_rr_list *rrl1, const ldns_rr_list *rrl2)
01482 {
01483 size_t i = 0;
01484 int rr_cmp;
01485
01486 assert(rrl1 != NULL);
01487 assert(rrl2 != NULL);
01488
01489 for (i = 0; i < ldns_rr_list_rr_count(rrl1) && i < ldns_rr_list_rr_count(rrl2); i++) {
01490 rr_cmp = ldns_rr_compare(ldns_rr_list_rr(rrl1, i), ldns_rr_list_rr(rrl2, i));
01491 if (rr_cmp != 0) {
01492 return rr_cmp;
01493 }
01494 }
01495
01496 if (i == ldns_rr_list_rr_count(rrl1) &&
01497 i != ldns_rr_list_rr_count(rrl2)) {
01498 return 1;
01499 } else if (i == ldns_rr_list_rr_count(rrl2) &&
01500 i != ldns_rr_list_rr_count(rrl1)) {
01501 return -1;
01502 } else {
01503 return 0;
01504 }
01505 }
01506
01507 size_t
01508 ldns_rr_uncompressed_size(const ldns_rr *r)
01509 {
01510 size_t rrsize;
01511 size_t i;
01512
01513 rrsize = 0;
01514
01515 for(i = 0; i < ldns_rr_rd_count(r); i++) {
01516 rrsize += ldns_rdf_size(ldns_rr_rdf(r, i));
01517 }
01518
01519 rrsize += ldns_rdf_size(ldns_rr_owner(r));
01520 rrsize += LDNS_RR_OVERHEAD;
01521 return rrsize;
01522 }
01523
01524 void
01525 ldns_rr2canonical(ldns_rr *rr)
01526 {
01527 uint16_t i;
01528
01529 if (!rr) {
01530 return;
01531 }
01532
01533 ldns_dname2canonical(ldns_rr_owner(rr));
01534
01535
01536
01537
01538
01539 switch(ldns_rr_get_type(rr)) {
01540 case LDNS_RR_TYPE_NS:
01541 case LDNS_RR_TYPE_MD:
01542 case LDNS_RR_TYPE_MF:
01543 case LDNS_RR_TYPE_CNAME:
01544 case LDNS_RR_TYPE_SOA:
01545 case LDNS_RR_TYPE_MB:
01546 case LDNS_RR_TYPE_MG:
01547 case LDNS_RR_TYPE_MR:
01548 case LDNS_RR_TYPE_PTR:
01549 case LDNS_RR_TYPE_HINFO:
01550 case LDNS_RR_TYPE_MINFO:
01551 case LDNS_RR_TYPE_MX:
01552 case LDNS_RR_TYPE_RP:
01553 case LDNS_RR_TYPE_AFSDB:
01554 case LDNS_RR_TYPE_RT:
01555 case LDNS_RR_TYPE_SIG:
01556 case LDNS_RR_TYPE_PX:
01557 case LDNS_RR_TYPE_NXT:
01558 case LDNS_RR_TYPE_NAPTR:
01559 case LDNS_RR_TYPE_KX:
01560 case LDNS_RR_TYPE_SRV:
01561 case LDNS_RR_TYPE_DNAME:
01562 case LDNS_RR_TYPE_A6:
01563 for (i = 0; i < ldns_rr_rd_count(rr); i++) {
01564 ldns_dname2canonical(ldns_rr_rdf(rr, i));
01565 }
01566 return;
01567 default:
01568
01569 return;
01570 }
01571 }
01572
01573 void
01574 ldns_rr_list2canonical(ldns_rr_list *rr_list)
01575 {
01576 size_t i;
01577 for (i = 0; i < ldns_rr_list_rr_count(rr_list); i++) {
01578 ldns_rr2canonical(ldns_rr_list_rr(rr_list, i));
01579 }
01580 }
01581
01582 uint8_t
01583 ldns_rr_label_count(ldns_rr *rr)
01584 {
01585 if (!rr) {
01586 return 0;
01587 }
01588 return ldns_dname_label_count(
01589 ldns_rr_owner(rr));
01590 }
01591
01593 static const ldns_rdf_type type_0_wireformat[] = { LDNS_RDF_TYPE_UNKNOWN };
01594 static const ldns_rdf_type type_a_wireformat[] = { LDNS_RDF_TYPE_A };
01595 static const ldns_rdf_type type_ns_wireformat[] = { LDNS_RDF_TYPE_DNAME };
01596 static const ldns_rdf_type type_md_wireformat[] = { LDNS_RDF_TYPE_DNAME };
01597 static const ldns_rdf_type type_mf_wireformat[] = { LDNS_RDF_TYPE_DNAME };
01598 static const ldns_rdf_type type_cname_wireformat[] = { LDNS_RDF_TYPE_DNAME };
01599 static const ldns_rdf_type type_soa_wireformat[] = {
01600 LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_INT32,
01601 LDNS_RDF_TYPE_PERIOD, LDNS_RDF_TYPE_PERIOD, LDNS_RDF_TYPE_PERIOD,
01602 LDNS_RDF_TYPE_PERIOD
01603 };
01604 static const ldns_rdf_type type_mb_wireformat[] = { LDNS_RDF_TYPE_DNAME };
01605 static const ldns_rdf_type type_mg_wireformat[] = { LDNS_RDF_TYPE_DNAME };
01606 static const ldns_rdf_type type_mr_wireformat[] = { LDNS_RDF_TYPE_DNAME };
01607 static const ldns_rdf_type type_wks_wireformat[] = {
01608 LDNS_RDF_TYPE_A, LDNS_RDF_TYPE_WKS
01609 };
01610 static const ldns_rdf_type type_ptr_wireformat[] = { LDNS_RDF_TYPE_DNAME };
01611 static const ldns_rdf_type type_hinfo_wireformat[] = {
01612 LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_STR
01613 };
01614 static const ldns_rdf_type type_minfo_wireformat[] = {
01615 LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_DNAME
01616 };
01617 static const ldns_rdf_type type_mx_wireformat[] = {
01618 LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME
01619 };
01620 static const ldns_rdf_type type_rp_wireformat[] = {
01621 LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_DNAME
01622 };
01623 static const ldns_rdf_type type_afsdb_wireformat[] = {
01624 LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME
01625 };
01626 static const ldns_rdf_type type_x25_wireformat[] = { LDNS_RDF_TYPE_STR };
01627 static const ldns_rdf_type type_isdn_wireformat[] = {
01628 LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_STR
01629 };
01630 static const ldns_rdf_type type_rt_wireformat[] = {
01631 LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME
01632 };
01633 static const ldns_rdf_type type_nsap_wireformat[] = {
01634 LDNS_RDF_TYPE_NSAP
01635 };
01636 static const ldns_rdf_type type_nsap_ptr_wireformat[] = {
01637 LDNS_RDF_TYPE_STR
01638 };
01639 static const ldns_rdf_type type_sig_wireformat[] = {
01640 LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_TIME,
01641 LDNS_RDF_TYPE_INT32, LDNS_RDF_TYPE_INT32, LDNS_RDF_TYPE_INT16,
01642 LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_B64
01643 };
01644 static const ldns_rdf_type type_key_wireformat[] = {
01645 LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_B64
01646 };
01647 static const ldns_rdf_type type_px_wireformat[] = {
01648 LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_DNAME
01649 };
01650 static const ldns_rdf_type type_gpos_wireformat[] = {
01651 LDNS_RDF_TYPE_STR,
01652 LDNS_RDF_TYPE_STR,
01653 LDNS_RDF_TYPE_STR
01654 };
01655 static const ldns_rdf_type type_aaaa_wireformat[] = { LDNS_RDF_TYPE_AAAA };
01656 static const ldns_rdf_type type_loc_wireformat[] = { LDNS_RDF_TYPE_LOC };
01657 static const ldns_rdf_type type_nxt_wireformat[] = {
01658 LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_UNKNOWN
01659 };
01660 static const ldns_rdf_type type_eid_wireformat[] = {
01661 LDNS_RDF_TYPE_HEX
01662 };
01663 static const ldns_rdf_type type_nimloc_wireformat[] = {
01664 LDNS_RDF_TYPE_HEX
01665 };
01666 static const ldns_rdf_type type_srv_wireformat[] = {
01667 LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME
01668 };
01669 static const ldns_rdf_type type_atma_wireformat[] = {
01670 LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_HEX
01671 };
01672 static const ldns_rdf_type type_naptr_wireformat[] = {
01673 LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_DNAME
01674 };
01675 static const ldns_rdf_type type_kx_wireformat[] = {
01676 LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME
01677 };
01678 static const ldns_rdf_type type_cert_wireformat[] = {
01679 LDNS_RDF_TYPE_CERT_ALG, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_ALG, LDNS_RDF_TYPE_B64
01680 };
01681 static const ldns_rdf_type type_a6_wireformat[] = { LDNS_RDF_TYPE_DNAME };
01682 static const ldns_rdf_type type_dname_wireformat[] = { LDNS_RDF_TYPE_DNAME };
01683 static const ldns_rdf_type type_sink_wireformat[] = { LDNS_RDF_TYPE_INT8,
01684 LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_B64
01685 };
01686 static const ldns_rdf_type type_apl_wireformat[] = {
01687 LDNS_RDF_TYPE_APL
01688 };
01689 static const ldns_rdf_type type_ds_wireformat[] = {
01690 LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_ALG, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_HEX
01691 };
01692 static const ldns_rdf_type type_sshfp_wireformat[] = {
01693 LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_HEX
01694 };
01695 static const ldns_rdf_type type_ipseckey_wireformat[] = {
01696 LDNS_RDF_TYPE_IPSECKEY
01697 };
01698 static const ldns_rdf_type type_rrsig_wireformat[] = {
01699 LDNS_RDF_TYPE_TYPE, LDNS_RDF_TYPE_ALG, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT32,
01700 LDNS_RDF_TYPE_TIME, LDNS_RDF_TYPE_TIME, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_B64
01701 };
01702 static const ldns_rdf_type type_nsec_wireformat[] = {
01703 LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_NSEC
01704 };
01705 static const ldns_rdf_type type_dhcid_wireformat[] = {
01706 LDNS_RDF_TYPE_B64
01707 };
01708
01709 static const ldns_rdf_type type_nsec3_wireformat[] = {
01710
01711 LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_NSEC3_SALT, LDNS_RDF_TYPE_NSEC3_NEXT_OWNER, LDNS_RDF_TYPE_NSEC
01712 };
01713
01714 static const ldns_rdf_type type_nsec3params_wireformat[] = {
01715
01716 LDNS_RDF_TYPE_INT8,
01717 LDNS_RDF_TYPE_INT8,
01718 LDNS_RDF_TYPE_INT16,
01719 LDNS_RDF_TYPE_NSEC3_SALT
01720 };
01721
01722 static const ldns_rdf_type type_dnskey_wireformat[] = {
01723 LDNS_RDF_TYPE_INT16,
01724 LDNS_RDF_TYPE_INT8,
01725 LDNS_RDF_TYPE_ALG,
01726 LDNS_RDF_TYPE_B64
01727 };
01728 static const ldns_rdf_type type_tsig_wireformat[] = {
01729 LDNS_RDF_TYPE_DNAME,
01730 LDNS_RDF_TYPE_TSIGTIME,
01731 LDNS_RDF_TYPE_INT16,
01732 LDNS_RDF_TYPE_INT16_DATA,
01733 LDNS_RDF_TYPE_INT16,
01734 LDNS_RDF_TYPE_INT16,
01735 LDNS_RDF_TYPE_INT16_DATA
01736 };
01740
01741
01742
01743
01744 static ldns_rr_descriptor rdata_field_descriptors[] = {
01745
01746 { 0, NULL, 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01747
01748 {LDNS_RR_TYPE_A, "A", 1, 1, type_a_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01749
01750 {LDNS_RR_TYPE_NS, "NS", 1, 1, type_ns_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
01751
01752 {LDNS_RR_TYPE_MD, "MD", 1, 1, type_md_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
01753
01754 {LDNS_RR_TYPE_MF, "MF", 1, 1, type_mf_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
01755
01756 {LDNS_RR_TYPE_CNAME, "CNAME", 1, 1, type_cname_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
01757
01758 {LDNS_RR_TYPE_SOA, "SOA", 7, 7, type_soa_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 2 },
01759
01760 {LDNS_RR_TYPE_MB, "MB", 1, 1, type_mb_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
01761
01762 {LDNS_RR_TYPE_MG, "MG", 1, 1, type_mg_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
01763
01764 {LDNS_RR_TYPE_MR, "MR", 1, 1, type_mr_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
01765
01766 {LDNS_RR_TYPE_NULL, "NULL", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01767
01768 {LDNS_RR_TYPE_WKS, "WKS", 2, 2, type_wks_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01769
01770 {LDNS_RR_TYPE_PTR, "PTR", 1, 1, type_ptr_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
01771
01772 {LDNS_RR_TYPE_HINFO, "HINFO", 2, 2, type_hinfo_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01773
01774 {LDNS_RR_TYPE_MINFO, "MINFO", 2, 2, type_minfo_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 2 },
01775
01776 {LDNS_RR_TYPE_MX, "MX", 2, 2, type_mx_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
01777
01778 {LDNS_RR_TYPE_TXT, "TXT", 1, 0, NULL, LDNS_RDF_TYPE_STR, LDNS_RR_NO_COMPRESS, 0 },
01779
01780 {LDNS_RR_TYPE_RP, "RP", 2, 2, type_rp_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 2 },
01781
01782 {LDNS_RR_TYPE_AFSDB, "AFSDB", 2, 2, type_afsdb_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
01783
01784 {LDNS_RR_TYPE_X25, "X25", 1, 1, type_x25_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01785
01786 {LDNS_RR_TYPE_ISDN, "ISDN", 1, 2, type_isdn_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01787
01788 {LDNS_RR_TYPE_RT, "RT", 2, 2, type_rt_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
01789
01790 {LDNS_RR_TYPE_NSAP, "NSAP", 1, 1, type_nsap_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01791
01792 {LDNS_RR_TYPE_NSAP_PTR, "NSAP-PTR", 1, 1, type_nsap_ptr_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01793
01794 {LDNS_RR_TYPE_SIG, "SIG", 9, 9, type_sig_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
01795
01796 {LDNS_RR_TYPE_KEY, "KEY", 4, 4, type_key_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01797
01798 {LDNS_RR_TYPE_PX, "PX", 3, 3, type_px_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 2 },
01799
01800 {LDNS_RR_TYPE_GPOS, "GPOS", 1, 1, type_gpos_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01801
01802 {LDNS_RR_TYPE_AAAA, "AAAA", 1, 1, type_aaaa_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01803
01804 {LDNS_RR_TYPE_LOC, "LOC", 1, 1, type_loc_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01805
01806 {LDNS_RR_TYPE_NXT, "NXT", 2, 2, type_nxt_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
01807
01808 {LDNS_RR_TYPE_EID, "EID", 1, 1, type_eid_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01809
01810 {LDNS_RR_TYPE_NIMLOC, "NIMLOC", 1, 1, type_nimloc_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01811
01812 {LDNS_RR_TYPE_SRV, "SRV", 4, 4, type_srv_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
01813
01814 {LDNS_RR_TYPE_ATMA, "ATMA", 1, 1, type_atma_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01815
01816 {LDNS_RR_TYPE_NAPTR, "NAPTR", 6, 6, type_naptr_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
01817
01818 {LDNS_RR_TYPE_KX, "KX", 2, 2, type_kx_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
01819
01820 {LDNS_RR_TYPE_CERT, "CERT", 4, 4, type_cert_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01821
01822 {LDNS_RR_TYPE_A6, "A6", 1, 1, type_a6_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
01823
01824 {LDNS_RR_TYPE_DNAME, "DNAME", 1, 1, type_dname_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
01825
01826 {LDNS_RR_TYPE_SINK, "SINK", 1, 1, type_sink_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01827
01828 {LDNS_RR_TYPE_OPT, "OPT", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01829
01830 {LDNS_RR_TYPE_APL, "APL", 0, 0, type_apl_wireformat, LDNS_RDF_TYPE_APL, LDNS_RR_NO_COMPRESS, 0 },
01831
01832 {LDNS_RR_TYPE_DS, "DS", 4, 4, type_ds_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01833
01834 {LDNS_RR_TYPE_SSHFP, "SSHFP", 3, 3, type_sshfp_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01835
01836 {LDNS_RR_TYPE_IPSECKEY, "IPSECKEY", 1, 1, type_ipseckey_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01837
01838 {LDNS_RR_TYPE_RRSIG, "RRSIG", 9, 9, type_rrsig_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
01839
01840 {LDNS_RR_TYPE_NSEC, "NSEC", 2, 2, type_nsec_wireformat, LDNS_RDF_TYPE_NSEC, LDNS_RR_NO_COMPRESS, 1 },
01841
01842 {LDNS_RR_TYPE_DNSKEY, "DNSKEY", 4, 4, type_dnskey_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01843
01844 {LDNS_RR_TYPE_DHCID, "DHCID", 1, 1, type_dhcid_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01845
01846 {LDNS_RR_TYPE_NSEC3, "NSEC3", 6, 6, type_nsec3_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01847
01848 {LDNS_RR_TYPE_NSEC3PARAMS, "NSEC3PARAM", 4, 4, type_nsec3params_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01849
01850 {LDNS_RR_TYPE_NULL, "TYPE52", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01851 {LDNS_RR_TYPE_NULL, "TYPE53", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01852 {LDNS_RR_TYPE_NULL, "TYPE54", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01853 {LDNS_RR_TYPE_NULL, "TYPE55", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01854 {LDNS_RR_TYPE_NULL, "TYPE56", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01855 {LDNS_RR_TYPE_NULL, "TYPE57", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01856 {LDNS_RR_TYPE_NULL, "TYPE58", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01857 {LDNS_RR_TYPE_NULL, "TYPE59", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01858 {LDNS_RR_TYPE_NULL, "TYPE60", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01859 {LDNS_RR_TYPE_NULL, "TYPE61", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01860 {LDNS_RR_TYPE_NULL, "TYPE62", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01861 {LDNS_RR_TYPE_NULL, "TYPE63", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01862 {LDNS_RR_TYPE_NULL, "TYPE64", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01863 {LDNS_RR_TYPE_NULL, "TYPE65", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01864 {LDNS_RR_TYPE_NULL, "TYPE66", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01865 {LDNS_RR_TYPE_NULL, "TYPE67", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01866 {LDNS_RR_TYPE_NULL, "TYPE68", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01867 {LDNS_RR_TYPE_NULL, "TYPE69", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01868 {LDNS_RR_TYPE_NULL, "TYPE70", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01869 {LDNS_RR_TYPE_NULL, "TYPE71", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01870 {LDNS_RR_TYPE_NULL, "TYPE72", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01871 {LDNS_RR_TYPE_NULL, "TYPE73", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01872 {LDNS_RR_TYPE_NULL, "TYPE74", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01873 {LDNS_RR_TYPE_NULL, "TYPE75", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01874 {LDNS_RR_TYPE_NULL, "TYPE76", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01875 {LDNS_RR_TYPE_NULL, "TYPE77", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01876 {LDNS_RR_TYPE_NULL, "TYPE78", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01877 {LDNS_RR_TYPE_NULL, "TYPE79", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01878 {LDNS_RR_TYPE_NULL, "TYPE80", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01879 {LDNS_RR_TYPE_NULL, "TYPE81", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01880 {LDNS_RR_TYPE_NULL, "TYPE82", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01881 {LDNS_RR_TYPE_NULL, "TYPE83", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01882 {LDNS_RR_TYPE_NULL, "TYPE84", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01883 {LDNS_RR_TYPE_NULL, "TYPE85", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01884 {LDNS_RR_TYPE_NULL, "TYPE86", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01885 {LDNS_RR_TYPE_NULL, "TYPE87", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01886 {LDNS_RR_TYPE_NULL, "TYPE88", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01887 {LDNS_RR_TYPE_NULL, "TYPE89", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01888 {LDNS_RR_TYPE_NULL, "TYPE90", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01889 {LDNS_RR_TYPE_NULL, "TYPE91", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01890 {LDNS_RR_TYPE_NULL, "TYPE92", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01891 {LDNS_RR_TYPE_NULL, "TYPE93", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01892 {LDNS_RR_TYPE_NULL, "TYPE94", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01893 {LDNS_RR_TYPE_NULL, "TYPE95", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01894 {LDNS_RR_TYPE_NULL, "TYPE96", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01895 {LDNS_RR_TYPE_NULL, "TYPE97", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01896 {LDNS_RR_TYPE_NULL, "TYPE98", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01897 {LDNS_RR_TYPE_NULL, "TYPE99", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01898 {LDNS_RR_TYPE_NULL, "TYPE100", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01899 {LDNS_RR_TYPE_NULL, "TYPE101", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01900 {LDNS_RR_TYPE_NULL, "TYPE102", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01901 {LDNS_RR_TYPE_NULL, "TYPE103", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01902 {LDNS_RR_TYPE_NULL, "TYPE104", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01903 {LDNS_RR_TYPE_NULL, "TYPE105", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01904 {LDNS_RR_TYPE_NULL, "TYPE106", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01905 {LDNS_RR_TYPE_NULL, "TYPE107", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01906 {LDNS_RR_TYPE_NULL, "TYPE108", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01907 {LDNS_RR_TYPE_NULL, "TYPE109", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01908 {LDNS_RR_TYPE_NULL, "TYPE110", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01909 {LDNS_RR_TYPE_NULL, "TYPE111", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01910 {LDNS_RR_TYPE_NULL, "TYPE112", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01911 {LDNS_RR_TYPE_NULL, "TYPE113", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01912 {LDNS_RR_TYPE_NULL, "TYPE114", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01913 {LDNS_RR_TYPE_NULL, "TYPE115", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01914 {LDNS_RR_TYPE_NULL, "TYPE116", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01915 {LDNS_RR_TYPE_NULL, "TYPE117", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01916 {LDNS_RR_TYPE_NULL, "TYPE118", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01917 {LDNS_RR_TYPE_NULL, "TYPE119", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01918 {LDNS_RR_TYPE_NULL, "TYPE120", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01919 {LDNS_RR_TYPE_NULL, "TYPE121", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01920 {LDNS_RR_TYPE_NULL, "TYPE122", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01921 {LDNS_RR_TYPE_NULL, "TYPE123", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01922 {LDNS_RR_TYPE_NULL, "TYPE124", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01923 {LDNS_RR_TYPE_NULL, "TYPE125", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01924 {LDNS_RR_TYPE_NULL, "TYPE126", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01925 {LDNS_RR_TYPE_NULL, "TYPE127", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01926 {LDNS_RR_TYPE_NULL, "TYPE128", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01927 {LDNS_RR_TYPE_NULL, "TYPE129", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01928 {LDNS_RR_TYPE_NULL, "TYPE130", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01929 {LDNS_RR_TYPE_NULL, "TYPE131", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01930 {LDNS_RR_TYPE_NULL, "TYPE132", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01931 {LDNS_RR_TYPE_NULL, "TYPE133", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01932 {LDNS_RR_TYPE_NULL, "TYPE134", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01933 {LDNS_RR_TYPE_NULL, "TYPE135", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01934 {LDNS_RR_TYPE_NULL, "TYPE136", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01935 {LDNS_RR_TYPE_NULL, "TYPE137", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01936 {LDNS_RR_TYPE_NULL, "TYPE138", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01937 {LDNS_RR_TYPE_NULL, "TYPE139", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01938 {LDNS_RR_TYPE_NULL, "TYPE140", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01939 {LDNS_RR_TYPE_NULL, "TYPE141", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01940 {LDNS_RR_TYPE_NULL, "TYPE142", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01941 {LDNS_RR_TYPE_NULL, "TYPE143", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01942 {LDNS_RR_TYPE_NULL, "TYPE144", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01943 {LDNS_RR_TYPE_NULL, "TYPE145", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01944 {LDNS_RR_TYPE_NULL, "TYPE146", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01945 {LDNS_RR_TYPE_NULL, "TYPE147", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01946 {LDNS_RR_TYPE_NULL, "TYPE148", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01947 {LDNS_RR_TYPE_NULL, "TYPE149", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01948 {LDNS_RR_TYPE_NULL, "TYPE150", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01949 {LDNS_RR_TYPE_NULL, "TYPE151", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01950 {LDNS_RR_TYPE_NULL, "TYPE152", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01951 {LDNS_RR_TYPE_NULL, "TYPE153", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01952 {LDNS_RR_TYPE_NULL, "TYPE154", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01953 {LDNS_RR_TYPE_NULL, "TYPE155", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01954 {LDNS_RR_TYPE_NULL, "TYPE156", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01955 {LDNS_RR_TYPE_NULL, "TYPE157", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01956 {LDNS_RR_TYPE_NULL, "TYPE158", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01957 {LDNS_RR_TYPE_NULL, "TYPE159", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01958 {LDNS_RR_TYPE_NULL, "TYPE160", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01959 {LDNS_RR_TYPE_NULL, "TYPE161", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01960 {LDNS_RR_TYPE_NULL, "TYPE162", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01961 {LDNS_RR_TYPE_NULL, "TYPE163", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01962 {LDNS_RR_TYPE_NULL, "TYPE164", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01963 {LDNS_RR_TYPE_NULL, "TYPE165", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01964 {LDNS_RR_TYPE_NULL, "TYPE166", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01965 {LDNS_RR_TYPE_NULL, "TYPE167", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01966 {LDNS_RR_TYPE_NULL, "TYPE168", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01967 {LDNS_RR_TYPE_NULL, "TYPE169", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01968 {LDNS_RR_TYPE_NULL, "TYPE170", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01969 {LDNS_RR_TYPE_NULL, "TYPE171", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01970 {LDNS_RR_TYPE_NULL, "TYPE172", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01971 {LDNS_RR_TYPE_NULL, "TYPE173", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01972 {LDNS_RR_TYPE_NULL, "TYPE174", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01973 {LDNS_RR_TYPE_NULL, "TYPE175", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01974 {LDNS_RR_TYPE_NULL, "TYPE176", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01975 {LDNS_RR_TYPE_NULL, "TYPE177", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01976 {LDNS_RR_TYPE_NULL, "TYPE178", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01977 {LDNS_RR_TYPE_NULL, "TYPE179", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01978 {LDNS_RR_TYPE_NULL, "TYPE180", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01979 {LDNS_RR_TYPE_NULL, "TYPE181", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01980 {LDNS_RR_TYPE_NULL, "TYPE182", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01981 {LDNS_RR_TYPE_NULL, "TYPE183", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01982 {LDNS_RR_TYPE_NULL, "TYPE184", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01983 {LDNS_RR_TYPE_NULL, "TYPE185", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01984 {LDNS_RR_TYPE_NULL, "TYPE186", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01985 {LDNS_RR_TYPE_NULL, "TYPE187", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01986 {LDNS_RR_TYPE_NULL, "TYPE188", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01987 {LDNS_RR_TYPE_NULL, "TYPE189", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01988 {LDNS_RR_TYPE_NULL, "TYPE190", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01989 {LDNS_RR_TYPE_NULL, "TYPE191", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01990 {LDNS_RR_TYPE_NULL, "TYPE192", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01991 {LDNS_RR_TYPE_NULL, "TYPE193", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01992 {LDNS_RR_TYPE_NULL, "TYPE194", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01993 {LDNS_RR_TYPE_NULL, "TYPE195", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01994 {LDNS_RR_TYPE_NULL, "TYPE196", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01995 {LDNS_RR_TYPE_NULL, "TYPE197", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01996 {LDNS_RR_TYPE_NULL, "TYPE198", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01997 {LDNS_RR_TYPE_NULL, "TYPE199", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01998 {LDNS_RR_TYPE_NULL, "TYPE200", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
01999 {LDNS_RR_TYPE_NULL, "TYPE201", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02000 {LDNS_RR_TYPE_NULL, "TYPE202", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02001 {LDNS_RR_TYPE_NULL, "TYPE203", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02002 {LDNS_RR_TYPE_NULL, "TYPE204", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02003 {LDNS_RR_TYPE_NULL, "TYPE205", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02004 {LDNS_RR_TYPE_NULL, "TYPE206", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02005 {LDNS_RR_TYPE_NULL, "TYPE207", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02006 {LDNS_RR_TYPE_NULL, "TYPE208", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02007 {LDNS_RR_TYPE_NULL, "TYPE209", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02008 {LDNS_RR_TYPE_NULL, "TYPE210", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02009 {LDNS_RR_TYPE_NULL, "TYPE211", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02010 {LDNS_RR_TYPE_NULL, "TYPE212", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02011 {LDNS_RR_TYPE_NULL, "TYPE213", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02012 {LDNS_RR_TYPE_NULL, "TYPE214", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02013 {LDNS_RR_TYPE_NULL, "TYPE215", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02014 {LDNS_RR_TYPE_NULL, "TYPE216", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02015 {LDNS_RR_TYPE_NULL, "TYPE217", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02016 {LDNS_RR_TYPE_NULL, "TYPE218", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02017 {LDNS_RR_TYPE_NULL, "TYPE219", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02018 {LDNS_RR_TYPE_NULL, "TYPE220", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02019 {LDNS_RR_TYPE_NULL, "TYPE221", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02020 {LDNS_RR_TYPE_NULL, "TYPE222", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02021 {LDNS_RR_TYPE_NULL, "TYPE223", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02022 {LDNS_RR_TYPE_NULL, "TYPE224", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02023 {LDNS_RR_TYPE_NULL, "TYPE225", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02024 {LDNS_RR_TYPE_NULL, "TYPE226", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02025 {LDNS_RR_TYPE_NULL, "TYPE227", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02026 {LDNS_RR_TYPE_NULL, "TYPE228", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02027 {LDNS_RR_TYPE_NULL, "TYPE229", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02028 {LDNS_RR_TYPE_NULL, "TYPE230", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02029 {LDNS_RR_TYPE_NULL, "TYPE231", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02030 {LDNS_RR_TYPE_NULL, "TYPE232", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02031 {LDNS_RR_TYPE_NULL, "TYPE233", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02032 {LDNS_RR_TYPE_NULL, "TYPE234", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02033 {LDNS_RR_TYPE_NULL, "TYPE235", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02034 {LDNS_RR_TYPE_NULL, "TYPE236", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02035 {LDNS_RR_TYPE_NULL, "TYPE237", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02036 {LDNS_RR_TYPE_NULL, "TYPE238", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02037 {LDNS_RR_TYPE_NULL, "TYPE239", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02038 {LDNS_RR_TYPE_NULL, "TYPE240", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02039 {LDNS_RR_TYPE_NULL, "TYPE241", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02040 {LDNS_RR_TYPE_NULL, "TYPE242", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02041 {LDNS_RR_TYPE_NULL, "TYPE243", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02042 {LDNS_RR_TYPE_NULL, "TYPE244", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02043 {LDNS_RR_TYPE_NULL, "TYPE245", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02044 {LDNS_RR_TYPE_NULL, "TYPE246", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02045 {LDNS_RR_TYPE_NULL, "TYPE247", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02046 {LDNS_RR_TYPE_NULL, "TYPE248", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02047 {LDNS_RR_TYPE_NULL, "TYPE249", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
02048 {LDNS_RR_TYPE_TSIG, "TSIG", 8, 9, type_tsig_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }
02049 };
02056 #define LDNS_RDATA_FIELD_DESCRIPTORS_COUNT \
02057 (sizeof(rdata_field_descriptors)/sizeof(rdata_field_descriptors[0]))
02058
02059 const ldns_rr_descriptor *
02060 ldns_rr_descript(uint16_t type)
02061 {
02062 size_t i;
02063 if (type <= LDNS_RDATA_FIELD_DESCRIPTORS_COMMON) {
02064 return &rdata_field_descriptors[type];
02065 } else {
02066
02067 for (i = LDNS_RDATA_FIELD_DESCRIPTORS_COMMON;
02068 i < LDNS_RDATA_FIELD_DESCRIPTORS_COUNT;
02069 i++) {
02070 if (rdata_field_descriptors[i]._type == type) {
02071 return &rdata_field_descriptors[i];
02072 }
02073 }
02074 return &rdata_field_descriptors[0];
02075 }
02076 }
02077
02078 size_t
02079 ldns_rr_descriptor_minimum(const ldns_rr_descriptor *descriptor)
02080 {
02081 if (descriptor) {
02082 return descriptor->_minimum;
02083 } else {
02084 return 0;
02085 }
02086 }
02087
02088 size_t
02089 ldns_rr_descriptor_maximum(const ldns_rr_descriptor *descriptor)
02090 {
02091 if (descriptor) {
02092 if (descriptor->_variable != LDNS_RDF_TYPE_NONE) {
02093
02094 return UINT_MAX;
02095 } else {
02096 return descriptor->_maximum;
02097 }
02098 } else {
02099 return 0;
02100 }
02101 }
02102
02103 ldns_rdf_type
02104 ldns_rr_descriptor_field_type(const ldns_rr_descriptor *descriptor,
02105 size_t index)
02106 {
02107 assert(descriptor != NULL);
02108 assert(index < descriptor->_maximum
02109 || descriptor->_variable != LDNS_RDF_TYPE_NONE);
02110 if (index < descriptor->_maximum) {
02111 return descriptor->_wireformat[index];
02112 } else {
02113 return descriptor->_variable;
02114 }
02115 }
02116
02117 ldns_rr_type
02118 ldns_get_rr_type_by_name(const char *name)
02119 {
02120 unsigned int i;
02121 const char *desc_name;
02122 const ldns_rr_descriptor *desc;
02123
02124
02125 if (strlen(name) > 4 && strncasecmp(name, "TYPE", 4) == 0) {
02126 return atoi(name + 4);
02127 }
02128
02129
02130 for (i = 0; i < (unsigned int) LDNS_RDATA_FIELD_DESCRIPTORS_COUNT; i++) {
02131 desc = &rdata_field_descriptors[i];
02132 desc_name = desc->_name;
02133 if(desc_name &&
02134 strlen(name) == strlen(desc_name) &&
02135 strncasecmp(name, desc_name, strlen(desc_name)) == 0) {
02136 return i;
02137 }
02138 }
02139
02140
02141 if (strlen(name) == 4 && strncasecmp(name, "IXFR", 4) == 0) {
02142 return 251;
02143 } else if (strlen(name) == 4 && strncasecmp(name, "AXFR", 4) == 0) {
02144 return 252;
02145 } else if (strlen(name) == 5 && strncasecmp(name, "MAILB", 5) == 0) {
02146 return 253;
02147 } else if (strlen(name) == 5 && strncasecmp(name, "MAILA", 5) == 0) {
02148 return 254;
02149 } else if (strlen(name) == 3 && strncasecmp(name, "ANY", 3) == 0) {
02150 return 255;
02151 }
02152
02153 return 0;
02154 }
02155
02156 ldns_rr_class
02157 ldns_get_rr_class_by_name(const char *name)
02158 {
02159 ldns_lookup_table *lt;
02160
02161
02162 if (strlen(name) > 5 && strncasecmp(name, "CLASS", 5) == 0) {
02163 return atoi(name + 5);
02164 }
02165
02166
02167 lt = ldns_lookup_by_name(ldns_rr_classes, name);
02168
02169 if (lt) {
02170 return lt->id;
02171 }
02172 return 0;
02173 }
02174
02175
02176 ldns_rr_type
02177 ldns_rdf2rr_type(const ldns_rdf *rd)
02178 {
02179 ldns_rr_type r;
02180
02181 if (!rd) {
02182 return 0;
02183 }
02184
02185 if (ldns_rdf_get_type(rd) != LDNS_RDF_TYPE_TYPE) {
02186 return 0;
02187 }
02188
02189 r = (ldns_rr_type) ldns_rdf2native_int16(rd);
02190 return r;
02191 }