>Number: 4868
>Category: mod_log-any
>Synopsis: Patch for using syslog with CustomLog
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: apache
>State: open
>Class: change-request
>Submitter-Id: apache
>Arrival-Date: Mon Aug 16 16:20:00 PDT 1999
>Last-Modified:
>Originator: [EMAIL PROTECTED]
>Organization:
apache
>Release: 1.3.6
>Environment:
Linux 2.2.11, but should work on any UNIX with syslog
>Description:
Adds the ErrorLog syslog functionality to CustomLog. It's a functional, but
quick and dirty patch.
>How-To-Repeat:
>Fix:
*** mod_log_config.c.old Mon Aug 16 16:05:15 1999
--- mod_log_config.c Mon Aug 16 15:57:06 1999
***************
*** 172,177 ****
--- 172,178 ----
#include "http_config.h"
#include "http_core.h" /* For REMOTE_NAME */
#include "http_log.h"
+ #include "http_conf_globals.h"
#include <limits.h>
module MODULE_VAR_EXPORT config_log_module;
***************
*** 715,721 ****
#ifdef BUFFERED_LOGS
static void flush_log(config_log_state *cls)
{
! if (cls->outcnt && cls->log_fd != -1) {
write(cls->log_fd, cls->outbuf, cls->outcnt);
cls->outcnt = 0;
}
--- 716,722 ----
#ifdef BUFFERED_LOGS
static void flush_log(config_log_state *cls)
{
! if (cls->outcnt && cls->log_fd != -1 && cls->log_fd) {
write(cls->log_fd, cls->outbuf, cls->outcnt);
cls->outcnt = 0;
}
***************
*** 789,795 ****
memcpy(s, strs[i], strl[i]);
s += strl[i];
}
! write(cls->log_fd, str, len);
}
else {
for (i = 0, s = &cls->outbuf[cls->outcnt]; i < format->nelts; ++i) {
--- 790,804 ----
memcpy(s, strs[i], strl[i]);
s += strl[i];
}
! if (cls->log_fd) {
! write(cls->log_fd, str, len);
! }
! #ifdef HAVE_SYSLOG
! else {
! str[len] = '\0';
! syslog(6,"%s",str);
! }
! #endif
}
else {
for (i = 0, s = &cls->outbuf[cls->outcnt]; i < format->nelts; ++i) {
***************
*** 806,812 ****
s += strl[i];
}
! write(cls->log_fd, str, len);
#endif
return OK;
--- 815,829 ----
s += strl[i];
}
! if (cls->log_fd) {
! write(cls->log_fd, str, len);
! }
! #ifdef HAVE_SYSLOG
! else {
! str[len] = '\0';
! syslog(6,"%s",str);
! }
! #endif
#endif
return OK;
***************
*** 970,975 ****
--- 987,1059 ----
{NULL}
};
+ typedef struct {
+ char *t_name;
+ int t_val;
+ } TRANS;
+
+ static const TRANS facilities[] = {
+ {"auth", LOG_AUTH},
+ #ifdef LOG_AUTHPRIV
+ {"authpriv",LOG_AUTHPRIV},
+ #endif
+ #ifdef LOG_CRON
+ {"cron", LOG_CRON},
+ #endif
+ #ifdef LOG_DAEMON
+ {"daemon", LOG_DAEMON},
+ #endif
+ #ifdef LOG_FTP
+ {"ftp", LOG_FTP},
+ #endif
+ #ifdef LOG_KERN
+ {"kern", LOG_KERN},
+ #endif
+ #ifdef LOG_LPR
+ {"lpr", LOG_LPR},
+ #endif
+ #ifdef LOG_MAIL
+ {"mail", LOG_MAIL},
+ #endif
+ #ifdef LOG_NEWS
+ {"news", LOG_NEWS},
+ #endif
+ #ifdef LOG_SYSLOG
+ {"syslog", LOG_SYSLOG},
+ {"syslog", LOG_SYSLOG},
+ #endif
+ #ifdef LOG_USER
+ {"user", LOG_USER},
+ #endif
+ #ifdef LOG_UUCP
+ {"uucp", LOG_UUCP},
+ #endif
+ #ifdef LOG_LOCAL0
+ {"local0", LOG_LOCAL0},
+ #endif
+ #ifdef LOG_LOCAL1
+ {"local1", LOG_LOCAL1},
+ #endif
+ #ifdef LOG_LOCAL2
+ {"local2", LOG_LOCAL2},
+ #endif
+ #ifdef LOG_LOCAL3
+ {"local3", LOG_LOCAL3},
+ #endif
+ #ifdef LOG_LOCAL4
+ {"local4", LOG_LOCAL4},
+ #endif
+ #ifdef LOG_LOCAL5
+ {"local5", LOG_LOCAL5},
+ #endif
+ #ifdef LOG_LOCAL6
+ {"local6", LOG_LOCAL6},
+ #endif
+ #ifdef LOG_LOCAL7
+ {"local7", LOG_LOCAL7},
+ #endif
+ {NULL, -1},
+ };
+
static config_log_state *open_config_log(server_rec *s, pool *p,
config_log_state *cls,
array_header *default_format)
***************
*** 992,1003 ****
--- 1076,1114 ----
cls->log_fd = ap_piped_log_write_fd(pl);
}
else {
+ #ifdef HAVE_SYSLOG
+ if (!strncasecmp(cls->fname, "syslog", 6)) {
+ char *fname = NULL;
+ if ((fname = strchr(cls->fname, ':'))) {
+ const TRANS *fac;
+
+ fname++;
+ for (fac = facilities; fac->t_name; fac++) {
+ if (!strcasecmp(fname, fac->t_name)) {
+ openlog(ap_server_argv0, LOG_NDELAY|LOG_CONS|LOG_PID,
+ fac->t_val);
+ cls->log_fd = 0;
+ return cls;
+ }
+ }
+ return NULL;
+ } else {
+ openlog(ap_server_argv0, LOG_NDELAY|LOG_CONS|LOG_PID,
+ LOG_LOCAL7);
+ cls->log_fd = 0;
+ return cls;
+ }
+ } else {
+ #endif
char *fname = ap_server_root_relative(p, cls->fname);
if ((cls->log_fd = ap_popenf(p, fname, xfer_flags, xfer_mode)) < 0) {
ap_log_error(APLOG_MARK, APLOG_ERR, s,
"could not open transfer log file %s.", fname);
exit(1);
}
+ #ifdef HAVE_SYSLOG
+ }
+ #endif
}
#ifdef BUFFERED_LOGS
cls->outcnt = 0;
>Audit-Trail:
>Unformatted:
[In order for any reply to be added to the PR database, you need]
[to include <[EMAIL PROTECTED]> in the Cc line and make sure the]
[subject line starts with the report component and number, with ]
[or without any 'Re:' prefixes (such as "general/1098:" or ]
["Re: general/1098:"). If the subject doesn't match this ]
[pattern, your message will be misfiled and ignored. The ]
["apbugs" address is not added to the Cc line of messages from ]
[the database automatically because of the potential for mail ]
[loops. If you do not include this Cc, your reply may be ig- ]
[nored unless you are responding to an explicit request from a ]
[developer. Reply only with text; DO NOT SEND ATTACHMENTS! ]