From 7c378cc1fac4e9fec1ca32d8d314ea86761a7404 Mon Sep 17 00:00:00 2001
From: Edward Rudd
Date: Thu, 29 Apr 2004 21:19:30 +0000
Subject: win32 updates and build script added LogSQLDisablePreserve set
default of preserve file to root_relative logs/mod_log_sql-preserve
---
CHANGELOG | 9 ++++++++
build-apache2.bat | 40 +++++++++++++++++++++++++++++++++
mod_log_sql.c | 64 +++++++++++++++++++++++++++++++++++++++++++++--------
mod_log_sql_mysql.c | 30 ++++++++++++++++---------
winconfig.h | 25 +++++++++++----------
5 files changed, 137 insertions(+), 31 deletions(-)
create mode 100644 build-apache2.bat
diff --git a/CHANGELOG b/CHANGELOG
index f0540f8..4beccec 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,12 @@
+1.98: 2004-04-?
+* re-fixed apache.m4 to better detect APR and APU code
+* fixed for win32 compilation under apache 2
+* lowered minumum required apache 2 version to 2.0.40 (RH9)
+* Added LogSQLDisablePreserve to disable the preserve file.
+* Changed default preserve file location to logs/mod_log_sql-preserve
+ And made LogSQLPreserveFile root relative.
+* fixed bug where preserve file wouldn't be created in apache 2
+
1.97: 2004-04-08
* fixed apache.m4 to work with apache 2 setups with different include
directories for APR and APU then core Apache
diff --git a/build-apache2.bat b/build-apache2.bat
new file mode 100644
index 0000000..f44109c
--- /dev/null
+++ b/build-apache2.bat
@@ -0,0 +1,40 @@
+@echo off
+rem path to Microsoft SDK installation
+SET DIR_MSSDK=C:\Program Files\Microsoft SDK
+rem path to apache2 installation
+SET DIR_APACHE=C:\Program Files\Apache Group\Apache2
+rem path to mysql 4.0 installation
+SET DIR_MYSQL=C:\MySQL
+rem Can be set to opt or debug
+SET LIB_MYSQL=opt
+
+copy /Y winconfig.h config.h
+mkdir Release
+cd Release
+Rem Compile all the source code
+echo /MD /W3 /Zi /O2 /DNDEBUG /D_WINDOWS /DWIN32 > RESP_c.txt
+echo /Fd"mod_log_sql" /FD >> RESP_c.txt
+echo /DHAVE_CONFIG_H /DWITH_APACHE20 /DLOGSQL_DECLARE_EXPORT >> RESP_c.txt
+echo /I.. >> RESP_c.txt
+echo /I"%DIR_MSSDK%\Include" >> RESP_c.txt
+echo /I"%DIR_APACHE%\Include" >> RESP_c.txt
+echo /I"%DIR_MYSQL%\Include" >> RESP_c.txt
+cl @RESP_c.txt /c ..\mod_log_sql.c ..\mod_log_sql_mysql.c
+
+rem link main module
+echo /MACHINE:I386 /SUBSYSTEM:windows > RESP_l.txt
+echo /OUT:mod_log_sql.so /DLL /OPT:REF /DEBUG >> RESP_l.txt
+echo /LIBPATH:"%DIR_APACHE%\lib" >> RESP_l.txt
+echo libapr.lib libaprutil.lib libhttpd.lib >> RESP_l.txt
+link @RESP_l.txt mod_log_sql.obj
+
+rem link mysql module
+echo /MACHINE:I386 /SUBSYSTEM:windows > RESP_l.txt
+echo /OUT:mod_log_sql_mysql.so /DLL /OPT:REF /DEBUG >> RESP_l.txt
+echo /LIBPATH:"%DIR_APACHE%\lib" >> RESP_l.txt
+echo /LIBPATH:"%DIR_MYSQL%\lib\%LIB_MYSQL%" >> RESP_l.txt
+echo /NODEFAULTLIB:LIBCMT.lib >> RESP_l.txt
+echo libapr.lib libaprutil.lib libhttpd.lib >> RESP_l.txt
+echo libmysql.lib mod_log_sql.lib >> RESP_l.txt
+link @RESP_l.txt mod_log_sql_mysql.obj
+cd ..
diff --git a/mod_log_sql.c b/mod_log_sql.c
index 83a303a..0ba1bf6 100644
--- a/mod_log_sql.c
+++ b/mod_log_sql.c
@@ -36,7 +36,7 @@
#define DEFAULT_HIN_TABLE_NAME "headers_in"
#define DEFAULT_HOUT_TABLE_NAME "headers_out"
#define DEFAULT_COOKIE_TABLE_NAME "cookies"
-#define DEFAULT_PRESERVE_FILE "/tmp/sql-preserve"
+#define DEFAULT_PRESERVE_FILE "logs/mod_log_sql-preserve"
/* -------------*
* DECLARATIONS *
@@ -54,6 +54,7 @@ typedef struct {
int massvirtual;
int createtables;
int forcepreserve;
+ int disablepreserve;
char *machid;
int announce;
logsql_dbconnection db;
@@ -193,14 +194,20 @@ static void preserve_entry(request_rec *r, const char *query)
#if defined(WITH_APACHE20)
apr_file_t *fp;
apr_status_t result;
- result = apr_file_open(&fp, cls->preserve_file,APR_APPEND, APR_OS_DEFAULT, r->pool);
#elif defined(WITH_APACHE13)
FILE *fp;
int result;
+ #endif
+ /* If preserve file is disabled bail out */
+ if (global_config.disablepreserve)
+ return;
+ #if defined(WITH_APACHE20)
+ result = apr_file_open(&fp, cls->preserve_file,APR_APPEND | APR_WRITE | APR_CREATE, APR_OS_DEFAULT, r->pool);
+ #elif defined(WITH_APACHE13)
fp = ap_pfopen(r->pool, cls->preserve_file, "a");
result = (fp)?0:errno;
- #endif
- if (result != APR_SUCCESS) {
+ #endif
+ if (result != APR_SUCCESS) {
log_error(APLOG_MARK, APLOG_ERR, result, r->server,
"attempted append of local preserve file '%s' but failed.",cls->preserve_file);
} else {
@@ -272,6 +279,27 @@ static const char *set_server_string_slot(cmd_parms *cmd,
return NULL;
}
+static const char *set_server_file_slot(cmd_parms *cmd,
+ void *struct_ptr,
+ const char *arg)
+{
+ void *ptr = ap_get_module_config(cmd->server->module_config,
+ &log_sql_module);
+ int offset = (int)(long)cmd->info;
+ const char *path;
+
+ path = ap_server_root_relative(cmd->pool, arg);
+
+ if (!path) {
+ return apr_pstrcat(cmd->pool, "Invalid file path ",
+ arg, NULL);
+ }
+
+ *(const char **)((char*)ptr + offset) = path;
+
+ return NULL;
+}
+
static const char *set_logformat_slot(cmd_parms *cmd,
void *struct_ptr,
const char *arg)
@@ -325,6 +353,7 @@ static const char *set_log_sql_info(cmd_parms *cmd, void *dummy,
const char *host, const char *user, const char *pwd)
{
if (!user) { /* user is null, so only one arg passed */
+ /* TODO: to more error checking/force all params to be set */
apr_uri_t uri;
apr_uri_parse(cmd->pool, host, &uri);
if (uri.scheme) {
@@ -372,7 +401,7 @@ static const char *add_server_string_slot(cmd_parms *cmd,
void *ptr = ap_get_module_config(cmd->server->module_config,
&log_sql_module);
int offset = (int)(long)cmd->info;
- apr_array_header_t *ary = *(apr_array_header_t **)(ptr + offset);
+ apr_array_header_t *ary = *(apr_array_header_t **)((char *)ptr + offset);
addme = apr_array_push(ary);
*addme = apr_pstrdup(ary->pool, arg);
@@ -464,7 +493,17 @@ static void log_sql_module_init(server_rec *s, apr_pool_t *p)
if (global_config.announce) {
ap_add_version_component(p, PACKAGE_NAME"/"PACKAGE_VERSION);
}
-
+ /* ap_server_root_relative any default preserve file locations */
+ {
+ server_rec *cur_s;
+ const char *default_p = ap_server_root_relative(p, DEFAULT_PRESERVE_FILE);
+ for (cur_s = s; cur_s != NULL; cur_s= cur_s->next) {
+ logsql_state *cls = ap_get_module_config(cur_s->module_config,
+ &log_sql_module);
+ if (cls->preserve_file == DEFAULT_PRESERVE_FILE)
+ cls->preserve_file = default_p;
+ }
+ }
#if defined(WITH_APACHE20)
return OK;
#endif
@@ -693,7 +732,10 @@ static void *log_sql_merge_state(apr_pool_t *p, void *basev, void *addv)
if (child->preserve_file == DEFAULT_PRESERVE_FILE)
child->preserve_file = parent->preserve_file;
-
+ /* server_root_relative the preserve file location */
+ if (child->preserve_file == DEFAULT_PRESERVE_FILE)
+ child->preserve_file = ap_server_root_relative(p, DEFAULT_PRESERVE_FILE);
+
if (child->notes_table_name == DEFAULT_NOTES_TABLE_NAME)
child->notes_table_name = parent->notes_table_name;
@@ -1070,7 +1112,7 @@ static const command_rec log_sql_cmds[] = {
,
/* DB connection parameters */
AP_INIT_TAKE13("LogSQLLoginInfo", set_log_sql_info, NULL, RSRC_CONF,
- "The database connection URI in the form
driver://user:password@hostname:port/database")
+ "The database connection URI in the form "driver://user:password@hostname:port/database"")
,
AP_INIT_TAKE2("LogSQLDBParam", set_dbparam, NULL, RSRC_CONF,
"First argument is the DB parameter, second is the value to assign")
@@ -1079,7 +1121,11 @@ static const command_rec log_sql_cmds[] = {
(void *)APR_OFFSETOF(global_config_t, forcepreserve), RSRC_CONF,
"Forces logging to preserve file and bypasses database")
,
- AP_INIT_TAKE1("LogSQLPreserveFile", set_server_string_slot,
+ AP_INIT_FLAG("LogSQLDisablePreserve", set_global_flag_slot,
+ (void *)APR_OFFSETOF(global_config_t, disablepreserve), RSRC_CONF,
+ "Completely disables use of the preserve file")
+ ,
+ AP_INIT_TAKE1("LogSQLPreserveFile", set_server_file_slot,
(void *)APR_OFFSETOF(logsql_state,preserve_file), RSRC_CONF,
"Name of the file to use for data preservation during database downtime")
,
diff --git a/mod_log_sql_mysql.c b/mod_log_sql_mysql.c
index 3749d64..e8a149e 100644
--- a/mod_log_sql_mysql.c
+++ b/mod_log_sql_mysql.c
@@ -109,13 +109,22 @@ static const char *log_sql_mysql_escape(const char *from_str, apr_pool_t *p,
return from_str;
}
}
-
+#if defined(WIN32)
+#define SIGNAL_GRAB
+#define SIGNAL_RELEASE
+#define SIGNAL_VAR
+#else
+#define SIGNAL_VAR void (*handler) (int)
+#define SIGNAL_GRAB handler = signal(SIGPIPE, SIG_IGN)
+#define SIGNAL_RELEASE signal(SIGPIPE, handler);
+#endif
/* Run a mysql insert query and return a categorized error or success */
static logsql_query_ret log_sql_mysql_query(request_rec *r,logsql_dbconnection *db,
const char *query)
{
int retval;
- void (*handler) (int);
+ SIGNAL_VAR
+
unsigned int real_error = 0;
/*const char *real_error_str = NULL;*/
@@ -124,12 +133,13 @@ static logsql_query_ret log_sql_mysql_query(request_rec *r,logsql_dbconnection *
if (!dblink) {
return LOGSQL_QUERY_NOLINK;
}
+
/* A failed mysql_query() may send a SIGPIPE, so we ignore that signal momentarily. */
- handler = signal(SIGPIPE, SIG_IGN);
+ SIGNAL_GRAB
/* Run the query */
if (!(retval = mysql_query(dblink, query))) {
- signal(SIGPIPE, handler);
+ SIGNAL_RELEASE
return LOGSQL_QUERY_SUCCESS;
}
/* Check to see if the error is "nonexistent table" */
@@ -138,12 +148,12 @@ static logsql_query_ret log_sql_mysql_query(request_rec *r,logsql_dbconnection *
if (real_error == ER_NO_SUCH_TABLE) {
log_error(APLOG_MARK,APLOG_ERR,0, r->server,"table does not exist, preserving query");
/* Restore SIGPIPE to its original handler function */
- signal(SIGPIPE, handler);
+ SIGNAL_RELEASE
return LOGSQL_QUERY_NOTABLE;
}
/* Restore SIGPIPE to its original handler function */
- signal(SIGPIPE, handler);
+ SIGNAL_RELEASE
return LOGSQL_QUERY_FAIL;
}
@@ -153,7 +163,7 @@ static logsql_table_ret log_sql_mysql_create(request_rec *r, logsql_dbconnection
{
int retval;
const char *tabletype = apr_table_get(db->parms,"tabletype");
- void (*handler) (int);
+ SIGNAL_VAR
char *type_suffix = NULL;
char *create_prefix = "create table if not exists `";
@@ -220,16 +230,16 @@ static logsql_table_ret log_sql_mysql_create(request_rec *r, logsql_dbconnection
return LOGSQL_QUERY_NOLINK;
}
/* A failed mysql_query() may send a SIGPIPE, so we ignore that signal momentarily. */
- handler = signal(SIGPIPE, SIG_IGN);
+ SIGNAL_GRAB
/* Run the create query */
if ((retval = mysql_query(dblink, create_sql))) {
log_error(APLOG_MARK,APLOG_ERR,0, r->server,"failed to create table: %s",
table_name);
- signal(SIGPIPE, handler);
+ SIGNAL_RELEASE
return LOGSQL_TABLE_FAIL;
}
- signal(SIGPIPE, handler);
+ SIGNAL_RELEASE
return LOGSQL_TABLE_SUCCESS;
}
diff --git a/winconfig.h b/winconfig.h
index 89d1b24..107cb7d 100644
--- a/winconfig.h
+++ b/winconfig.h
@@ -2,16 +2,16 @@
/* config.h.in. Generated from configure.ac by autoheader. */
/* Define to 1 if you have the header file. */
-#define HAVE_INTTYPES_H 1
+/* #undef HAVE_INTTYPES_H */
/* Define to 1 if you have the `m' library (-lm). */
-#define HAVE_LIBM 1
+/* #undef HAVE_LIBM */
/* Define to 1 if you have the `mysqlclient' library (-lmysqlclient). */
#define HAVE_LIBMYSQLCLIENT 1
/* Define to 1 if you have the `z' library (-lz). */
-#define HAVE_LIBZ 1
+/* #undef HAVE_LIBZ */
/* Define to 1 if you have the header file. */
#define HAVE_LIMITS_H 1
@@ -20,31 +20,31 @@
#define HAVE_MEMORY_H 1
/* Define to 1 if you have the header file. */
-#define HAVE_MOD_SSL_H 1
+/* #undef HAVE_MOD_SSL_H */
/* Define to 1 if you have the `mysql_real_escape_string' function. */
#define HAVE_MYSQL_REAL_ESCAPE_STRING 1
/* Define to 1 if you have the header file. */
-#define HAVE_STDINT_H 1
+/* #undef HAVE_STDINT_H */
/* Define to 1 if you have the header file. */
-#define HAVE_STDLIB_H 1
+/* #undef HAVE_STDLIB_H 1
/* Define to 1 if you have the header file. */
-#define HAVE_STRINGS_H 1
+/* #undef HAVE_STRINGS_H */
/* Define to 1 if you have the header file. */
-#define HAVE_STRING_H 1
+/* #undef HAVE_STRING_H */
/* Define to 1 if you have the header file. */
-#define HAVE_SYS_STAT_H 1
+/* #undef HAVE_SYS_STAT_H */
/* Define to 1 if you have the header file. */
-#define HAVE_SYS_TYPES_H 1
+/* #undef HAVE_SYS_TYPES_H */
/* Define to 1 if you have the header file. */
-#define HAVE_UNISTD_H 1
+/* #undef HAVE_UNISTD_H */
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT ""
@@ -65,7 +65,7 @@
/* #undef STDC_HEADERS */
/* Define if we want to compile in SSL support. */
-#define WANT_SSL_LOGGING
+/* #undef WANT_SSL_LOGGING */
/* Define to 1 if we are compiling with Apache 1.3.x */
/* #undef WITH_APACHE13 */
@@ -75,3 +75,4 @@
/* Define to 1 if we are compiling with mysql */
#define WITH_MYSQL 1
+
--
cgit