diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 index 8d34908..6dee5a4 100644 --- a/man/dnsmasq.8 +++ b/man/dnsmasq.8 @@ -135,6 +135,9 @@ running, will go exclusively to the file.) When logging to a file, dnsmasq will close and reopen the file when it receives SIGUSR2. This allows the log file to be rotated without stopping dnsmasq. .TP +.B --log-debug +Enable extra logging intended for debugging rather than information. +.TP .B --log-async[=] Enable asynchronous logging and optionally set the limit on the number of lines diff --git a/src/dnsmasq.h b/src/dnsmasq.h index 1c680e3..e201b7a 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -269,7 +269,8 @@ struct event_desc { #define OPT_IGNORE_CLID 59 #define OPT_SINGLE_PORT 60 #define OPT_LEASE_RENEW 61 -#define OPT_LAST 62 +#define OPT_LOG_DEBUG 62 +#define OPT_LAST 63 #define OPTION_BITS (sizeof(unsigned int)*8) #define OPTION_SIZE ( (OPT_LAST/OPTION_BITS)+((OPT_LAST%OPTION_BITS)!=0) ) @@ -277,11 +278,13 @@ struct event_desc { #define option_val(x) ((1u) << ((x) % OPTION_BITS)) #define option_bool(x) (option_var(x) & option_val(x)) -/* extra flags for my_syslog, we use a couple of facilities since they are known - not to occupy the same bits as priorities, no matter how syslog.h is set up. */ +/* extra flags for my_syslog, we use facilities since they are known + not to occupy the same bits as priorities, no matter how syslog.h is set up. + MS_DEBUG messages are suppressed unless --log-debug is set. */ #define MS_TFTP LOG_USER #define MS_DHCP LOG_DAEMON #define MS_SCRIPT LOG_MAIL +#define MS_DEBUG LOG_NEWS /* Note that this is used widely as a container for IPv4/IPv6 addresses, so for that reason, was well as to avoid wasting memory in almost every diff --git a/src/log.c b/src/log.c index 0f6f88f..1ec3447 100644 --- a/src/log.c +++ b/src/log.c @@ -273,7 +273,7 @@ static void log_write(void) /* priority is one of LOG_DEBUG, LOG_INFO, LOG_NOTICE, etc. See sys/syslog.h. OR'd to priority can be MS_TFTP, MS_DHCP, ... to be able to do log separation between DNS, DHCP and TFTP services. -*/ + If OR'd with MS_DEBUG, the messages are suppressed unless --log-debug is set. */ void my_syslog(int priority, const char *format, ...) { va_list ap; @@ -290,7 +290,13 @@ void my_syslog(int priority, const char *format, ...) func = "-dhcp"; else if ((LOG_FACMASK & priority) == MS_SCRIPT) func = "-script"; - + else if ((LOG_FACMASK & priority) == MS_DEBUG) + { + if (!option_bool(OPT_LOG_DEBUG)) + return; + func = "-debug"; + } + #ifdef LOG_PRI priority = LOG_PRI(priority); #else diff --git a/src/option.c b/src/option.c index 5b8b2ed..bfda212 100644 --- a/src/option.c +++ b/src/option.c @@ -169,6 +169,7 @@ struct myoption { #define LOPT_SCRIPT_TIME 360 #define LOPT_PXE_VENDOR 361 #define LOPT_DYNHOST 362 +#define LOPT_LOG_DEBUG 363 #ifdef HAVE_GETOPT_LONG static const struct option opts[] = @@ -343,6 +344,7 @@ static const struct myoption opts[] = { "dumpmask", 1, 0, LOPT_DUMPMASK }, { "dhcp-ignore-clid", 0, 0, LOPT_IGNORE_CLID }, { "dynamic-host", 1, 0, LOPT_DYNHOST }, + { "log-debug", 0, 0, LOPT_LOG_DEBUG }, { NULL, 0, 0, 0 } }; @@ -515,6 +517,7 @@ static struct { { LOPT_QUIET_DHCP, OPT_QUIET_DHCP, NULL, gettext_noop("Do not log routine DHCP."), NULL }, { LOPT_QUIET_DHCP6, OPT_QUIET_DHCP6, NULL, gettext_noop("Do not log routine DHCPv6."), NULL }, { LOPT_QUIET_RA, OPT_QUIET_RA, NULL, gettext_noop("Do not log RA."), NULL }, + { LOPT_LOG_DEBUG, OPT_LOG_DEBUG, NULL, gettext_noop("Log debugging information."), NULL }, { LOPT_LOCAL_SERVICE, OPT_LOCAL_SERVICE, NULL, gettext_noop("Accept queries only from directly-connected networks."), NULL }, { LOPT_LOOP_DETECT, OPT_LOOP_DETECT, NULL, gettext_noop("Detect and remove DNS forwarding loops."), NULL }, { LOPT_IGNORE_ADDR, ARG_DUP, "", gettext_noop("Ignore DNS responses containing ipaddr."), NULL },