From 003d9d55ca4760125abc035528ebc6b26ae32fda Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Tue, 23 Jun 2020 17:00:43 +1000 Subject: [PATCH] Resize unamebuf[] to avoid warnings about snprintf() not having enough buffer space. Also change named_os_uname() prototype so that it is now returning (const char *) rather than (char *). If uname() is not supported on a UNIX build prepopulate unamebuf[] with "unknown architecture". (cherry picked from commit 4bc3de070fc9c0bc4d8d15d207e0b1352cd20434) --- bin/named/unix/include/named/os.h | 2 +- bin/named/unix/os.c | 22 ++++++++++++---------- bin/named/win32/include/named/os.h | 2 +- bin/named/win32/os.c | 7 ++++--- 4 files changed, 18 insertions(+), 15 deletions(-) diff --git a/bin/named/unix/include/named/os.h b/bin/named/unix/include/named/os.h index 5415b83b05..15b43d10c7 100644 --- a/bin/named/unix/include/named/os.h +++ b/bin/named/unix/include/named/os.h @@ -73,7 +73,7 @@ ns_os_tzset(void); void ns_os_started(void); -char * +const char * ns_os_uname(void); #endif /* NS_OS_H */ diff --git a/bin/named/unix/os.c b/bin/named/unix/os.c index 150492ffc9..50c8097d2e 100644 --- a/bin/named/unix/os.c +++ b/bin/named/unix/os.c @@ -1089,8 +1089,12 @@ ns_os_tzset(void) { #endif } -static char unamebuf[BUFSIZ]; -static char *unamep = NULL; +#ifdef HAVE_UNAME +static char unamebuf[sizeof(struct utsname)]; +#else +static const char unamebuf[] = { "unknown architecture" }; +#endif +static const char *unamep = NULL; static void getuname(void) { @@ -1103,18 +1107,16 @@ getuname(void) { return; } - snprintf(unamebuf, sizeof(unamebuf), - "%s %s %s %s", - uts.sysname, uts.machine, uts.release, uts.version); -#else - snprintf(unamebuf, sizeof(unamebuf), "unknown architecture"); -#endif + snprintf(unamebuf, sizeof(unamebuf), "%s %s %s %s", uts.sysname, + uts.machine, uts.release, uts.version); +#endif /* ifdef HAVE_UNAME */ unamep = unamebuf; } -char * +const char * ns_os_uname(void) { - if (unamep == NULL) + if (unamep == NULL) { getuname(); + } return (unamep); } diff --git a/bin/named/win32/include/named/os.h b/bin/named/win32/include/named/os.h index cac89a48b2..e478151f11 100644 --- a/bin/named/win32/include/named/os.h +++ b/bin/named/win32/include/named/os.h @@ -70,7 +70,7 @@ ns_os_tzset(void); void ns_os_started(void); -char * +const char * ns_os_uname(void); #endif /* NS_OS_H */ diff --git a/bin/named/win32/os.c b/bin/named/win32/os.c index 34be311b66..e878d2a678 100644 --- a/bin/named/win32/os.c +++ b/bin/named/win32/os.c @@ -392,7 +392,7 @@ ns_os_started(void) { } static char unamebuf[BUFSIZ]; -static char *unamep = NULL; +static const char *unamep = NULL; static void getuname(void) { @@ -461,9 +461,10 @@ getuname(void) { * GetVersionEx() returns 6.2 (aka Windows 8.1) since it was obsoleted * so we had to switch to the recommended way to get the Windows version. */ -char * +const char * ns_os_uname(void) { - if (unamep == NULL) + if (unamep == NULL) { getuname(); + } return (unamep); }