diff common/logging.c @ 616:0172740f5c6e

Include user information in windows event log messages
author Andre Heinecke <andre.heinecke@intevation.de>
date Thu, 19 Jun 2014 12:06:47 +0200
parents 2a4f7364ab81
children bc02ee484067
line wrap: on
line diff
--- a/common/logging.c	Thu Jun 19 11:53:07 2014 +0200
+++ b/common/logging.c	Thu Jun 19 12:06:47 2014 +0200
@@ -25,12 +25,15 @@
 static void
 win_log(const char *format, va_list ap, bool error)
 {
-  HANDLE log_src = NULL;
+  HANDLE log_src = NULL,
+         process_token = NULL;
   wchar_t *wmsg = NULL;
   BOOL failure = TRUE;
   WORD type = 0,
        category = 0;
   char buffer[MAX_LOG+1];
+  PTOKEN_USER user_struct = NULL;
+  PSID user_sid = NULL;
 
   vsnprintf (buffer, MAX_LOG, format, ap);
   buffer[MAX_LOG] = '\0';
@@ -59,11 +62,29 @@
       goto done;
     }
 
+  /* Get the current user sid for logging */
+
+  OpenProcessToken (GetCurrentProcess(), TOKEN_READ, &process_token);
+  if (process_token)
+    {
+      DWORD size = 0;
+
+      // check how much space is needed
+      GetTokenInformation (process_token, TokenUser, NULL, 0, &size);
+      if (ERROR_INSUFFICIENT_BUFFER == GetLastError())
+        {
+          user_struct = xmalloc (size);
+          GetTokenInformation (process_token, TokenUser, user_struct, size, &size);
+          user_sid = user_struct->User.Sid;
+        }
+    }
+
+
   failure = ReportEventW (log_src,
                           type,
                           category,
                           0,
-                          NULL,
+                          user_sid,
                           1,
                           0,
                           (const WCHAR **) &wmsg,
@@ -74,6 +95,11 @@
     }
 
 done:
+  if (process_token)
+    {
+      CloseHandle(process_token);
+    }
+  xfree (user_struct);
   xfree (wmsg);
 
   if (!DeregisterEventSource (log_src))

http://wald.intevation.org/projects/trustbridge/