summaryrefslogtreecommitdiff
path: root/plugins/imjournal
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2013-05-15 18:11:39 +0200
committerMichael Biebl <biebl@debian.org>2013-05-15 18:11:39 +0200
commit91bc2744cf85809ac50535129ba4a3c4faae081b (patch)
tree9a447d9be1ce5e082e8c964215ad01573bab3b4e /plugins/imjournal
parentd5e3be17e7d29f5464bf8ed0130e92928ad099e8 (diff)
downloadrsyslog-91bc2744cf85809ac50535129ba4a3c4faae081b.tar.gz
Imported Upstream version 7.3.15upstream/7.3.15
Diffstat (limited to 'plugins/imjournal')
-rwxr-xr-x[-rw-r--r--]plugins/imjournal/imjournal.c38
1 files changed, 34 insertions, 4 deletions
diff --git a/plugins/imjournal/imjournal.c b/plugins/imjournal/imjournal.c
index 2af1958..42d3cf6 100644..100755
--- a/plugins/imjournal/imjournal.c
+++ b/plugins/imjournal/imjournal.c
@@ -31,6 +31,7 @@
#include <stdlib.h>
#include <time.h>
#include <sys/socket.h>
+#include <errno.h>
#include "dirty.h"
#include "cfsysline.h"
@@ -139,13 +140,16 @@ readjournal() {
/* Information from messages */
char *message;
+ char *sys_pid;
char *sys_iden;
char *sys_iden_help;
const void *get;
+ const void *pidget;
char *parse;
char *get2;
size_t length;
+ size_t pidlength;
const void *equal_sign;
struct json_object *jval;
@@ -203,7 +207,7 @@ readjournal() {
goto free_message;
}
- /* Get message identifier and add ':' */
+ /* Get message identifier, client pid and add ':' */
if (sd_journal_get_data(j, "SYSLOG_IDENTIFIER", &get, &length) >= 0) {
sys_iden = strndup(get+18, length-18);
} else {
@@ -214,12 +218,30 @@ readjournal() {
goto free_message;
}
- asprintf(&sys_iden_help, "%s:", sys_iden);
+ if (sd_journal_get_data(j, "SYSLOG_PID", &pidget, &pidlength) >= 0) {
+ sys_pid = strndup(pidget+11, pidlength-11);
+ if (sys_pid == NULL) {
+ iRet = RS_RET_OUT_OF_MEMORY;
+ free (sys_iden);
+ goto free_message;
+ }
+ } else {
+ sys_pid = NULL;
+ }
+
+ if (sys_pid) {
+ asprintf(&sys_iden_help, "%s[%s]:", sys_iden, sys_pid);
+ } else {
+ asprintf(&sys_iden_help, "%s:", sys_iden);
+ }
+
+ free (sys_iden);
+ free (sys_pid);
+
if (sys_iden_help == NULL) {
iRet = RS_RET_OUT_OF_MEMORY;
goto finalize_it;
}
- free (sys_iden);
json = json_object_new_object();
@@ -337,7 +359,9 @@ persistJournalState () {
char *cursor;
int ret = 0;
- if ((ret = sd_journal_get_cursor(j, &cursor)) > 0) {
+ /* On success, sd_journal_get_cursor() returns 1 in systemd
+ 197 or older and 0 in systemd 198 or newer */
+ if ((ret = sd_journal_get_cursor(j, &cursor)) >= 0) {
if ((sf = fopen(cs.stateFile, "wb")) != NULL) {
if (fprintf(sf, "%s", cursor) < 0) {
iRet = RS_RET_IO_ERROR;
@@ -345,9 +369,15 @@ persistJournalState () {
fclose(sf);
free(cursor);
} else {
+ char errmsg[256];
+ rs_strerror_r(errno, errmsg, sizeof(errmsg));
+ dbgprintf("fopen() failed: '%s'\n", errmsg);
iRet = RS_RET_FOPEN_FAILURE;
}
} else {
+ char errmsg[256];
+ rs_strerror_r(-(ret), errmsg, sizeof(errmsg));
+ dbgprintf("sd_journal_get_cursor() failed: '%s'\n", errmsg);
iRet = RS_RET_ERR;
}
RETiRet;