summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2014-07-31 10:18:59 +0200
committerMichael Adam <obnox@samba.org>2014-07-31 18:49:47 +0200
commit0a3d14248473be3d964d50b75b92a6328b8f82cd (patch)
tree0ee44394c5df9bc595a5dc0a55ef3249806489d9 /lib
parent6bbf9fa6df11dd60e6a808cf2e81b88c4e211a90 (diff)
downloadsamba-0a3d14248473be3d964d50b75b92a6328b8f82cd.tar.gz
uwrap: Add a better logging function.
Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Michael Adam <obnox@samba.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/uid_wrapper/uid_wrapper.c75
1 files changed, 67 insertions, 8 deletions
diff --git a/lib/uid_wrapper/uid_wrapper.c b/lib/uid_wrapper/uid_wrapper.c
index 2b8723840a0..eec6d967423 100644
--- a/lib/uid_wrapper/uid_wrapper.c
+++ b/lib/uid_wrapper/uid_wrapper.c
@@ -56,12 +56,6 @@
#define PRINTF_ATTRIBUTE(a,b)
#endif /* HAVE_FUNCTION_ATTRIBUTE_FORMAT */
-#ifdef NDEBUG
-#define UWRAP_DEBUG(...)
-#else
-#define UWRAP_DEBUG(...) fprintf(stderr, __VA_ARGS__)
-#endif
-
#define UWRAP_DLIST_ADD(list,item) do { \
if (!(list)) { \
(item)->prev = NULL; \
@@ -97,6 +91,70 @@
#define SAFE_FREE(x) do { if ((x) != NULL) {free(x); (x)=NULL;} } while(0)
#endif
+/*****************
+ * LOGGING
+ *****************/
+
+enum uwrap_dbglvl_e {
+ UWRAP_LOG_ERROR = 0,
+ UWRAP_LOG_WARN,
+ UWRAP_LOG_DEBUG,
+ UWRAP_LOG_TRACE
+};
+
+#ifdef NDEBUG
+# define UWRAP_LOG(...)
+#else /* NDEBUG */
+static void uwrap_log(enum uwrap_dbglvl_e dbglvl, const char *format, ...) PRINTF_ATTRIBUTE(2, 3);
+# define UWRAP_LOG(dbglvl, ...) uwrap_log((dbglvl), __VA_ARGS__)
+
+static void uwrap_log(enum uwrap_dbglvl_e dbglvl, const char *format, ...)
+{
+ char buffer[1024];
+ va_list va;
+ const char *d;
+ unsigned int lvl = 0;
+
+ d = getenv("UID_WRAPPER_DEBUGLEVEL");
+ if (d != NULL) {
+ lvl = atoi(d);
+ }
+
+ va_start(va, format);
+ vsnprintf(buffer, sizeof(buffer), format, va);
+ va_end(va);
+
+ if (lvl >= dbglvl) {
+ switch (dbglvl) {
+ case UWRAP_LOG_ERROR:
+ fprintf(stderr,
+ "UWRAP_ERROR(%d): %s\n",
+ (int)getpid(), buffer);
+ break;
+ case UWRAP_LOG_WARN:
+ fprintf(stderr,
+ "UWRAP_WARN(%d): %s\n",
+ (int)getpid(), buffer);
+ break;
+ case UWRAP_LOG_DEBUG:
+ fprintf(stderr,
+ "UWRAP_DEBUG(%d): %s\n",
+ (int)getpid(), buffer);
+ break;
+ case UWRAP_LOG_TRACE:
+ fprintf(stderr,
+ "UWRAP_TRACE(%d): %s\n",
+ (int)getpid(), buffer);
+ break;
+ }
+ }
+}
+#endif /* NDEBUG */
+
+/*****************
+ * LIBC
+ *****************/
+
#define LIBC_NAME "libc.so"
struct uwrap_libc_fns {
@@ -1117,8 +1175,9 @@ static long int uwrap_syscall (long int sysno, va_list vp)
}
break;
default:
- UWRAP_DEBUG("UID_WRAPPER calling non-wrapped syscall "
- "%lu\n", sysno);
+ UWRAP_LOG(UWRAP_LOG_DEBUG,
+ "UID_WRAPPER calling non-wrapped syscall %lu\n",
+ sysno);
rc = libc_vsyscall(sysno, vp);
break;