Take in account @bmiklautz remarks
authorDavid FORT <contact@hardening-consulting.com>
Sun, 1 Nov 2015 20:34:03 +0000 (21:34 +0100)
committerDavid FORT <contact@hardening-consulting.com>
Sun, 1 Nov 2015 20:34:03 +0000 (21:34 +0100)
* I have added a function to set the journal identifier
* the appender name has been changed from SYSTEMD to JOURNALD

winpr/include/winpr/wlog.h
winpr/libwinpr/utils/wlog/JournaldAppender.c
winpr/libwinpr/utils/wlog/JournaldAppender.h
winpr/libwinpr/utils/wlog/wlog.c

index 6e86f08..7ac9dd0 100644 (file)
@@ -205,14 +205,13 @@ struct _wLogSyslogAppender
 };
 typedef struct _wLogSyslogAppender wLogSyslogAppender;
 
-#ifdef HAVE_JOURNALD_H
 struct _wLogJournaldAppender
 {
        WLOG_APPENDER_COMMON();
+       char *identifier;
        FILE *stream;
 };
 typedef struct _wLogJournaldAppender wLogJournaldAppender;
-#endif
 
 
 /**
index 7975357..4b84230 100644 (file)
 #include "wlog/Message.h"
 #include "wlog/JournaldAppender.h"
 
+BOOL Wlog_JournaldAppender_SetIdentifier(wLogJournaldAppender* appender, const char *id)
+{
+       if (appender->identifier)
+               free(appender->identifier);
+
+       if (appender->stream)
+       {
+               fclose(appender->stream);
+               appender->stream = NULL;
+       }
+
+       return ((appender->identifier = _strdup(id)) != NULL);
+}
 
 static BOOL WLog_JournaldAppender_Open(wLog* log, wLogJournaldAppender* appender)
 {
+       int fd;
+
        if (!log || !appender)
                return FALSE;
 
+       if (appender->stream)
+               return TRUE;
+
+       fd = sd_journal_stream_fd(appender->identifier, LOG_INFO, 1);
+       if (fd < 0)
+               return FALSE;
+
+       appender->stream = fdopen(fd, "w");
+       if (!appender->stream)
+       {
+               close(fd);
+               return FALSE;
+       }
+
+       setbuffer(appender->stream, NULL, 0);
        return TRUE;
 }
 
@@ -109,9 +139,7 @@ wLogJournaldAppender* WLog_JournaldAppender_New(wLog* log)
 {
        wLogJournaldAppender* appender;
        DWORD nSize;
-       LPSTR env = NULL;
        LPCSTR name;
-       int fd;
 
        appender = (wLogJournaldAppender*) calloc(1, sizeof(wLogJournaldAppender));
        if (!appender)
@@ -132,32 +160,26 @@ wLogJournaldAppender* WLog_JournaldAppender_New(wLog* log)
        nSize = GetEnvironmentVariableA(name, NULL, 0);
        if (nSize)
        {
-               env = (LPSTR) malloc(nSize);
-               if (!env)
+               appender->identifier = (LPSTR) malloc(nSize);
+               if (!appender->identifier)
                        goto error_env_malloc;
 
-               GetEnvironmentVariableA(name, env, nSize);
+               GetEnvironmentVariableA(name, appender->identifier, nSize);
+
+               if (!WLog_JournaldAppender_Open(log, appender))
+                       goto error_open;
        }
        else
        {
-               env = _strdup("winpr");
+               appender->identifier = _strdup("winpr");
+               if (!appender->identifier)
+                       goto error_env_malloc;
        }
 
-       fd = sd_journal_stream_fd(env, LOG_INFO, 1);
-       if (fd < 0)
-               goto error_journal_fd;
-
-       appender->stream = fdopen(fd, "w");
-       if (!appender->stream)
-               goto error_stream_open;
-       setbuffer(appender->stream, NULL, 0);
-       free(env);
        return appender;
 
-error_stream_open:
-       close(fd);
-error_journal_fd:
-       free(env);
+error_open:
+       free(appender->identifier);
 error_env_malloc:
        free(appender);
        return NULL;
@@ -169,6 +191,7 @@ void WLog_JournaldAppender_Free(wLog* log, wLogJournaldAppender* appender)
        {
                if (appender->stream)
                        fclose(appender->stream);
+               free(appender->identifier);
                free(appender);
        }
 }
index f3606eb..9f2072d 100644 (file)
@@ -30,6 +30,7 @@
 
 WINPR_API wLogJournaldAppender* WLog_JournaldAppender_New(wLog* log);
 WINPR_API void WLog_JournaldAppender_Free(wLog* log, wLogJournaldAppender* appender);
+WINPR_API BOOL Wlog_JournaldAppender_SetIdentifier(wLogJournaldAppender* appender, const char *id);
 
 
 #endif /* WINPR_LIBWINPR_UTILS_WLOG_JOURNALDAPPENDER_H_ */
index 06bfa3c..7dc6208 100644 (file)
@@ -703,7 +703,7 @@ wLog* WLog_GetRoot()
                                logAppenderType = WLOG_APPENDER_SYSLOG;
 #endif /* HAVE_SYSLOG_H */
 #ifdef HAVE_JOURNALD_H
-                       else if (_stricmp(env, "SYSTEMD") == 0)
+                       else if (_stricmp(env, "JOURNALD") == 0)
                                logAppenderType = WLOG_APPENDER_JOURNALD;
 #endif