rwrap: improve logging messages by including getprogname()
authorStefan Metzmacher <metze@samba.org>
Wed, 11 Mar 2020 16:12:22 +0000 (17:12 +0100)
committerAndreas Schneider <asn@samba.org>
Thu, 19 Mar 2020 16:12:41 +0000 (17:12 +0100)
This it basically the same as used in socket_wrapper.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
ConfigureChecks.cmake
config.h.cmake
src/CMakeLists.txt
src/resolv_wrapper.c

index ae817d9eb32e274e17128449749edd2dead79098..ae9437bd92fa53029190a4a1b16b86b69061532f 100644 (file)
@@ -44,7 +44,17 @@ check_include_file(sys/types.h HAVE_SYS_TYPES_H)
 check_include_file(resolv.h HAVE_RESOLV_H)
 check_include_file(arpa/nameser.h HAVE_ARPA_NAMESER_H)
 
+# SYMBOLS
+set(CMAKE_REQUIRED_FLAGS -D_GNU_SOURCE)
+check_symbol_exists(program_invocation_short_name
+                    "errno.h"
+                    HAVE_PROGRAM_INVOCATION_SHORT_NAME)
+unset(CMAKE_REQUIRED_FLAGS)
+
 # FUNCTIONS
+check_function_exists(getprogname HAVE_GETPROGNAME)
+check_function_exists(getexecname HAVE_GETEXECNAME)
+
 find_library(RESOLV_LIRBRARY resolv)
 if (RESOLV_LIRBRARY)
     set(HAVE_LIBRESOLV TRUE)
index 6ff75a6b330ef1cddc728c6c0a200389f178fc77..0c2fa35a1a41863997b87798049bf06164b4e6ec 100644 (file)
 #cmakedefine HAVE_RESOLV_H 1
 #cmakedefine HAVE_ARPA_NAMESER_H 1
 
+/**************************** SYMBOLS ****************************/
+
+#cmakedefine HAVE_PROGRAM_INVOCATION_SHORT_NAME 1
+
 /*************************** FUNCTIONS ***************************/
 
+#cmakedefine HAVE_GETPROGNAME 1
+#cmakedefine HAVE_GETEXECNAME 1
+
 #cmakedefine HAVE_RES_INIT 1
 #cmakedefine HAVE___RES_INIT 1
 
index 04d5395aa2dd6210a9d1dcb332bd281ef4c4760a..42e9f424759993a5cd6f5e60e5199945d213331f 100644 (file)
@@ -5,7 +5,8 @@ target_link_libraries(resolv_wrapper ${RWRAP_REQUIRED_LIBRARIES})
 
 target_compile_options(resolv_wrapper
                        PRIVATE
-                           ${DEFAULT_C_COMPILE_FLAGS})
+                           ${DEFAULT_C_COMPILE_FLAGS}
+                          -D_GNU_SOURCE)
 target_include_directories(resolv_wrapper
                            PRIVATE ${CMAKE_BINARY_DIR})
 
index c88893ef9ec432c3ca641efba7433ddfec321ed5..cbca24864343a679c4f85c7e0fb63a7e36ffe1c0 100644 (file)
@@ -83,6 +83,19 @@ enum rwrap_dbglvl_e {
        RWRAP_LOG_TRACE
 };
 
+#ifndef HAVE_GETPROGNAME
+static const char *getprogname(void)
+{
+#if defined(HAVE_PROGRAM_INVOCATION_SHORT_NAME)
+       return program_invocation_short_name;
+#elif defined(HAVE_GETEXECNAME)
+       return getexecname();
+#else
+       return NULL;
+#endif /* HAVE_PROGRAM_INVOCATION_SHORT_NAME */
+}
+#endif /* HAVE_GETPROGNAME */
+
 static void rwrap_log(enum rwrap_dbglvl_e dbglvl, const char *func, const char *format, ...) PRINTF_ATTRIBUTE(3, 4);
 # define RWRAP_LOG(dbglvl, ...) rwrap_log((dbglvl), __func__, __VA_ARGS__)
 
@@ -94,8 +107,8 @@ static void rwrap_log(enum rwrap_dbglvl_e dbglvl,
        va_list va;
        const char *d;
        unsigned int lvl = 0;
-       int pid = getpid();
        const char *prefix = NULL;
+       const char *progname = NULL;
 
        d = getenv("RESOLV_WRAPPER_DEBUGLEVEL");
        if (d != NULL) {
@@ -128,10 +141,16 @@ static void rwrap_log(enum rwrap_dbglvl_e dbglvl,
                        break;
        }
 
+       progname = getprogname();
+       if (progname == NULL) {
+               progname = "<unknown>";
+       }
+
        fprintf(stderr,
-               "%s(%d) - %s: %s\n",
+               "%s[%s (%u)] - %s: %s\n",
                prefix,
-               pid,
+               progname,
+               (unsigned int)getpid(),
                func,
                buffer);
 }