]> granicus.if.org Git - apache/commitdiff
Bring back OS/2 support.
authorBrian Havard <bjh@apache.org>
Wed, 26 Aug 2009 08:56:13 +0000 (08:56 +0000)
committerBrian Havard <bjh@apache.org>
Wed, 26 Aug 2009 08:56:13 +0000 (08:56 +0000)
Reverses r758929 with a little bit of conflict resolution.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@807930 13f79535-47bb-0310-9956-ffa450edef68

37 files changed:
LAYOUT
Makefile.in
build/instdso.sh
configure.in
docs/manual/logs.xml
docs/manual/mod/core.xml
docs/manual/mod/mod_autoindex.xml
include/httpd.h
modules/arch/unix/mod_unixd.c
modules/dav/fs/config6.m4
modules/dav/lock/config6.m4
modules/examples/mod_example_ipc.c
modules/filters/mod_include.c
modules/generators/mod_cgi.c
modules/generators/mod_cgid.c
modules/generators/mod_status.c
modules/mappers/mod_rewrite.c
modules/mappers/mod_userdir.c
modules/proxy/config.m4
os/config.m4
os/os2/Makefile.in [new file with mode: 0644]
os/os2/config.m4 [new file with mode: 0644]
os/os2/core.mk [new file with mode: 0644]
os/os2/core_header.def [new file with mode: 0644]
os/os2/os.h [new file with mode: 0644]
os/os2/util_os2.c [new file with mode: 0644]
server/Makefile.in
server/core.c
server/gen_test_char.c
server/mpm_common.c
server/protocol.c
server/request.c
server/util.c
server/util_script.c
support/apxs.in
support/fcgistarter.c
support/rotatelogs.c

diff --git a/LAYOUT b/LAYOUT
index a89a7e6fdeaea8885bec3cea79fba9941ba54515..6052e237f9494cf7cb10b2ca44d4021eb0e080cc 100644 (file)
--- a/LAYOUT
+++ b/LAYOUT
@@ -143,6 +143,8 @@ os/ .....................
 
   netware/ ................ 
 
+  os2/ .................... 
+
   unix/ ................... 
 
   win32/ .................. 
index 55a624804ac323cc2eb3ae48c343a7135ef68cc6..fdefae750a5716f11db756dfa185d7759c5869d5 100644 (file)
@@ -231,3 +231,5 @@ suexec:
 
 x-local-distclean:
        @rm -rf autom4te.cache
+
+include $(top_srcdir)/os/os2/core.mk
index 2a78edda38fc4fb845f2b1263a8e3e19d5b06a3c..7716b2989867104307e6d425c24e7bf3918439dd 100755 (executable)
@@ -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`
index 44fcf3ff0e01791747a50bcde58c548c5f6e66e6..f7b22f1fabe4f73222a1bcdfb6ab16d8db6a1ba0 100644 (file)
@@ -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]]* ) 
index 555c101733e8c2fcabf27bbf5b37029927a808da..591baa9773eb69ff559fced6dc94511bdd75e5d4 100644 (file)
@@ -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>
index 8ade8d8ed9a4fb3d2d0f9dd6f6bc9091950c3fce..e5ac16265c901f36e9363b4f9423af9a262ac450 100644 (file)
@@ -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>
 
index 8613d9ca66bad7d6938423f0cc1e87a48f8d01d4..d5c3a61c5adf7a226292e18783c052c15b1ec029 100644 (file)
@@ -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
index b9a20b7662ebab6562d9cb7adeba7ecfb09dc6df..a7a7025ca8bf12cdaa3fba2e0a85b34625010801 100644 (file)
@@ -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.
  */
index bb4c6788e2dfa2a1012172a153de9834effce6e7..6dbd1de1c314ab1cc7180f0cad8dda9e5d125b00 100644 (file)
@@ -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"
index f86e3ff2a9d1b3346144925a9e8d54ef5974d784..515111cd01cbab78deb45e64e57cbbfd9463c228 100644 (file)
@@ -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
index 7ff2f0f4d0f47d7afab423d50b07fa7d8cb4267f..bc35ee3c038e31b7de64221865a2ccca32771d6b 100644 (file)
@@ -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
index d76a1ea6a09d09fc3d51a6170e3618c168e3e232..ea1d3830c0cbe52618eb70343cb6ec80e8d791f9 100644 (file)
@@ -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
index 4d1b5d401d28d9b498cfc430f3a266ff21dc14e1..f40741784895d6c5a1545cf49d7918c463689647 100644 (file)
@@ -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;
index 359b3baa89e36ced25542c925ef87ff0633bc0ca..ce50608243de4e78b69c0ffcda62e764090fbc13 100644 (file)
@@ -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
 
index cfa4157d19ecf4c4d7a4a19e752981e05b7b2d00..27849eebe72f539f324055cb3e9153d2adbf87cb 100644 (file)
@@ -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
index 7a2be8f8dc9dc96686249fc69868b714037d8d2f..8d10e437e2ba60b71f0e5db913954207a6dcffbe 100644 (file)
@@ -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) {
index a8c2b37703125e0e982688276bcae9ca6292e640..b6c6620056474dd5ce3d95808a5b8bbf0285fc41 100644 (file)
@@ -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:
index 7ad377013241f8a1c5fd48e2adee41c1d0648215..f6e3e5dc5f268243dfb3760fcd59baa97c0bf488 100644 (file)
@@ -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
 
index 29c0d10ce8d01866b96d40e444b9dce0eb747d05..cd3ba0cca1aa268cdac3b08aa91e73f4251cea5a 100644 (file)
@@ -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)
index 5f98b6a8cb1b71c13378a8c8257cda7af8a44507..31880911b0ebd327006ac7565a27e9fe15350f3c 100644 (file)
@@ -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 (file)
index 0000000..fba4972
--- /dev/null
@@ -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 (file)
index 0000000..b62d214
--- /dev/null
@@ -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 (file)
index 0000000..639417e
--- /dev/null
@@ -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 (file)
index 0000000..ec3703a
--- /dev/null
@@ -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 (file)
index 0000000..085dacf
--- /dev/null
@@ -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 (file)
index 0000000..9156fb3
--- /dev/null
@@ -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);
+}
index 446c0812005eca23e61a5bd01f45f202c35068c0..17e5d13995ce33a53f0f746e8b8c82a34020cd59 100644 (file)
@@ -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 "#! ." > $@
index 52399784e5186de3f2073ed15ce9273fa3cf83fa..ad39613929cd486cc2c3ee0547f798dbe488724e 100644 (file)
@@ -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
  */
index 628556edd58f26c95e5d261f3e674e9360af2870..ee4a69fb9c3f7e7e044f0a041b25b328f8261be0 100644 (file)
@@ -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
          */
index e7af61db8a7bfdf12b5218e18714f6f190897aed..6988374d015271e0725ab87ac65b5b8a9b266a65 100644 (file)
@@ -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];
index fa7aecffb1b522a9081c8512e0663726456a1ede..3491bdd7557966774347bfed6ccd86441d7e98fd 100644 (file)
@@ -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;
index 45a8f64222819f1ccbec54e0ceabc6dc3838635f..f34f9f5723f4ff1aa948854456365b977d65f275 100644 (file)
@@ -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
index 78ef22fa71e8c7149f43cdd72d800d8b3bb008b5..d476e54dbb18da635b81e1176a67f173c6e5b755 100644 (file)
@@ -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
          */
index 14678ec310ec01e5cdd29014c9bedc6f5d8ce30f..707c1b53dff2b9160c066475e939bcc5c3fa3262 100644 (file)
 #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",
index d2c213e342e514da631f68ab824e1cb46cbe9daa..87a9a7d43dfac63f899d4b7434507a540180bb9b 100644 (file)
@@ -490,7 +490,7 @@ if ($opt_i or $opt_e) {
     my @cmds = ();
     my $f;
     foreach $f (@args) {
-        #  ack all potential gcc, hp/ux, win32aix 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);
index fa61e78e3bfba7565b472b3b3eae4c4d54d60500..6eff391392830bb8af7a0d2a5f64e830a997725e 100644 (file)
@@ -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."
 
index d772807ae8c8588e732a7cc11430c92411e778b0..2cf2549e27922a92b7191d44e0e40ba3c04c97f4 100644 (file)
@@ -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 "