[PATCH] log-identity: new option to control logging name.
W.C.A. Wijngaards
wouter at nlnetlabs.nl
Thu Nov 3 08:54:57 UTC 2016
Hi Robin,
Thank you for the patch, I have applied it to the source.
Best regards, Wouter
On 03/11/16 01:10, robbat2--- via Unbound-users wrote:
> From: "Robin H. Johnson" <robbat2 at gentoo.org>
>
> Add an option to control the log identity of unbound instances.
>
> This is primarily useful on systems that run more than one instance of
> unbound, with different configurations, so that the logs can be easily
> distinguished against.
>
> Signed-off-by: Robin H. Johnson <robbat2 at gentoo.org>
> ---
> daemon/unbound.c | 29 ++++++++++++++++++++++-------
> doc/example.conf.in | 6 +++++-
> util/config_file.c | 3 +++
> util/config_file.h | 2 ++
> util/configlexer.lex | 1 +
> util/configparser.y | 11 ++++++++++-
> 6 files changed, 43 insertions(+), 9 deletions(-)
>
> diff --git a/daemon/unbound.c b/daemon/unbound.c
> index 88fbb6f..0a0cf80 100644
> --- a/daemon/unbound.c
> +++ b/daemon/unbound.c
> @@ -244,10 +244,21 @@ checkrlimits(struct config_file* cfg)
> #endif /* S_SPLINT_S */
> }
>
> +/** set default logfile identity based on value from argv[0] at startup **/
> +static void
> +log_ident_set_fromdefault(struct config_file* cfg,
> + const char *log_default_identity)
> +{
> + if(strncmp(cfg->log_identity, "", strlen(cfg->log_identity)) == 0)
> + log_ident_set(log_default_identity);
> + else
> + log_ident_set(cfg->log_identity);
> +}
> +
> /** set verbosity, check rlimits, cache settings */
> static void
> apply_settings(struct daemon* daemon, struct config_file* cfg,
> - int cmdline_verbose, int debug_mode)
> + int cmdline_verbose, int debug_mode, const char* log_default_identity)
> {
> /* apply if they have changed */
> verbosity = cmdline_verbose + cfg->verbosity;
> @@ -258,6 +269,7 @@ apply_settings(struct daemon* daemon, struct config_file* cfg,
> }
> daemon_apply_cfg(daemon, cfg);
> checkrlimits(cfg);
> + log_ident_set_fromdefault(cfg, log_default_identity);
> }
>
> #ifdef HAVE_KILL
> @@ -587,9 +599,10 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode,
> * @param cmdline_verbose: verbosity resulting from commandline -v.
> * These increase verbosity as specified in the config file.
> * @param debug_mode: if set, do not daemonize.
> + * @param log_default_identity: Default identity to report in logs
> */
> static void
> -run_daemon(const char* cfgfile, int cmdline_verbose, int debug_mode)
> +run_daemon(const char* cfgfile, int cmdline_verbose, int debug_mode, const char* log_default_identity)
> {
> struct config_file* cfg = NULL;
> struct daemon* daemon = NULL;
> @@ -611,7 +624,7 @@ run_daemon(const char* cfgfile, int cmdline_verbose, int debug_mode)
> cfgfile);
> log_warn("Continuing with default config settings");
> }
> - apply_settings(daemon, cfg, cmdline_verbose, debug_mode);
> + apply_settings(daemon, cfg, cmdline_verbose, debug_mode, log_default_identity);
> if(!done_setup)
> config_lookup_uid(cfg);
>
> @@ -619,7 +632,7 @@ run_daemon(const char* cfgfile, int cmdline_verbose, int debug_mode)
> if(!daemon_open_shared_ports(daemon))
> fatal_exit("could not open ports");
> if(!done_setup) {
> - perform_setup(daemon, cfg, debug_mode, &cfgfile);
> + perform_setup(daemon, cfg, debug_mode, &cfgfile);
> done_setup = 1;
> } else {
> /* reopen log after HUP to facilitate log rotation */
> @@ -666,6 +679,7 @@ main(int argc, char* argv[])
> int c;
> const char* cfgfile = CONFIGFILE;
> const char* winopt = NULL;
> + const char* log_ident_default;
> int cmdline_verbose = 0;
> int debug_mode = 0;
> #ifdef UB_ON_WINDOWS
> @@ -678,7 +692,8 @@ main(int argc, char* argv[])
> #endif
>
> log_init(NULL, 0, NULL);
> - log_ident_set(strrchr(argv[0],'/')?strrchr(argv[0],'/')+1:argv[0]);
> + log_ident_default = strrchr(argv[0],'/')?strrchr(argv[0],'/')+1:argv[0];
> + log_ident_set(log_ident_default);
> /* parse the options */
> while( (c=getopt(argc, argv, "c:dhvw:")) != -1) {
> switch(c) {
> @@ -711,7 +726,7 @@ main(int argc, char* argv[])
> if(winopt) {
> #ifdef UB_ON_WINDOWS
> wsvc_command_option(winopt, cfgfile, cmdline_verbose,
> - cmdline_cfg);
> + cmdline_cfg, log_ident_default);
> #else
> fatal_exit("option not supported");
> #endif
> @@ -722,7 +737,7 @@ main(int argc, char* argv[])
> return 1;
> }
>
> - run_daemon(cfgfile, cmdline_verbose, debug_mode);
> + run_daemon(cfgfile, cmdline_verbose, debug_mode, log_ident_default);
> log_init(NULL, 0, NULL); /* close logfile */
> return 0;
> }
> diff --git a/doc/example.conf.in b/doc/example.conf.in
> index 9c097aa..2e47701 100644
> --- a/doc/example.conf.in
> +++ b/doc/example.conf.in
> @@ -275,9 +275,13 @@ server:
> # logfile: ""
>
> # Log to syslog(3) if yes. The log facility LOG_DAEMON is used to
> - # log to, with identity "unbound". If yes, it overrides the logfile.
> + # log to. If yes, it overrides the logfile.
> # use-syslog: yes
>
> + # Log identity to report. if empty, defaults to the name of argv[0]
> + # (usually "unbound").
> + # log-identity: ""
> +
> # print UTC timestamp in ascii to logfile, default is epoch in seconds.
> # log-time-ascii: no
>
> diff --git a/util/config_file.c b/util/config_file.c
> index 7c668ba..e798700 100644
> --- a/util/config_file.c
> +++ b/util/config_file.c
> @@ -105,6 +105,7 @@ config_create(void)
> cfg->ssl_port = 853;
> cfg->ssl_upstream = 0;
> cfg->use_syslog = 1;
> + cfg->log_identity = strdup(""); /* changed later with argv[0] */
> cfg->log_time_ascii = 0;
> cfg->log_queries = 0;
> #ifndef USE_WINSOCK
> @@ -370,6 +371,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
> log_set_time_asc(cfg->log_time_ascii); }
> else S_SIZET_NONZERO("max-udp-size:", max_udp_size)
> else S_YNO("use-syslog:", use_syslog)
> + else S_STR("log-identity:", log_identity)
> else S_YNO("extended-statistics:", stat_extended)
> else S_YNO("statistics-cumulative:", stat_cumulative)
> else S_YNO("do-ip4:", do_ip4)
> @@ -680,6 +682,7 @@ config_get_option(struct config_file* cfg, const char* opt,
> else O_YNO(opt, "statistics-cumulative", stat_cumulative)
> else O_YNO(opt, "extended-statistics", stat_extended)
> else O_YNO(opt, "use-syslog", use_syslog)
> + else O_STR(opt, "log-identity", log_identity)
> else O_YNO(opt, "log-time-ascii", log_time_ascii)
> else O_DEC(opt, "num-threads", num_threads)
> else O_IFC(opt, "interface", num_ifs, ifs)
> diff --git a/util/config_file.h b/util/config_file.h
> index 4499ac3..bf518d1 100644
> --- a/util/config_file.h
> +++ b/util/config_file.h
> @@ -229,6 +229,8 @@ struct config_file {
> int log_time_ascii;
> /** log queries with one line per query */
> int log_queries;
> + /** log identity to report */
> + char* log_identity;
>
> /** do not report identity (id.server, hostname.bind) */
> int hide_identity;
> diff --git a/util/configlexer.lex b/util/configlexer.lex
> index 35b7ecb..074ccf5 100644
> --- a/util/configlexer.lex
> +++ b/util/configlexer.lex
> @@ -328,6 +328,7 @@ del-holddown{COLON} { YDVAR(1, VAR_DEL_HOLDDOWN) }
> keep-missing{COLON} { YDVAR(1, VAR_KEEP_MISSING) }
> permit-small-holddown{COLON} { YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
> use-syslog{COLON} { YDVAR(1, VAR_USE_SYSLOG) }
> +log-identity{COLON} { YDVAR(1, VAR_LOG_IDENTITY) }
> log-time-ascii{COLON} { YDVAR(1, VAR_LOG_TIME_ASCII) }
> log-queries{COLON} { YDVAR(1, VAR_LOG_QUERIES) }
> local-zone{COLON} { YDVAR(2, VAR_LOCAL_ZONE) }
> diff --git a/util/configparser.y b/util/configparser.y
> index 6ac12b5..2a3df28 100644
> --- a/util/configparser.y
> +++ b/util/configparser.y
> @@ -130,6 +130,7 @@ extern struct config_parser_state* cfg_parser;
> %token VAR_LOCAL_ZONE_OVERRIDE VAR_ACCESS_CONTROL_TAG_ACTION
> %token VAR_ACCESS_CONTROL_TAG_DATA VAR_VIEW VAR_ACCESS_CONTROL_VIEW
> %token VAR_VIEW_FIRST VAR_SERVE_EXPIRED VAR_FAKE_DSA
> +%token VAR_LOG_IDENTITY
>
> %%
> toplevelvars: /* empty */ | toplevelvars toplevelvar ;
> @@ -204,7 +205,7 @@ content_server: server_num_threads | server_verbosity | server_port |
> server_local_zone_override | server_access_control_tag_action |
> server_access_control_tag_data | server_access_control_view |
> server_qname_minimisation_strict | server_serve_expired |
> - server_fake_dsa
> + server_fake_dsa | server_log_identity
> ;
> stubstart: VAR_STUB_ZONE
> {
> @@ -1909,6 +1910,14 @@ server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG
> (strcmp($2, "yes")==0);
> free($2);
> }
> + ;
> +server_log_identity: VAR_LOG_IDENTITY STRING_ARG
> + {
> + OUTYY(("P(server_log_identity:%s)\n", $2));
> + free(cfg_parser->cfg->log_identity);
> + cfg_parser->cfg->log_identity = $2;
> + }
> + ;
> %%
>
> /* parse helper routines could be here */
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://lists.nlnetlabs.nl/pipermail/unbound-users/attachments/20161103/2987db3f/attachment.bin>
More information about the Unbound-users
mailing list