summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Markwalder <tmark@isc.org>2019-06-11 13:38:59 -0400
committerThomas Markwalder <tmark@isc.org>2019-06-12 09:57:33 -0400
commite119ecf6b782253bfc3528e4779481661e2b9bb8 (patch)
treed4e0780ed8cce4b496514c788628a23e344beaef
parent753d458b1f257cc2107454db158e14e92fcecb11 (diff)
downloadisc-dhcp-e119ecf6b782253bfc3528e4779481661e2b9bb8.tar.gz
[#15,!10] Addressed review comments
common/discover.c discover_interfaces() - replaced strncpy with memcpy common/parse.c parse_warn() - added final message buffer rather than reuse mbuf, pass size into do_percentm call includes/dhcpd.h struct interface_info - restored size of name includes/omapip/omapip_p.* do_percentm() - added output buffer size parameter omapip/errwarn.c pass size of output buffer into calls to do_percentm
-rw-r--r--common/discover.c4
-rw-r--r--common/parse.c20
-rw-r--r--includes/dhcpd.h3
-rw-r--r--includes/omapip/omapip_p.h3
-rw-r--r--omapip/errwarn.c17
5 files changed, 29 insertions, 18 deletions
diff --git a/common/discover.c b/common/discover.c
index 6ef88529..226dbc4a 100644
--- a/common/discover.c
+++ b/common/discover.c
@@ -643,7 +643,9 @@ discover_interfaces(int state) {
log_fatal("Error allocating interface %s: %s",
info.name, isc_result_totext(status));
}
- strncpy(tmp->name, info.name, sizeof(tmp->name) - 1);
+
+ memcpy(tmp->name, info.name, sizeof(tmp->name));
+
interface_snorf(tmp, ir);
interface_dereference(&tmp, MDL);
tmp = interfaces; /* XXX */
diff --git a/common/parse.c b/common/parse.c
index 35b0b8de..c0fa4050 100644
--- a/common/parse.c
+++ b/common/parse.c
@@ -5566,19 +5566,25 @@ int parse_warn (struct parse *cfile, const char *fmt, ...)
{
va_list list;
char lexbuf [256];
- char mbuf [1024];
+ char mbuf [1024]; /* errorwarn.c CVT_BUF_MAX + 1 */
char fbuf [2048];
+ char final[4096];
unsigned i, lix;
-
- do_percentm (mbuf, fmt);
+
+ /* Replace %m in fmt with errno error text */
+ do_percentm (mbuf, sizeof(mbuf), fmt);
+
/* %Audit% This is log output. %2004.06.17,Safe%
* If we truncate we hope the user can get a hint from the log.
*/
+
+ /* Prepend the file and line number */
snprintf (fbuf, sizeof fbuf, "%s line %d: %s",
cfile -> tlname, cfile -> lexline, mbuf);
-
+
+ /* Now add the var args to the format for the final log message. */
va_start (list, fmt);
- vsnprintf (mbuf, sizeof mbuf, fbuf, list);
+ vsnprintf (final, sizeof final, fbuf, list);
va_end (list);
lix = 0;
@@ -5594,14 +5600,14 @@ int parse_warn (struct parse *cfile, const char *fmt, ...)
lexbuf [lix] = 0;
#ifndef DEBUG
- syslog (LOG_ERR, "%s", mbuf);
+ syslog (LOG_ERR, "%s", final);
syslog (LOG_ERR, "%s", cfile -> token_line);
if (cfile -> lexchar < 81)
syslog (LOG_ERR, "%s^", lexbuf);
#endif
if (log_perror) {
- IGNORE_RET (write (STDERR_FILENO, mbuf, strlen (mbuf)));
+ IGNORE_RET (write (STDERR_FILENO, final, strlen (final)));
IGNORE_RET (write (STDERR_FILENO, "\n", 1));
IGNORE_RET (write (STDERR_FILENO, cfile -> token_line,
strlen (cfile -> token_line)));
diff --git a/includes/dhcpd.h b/includes/dhcpd.h
index 0ce3d00c..d4c81fc1 100644
--- a/includes/dhcpd.h
+++ b/includes/dhcpd.h
@@ -1392,7 +1392,8 @@ struct interface_info {
interface (if any). */
unsigned remote_id_len; /* Length of Remote ID. */
- char name [IFNAMSIZ+1]; /* Its name... */
+ char name [IFNAMSIZ]; /* Its name... */
+
int index; /* Its if_nametoindex(). */
int rfdesc; /* Its read file descriptor. */
int wfdesc; /* Its write file descriptor, if
diff --git a/includes/omapip/omapip_p.h b/includes/omapip/omapip_p.h
index 7fe1eba5..c92f9420 100644
--- a/includes/omapip/omapip_p.h
+++ b/includes/omapip/omapip_p.h
@@ -288,7 +288,8 @@ int log_info (const char *, ...)
__attribute__((__format__(__printf__,1,2)));
int log_debug (const char *, ...)
__attribute__((__format__(__printf__,1,2)));
-void do_percentm (char *obuf, const char *ibuf);
+
+void do_percentm (char *obuf, size_t obufsize, const char *ibuf);
isc_result_t uerr2isc (int);
isc_result_t ns_rcode_to_isc (int);
diff --git a/omapip/errwarn.c b/omapip/errwarn.c
index e30f8a0d..62e0d5ee 100644
--- a/omapip/errwarn.c
+++ b/omapip/errwarn.c
@@ -54,7 +54,7 @@ void log_fatal (const char * fmt, ... )
{
va_list list;
- do_percentm (fbuf, fmt);
+ do_percentm (fbuf, sizeof(fbuf), fmt);
/* %Audit% This is log output. %2004.06.17,Safe%
* If we truncate we hope the user can get a hint from the log.
@@ -93,7 +93,7 @@ int log_error (const char * fmt, ...)
{
va_list list;
- do_percentm (fbuf, fmt);
+ do_percentm (fbuf, sizeof(fbuf), fmt);
/* %Audit% This is log output. %2004.06.17,Safe%
* If we truncate we hope the user can get a hint from the log.
@@ -120,7 +120,7 @@ int log_info (const char *fmt, ...)
{
va_list list;
- do_percentm (fbuf, fmt);
+ do_percentm (fbuf, sizeof(fbuf), fmt);
/* %Audit% This is log output. %2004.06.17,Safe%
* If we truncate we hope the user can get a hint from the log.
@@ -147,7 +147,7 @@ int log_debug (const char *fmt, ...)
{
va_list list;
- do_percentm (fbuf, fmt);
+ do_percentm (fbuf, sizeof(fbuf), fmt);
/* %Audit% This is log output. %2004.06.17,Safe%
* If we truncate we hope the user can get a hint from the log.
@@ -170,8 +170,9 @@ int log_debug (const char *fmt, ...)
/* Find %m in the input string and substitute an error message string. */
-void do_percentm (obuf, ibuf)
+void do_percentm (obuf, obufsize, ibuf)
char *obuf;
+ size_t obufsize;
const char *ibuf;
{
const char *s = ibuf;
@@ -191,13 +192,13 @@ void do_percentm (obuf, ibuf)
if (!m)
m = "<unknown error>";
len += strlen (m);
- if (len > CVT_BUF_MAX)
+ if (len > obufsize - 1)
goto out;
strcpy (p - 1, m);
p += strlen (p);
++s;
} else {
- if (++len > CVT_BUF_MAX)
+ if (++len > obufsize - 1)
goto out;
*p++ = *s++;
}
@@ -205,7 +206,7 @@ void do_percentm (obuf, ibuf)
} else {
if (*s == '%')
infmt = 1;
- if (++len > CVT_BUF_MAX)
+ if (++len > obufsize - 1)
goto out;
*p++ = *s++;
}