git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix listing a named queue by a non-admin user. Bug 2398
[exim.git]
/
src
/
exim_monitor
/
em_log.c
diff --git
a/src/exim_monitor/em_log.c
b/src/exim_monitor/em_log.c
index 5f0f9b29d9a3c70d83f4e3d34d3e680f7486d514..52eef6b2096ff8b994c31ed8ed424fcbc2f90c3e 100644
(file)
--- a/
src/exim_monitor/em_log.c
+++ b/
src/exim_monitor/em_log.c
@@
-1,13
+1,11
@@
-/* $Cambridge: exim/src/exim_monitor/em_log.c,v 1.1 2004/10/07 10:39:01 ph10 Exp $ */
-
/*************************************************
* Exim Monitor *
*************************************************/
/*************************************************
* Exim Monitor *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 20
04
*/
+/* Copyright (c) University of Cambridge 1995 - 20
18
*/
/* See the file NOTICE for conditions of use and distribution. */
/* See the file NOTICE for conditions of use and distribution. */
-/* This module contains code for scanning the
smaill
log,
+/* This module contains code for scanning the
main
log,
extracting information from it, and displaying a "tail". */
#include "em_hdr.h"
extracting information from it, and displaying a "tail". */
#include "em_hdr.h"
@@
-58,6
+56,8
@@
static int scrolled = FALSE;
static int size = 0;
static int top = 0;
static int size = 0;
static int top = 0;
+static void show_log(char *s, ...) PRINTF_FUNCTION(1,2);
+
static void show_log(char *s, ...)
{
int length, newtop;
static void show_log(char *s, ...)
{
int length, newtop;
@@
-217,7
+217,11
@@
uschar buffer[log_buffer_len];
if (LOG != NULL)
{
if (LOG != NULL)
{
- fseek(LOG, log_position, SEEK_SET);
+ if (fseek(LOG, log_position, SEEK_SET))
+ {
+ perror("logfile fseek");
+ exit(1);
+ }
while (Ufgets(buffer, log_buffer_len, LOG) != NULL)
{
while (Ufgets(buffer, log_buffer_len, LOG) != NULL)
{
@@
-250,14
+254,20
@@
if (LOG != NULL)
}
/* Munge the log entry and display shortened form on one line.
}
/* Munge the log entry and display shortened form on one line.
- We omit the date and show only the time. Remove any time zone offset. */
+ We omit the date and show only the time. Remove any time zone offset.
+ Take note of the presence of [pid]. */
if (pcre_exec(yyyymmdd_regex,NULL,CS buffer,length,0,PCRE_EOPT,NULL,0) >= 0)
{
if (pcre_exec(yyyymmdd_regex,NULL,CS buffer,length,0,PCRE_EOPT,NULL,0) >= 0)
{
+ int pidlength = 0;
if ((buffer[20] == '+' || buffer[20] == '-') &&
isdigit(buffer[21]) && buffer[25] == ' ')
memmove(buffer + 20, buffer + 26, Ustrlen(buffer + 26) + 1);
if ((buffer[20] == '+' || buffer[20] == '-') &&
isdigit(buffer[21]) && buffer[25] == ' ')
memmove(buffer + 20, buffer + 26, Ustrlen(buffer + 26) + 1);
- id = string_copyn(buffer + 20, MESSAGE_ID_LENGTH);
+ if (buffer[20] == '[')
+ {
+ while (Ustrchr("[]0123456789", buffer[20+pidlength++]) != NULL);
+ }
+ id = string_copyn(buffer + 20 + pidlength, MESSAGE_ID_LENGTH);
show_log("%s", buffer+11);
}
else
show_log("%s", buffer+11);
}
else
@@
-271,12
+281,8
@@
if (LOG != NULL)
if (strstric(buffer, US"frozen", FALSE) != NULL)
{
queue_item *qq = find_queue(id, queue_noop, 0);
if (strstric(buffer, US"frozen", FALSE) != NULL)
{
queue_item *qq = find_queue(id, queue_noop, 0);
- if (qq != NULL)
- {
- if (strstric(buffer, US"unfrozen", FALSE) != NULL)
- qq->frozen = FALSE;
- else qq->frozen = TRUE;
- }
+ if (qq)
+ qq->frozen = strstric(buffer, US"unfrozen", FALSE) == NULL;
}
/* Notice defer messages, and add the destination if it
}
/* Notice defer messages, and add the destination if it
@@
-358,6
+364,8
@@
link count of zero on the currently open file. */
if (log_datestamping)
{
uschar log_file_wanted[256];
if (log_datestamping)
{
uschar log_file_wanted[256];
+ /* Do *not* use "%s" here, we need the %D datestamp in the log_file to
+ * be expanded! */
string_format(log_file_wanted, sizeof(log_file_wanted), CS log_file);
if (Ustrcmp(log_file_wanted, log_file_open) != 0)
{
string_format(log_file_wanted, sizeof(log_file_wanted), CS log_file);
if (Ustrcmp(log_file_wanted, log_file_open) != 0)
{
@@
-385,7
+393,11
@@
if (LOG == NULL ||
{
if (LOG != NULL) fclose(LOG);
LOG = TEST;
{
if (LOG != NULL) fclose(LOG);
LOG = TEST;
- fstat(fileno(LOG), &statdata);
+ if (fstat(fileno(LOG), &statdata))
+ {
+ fprintf(stderr, "fstat %s: %s\n", log_file_open, strerror(errno));
+ exit(1);
+ }
log_inode = statdata.st_ino;
}
}
log_inode = statdata.st_ino;
}
}