Lines Matching defs:pctx
35 #define TOKEN_STRING(pctx) (pctx->token.value.as_textregion.base)
45 do { if ((obj) != NULL) cfg_obj_destroy(pctx, &(obj)); } while (0)
53 parse_enum_or_other(cfg_parser_t *pctx, const cfg_type_t *enumtype,
57 parse_keyvalue(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret);
60 parse_optional_keyvalue(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret);
63 print_keyvalue(cfg_printer_t *pctx, const cfg_obj_t *obj);
66 doc_keyvalue(cfg_printer_t *pctx, const cfg_type_t *type);
69 doc_optional_keyvalue(cfg_printer_t *pctx, const cfg_type_t *type);
471 print_none(cfg_printer_t *pctx, const cfg_obj_t *obj) {
473 cfg_print_cstr(pctx, "none");
484 parse_qstringornone(cfg_parser_t *pctx, const cfg_type_t *type,
488 CHECK(cfg_gettoken(pctx, CFG_LEXOPT_QSTRING));
489 if (pctx->token.type == isc_tokentype_string &&
490 strcasecmp(TOKEN_STRING(pctx), "none") == 0)
491 return (cfg_create_obj(pctx, &cfg_type_none, ret));
492 cfg_ungettoken(pctx);
493 return (cfg_parse_qstring(pctx, type, ret));
499 doc_qstringornone(cfg_printer_t *pctx, const cfg_type_t *type) {
501 cfg_print_cstr(pctx, "( <quoted_string> | none )");
512 print_hostname(cfg_printer_t *pctx, const cfg_obj_t *obj) {
514 cfg_print_cstr(pctx, "hostname");
526 parse_serverid(cfg_parser_t *pctx, const cfg_type_t *type,
530 CHECK(cfg_gettoken(pctx, CFG_LEXOPT_QSTRING));
531 if (pctx->token.type == isc_tokentype_string &&
532 strcasecmp(TOKEN_STRING(pctx), "none") == 0)
533 return (cfg_create_obj(pctx, &cfg_type_none, ret));
534 if (pctx->token.type == isc_tokentype_string &&
535 strcasecmp(TOKEN_STRING(pctx), "hostname") == 0) {
536 return (cfg_create_obj(pctx, &cfg_type_hostname, ret));
538 cfg_ungettoken(pctx);
539 return (cfg_parse_qstring(pctx, type, ret));
545 doc_serverid(cfg_printer_t *pctx, const cfg_type_t *type) {
547 cfg_print_cstr(pctx, "( <quoted_string> | none | hostname )");
567 parse_port(cfg_parser_t *pctx, cfg_obj_t **ret) {
570 CHECK(cfg_parse_uint32(pctx, NULL, ret));
572 cfg_parser_error(pctx, CFG_LOG_NEAR, "invalid port");
573 cfg_obj_destroy(pctx, ret);
582 parse_portrange(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
588 CHECK(cfg_peektoken(pctx, ISC_LEXOPT_NUMBER | ISC_LEXOPT_CNUMBER));
589 if (pctx->token.type == isc_tokentype_number)
590 CHECK(parse_port(pctx, ret));
592 CHECK(cfg_gettoken(pctx, 0));
593 if (pctx->token.type != isc_tokentype_string ||
594 strcasecmp(TOKEN_STRING(pctx), "range") != 0) {
595 cfg_parser_error(pctx, CFG_LOG_NEAR,
599 CHECK(cfg_create_tuple(pctx, &cfg_type_porttuple, &obj));
600 CHECK(parse_port(pctx, &obj->value.tuple[0]));
601 CHECK(parse_port(pctx, &obj->value.tuple[1]));
604 cfg_parser_error(pctx, CFG_LOG_NOPREP,
617 cfg_obj_destroy(pctx, &obj);
877 parse_optional_uint32(cfg_parser_t *pctx, const cfg_type_t *type,
883 CHECK(cfg_peektoken(pctx, ISC_LEXOPT_NUMBER | ISC_LEXOPT_CNUMBER));
884 if (pctx->token.type == isc_tokentype_number) {
885 CHECK(cfg_parse_obj(pctx, &cfg_type_uint32, ret));
887 CHECK(cfg_parse_obj(pctx, &cfg_type_void, ret));
894 doc_optional_uint32(cfg_printer_t *pctx, const cfg_type_t *type) {
896 cfg_print_cstr(pctx, "[ <integer> ]");
1216 parse_sizeval(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
1223 CHECK(cfg_gettoken(pctx, 0));
1224 if (pctx->token.type != isc_tokentype_string) {
1228 CHECK(parse_unitstring(TOKEN_STRING(pctx), &val));
1230 CHECK(cfg_create_obj(pctx, &cfg_type_uint64, &obj));
1236 cfg_parser_error(pctx, CFG_LOG_NEAR, "expected integer and optional unit");
1252 parse_size(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
1253 return (parse_enum_or_other(pctx, type, &cfg_type_sizeval, ret));
1275 parse_maybe_optional_keyvalue(cfg_parser_t *pctx, const cfg_type_t *type,
1282 CHECK(cfg_peektoken(pctx, 0));
1283 if (pctx->token.type == isc_tokentype_string &&
1284 strcasecmp(TOKEN_STRING(pctx), kw->name) == 0) {
1285 CHECK(cfg_gettoken(pctx, 0));
1286 CHECK(kw->type->parse(pctx, kw->type, &obj));
1290 CHECK(cfg_parse_void(pctx, NULL, &obj));
1292 cfg_parser_error(pctx, CFG_LOG_NEAR, "expected '%s'",
1304 parse_enum_or_other(cfg_parser_t *pctx, const cfg_type_t *enumtype,
1308 CHECK(cfg_peektoken(pctx, 0));
1309 if (pctx->token.type == isc_tokentype_string &&
1310 cfg_is_enum(TOKEN_STRING(pctx), enumtype->of)) {
1311 CHECK(cfg_parse_enum(pctx, enumtype, ret));
1313 CHECK(cfg_parse_obj(pctx, othertype, ret));
1320 doc_enum_or_other(cfg_printer_t *pctx, const cfg_type_t *type) {
1321 cfg_doc_terminal(pctx, type);
1323 cfg_print_chars(pctx, "( ", 2);...
1329 parse_keyvalue(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
1330 return (parse_maybe_optional_keyvalue(pctx, type, ISC_FALSE, ret));
1334 parse_optional_keyvalue(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
1335 return (parse_maybe_optional_keyvalue(pctx, type, ISC_TRUE, ret));
1339 print_keyvalue(cfg_printer_t *pctx, const cfg_obj_t *obj) {
1341 cfg_print_cstr(pctx, kw->name);
1342 cfg_print_chars(pctx, " ", 1);
1343 kw->type->print(pctx, obj);
1347 doc_keyvalue(cfg_printer_t *pctx, const cfg_type_t *type) {
1349 cfg_print_cstr(pctx, kw->name);
1350 cfg_print_chars(pctx, " ", 1);
1351 cfg_doc_obj(pctx, kw->type);
1355 doc_optional_keyvalue(cfg_printer_t *pctx, const cfg_type_t *type) {
1357 cfg_print_chars(pctx, "[ ", 2);
1358 cfg_print_cstr(pctx, kw->name);
1359 cfg_print_chars(pctx, " ", 1);
1360 cfg_doc_obj(pctx, kw->type);
1361 cfg_print_chars(pctx, " ]", 2);
1367 parse_dialup_type(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
1368 return (parse_enum_or_other(pctx, type, &cfg_type_boolean, ret));
1377 parse_notify_type(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
1378 return (parse_enum_or_other(pctx, type, &cfg_type_boolean, ret));
1387 parse_ixfrdiff_type(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
1388 return (parse_enum_or_other(pctx, type, &cfg_type_boolean, ret));
1504 doc_optional_bracketed_list(cfg_printer_t *pctx, const cfg_type_t *type) {
1506 cfg_print_chars(pctx, "[ ", 2);
1507 cfg_print_cstr(pctx, kw->name);
1508 cfg_print_chars(pctx, " ", 1);
1509 cfg_doc_obj(pctx, kw->type);
1510 cfg_print_chars(pctx, " ]", 2);
1550 parse_optional_class(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
1553 CHECK(cfg_peektoken(pctx, 0));
1554 if (pctx->token.type == isc_tokentype_string)
1555 CHECK(cfg_parse_obj(pctx, &cfg_type_ustring, ret));
1557 CHECK(cfg_parse_obj(pctx, &cfg_type_void, ret));
1568 parse_querysource(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
1587 CHECK(cfg_peektoken(pctx, 0));
1588 if (pctx->token.type == isc_tokentype_string) {
1589 if (strcasecmp(TOKEN_STRING(pctx),
1593 CHECK(cfg_gettoken(pctx, 0));
1594 CHECK(cfg_parse_rawaddr(pctx, *flagp,
1597 } else if (strcasecmp(TOKEN_STRING(pctx), "port") == 0)
1600 CHECK(cfg_gettoken(pctx, 0));
1601 CHECK(cfg_parse_rawport(pctx,
1606 return (cfg_parse_sockaddr(pctx, type, ret));
1608 cfg_parser_error(pctx, CFG_LOG_NEAR,
1617 cfg_parser_error(pctx, 0, "expected one address and/or port");
1621 CHECK(cfg_create_obj(pctx, &cfg_type_querysource, &obj));
1627 cfg_parser_error(pctx, CFG_LOG_NEAR, "invalid query source");
1633 print_querysource(cfg_printer_t *pctx, const cfg_obj_t *obj) {
1636 cfg_print_cstr(pctx, "address ");
1637 cfg_print_rawaddr(pctx, &na);
1638 cfg_print_cstr(pctx, " port ");
1639 cfg_print_rawuint(pctx, isc_sockaddr_getport(&obj->value.sockaddr));
1662 parse_addrmatchelt(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
1666 CHECK(cfg_peektoken(pctx, CFG_LEXOPT_QSTRING));
1668 if (pctx->token.type == isc_tokentype_string ||
1669 pctx->token.type == isc_tokentype_qstring) {
1670 if (pctx->token.type == isc_tokentype_string &&
1671 (strcasecmp(TOKEN_STRING(pctx), "key") == 0)) {
1672 CHECK(cfg_parse_obj(pctx, &cfg_type_keyref, ret));
1674 if (cfg_lookingat_netaddr(pctx, CFG_ADDR_V4OK |
1678 CHECK(cfg_parse_netprefix(pctx, NULL, ret));
1680 CHECK(cfg_parse_astring(pctx, NULL, ret));
1683 } else if (pctx->token.type == isc_tokentype_special) {
1684 if (pctx->token.value.as_char == '{') {
1686 CHECK(cfg_parse_obj(pctx, &cfg_type_bracketed_aml, ret));
1687 } else if (pctx->token.value.as_char == '!') {
1688 CHECK(cfg_gettoken(pctx, 0)); /* read "!" */
1689 CHECK(cfg_parse_obj(pctx, &cfg_type_negated, ret));
1695 cfg_parser_error(pctx, CFG_LOG_NEAR,
1715 print_negated(cfg_printer_t *pctx, const cfg_obj_t *obj) {
1716 cfg_print_chars(pctx, "!", 1);
1717 cfg_print_tuple(pctx, obj);
1756 parse_server_key_kludge(cfg_parser_t *pctx, const cfg_type_t *type,
1764 CHECK(cfg_peektoken(pctx, 0));
1765 if (pctx->token.type == isc_tokentype_special &&
1766 pctx->token.value.as_char == '{') {
1767 CHECK(cfg_gettoken(pctx, 0));
1771 CHECK(cfg_parse_obj(pctx, &cfg_type_astring, ret));
1775 CHECK(cfg_peektoken(pctx, 0));
1776 if (pctx->token.type == isc_tokentype_special &&
1777 pctx->token.value.as_char == ';')
1778 CHECK(cfg_gettoken(pctx, 0));
1780 CHECK(cfg_parse_special(pctx, '}'));
1796 parse_optional_facility(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret)
1801 CHECK(cfg_peektoken(pctx, CFG_LEXOPT_QSTRING));
1802 if (pctx->token.type == isc_tokentype_string ||
1803 pctx->token.type == isc_tokentype_qstring) {
1804 CHECK(cfg_parse_obj(pctx, &cfg_type_astring, ret));
1806 CHECK(cfg_parse_obj(pctx, &cfg_type_void, ret));
1830 parse_logseverity(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
1834 CHECK(cfg_peektoken(pctx, 0));
1835 if (pctx->token.type == isc_tokentype_string &&
1836 strcasecmp(TOKEN_STRING(pctx), "debug") == 0) {
1837 CHECK(cfg_gettoken(pctx, 0)); /* read "debug" */
1838 CHECK(cfg_peektoken(pctx, ISC_LEXOPT_NUMBER));
1839 if (pctx->token.type == isc_tokentype_number) {
1840 CHECK(cfg_parse_uint32(pctx, NULL, ret));
1847 CHECK(cfg_create_obj(pctx, &cfg_type_uint32, ret));
1852 CHECK(cfg_parse_obj(pctx, &cfg_type_loglevel, ret));
1869 parse_logversions(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
1870 return (parse_enum_or_other(pctx, type, &cfg_type_uint32, ret));
1886 parse_logfile(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
1891 CHECK(cfg_create_tuple(pctx, type, &obj));
1894 CHECK(cfg_parse_obj(pctx, fields[0].type, &obj->value.tuple[0]));
1898 CHECK(cfg_peektoken(pctx, 0));
1899 if (pctx->token.type == isc_tokentype_string) {
1900 CHECK(cfg_gettoken(pctx, 0));
1901 if (strcasecmp(TOKEN_STRING(pctx),
1904 CHECK(cfg_parse_obj(pctx, fields[1].type,
1906 } else if (strcasecmp(TOKEN_STRING(pctx),
1909 CHECK(cfg_parse_obj(pctx, fields[2].type,
1921 CHECK(cfg_parse_void(pctx, NULL, &obj->value.tuple[1]));
1923 CHECK(cfg_parse_void(pctx, NULL, &obj->value.tuple[2]));
1934 print_logfile(cfg_printer_t *pctx, const cfg_obj_t *obj) {
1935 cfg_print_obj(pctx, obj->value.tuple[0]); /* file */
1937 cfg_print_cstr(pctx, " versions ");
1938 cfg_print_obj(pctx, obj->value.tuple[1]);
1941 cfg_print_cstr(pctx, " size ");
1942 cfg_print_obj(pctx, obj->value.tuple[2]);
1948 doc_logfile(cfg_printer_t *pctx, const cfg_type_t *type) {
1950 cfg_print_cstr(pctx, "<quoted_string>");
1951 cfg_print_chars(pctx, " ", 1);
1952 cfg_print_cstr(pctx, "[ versions ( \"unlimited\" | <integer> ) ]");
1953 cfg_print_chars(pctx, " ", 1);
1954 cfg_print_cstr(pctx, "[ size <size> ]");
2104 doc_sockaddrnameport(cfg_printer_t *pctx, const cfg_type_t *type) {
2106 cfg_print_chars(pctx, "( ", 2);
2107 cfg_print_cstr(pctx, "<quoted_string>");
2108 cfg_print_chars(pctx, " ", 1);
2109 cfg_print_cstr(pctx, "[ port <integer> ]");
2110 cfg_print_chars(pctx, " | ", 3);
2111 cfg_print_cstr(pctx, "<ipv4_address>");
2112 cfg_print_chars(pctx, " ", 1);
2113 cfg_print_cstr(pctx, "[ port <integer> ]");
2114 cfg_print_chars(pctx, " | ", 3);
2115 cfg_print_cstr(pctx, "<ipv6_address>");
2116 cfg_print_chars(pctx, " ", 1);
2117 cfg_print_cstr(pctx, "[ port <integer> ]");
2118 cfg_print_chars(pctx, " )", 2);
2122 parse_sockaddrnameport(cfg_parser_t *pctx, const cfg_type_t *type,
2129 CHECK(cfg_peektoken(pctx, CFG_LEXOPT_QSTRING));
2130 if (pctx->token.type == isc_tokentype_string ||
2131 pctx->token.type == isc_tokentype_qstring) {
2132 if (cfg_lookingat_netaddr(pctx, CFG_ADDR_V4OK | CFG_ADDR_V6OK))
2133 CHECK(cfg_parse_sockaddr(pctx, &cfg_type_sockaddr, ret));
2137 CHECK(cfg_create_tuple(pctx, &cfg_type_nameport,
2139 CHECK(cfg_parse_obj(pctx, fields[0].type,
2141 CHECK(cfg_parse_obj(pctx, fields[1].type,
2147 cfg_parser_error(pctx, CFG_LOG_NEAR,
2188 doc_masterselement(cfg_printer_t *pctx, const cfg_type_t *type) {
2190 cfg_print_chars(pctx, "( ", 2);
2191 cfg_print_cstr(pctx, "<masters>");
2192 cfg_print_chars(pctx, " | ", 3);
2193 cfg_print_cstr(pctx, "<ipv4_address>");
2194 cfg_print_chars(pctx, " ", 1);
2195 cfg_print_cstr(pctx, "[ port <integer> ]");
2196 cfg_print_chars(pctx, " | ", 3);
2197 cfg_print_cstr(pctx, "<ipv6_address>");
2198 cfg_print_chars(pctx, " ", 1);
2199 cfg_print_cstr(pctx, "[ port <integer> ]");
2200 cfg_print_chars(pctx, " )", 2);
2204 parse_masterselement(cfg_parser_t *pctx, const cfg_type_t *type,
2211 CHECK(cfg_peektoken(pctx, CFG_LEXOPT_QSTRING));
2212 if (pctx->token.type == isc_tokentype_string ||
2213 pctx->token.type == isc_tokentype_qstring) {
2214 if (cfg_lookingat_netaddr(pctx, CFG_ADDR_V4OK | CFG_ADDR_V6OK))
2215 CHECK(cfg_parse_sockaddr(pctx, &cfg_type_sockaddr, ret));
2217 CHECK(cfg_parse_astring(pctx, &cfg_type_astring, ret));
2219 cfg_parser_error(pctx, CFG_LOG_NEAR,