Follow-up to a47abfd, fix logged PID reported by external logger tool

Issue #344

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg committed 2023-03-21 11:24:17 +01:00
1 parent 5340e47e81
commit 1d03e9aa8b
1 file changed
+8 -7
+8 -7
View File
@@ -243,9 +243,12 @@ static void fallback_logger(char *ident, char *prio)
static int lredirect(svc_t *svc) static int lredirect(svc_t *svc)
{ {
static int have_sysklogd = -1; static int have_sysklogd = -1;
pid_t pid; pid_t pid, svc_pid;
int fd; int fd;
svc_pid = getpid();
dbg("%s pid: %d", svc_ident(svc, NULL, 0), svc_pid);
/* /*
* Open PTY to connect to logger. A pty isn't buffered * Open PTY to connect to logger. A pty isn't buffered
* like a pipe, and it eats newlines so they aren't logged * like a pipe, and it eats newlines so they aren't logged
@@ -268,21 +271,19 @@ static int lredirect(svc_t *svc)
if (have_sysklogd == -1) { if (have_sysklogd == -1) {
FILE *pp; FILE *pp;
have_sysklogd = 0;
pp = popen("logger -h 2>/dev/null", "r"); pp = popen("logger -h 2>/dev/null", "r");
if (pp) { if (pp) {
char buf[128]; char buf[128];
have_sysklogd = 0;
while (fgets(buf, sizeof(buf), pp)) { while (fgets(buf, sizeof(buf), pp)) {
if (strstr(buf, "-I PID")) { if (strstr(buf, "-I PID")) {
have_sysklogd = 1; have_sysklogd = 1;
break; break;
} }
} }
pclose(pp); pclose(pp);
} else {
have_sysklogd = 0;
} }
} }
@@ -318,7 +319,7 @@ static int lredirect(svc_t *svc)
char rot[25], pid[16]; char rot[25], pid[16];
snprintf(rot, sizeof(rot), "%d:%d", logfile_size_max, logfile_count_max); snprintf(rot, sizeof(rot), "%d:%d", logfile_size_max, logfile_count_max);
snprintf(pid, sizeof(pid), "%d", getppid()); snprintf(pid, sizeof(pid), "%d", svc_pid);
execlp("logger", "logger", "-f", svc->log.file, "-b", "-t", tag, "-p", prio, "-I", pid, "-r", rot, NULL); execlp("logger", "logger", "-f", svc->log.file, "-b", "-t", tag, "-p", prio, "-I", pid, "-r", rot, NULL);
} else { } else {
char sz[20], num[3]; char sz[20], num[3];
@@ -339,7 +340,7 @@ static int lredirect(svc_t *svc)
if (have_sysklogd) { if (have_sysklogd) {
char pid[16]; char pid[16];
snprintf(pid, sizeof(pid), "%d", getppid()); snprintf(pid, sizeof(pid), "%d", svc_pid);
execlp("logger", "logger", "-t", tag, "-p", prio, "-I", pid, NULL); execlp("logger", "logger", "-t", tag, "-p", prio, "-I", pid, NULL);
} else { } else {
execlp(_PATH_LOGIT, "logit", "-t", tag, "-p", prio, NULL); execlp(_PATH_LOGIT, "logit", "-t", tag, "-p", prio, NULL);