The branch, master has been updated
       via  80932d7 uwrap: Add logging if uwrap is enabled correctly.
       via  a4d3db5 uwrap: Log error if we are out of memory.
       via  135582e uwrap: Add a better logging function.
       via  334c562 cmake: Check for HAVE_FUNCTION_ATTRIBUTE_FORMAT.
      from  690da04 uwrap: Fall back to RTLD_NEXT if we can't find libc.

http://gitweb.samba.org/?p=uid_wrapper.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 80932d786bdf8ce6f8e4fb1f6b09f1252caba302
Author: Andreas Schneider <a...@samba.org>
Date:   Fri May 30 15:52:19 2014 +0200

    uwrap: Add logging if uwrap is enabled correctly.
    
    Signed-off-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Michael Adam <ob...@samba.org>

commit a4d3db55d723048ad07e76a3365b7500ad3262a5
Author: Andreas Schneider <a...@samba.org>
Date:   Fri May 30 15:52:00 2014 +0200

    uwrap: Log error if we are out of memory.
    
    Signed-off-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Michael Adam <ob...@samba.org>

commit 135582e8e9230ae0bfb0f99e3e549ec9e29c8183
Author: Andreas Schneider <a...@samba.org>
Date:   Fri May 30 15:44:39 2014 +0200

    uwrap: Add a better logging function.
    
    Signed-off-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Michael Adam <ob...@samba.org>

commit 334c562f100fb0bd007ee5461e0fef299ff768b4
Author: Andreas Schneider <a...@samba.org>
Date:   Fri May 30 15:59:17 2014 +0200

    cmake: Check for HAVE_FUNCTION_ATTRIBUTE_FORMAT.
    
    Signed-off-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Michael Adam <ob...@samba.org>

-----------------------------------------------------------------------

Summary of changes:
 ConfigureChecks.cmake |    7 ++++
 config.h.cmake        |    1 +
 src/uid_wrapper.c     |   88 +++++++++++++++++++++++++++++++++++++++++++++---
 3 files changed, 90 insertions(+), 6 deletions(-)


Changeset truncated at 500 lines:

diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake
index 123128f..899d905 100644
--- a/ConfigureChecks.cmake
+++ b/ConfigureChecks.cmake
@@ -143,6 +143,13 @@ int main(void) {
     return 0;
 }" HAVE_DESTRUCTOR_ATTRIBUTE)
 
+check_c_source_compiles("
+void log_fn(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
+
+int main(void) {
+    return 0;
+}" HAVE_FUNCTION_ATTRIBUTE_FORMAT)
+
 # SYSTEM LIBRARIES
 
 check_library_exists(dl dlopen "" HAVE_LIBDL)
diff --git a/config.h.cmake b/config.h.cmake
index 0e67b23..840b5d4 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -58,6 +58,7 @@
 
 #cmakedefine HAVE_GCC_THREAD_LOCAL_STORAGE 1
 #cmakedefine HAVE_DESTRUCTOR_ATTRIBUTE 1
+#cmakedefine HAVE_FUNCTION_ATTRIBUTE_FORMAT 1
 
 /*************************** ENDIAN *****************************/
 
diff --git a/src/uid_wrapper.c b/src/uid_wrapper.c
index e9c7d5a..f53aa47 100644
--- a/src/uid_wrapper.c
+++ b/src/uid_wrapper.c
@@ -49,11 +49,12 @@
 #define DESTRUCTOR_ATTRIBUTE
 #endif /* HAVE_DESTRUCTOR_ATTRIBUTE */
 
-#ifdef NDEBUG
-#define UWRAP_DEBUG(...)
+/* GCC have printf type attribute check. */
+#ifdef HAVE_FUNCTION_ATTRIBUTE_FORMAT
+#define PRINTF_ATTRIBUTE(a,b) __attribute__ ((__format__ (__printf__, a, b)))
 #else
-#define UWRAP_DEBUG(...) fprintf(stderr, __VA_ARGS__)
-#endif
+#define PRINTF_ATTRIBUTE(a,b)
+#endif /* HAVE_FUNCTION_ATTRIBUTE_FORMAT */
 
 #define UWRAP_DLIST_ADD(list,item) do { \
        if (!(list)) { \
@@ -90,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 {
@@ -425,12 +490,14 @@ static int uwrap_new_id(pthread_t tid, bool do_alloc)
        if (do_alloc) {
                id = malloc(sizeof(struct uwrap_thread));
                if (id == NULL) {
+                       UWRAP_LOG(UWRAP_LOG_ERROR, "Unable to allocate memory");
                        errno = ENOMEM;
                        return -1;
                }
 
                id->groups = malloc(sizeof(gid_t) * 1);
                if (id->groups == NULL) {
+                       UWRAP_LOG(UWRAP_LOG_ERROR, "Unable to allocate memory");
                        SAFE_FREE(id);
                        errno = ENOMEM;
                        return -1;
@@ -511,6 +578,8 @@ static void uwrap_init(void)
                return;
        }
 
+       UWRAP_LOG(UWRAP_LOG_DEBUG, "Initialize uid_wrapper");
+
        /*
         * If we hold a lock and the application forks, then the child
         * is not able to unlock the mutex and we are in a deadlock.
@@ -544,9 +613,15 @@ static void uwrap_init(void)
                }
 
                uwrap.enabled = true;
+
+               UWRAP_LOG(UWRAP_LOG_DEBUG,
+                         "Enabled uid_wrapper as %s",
+                         uwrap.myuid == 0 ? "root" : "user");
        }
 
        pthread_mutex_unlock(&uwrap_id_mutex);
+
+       UWRAP_LOG(UWRAP_LOG_DEBUG, "Succeccfully initialized uid_wrapper");
 }
 
 bool uid_wrapper_enabled(void)
@@ -1110,8 +1185,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;


-- 
UID Wrapper Repository

Reply via email to