summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--LAYOUT2
-rw-r--r--Makefile.in2
-rwxr-xr-xbuild/instdso.sh8
-rw-r--r--configure.in60
-rw-r--r--docs/manual/logs.xml2
-rw-r--r--docs/manual/mod/core.xml2
-rw-r--r--docs/manual/mod/mod_autoindex.xml4
-rw-r--r--include/httpd.h20
-rw-r--r--modules/arch/unix/mod_unixd.c5
-rw-r--r--modules/dav/fs/config6.m48
-rw-r--r--modules/dav/lock/config6.m48
-rw-r--r--modules/examples/mod_example_ipc.c2
-rw-r--r--modules/filters/mod_include.c2
-rw-r--r--modules/generators/mod_cgi.c5
-rw-r--r--modules/generators/mod_cgid.c2
-rw-r--r--modules/generators/mod_status.c12
-rw-r--r--modules/mappers/mod_rewrite.c2
-rw-r--r--modules/mappers/mod_userdir.c2
-rw-r--r--modules/proxy/config.m415
-rw-r--r--os/config.m44
-rw-r--r--os/os2/Makefile.in5
-rw-r--r--os/os2/config.m43
-rw-r--r--os/os2/core.mk7
-rw-r--r--os/os2/core_header.def19
-rw-r--r--os/os2/os.h39
-rw-r--r--os/os2/util_os2.c39
-rw-r--r--server/Makefile.in9
-rw-r--r--server/core.c4
-rw-r--r--server/gen_test_char.c8
-rw-r--r--server/mpm_common.c2
-rw-r--r--server/protocol.c6
-rw-r--r--server/request.c2
-rw-r--r--server/util.c10
-rw-r--r--server/util_script.c22
-rw-r--r--support/apxs.in2
-rw-r--r--support/fcgistarter.c2
-rw-r--r--support/rotatelogs.c6
37 files changed, 297 insertions, 55 deletions
diff --git a/LAYOUT b/LAYOUT
index a89a7e6fde..6052e237f9 100644
--- a/LAYOUT
+++ b/LAYOUT
@@ -143,6 +143,8 @@ os/ .....................
netware/ ................
+ os2/ ....................
+
unix/ ...................
win32/ ..................
diff --git a/Makefile.in b/Makefile.in
index 55a624804a..fdefae750a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -231,3 +231,5 @@ suexec:
x-local-distclean:
@rm -rf autom4te.cache
+
+include $(top_srcdir)/os/os2/core.mk
diff --git a/build/instdso.sh b/build/instdso.sh
index 2a78edda38..7716b29898 100755
--- a/build/instdso.sh
+++ b/build/instdso.sh
@@ -53,6 +53,14 @@ CMD="$SH_LIBTOOL --mode=install cp $DSOARCHIVE $TARGETDIR/"
echo $CMD
$CMD || exit $?
+if test "$SYS" = "OS/2"
+then
+ # on OS/2, aplibtool --install doesn't copy the .la files & we can't
+ # rename DLLs to have a .so extension or they won't load so none of the
+ # steps below make sense.
+ exit 0
+fi
+
if test -s "$TARGETDIR/$DSOARCHIVE_BASENAME"
then
DLNAME=`sed -n "/^dlname=/{s/.*='\([^']*\)'/\1/;p;}" $TARGETDIR/$DSOARCHIVE_BASENAME`
diff --git a/configure.in b/configure.in
index 44fcf3ff0e..f7b22f1fab 100644
--- a/configure.in
+++ b/configure.in
@@ -227,33 +227,55 @@ APR_ADDTO(INCLUDES, $APU_INCLUDES)
dnl Add in path to PCRE includes
APR_ADDTO(INCLUDES, $PCRE_INCLUDES)
-if test "x$LTFLAGS" = "x"; then
- LTFLAGS='--silent'
-fi
-my_libtool=`$apr_config --apr-libtool`
-LIBTOOL="$my_libtool \$(LTFLAGS)"
-libtoolversion=`$my_libtool --version`
-case $libtoolversion in
- *1.[[45]]* | *[[2-9]].[[0-9]]*)
- SH_LIBTOOL='$(LIBTOOL)'
- SHLTCFLAGS="-prefer-pic"
- LTCFLAGS="-prefer-non-pic -static"
- ;;
- *)
- SH_LIBTOOL='$(SHELL) $(top_builddir)/shlibtool $(LTFLAGS)'
- SHLTCFLAGS=""
- LTCFLAGS=""
- ;;
+echo $ac_n "${nl}Applying OS-specific hints for httpd ...${nl}"
+
+case $host in
+ *os2*)
+ # Use a custom made libtool replacement
+ echo "using aplibtool"
+ LIBTOOL="$abs_srcdir/srclib/apr/build/aplibtool"
+ SH_LIBTOOL="$LIBTOOL --shared --export-all"
+ SH_LIBS="\$(ALL_LIBS)"
+ CORE_IMPLIB_FILE="ApacheCoreOS2.la"
+ CORE_IMPLIB="$abs_srcdir/server/$CORE_IMPLIB_FILE"
+ MK_IMPLIB="emximp"
+ other_targets="$other_targets os2core"
+ INSTALL_PROG_FLAGS="-e .exe"
+ SHLTCFLAGS=""
+ LTCFLAGS=""
+ ;;
+ *)
+ if test "x$LTFLAGS" = "x"; then
+ LTFLAGS='--silent'
+ fi
+ my_libtool=`$apr_config --apr-libtool`
+ LIBTOOL="$my_libtool \$(LTFLAGS)"
+ libtoolversion=`$my_libtool --version`
+ case $libtoolversion in
+ *1.[[45]]* | *[[2-9]].[[0-9]]*)
+ SH_LIBTOOL='$(LIBTOOL)'
+ SHLTCFLAGS="-prefer-pic"
+ LTCFLAGS="-prefer-non-pic -static"
+ ;;
+ *)
+ SH_LIBTOOL='$(SHELL) $(top_builddir)/shlibtool $(LTFLAGS)'
+ SHLTCFLAGS=""
+ LTCFLAGS=""
+ ;;
+ esac
+ ;;
esac
APACHE_SUBST(SHLTCFLAGS)
APACHE_SUBST(LTCFLAGS)
-echo $ac_n "${nl}Applying OS-specific hints for httpd ...${nl}"
-
case $host in
*-apple-aux3*)
APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
;;
+ *os2-emx*)
+ APR_SETVAR(APACHE_MPM, [mpmt_os2])
+ APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
+ ;;
*-linux-*)
case `uname -r` in
2.[[2-9]]* )
diff --git a/docs/manual/logs.xml b/docs/manual/logs.xml
index 555c101733..591baa9773 100644
--- a/docs/manual/logs.xml
+++ b/docs/manual/logs.xml
@@ -73,7 +73,7 @@
<p>The error log is usually written to a file (typically
<code>error_log</code> on Unix systems and
- <code>error.log</code> on Windows). On Unix systems it
+ <code>error.log</code> on Windows and OS/2). On Unix systems it
is also possible to have the server send errors to
<code>syslog</code> or <a href="#piped">pipe them to a
program</a>.</p>
diff --git a/docs/manual/mod/core.xml b/docs/manual/mod/core.xml
index 8ade8d8ed9..e5ac16265c 100644
--- a/docs/manual/mod/core.xml
+++ b/docs/manual/mod/core.xml
@@ -1041,7 +1041,7 @@ in case of an error</description>
<name>ErrorLog</name>
<description>Location where the server will log errors</description>
<syntax> ErrorLog <var>file-path</var>|syslog[:<var>facility</var>]</syntax>
-<default>ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows)</default>
+<default>ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows and OS/2)</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
diff --git a/docs/manual/mod/mod_autoindex.xml b/docs/manual/mod/mod_autoindex.xml
index 8613d9ca66..d5c3a61c5a 100644
--- a/docs/manual/mod/mod_autoindex.xml
+++ b/docs/manual/mod/mod_autoindex.xml
@@ -774,8 +774,8 @@ indexing</description>
<dd>This returns the <code>Last-Modified</code> and <code>ETag</code>
values for the listed directory in the HTTP header. It is only valid
if the operating system and file system return appropriate stat()
- results. Some Unix systems do so, as do Win32's
- NTFS volumes. Win32 FAT volumes, for example, do not.
+ results. Some Unix systems do so, as do OS2's JFS and Win32's
+ NTFS volumes. OS2 and Win32 FAT volumes, for example, do not.
Once this feature is enabled, the client or proxy can track
changes to the list of files when they perform a <code>HEAD</code>
request. Note some operating systems correctly track new and
diff --git a/include/httpd.h b/include/httpd.h
index b9a20b7662..a7a7025ca8 100644
--- a/include/httpd.h
+++ b/include/httpd.h
@@ -75,7 +75,10 @@ extern "C" {
* file with a relative pathname will have this added.
*/
#ifndef HTTPD_ROOT
-#if defined(WIN32)
+#ifdef OS2
+/** Set default for OS/2 file system */
+#define HTTPD_ROOT "/os2httpd"
+#elif defined(WIN32)
/** Set default for Windows file system */
#define HTTPD_ROOT "/apache"
#elif defined (NETWARE)
@@ -100,7 +103,13 @@ extern "C" {
* directive.
*/
#ifndef DOCUMENT_LOCATION
+#ifdef OS2
+/* Set default for OS/2 file system */
+#define DOCUMENT_LOCATION HTTPD_ROOT "/docs"
+#else
+/* Set default for non OS/2 file system */
#define DOCUMENT_LOCATION HTTPD_ROOT "/htdocs"
+#endif
#endif /* DOCUMENT_LOCATION */
/** Maximum number of dynamically loaded modules */
@@ -113,7 +122,7 @@ extern "C" {
/** The name of the log files */
#ifndef DEFAULT_ERRORLOG
-#if defined(WIN32)
+#if defined(OS2) || defined(WIN32)
#define DEFAULT_ERRORLOG "logs/error.log"
#else
#define DEFAULT_ERRORLOG "logs/error_log"
@@ -122,7 +131,12 @@ extern "C" {
/** Define this to be what your per-directory security files are called */
#ifndef DEFAULT_ACCESS_FNAME
+#ifdef OS2
+/* Set default for OS/2 file system */
+#define DEFAULT_ACCESS_FNAME "htaccess"
+#else
#define DEFAULT_ACCESS_FNAME ".htaccess"
+#endif
#endif /* DEFAULT_ACCESS_FNAME */
/** The name of the server config file */
@@ -1589,7 +1603,7 @@ AP_DECLARE(char *) ap_make_full_path(apr_pool_t *a, const char *dir, const char
* Test if the given path has an an absolute path.
* @param p The pool to allocate from
* @param dir The directory name
- * @note The converse is not necessarily true, some OS's (Win32/Netware) have
+ * @note The converse is not necessarily true, some OS's (Win32/OS2/Netware) have
* multiple forms of absolute paths. This only reports if the path is absolute
* in a canonical sense.
*/
diff --git a/modules/arch/unix/mod_unixd.c b/modules/arch/unix/mod_unixd.c
index bb4c6788e2..6dbd1de1c3 100644
--- a/modules/arch/unix/mod_unixd.c
+++ b/modules/arch/unix/mod_unixd.c
@@ -107,6 +107,8 @@ static int set_group_privs(void)
else
name = ap_unixd_config.user_name;
+#if !defined(OS2)
+ /* OS/2 doesn't support groups. */
/*
* Set the GID before initgroups(), since on some platforms
* setgid() is known to zap the group list.
@@ -126,6 +128,7 @@ static int set_group_privs(void)
"and Group %u", name, (unsigned)ap_unixd_config.group_id);
return -1;
}
+#endif /* !defined(OS2) */
}
return 0;
}
@@ -210,7 +213,7 @@ unixd_set_user(cmd_parms *cmd, void *dummy,
ap_unixd_config.user_name = arg;
ap_unixd_config.user_id = ap_uname2id(arg);
-#if !defined (BIG_SECURITY_HOLE)
+#if !defined (BIG_SECURITY_HOLE) && !defined (OS2)
if (ap_unixd_config.user_id == 0) {
return "Error:\tApache has not been designed to serve pages while\n"
"\trunning as root. There are known race conditions that\n"
diff --git a/modules/dav/fs/config6.m4 b/modules/dav/fs/config6.m4
index f86e3ff2a9..515111cd01 100644
--- a/modules/dav/fs/config6.m4
+++ b/modules/dav/fs/config6.m4
@@ -10,6 +10,14 @@ else
dav_fs_enable=$dav_enable
fi
+case "$host" in
+ *os2*)
+ # OS/2 DLLs must resolve all symbols at build time
+ # and we need some from main DAV module
+ dav_fs_objects="$dav_fs_objects ../main/mod_dav.la"
+ ;;
+esac
+
APACHE_MODULE(dav_fs, DAV provider for the filesystem, $dav_fs_objects, , $dav_fs_enable)
APACHE_MODPATH_FINISH
diff --git a/modules/dav/lock/config6.m4 b/modules/dav/lock/config6.m4
index 7ff2f0f4d0..bc35ee3c03 100644
--- a/modules/dav/lock/config6.m4
+++ b/modules/dav/lock/config6.m4
@@ -4,6 +4,14 @@ APACHE_MODPATH_INIT(dav/lock)
dav_lock_objects="mod_dav_lock.lo locks.lo"
+case "$host" in
+ *os2*)
+ # OS/2 DLLs must resolve all symbols at build time
+ # and we need some from main DAV module
+ dav_lock_objects="$dav_lock_objects ../main/mod_dav.la"
+ ;;
+esac
+
APACHE_MODULE(dav_lock, DAV provider for generic locking, $dav_lock_objects, , no)
APACHE_MODPATH_FINISH
diff --git a/modules/examples/mod_example_ipc.c b/modules/examples/mod_example_ipc.c
index d76a1ea6a0..ea1d3830c0 100644
--- a/modules/examples/mod_example_ipc.c
+++ b/modules/examples/mod_example_ipc.c
@@ -54,7 +54,7 @@
#include "http_protocol.h"
#include "ap_config.h"
-#if !defined(WIN32) && !defined(NETWARE)
+#if !defined(OS2) && !defined(WIN32) && !defined(NETWARE)
#include "unixd.h"
#define MOD_EXIPC_SET_MUTEX_PERMS /* XXX Apache should define something */
#endif
diff --git a/modules/filters/mod_include.c b/modules/filters/mod_include.c
index 4d1b5d401d..f407417848 100644
--- a/modules/filters/mod_include.c
+++ b/modules/filters/mod_include.c
@@ -3055,7 +3055,7 @@ static int include_fixup(request_rec *r)
r->handler = "default-handler";
}
else
-#if defined(WIN32) || defined(NETWARE)
+#if defined(OS2) || defined(WIN32) || defined(NETWARE)
/* These OS's don't support xbithack. This is being worked on. */
{
return DECLINED;
diff --git a/modules/generators/mod_cgi.c b/modules/generators/mod_cgi.c
index 359b3baa89..ce50608243 100644
--- a/modules/generators/mod_cgi.c
+++ b/modules/generators/mod_cgi.c
@@ -390,7 +390,12 @@ static apr_status_t run_cgi_child(apr_file_t **script_out,
#endif
#ifdef DEBUG_CGI
+#ifdef OS2
+ /* Under OS/2 need to use device con. */
+ FILE *dbg = fopen("con", "w");
+#else
FILE *dbg = fopen("/dev/tty", "w");
+#endif
int i;
#endif
diff --git a/modules/generators/mod_cgid.c b/modules/generators/mod_cgid.c
index cfa4157d19..27849eebe7 100644
--- a/modules/generators/mod_cgid.c
+++ b/modules/generators/mod_cgid.c
@@ -1369,7 +1369,7 @@ static int cgid_handler(request_rec *r)
return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
"attempt to include NPH CGI script");
-#if defined(WIN32)
+#if defined(OS2) || defined(WIN32)
#error mod_cgid does not work on this platform. If you teach it to, look
#error at mod_cgi.c for required code in this path.
#else
diff --git a/modules/generators/mod_status.c b/modules/generators/mod_status.c
index 7a2be8f8dc..8d10e437e2 100644
--- a/modules/generators/mod_status.c
+++ b/modules/generators/mod_status.c
@@ -425,8 +425,10 @@ static int status_handler(request_rec *r)
count, kbcount);
#ifdef HAVE_TIMES
- ap_rprintf(r, "CPULoad: %g\n",
- (tu + ts + tcu + tcs) / tick / up_time * 100.);
+ /* Allow for OS/2 not having CPU stats */
+ if (ts || tu || tcu || tcs)
+ ap_rprintf(r, "CPULoad: %g\n",
+ (tu + ts + tcu + tcs) / tick / up_time * 100.);
#endif
ap_rprintf(r, "Uptime: %ld\n", (long) (up_time));
@@ -447,11 +449,13 @@ static int status_handler(request_rec *r)
ap_rputs("</dt>\n", r);
#ifdef HAVE_TIMES
+ /* Allow for OS/2 not having CPU stats */
ap_rprintf(r, "<dt>CPU Usage: u%g s%g cu%g cs%g",
tu / tick, ts / tick, tcu / tick, tcs / tick);
- ap_rprintf(r, " - %.3g%% CPU load</dt>\n",
- (tu + ts + tcu + tcs) / tick / up_time * 100.);
+ if (ts || tu || tcu || tcs)
+ ap_rprintf(r, " - %.3g%% CPU load</dt>\n",
+ (tu + ts + tcu + tcs) / tick / up_time * 100.);
#endif
if (up_time > 0) {
diff --git a/modules/mappers/mod_rewrite.c b/modules/mappers/mod_rewrite.c
index a8c2b37703..b6c6620056 100644
--- a/modules/mappers/mod_rewrite.c
+++ b/modules/mappers/mod_rewrite.c
@@ -3760,11 +3760,13 @@ static int apply_rewrite_cond(rewritecond_entry *p, rewrite_ctx *ctx)
break;
case CONDPAT_FILE_LINK:
+#if !defined(OS2)
if ( apr_stat(&sb, input, APR_FINFO_MIN | APR_FINFO_LINK,
r->pool) == APR_SUCCESS
&& sb.filetype == APR_LNK) {
rc = 1;
}
+#endif
break;
case CONDPAT_FILE_DIR:
diff --git a/modules/mappers/mod_userdir.c b/modules/mappers/mod_userdir.c
index 7ad3770132..f6e3e5dc5f 100644
--- a/modules/mappers/mod_userdir.c
+++ b/modules/mappers/mod_userdir.c
@@ -64,7 +64,7 @@
#include "http_config.h"
#include "http_request.h"
-#if !defined(WIN32) && !defined(NETWARE)
+#if !defined(WIN32) && !defined(OS2) && !defined(NETWARE)
#define HAVE_UNIX_SUEXEC
#endif
diff --git a/modules/proxy/config.m4 b/modules/proxy/config.m4
index 29c0d10ce8..cd3ba0cca1 100644
--- a/modules/proxy/config.m4
+++ b/modules/proxy/config.m4
@@ -31,6 +31,21 @@ proxy_fdpass_objs="mod_proxy_fdpass.lo"
proxy_ajp_objs="mod_proxy_ajp.lo ajp_header.lo ajp_link.lo ajp_msg.lo ajp_utils.lo"
proxy_balancer_objs="mod_proxy_balancer.lo"
+case "$host" in
+ *os2*)
+ # OS/2 DLLs must resolve all symbols at build time and
+ # these sub-modules need some from the main proxy module
+ proxy_connect_objs="$proxy_connect_objs mod_proxy.la"
+ proxy_ftp_objs="$proxy_ftp_objs mod_proxy.la"
+ proxy_http_objs="$proxy_http_objs mod_proxy.la"
+ proxy_fcgi_objs="$proxy_fcgi_objs mod_proxy.la"
+ proxy_scgi_objs="$proxy_scgi_objs mod_proxy.la"
+ proxy_fdpass_objs="$proxy_fdpass_objs mod_proxy.la"
+ proxy_ajp_objs="$proxy_ajp_objs mod_proxy.la"
+ proxy_balancer_objs="$proxy_balancer_objs mod_proxy.la"
+ ;;
+esac
+
APACHE_MODULE(proxy_connect, Apache proxy CONNECT module, $proxy_connect_objs, , $proxy_mods_enable)
APACHE_MODULE(proxy_ftp, Apache proxy FTP module, $proxy_ftp_objs, , $proxy_mods_enable)
APACHE_MODULE(proxy_http, Apache proxy HTTP module, $proxy_http_objs, , $proxy_mods_enable)
diff --git a/os/config.m4 b/os/config.m4
index 5f98b6a8cb..31880911b0 100644
--- a/os/config.m4
+++ b/os/config.m4
@@ -1,6 +1,10 @@
AC_MSG_CHECKING(for target platform)
case $host in
+*pc-os2-emx*)
+ OS="os2"
+ OS_DIR=$OS
+ ;;
bs2000*)
OS="unix"
OS_DIR=$OS
diff --git a/os/os2/Makefile.in b/os/os2/Makefile.in
new file mode 100644
index 0000000000..fba497279b
--- /dev/null
+++ b/os/os2/Makefile.in
@@ -0,0 +1,5 @@
+
+LTLIBRARY_NAME = libos.la
+LTLIBRARY_SOURCES = util_os2.c
+
+include $(top_srcdir)/build/ltlib.mk
diff --git a/os/os2/config.m4 b/os/os2/config.m4
new file mode 100644
index 0000000000..b62d214e1d
--- /dev/null
+++ b/os/os2/config.m4
@@ -0,0 +1,3 @@
+if test "$OS" = "os2" ; then
+ APR_ADDTO(CFLAGS, [-DOS2 -O2])
+fi
diff --git a/os/os2/core.mk b/os/os2/core.mk
new file mode 100644
index 0000000000..639417e8e7
--- /dev/null
+++ b/os/os2/core.mk
@@ -0,0 +1,7 @@
+# Some rules for making a shared core dll on OS/2
+
+os2core: httpd.dll $(CORE_IMPLIB)
+ $(LIBTOOL) --mode=link gcc -Zstack 512 $(LDFLAGS) $(EXTRA_LDFLAGS) -o httpd $(CORE_IMPLIB)
+
+httpd.dll: $(PROGRAM_DEPENDENCIES) $(CORE_IMPLIB)
+ $(LINK) -Zdll $(EXTRA_LDFLAGS) -s -o $@ server/exports.lo modules.lo $(PROGRAM_DEPENDENCIES) $(AP_LIBS) server/ApacheCoreOS2.def
diff --git a/os/os2/core_header.def b/os/os2/core_header.def
new file mode 100644
index 0000000000..ec3703a669
--- /dev/null
+++ b/os/os2/core_header.def
@@ -0,0 +1,19 @@
+LIBRARY httpd INITINSTANCE
+DESCRIPTION "Apache Server Core"
+DATA NONSHARED
+
+EXPORTS
+ "main"
+
+; One for mod_dav from socket library
+ "_swaps"
+
+; And some more for mod_unique_id
+ "gethostname"
+ "gethostbyname"
+ "_swapl"
+ "h_errno"
+ "inet_ntoa"
+
+; mod_proxy needs this one
+ "inet_addr"
diff --git a/os/os2/os.h b/os/os2/os.h
new file mode 100644
index 0000000000..085dacf053
--- /dev/null
+++ b/os/os2/os.h
@@ -0,0 +1,39 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file os2/os.h
+ * @brief This file in included in all Apache source code. It contains definitions
+ * of facilities available on _this_ operating system (HAVE_* macros),
+ * and prototypes of OS specific functions defined in os.c or os-inline.c
+ *
+ * @defgroup APACHE_OS_OS2 os2
+ * @ingroup APACHE_OS
+ * @{
+ */
+
+#ifndef APACHE_OS_H
+#define APACHE_OS_H
+
+#define PLATFORM "OS/2"
+
+/* going away shortly... */
+#define HAVE_DRIVE_LETTERS
+#define HAVE_UNC_PATHS
+#define CASE_BLIND_FILESYSTEM
+
+#endif /* ! APACHE_OS_H */
+/** @} */
diff --git a/os/os2/util_os2.c b/os/os2/util_os2.c
new file mode 100644
index 0000000000..9156fb39ef
--- /dev/null
+++ b/os/os2/util_os2.c
@@ -0,0 +1,39 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define INCL_DOS
+#define INCL_DOSERRORS
+#include <os2.h>
+#include "ap_config.h"
+#include "httpd.h"
+#include "http_log.h"
+#include "os.h"
+#include <sys/time.h>
+#include <sys/signal.h>
+#include <ctype.h>
+#include <string.h>
+#include "apr_strings.h"
+
+
+AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
+ const request_rec *r,
+ apr_proc_t *newproc, const char *progname,
+ const char * const *args,
+ const char * const *env,
+ apr_procattr_t *attr, apr_pool_t *p)
+{
+ return apr_proc_create(newproc, progname, args, env, attr, p);
+}
diff --git a/server/Makefile.in b/server/Makefile.in
index 446c081200..17e5d13995 100644
--- a/server/Makefile.in
+++ b/server/Makefile.in
@@ -1,5 +1,6 @@
-CLEAN_TARGETS = gen_test_char test_char.h httpd.exp export_files \
+CLEAN_TARGETS = gen_test_char test_char.h \
+ ApacheCoreOS2.def httpd.exp export_files \
exports.c export_vars.h
SUBDIRS = mpm
@@ -69,6 +70,12 @@ exports.c: export_files
export_vars.h: export_files
$(AWK) -f $(top_srcdir)/build/make_var_export.awk `cat $?` > $@
+# Rule to make def file for OS/2 core dll
+ApacheCoreOS2.def: exports.c export_vars.h $(top_srcdir)/os/$(OS_DIR)/core_header.def
+ cat $(top_srcdir)/os/$(OS_DIR)/core_header.def > $@
+ $(CPP) $< $(ALL_CPPFLAGS) $(ALL_INCLUDES) | grep "ap_hack_" | sed -e 's/^.*[)]\(.*\);$$/ "\1"/' >> $@
+ $(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) export_vars.h | grep "^[a-z]" | sed -e 's/^\(.*\)$$/ "\1"/' >> $@
+
# Rule to make exp file for AIX DSOs
httpd.exp: exports.c export_vars.h
@echo "#! ." > $@
diff --git a/server/core.c b/server/core.c
index 52399784e5..ad39613929 100644
--- a/server/core.c
+++ b/server/core.c
@@ -1731,8 +1731,8 @@ AP_CORE_DECLARE_NONSTD(const char *) ap_limit_section(cmd_parms *cmd,
return errmsg;
}
-/* XXX: Bogus - need to do this differently (at least Netware suffers
- * the same problem!!!)
+/* XXX: Bogus - need to do this differently (at least OS2/Netware suffer
+ * the same problem!!!
* We use this in <DirectoryMatch> and <FilesMatch>, to ensure that
* people don't get bitten by wrong-cased regex matches
*/
diff --git a/server/gen_test_char.c b/server/gen_test_char.c
index 628556edd5..ee4a69fb9c 100644
--- a/server/gen_test_char.c
+++ b/server/gen_test_char.c
@@ -80,14 +80,14 @@ int main(int argc, char *argv[])
printf("\n ");
/* escape_shell_cmd */
-#if defined(WANT_WIN32)
- /* Win32 has many of the same vulnerable characters
+#if defined(WANT_WIN32) || defined(OS2)
+ /* Win32/OS2 have many of the same vulnerable characters
* as Unix sh, plus the carriage return and percent char.
* The proper escaping of these characters varies from unix
- * since Win32 uses carets or doubled-double quotes,
+ * since Win32/OS2 use carets or doubled-double quotes,
* and neither lf nor cr can be escaped. We escape unix
* specific as well, to assure that cross-compiled unix
- * applications behave similiarly when invoked on win32.
+ * applications behave similiarly when invoked on win32/os2.
*
* Rem please keep in-sync with apr's list in win32/filesys.c
*/
diff --git a/server/mpm_common.c b/server/mpm_common.c
index e7af61db8a..6988374d01 100644
--- a/server/mpm_common.c
+++ b/server/mpm_common.c
@@ -193,7 +193,7 @@ AP_DECLARE(gid_t) ap_gname2id(const char *name)
#ifndef HAVE_INITGROUPS
int initgroups(const char *name, gid_t basegid)
{
-#if defined(_OSD_POSIX) || defined(WIN32) || defined(NETWARE)
+#if defined(_OSD_POSIX) || defined(OS2) || defined(WIN32) || defined(NETWARE)
return 0;
#else
gid_t groups[NGROUPS_MAX];
diff --git a/server/protocol.c b/server/protocol.c
index fa7aecffb1..3491bdd755 100644
--- a/server/protocol.c
+++ b/server/protocol.c
@@ -529,8 +529,8 @@ AP_CORE_DECLARE(void) ap_parse_uri(request_rec *r, const char *uri)
r->uri = r->parsed_uri.path ? r->parsed_uri.path
: apr_pstrdup(r->pool, "/");
-#if defined(WIN32)
- /* Handle path translations and plug security hole.
+#if defined(OS2) || defined(WIN32)
+ /* Handle path translations for OS/2 and plug security hole.
* This will prevent "http://www.wherever.com/..\..\/" from
* returning a directory for the root drive.
*/
@@ -540,7 +540,7 @@ AP_CORE_DECLARE(void) ap_parse_uri(request_rec *r, const char *uri)
for (x = r->uri; (x = strchr(x, '\\')) != NULL; )
*x = '/';
}
-#endif /* WIN32 */
+#endif /* OS2 || WIN32 */
}
else {
r->args = NULL;
diff --git a/server/request.c b/server/request.c
index 45a8f64222..f34f9f5723 100644
--- a/server/request.c
+++ b/server/request.c
@@ -822,7 +822,7 @@ AP_DECLARE(int) ap_directory_walk(request_rec *r)
/* We will never skip '0' element components, e.g. plain old
* <Directory >, and <Directory "/"> are classified as zero
- * so that Win32/Netware etc all pick them up.
+ * so that Win32/Netware/OS2 etc all pick them up.
* Otherwise, skip over the mismatches.
*/
if (entry_core->d_components
diff --git a/server/util.c b/server/util.c
index 78ef22fa71..d476e54dbb 100644
--- a/server/util.c
+++ b/server/util.c
@@ -71,7 +71,7 @@
*/
#define TEST_CHAR(c, f) (test_char_table[(unsigned)(c)] & (f))
-/* Win32/NetWare need to check for both forward and back slashes
+/* Win32/NetWare/OS2 need to check for both forward and back slashes
* in ap_getparents() and ap_escape_url.
*/
#ifdef CASE_BLIND_FILESYSTEM
@@ -910,11 +910,11 @@ AP_DECLARE(apr_status_t) ap_pcfg_openfile(ap_configfile_t **ret_cfg,
return status;
if (finfo.filetype != APR_REG &&
-#if defined(WIN32) || defined(NETWARE)
+#if defined(WIN32) || defined(OS2) || defined(NETWARE)
strcasecmp(apr_filepath_name_get(name), "nul") != 0) {
#else
strcmp(name, "/dev/null") != 0) {
-#endif /* WIN32 */
+#endif /* WIN32 || OS2 */
ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
"Access to file %s denied by server: not a regular file",
name);
@@ -1489,9 +1489,9 @@ AP_DECLARE(char *) ap_escape_shell_cmd(apr_pool_t *p, const char *str)
s = (const unsigned char *)str;
for (; *s; ++s) {
-#if defined(WIN32)
+#if defined(OS2) || defined(WIN32)
/*
- * Newlines to Win32 CreateProcess() are ill advised.
+ * Newlines to Win32/OS2 CreateProcess() are ill advised.
* Convert them to spaces since they are effectively white
* space to most applications
*/
diff --git a/server/util_script.c b/server/util_script.c
index 14678ec310..707c1b53df 100644
--- a/server/util_script.c
+++ b/server/util_script.c
@@ -37,6 +37,11 @@
#include "apr_date.h" /* For apr_date_parse_http() */
#include "util_ebcdic.h"
+#ifdef OS2
+#define INCL_DOS
+#include <os2.h>
+#endif
+
/*
* Various utility functions which are common to a whole lot of
* script-type extensions mechanisms, and might as well be gathered
@@ -117,7 +122,7 @@ AP_DECLARE(void) ap_add_common_vars(request_rec *r)
conn_rec *c = r->connection;
const char *rem_logname;
char *env_path;
-#if defined(WIN32)
+#if defined(WIN32) || defined(OS2)
char *env_temp;
#endif
const char *host;
@@ -195,6 +200,21 @@ AP_DECLARE(void) ap_add_common_vars(request_rec *r)
}
#endif
+#ifdef OS2
+ if ((env_temp = getenv("COMSPEC")) != NULL) {
+ apr_table_addn(e, "COMSPEC", env_temp);
+ }
+ if ((env_temp = getenv("ETC")) != NULL) {
+ apr_table_addn(e, "ETC", env_temp);
+ }
+ if ((env_temp = getenv("DPATH")) != NULL) {
+ apr_table_addn(e, "DPATH", env_temp);
+ }
+ if ((env_temp = getenv("PERLLIB_PREFIX")) != NULL) {
+ apr_table_addn(e, "PERLLIB_PREFIX", env_temp);
+ }
+#endif
+
apr_table_addn(e, "SERVER_SIGNATURE", ap_psignature("", r));
apr_table_addn(e, "SERVER_SOFTWARE", ap_get_server_banner());
apr_table_addn(e, "SERVER_NAME",
diff --git a/support/apxs.in b/support/apxs.in
index d2c213e342..87a9a7d43d 100644
--- a/support/apxs.in
+++ b/support/apxs.in
@@ -490,7 +490,7 @@ if ($opt_i or $opt_e) {
my @cmds = ();
my $f;
foreach $f (@args) {
- # ack all potential gcc, hp/ux, win32, aix and os/x extensions
+ # ack all potential gcc, hp/ux, win32+os2+aix and os/x extensions
if ($f !~ m#(\.so$|\.la$|\.sl$|\.dll$|\.dylib$|)#) {
error("file $f is not a shared object");
exit(1);
diff --git a/support/fcgistarter.c b/support/fcgistarter.c
index fa61e78e3b..6eff391392 100644
--- a/support/fcgistarter.c
+++ b/support/fcgistarter.c
@@ -148,7 +148,7 @@ int main(int argc, const char * const argv[])
exit_error(rv, "apr_proc_detach");
}
-#if defined(WIN32) || defined(NETWARE)
+#if defined(WIN32) || defined(OS2) || defined(NETWARE)
#error "Please implement me."
diff --git a/support/rotatelogs.c b/support/rotatelogs.c
index d772807ae8..2cf2549e27 100644
--- a/support/rotatelogs.c
+++ b/support/rotatelogs.c
@@ -118,11 +118,17 @@ static void usage(const char *argv0, const char *reason)
"{<rotation time in seconds>|<rotation size>(B|K|M|G)} "
"[offset minutes from UTC]\n\n",
argv0);
+#ifdef OS2
+ fprintf(stderr,
+ "Add this:\n\nTransferLog \"|%s.exe /some/where 86400\"\n\n",
+ argv0);
+#else
fprintf(stderr,
"Add this:\n\nTransferLog \"|%s /some/where 86400\"\n\n",
argv0);
fprintf(stderr,
"or \n\nTransferLog \"|%s /some/where 5M\"\n\n", argv0);
+#endif
fprintf(stderr,
"to httpd.conf. The generated name will be /some/where.nnnn "
"where nnnn is the\nsystem time at which the log nominally "