summaryrefslogtreecommitdiffstatsabout
diff options
context:
space:
mode:
authorEdward Rudd <urkle@outoforder.cc>2004-01-20 16:27:35 (GMT)
committer Edward Rudd <urkle@outoforder.cc>2004-01-20 16:27:35 (GMT)
commit40f0c8fe04858acd724d6221dbf8a357259e5d6b (patch)
treec3effb1a7fa38e47152417830ab1c7480bddf703
parent417afc1671669fc9ba79410546c6ddfe242f2f4a (diff)
split out version specific code
code compiles under apache 1.3 and 2.0 updated apache m4 script to detect both verions (two minumums) defaulted install to not activate module in configuration file (use make activate)
-rw-r--r--CHANGELOG16
-rw-r--r--Makefile.in35
-rw-r--r--apache13.h61
-rw-r--r--apache20.h31
-rw-r--r--configure.ac30
-rw-r--r--functions13.h38
-rw-r--r--functions20.h92
-rw-r--r--m4/apache.m4166
-rw-r--r--m4/mod_ssl.m42
-rw-r--r--mod_log_sql.c331
10 files changed, 523 insertions, 279 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 9660209..ffb512a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,4 +1,4 @@
1$Id: CHANGELOG,v 1.5 2004/01/06 00:32:46 urkle Exp $ 1$Id: CHANGELOG,v 1.6 2004/01/20 16:27:34 urkle Exp $
2 2
3TODO: 3TODO:
4* Port connection portion to other DBMS? Genericize the module? Start with 4* Port connection portion to other DBMS? Genericize the module? Start with
@@ -8,17 +8,27 @@ TODO:
8* LogSQLRotateLogs directive with daily/monthly/weekly/etc. 8* LogSQLRotateLogs directive with daily/monthly/weekly/etc.
9* new format char: IP as bigint? ( not w/ ipV6 ) 9* new format char: IP as bigint? ( not w/ ipV6 )
10* socket-based middleman daemon with configurable conns, or connect/disconnect. 10* socket-based middleman daemon with configurable conns, or connect/disconnect.
11 DBI connection pool when I switch to DBI.
11* ignore by cookie 12* ignore by cookie
12* tools to import logs into SQL 13* tools to import logs into SQL (waiting on permission from author)
13* Directive to yes/no create ancillary tables (or just access table) 14* Directive to yes/no create ancillary tables (or just access table)
14* break module into separate code files 15* break module into separate code files
15 separate DB implimentation into sub-modules via provider mechanism 16 separate DB implimentation into sub-modules via provider mechanism
16 separate module for SSL support 17 separate module for SSL support
18 apache version specific code already split into separate files.
17* add document building to Makefile.in 19* add document building to Makefile.in
18* backport patch for apache 1.3
19* investigate thread safety issues (libmysqlclient_r) 20* investigate thread safety issues (libmysqlclient_r)
20 21
21CHANGES: 22CHANGES:
231.93: 2004-01-20
24* Compiles for apache 1.3 AND 2.0
25* split apache version specific functions to seperate header files
26* split apache version specific includes to seperate header files
27* added wrapper defines for apache 1.3
28* updated configure m4 scripts to detect both apache versions at the same time
29 and assign defines as to which version was found.
30* made install default to not activate module in configuration files.
31
221.92: 2004-01-05 321.92: 2004-01-05
23* fixed compilation issue with mysql 4.x where mysql_error returns const char * 33* fixed compilation issue with mysql 4.x where mysql_error returns const char *
24* Have SSL support compiling (though not really tested) 34* Have SSL support compiling (though not really tested)
diff --git a/Makefile.in b/Makefile.in
index 7a77d6d..27ba01f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -15,7 +15,7 @@ LDADD = @MYSQL_LDFLAGS@ @MYSQL_LIBS@
15 15
16EXTRA_DIST = INSTALL LICENSE CHANGELOG make_combined_log.pl 16EXTRA_DIST = INSTALL LICENSE CHANGELOG make_combined_log.pl
17 17
18TARGET = @PACKAGE_NAME@.la 18TARGET = @APACHE_OUTPUT_NAME@
19 19
20#Don't modify anything below here 20#Don't modify anything below here
21 21
@@ -44,7 +44,7 @@ DISTFILES = $(STD_DIST) $(EXTRA_DIST) $(SOURCES) $(HEADERS)
44 44
45all: $(TARGET) all-subdirs 45all: $(TARGET) all-subdirs
46 46
47all-subdirs install-subdirs update-subdirs clean-subdirs distclean-subdirs: 47all-subdirs install-subdirs activate-subdirs clean-subdirs distclean-subdirs:
48 @otarget=`echo $@|sed s/-subdirs//`; \ 48 @otarget=`echo $@|sed s/-subdirs//`; \
49 list=' $(PROVIDERS_SUBDIRS) $(SUBDIRS)'; \ 49 list=' $(PROVIDERS_SUBDIRS) $(SUBDIRS)'; \
50 for i in $$list; do \ 50 for i in $$list; do \
@@ -57,28 +57,30 @@ all-subdirs install-subdirs update-subdirs clean-subdirs distclean-subdirs:
57 fi; \ 57 fi; \
58 (cd $$i && $(MAKE) $$target) || exit 1; \ 58 (cd $$i && $(MAKE) $$target) || exit 1; \
59 fi; \ 59 fi; \
60 done; \ 60 done;
61 61
62$(TARGET): 62$(TARGET):
63 @APXS_BIN@ -c -o @PACKAGE_NAME@.la $(INCLUDES) @MOD_SSL_CFLAGS@ $(CFLAGS) $(LDADD) @DEFS@ $(SOURCES) 63 @@APXS_BIN@ -c -o $(TARGET) $(INCLUDES) @MOD_SSL_CFLAGS@ $(CFLAGS) \
64 $(LDADD) @DEFS@ @APACHE_DEFS@ $(SOURCES)
64 65
65include: 66include:
66 rm -rf include 67 rm -rf include
67 ln -s @APACHE_INCDIR@ include 68 ln -s @APACHE_INCDIR@ include
68 69
69install: install-subdirs 70install: install-subdirs
70 @APXS_BIN@ -i -a $(TARGET) 71 @@APXS_BIN@ -i $(TARGET)
71 72
72update: update-subdirs 73activate: activate-subdirs
73 @APXS_BIN@ -i $(TARGET) 74 @@APXS_BIN@ -i -a $(TARGET)
74 75
75clean: clean-subdirs 76clean: clean-subdirs
76 $(RM) $(OBJ) $(SLO) $(LO) $(TARGET) .deps 77 $(RM) $(OBJ) $(SLO) $(LO) $(TARGET) .deps
78 $(RM) -r .libs
77 79
78distclean: clean distclean-subdirs 80distclean: clean distclean-subdirs
79 $(RM) config.status config.log config.h config.h.in \ 81 $(RM) config.status config.log config.h config.h.in \
80 configure stamp-h stamp-h.in Makefile aclocal.m4 82 configure stamp-h stamp-h.in Makefile aclocal.m4
81 $(RM) -r autom4te-2.53.cache .libs 83 $(RM) -r autom4te-2.53.cache
82 84
83DESTDIR = @PACKAGE_NAME@-@PACKAGE_VERSION@ 85DESTDIR = @PACKAGE_NAME@-@PACKAGE_VERSION@
84DESTTGZ = $(DESTDIR).tar.gz 86DESTTGZ = $(DESTDIR).tar.gz
@@ -97,27 +99,28 @@ dist:
97 echo $(NEWDESTDIR); \ 99 echo $(NEWDESTDIR); \
98 (cd $$i && $(MAKE) DESTDIR=$(builddir)/$(DESTDIR)/$$i $$target) || exit 1; \ 100 (cd $$i && $(MAKE) DESTDIR=$(builddir)/$(DESTDIR)/$$i $$target) || exit 1; \
99 fi; \ 101 fi; \
100 done; 102 done; \
101 if test "$$made_local" != "yes"; then \ 103 if test "$$made_local" != "yes"; then \
102 $(MAKE) "local-dist" || exit 1; \ 104 $(MAKE) "local-dist" || exit 1; \
103 fi 105 fi; \
104 tar -zcf $(DESTTGZ) $(DESTDIR) 106 tar -zcf $(DESTTGZ) $(DESTDIR); \
105 rm -rf $(DESTDIR) 107 rm -rf $(DESTDIR); \
106 108
107local-dist: $(DISTFILES) 109local-dist: $(DISTFILES)
108 mkdir -p $(DESTDIR) 110 @mkdir -p $(DESTDIR); \
109 cp -dp --parents $(DISTFILES) $(DESTDIR) 111 cp -dp --parents $(DISTFILES) $(DESTDIR);
110 112
111$(builddir)/.deps: depend 113$(builddir)/.deps: depend
112 114
113depend: $(SOURCES) $(HEADERS) 115depend: $(SOURCES) $(HEADERS)
114 if test -n "`ls $(srcdir)/*.c 2> /dev/null`"; then \ 116 if test -n "`ls $(srcdir)/*.c 2> /dev/null`"; then \
115 $(CC) -MM -I@APACHE_INCDIR@ @MOD_SSL_CFLAGS@ $(INCLUDES) -DHAVE_CONFIG_H $(srcdir)/*.c > $(builddir)/.deps || true; \ 117 $(CC) -MM -I@APACHE_INCDIR@ @MOD_SSL_CFLAGS@ $(INCLUDES) @DEFS@ \
118 @APACHE_DEFS@ $(srcdir)/*.c > $(builddir)/.deps || true; \
116 fi 119 fi
117 120
118include $(builddir)/.deps 121include $(builddir)/.deps
119 122
120.PHONY: include all-subdirs update-subdirs install-subdirs \ 123.PHONY: include all-subdirs activate-subdirs install-subdirs \
121 clean-subdirs distclean-subdirs dist 124 clean-subdirs distclean-subdirs dist
122 125
123# Regenerate makefiles 126# Regenerate makefiles
diff --git a/apache13.h b/apache13.h
new file mode 100644
index 0000000..3b37986
--- /dev/null
+++ b/apache13.h
@@ -0,0 +1,61 @@
1#ifndef APACHE13_H
2#define APACHE13_H
3
4#include "httpd.h"
5#include "http_config.h"
6#include "http_log.h"
7#include "http_core.h"
8
9/* Defines */
10#define AP_MODULE_DECLARE_DATA
11#define APR_OFF_T_FMT "ld"
12#define APR_PID_T_FMT "d"
13#define APR_SUCCESS 0
14#define APR_OFFSETOF XtOffsetOf
15
16/*AP_INIT_TAKE1("LogSQLTransferLogTable", set_server_nmv_string_slot,
17 (void *)APR_OFFSETOF(logsql_state, transfer_table_name), RSRC_CONF,
18 "The database table that holds the transfer log")
19
20{"LogSQLTransferLogTable", set_log_sql_transfer_table, NULL, RSRC_CONF, TAKE1,
21 "The database table that holds the transfer log"}*/
22
23/** method of declaring a directive which takes 1 argument */
24# define AP_INIT_TAKE1(directive, func, mconfig, where, help) \
25 { directive, func, mconfig, where, TAKE1, help }
26/** method of declaring a directive which takes multiple arguments */
27# define AP_INIT_ITERATE(directive, func, mconfig, where, help) \
28 { directive, func, mconfig, where, ITERATE, help }
29/** method of declaring a directive which takes 3 arguments */
30# define AP_INIT_TAKE3(directive, func, mconfig, where, help) \
31 { directive, func, mconfig, where, TAKE3, help }
32/** method of declaring a directive which takes a flag (on/off) as an argument */
33# define AP_INIT_FLAG(directive, func, mconfig, where, help) \
34 { directive, func, mconfig, where, FLAG, help }
35
36/* Types */
37#define apr_pool_t pool
38#define apr_array_header_t array_header
39
40/* Functions */
41#define ap_get_remote_host(a,b,c,d) ap_get_remote_host(a,b,c)
42
43#define apr_palloc ap_palloc
44#define apr_pcalloc ap_pcalloc
45#define apr_pstrdup ap_pstrdup
46#define apr_pstrcat ap_pstrcat
47#define apr_psprintf ap_psprintf
48#define apr_snprintf ap_snprintf
49
50#define apr_table_get ap_table_get
51
52#define apr_array_push ap_push_array
53#define apr_array_make ap_make_array
54#define apr_array_cat ap_array_cat
55#define apr_is_empty_array(t) (((t) == NULL)||((t)->nelts == 0))
56
57#define apr_tolower ap_tolower
58
59#define log_error ap_log_error
60
61#endif /* APACHE13_H */
diff --git a/apache20.h b/apache20.h
new file mode 100644
index 0000000..fd111d3
--- /dev/null
+++ b/apache20.h
@@ -0,0 +1,31 @@
1#ifndef APACHE20_H
2#define APACHE20_H
3
4#include "apr_strings.h"
5#include "apr_lib.h"
6#include "apr_hash.h"
7#include "apr_optional.h"
8#define APR_WANT_STRFUNC
9#include "apr_want.h"
10#include "apr_tables.h"
11
12#include "ap_config.h"
13
14#include "httpd.h"
15#include "http_config.h"
16#include "http_core.h"
17#include "http_log.h"
18#include "http_protocol.h"
19
20#include "util_time.h"
21
22static void log_error(char *file, int line, int level, const server_rec *s, const char *fmt, ...) __attribute__ ((format (printf, 5,6)));
23static inline void log_error(char *file, int line, int level, const server_rec *s, const char *fmt, ...)
24{
25 va_list args;
26 va_start(args, fmt);
27 ap_log_error(file,line,level,0,s,fmt,args);
28 va_end(args);
29}
30
31#endif /* APACHE20_H */
diff --git a/configure.ac b/configure.ac
index ed8e25d..63b71db 100644
--- a/configure.ac
+++ b/configure.ac
@@ -8,11 +8,15 @@ AC_CONFIG_SRCDIR(mod_log_sql.c)
8dnl Add a test for a compiler. 8dnl Add a test for a compiler.
9AC_PROG_CC 9AC_PROG_CC
10 10
11APACHE_VERSION=2.0.44 11APACHE20_VERSION=2.0.44
12CHECK_PATH_APACHE($APACHE_VERSION, 12APACHE13_VERSION=1.3.20
13 :, 13CHECK_PATH_APACHE($APACHE13_VERSION,$APACHE20_VERSION,
14 AC_MSG_ERROR([*** Apache version $APACHE_VERSION not found!]) 14 :,
15 ) 15 :,
16 AC_MSG_ERROR([*** The correct version Apache was not found!])
17 AC_MSG_ERROR([*** You need either Apache 1.3 version $APACHE13_VERSION or greater])
18 AC_MSG_ERROR([*** or Apache 2.0/2.1 version $APACHE20_VERSION or greater!])
19 )
16 20
17CHECK_PATH_MYSQL(:, 21CHECK_PATH_MYSQL(:,
18 AC_MSG_ERROR([*** Mysql client libraries not found!]) 22 AC_MSG_ERROR([*** Mysql client libraries not found!])
@@ -20,10 +24,8 @@ CHECK_PATH_MYSQL(:,
20 24
21CHECK_PATH_MOD_SSL( 25CHECK_PATH_MOD_SSL(
22 AC_DEFINE(WANT_SSL_LOGGING,,[Define if we want to compile in SSL support.]) 26 AC_DEFINE(WANT_SSL_LOGGING,,[Define if we want to compile in SSL support.])
23 AC_MSG_WARN([*** Compilng with SSL support!]), 27 conf_SSL=1,
24 AC_MSG_WARN([*** Compiling without SSL support!]) 28 conf_SSL=0
25 AC_MSG_WARN([*** enable with --enable-ssl to enable])
26 AC_MSG_WARN([*** and --with-ssl-inc with the the directory for SSL headers])
27 ) 29 )
28 30
29AC_CHECK_HEADERS(limits.h) 31AC_CHECK_HEADERS(limits.h)
@@ -33,3 +35,13 @@ AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
33dnl Write config.status and the Makefile 35dnl Write config.status and the Makefile
34 36
35AC_OUTPUT(Makefile Documentation/Makefile) 37AC_OUTPUT(Makefile Documentation/Makefile)
38
39AC_MSG_RESULT([------------------------------------])
40AC_MSG_RESULT([Apache version : $APACHE_VERSION])
41if test $conf_SSL -eq 1; then
42 AC_MSG_RESULT([SSL Support : yes])
43else
44 AC_MSG_RESULT([SSL Support : no])
45 AC_MSG_RESULT([*** Use --enable-ssl to enable SSL support])
46 AC_MSG_RESULT([*** and --with-ssl-inc for the directory for SSL headers])
47fi
diff --git a/functions13.h b/functions13.h
new file mode 100644
index 0000000..bff37f2
--- /dev/null
+++ b/functions13.h
@@ -0,0 +1,38 @@
1static const char *extract_request_time(request_rec *r, char *a)
2{
3 int timz;
4 struct tm *t;
5 char tstr[MAX_STRING_LEN];
6
7 t = ap_get_gmtoff(&timz);
8
9 if (a && *a) { /* Custom format */
10 strftime(tstr, MAX_STRING_LEN, a, t);
11 } else { /* CLF format */
12 char sign = (timz < 0 ? '-' : '+');
13
14 if (timz < 0) {
15 timz = -timz;
16 }
17 strftime(tstr, MAX_STRING_LEN, "[%d/%b/%Y:%H:%M:%S ", t);
18 ap_snprintf(tstr + strlen(tstr), sizeof(tstr) - strlen(tstr), "%c%.2d%.2d]", sign, timz / 60, timz % 60);
19 }
20
21 return ap_pstrdup(r->pool, tstr);
22}
23
24static const char *extract_request_duration(request_rec *r, char *a)
25{
26 char duration[22]; /* Long enough for 2^64 */
27
28 ap_snprintf(duration, sizeof(duration), "%ld", (long) time(NULL) - r->request_time);
29 return ap_pstrdup(r->pool, duration);
30}
31
32static const char *extract_request_timestamp(request_rec *r, char *a)
33{
34 char tstr[32];
35
36 ap_snprintf(tstr, 32, "%ld", (long) time(NULL));
37 return ap_pstrdup(r->pool, tstr);
38}
diff --git a/functions20.h b/functions20.h
new file mode 100644
index 0000000..9ff3a63
--- /dev/null
+++ b/functions20.h
@@ -0,0 +1,92 @@
1/* functions */
2static const char *extract_request_time_custom(request_rec *r, char *a,
3 apr_time_exp_t *xt)
4{
5 apr_size_t retcode;
6 char tstr[MAX_STRING_LEN];
7 apr_strftime(tstr, &retcode, sizeof(tstr), a, xt);
8 return apr_pstrdup(r->pool, tstr);
9}
10
11#define DEFAULT_REQUEST_TIME_SIZE 32
12typedef struct {
13 unsigned t;
14 char timestr[DEFAULT_REQUEST_TIME_SIZE];
15 unsigned t_validate;
16} cached_request_time;
17
18#define TIME_CACHE_SIZE 4
19#define TIME_CACHE_MASK 3
20static cached_request_time request_time_cache[TIME_CACHE_SIZE];
21
22static const char *extract_request_time(request_rec *r, char *a)
23{
24 apr_time_exp_t xt;
25
26 /* Please read comments in mod_log_config.h for more info about
27 * the I_INSIST....COMPLIANCE define
28 */
29 if (a && *a) { /* Custom format */
30#ifdef I_INSIST_ON_EXTRA_CYCLES_FOR_CLF_COMPLIANCE
31 ap_explode_recent_localtime(&xt, apr_time_now());
32#else
33 ap_explode_recent_localtime(&xt, r->request_time);
34#endif
35 return extract_request_time_custom(r, a, &xt);
36 } else { /* CLF format */
37 /* This code uses the same technique as ap_explode_recent_localtime():
38 * optimistic caching with logic to detect and correct race conditions.
39 * See the comments in server/util_time.c for more information.
40 */
41 cached_request_time* cached_time = apr_palloc(r->pool,
42 sizeof(*cached_time));
43#ifdef I_INSIST_ON_EXTRA_CYCLES_FOR_CLF_COMPLIANCE
44 apr_time_t request_time = apr_time_now();
45#else
46 apr_time_t request_time = r->request_time;
47#endif
48 unsigned t_seconds = (unsigned)apr_time_sec(request_time);
49 unsigned i = t_seconds & TIME_CACHE_MASK;
50 memcpy(cached_time, &(request_time_cache[i]), sizeof(*cached_time));
51 if ((t_seconds != cached_time->t) ||
52 (t_seconds != cached_time->t_validate)) {
53
54 /* Invalid or old snapshot, so compute the proper time string
55 * and store it in the cache
56 */
57 char sign;
58 int timz;
59
60 ap_explode_recent_localtime(&xt, r->request_time);
61 timz = xt.tm_gmtoff;
62 if (timz < 0) {
63 timz = -timz;
64 sign = '-';
65 }
66 else {
67 sign = '+';
68 }
69 cached_time->t = t_seconds;
70 apr_snprintf(cached_time->timestr, DEFAULT_REQUEST_TIME_SIZE,
71 "[%02d/%s/%d:%02d:%02d:%02d %c%.2d%.2d]",
72 xt.tm_mday, apr_month_snames[xt.tm_mon],
73 xt.tm_year+1900, xt.tm_hour, xt.tm_min, xt.tm_sec,
74 sign, timz / (60*60), timz % (60*60));
75 cached_time->t_validate = t_seconds;
76 memcpy(&(request_time_cache[i]), cached_time,
77 sizeof(*cached_time));
78 }
79 return cached_time->timestr;
80 }
81}
82
83static const char *extract_request_duration(request_rec *r, char *a)
84{
85 apr_time_t duration = apr_time_now() - r->request_time;
86 return apr_psprintf(r->pool, "%" APR_TIME_T_FMT, apr_time_sec(duration));
87}
88
89static const char *extract_request_timestamp(request_rec *r, char *a)
90{
91 return apr_psprintf(r->pool, "%"APR_TIME_T_FMT, apr_time_sec(apr_time_now()));
92}
diff --git a/m4/apache.m4 b/m4/apache.m4
index 1e29ac7..93319e3 100644
--- a/m4/apache.m4
+++ b/m4/apache.m4
@@ -1,41 +1,16 @@
1dnl CHECK_PATH_APACHE([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) 1dnl TEST_APACHE_VERSION([MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
2dnl Test for Apache apxs 2dnl Test for Apache
3dnl 3dnl
4AC_DEFUN(CHECK_PATH_APACHE, 4AC_DEFUN(TEST_APACHE_VERSION,
5[dnl 5[dnl
6AC_ARG_WITH(
7 apxs,
8 [AC_HELP_STRING([--with-apxs=PATH],[Location to APXS binary (default: /usr)])],
9 apxs_prefix="$withval",
10 apxs_prefix="/usr"
11 )
12AC_ARG_ENABLE(apachetest,
13 [AC_HELP_STRING([--disable-apachetest],[Do not try to compile and run apache version test program])],
14 ,
15 enable_apachetest=yes)
16
17
18 AC_REQUIRE([AC_CANONICAL_TARGET]) 6 AC_REQUIRE([AC_CANONICAL_TARGET])
19 PATH="$apxs_prefix:$apxs_prefix/bin:$apxs_prefix/sbin:$PATH"
20 if test -x $apxs_prefix && test ! -d $apxs_prefix; then
21 APXS_BIN=$apxs_prefix
22 else
23 AC_PATH_PROG(APXS_BIN, apxs, no, [$PATH])
24 fi
25 min_apache_version=ifelse([$1], ,1.3.1,$1)
26 AC_MSG_CHECKING(for Apache - version >= $min_apache_version)
27 no_apxs=""
28 if test "$APXS_BIN" == "no"; then
29 no_apxs=yes
30 else
31 APACHE_INCDIR=`$APXS_BIN -q INCLUDEDIR`
32 APACHE_CFLAGS=-I$APACHE_INCDIR
33 APACHE_MODDIR=`$APXS_BIN -q LIBEXECDIR`
34 7
35 if test "x$enable_apachetest" = "xyes" ; then 8 min_apache_version="$1"
36 ac_save_CFLAGS="$CFLAGS" 9 no_apache=""
37 CFLAGS="$CFLAGS $APACHE_CFLAGS" 10 ac_save_CFLAGS="$CFLAGS"
38 AC_TRY_RUN([ 11 CFLAGS="$CFLAGS $APACHE_CFLAGS"
12
13 AC_TRY_RUN([
39#include <stdio.h> 14#include <stdio.h>
40#include <stdlib.h> 15#include <stdlib.h>
41#include <string.h> 16#include <string.h>
@@ -80,37 +55,29 @@ int main (int argc, char *argv[])
80 ((major2 == major1) && (minor2 > minor1)) || 55 ((major2 == major1) && (minor2 > minor1)) ||
81 ((major2 == major1) && (minor2 == minor1) && (micro2 >= micro1))) 56 ((major2 == major1) && (minor2 == minor1) && (micro2 >= micro1)))
82 { 57 {
83 return 0; 58 exit(0);
84 } else { 59 } else {
85 printf("\n*** This module requires apache version %d.%d.%d or greater\n", 60 /*printf("\n*** This module requires apache version %d.%d.%d or greater\n",
86 major1, minor1, micro1); 61 major1, minor1, micro1);
87 printf("*** I found version %d.%d.%d. Please verify the installation directory\n", 62 printf("*** I found version %d.%d.%d. Please verify the installation directory\n",
88 major2, minor2, micro2); 63 major2, minor2, micro2);
89 printf("*** of apache with the --with-apxs configure option.\n"); 64 printf("*** of apache with the --with-apxs configure option.\n");*/
90 return 1; 65 exit(1);
91 } 66 }
92} 67}
93 68
94],, no_apxs=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) 69],, no_apache=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
95 CFLAGS="$ac_save_CFLAGS" 70 CFLAGS="$ac_save_CFLAGS"
96 fi 71
97 fi 72 if test "x$no_apache" = x ; then
98 if test "x$no_apxs" = x ; then
99 AC_MSG_RESULT(yes)
100 ifelse([$2], , :, [$2]) 73 ifelse([$2], , :, [$2])
101 else 74 else
102 AC_MSG_RESULT(no) 75 if test -f conf.apachetest ; then
103 if test "$APXS_BIN" = "no" ; then 76 :
104 echo "*** The apxs binary installed by apache could not be found"
105 echo "*** If apache is installed in PREFIX, make sure PREFIX/bin is in"
106 echo "*** your path, or use the --with-apxs configure option"
107 else 77 else
108 if test -f conf.apachetest ; then 78 echo "*** Could not run Apache test program, checking why..."
109 : 79 CFLAGS="$CFLAGS APACHE_CFLAGS"
110 else 80 AC_TRY_LINK([
111 echo "*** Could not run Apache test program, checking why..."
112 CFLAGS="$CFLAGS APACHE_CFLAGS"
113 AC_TRY_LINK([
114#include <stdio.h> 81#include <stdio.h>
115#include "httpd.h" 82#include "httpd.h"
116 83
@@ -118,17 +85,88 @@ int main(int argc, char *argv[])
118{ return 0; } 85{ return 0; }
119#undef main 86#undef main
120#define main K_and_R_C_main 87#define main K_and_R_C_main
121], [ return 0; ], 88], [ return 0; ],
122 [ echo "*** The test program compiled, but failed to run. Check config.log" ], 89 [ echo "*** The test program compiled, but failed to run. Check config.log" ],
123 [ echo "*** The test program failed to compile or link. Check config.log" ]) 90 [ echo "*** The test program failed to compile or link. Check config.log" ])
124 CFLAGS="$ac_save_CFLAGS" 91 CFLAGS="$ac_save_CFLAGS"
125 fi
126 fi 92 fi
127 APACHE_CFLAGS=""
128 ifelse([$3], , :, [$3]) 93 ifelse([$3], , :, [$3])
129 fi 94 fi
130 AC_SUBST(APACHE_CFLAGS)
131 AC_SUBST(APACHE_INCDIR)
132 AC_SUBST(APACHE_MODDIR)
133 rm -f conf.apachetest 95 rm -f conf.apachetest
134]) 96])
97
98dnl CHECK_PATH_APACHE([MINIMUM13-VERSION [, MINIMUM20-VERSION [,
99dnl ACTION-IF-FOUND13 [, ACTION-IF-FOUND20 [, ACTION-IF-NOT-FOUND]]])
100dnl Test for Apache apxs
101dnl
102AC_DEFUN(CHECK_PATH_APACHE,
103[dnl
104AC_ARG_WITH(
105 apxs,
106 [AC_HELP_STRING([--with-apxs=PATH],[Location to APXS binary (default: /usr)])],
107 apxs_prefix="$withval",
108 apxs_prefix="/usr"
109 )
110AC_ARG_ENABLE(
111 apachetest,
112 [AC_HELP_STRING([--disable-apachetest],[Do not try to compile and run apache version test program])],
113 ,
114 enable_apachetest=yes
115 )
116
117 PATH="$apxs_prefix:$apxs_prefix/bin:$apxs_prefix/sbin:$PATH"
118 if test -x $apxs_prefix -a ! -d $apxs_prefix; then
119 APXS_BIN=$apxs_prefix
120 else
121 AC_PATH_PROG(APXS_BIN, apxs, no, [$PATH])
122 fi
123 min_apache13_version=ifelse([$1], ,no,$1)
124 min_apache20_version=ifelse([$2], ,no,$2)
125 no_apxs=""
126 if test "$APXS_BIN" = "no"; then
127 AC_MSG_ERROR([*** The apxs binary installed by apache could not be found!])
128 AC_MSG_ERROR([*** If apache is installed in PREFIX, make sure PREFIX/bin is in])
129 AC_MSG_ERROR([*** your path, or use the --with-apxs configure option])
130 else
131 APACHE_INCDIR=`$APXS_BIN -q INCLUDEDIR`
132 APACHE_CFLAGS=-I$APACHE_INCDIR
133 APACHE_MODDIR=`$APXS_BIN -q LIBEXECDIR`
134
135 if test "x$enable_apachetest" = "xyes" ; then
136 if test "$min_apache20_version" != "no"; then
137 AC_MSG_CHECKING(for Apache 2.0 version >= $min_apache20_version)
138 TEST_APACHE_VERSION($min_apache20_version,
139 AC_MSG_RESULT(yes)
140 AC_DEFINE(WITH_APACHE20,1,[Define to 1 if we are compiling with Apache 2.0.x])
141 APACHE_VERSION="20"
142 APACHE_OUTPUT_NAME=$PACKAGE_NAME.la
143 APACHE_DEFS="-DWITH_APACHE20"
144 ifelse([$4], , , $4),
145 AC_MSG_RESULT(no)
146 if test "x$min_apache13_version" = "xno"; then
147 ifelse([$5], , , $5)
148 fi
149 )
150 fi
151 if test "$min_apache13_version" != "no" -a "x$APACHE_VERSION" = "x"; then
152 AC_MSG_CHECKING(for Apache 1.3 version >= $min_apache13_version)
153 TEST_APACHE_VERSION($min_apache13_version,
154 AC_MSG_RESULT(yes)
155 AC_DEFINE(WITH_APACHE13,1,[Define to 1 if we are compiling with Apache 1.3.x])
156 APACHE_VERSION="13"
157 APACHE_OUTPUT_NAME=$PACKAGE_NAME.so
158 APACHE_DEFS="-DWITH_APACHE13"
159 ifelse([$3], , , $3),
160 AC_MSG_RESULT(no)
161 ifelse([$5], , , $5)
162 )
163 fi
164 fi
165 AC_SUBST(APACHE_DEFS)
166 AC_SUBST(APACHE_CFLAGS)
167 AC_SUBST(APACHE_INCDIR)
168 AC_SUBST(APACHE_MODDIR)
169 AC_SUBST(APACHE_VERSION)
170 AC_SUBST(APACHE_OUTPUT_NAME)
171 fi
172])
diff --git a/m4/mod_ssl.m4 b/m4/mod_ssl.m4
index 457548e..6a852b9 100644
--- a/m4/mod_ssl.m4
+++ b/m4/mod_ssl.m4
@@ -15,7 +15,7 @@ AC_ARG_WITH(
15 ssl_incdir="$withval", 15 ssl_incdir="$withval",
16 ) 16 )
17 17
18 if test "$ssl_val" = "yes"; then 18 if test "x$ssl_val" = "xyes"; then
19 ac_save_CFLAGS=$CFLAGS 19 ac_save_CFLAGS=$CFLAGS
20 ac_save_CPPFLAGS=$CPPFLAGS 20 ac_save_CPPFLAGS=$CPPFLAGS
21 MOD_SSL_CFLAGS="-I/usr/include/openssl" 21 MOD_SSL_CFLAGS="-I/usr/include/openssl"
diff --git a/mod_log_sql.c b/mod_log_sql.c
index 64896ab..02d5fd4 100644
--- a/mod_log_sql.c
+++ b/mod_log_sql.c
@@ -1,4 +1,4 @@
1/* $Header: /home/cvs/mod_log_sql/mod_log_sql.c,v 1.6 2004/01/04 03:23:21 urkle Exp $ */ 1/* $Header: /home/cvs/mod_log_sql/mod_log_sql.c,v 1.7 2004/01/20 16:27:34 urkle Exp $ */
2/* --------* 2/* --------*
3 * DEFINES * 3 * DEFINES *
4 * --------*/ 4 * --------*/
@@ -12,24 +12,16 @@
12/* ---------* 12/* ---------*
13 * INCLUDES * 13 * INCLUDES *
14 * ---------*/ 14 * ---------*/
15#include "mysql.h"
16#include "mysqld_error.h"
15 17
16#include "apr_strings.h" 18#if defined(WITH_APACHE20)
17#include "apr_lib.h" 19# include "apache20.h"
18#include "apr_hash.h" 20#elif defined(WITH_APACHE13)
19#include "apr_optional.h" 21# include "apache13.h"
20#define APR_WANT_STRFUNC 22#else
21#include "apr_want.h" 23# error Unsupported Apache version
22#include "apr_tables.h" 24#endif
23
24#include "ap_config.h"
25
26#include "httpd.h"
27#include "http_config.h"
28#include "http_core.h"
29#include "http_log.h"
30#include "http_protocol.h"
31
32#include "util_time.h"
33 25
34#ifdef HAVE_CONFIG_H 26#ifdef HAVE_CONFIG_H
35/* Undefine these to prevent conflicts between Apache ap_config_auto.h and 27/* Undefine these to prevent conflicts between Apache ap_config_auto.h and
@@ -51,8 +43,6 @@
51#include <limits.h> 43#include <limits.h>
52#endif 44#endif
53 45
54#include "mysql.h"
55#include "mysqld_error.h"
56 46
57#ifdef WANT_SSL_LOGGING 47#ifdef WANT_SSL_LOGGING
58#include "mod_ssl.h" 48#include "mod_ssl.h"
@@ -164,8 +154,11 @@ static const char *extract_remote_logname(request_rec *r, char *a)
164 154
165static const char *extract_remote_user(request_rec *r, char *a) 155static const char *extract_remote_user(request_rec *r, char *a)
166{ 156{
157 #ifdef WITH_APACHE13
158 char *rvalue = r->connection->user;
159 #else
167 char *rvalue = r->user; 160 char *rvalue = r->user;
168 161 #endif
169 if (rvalue == NULL) { 162 if (rvalue == NULL) {
170 rvalue = "-"; 163 rvalue = "-";
171 } else if (strlen(rvalue) == 0) { 164 } else if (strlen(rvalue) == 0) {
@@ -184,7 +177,7 @@ static const char *extract_ssl_keysize(request_rec *r, char *a)
184 if (myCtxConfig(scc,ssc) != NULL) { 177 if (myCtxConfig(scc,ssc) != NULL) {
185 result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_CIPHER_USEKEYSIZE"); 178 result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_CIPHER_USEKEYSIZE");
186 #ifdef DEBUG 179 #ifdef DEBUG
187 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,r->server,"SSL_KEYSIZE: %s", result); 180 log_error(APLOG_MARK,APLOG_DEBUG,0,r->server,"SSL_KEYSIZE: %s", result);
188 #endif 181 #endif
189 if (result != NULL && result[0] == '\0') 182 if (result != NULL && result[0] == '\0')
190 result = NULL; 183 result = NULL;
@@ -203,7 +196,7 @@ static const char *extract_ssl_maxkeysize(request_rec *r, char *a)
203 if (myCtxConfig(scc,ssc) != NULL) { 196 if (myCtxConfig(scc,ssc) != NULL) {
204 result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_CIPHER_ALGKEYSIZE"); 197 result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_CIPHER_ALGKEYSIZE");
205 #ifdef DEBUG 198 #ifdef DEBUG
206 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,r->server,"SSL_ALGKEYSIZE: %s", result); 199 log_error(APLOG_MARK,APLOG_DEBUG,0,r->server,"SSL_ALGKEYSIZE: %s", result);
207 #endif 200 #endif
208 if (result != NULL && result[0] == '\0') 201 if (result != NULL && result[0] == '\0')
209 result = NULL; 202 result = NULL;
@@ -222,7 +215,7 @@ static const char *extract_ssl_cipher(request_rec *r, char *a)
222 if (myCtxConfig(scc,ssc) != NULL) { 215 if (myCtxConfig(scc,ssc) != NULL) {
223 result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_CIPHER"); 216 result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_CIPHER");
224 #ifdef DEBUG 217 #ifdef DEBUG
225 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,r->server,"SSL_CIPHER: %s", result); 218 log_error(APLOG_MARK,APLOG_DEBUG,0,r->server,"SSL_CIPHER: %s", result);
226 #endif 219 #endif
227 if (result != NULL && result[0] == '\0') 220 if (result != NULL && result[0] == '\0')
228 result = NULL; 221 result = NULL;
@@ -295,93 +288,12 @@ static const char *extract_header_out(request_rec *r, char *a)
295 return table_get(r->err_headers_out, a); 288 return table_get(r->err_headers_out, a);
296} 289}
297*/ 290*/
298static const char *extract_request_time_custom(request_rec *r, char *a,
299 apr_time_exp_t *xt)
300{
301 apr_size_t retcode;
302 char tstr[MAX_STRING_LEN];
303 apr_strftime(tstr, &retcode, sizeof(tstr), a, xt);
304 return apr_pstrdup(r->pool, tstr);
305}
306
307#define DEFAULT_REQUEST_TIME_SIZE 32
308typedef struct {
309 unsigned t;
310 char timestr[DEFAULT_REQUEST_TIME_SIZE];
311 unsigned t_validate;
312} cached_request_time;
313
314#define TIME_CACHE_SIZE 4
315#define TIME_CACHE_MASK 3
316static cached_request_time request_time_cache[TIME_CACHE_SIZE];
317
318static const char *extract_request_time(request_rec *r, char *a)
319{
320 apr_time_exp_t xt;
321 291
322 /* Please read comments in mod_log_config.h for more info about 292#if defined(WITH_APACHE13)
323 * the I_INSIST....COMPLIANCE define 293#include "functions13.h"
324 */ 294#elif defined(WITH_APACHE20)
325 if (a && *a) { /* Custom format */ 295#include "functions20.h"
326#ifdef I_INSIST_ON_EXTRA_CYCLES_FOR_CLF_COMPLIANCE
327 ap_explode_recent_localtime(&xt, apr_time_now());
328#else
329 ap_explode_recent_localtime(&xt, r->request_time);
330#endif
331 return extract_request_time_custom(r, a, &xt);
332 } else { /* CLF format */
333 /* This code uses the same technique as ap_explode_recent_localtime():
334 * optimistic caching with logic to detect and correct race conditions.
335 * See the comments in server/util_time.c for more information.
336 */
337 cached_request_time* cached_time = apr_palloc(r->pool,
338 sizeof(*cached_time));
339#ifdef I_INSIST_ON_EXTRA_CYCLES_FOR_CLF_COMPLIANCE
340 apr_time_t request_time = apr_time_now();
341#else
342 apr_time_t request_time = r->request_time;
343#endif 296#endif
344 unsigned t_seconds = (unsigned)apr_time_sec(request_time);
345 unsigned i = t_seconds & TIME_CACHE_MASK;
346 memcpy(cached_time, &(request_time_cache[i]), sizeof(*cached_time));
347 if ((t_seconds != cached_time->t) ||
348 (t_seconds != cached_time->t_validate)) {
349
350 /* Invalid or old snapshot, so compute the proper time string
351 * and store it in the cache
352 */
353 char sign;
354 int timz;
355
356 ap_explode_recent_localtime(&xt, r->request_time);
357 timz = xt.tm_gmtoff;
358 if (timz < 0) {
359 timz = -timz;
360 sign = '-';
361 }
362 else {
363 sign = '+';
364 }
365 cached_time->t = t_seconds;
366 apr_snprintf(cached_time->timestr, DEFAULT_REQUEST_TIME_SIZE,
367 "[%02d/%s/%d:%02d:%02d:%02d %c%.2d%.2d]",
368 xt.tm_mday, apr_month_snames[xt.tm_mon],
369 xt.tm_year+1900, xt.tm_hour, xt.tm_min, xt.tm_sec,
370 sign, timz / (60*60), timz % (60*60));
371 cached_time->t_validate = t_seconds;
372 memcpy(&(request_time_cache[i]), cached_time,
373 sizeof(*cached_time));
374 }
375 return cached_time->timestr;
376 }
377}
378
379static const char *extract_request_duration(request_rec *r, char *a)
380{
381 apr_time_t duration = apr_time_now() - r->request_time;
382 return apr_psprintf(r->pool, "%" APR_TIME_T_FMT, apr_time_sec(duration));
383}
384
385static const char *extract_virtual_host(request_rec *r, char *a) 297static const char *extract_virtual_host(request_rec *r, char *a)
386{ 298{
387 return apr_pstrdup(r->pool, r->server->server_hostname); 299 return apr_pstrdup(r->pool, r->server->server_hostname);
@@ -456,7 +368,7 @@ static const char *extract_cookie(request_rec *r, char *a)
456 368
457 if (cls->cookie_name != NULL) { 369 if (cls->cookie_name != NULL) {
458 #ifdef DEBUG 370 #ifdef DEBUG
459 ap_log_rerror(APLOG_MARK,APLOG_DEBUG,0, r, 371 log_error(APLOG_MARK,APLOG_DEBUG, r->server,
460 "watching for cookie '%s'", cls->cookie_name); 372 "watching for cookie '%s'", cls->cookie_name);
461 #endif 373 #endif
462 374
@@ -464,7 +376,7 @@ static const char *extract_cookie(request_rec *r, char *a)
464 cookiestr = (char *)apr_table_get(r->headers_in, "cookie2"); 376 cookiestr = (char *)apr_table_get(r->headers_in, "cookie2");
465 if (cookiestr != NULL) { 377 if (cookiestr != NULL) {
466 #ifdef DEBUG 378 #ifdef DEBUG
467 ap_log_rerror(APLOG_MARK,APLOG_DEBUG,0, r, 379 log_error(APLOG_MARK,APLOG_DEBUG, r->server,
468 "Cookie2: [%s]", cookiestr); 380 "Cookie2: [%s]", cookiestr);
469 #endif 381 #endif
470 /* Does the cookie string contain one with our name? */ 382 /* Does the cookie string contain one with our name? */
@@ -486,7 +398,7 @@ static const char *extract_cookie(request_rec *r, char *a)
486 cookiestr = (char *)apr_table_get(r->headers_in, "cookie"); 398 cookiestr = (char *)apr_table_get(r->headers_in, "cookie");
487 if (cookiestr != NULL) { 399 if (cookiestr != NULL) {
488 #ifdef DEBUG 400 #ifdef DEBUG
489 ap_log_rerror(APLOG_MARK,APLOG_DEBUG,0,r, 401 log_error(APLOG_MARK,APLOG_DEBUG,r->server,
490 "Cookie: [%s]", cookiestr); 402 "Cookie: [%s]", cookiestr);
491 #endif 403 #endif
492 isvalid = strstr(cookiestr, cls->cookie_name); 404 isvalid = strstr(cookiestr, cls->cookie_name);
@@ -503,7 +415,7 @@ static const char *extract_cookie(request_rec *r, char *a)
503 cookiestr = apr_table_get(r->headers_out, "set-cookie"); 415 cookiestr = apr_table_get(r->headers_out, "set-cookie");
504 if (cookiestr != NULL) { 416 if (cookiestr != NULL) {
505 #ifdef DEBUG 417 #ifdef DEBUG
506 ap_log_rerror(APLOG_MARK,APLOG_DEBUG,0,r, 418 log_error(APLOG_MARK,APLOG_DEBUG,r->server,
507 "Set-Cookie: [%s]", cookiestr); 419 "Set-Cookie: [%s]", cookiestr);
508 #endif 420 #endif
509 isvalid = strstr(cookiestr, cls->cookie_name); 421 isvalid = strstr(cookiestr, cls->cookie_name);
@@ -530,15 +442,15 @@ static const char *extract_specific_cookie(request_rec *r, char *a)
530 442
531 if (a != NULL) { 443 if (a != NULL) {
532 #ifdef DEBUG 444 #ifdef DEBUG
533 ap_log_rerror(APLOG_MARK,APLOG_DEBUG,0, 445 log_error(APLOG_MARK,APLOG_DEBUG,
534 r,"watching for cookie '%s'", a); 446 r->server,"watching for cookie '%s'", a);
535 #endif 447 #endif
536 448
537 /* Fetch out the cookie header */ 449 /* Fetch out the cookie header */
538 cookiestr = (char *)apr_table_get(r->headers_in, "cookie2"); 450 cookiestr = (char *)apr_table_get(r->headers_in, "cookie2");
539 if (cookiestr != NULL) { 451 if (cookiestr != NULL) {
540 #ifdef DEBUG 452 #ifdef DEBUG
541 ap_log_rerror(APLOG_MARK,APLOG_DEBUG,0,r, 453 log_error(APLOG_MARK,APLOG_DEBUG,r->server,
542 "Cookie2: [%s]", cookiestr); 454 "Cookie2: [%s]", cookiestr);
543 #endif 455 #endif
544 /* Does the cookie string contain one with our name? */ 456 /* Does the cookie string contain one with our name? */
@@ -560,7 +472,7 @@ static const char *extract_specific_cookie(request_rec *r, char *a)
560 cookiestr = (char *)apr_table_get(r->headers_in, "cookie"); 472 cookiestr = (char *)apr_table_get(r->headers_in, "cookie");
561 if (cookiestr != NULL) { 473 if (cookiestr != NULL) {
562 #ifdef DEBUG 474 #ifdef DEBUG
563 ap_log_rerror(APLOG_MARK,APLOG_DEBUG,0,r, 475 log_error(APLOG_MARK,APLOG_DEBUG,r->server,
564 "Cookie: [%s]", cookiestr); 476 "Cookie: [%s]", cookiestr);
565 #endif 477 #endif
566 isvalid = strstr(cookiestr, a); 478 isvalid = strstr(cookiestr, a);
@@ -577,7 +489,7 @@ static const char *extract_specific_cookie(request_rec *r, char *a)
577 cookiestr = apr_table_get(r->headers_out, "set-cookie"); 489 cookiestr = apr_table_get(r->headers_out, "set-cookie");
578 if (cookiestr != NULL) { 490 if (cookiestr != NULL) {
579 #ifdef DEBUG 491 #ifdef DEBUG
580 ap_log_rerror(APLOG_MARK,APLOG_DEBUG,0,r, 492 log_error(APLOG_MARK,APLOG_DEBUG,r->server,
581 "Set-Cookie: [%s]", cookiestr); 493 "Set-Cookie: [%s]", cookiestr);
582 #endif 494 #endif
583 isvalid = strstr(cookiestr, a); 495 isvalid = strstr(cookiestr, a);
@@ -596,11 +508,6 @@ static const char *extract_specific_cookie(request_rec *r, char *a)
596} 508}
597 509
598 510
599static const char *extract_request_timestamp(request_rec *r, char *a)
600{
601 return apr_psprintf(r->pool, "%"APR_TIME_T_FMT, apr_time_sec(apr_time_now()));
602}
603
604/* 511/*
605static const char *extract_note(request_rec *r, char *a) 512static const char *extract_note(request_rec *r, char *a)
606{ 513{
@@ -730,20 +637,20 @@ static int open_logdb_link(server_rec* s)
730 637
731 if (global_config.server_p) { 638 if (global_config.server_p) {
732 #ifdef DEBUG 639 #ifdef DEBUG
733 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,s,"HOST: '%s' PORT: '%d' DB: '%s' USER: '%s' SOCKET: '%s'", 640 log_error(APLOG_MARK,APLOG_DEBUG,s,"HOST: '%s' PORT: '%d' DB: '%s' USER: '%s' SOCKET: '%s'",
734 global_config.dbhost, global_config.tcpport, global_config.dbname, global_config.dbuser, global_config.socketfile); 641 global_config.dbhost, global_config.tcpport, global_config.dbname, global_config.dbuser, global_config.socketfile);
735 #endif 642 #endif
736 return 1; 643 return 1;
737 } else { 644 } else {
738 #ifdef DEBUG 645 #ifdef DEBUG
739 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,s,"mod_log_sql: database connection error: %s",MYSQL_ERROR(&global_config.server)); 646 log_error(APLOG_MARK,APLOG_DEBUG,s,"mod_log_sql: database connection error: %s",MYSQL_ERROR(&global_config.server));
740 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,s,"HOST: '%s' PORT: '%d' DB: '%s' USER: '%s' SOCKET: '%s'", 647 log_error(APLOG_MARK,APLOG_DEBUG,s,"HOST: '%s' PORT: '%d' DB: '%s' USER: '%s' SOCKET: '%s'",
741 global_config.dbhost, global_config.tcpport, global_config.dbname, global_config.dbuser, global_config.socketfile); 648 global_config.dbhost, global_config.tcpport, global_config.dbname, global_config.dbuser, global_config.socketfile);
742 #endif 649 #endif
743 return 0; 650 return 0;
744 } 651 }
745 } else { 652 } else {
746 ap_log_error(APLOG_MARK,APLOG_ERR,0,s,"mod_log_sql: insufficient configuration info to establish database link"); 653 log_error(APLOG_MARK,APLOG_ERR,s,"mod_log_sql: insufficient configuration info to establish database link");
747 return 0; 654 return 0;
748 } 655 }
749} 656}
@@ -757,17 +664,30 @@ static int open_logdb_link(server_rec* s)
757 664
758static void preserve_entry(request_rec *r, const char *query) 665static void preserve_entry(request_rec *r, const char *query)
759{ 666{
760 apr_file_t *fp;
761 logsql_state *cls = ap_get_module_config(r->server->module_config, 667 logsql_state *cls = ap_get_module_config(r->server->module_config,
762 &log_sql_module); 668 &log_sql_module);
763 669 #if defined(WITH_APACHE20)
764 if (apr_file_open(&fp, cls->preserve_file,APR_APPEND, APR_OS_DEFAULT, r->pool)!=APR_SUCCESS) { 670 apr_file_t *fp;
765 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: attempted append of local preserve file but failed."); 671 apr_status_t result;
672 result = apr_file_open(&fp, cls->preserve_file,APR_APPEND, APR_OS_DEFAULT, r->pool);
673 #elif defined(WITH_APACHE13)
674 FILE *fp;
675 int result;
676 fp = ap_pfopen(r->pool, cls->preserve_file, "a");
677 result = (fp)?0:1;
678 #endif
679 if (result != APR_SUCCESS) {
680 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: attempted append of local preserve file but failed.");
766 } else { 681 } else {
767 apr_file_printf(fp,"%s;\n", query); 682 #if defined(WITH_APACHE20)
768 apr_file_close(fp); 683 apr_file_printf(fp,"%s;\n", query);
684 apr_file_close(fp);
685 #elif defined(WITH_APACHE13)
686 fprintf(fp,"%s;\n", query);
687 ap_pfclose(r->pool, fp);
688 #endif
769 #ifdef DEBUG 689 #ifdef DEBUG
770 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,r->server,"mod_log_sql: entry preserved in %s", cls->preserve_file); 690 log_error(APLOG_MARK,APLOG_DEBUG,r->server,"mod_log_sql: entry preserved in %s", cls->preserve_file);
771 #endif 691 #endif
772 } 692 }
773} 693}
@@ -822,24 +742,24 @@ static unsigned int safe_sql_query(request_rec *r, const char *query)
822 } 742 }
823 if (retval) { 743 if (retval) {
824 if (global_config.createtables) { 744 if (global_config.createtables) {
825 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: table doesn't exist...creating now"); 745 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: table doesn't exist...creating now");
826 cls = ap_get_module_config(r->server->module_config, &log_sql_module); 746 cls = ap_get_module_config(r->server->module_config, &log_sql_module);
827 if (safe_create_tables(cls, r)) { 747 if (safe_create_tables(cls, r)) {
828 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: child attempted but failed to create one or more tables for %s, preserving query", ap_get_server_name(r)); 748 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: child attempted but failed to create one or more tables for %s, preserving query", ap_get_server_name(r));
829 preserve_entry(r, query); 749 preserve_entry(r, query);
830 retval = mysql_errno(global_config.server_p); 750 retval = mysql_errno(global_config.server_p);
831 } else { 751 } else {
832 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: tables successfully created - retrying query"); 752 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: tables successfully created - retrying query");
833 if (mysql_query(global_config.server_p, query)) { 753 if (mysql_query(global_config.server_p, query)) {
834 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: giving up, preserving query"); 754 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: giving up, preserving query");
835 preserve_entry(r, query); 755 preserve_entry(r, query);
836 retval = mysql_errno(global_config.server_p); 756 retval = mysql_errno(global_config.server_p);
837 } else 757 } else
838 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: query successful after table creation"); 758 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: query successful after table creation");
839 retval = 0; 759 retval = 0;
840 } 760 }
841 } else { 761 } else {
842 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql, table doesn't exist, creation denied by configuration, preserving query"); 762 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql, table doesn't exist, creation denied by configuration, preserving query");
843 preserve_entry(r, query); 763 preserve_entry(r, query);
844 retval = ER_NO_SUCH_TABLE; 764 retval = ER_NO_SUCH_TABLE;
845 } 765 }
@@ -859,25 +779,25 @@ static unsigned int safe_sql_query(request_rec *r, const char *query)
859 real_error = mysql_errno(global_config.server_p); 779 real_error = mysql_errno(global_config.server_p);
860 } 780 }
861 781
862 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: first attempt failed, API said: error %d, \"%s\"", real_error, MYSQL_ERROR(global_config.server_p)); 782 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: first attempt failed, API said: error %d, \"%s\"", real_error, MYSQL_ERROR(global_config.server_p));
863 mysql_close(global_config.server_p); 783 mysql_close(global_config.server_p);
864 global_config.server_p = NULL; 784 global_config.server_p = NULL;
865 open_logdb_link(r->server); 785 open_logdb_link(r->server);
866 786
867 if (global_config.server_p == NULL) { /* still unable to link */ 787 if (global_config.server_p == NULL) { /* still unable to link */
868 signal(SIGPIPE, handler); 788 signal(SIGPIPE, handler);
869 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: reconnect failed, unable to reach database. SQL logging stopped until child regains a db connection."); 789 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: reconnect failed, unable to reach database. SQL logging stopped until child regains a db connection.");
870 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: log entries are being preserved in %s", cls->preserve_file); 790 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: log entries are being preserved in %s", cls->preserve_file);
871 return 1; 791 return 1;
872 } else 792 } else
873 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: db reconnect successful"); 793 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: db reconnect successful");
874 794
875 /* First sleep for a tiny amount of time. */ 795 /* First sleep for a tiny amount of time. */
876 delay.tv_sec = 0; 796 delay.tv_sec = 0;
877 delay.tv_nsec = 250000000; /* max is 999999999 (nine nines) */ 797 delay.tv_nsec = 250000000; /* max is 999999999 (nine nines) */
878 ret = nanosleep(&delay, &remainder); 798 ret = nanosleep(&delay, &remainder);
879 if (ret && errno != EINTR) 799 if (ret && errno != EINTR)
880 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: nanosleep unsuccessful"); 800 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: nanosleep unsuccessful");
881 801
882 /* Then make our second attempt */ 802 /* Then make our second attempt */
883 retval = mysql_query(global_config.server_p,query); 803 retval = mysql_query(global_config.server_p,query);
@@ -890,11 +810,11 @@ static unsigned int safe_sql_query(request_rec *r, const char *query)
890 real_error = mysql_errno(global_config.server_p); 810 real_error = mysql_errno(global_config.server_p);
891 } 811 }
892 812
893 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: second attempt failed, API said: error %d, \"%s\" -- preserving", real_error, MYSQL_ERROR(global_config.server_p)); 813 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: second attempt failed, API said: error %d, \"%s\" -- preserving", real_error, MYSQL_ERROR(global_config.server_p));
894 preserve_entry(r, query); 814 preserve_entry(r, query);
895 retval = real_error; 815 retval = real_error;
896 } else 816 } else
897 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: second attempt successful"); 817 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: second attempt successful");
898 818
899 /* Restore SIGPIPE to its original handler function */ 819 /* Restore SIGPIPE to its original handler function */
900 signal(SIGPIPE, handler); 820 signal(SIGPIPE, handler);
@@ -974,38 +894,38 @@ static int safe_create_tables(logsql_state *cls, request_rec *r)
974 create_cookies= apr_pstrcat(r->pool, createprefix, cls->cookie_table_name, cookies_suffix, type_suffix, NULL); 894 create_cookies= apr_pstrcat(r->pool, createprefix, cls->cookie_table_name, cookies_suffix, type_suffix, NULL);
975 895
976 #ifdef DEBUG 896 #ifdef DEBUG
977 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,r->server,"mod_log_sql: create string: %s", create_access); 897 log_error(APLOG_MARK,APLOG_DEBUG,r->server,"mod_log_sql: create string: %s", create_access);
978 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,r->server,"mod_log_sql: create string: %s", create_notes); 898 log_error(APLOG_MARK,APLOG_DEBUG,r->server,"mod_log_sql: create string: %s", create_notes);
979 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,r->server,"mod_log_sql: create string: %s", create_hout); 899 log_error(APLOG_MARK,APLOG_DEBUG,r->server,"mod_log_sql: create string: %s", create_hout);
980 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,r->server,"mod_log_sql: create string: %s", create_hin); 900 log_error(APLOG_MARK,APLOG_DEBUG,r->server,"mod_log_sql: create string: %s", create_hin);
981 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,r->server,"mod_log_sql: create string: %s", create_cookies); 901 log_error(APLOG_MARK,APLOG_DEBUG,r->server,"mod_log_sql: create string: %s", create_cookies);
982 #endif 902 #endif
983 903
984 /* Assume that things worked unless told otherwise */ 904 /* Assume that things worked unless told otherwise */
985 retval = 0; 905 retval = 0;
986 906
987 if ((create_results = safe_sql_query(r, create_access))) { 907 if ((create_results = safe_sql_query(r, create_access))) {
988 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: failed to create access table"); 908 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: failed to create access table");
989 retval = create_results; 909 retval = create_results;
990 } 910 }
991 911
992 if ((create_results = safe_sql_query(r, create_notes))) { 912 if ((create_results = safe_sql_query(r, create_notes))) {
993 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: failed to create notes table"); 913 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: failed to create notes table");
994 retval = create_results; 914 retval = create_results;
995 } 915 }
996 916
997 if ((create_results = safe_sql_query(r, create_hin))) { 917 if ((create_results = safe_sql_query(r, create_hin))) {
998 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: failed to create header_in table"); 918 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: failed to create header_in table");
999 retval = create_results; 919 retval = create_results;
1000 } 920 }
1001 921
1002 if ((create_results = safe_sql_query(r, create_hout))) { 922 if ((create_results = safe_sql_query(r, create_hout))) {
1003 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: failed to create header_out table"); 923 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: failed to create header_out table");
1004 retval = create_results; 924 retval = create_results;
1005 } 925 }
1006 926
1007 if ((create_results = safe_sql_query(r, create_cookies))) { 927 if ((create_results = safe_sql_query(r, create_cookies))) {
1008 ap_log_error(APLOG_MARK,APLOG_ERR,0,r->server,"mod_log_sql: failed to create cookies table"); 928 log_error(APLOG_MARK,APLOG_ERR,r->server,"mod_log_sql: failed to create cookies table");
1009 retval = create_results; 929 retval = create_results;
1010 } 930 }
1011 931
@@ -1123,21 +1043,18 @@ static const char *set_log_sql_tcp_port(cmd_parms *parms, void *dummy, const cha
1123 * that are defined in the array 'mysql_lgog_module' (at EOF) * 1043 * that are defined in the array 'mysql_lgog_module' (at EOF) *
1124 *------------------------------------------------------------*/ 1044 *------------------------------------------------------------*/
1125 1045
1126 1046#if defined(WITH_APACHE20)
1127/*
1128 * This function is called when an heavy-weight process (such as a child) is
1129 * being run down or destroyed. As with the child-initialisation function,
1130 * any information that needs to be recorded must be in static cells, since
1131 * there's no configuration record.
1132 *
1133 * There is no return value.
1134 */
1135static apr_status_t log_sql_close_link(void *data) 1047static apr_status_t log_sql_close_link(void *data)
1136{ 1048{
1137 mysql_close(global_config.server_p); 1049 mysql_close(global_config.server_p);
1138 return APR_SUCCESS; 1050 return APR_SUCCESS;
1139} 1051}
1140 1052#elif defined(WITH_APACHE13)
1053static void log_sql_child_exit(server_rec *s, apr_pool_t *p)
1054{
1055 mysql_close(global_config.server_p);
1056}
1057#endif
1141/* 1058/*
1142 * This function is called during server initialisation when an heavy-weight 1059 * This function is called during server initialisation when an heavy-weight
1143 * process (such as a child) is being initialised. As with the 1060 * process (such as a child) is being initialised. As with the
@@ -1146,26 +1063,32 @@ static apr_status_t log_sql_close_link(void *data)
1146 * 1063 *
1147 * There is no return value. 1064 * There is no return value.
1148 */ 1065 */
1066#if defined(WITH_APACHE20)
1149static void log_sql_child_init(apr_pool_t *p, server_rec *s) 1067static void log_sql_child_init(apr_pool_t *p, server_rec *s)
1150{ 1068{
1151 apr_pool_cleanup_register(p, NULL, log_sql_close_link, log_sql_close_link); 1069 apr_pool_cleanup_register(p, NULL, log_sql_close_link, log_sql_close_link);
1152} 1070}
1153 1071
1154static int log_sql_open(apr_pool_t *pc, apr_pool_t *p, apr_pool_t *pt, server_rec *s) 1072static int log_sql_open(apr_pool_t *pc, apr_pool_t *p, apr_pool_t *pt, server_rec *s)
1073#elif defined(WITH_APACHE13)
1074static void log_sql_child_init(server_rec *s, apr_pool_t *p)
1075#endif
1155{ 1076{
1156 int retval; 1077 int retval;
1157 /* Open a link to the database */ 1078 /* Open a link to the database */
1158 retval = open_logdb_link(s); 1079 retval = open_logdb_link(s);
1159 if (!retval) 1080 if (!retval)
1160 ap_log_error(APLOG_MARK,APLOG_ERR,0,s,"mod_log_sql: child spawned but unable to open database link"); 1081 log_error(APLOG_MARK,APLOG_ERR,s,"mod_log_sql: child spawned but unable to open database link");
1161 1082
1162 #ifdef DEBUG 1083 #ifdef DEBUG
1163 if ( (retval == 1) || (retval == 2) ) 1084 if ( (retval == 1) || (retval == 2) )
1164 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,s,"mod_log_sql: open_logdb_link successful"); 1085 log_error(APLOG_MARK,APLOG_DEBUG,s,"mod_log_sql: open_logdb_link successful");
1165 if (retval == 3) 1086 if (retval == 3)
1166 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,s,"mod_log_sql: open_logdb_link said that preservation is forced"); 1087 log_error(APLOG_MARK,APLOG_DEBUG,s,"mod_log_sql: open_logdb_link said that preservation is forced");
1167 #endif 1088 #endif
1089#if defined(WITH_APACHE20)
1168 return OK; 1090 return OK;
1091#endif
1169} 1092}
1170/* 1093/*
1171void *log_sql_initializer(server_rec *main_server, apr_pool_t *p) 1094void *log_sql_initializer(server_rec *main_server, apr_pool_t *p)
@@ -1183,6 +1106,23 @@ void *log_sql_initializer(server_rec *main_server, apr_pool_t *p)
1183} 1106}
1184 */ 1107 */
1185 1108
1109#if defined(WITH_APACHE20)
1110static int log_sql_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
1111#elif defined(WITH_APACHE13)
1112static void log_sql_pre_config(server_rec *s, apr_pool_t *p)
1113#endif
1114{
1115 /* Initialize Global configuration */
1116 if (!global_config.socketfile)
1117 global_config.socketfile = "/tmp/mysql.sock";
1118 if (!global_config.tcpport)
1119 global_config.tcpport = 3306;
1120
1121#if defined(WITH_APACHE20)
1122 return OK;
1123#endif
1124}
1125
1186/* 1126/*
1187 * This function gets called to create a per-server configuration 1127 * This function gets called to create a per-server configuration
1188 * record. It will always be called for the main server and 1128 * record. It will always be called for the main server and
@@ -1192,15 +1132,6 @@ void *log_sql_initializer(server_rec *main_server, apr_pool_t *p)
1192 * The return value is a pointer to the created module-specific 1132 * The return value is a pointer to the created module-specific
1193 * structure. 1133 * structure.
1194 */ 1134 */
1195static int log_sql_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
1196{
1197 /* Initialize Global configuration */
1198 memset(&global_config,0,sizeof(global_config_t));
1199 global_config.socketfile = "/tmp/mysql.sock";
1200 global_config.tcpport = 3306;
1201 return OK;
1202}
1203
1204static void *log_sql_make_state(apr_pool_t *p, server_rec *s) 1135static void *log_sql_make_state(apr_pool_t *p, server_rec *s)
1205{ 1136{
1206 logsql_state *cls = (logsql_state *) apr_pcalloc(p, sizeof(logsql_state)); 1137 logsql_state *cls = (logsql_state *) apr_pcalloc(p, sizeof(logsql_state));
@@ -1460,7 +1391,7 @@ static int log_sql_transaction(request_rec *orig)
1460 global_config.insertdelayed?"delayed":"", cls->notes_table_name, itemsets); 1391 global_config.insertdelayed?"delayed":"", cls->notes_table_name, itemsets);
1461 1392
1462 #ifdef DEBUG 1393 #ifdef DEBUG
1463 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,orig->server,"mod_log_sql: note string: %s", note_query); 1394 log_error(APLOG_MARK,APLOG_DEBUG,orig->server,"mod_log_sql: note string: %s", note_query);
1464 #endif 1395 #endif
1465 } 1396 }
1466 1397
@@ -1490,7 +1421,7 @@ static int log_sql_transaction(request_rec *orig)
1490 global_config.insertdelayed?"delayed":"", cls->hout_table_name, itemsets); 1421 global_config.insertdelayed?"delayed":"", cls->hout_table_name, itemsets);
1491 1422
1492 #ifdef DEBUG 1423 #ifdef DEBUG
1493 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,orig->server,"mod_log_sql: header_out string: %s", hout_query); 1424 log_error(APLOG_MARK,APLOG_DEBUG,orig->server,"mod_log_sql: header_out string: %s", hout_query);
1494 #endif 1425 #endif
1495 } 1426 }
1496 1427
@@ -1521,7 +1452,7 @@ static int log_sql_transaction(request_rec *orig)
1521 global_config.insertdelayed?"delayed":"", cls->hin_table_name, itemsets); 1452 global_config.insertdelayed?"delayed":"", cls->hin_table_name, itemsets);
1522 1453
1523 #ifdef DEBUG 1454 #ifdef DEBUG
1524 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,orig->server,"mod_log_sql: header_in string: %s", hin_query); 1455 log_error(APLOG_MARK,APLOG_DEBUG,orig->server,"mod_log_sql: header_in string: %s", hin_query);
1525 #endif 1456 #endif
1526 } 1457 }
1527 1458
@@ -1553,7 +1484,7 @@ static int log_sql_transaction(request_rec *orig)
1553 global_config.insertdelayed?"delayed":"", cls->cookie_table_name, itemsets); 1484 global_config.insertdelayed?"delayed":"", cls->cookie_table_name, itemsets);
1554 1485
1555 #ifdef DEBUG 1486 #ifdef DEBUG
1556 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,orig->server,"mod_log_sql: cookie string: %s", cookie_query); 1487 log_error(APLOG_MARK,APLOG_DEBUG,orig->server,"mod_log_sql: cookie string: %s", cookie_query);
1557 #endif 1488 #endif
1558 } 1489 }
1559 1490
@@ -1563,7 +1494,7 @@ static int log_sql_transaction(request_rec *orig)
1563 global_config.insertdelayed?"delayed":"", cls->transfer_table_name, fields, values); 1494 global_config.insertdelayed?"delayed":"", cls->transfer_table_name, fields, values);
1564 1495
1565 #ifdef DEBUG 1496 #ifdef DEBUG
1566 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,r->server,"mod_log_sql: access string: %s", access_query); 1497 log_error(APLOG_MARK,APLOG_DEBUG,r->server,"mod_log_sql: access string: %s", access_query);
1567 #endif 1498 #endif
1568 1499
1569 /* If the person activated force-preserve, go ahead and push all the entries 1500 /* If the person activated force-preserve, go ahead and push all the entries
@@ -1571,7 +1502,7 @@ static int log_sql_transaction(request_rec *orig)
1571 */ 1502 */
1572 if (global_config.forcepreserve) { 1503 if (global_config.forcepreserve) {
1573 #ifdef DEBUG 1504 #ifdef DEBUG
1574 ap_log_error(APLOG_MARK,APLOG_DEBUG,0,orig->server,"mod_log_sql: preservation forced"); 1505 log_error(APLOG_MARK,APLOG_DEBUG,orig->server,"mod_log_sql: preservation forced");
1575 #endif 1506 #endif
1576 preserve_entry(orig, access_query); 1507 preserve_entry(orig, access_query);
1577 if ( note_query != NULL ) 1508 if ( note_query != NULL )
@@ -1610,7 +1541,7 @@ static int log_sql_transaction(request_rec *orig)
1610 return OK; 1541 return OK;
1611 } else { 1542 } else {
1612 /* Whew, we got the DB link back */ 1543 /* Whew, we got the DB link back */
1613 ap_log_error(APLOG_MARK,APLOG_NOTICE,0,orig->server,"mod_log_sql: child established database connection"); 1544 log_error(APLOG_MARK,APLOG_NOTICE,orig->server,"mod_log_sql: child established database connection");
1614 } 1545 }
1615 } 1546 }
1616 1547
@@ -1745,6 +1676,7 @@ static const command_rec log_sql_cmds[] = {
1745 , 1676 ,
1746 {NULL} 1677 {NULL}
1747}; 1678};
1679#if defined(WITH_APACHE20)
1748/* The configuration array that sets up the hooks into the module. */ 1680/* The configuration array that sets up the hooks into the module. */
1749static void register_hooks(apr_pool_t *p) { 1681static void register_hooks(apr_pool_t *p) {
1750 ap_hook_pre_config(log_sql_pre_config, NULL, NULL, APR_HOOK_REALLY_FIRST); 1682 ap_hook_pre_config(log_sql_pre_config, NULL, NULL, APR_HOOK_REALLY_FIRST);
@@ -1762,3 +1694,30 @@ module AP_MODULE_DECLARE_DATA log_sql_module = {
1762 log_sql_cmds, /* command handlers */ 1694 log_sql_cmds, /* command handlers */
1763 register_hooks /* register hooks */ 1695 register_hooks /* register hooks */
1764}; 1696};
1697#elif defined(WITH_APACHE13)
1698/* The configuration array that sets up the hooks into the module. */
1699module log_sql_module = {
1700 STANDARD_MODULE_STUFF,
1701 log_sql_pre_config, /* module initializer */
1702 NULL, /* create per-dir config */
1703 NULL, /* merge per-dir config */
1704 log_sql_make_state, /* create server config */
1705 log_sql_merge_state, /* merge server config */
1706 log_sql_cmds, /* config directive table */
1707 NULL, /* [9] content handlers */
1708 NULL, /* [2] URI-to-filename translation */
1709 NULL, /* [5] check/validate user_id */
1710 NULL, /* [6] check authorization */
1711 NULL, /* [4] check access by host */
1712 NULL, /* [7] MIME type checker/setter */
1713 NULL, /* [8] fixups */
1714 log_sql_transaction, /* [10] logger */
1715 NULL /* [3] header parser */
1716#if MODULE_MAGIC_NUMBER >= 19970728 /* 1.3-dev or later support these additionals... */
1717 ,log_sql_child_init, /* child process initializer */
1718 log_sql_child_exit, /* process exit/cleanup */
1719 NULL /* [1] post read-request */
1720#endif
1721
1722};
1723#endif