# HG changeset patch # User Andre Heinecke # Date 1403172407 -7200 # Node ID 0172740f5c6e4e5ae34e2d6918f33fcc1f67b479 # Parent 2a4f7364ab8150b88e5e4f43604418e4f4f72f48 Include user information in windows event log messages diff -r 2a4f7364ab81 -r 0172740f5c6e common/logging.c --- 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))