Lines Matching defs:lctx

115 	isc_result_t		(*openfile)(dns_loadctx_t *lctx,
117 isc_result_t (*load)(dns_loadctx_t *lctx);
168 #define DNS_LCTX_VALID(lctx) ISC_MAGIC_VALID(lctx, DNS_LCTX_MAGIC)
173 openfile_text(dns_loadctx_t *lctx, const char *master_file);
176 openfile_raw(dns_loadctx_t *lctx, const char *master_file);
179 load_text(dns_loadctx_t *lctx);
182 load_raw(dns_loadctx_t *lctx);
185 pushfile(const char *master_file, dns_name_t *origin, dns_loadctx_t *lctx);
206 task_send(dns_loadctx_t *lctx);
209 loadctx_destroy(dns_loadctx_t *lctx);
220 if (MANYERRS(lctx, result)) { \
221 SETRESULT(lctx, result); \
230 if (MANYERRS(lctx, result)) { \
231 SETRESULT(lctx, result); \
242 result = commit(callbacks, lctx, &current_list, \
244 if (MANYERRS(lctx, result)) { \
245 SETRESULT(lctx, result); \
248 result = commit(callbacks, lctx, &glue_list, \
250 if (MANYERRS(lctx, result)) { \
251 SETRESULT(lctx, result); \
271 GETTOKEN(lctx->lex, 0, &token, ISC_TRUE); \
273 isc_lex_ungettoken(lctx->lex, &token); \
275 if (MANYERRS(lctx, result)) { \
276 SETRESULT(lctx, result); \
284 #define MANYERRS(lctx, result) \
287 ((lctx)->options & DNS_MASTER_MANYERRORS) != 0)
289 #define SETRESULT(lctx, r) \
291 if ((lctx)->result == ISC_R_SUCCESS) \
292 (lctx)->result = r; \
408 dns_loadctx_t *lctx;
412 lctx = *lctxp;
413 REQUIRE(DNS_LCTX_VALID(lctx));
415 LOCK(&lctx->lock);
416 INSIST(lctx->references > 0);
417 lctx->references--;
418 if (lctx->references == 0)
420 UNLOCK(&lctx->lock);
423 loadctx_destroy(lctx);
444 loadctx_destroy(dns_loadctx_t *lctx) {
448 REQUIRE(DNS_LCTX_VALID(lctx));
450 lctx->magic = 0;
451 if (lctx->inc != NULL)
452 incctx_destroy(lctx->mctx, lctx->inc);
454 if (lctx->f != NULL) {
455 result = isc_stdio_close(lctx->f);
464 if (lctx->lex != NULL && !lctx->keep_lex)
465 isc_lex_destroy(&lctx->lex);
467 if (lctx->task != NULL)
468 isc_task_detach(&lctx->task);
469 DESTROYLOCK(&lctx->lock);
471 isc_mem_attach(lctx->mctx, &mctx);
472 isc_mem_detach(&lctx->mctx);
473 isc_mem_put(mctx, lctx, sizeof(*lctx));
519 dns_loadctx_t *lctx;
535 lctx = isc_mem_get(mctx, sizeof(*lctx));
536 if (lctx == NULL)
538 result = isc_mutex_init(&lctx->lock);
540 isc_mem_put(mctx, lctx, sizeof(*lctx));
544 lctx->inc = NULL;
545 result = incctx_create(mctx, origin, &lctx->inc);
549 lctx->format = format;
554 lctx->openfile = openfile_text;
555 lctx->load = load_text;
558 lctx->openfile = openfile_raw;
559 lctx->load = load_raw;
564 lctx->lex = lex;
565 lctx->keep_lex = ISC_TRUE;
567 lctx->lex = NULL;
568 result = isc_lex_create(mctx, TOKENSIZ, &lctx->lex);
571 lctx->keep_lex = ISC_FALSE;
576 isc_lex_setspecials(lctx->lex, specials);
577 isc_lex_setcomments(lctx->lex, ISC_LEXCOMMENT_DNSMASTERFILE);
580 lctx->ttl_known = ISC_FALSE;
581 lctx->ttl = 0;
582 lctx->default_ttl_known = ISC_FALSE;
583 lctx->default_ttl = 0;
584 lctx->warn_1035 = ISC_TRUE; /* XXX Argument? */
585 lctx->warn_tcr = ISC_TRUE; /* XXX Argument? */
586 lctx->warn_sigexpired = ISC_TRUE; /* XXX Argument? */
587 lctx->options = options;
588 lctx->seen_include = ISC_FALSE;
589 lctx->zclass = zclass;
590 lctx->resign = resign;
591 lctx->result = ISC_R_SUCCESS;
593 dns_fixedname_init(&lctx->fixed_top);
594 lctx->top = dns_fixedname_name(&lctx->fixed_top);
596 dns_name_fromregion(lctx->top, &r);
598 lctx->f = NULL;
599 lctx->first = ISC_TRUE;
600 dns_master_initrawheader(&lctx->header);
602 lctx->loop_cnt = (done != NULL) ? 100 : 0;
603 lctx->callbacks = callbacks;
604 lctx->task = NULL;
606 isc_task_attach(task, &lctx->task);
607 lctx->done = done;
608 lctx->done_arg = done_arg;
609 lctx->canceled = ISC_FALSE;
610 lctx->mctx = NULL;
611 isc_mem_attach(mctx, &lctx->mctx);
612 lctx->references = 1; /* Implicit attach. */
613 lctx->magic = DNS_LCTX_MAGIC;
614 *lctxp = lctx;
618 incctx_destroy(mctx, lctx->inc);
620 isc_mem_put(mctx, lctx, sizeof(*lctx));
768 openfile_text(dns_loadctx_t *lctx, const char *master_file) {
769 return (isc_lex_openfile(lctx->lex, master_file));
773 openfile_raw(dns_loadctx_t *lctx, const char *master_file) {
776 result = isc_stdio_open(master_file, "r", &lctx->f);
787 generate(dns_loadctx_t *lctx, char *range, char *lhs, char *gtype, char *rhs,
809 ictx = lctx->inc;
810 callbacks = lctx->callbacks;
815 target_mem = isc_mem_get(lctx->mctx, target_size);
816 rhsbuf = isc_mem_get(lctx->mctx, DNS_MASTER_RHS);
817 lhsbuf = isc_mem_get(lctx->mctx, DNS_MASTER_LHS);
866 if ((lctx->options & DNS_MASTER_ZONE) != 0 &&
867 (lctx->options & DNS_MASTER_SLAVE) == 0 &&
868 (lctx->options & DNS_MASTER_KEY) == 0 &&
869 !dns_name_issubdomain(owner, lctx->top))
887 result = isc_lex_openbuffer(lctx->lex, &buffer);
892 result = dns_rdata_fromtext(&rdata, lctx->zclass, type,
893 lctx->lex, ictx->origin, 0,
894 lctx->mctx, &target, callbacks);
895 RUNTIME_CHECK(isc_lex_close(lctx->lex) == ISC_R_SUCCESS);
901 rdatalist.rdclass = lctx->zclass;
902 rdatalist.ttl = lctx->ttl;
905 result = commit(callbacks, lctx, &head, owner, source, line);
927 isc_mem_put(lctx->mctx, target_mem, target_size);
929 isc_mem_put(lctx->mctx, lhsbuf, DNS_MASTER_LHS);
931 isc_mem_put(lctx->mctx, rhsbuf, DNS_MASTER_RHS);
952 check_ns(dns_loadctx_t *lctx, isc_token_t *token, const char *source,
959 if ((lctx->options & DNS_MASTER_FATALNS) != 0)
960 callback = lctx->callbacks->error;
962 callback = lctx->callbacks->warn;
968 tmp = isc_mem_strdup(lctx->mctx, DNS_AS_STR(*token));
981 (*callback)(lctx->callbacks, "%s:%lu: NS record '%s' "
985 isc_mem_free(lctx->mctx, tmp);
1007 load_text(dns_loadctx_t *lctx) {
1057 REQUIRE(DNS_LCTX_VALID(lctx));
1058 callbacks = lctx->callbacks;
1059 mctx = lctx->mctx;
1060 ictx = lctx->inc;
1079 if ((lctx->options & DNS_MASTER_CHECKNAMES) != 0)
1081 if ((lctx->options & DNS_MASTER_CHECKNAMESFAIL) != 0)
1083 if ((lctx->options & DNS_MASTER_CHECKMX) != 0)
1085 if ((lctx->options & DNS_MASTER_CHECKMXFAIL) != 0)
1087 source = isc_lex_getsourcename(lctx->lex);
1090 line = isc_lex_getsourceline(lctx->lex);
1091 GETTOKEN(lctx->lex, ISC_LEXOPT_INITIALWS | ISC_LEXOPT_QSTRING,
1093 line = isc_lex_getsourceline(lctx->lex);
1097 WARNUNEXPECTEDEOF(lctx->lex);
1101 lctx->inc = ictx->parent;
1103 incctx_destroy(lctx->mctx, ictx);
1104 RUNTIME_CHECK(isc_lex_close(lctx->lex) == ISC_R_SUCCESS);
1105 line = isc_lex_getsourceline(lctx->lex);
1106 source = isc_lex_getsourcename(lctx->lex);
1107 ictx = lctx->inc;
1140 GETTOKEN(lctx->lex, 0, &token, ISC_FALSE);
1144 GETTOKEN(lctx->lex, 0, &token, ISC_FALSE);
1147 &lctx->ttl);
1148 if (MANYERRS(lctx, result)) {
1149 SETRESULT(lctx, result);
1150 lctx->ttl = 0;
1153 limit_ttl(callbacks, source, line, &lctx->ttl);
1154 lctx->default_ttl = lctx->ttl;
1155 lctx->default_ttl_known = ISC_TRUE;
1161 if ((lctx->options & DNS_MASTER_NOINCLUDE)
1180 GETTOKEN(lctx->lex, ISC_LEXOPT_QSTRING, &token,
1190 GETTOKEN(lctx->lex, 0, &token, ISC_TRUE);
1195 WARNUNEXPECTEDEOF(lctx->lex);
1196 isc_lex_ungettoken(lctx->lex, &token);
1201 ictx->origin, lctx);
1202 if (MANYERRS(lctx, result)) {
1203 SETRESULT(lctx, result);
1210 ictx = lctx->inc;
1212 isc_lex_getsourcename(lctx->lex);
1213 line = isc_lex_getsourceline(lctx->lex);
1227 GETTOKEN(lctx->lex, 0, &token, ISC_FALSE);
1231 if (MANYERRS(lctx, result)) {
1232 SETRESULT(lctx, result);
1270 GETTOKEN(lctx->lex, 0, &token, ISC_FALSE);
1278 GETTOKEN(lctx->lex, 0, &token, ISC_FALSE);
1287 GETTOKEN(lctx->lex, 0, &token, ISC_FALSE);
1291 GETTOKEN(lctx->lex, 0, &token,
1296 &lctx->ttl)
1299 &lctx->ttl);
1300 lctx->ttl_known = ISC_TRUE;
1302 GETTOKEN(lctx->lex, 0, &token,
1310 GETTOKEN(lctx->lex, 0, &token,
1320 GETTOKEN(lctx->lex, ISC_LEXOPT_QSTRING,
1327 if (!lctx->ttl_known &&
1328 !lctx->default_ttl_known) {
1333 if (MANYERRS(lctx, result)) {
1334 SETRESULT(lctx, result);
1335 lctx->ttl = 0;
1339 lctx->default_ttl_known) {
1340 lctx->ttl = lctx->default_ttl;
1347 if (rdclass != 0 && rdclass != lctx->zclass) {
1350 result = generate(lctx, range, lhs, gtype, rhs,
1352 if (MANYERRS(lctx, result)) {
1353 SETRESULT(lctx, result);
1366 if (MANYERRS(lctx, result)) {
1367 SETRESULT(lctx, result);
1390 if (MANYERRS(lctx, result)) {
1391 SETRESULT(lctx, result);
1414 result = pushfile(include_file, new_name, lctx);
1415 if (MANYERRS(lctx, result)) {
1416 SETRESULT(lctx, result);
1423 ictx = lctx->inc;
1424 source = isc_lex_getsourcename(lctx->lex);
1425 line = isc_lex_getsourceline(lctx->lex);
1442 result = commit(callbacks, lctx, &glue_list,
1445 if (MANYERRS(lctx, result)) {
1446 SETRESULT(lctx, result);
1478 result = commit(callbacks, lctx,
1483 if (MANYERRS(lctx, result)) {
1484 SETRESULT(lctx, result);
1503 if ((lctx->options & DNS_MASTER_CHECKWILDCARD)
1509 if ((lctx->options & DNS_MASTER_ZONE) != 0 &&
1510 (lctx->options & DNS_MASTER_SLAVE) == 0 &&
1511 (lctx->options & DNS_MASTER_KEY) == 0 &&
1512 !dns_name_issubdomain(new_name, lctx->top))
1533 if (MANYERRS(lctx, result)) {
1534 SETRESULT(lctx, result);
1553 GETTOKEN(lctx->lex, 0, &token, initialws);
1562 WARNUNEXPECTEDEOF(lctx->lex);
1564 isc_lex_ungettoken(lctx->lex, &token);
1573 if (MANYERRS(lctx, result)) {
1574 SETRESULT(lctx, result);
1585 GETTOKEN(lctx->lex, 0, &token, ISC_FALSE);
1588 if (dns_ttl_fromtext(&token.value.as_textregion, &lctx->ttl)
1590 limit_ttl(callbacks, source, line, &lctx->ttl);
1592 lctx->ttl_known = ISC_TRUE;
1593 GETTOKEN(lctx->lex, 0, &token, ISC_FALSE);
1600 if (MANYERRS(lctx, result)) {
1601 SETRESULT(lctx, result);
1612 GETTOKEN(lctx->lex, 0, &token, ISC_FALSE);
1618 if (MANYERRS(lctx, result)) {
1619 SETRESULT(lctx, result);
1634 if (MANYERRS(lctx, result)) {
1635 SETRESULT(lctx, result);
1646 if (rdclass != 0 && rdclass != lctx->zclass) {
1651 dns_rdataclass_format(lctx->zclass, classname2,
1659 if (MANYERRS(lctx, result)) {
1660 SETRESULT(lctx, result);
1674 if ((lctx->options & DNS_MASTER_ZONE) != 0 &&
1675 (lctx->options & DNS_MASTER_SLAVE) == 0 &&
1687 if (MANYERRS(lctx, result)) {
1688 SETRESULT(lctx, result);
1712 lctx->zclass == dns_rdataclass_in &&
1713 (lctx->options & DNS_MASTER_CHECKNS) != 0) {
1715 GETTOKEN(lctx->lex, 0, &token, ISC_FALSE);
1716 result = check_ns(lctx, &token, source, line);
1717 isc_lex_ungettoken(lctx->lex, &token);
1718 if ((lctx->options & DNS_MASTER_FATALNS) != 0) {
1719 if (MANYERRS(lctx, result)) {
1720 SETRESULT(lctx, result);
1730 if ((lctx->options & DNS_MASTER_CHECKNAMES) != 0) {
1736 ok = dns_rdata_checkowner(name, lctx->zclass, type,
1744 if ((lctx->options & DNS_MASTER_CHECKNAMESFAIL) != 0) {
1749 if (MANYERRS(lctx, result)) {
1750 SETRESULT(lctx, result);
1772 result = dns_rdata_fromtext(&rdata[rdcount], lctx->zclass,
1773 type, lctx->lex, ictx->origin,
1774 options, lctx->mctx, &target,
1776 if (MANYERRS(lctx, result)) {
1777 SETRESULT(lctx, result);
1788 (lctx->options & DNS_MASTER_ZONE) != 0 &&
1789 dns_name_compare(ictx->current, lctx->top) != 0) {
1797 if (MANYERRS(lctx, result)) {
1798 SETRESULT(lctx, result);
1813 if (!lctx->ttl_known && !lctx->default_ttl_known) {
1819 lctx->ttl = dns_soa_getminimum(&rdata[rdcount]);
1820 limit_ttl(callbacks, source, line, &lctx->ttl);
1821 lctx->default_ttl = lctx->ttl;
1822 lctx->default_ttl_known = ISC_TRUE;
1823 } else if ((lctx->options & DNS_MASTER_HINT) != 0) {
1827 lctx->ttl = 0;
1828 lctx->default_ttl = lctx->ttl;
1829 lctx->default_ttl_known = ISC_TRUE;
1836 if (MANYERRS(lctx, result)) {
1837 SETRESULT(lctx, result);
1838 lctx->ttl = 0;
1843 } else if (!explicit_ttl && lctx->default_ttl_known) {
1844 lctx->ttl = lctx->default_ttl;
1845 } else if (!explicit_ttl && lctx->warn_1035) {
1850 lctx->warn_1035 = ISC_FALSE;
1853 if (type == dns_rdatatype_rrsig && lctx->warn_sigexpired) {
1863 lctx->warn_sigexpired = ISC_FALSE;
1868 lctx->warn_tcr && (lctx->options & DNS_MASTER_ZONE) != 0 &&
1869 (lctx->options & DNS_MASTER_SLAVE) == 0) {
1872 lctx->warn_tcr = ISC_FALSE;
1875 if ((lctx->options & DNS_MASTER_AGETTL) != 0) {
1880 if (lctx->ttl < ttl_offset)
1882 lctx->ttl -= ttl_offset;
1920 this->rdclass = lctx->zclass;
1921 this->ttl = lctx->ttl;
1928 } else if (this->ttl != lctx->ttl) {
1933 lctx->ttl = this->ttl;
1951 } while (!done && (lctx->loop_cnt == 0 || loop_cnt++ < lctx->loop_cnt));
1956 result = commit(callbacks, lctx, &current_list, ictx->current,
1958 if (MANYERRS(lctx, result)) {
1959 SETRESULT(lctx, result);
1962 result = commit(callbacks, lctx, &glue_list, ictx->glue,
1964 if (MANYERRS(lctx, result)) {
1965 SETRESULT(lctx, result);
1970 INSIST(lctx->done != NULL && lctx->task != NULL);
1972 } else if (result == ISC_R_SUCCESS && lctx->result != ISC_R_SUCCESS) {
1973 result = lctx->result;
1974 } else if (result == ISC_R_SUCCESS && lctx->seen_include)
2010 pushfile(const char *master_file, dns_name_t *origin, dns_loadctx_t *lctx) {
2018 REQUIRE(DNS_LCTX_VALID(lctx));
2020 ictx = lctx->inc;
2021 lctx->seen_include = ISC_TRUE;
2023 result = incctx_create(lctx->mctx, origin, &new);
2043 result = (lctx->openfile)(lctx, master_file);
2047 lctx->inc = new;
2052 incctx_destroy(lctx->mctx, new);
2076 load_raw(dns_loadctx_t *lctx) {
2086 isc_mem_t *mctx = lctx->mctx;
2095 REQUIRE(DNS_LCTX_VALID(lctx));
2096 callbacks = lctx->callbacks;
2101 if (lctx->first) {
2110 result = isc_stdio_read(data, 1, commonlen, lctx->f, NULL);
2142 lctx->f, NULL);
2158 lctx->first = ISC_FALSE;
2159 lctx->header = header;
2189 (lctx->loop_cnt == 0 || loop_cnt < lctx->loop_cnt);
2202 lctx->f, NULL);
2249 lctx->f, NULL);
2268 sizeof(namelen), lctx->f);
2278 lctx->f);
2316 result = commit(callbacks, lctx, &head, name,
2336 sizeof(rdlen), lctx->f);
2343 rdlen, lctx->f);
2377 result = commit(callbacks, lctx, &head, name, NULL, 0);
2389 INSIST(lctx->done != NULL && lctx->task != NULL);
2391 } else if (result == ISC_R_SUCCESS && lctx->result != ISC_R_SUCCESS)
2392 result = lctx->result;
2438 dns_loadctx_t *lctx = NULL;
2443 &lctx);
2447 result = (lctx->openfile)(lctx, master_file);
2451 result = (lctx->load)(lctx);
2455 dns_loadctx_detach(&lctx);
2494 dns_loadctx_t *lctx = NULL;
2502 &lctx);
2506 result = (lctx->openfile)(lctx, master_file);
2510 result = task_send(lctx);
2512 dns_loadctx_attach(lctx, lctxp);
2517 dns_loadctx_detach(&lctx);
2527 dns_loadctx_t *lctx = NULL;
2533 NULL, &lctx);
2537 result = isc_lex_openstream(lctx->lex, stream);
2541 result = (lctx->load)(lctx);
2545 if (lctx != NULL)
2546 dns_loadctx_detach(&lctx);
2558 dns_loadctx_t *lctx = NULL;
2566 done_arg, NULL, &lctx);
2570 result = isc_lex_openstream(lctx->lex, stream);
2574 result = task_send(lctx);
2576 dns_loadctx_attach(lctx, lctxp);
2581 if (lctx != NULL)
2582 dns_loadctx_detach(&lctx);
2593 dns_loadctx_t *lctx = NULL;
2599 NULL, &lctx);
2603 result = isc_lex_openbuffer(lctx->lex, buffer);
2607 result = (lctx->load)(lctx);
2611 dns_loadctx_detach(&lctx);
2624 dns_loadctx_t *lctx = NULL;
2632 done_arg, NULL, &lctx);
2636 result = isc_lex_openbuffer(lctx->lex, buffer);
2640 result = task_send(lctx);
2642 dns_loadctx_attach(lctx, lctxp);
2647 dns_loadctx_detach(&lctx);
2658 dns_loadctx_t *lctx = NULL;
2664 lex, &lctx);
2668 result = (lctx->load)(lctx);
2671 dns_loadctx_detach(&lctx);
2684 dns_loadctx_t *lctx = NULL;
2692 done_arg, lex, &lctx);
2696 result = task_send(lctx);
2698 dns_loadctx_attach(lctx, lctxp);
2702 dns_loadctx_detach(&lctx);
2848 commit(dns_rdatacallbacks_t *callbacks, dns_loadctx_t *lctx,
2872 (lctx->options & DNS_MASTER_RESIGN) != 0) {
2875 dataset.resign = resign_fromlist(this, lctx->resign);
2894 if (MANYERRS(lctx, result))
2895 SETRESULT(lctx, result);
2942 dns_loadctx_t *lctx;
2945 lctx = event->ev_arg;
2946 REQUIRE(DNS_LCTX_VALID(lctx));
2948 if (lctx->canceled)
2951 result = (lctx->load)(lctx);
2953 event->ev_arg = lctx;
2956 (lctx->done)(lctx->done_arg, result);
2958 dns_loadctx_detach(&lctx);
2963 task_send(dns_loadctx_t *lctx) {
2966 event = isc_event_allocate(lctx->mctx, NULL,
2968 load_quantum, lctx, sizeof(*event));
2971 isc_task_send(lctx->task, &event);
2976 dns_loadctx_cancel(dns_loadctx_t *lctx) {
2977 REQUIRE(DNS_LCTX_VALID(lctx));
2979 LOCK(&lctx->lock);
2980 lctx->canceled = ISC_TRUE;
2981 UNLOCK(&lctx->lock);