Lines Matching defs:lctx
112 isc_result_t (*openfile)(dns_loadctx_t *lctx, const char *filename);
113 isc_result_t (*load)(dns_loadctx_t *lctx);
172 #define DNS_LCTX_VALID(lctx) ISC_MAGIC_VALID(lctx, DNS_LCTX_MAGIC)
177 openfile_text(dns_loadctx_t *lctx, const char *master_file);
180 load_text(dns_loadctx_t *lctx);
183 openfile_raw(dns_loadctx_t *lctx, const char *master_file);
186 load_raw(dns_loadctx_t *lctx);
189 pushfile(const char *master_file, dns_name_t *origin, dns_loadctx_t *lctx);
207 loadctx_destroy(dns_loadctx_t *lctx);
209 #define LCTX_MANYERRORS(lctx) (((lctx)->options & DNS_MASTER_MANYERRORS) != 0)
219 if (ictx->parent != NULL && LCTX_MANYERRORS(lctx)) { \
220 SETRESULT(lctx, result); \
222 lctx->inc = ictx->parent; \
224 incctx_destroy(lctx->mctx, ictx); \
225 RUNTIME_CHECK(isc_lex_close(lctx->lex) == \
227 line = isc_lex_getsourceline(lctx->lex); \
229 source = isc_lex_getsourcename(lctx->lex); \
230 ictx = lctx->inc; \
237 if (MANYERRS(lctx, result)) { \
238 SETRESULT(lctx, result); \
247 if (MANYERRS(lctx, result)) { \
248 SETRESULT(lctx, result); \
261 result = commit(callbacks, lctx, ¤t_list, ictx->current, \
263 if (MANYERRS(lctx, result)) { \
264 SETRESULT(lctx, result); \
267 result = commit(callbacks, lctx, &glue_list, ictx->glue, \
269 if (MANYERRS(lctx, result)) { \
270 SETRESULT(lctx, result); \
291 GETTOKEN(lctx->lex, 0, &token, true); \
293 isc_lex_ungettoken(lctx->lex, &token); \
295 if (MANYERRS(lctx, result)) { \
296 SETRESULT(lctx, result); \
305 #define MANYERRS(lctx, result) \
307 LCTX_MANYERRORS(lctx))
309 #define SETRESULT(lctx, r) \
310 if ((lctx)->result == ISC_R_SUCCESS) { \
311 (lctx)->result = r; \
349 dns_master_isprimary(dns_loadctx_t *lctx) {
350 return (lctx->options & DNS_MASTER_ZONE) != 0 &&
351 (lctx->options & DNS_MASTER_SECONDARY) == 0 &&
352 (lctx->options & DNS_MASTER_KEY) == 0;
417 dns_loadctx_t *lctx;
420 lctx = *lctxp;
422 REQUIRE(DNS_LCTX_VALID(lctx));
424 if (isc_refcount_decrement(&lctx->references) == 1) {
425 loadctx_destroy(lctx);
446 loadctx_destroy(dns_loadctx_t *lctx) {
447 REQUIRE(DNS_LCTX_VALID(lctx));
449 isc_refcount_destroy(&lctx->references);
451 lctx->magic = 0;
452 if (lctx->inc != NULL) {
453 incctx_destroy(lctx->mctx, lctx->inc);
456 if (lctx->f != NULL) {
457 isc_result_t result = isc_stdio_close(lctx->f);
465 if (lctx->lex != NULL && !lctx->keep_lex) {
466 isc_lex_destroy(&lctx->lex);
469 isc_mem_putanddetach(&lctx->mctx, lctx, sizeof(*lctx));
511 dns_loadctx_t *lctx = NULL;
523 lctx = isc_mem_get(mctx, sizeof(*lctx));
524 *lctx = (dns_loadctx_t){
542 incctx_create(mctx, origin, &lctx->inc);
546 lctx->openfile = openfile_text;
547 lctx->load = load_text;
550 lctx->openfile = openfile_raw;
551 lctx->load = load_raw;
558 lctx->lex = lex;
559 lctx->keep_lex = true;
562 lctx->lex = NULL;
563 isc_lex_create(mctx, TOKENSIZ, &lctx->lex);
564 lctx->keep_lex = false;
574 isc_lex_setspecials(lctx->lex, specials);
575 isc_lex_setcomments(lctx->lex, ISC_LEXCOMMENT_DNSMASTERFILE);
578 lctx->now = isc_stdtime_now();
580 lctx->top = dns_fixedname_initname(&lctx->fixed_top);
582 dns_name_fromregion(lctx->top, &r);
584 dns_master_initrawheader(&lctx->header);
586 isc_refcount_init(&lctx->references, 1); /* Implicit attach. */
587 isc_mem_attach(mctx, &lctx->mctx);
589 lctx->magic = DNS_LCTX_MAGIC;
590 *lctxp = lctx;
771 generate(dns_loadctx_t *lctx, char *range, char *lhs, char *gtype, char *rhs,
793 ictx = lctx->inc;
794 callbacks = lctx->callbacks;
798 target_mem = isc_mem_get(lctx->mctx, target_size);
799 rhsbuf = isc_mem_get(lctx->mctx, DNS_MASTER_RHS);
800 lhsbuf = isc_mem_get(lctx->mctx, DNS_MASTER_LHS);
837 if (dns_master_isprimary(lctx) && dns_rdatatype_ismeta(type)) {
863 if (dns_master_isprimary(lctx) &&
864 !dns_name_issubdomain(owner, lctx->top))
882 result = isc_lex_openbuffer(lctx->lex, &buffer);
888 result = dns_rdata_fromtext(&rdata, lctx->zclass, type,
889 lctx->lex, ictx->origin, 0,
890 lctx->mctx, &target, callbacks);
891 RUNTIME_CHECK(isc_lex_close(lctx->lex) == ISC_R_SUCCESS);
898 rdatalist.rdclass = lctx->zclass;
899 rdatalist.ttl = lctx->ttl;
902 result = commit(callbacks, lctx, &head, owner, source, line);
926 isc_mem_put(lctx->mctx, target_mem, target_size);
929 isc_mem_put(lctx->mctx, lhsbuf, DNS_MASTER_LHS);
932 isc_mem_put(lctx->mctx, rhsbuf, DNS_MASTER_RHS);
951 check_ns(dns_loadctx_t *lctx, isc_token_t *token, const char *source,
957 if ((lctx->options & DNS_MASTER_FATALNS) != 0) {
958 callback = lctx->callbacks->error;
960 callback = lctx->callbacks->warn;
967 tmp = isc_mem_strdup(lctx->mctx, DNS_AS_STR(*token));
981 (*callback)(lctx->callbacks,
987 isc_mem_free(lctx->mctx, tmp);
1010 openfile_text(dns_loadctx_t *lctx, const char *master_file) {
1011 return isc_lex_openfile(lctx->lex, master_file);
1028 load_text(dns_loadctx_t *lctx) {
1075 REQUIRE(DNS_LCTX_VALID(lctx));
1076 callbacks = lctx->callbacks;
1077 mctx = lctx->mctx;
1078 ictx = lctx->inc;
1096 if ((lctx->options & DNS_MASTER_CHECKNAMES) != 0) {
1099 if ((lctx->options & DNS_MASTER_CHECKNAMESFAIL) != 0) {
1102 if ((lctx->options & DNS_MASTER_CHECKMX) != 0) {
1105 if ((lctx->options & DNS_MASTER_CHECKMXFAIL) != 0) {
1108 source = isc_lex_getsourcename(lctx->lex);
1110 if (atomic_load_acquire(&lctx->canceled)) {
1116 line = isc_lex_getsourceline(lctx->lex);
1117 GETTOKEN(lctx->lex, ISC_LEXOPT_INITIALWS | ISC_LEXOPT_QSTRING,
1119 line = isc_lex_getsourceline(lctx->lex);
1123 WARNUNEXPECTEDEOF(lctx->lex);
1128 lctx->inc = ictx->parent;
1130 incctx_destroy(lctx->mctx, ictx);
1131 RUNTIME_CHECK(isc_lex_close(lctx->lex) ==
1133 line = isc_lex_getsourceline(lctx->lex);
1135 source = isc_lex_getsourcename(lctx->lex);
1136 ictx = lctx->inc;
1168 GETTOKEN(lctx->lex, 0, &token, false);
1171 GETTOKENERR(lctx->lex, 0, &token, false,
1172 lctx->ttl = 0;
1173 lctx->default_ttl_known = true;);
1175 &token.value.as_textregion, &lctx->ttl);
1176 if (MANYERRS(lctx, result)) {
1177 SETRESULT(lctx, result);
1178 lctx->ttl = 0;
1182 limit_ttl(callbacks, source, line, &lctx->ttl);
1183 lctx->default_ttl = lctx->ttl;
1184 lctx->default_ttl_known = true;
1191 if ((lctx->options & DNS_MASTER_NOINCLUDE) != 0)
1213 GETTOKEN(lctx->lex, ISC_LEXOPT_QSTRING, &token,
1220 GETTOKEN(lctx->lex, 0, &token, true);
1226 WARNUNEXPECTEDEOF(lctx->lex);
1232 ictx->origin, lctx);
1233 if (MANYERRS(lctx, result)) {
1234 SETRESULT(lctx, result);
1241 ictx = lctx->inc;
1243 lctx->lex);
1244 line = isc_lex_getsourceline(lctx->lex);
1259 GETTOKEN(lctx->lex, 0, &token, false);
1262 if (MANYERRS(lctx, result)) {
1263 SETRESULT(lctx, result);
1309 GETTOKEN(lctx->lex, 0, &token, false);
1312 GETTOKEN(lctx->lex, 0, &token, false);
1317 GETTOKEN(lctx->lex, 0, &token, false);
1323 GETTOKEN(lctx->lex, 0, &token, false);
1327 &lctx->ttl) ==
1331 &lctx->ttl);
1332 lctx->ttl_known = true;
1334 GETTOKEN(lctx->lex, 0, &token, false);
1343 GETTOKEN(lctx->lex, 0, &token, false);
1348 GETTOKEN(lctx->lex, ISC_LEXOPT_QSTRING, &token,
1351 if (!lctx->ttl_known &&
1352 !lctx->default_ttl_known)
1360 if (MANYERRS(lctx, result)) {
1361 SETRESULT(lctx, result);
1362 lctx->ttl = 0;
1367 lctx->default_ttl_known)
1369 lctx->ttl = lctx->default_ttl;
1376 if (rdclass != 0 && rdclass != lctx->zclass) {
1379 result = generate(lctx, range, lhs, gtype, rhs,
1381 if (MANYERRS(lctx, result)) {
1382 SETRESULT(lctx, result);
1396 if (MANYERRS(lctx, result)) {
1397 SETRESULT(lctx, result);
1416 if (MANYERRS(lctx, result)) {
1417 SETRESULT(lctx, result);
1444 result = pushfile(include_file, new_name, lctx);
1445 if (MANYERRS(lctx, result)) {
1446 SETRESULT(lctx, result);
1453 ictx = lctx->inc;
1455 source = isc_lex_getsourcename(lctx->lex);
1456 line = isc_lex_getsourceline(lctx->lex);
1474 result = commit(callbacks, lctx, &glue_list,
1477 if (MANYERRS(lctx, result)) {
1478 SETRESULT(lctx, result);
1513 result = commit(callbacks, lctx,
1517 if (MANYERRS(lctx, result)) {
1518 SETRESULT(lctx, result);
1540 if ((lctx->options &
1547 if (dns_master_isprimary(lctx) &&
1548 !dns_name_issubdomain(new_name, lctx->top))
1570 if (MANYERRS(lctx, result)) {
1571 SETRESULT(lctx, result);
1591 GETTOKEN(lctx->lex, 0, &token, initialws);
1600 WARNUNEXPECTEDEOF(lctx->lex);
1602 isc_lex_ungettoken(lctx->lex, &token);
1612 if (MANYERRS(lctx, result)) {
1613 SETRESULT(lctx, result);
1644 GETTOKEN(lctx->lex, 0, &token, false);
1649 &lctx->ttl);
1651 limit_ttl(callbacks, source, line, &lctx->ttl);
1653 lctx->ttl_known = true;
1654 GETTOKEN(lctx->lex, 0, &token, false);
1661 if (MANYERRS(lctx, result)) {
1662 SETRESULT(lctx, result);
1675 GETTOKEN(lctx->lex, 0, &token, false);
1682 if (MANYERRS(lctx, result)) {
1683 SETRESULT(lctx, result);
1698 if (MANYERRS(lctx, result)) {
1699 SETRESULT(lctx, result);
1711 if (rdclass != 0 && rdclass != lctx->zclass) {
1716 dns_rdataclass_format(lctx->zclass, classname2,
1724 if (MANYERRS(lctx, result)) {
1725 SETRESULT(lctx, result);
1741 if (dns_master_isprimary(lctx) &&
1752 if (MANYERRS(lctx, result)) {
1753 SETRESULT(lctx, result);
1763 if (dns_master_isprimary(lctx) && dns_rdatatype_ismeta(type)) {
1772 if (MANYERRS(lctx, result)) {
1773 SETRESULT(lctx, result);
1798 lctx->zclass == dns_rdataclass_in &&
1799 (lctx->options & DNS_MASTER_CHECKNS) != 0)
1801 GETTOKEN(lctx->lex, 0, &token, false);
1802 result = check_ns(lctx, &token, source, line);
1803 isc_lex_ungettoken(lctx->lex, &token);
1804 if ((lctx->options & DNS_MASTER_FATALNS) != 0) {
1805 if (MANYERRS(lctx, result)) {
1806 SETRESULT(lctx, result);
1817 if ((lctx->options & DNS_MASTER_CHECKNAMES) != 0) {
1823 ok = dns_rdata_checkowner(name, lctx->zclass, type,
1831 if (CHECKNAMESFAIL(lctx->options) ||
1837 if (MANYERRS(lctx, result)) {
1838 SETRESULT(lctx, result);
1863 result = dns_rdata_fromtext(&rdata[rdcount], lctx->zclass, type,
1864 lctx->lex, ictx->origin, options,
1865 lctx->mctx, &target, callbacks);
1866 if (MANYERRS(lctx, result)) {
1867 SETRESULT(lctx, result);
1879 (lctx->options & DNS_MASTER_ZONE) != 0 &&
1880 !dns_name_equal(ictx->current, lctx->top))
1890 if (MANYERRS(lctx, result)) {
1891 SETRESULT(lctx, result);
1901 (lctx->options & DNS_MASTER_ZONE) != 0 &&
1902 (lctx->options & DNS_MASTER_CHECKSVCB) != 0)
1912 if (MANYERRS(lctx, result)) {
1913 SETRESULT(lctx, result);
1923 dns_master_isprimary(lctx) &&
1924 dns_name_equal(ictx->current, lctx->top))
1937 if (MANYERRS(lctx, result)) {
1938 SETRESULT(lctx, result);
1952 if (!lctx->ttl_known && !lctx->default_ttl_known) {
1958 lctx->ttl = dns_soa_getminimum(&rdata[rdcount]);
1959 limit_ttl(callbacks, source, line, &lctx->ttl);
1960 lctx->default_ttl = lctx->ttl;
1961 lctx->default_ttl_known = true;
1962 } else if ((lctx->options & DNS_MASTER_HINT) != 0) {
1966 lctx->ttl = 0;
1967 lctx->default_ttl = lctx->ttl;
1968 lctx->default_ttl_known = true;
1975 if (MANYERRS(lctx, result)) {
1976 SETRESULT(lctx, result);
1977 lctx->ttl = 0;
1982 } else if (!explicit_ttl && lctx->default_ttl_known) {
1983 lctx->ttl = lctx->default_ttl;
1984 } else if (!explicit_ttl && lctx->warn_1035) {
1989 lctx->warn_1035 = false;
1992 if (type == dns_rdatatype_rrsig && lctx->warn_sigexpired) {
1997 if (isc_serial_lt(sig.timeexpire, lctx->now)) {
2002 lctx->warn_sigexpired = false;
2007 lctx->warn_tcr && dns_master_isprimary(lctx))
2013 lctx->warn_tcr = false;
2016 if ((lctx->options & DNS_MASTER_AGETTL) != 0) {
2026 if (lctx->ttl < ttl_offset) {
2027 lctx->ttl = 0;
2029 lctx->ttl -= ttl_offset;
2068 this->rdclass = lctx->zclass;
2069 this->ttl = lctx->ttl;
2076 } else if (this->ttl != lctx->ttl) {
2081 lctx->ttl = this->ttl;
2084 if ((lctx->options & DNS_MASTER_CHECKTTL) != 0 &&
2085 lctx->ttl > lctx->maxttl)
2091 source, line, lctx->ttl,
2092 lctx->maxttl);
2118 result = commit(callbacks, lctx, ¤t_list, ictx->current, source,
2120 if (MANYERRS(lctx, result)) {
2121 SETRESULT(lctx, result);
2125 result = commit(callbacks, lctx, &glue_list, ictx->glue, source,
2127 if (MANYERRS(lctx, result)) {
2128 SETRESULT(lctx, result);
2131 } else if (lctx->result != ISC_R_SUCCESS) {
2132 result = lctx->result;
2133 } else if (lctx->seen_include) {
2187 pushfile(const char *master_file, dns_name_t *origin, dns_loadctx_t *lctx) {
2194 REQUIRE(DNS_LCTX_VALID(lctx));
2196 ictx = lctx->inc;
2197 lctx->seen_include = true;
2199 incctx_create(lctx->mctx, origin, &newctx);
2218 result = (lctx->openfile)(lctx, master_file);
2223 lctx->inc = newctx;
2225 if (lctx->include_cb != NULL) {
2226 lctx->include_cb(master_file, lctx->include_arg);
2231 incctx_destroy(lctx->mctx, newctx);
2266 load_header(dns_loadctx_t *lctx) {
2275 REQUIRE(DNS_LCTX_VALID(lctx));
2277 if (lctx->format != dns_masterformat_raw) {
2281 callbacks = lctx->callbacks;
2287 result = isc_stdio_read(data, 1, commonlen, lctx->f, NULL);
2296 if (header.format != lctx->format) {
2319 result = isc_stdio_read(data + commonlen, 1, remainder, lctx->f, NULL);
2334 lctx->first = false;
2335 lctx->header = header;
2341 openfile_raw(dns_loadctx_t *lctx, const char *master_file) {
2344 result = isc_stdio_open(master_file, "rb", &lctx->f);
2354 load_raw(dns_loadctx_t *lctx) {
2362 isc_mem_t *mctx = lctx->mctx;
2370 callbacks = lctx->callbacks;
2373 if (lctx->first) {
2374 result = load_header(lctx);
2416 lctx->f, NULL);
2463 result = isc_stdio_read(target.base, 1, readlen, lctx->f, NULL);
2473 if (lctx->zclass != rdatalist.rdclass) {
2489 sizeof(namelen), lctx->f, &totallen);
2500 lctx->f, &totallen);
2511 if ((lctx->options & DNS_MASTER_CHECKTTL) != 0 &&
2512 rdatalist.ttl > lctx->maxttl)
2518 rdatalist.ttl, lctx->maxttl);
2552 result = commit(callbacks, lctx, &head, name,
2573 sizeof(rdlen), lctx->f,
2582 lctx->f, &totallen);
2617 result = commit(callbacks, lctx, &head, name, NULL, 0);
2629 if (result == ISC_R_SUCCESS && lctx->result != ISC_R_SUCCESS) {
2630 result = lctx->result;
2634 (*callbacks->rawdata)(callbacks->zone, &lctx->header);
2665 dns_loadctx_t *lctx = NULL;
2670 &lctx);
2672 lctx->maxttl = maxttl;
2674 result = (lctx->openfile)(lctx, master_file);
2679 result = (lctx->load)(lctx);
2683 dns_loadctx_detach(&lctx);
2689 dns_loadctx_t *lctx = arg;
2690 lctx->result = (lctx->load)(lctx);
2695 dns_loadctx_t *lctx = arg;
2697 (lctx->done)(lctx->done_arg, lctx->result);
2698 dns_loadctx_detach(&lctx);
2711 dns_loadctx_t *lctx = NULL;
2719 &lctx);
2721 lctx->maxttl = maxttl;
2723 result = (lctx->openfile)(lctx, master_file);
2725 dns_loadctx_detach(&lctx);
2729 dns_loadctx_attach(lctx, lctxp);
2730 isc_work_enqueue(loop, load, load_done, lctx);
2740 dns_loadctx_t *lctx = NULL;
2745 origin, callbacks, NULL, NULL, NULL, NULL, NULL, &lctx);
2747 result = isc_lex_openstream(lctx->lex, stream);
2752 result = (lctx->load)(lctx);
2756 dns_loadctx_detach(&lctx);
2765 dns_loadctx_t *lctx = NULL;
2770 origin, callbacks, NULL, NULL, NULL, NULL, NULL, &lctx);
2772 result = isc_lex_openbuffer(lctx->lex, buffer);
2777 result = (lctx->load)(lctx);
2781 dns_loadctx_detach(&lctx);
2895 resign_fromlist(dns_rdatalist_t *this, dns_loadctx_t *lctx) {
2903 if (isc_serial_gt(sig.timesigned, lctx->now)) {
2904 when = lctx->now;
2906 when = sig.timeexpire - lctx->resign;
2912 if (isc_serial_gt(sig.timesigned, lctx->now)) {
2913 when = lctx->now;
2914 } else if (sig.timeexpire - lctx->resign < when) {
2915 when = sig.timeexpire - lctx->resign;
2928 commit(dns_rdatacallbacks_t *callbacks, dns_loadctx_t *lctx,
2948 (lctx->options & DNS_MASTER_RESIGN) != 0)
2951 dataset.resign = resign_fromlist(this, lctx);
2970 if (MANYERRS(lctx, result)) {
2971 SETRESULT(lctx, result);
3021 dns_loadctx_cancel(dns_loadctx_t *lctx) {
3022 REQUIRE(DNS_LCTX_VALID(lctx));
3024 atomic_store_release(&lctx->canceled, true);