I recently created a port of mod_jk-1.2.1 for OpenBSD and needed to make
some minor patches to mod_jk. OpenBSD 3.2 has Apache 1.3.26 configured as
ServerType standalone, to chroot to /var/www and run as user www by default.
This combination requires a few minor patches so that mod_jk will continue
to work after an Apache restart.

Both jk_set_worker_file and jk_set_log_file need to call
ap_server_strip_chroot to account for the path changes while chrooted.

The log file is initially created as user/group = root/daemon, but after a
restart Apache is running as www/www so it doesn't have permission to reopen
the log file. In order to have the log file continue working after a
restart, I patched jk_init. Instead of setting conf->log to NULL when
jk_open_file_logger fails, I set it to main_log. In other words, if the new
log file can't be opened it falls back to the already open one. Other
possible solutions are to change the user and/or group of the log file to
match the Apache User/Group directives, however if the admin changes the log
file name the open will still fail unless the directory has write access for
the Apache User/Group.

I made some Makefile.in patches to allow the object files to be built
outside the source tree. I think these patches will work for other archs/OSs
too.

Please review and consider commiting. Please cc me if replying. Thank You.

-Kurt
$OpenBSD$
--- apache-1.3/mod_jk.c.orig    Tue Nov 26 12:26:25 2002
+++ apache-1.3/mod_jk.c Mon Dec  9 01:59:18 2002
@@ -734,6 +734,8 @@ static const char *jk_set_worker_file(cm
 
     /* we need an absolut path */
     conf->worker_file = ap_server_root_relative(cmd->pool,worker_file);
+    ap_server_strip_chroot(conf->worker_file,0);
+
     if (conf->worker_file == worker_file)
         conf->worker_file = ap_pstrdup(cmd->pool,worker_file);
  
@@ -762,6 +764,8 @@ static const char *jk_set_log_file(cmd_p
 
     /* we need an absolut path */
     conf->log_file = ap_server_root_relative(cmd->pool,log_file);
+    ap_server_strip_chroot(conf->log_file,0);
+
     if ( conf->log_file == log_file)
         conf->log_file = ap_pstrdup(cmd->pool,log_file);
  
@@ -1742,7 +1746,7 @@ static void jk_init(server_rec *s, ap_po
     /* Open up log file */
     if(conf->log_file && conf->log_level >= 0) {
         if(!jk_open_file_logger(&(conf->log), conf->log_file, conf->log_level)) {
-            conf->log = NULL;
+            conf->log = main_log;
         } else {
             main_log = conf->log;
         }
$OpenBSD$
--- common/Makefile.in.orig     Thu Dec  5 11:30:30 2002
+++ common/Makefile.in  Thu Dec  5 11:32:29 2002
@@ -19,7 +19,7 @@ include list.mk
 JAVA_INCL=-I @JAVA_HOME@/include -I @JAVA_HOME@/include/@OS@
 CFLAGS=@apache_include@ @CFLAGS@ ${APXSCFLAGS} ${APXSCPPFLAGS} ${JAVA_INCL}
 
-include ../scripts/build/rules.mk
+include @top_srcdir@/scripts/build/rules.mk
 
 JK=./
 
$OpenBSD$
--- apache-1.3/Makefile.in.orig Tue Nov 26 12:26:25 2002
+++ apache-1.3/Makefile.in      Fri Dec  6 05:30:44 2002
@@ -1,6 +1,8 @@
 
 ## configure should make the Makefile out of this file.
-
+srcdir=@srcdir@
+top_srcdir=@top_srcdir@
+VPATH=@srcdir@
 APXS=@APXS@
 OS=@OS@
 JAVA_HOME=@JAVA_HOME@
@@ -17,14 +19,13 @@ libexecdir=${APACHE_DIR}/libexec
 JK_DIR := ..
 BUILD_DIR = ${JK_DIR}/../build/jk/apache13
 
-#VPATH=.:../common
 APACHE_FILES = Makefile.tmpl Makefile.libdir libjk.module
 
 JK=../common/
-JK_INCL=-DUSE_APACHE_MD5 -I ${JK}
+JK_INCL=-DUSE_APACHE_MD5 -I ${top_srcdir}/common
 JAVA_INCL=-I ${JAVA_HOME}/include -I ${JAVA_HOME}/include/${OS}
 JAVA_LIB=-L ${JAVA_HOME}/jre/lib/${ARCH} -L ${JAVA_HOME}/lib/${ARCH}/native_threads
-APACHE_CFLAGS=@apache_include@ @APXSCFLAGS@ @APXSCPPFLAGS@ -I../common
+APACHE_CFLAGS=@apache_include@ @APXSCFLAGS@ @APXSCPPFLAGS@ -I${top_srcdir}/common
 
 # Compile commands
 JK_CFLAGS  = $(JK_INCL) $(JAVA_INCL) $(APACHE_CFLAGS)

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to