projects
/
srvx.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Convert time-related variables to consistently use "unsigned long".
[srvx.git]
/
src
/
log.c
diff --git
a/src/log.c
b/src/log.c
index 35309792b249a959a65ec598b7dfd83559ef9abe..7368fbe0373615d53320b3d3c9ab31cbef50e219 100644
(file)
--- a/
src/log.c
+++ b/
src/log.c
@@
-1,11
+1,12
@@
/* log.c - Diagnostic and error logging
* Copyright 2000-2004 srvx Development Team
*
/* log.c - Diagnostic and error logging
* Copyright 2000-2004 srvx Development Team
*
- * This program is free software; you can redistribute it and/or modify
+ * This file is part of srvx.
+ *
+ * srvx is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version. Important limitations are
- * listed in the COPYING file that accompanies this software.
+ * (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@@
-13,7
+14,8
@@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, email srvx-maintainers@srvx.net.
+ * along with srvx; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
#include "conf.h"
*/
#include "conf.h"
@@
-242,7
+244,7
@@
find_severity(const char *text)
* KEY := LOGSET '.' SEVSET
* LOGSET := LOGLIT | LOGLIT ',' LOGSET
* LOGLIT := a registered log type
* KEY := LOGSET '.' SEVSET
* LOGSET := LOGLIT | LOGLIT ',' LOGSET
* LOGLIT := a registered log type
- * SEVSET := '*' | SEVLIT | '<' SEVLIT | '<=' SEVLIT | '>' SEVLIT | '>=' SEVLIT | SEVLI
G
',' SEVSET
+ * SEVSET := '*' | SEVLIT | '<' SEVLIT | '<=' SEVLIT | '>' SEVLIT | '>=' SEVLIT | SEVLI
T
',' SEVSET
* SEVLIT := one of log_severity_names
* A KEY contains the Cartesian product of the logs in its LOGSET
* and the severities in its SEVSET.
* SEVLIT := one of log_severity_names
* A KEY contains the Cartesian product of the logs in its LOGSET
* and the severities in its SEVSET.
@@
-271,7
+273,8
@@
log_parse_sevset(char *buffer, char targets[LOG_NUM_SEVERITIES])
int first;
cont = strchr(buffer, ',');
int first;
cont = strchr(buffer, ',');
- if (cont) *cont++ = 0;
+ if (cont)
+ *cont++ = 0;
if (buffer[0] == '*' && buffer[1] == 0) {
for (bound = 0; bound < LOG_NUM_SEVERITIES; bound++) {
/* make people explicitly specify replay targets */
if (buffer[0] == '*' && buffer[1] == 0) {
for (bound = 0; bound < LOG_NUM_SEVERITIES; bound++) {
/* make people explicitly specify replay targets */
@@
-303,6
+306,8
@@
log_parse_sevset(char *buffer, char targets[LOG_NUM_SEVERITIES])
}
}
} else {
}
}
} else {
+ if (buffer[0] == '=')
+ buffer++;
bound = find_severity(buffer);
targets[bound] = 1;
}
bound = find_severity(buffer);
targets[bound] = 1;
}
@@
-367,7
+372,8
@@
log_conf_read(void)
for (ii = 0; ii < slist->used; ++ii) {
type = log_register_type(slist->list[ii], NULL);
for (sev = 0; sev < LOG_NUM_SEVERITIES; ++sev) {
for (ii = 0; ii < slist->used; ++ii) {
type = log_register_type(slist->list[ii], NULL);
for (sev = 0; sev < LOG_NUM_SEVERITIES; ++sev) {
- if (!sevset[sev]) continue;
+ if (!sevset[sev])
+ continue;
logList_join(&type->logs[sev], &logList);
}
}
logList_join(&type->logs[sev], &logList);
}
}
@@
-521,7
+527,7
@@
log_audit(struct log_type *type, enum log_severity sev, struct userNode *user, s
/* remove old elements from the linked list */
while (type->log_count > type->max_count)
log_type_free_oldest(type);
/* remove old elements from the linked list */
while (type->log_count > type->max_count)
log_type_free_oldest(type);
- while (type->log_oldest && (type->log_oldest->time + type->max_age <
(unsigned long)
now))
+ while (type->log_oldest && (type->log_oldest->time + type->max_age < now))
log_type_free_oldest(type);
if (type->log_oldest)
type->log_oldest->prev = 0;
log_type_free_oldest(type);
if (type->log_oldest)
type->log_oldest->prev = 0;
@@
-561,6
+567,8
@@
log_module(struct log_type *type, enum log_severity sev, const char *format, ...
unsigned int ii;
va_list args;
unsigned int ii;
va_list args;
+ if (!type)
+ return;
if (sev > LOG_FATAL) {
log_module(MAIN_LOG, LOG_ERROR, "Illegal log_module severity %d", sev);
return;
if (sev > LOG_FATAL) {
log_module(MAIN_LOG, LOG_ERROR, "Illegal log_module severity %d", sev);
return;
@@
-581,6
+589,10
@@
log_module(struct log_type *type, enum log_severity sev, const char *format, ...
/* Special behavior before we start full operation */
fprintf(stderr, "%s: %s\n", log_severity_names[sev], msgbuf);
}
/* Special behavior before we start full operation */
fprintf(stderr, "%s: %s\n", log_severity_names[sev], msgbuf);
}
+ if (sev == LOG_FATAL) {
+ assert(0 && "fatal message logged");
+ _exit(1);
+ }
}
/* audit log searching */
}
/* audit log searching */
@@
-594,8
+606,8
@@
log_discrim_create(struct userNode *service, struct userNode *user, unsigned int
/* Assume all criteria require arguments. */
if((argc - 1) % 2)
{
/* Assume all criteria require arguments. */
if((argc - 1) % 2)
{
- send_message(user, service, "MSG_MISSING_PARAMS", argv[0]);
- return NULL;
+
send_message(user, service, "MSG_MISSING_PARAMS", argv[0]);
+
return NULL;
}
discrim = malloc(sizeof(struct logSearch));
}
discrim = malloc(sizeof(struct logSearch));
@@
-638,7
+650,7
@@
log_discrim_create(struct userNode *service, struct userNode *user, unsigned int
else
discrim->max_time = now - (ParseInterval(cmp+1) - 1);
} else {
else
discrim->max_time = now - (ParseInterval(cmp+1) - 1);
} else {
- discrim->min_time = now - ParseInterval(cmp
+2
);
+ discrim->min_time = now - ParseInterval(cmp);
}
} else if (!irccasecmp(argv[ii], "limit")) {
discrim->limit = strtoul(argv[++ii], NULL, 10);
}
} else if (!irccasecmp(argv[ii], "limit")) {
discrim->limit = strtoul(argv[++ii], NULL, 10);
@@
-662,10
+674,10
@@
log_discrim_create(struct userNode *service, struct userNode *user, unsigned int
send_message(user, service, "MSG_INVALID_FACILITY", argv[ii]);
goto fail;
}
send_message(user, service, "MSG_INVALID_FACILITY", argv[ii]);
goto fail;
}
- } else {
- send_message(user, service, "MSG_INVALID_CRITERIA", argv[ii]);
- goto fail;
- }
+
} else {
+
send_message(user, service, "MSG_INVALID_CRITERIA", argv[ii]);
+
goto fail;
+
}
}
return discrim;
}
return discrim;
@@
-695,7
+707,7
@@
entry_match(struct logSearch *discrim, struct logEntry *entry)
&& !match_ircglob(entry->user_hostmask, discrim->masks.user_hostmask))
|| (discrim->masks.command
&& !match_ircglob(entry->command, discrim->masks.command))) {
&& !match_ircglob(entry->user_hostmask, discrim->masks.user_hostmask))
|| (discrim->masks.command
&& !match_ircglob(entry->command, discrim->masks.command))) {
- return 0;
+
return 0;
}
return 1;
}
}
return 1;
}
@@
-713,9
+725,13
@@
log_entry_search(struct logSearch *discrim, entry_search_func esf, void *data)
unsigned int matched = 0;
if (discrim->type) {
unsigned int matched = 0;
if (discrim->type) {
+ static volatile struct logEntry *last;
struct logEntry *entry;
struct logEntry *entry;
- for (entry = discrim->type->log_oldest; entry; entry = entry->next) {
+ for (entry = discrim->type->log_oldest, last = NULL;
+ entry;
+ last = entry, entry = entry->next) {
+ verify(entry);
if (entry_match(discrim, entry)) {
esf(entry, data);
if (++matched >= discrim->limit)
if (entry_match(discrim, entry)) {
esf(entry, data);
if (++matched >= discrim->limit)
@@
-737,10
+753,12
@@
log_entry_search(struct logSearch *discrim, entry_search_func esf, void *data)
/* generic helper functions */
static void
/* generic helper functions */
static void
-log_format_timestamp(
time_t
when, struct string_buffer *sbuf)
+log_format_timestamp(
unsigned long
when, struct string_buffer *sbuf)
{
struct tm local;
{
struct tm local;
- localtime_r(&when, &local);
+ time_t feh;
+ feh = when;
+ localtime_r(&feh, &local);
if (sbuf->size < 24) {
sbuf->size = 24;
free(sbuf->list);
if (sbuf->size < 24) {
sbuf->size = 24;
free(sbuf->list);