Commit f5ae506b authored by Mark Andrews's avatar Mark Andrews

Merge branch '322-add-support-for-marking-options-as-deprecated-v9_11' into 'v9_11'

Resolve "add support for marking options as deprecated."

Closes #322

See merge request !351
parents 4f3526f8 34bfd203
Pipeline #2250 passed with stages
in 6 minutes and 40 seconds
4965. [func] Add support for marking options as deprecated.
[GL #322]
4964. [bug] Reduce the probabilty of double signature when deleting
a DNSKEY by checking if the node is otherwise signed
by the algorithm of the key to be deleted. [GL #240]
......
......@@ -27,6 +27,7 @@
#include <pk11/site.h>
#include <isccfg/grammar.h>
#include <isccfg/namedconf.h>
#include <dns/fixedname.h>
......@@ -307,8 +308,9 @@ ns_config_parsedefaults(cfg_parser_t *parser, cfg_obj_t **conf) {
isc_buffer_init(&b, defaultconf, sizeof(defaultconf) - 1);
isc_buffer_add(&b, sizeof(defaultconf) - 1);
return (cfg_parse_buffer3(parser, &b, __FILE__, 0,
&cfg_type_namedconf, conf));
return (cfg_parse_buffer4(parser, &b, __FILE__, 0,
&cfg_type_namedconf,
CFG_PCTX_NODEPRECATED, conf));
}
isc_result_t
......
......@@ -121,6 +121,11 @@ isc_result_t
cfg_parse_buffer3(cfg_parser_t *pctx, isc_buffer_t *buffer,
const char *file, unsigned int line,
const cfg_type_t *type, cfg_obj_t **ret);
isc_result_t
cfg_parse_buffer4(cfg_parser_t *pctx, isc_buffer_t *buffer,
const char *file, unsigned int line,
const cfg_type_t *type, unsigned int flags,
cfg_obj_t **ret);
/*%<
* Read a configuration containing data of type 'type'
* and make '*ret' point to its parse tree.
......@@ -143,6 +148,7 @@ cfg_parse_buffer3(cfg_parser_t *pctx, isc_buffer_t *buffer,
*\li "mem" is valid.
*\li "type" is valid.
*\li "cfg" is non-NULL and "*cfg" is NULL.
*\li "flags" be one or more of CFG_PCTX_NODEPRECATED or zero.
*
* Returns:
* \li #ISC_R_SUCCESS - success
......
......@@ -52,6 +52,8 @@
/*% A configuration option that is ineffective due to
* compile time options, but is harmless. */
#define CFG_CLAUSEFLAG_NOOP 0x00000200
/*% Clause is obsolete in a future release */
#define CFG_CLAUSEFLAG_DEPRECATED 0x00000400
/*%
* Zone types for which a clause is valid:
......@@ -252,6 +254,7 @@ struct cfg_parser {
/* Parser context flags */
#define CFG_PCTX_SKIP 0x1
#define CFG_PCTX_NODEPRECATED 0x2
/*@{*/
/*%
......
......@@ -615,7 +615,7 @@ isc_result_t
cfg_parse_buffer(cfg_parser_t *pctx, isc_buffer_t *buffer,
const cfg_type_t *type, cfg_obj_t **ret)
{
return (cfg_parse_buffer3(pctx, buffer, NULL, 0, type, ret));
return (cfg_parse_buffer4(pctx, buffer, NULL, 0, type, 0, ret));
}
isc_result_t
......@@ -623,13 +623,22 @@ cfg_parse_buffer2(cfg_parser_t *pctx, isc_buffer_t *buffer,
const char *file, const cfg_type_t *type,
cfg_obj_t **ret)
{
return (cfg_parse_buffer3(pctx, buffer, file, 0, type, ret));
return (cfg_parse_buffer4(pctx, buffer, file, 0, type, 0, ret));
}
isc_result_t
cfg_parse_buffer3(cfg_parser_t *pctx, isc_buffer_t *buffer,
const char *file, unsigned int line,
const cfg_type_t *type, cfg_obj_t **ret)
{
return (cfg_parse_buffer4(pctx, buffer, file, line, type, 0, ret));
}
isc_result_t
cfg_parse_buffer4(cfg_parser_t *pctx, isc_buffer_t *buffer,
const char *file, unsigned int line,
const cfg_type_t *type, unsigned int flags,
cfg_obj_t **ret)
{
isc_result_t result;
......@@ -637,10 +646,12 @@ cfg_parse_buffer3(cfg_parser_t *pctx, isc_buffer_t *buffer,
REQUIRE(type != NULL);
REQUIRE(buffer != NULL);
REQUIRE(ret != NULL && *ret == NULL);
REQUIRE((flags & ~(CFG_PCTX_NODEPRECATED)) == 0);
CHECK(isc_lex_openbuffer(pctx->lexer, buffer));
pctx->buf_name = file;
pctx->flags = flags;
if (line != 0U)
CHECK(isc_lex_setsourceline(pctx->lexer, line));
......@@ -1697,12 +1708,14 @@ cfg_parse_mapbody(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret)
}
done:
if (clause == NULL || clause->name == NULL) {
cfg_parser_error(pctx, CFG_LOG_NOPREP, "unknown option");
cfg_parser_error(pctx, CFG_LOG_NOPREP,
"unknown option");
/*
* Try to recover by parsing this option as an unknown
* option and discarding it.
*/
CHECK(cfg_parse_obj(pctx, &cfg_type_unsupported, &eltobj));
CHECK(cfg_parse_obj(pctx, &cfg_type_unsupported,
&eltobj));
cfg_obj_destroy(pctx, &eltobj);
CHECK(parse_semicolon(pctx));
continue;
......@@ -1711,16 +1724,24 @@ cfg_parse_mapbody(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret)
/* Clause is known. */
/* Issue warnings if appropriate */
if ((clause->flags & CFG_CLAUSEFLAG_OBSOLETE) != 0)
if ((pctx->flags & CFG_PCTX_NODEPRECATED) == 0 &&
(clause->flags & CFG_CLAUSEFLAG_DEPRECATED) != 0)
{
cfg_parser_warning(pctx, 0, "option '%s' is deprecated",
clause->name);
}
if ((clause->flags & CFG_CLAUSEFLAG_OBSOLETE) != 0) {
cfg_parser_warning(pctx, 0, "option '%s' is obsolete",
clause->name);
if ((clause->flags & CFG_CLAUSEFLAG_NOTIMP) != 0)
clause->name);
}
if ((clause->flags & CFG_CLAUSEFLAG_NOTIMP) != 0) {
cfg_parser_warning(pctx, 0, "option '%s' is "
"not implemented", clause->name);
if ((clause->flags & CFG_CLAUSEFLAG_NYI) != 0)
"not implemented", clause->name);
}
if ((clause->flags & CFG_CLAUSEFLAG_NYI) != 0) {
cfg_parser_warning(pctx, 0, "option '%s' is "
"not implemented", clause->name);
"not implemented", clause->name);
}
if ((clause->flags & CFG_CLAUSEFLAG_NOOP) != 0) {
cfg_parser_warning(pctx, 0, "option '%s' was not "
"enabled at compile time "
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment