summaryrefslogtreecommitdiff
path: root/APACHE_1_3_42/src/os
diff options
context:
space:
mode:
Diffstat (limited to 'APACHE_1_3_42/src/os')
-rw-r--r--APACHE_1_3_42/src/os/.indent.pro54
-rw-r--r--APACHE_1_3_42/src/os/bs2000/Makefile.tmpl84
-rw-r--r--APACHE_1_3_42/src/os/bs2000/bs2login.c255
-rw-r--r--APACHE_1_3_42/src/os/bs2000/ebcdic.h22
-rw-r--r--APACHE_1_3_42/src/os/bs2000/os-inline.c47
-rw-r--r--APACHE_1_3_42/src/os/bs2000/os.c28
-rw-r--r--APACHE_1_3_42/src/os/bs2000/os.h79
-rw-r--r--APACHE_1_3_42/src/os/cygwin/Makefile.tmpl46
-rw-r--r--APACHE_1_3_42/src/os/cygwin/os-inline.c47
-rw-r--r--APACHE_1_3_42/src/os/cygwin/os.c62
-rw-r--r--APACHE_1_3_42/src/os/cygwin/os.h139
-rw-r--r--APACHE_1_3_42/src/os/mpeix/Makefile.tmpl49
-rw-r--r--APACHE_1_3_42/src/os/mpeix/README274
-rw-r--r--APACHE_1_3_42/src/os/mpeix/dlopen.c240
-rw-r--r--APACHE_1_3_42/src/os/mpeix/gettimeofday.c132
-rw-r--r--APACHE_1_3_42/src/os/mpeix/mpe_dl_stub.c17
-rw-r--r--APACHE_1_3_42/src/os/mpeix/os-inline.c47
-rw-r--r--APACHE_1_3_42/src/os/mpeix/os.c17
-rw-r--r--APACHE_1_3_42/src/os/mpeix/os.h106
-rw-r--r--APACHE_1_3_42/src/os/netware/Apache.def4
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheCore.imp428
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheCoreNW.def8
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleAuthAnon.def2
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleAuthDBM.def2
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleCERNMeta.def1
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleDigest.def1
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleExpires.def1
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleForensic.def1
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleHeaders.def1
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleInfo.def2
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleProxy.def1
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleRewrite.def1
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleSpeling.def2
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleStatus.def1
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleTLS.def3
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleUniqueID.def1
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleUserTrack.def1
-rw-r--r--APACHE_1_3_42/src/os/netware/ApacheModuleVhostAlias.def1
-rw-r--r--APACHE_1_3_42/src/os/netware/NWGNUmakefile27
-rw-r--r--APACHE_1_3_42/src/os/netware/NWGNUmakefile.mak246
-rw-r--r--APACHE_1_3_42/src/os/netware/apache.xdcbin0 -> 128 bytes
-rw-r--r--APACHE_1_3_42/src/os/netware/getopt.c177
-rw-r--r--APACHE_1_3_42/src/os/netware/getopt.h26
-rw-r--r--APACHE_1_3_42/src/os/netware/libpre.c47
-rw-r--r--APACHE_1_3_42/src/os/netware/libprews.c52
-rw-r--r--APACHE_1_3_42/src/os/netware/main_nlm.c26
-rw-r--r--APACHE_1_3_42/src/os/netware/mod_log_nw.c1256
-rw-r--r--APACHE_1_3_42/src/os/netware/mod_nlm.c107
-rw-r--r--APACHE_1_3_42/src/os/netware/mod_tls.c374
-rw-r--r--APACHE_1_3_42/src/os/netware/modules.c86
-rw-r--r--APACHE_1_3_42/src/os/netware/multithread.c119
-rw-r--r--APACHE_1_3_42/src/os/netware/os.c467
-rw-r--r--APACHE_1_3_42/src/os/netware/os.h149
-rw-r--r--APACHE_1_3_42/src/os/netware/precomp.h27
-rw-r--r--APACHE_1_3_42/src/os/netware/test_char.h44
-rw-r--r--APACHE_1_3_42/src/os/netware/uri_delims.h16
-rw-r--r--APACHE_1_3_42/src/os/os2/Makefile.tmpl57
-rw-r--r--APACHE_1_3_42/src/os/os2/os-inline.c50
-rw-r--r--APACHE_1_3_42/src/os/os2/os.c79
-rw-r--r--APACHE_1_3_42/src/os/os2/os.h77
-rw-r--r--APACHE_1_3_42/src/os/os2/util_os2.c170
-rw-r--r--APACHE_1_3_42/src/os/os390/Makefile.tmpl64
-rw-r--r--APACHE_1_3_42/src/os/os390/README.os39086
-rw-r--r--APACHE_1_3_42/src/os/os390/ebcdic.h22
-rw-r--r--APACHE_1_3_42/src/os/os390/os-inline.c47
-rw-r--r--APACHE_1_3_42/src/os/os390/os.c25
-rw-r--r--APACHE_1_3_42/src/os/os390/os.h51
-rwxr-xr-xAPACHE_1_3_42/src/os/os390/xebcdic.sh218
-rw-r--r--APACHE_1_3_42/src/os/tpf/Makefile.tmpl41
-rw-r--r--APACHE_1_3_42/src/os/tpf/TPFExport10
-rw-r--r--APACHE_1_3_42/src/os/tpf/cgetop.c153
-rw-r--r--APACHE_1_3_42/src/os/tpf/ebcdic.h22
-rw-r--r--APACHE_1_3_42/src/os/tpf/os-inline.c47
-rw-r--r--APACHE_1_3_42/src/os/tpf/os.c860
-rw-r--r--APACHE_1_3_42/src/os/tpf/os.h358
-rw-r--r--APACHE_1_3_42/src/os/tpf/samples/linkhttp.dlm66
-rw-r--r--APACHE_1_3_42/src/os/tpf/samples/linkhttp.jcl147
-rw-r--r--APACHE_1_3_42/src/os/tpf/samples/loadset.jcl42
-rw-r--r--APACHE_1_3_42/src/os/tpf/samples/sample_env.txt51
-rw-r--r--APACHE_1_3_42/src/os/tpf/samples/sample_mak.txt72
-rw-r--r--APACHE_1_3_42/src/os/tpf/samples/test_char.txt43
-rw-r--r--APACHE_1_3_42/src/os/tpf/samples/uri_delims.txt16
-rw-r--r--APACHE_1_3_42/src/os/unix/Makefile.tmpl47
-rw-r--r--APACHE_1_3_42/src/os/unix/os-aix-dso.c627
-rw-r--r--APACHE_1_3_42/src/os/unix/os-inline.c47
-rw-r--r--APACHE_1_3_42/src/os/unix/os.c209
-rw-r--r--APACHE_1_3_42/src/os/unix/os.h109
-rw-r--r--APACHE_1_3_42/src/os/win32/ApacheOS.dep5
-rw-r--r--APACHE_1_3_42/src/os/win32/ApacheOS.dsp89
-rw-r--r--APACHE_1_3_42/src/os/win32/ApacheOS.mak184
-rw-r--r--APACHE_1_3_42/src/os/win32/BaseAddr.ref32
-rw-r--r--APACHE_1_3_42/src/os/win32/MakeModuleMak.cpp75
-rw-r--r--APACHE_1_3_42/src/os/win32/Module.mak.tmpl230
-rw-r--r--APACHE_1_3_42/src/os/win32/Win9xConHook.c697
-rw-r--r--APACHE_1_3_42/src/os/win32/Win9xConHook.def10
-rw-r--r--APACHE_1_3_42/src/os/win32/Win9xConHook.dep2
-rw-r--r--APACHE_1_3_42/src/os/win32/Win9xConHook.dsp103
-rw-r--r--APACHE_1_3_42/src/os/win32/Win9xConHook.h57
-rw-r--r--APACHE_1_3_42/src/os/win32/Win9xConHook.mak198
-rw-r--r--APACHE_1_3_42/src/os/win32/apache.icobin0 -> 1078 bytes
-rw-r--r--APACHE_1_3_42/src/os/win32/apache.rc84
-rw-r--r--APACHE_1_3_42/src/os/win32/getopt.c189
-rw-r--r--APACHE_1_3_42/src/os/win32/getopt.h31
-rw-r--r--APACHE_1_3_42/src/os/win32/main_win32.c36
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_auth_anon.dep21
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_auth_anon.dsp95
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_auth_anon.mak246
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_auth_dbm.dep21
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_auth_dbm.dsp95
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_auth_dbm.mak274
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_auth_digest.dep25
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_auth_digest.dsp95
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_auth_digest.mak246
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_cern_meta.dep20
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_cern_meta.dsp95
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_cern_meta.mak246
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_digest.dep22
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_digest.dsp95
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_digest.mak246
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_expires.dep18
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_expires.dsp95
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_expires.mak246
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_headers.dep17
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_headers.dsp95
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_headers.mak246
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_info.dep23
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_info.dsp95
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_info.mak246
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_isapi.c891
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_log_forensic.dep2
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_log_forensic.dsp95
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_log_forensic.mak246
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_mime_magic.dep21
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_mime_magic.dsp95
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_mime_magic.mak246
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_proxy.dep139
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_proxy.dsp127
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_proxy.mak295
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_rewrite.dep27
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_rewrite.dsp99
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_rewrite.mak255
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_speling.dep19
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_speling.dsp95
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_speling.mak246
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_status.dep24
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_status.dsp95
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_status.mak246
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_unique_id.dep19
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_unique_id.dsp95
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_unique_id.mak246
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_usertrack.dep18
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_usertrack.dsp95
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_usertrack.mak246
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_vhost_alias.dep18
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_vhost_alias.dsp95
-rw-r--r--APACHE_1_3_42/src/os/win32/mod_vhost_alias.mak246
-rw-r--r--APACHE_1_3_42/src/os/win32/modules.c92
-rw-r--r--APACHE_1_3_42/src/os/win32/monitoring-services.txt53
-rw-r--r--APACHE_1_3_42/src/os/win32/multithread.c273
-rw-r--r--APACHE_1_3_42/src/os/win32/os.c294
-rw-r--r--APACHE_1_3_42/src/os/win32/os.h193
-rw-r--r--APACHE_1_3_42/src/os/win32/passwd.c37
-rw-r--r--APACHE_1_3_42/src/os/win32/passwd.h33
-rw-r--r--APACHE_1_3_42/src/os/win32/readdir.c100
-rw-r--r--APACHE_1_3_42/src/os/win32/readdir.h61
-rw-r--r--APACHE_1_3_42/src/os/win32/registry.c568
-rw-r--r--APACHE_1_3_42/src/os/win32/registry.h33
-rw-r--r--APACHE_1_3_42/src/os/win32/resource.h17
-rw-r--r--APACHE_1_3_42/src/os/win32/service.c1483
-rw-r--r--APACHE_1_3_42/src/os/win32/service.h54
-rw-r--r--APACHE_1_3_42/src/os/win32/util_win32.c530
171 files changed, 22473 insertions, 0 deletions
diff --git a/APACHE_1_3_42/src/os/.indent.pro b/APACHE_1_3_42/src/os/.indent.pro
new file mode 100644
index 0000000000..a9fbe9f9a1
--- /dev/null
+++ b/APACHE_1_3_42/src/os/.indent.pro
@@ -0,0 +1,54 @@
+-i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
+-TBUFF
+-TFILE
+-TTRANS
+-TUINT4
+-T_trans
+-Tallow_options_t
+-Tapache_sfio
+-Tarray_header
+-Tbool_int
+-Tbuf_area
+-Tbuff_struct
+-Tbuffy
+-Tcmd_how
+-Tcmd_parms
+-Tcommand_rec
+-Tcommand_struct
+-Tconn_rec
+-Tcore_dir_config
+-Tcore_server_config
+-Tdir_maker_func
+-Tevent
+-Tglobals_s
+-Thandler_func
+-Thandler_rec
+-Tjoblist_s
+-Tlisten_rec
+-Tmerger_func
+-Tmode_t
+-Tmodule
+-Tmodule_struct
+-Tmutex
+-Tn_long
+-Tother_child_rec
+-Toverrides_t
+-Tparent_score
+-Tpid_t
+-Tpiped_log
+-Tpool
+-Trequest_rec
+-Trequire_line
+-Trlim_t
+-Tscoreboard
+-Tsemaphore
+-Tserver_addr_rec
+-Tserver_rec
+-Tserver_rec_chain
+-Tshort_score
+-Ttable
+-Ttable_entry
+-Tthread
+-Tu_wide_int
+-Tvtime_t
+-Twide_int
diff --git a/APACHE_1_3_42/src/os/bs2000/Makefile.tmpl b/APACHE_1_3_42/src/os/bs2000/Makefile.tmpl
new file mode 100644
index 0000000000..4d6c1ca21d
--- /dev/null
+++ b/APACHE_1_3_42/src/os/bs2000/Makefile.tmpl
@@ -0,0 +1,84 @@
+CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS)
+LIBS=$(EXTRA_LIBS) $(LIBS1)
+INCLUDES=$(INCLUDES1) $(INCLUDES0) $(EXTRA_INCLUDES)
+LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS)
+
+OBJS= os.o os-inline.o bs2login.o
+
+LIB= libos.a
+
+all: $(LIB)
+
+$(LIB): $(OBJS)
+ rm -f $@
+ ar cr $@ $(OBJS)
+ $(RANLIB) $@
+
+.c.o:
+ $(CC) -c $(INCLUDES) $(CFLAGS) $<
+
+clean:
+ rm -f $(OBJS) $(LIB)
+
+distclean: clean
+ -rm -f Makefile
+
+# We really don't expect end users to use this rule. It works only with
+# gcc, and rebuilds Makefile.tmpl. You have to re-run Configure after
+# using it.
+depend:
+ cp Makefile.tmpl Makefile.tmpl.bak \
+ && sed -ne '1,/^# DO NOT REMOVE/p' Makefile.tmpl > Makefile.new \
+ && gcc -MM $(INCLUDES) $(CFLAGS) *.c >> Makefile.new \
+ && sed -e '1,$$s: $(INCDIR)/: $$(INCDIR)/:g' \
+ -e '1,$$s: $(OSDIR)/: $$(OSDIR)/:g' Makefile.new \
+ > Makefile.tmpl \
+ && rm Makefile.new
+
+$(OBJS): Makefile
+
+# DO NOT REMOVE
+bs2login.o: bs2login.c
+bs2login.o: $(INCDIR)/httpd.h
+bs2login.o: $(INCDIR)/ap_config.h
+bs2login.o: $(INCDIR)/ap_mmn.h
+bs2login.o: $(INCDIR)/ap_config_auto.h
+bs2login.o: os.h
+bs2login.o: $(INCDIR)/ap_ctype.h
+bs2login.o: $(INCDIR)/hsregex.h
+bs2login.o: $(INCDIR)/ap_alloc.h
+bs2login.o: $(INCDIR)/buff.h
+bs2login.o: $(INCDIR)/ap.h
+bs2login.o: ebcdic.h
+bs2login.o: $(INCDIR)/util_uri.h
+bs2login.o: $(INCDIR)/http_config.h
+bs2login.o: $(INCDIR)/http_log.h
+ebcdic.o: ebcdic.c
+ebcdic.o: $(INCDIR)/ap_config.h
+ebcdic.o: $(INCDIR)/ap_mmn.h
+ebcdic.o: $(INCDIR)/ap_config_auto.h
+ebcdic.o: os.h
+ebcdic.o: $(INCDIR)/ap_ctype.h
+ebcdic.o: $(INCDIR)/hsregex.h
+ebcdic.o: ebcdic.h
+os-inline.o: os-inline.c
+os-inline.o: $(INCDIR)/ap_config.h
+os-inline.o: $(INCDIR)/ap_mmn.h
+os-inline.o: $(INCDIR)/ap_config_auto.h
+os-inline.o: os.h
+os-inline.o: $(INCDIR)/ap_ctype.h
+os-inline.o: $(INCDIR)/hsregex.h
+os.o: os.c
+os.o: $(INCDIR)/httpd.h
+os.o: $(INCDIR)/ap_config.h
+os.o: $(INCDIR)/ap_mmn.h
+os.o: $(INCDIR)/ap_config_auto.h
+os.o: os.h
+os.o: $(INCDIR)/ap_ctype.h
+os.o: $(INCDIR)/hsregex.h
+os.o: $(INCDIR)/ap_alloc.h
+os.o: $(INCDIR)/buff.h
+os.o: $(INCDIR)/ap.h
+os.o: ebcdic.h
+os.o: $(INCDIR)/util_uri.h
+os.o: $(INCDIR)/http_core.h
diff --git a/APACHE_1_3_42/src/os/bs2000/bs2login.c b/APACHE_1_3_42/src/os/bs2000/bs2login.c
new file mode 100644
index 0000000000..1ba32bd0c9
--- /dev/null
+++ b/APACHE_1_3_42/src/os/bs2000/bs2login.c
@@ -0,0 +1,255 @@
+/* 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.
+ */
+
+#ifdef _OSD_POSIX
+#include "httpd.h"
+#include "http_config.h"
+#include "http_log.h"
+#include <ctype.h>
+#include <sys/utsname.h>
+
+#define ACCT_LEN 8
+#define USER_LEN 8
+
+static const char *bs2000_account = NULL;
+typedef enum
+{
+ bs2_unknown, /* not initialized yet. */
+ bs2_noFORK, /* no fork() because -X flag was specified */
+ bs2_FORK, /* only fork() because uid != 0 */
+ bs2_FORK_RINI, /* prior to A17, regular fork() and _rini() was used. */
+ bs2_RFORK_RINI, /* for A17, use of _rfork() and _rini() was required */
+ bs2_UFORK /* As of A18, the new ufork() is used. */
+} bs2_ForkType;
+
+static bs2_ForkType forktype = bs2_unknown;
+
+
+static void ap_pad(char *dest, size_t size, char ch)
+{
+ int i = strlen(dest); /* Leave space for trailing '\0' */
+
+ while (i < size-1)
+ dest[i++] = ch;
+
+ dest[size-1] = '\0'; /* Guarantee for trailing '\0' */
+}
+
+static void ap_str_toupper(char *str)
+{
+ while (*str) {
+ *str = ap_toupper(*str);
+ ++str;
+ }
+}
+
+/* Determine the method for forking off a child in such a way as to
+ * set both the POSIX and BS2000 user id's to the unprivileged user.
+ */
+static bs2_ForkType os_forktype(void)
+{
+ struct utsname os_version;
+
+ /* have we checked the OS version before? If yes return the previous
+ * result - the OS release isn't going to change suddenly!
+ */
+ if (forktype != bs2_unknown) {
+ return forktype;
+ }
+
+ /* If the user is unprivileged, use the normal fork() only. */
+ if (getuid() != 0) {
+ return forktype = bs2_FORK;
+ }
+
+ if (uname(&os_version) < 0)
+ {
+ ap_log_error(APLOG_MARK, APLOG_ALERT, NULL,
+ "uname() failed - aborting.");
+ exit(APEXIT_CHILDFATAL);
+ }
+
+ /*
+ * Old BS2000/OSD versions (before XPG4 SPEC1170) don't work with Apache.
+ * Anyway, simply return a fork().
+ */
+ if (strcmp(os_version.release, "01.0A") == 0 ||
+ strcmp(os_version.release, "02.0A") == 0 ||
+ strcmp(os_version.release, "02.1A") == 0)
+ {
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, NULL,
+ "Error: unsupported OS version. "
+ "You may encounter problems.");
+ forktype = bs2_FORK;
+ }
+
+ /* The following versions are special:
+ * OS versions before A17 needs regular fork() and _rini().
+ * A17 requires _rfork() and _rini(),
+ * and later versions need ufork().
+ */
+ else if (strcmp(os_version.release, "01.1A") == 0 ||
+ strcmp(os_version.release, "03.0A") == 0 ||
+ strcmp(os_version.release, "03.1A") == 0 ||
+ strcmp(os_version.release, "04.0A") == 0)
+ {
+ if (strcmp (os_version.version, "A18") >= 0)
+ forktype = bs2_UFORK;
+
+ else if (strcmp (os_version.version, "A17") < 0)
+ forktype = bs2_FORK_RINI;
+
+ else
+ forktype = bs2_RFORK_RINI;
+ }
+
+ /* All later OS versions will hopefully use ufork() only ;-) */
+ else
+ forktype = bs2_UFORK;
+
+ return forktype;
+}
+
+
+
+/* This routine is called by http_core for the BS2000Account directive */
+/* It stores the account name for later use */
+const char *os_set_account(pool *p, const char *account)
+{
+ char account_temp[ACCT_LEN+1];
+
+ ap_cpystrn(account_temp, account, sizeof account_temp);
+
+ /* Make account all upper case */
+ ap_str_toupper(account_temp);
+
+ /* Pad to length 8 */
+ ap_pad(account_temp, sizeof account_temp, ' ');
+
+ bs2000_account = ap_pstrdup(p, account_temp);
+ return NULL;
+}
+
+/* This routine complements the setuid() call: it causes the BS2000 job
+ * environment to be switched to the target user's user id.
+ * That is important if CGI scripts try to execute native BS2000 commands.
+ */
+int os_init_job_environment(server_rec *server, const char *user_name, int one_process)
+{
+ _rini_struct inittask;
+ char username[USER_LEN+1];
+ bs2_ForkType type = os_forktype();
+
+ /* We can be sure that no change to uid==0 is possible because of
+ * the checks in http_core.c:set_user()
+ */
+
+ /* The _rini() function works only after a prior _rfork().
+ * In the case of one_process, it would fail.
+ */
+ if (one_process) {
+
+ type = forktype = bs2_noFORK;
+
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, server,
+ "The debug mode of Apache should only "
+ "be started by an unprivileged user!");
+ return 0;
+ }
+
+ /* If no _rini() is required, then return quickly. */
+ if (type != bs2_RFORK_RINI && type != bs2_FORK_RINI)
+ return 0;
+
+ /* An Account is required for _rini() */
+ if (bs2000_account == NULL)
+ {
+ ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_NOERRNO, server,
+ "No BS2000Account configured - cannot switch to User %s",
+ user_name);
+ exit(APEXIT_CHILDFATAL);
+ }
+
+ ap_cpystrn(username, user_name, sizeof username);
+
+ /* Make user name all upper case */
+ ap_str_toupper(username);
+
+ /* Pad to length 8 */
+ ap_pad(username, sizeof username, ' ');
+
+ inittask.username = username;
+ inittask.account = bs2000_account;
+ inittask.processor_name = " ";
+
+ /* Switch to the new logon user (setuid() and setgid() are done later) */
+ /* Only the super user can switch identities. */
+ if (_rini(&inittask) != 0) {
+
+ ap_log_error(APLOG_MARK, APLOG_ALERT, server,
+ "_rini: BS2000 auth failed for user \"%s\" acct \"%s\"",
+ inittask.username, inittask.account);
+
+ exit(APEXIT_CHILDFATAL);
+ }
+
+ return 0;
+}
+
+/* BS2000 requires a "special" version of fork() before a setuid()/_rini() call */
+pid_t os_fork(const char *user)
+{
+ pid_t pid;
+ char username[USER_LEN+1];
+
+ switch (os_forktype()) {
+ case bs2_FORK:
+ case bs2_FORK_RINI:
+ pid = fork();
+ break;
+
+ case bs2_RFORK_RINI:
+ pid = _rfork();
+ break;
+
+ case bs2_UFORK:
+ ap_cpystrn(username, user, sizeof username);
+
+ /* Make user name all upper case - for some versions of ufork() */
+ ap_str_toupper(username);
+
+ pid = ufork(username);
+ if (pid == -1 && errno == EPERM) {
+ ap_log_error(APLOG_MARK, APLOG_EMERG,
+ NULL, "ufork: Possible mis-configuration "
+ "for user %s - Aborting.", user);
+ exit(1);
+ }
+ break;
+
+ default:
+ pid = 0;
+ break;
+ }
+
+ return pid;
+}
+
+#else /* _OSD_POSIX */
+void bs2login_is_not_here()
+{
+}
+#endif /* _OSD_POSIX */
diff --git a/APACHE_1_3_42/src/os/bs2000/ebcdic.h b/APACHE_1_3_42/src/os/bs2000/ebcdic.h
new file mode 100644
index 0000000000..c495eba165
--- /dev/null
+++ b/APACHE_1_3_42/src/os/bs2000/ebcdic.h
@@ -0,0 +1,22 @@
+/* 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.
+ */
+
+#ifndef EBCDIC_H
+#define EBCDIC_H "$Id$"
+
+#include <ap_ebcdic.h>
+
+#endif /*EBCDIC_H*/
diff --git a/APACHE_1_3_42/src/os/bs2000/os-inline.c b/APACHE_1_3_42/src/os/bs2000/os-inline.c
new file mode 100644
index 0000000000..efd915d4cf
--- /dev/null
+++ b/APACHE_1_3_42/src/os/bs2000/os-inline.c
@@ -0,0 +1,47 @@
+/* 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.
+ */
+
+/*
+ * This file contains functions which can be inlined if the compiler
+ * has an "inline" modifier. Because of this, this file is both a
+ * header file and a compilable module.
+ *
+ * Only inlineable functions should be defined in here. They must all
+ * include the INLINE modifier.
+ *
+ * If the compiler supports inline, this file will be #included as a
+ * header file from os.h to create all the inline function
+ * definitions. INLINE will be defined to whatever is required on
+ * function definitions to make them inline declarations.
+ *
+ * If the compiler does not support inline, this file will be compiled
+ * as a normal C file into libos.a (along with os.c). In this case
+ * INLINE will _not_ be set so we can use this to test if we are
+ * compiling this source file.
+ */
+
+#ifndef INLINE
+#define INLINE
+
+/* Anything required only when compiling */
+#include "ap_config.h"
+
+#endif
+
+INLINE int ap_os_is_path_absolute(const char *file)
+{
+ return (file && file[0] == '/' ? 1 : 0);
+}
diff --git a/APACHE_1_3_42/src/os/bs2000/os.c b/APACHE_1_3_42/src/os/bs2000/os.c
new file mode 100644
index 0000000000..2e33afccb6
--- /dev/null
+++ b/APACHE_1_3_42/src/os/bs2000/os.c
@@ -0,0 +1,28 @@
+/* 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.
+ */
+
+/*
+ * This file will include OS specific functions which are not inlineable.
+ * Any inlineable functions should be defined in os-inline.c instead.
+ */
+
+#include "httpd.h"
+#include "http_core.h"
+#include "os.h"
+
+#ifdef HAVE_DLFCN_H
+#include "../unix/os.c"
+#endif
diff --git a/APACHE_1_3_42/src/os/bs2000/os.h b/APACHE_1_3_42/src/os/bs2000/os.h
new file mode 100644
index 0000000000..a05aeb6bb7
--- /dev/null
+++ b/APACHE_1_3_42/src/os/bs2000/os.h
@@ -0,0 +1,79 @@
+/* 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.
+ */
+
+#ifndef APACHE_OS_H
+#define APACHE_OS_H
+
+#define PLATFORM "BS2000"
+
+/*
+ * 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
+ */
+
+#if !defined(INLINE) && defined(USE_GNU_INLINE)
+/* Compiler supports inline, so include the inlineable functions as
+ * part of the header
+ */
+#define INLINE extern ap_inline
+
+INLINE int ap_os_is_path_absolute(const char *file);
+
+#include "os-inline.c"
+#endif
+
+#ifndef INLINE
+/* Compiler does not support inline, so prototype the inlineable functions
+ * as normal
+ */
+extern int ap_os_is_path_absolute(const char *file);
+#endif
+
+/* Other ap_os_ routines not used by this platform */
+
+#define ap_os_is_filename_valid(f) (1)
+#define ap_os_kill(pid, sig) kill(pid, sig)
+
+#if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE) && !defined(HAVE_RINI_STRUCT)
+typedef struct {
+ char *username;
+ char *account;
+ char *processor_name;
+} _rini_struct;
+
+extern int _rini(_rini_struct *);
+#endif /* !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE) */
+
+extern pid_t os_fork(const char *user);
+#ifdef _OSD_POSIX
+struct pool;
+extern const char *os_set_account(struct pool *p, const char *account);
+struct server_rec;
+extern int os_init_job_environment(struct server_rec *s, const char *user_name, int one_process);
+#endif
+
+#ifdef HAVE_DLFCN_H
+#include <dlfcn.h>
+#define ap_os_dso_handle_t void *
+void ap_os_dso_init(void);
+void * ap_os_dso_load(const char *);
+void ap_os_dso_unload(void *);
+void * ap_os_dso_sym(void *, const char *);
+const char *ap_os_dso_error(void);
+#endif
+
+#endif /*! APACHE_OS_H*/
diff --git a/APACHE_1_3_42/src/os/cygwin/Makefile.tmpl b/APACHE_1_3_42/src/os/cygwin/Makefile.tmpl
new file mode 100644
index 0000000000..5123c5a384
--- /dev/null
+++ b/APACHE_1_3_42/src/os/cygwin/Makefile.tmpl
@@ -0,0 +1,46 @@
+CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS)
+LIBS=$(EXTRA_LIBS) $(LIBS1)
+INCLUDES=$(INCLUDES1) $(INCLUDES0) $(EXTRA_INCLUDES)
+LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS)
+
+OBJS= os.o os-inline.o
+
+LIB= libos.a
+
+all: $(LIB)
+
+$(LIB): $(OBJS)
+ rm -f $@
+ ar cr $@ $(OBJS)
+ $(RANLIB) $@
+
+.c.o:
+ $(CC) -c $(INCLUDES) $(CFLAGS) $<
+
+clean:
+ rm -f $(OBJS) $(LIB)
+
+distclean: clean
+ -rm -f Makefile
+
+# We really don't expect end users to use this rule. It works only with
+# gcc, and rebuilds Makefile.tmpl. You have to re-run Configure after
+# using it.
+depend:
+ cp Makefile.tmpl Makefile.tmpl.bak \
+ && sed -ne '1,/^# DO NOT REMOVE/p' Makefile.tmpl > Makefile.new \
+ && gcc -MM $(INCLUDES) $(CFLAGS) *.c >> Makefile.new \
+ && sed -e '1,$$s: $(INCDIR)/: $$(INCDIR)/:g' \
+ -e '1,$$s: $(OSDIR)/: $$(OSDIR)/:g' Makefile.new \
+ > Makefile.tmpl \
+ && rm Makefile.new
+
+$(OBJS): Makefile
+
+# DO NOT REMOVE
+os-inline.o: os-inline.c $(INCDIR)/ap_config.h \
+ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h \
+ $(OSDIR)/os.h $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h
+os.o: os.c $(INCDIR)/ap_config.h $(INCDIR)/ap_mmn.h \
+ $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \
+ $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h os.h
diff --git a/APACHE_1_3_42/src/os/cygwin/os-inline.c b/APACHE_1_3_42/src/os/cygwin/os-inline.c
new file mode 100644
index 0000000000..26801eef41
--- /dev/null
+++ b/APACHE_1_3_42/src/os/cygwin/os-inline.c
@@ -0,0 +1,47 @@
+/* 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.
+ */
+
+/*
+ * This file contains functions which can be inlined if the compiler
+ * has an "inline" modifier. Because of this, this file is both a
+ * header file and a compilable module.
+ *
+ * Only inlineable functions should be defined in here. They must all
+ * include the INLINE modifier.
+ *
+ * If the compiler supports inline, this file will be #included as a
+ * header file from os.h to create all the inline function
+ * definitions. INLINE will be defined to whatever is required on
+ * function definitions to make them inline declarations.
+ *
+ * If the compiler does not support inline, this file will be compiled
+ * as a normal C file into libos.a (along with os.c). In this case
+ * INLINE will _not_ be set so we can use this to test if we are
+ * compiling this source file.
+ */
+
+#ifndef INLINE
+#define INLINE
+
+/* Anything required only when compiling */
+#include "ap_config.h"
+
+#endif
+
+INLINE int ap_os_is_path_absolute(const char *file)
+{
+ return file[0] == '/';
+}
diff --git a/APACHE_1_3_42/src/os/cygwin/os.c b/APACHE_1_3_42/src/os/cygwin/os.c
new file mode 100644
index 0000000000..b1b5291145
--- /dev/null
+++ b/APACHE_1_3_42/src/os/cygwin/os.c
@@ -0,0 +1,62 @@
+/* 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.
+ */
+
+/*
+ * This file will include OS specific functions which are not inlineable.
+ * Any inlineable functions should be defined in os-inline.c instead.
+ */
+
+#include "ap_config.h"
+#include "os.h"
+
+
+/* some linkers complain unless there's at least one function in each
+ * .o file... and extra prototype is for gcc -Wmissing-prototypes
+ */
+extern void ap_is_not_here(void);
+void ap_is_not_here(void) {}
+
+/*
+ * Abstraction layer for loading
+ * Apache modules under run-time via
+ * dynamic shared object (DSO) mechanism
+ */
+
+void ap_os_dso_init(void)
+{
+}
+
+void *ap_os_dso_load(const char *path)
+{
+ return dlopen(path, RTLD_NOW | RTLD_GLOBAL);
+}
+
+void ap_os_dso_unload(void *handle)
+{
+ dlclose(handle);
+
+ return;
+}
+
+void *ap_os_dso_sym(void *handle, const char *symname)
+{
+ return dlsym(handle, symname);
+}
+
+const char *ap_os_dso_error(void)
+{
+ return dlerror();
+}
diff --git a/APACHE_1_3_42/src/os/cygwin/os.h b/APACHE_1_3_42/src/os/cygwin/os.h
new file mode 100644
index 0000000000..5344b6d909
--- /dev/null
+++ b/APACHE_1_3_42/src/os/cygwin/os.h
@@ -0,0 +1,139 @@
+/* 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.
+ */
+
+#ifndef APACHE_OS_H
+#define APACHE_OS_H
+
+#include "ap_config.h"
+
+/*
+ * Define the API_EXPORT declaration for creating a dynamic
+ * loadable library (DLL) version of Apache on Cygwin 1.x platforms.
+ */
+
+#ifndef API_EXPORT
+#ifdef SHARED_CORE
+# ifdef SHARED_MODULE
+# define API_VAR_EXPORT __declspec(dllimport)
+# define API_EXPORT(type) __declspec(dllimport) type
+# define MODULE_VAR_EXPORT __declspec(dllexport)
+# else
+# define API_VAR_EXPORT __declspec(dllexport)
+# define API_EXPORT(type) __declspec(dllexport) type
+# endif /* def SHARED_MODULE */
+#endif /* def SHARED_CORE */
+#endif /* ndef API_EXPORT */
+
+/*
+ * We don't consider the Cygwin 1.x support neither an Unix nor
+ * a Win32 platform. Basicly it's something between both, so that
+ * is why we introduce our own PLATFORM define.
+ */
+#ifndef PLATFORM
+#define PLATFORM "Cygwin"
+#endif
+
+/*
+ * Define winsock.h and winsock2.h stuff taken from Win32 API in case we
+ * want to do socket communication in Win32 native way rather then using
+ * Cygwin's POSIX wrapper to the native ones. These are needed for
+ * main/buff.c and main/http_main.c. They are linked against libwsock32.a
+ * for the import declarations of the corresponding Win32 native DLLs.
+ */
+#ifdef CYGWIN_WINSOCK
+#define WSAEWOULDBLOCK (10035)
+#define SOCKET_ERROR (-1)
+
+#define WIN32API_IMPORT(type) __declspec(dllimport) type __stdcall
+
+WIN32API_IMPORT(int) WSAGetLastError(void);
+WIN32API_IMPORT(int) WSASetLastError(int);
+WIN32API_IMPORT(int) ioctlsocket(unsigned int, long, unsigned long *);
+WIN32API_IMPORT(void) Sleep(unsigned int);
+#endif /* CYGWIN_WINSOCK */
+
+/*
+ * 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
+ */
+
+#if !defined(INLINE) && defined(USE_GNU_INLINE)
+/* Compiler supports inline, so include the inlineable functions as
+ * part of the header
+ */
+#define INLINE extern ap_inline
+
+INLINE int ap_os_is_path_absolute(const char *file);
+
+/*
+ * The inline things are the same as in the os/unix branch, so include
+ * that one rather than our own copy that would be the same.
+ */
+#include "os-inline.c"
+
+#else
+
+/* Compiler does not support inline, so prototype the inlineable functions
+ * as normal
+ */
+extern int ap_os_is_path_absolute(const char *file);
+#endif
+
+/* Other ap_os_ routines not used by this platform */
+
+#define ap_os_is_filename_valid(f) (1)
+#define ap_os_kill(pid, sig) kill(pid, sig)
+
+/*
+ * Abstraction layer for loading
+ * Apache modules under run-time via
+ * dynamic shared object (DSO) mechanism
+ */
+
+#ifdef HAVE_DL_H
+#include <dl.h>
+#endif
+
+#ifdef HAVE_DLFCN_H
+#include <dlfcn.h>
+#else
+void *dlopen(const char *, int);
+int dlclose(void *);
+void *dlsym(void *, const char *);
+const char *dlerror(void);
+#endif
+
+/* probably on an older system that doesn't support RTLD_NOW or RTLD_LAZY.
+ * The below define is a lie since we are really doing RTLD_LAZY since the
+ * system doesn't support RTLD_NOW.
+ */
+#ifndef RTLD_NOW
+#define RTLD_NOW 1
+#endif
+
+#ifndef RTLD_GLOBAL
+#define RTLD_GLOBAL 0
+#endif
+
+#define ap_os_dso_handle_t void *
+void ap_os_dso_init(void);
+void * ap_os_dso_load(const char *);
+void ap_os_dso_unload(void *);
+void * ap_os_dso_sym(void *, const char *);
+const char *ap_os_dso_error(void);
+
+#endif /* !APACHE_OS_H */
diff --git a/APACHE_1_3_42/src/os/mpeix/Makefile.tmpl b/APACHE_1_3_42/src/os/mpeix/Makefile.tmpl
new file mode 100644
index 0000000000..827f3dc9b6
--- /dev/null
+++ b/APACHE_1_3_42/src/os/mpeix/Makefile.tmpl
@@ -0,0 +1,49 @@
+CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS)
+LIBS=$(EXTRA_LIBS) $(LIBS1)
+INCLUDES=$(INCLUDES1) $(INCLUDES0) $(EXTRA_INCLUDES)
+LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS)
+
+LIBOBJS= os.o os-inline.o dlopen.o gettimeofday.o
+OBJS= $(LIBOBJS)
+
+LIB= libos.a
+
+all: $(LIB)
+
+$(LIB): $(LIBOBJS)
+ rm -f $@
+ ar cr $@ $(LIBOBJS)
+ $(RANLIB) $@
+
+.c.o:
+ $(CC) -c $(INCLUDES) $(CFLAGS) $<
+
+clean:
+ rm -f $(OBJS) $(LIB)
+
+distclean: clean
+ -rm -f Makefile
+
+# We really don't expect end users to use this rule. It works only with
+# gcc, and rebuilds Makefile.tmpl. You have to re-run Configure after
+# using it.
+depend:
+ cp Makefile.tmpl Makefile.tmpl.bak \
+ && sed -ne '1,/^# DO NOT REMOVE/p' Makefile.tmpl > Makefile.new \
+ && gcc -MM $(INCLUDES) $(CFLAGS) *.c >> Makefile.new \
+ && sed -e '1,$$s: $(INCDIR)/: $$(INCDIR)/:g' \
+ -e '1,$$s: $(OSDIR)/: $$(OSDIR)/:g' Makefile.new \
+ > Makefile.tmpl \
+ && rm Makefile.new
+
+$(OBJS): Makefile
+
+# DO NOT REMOVE
+dlopen.o: dlopen.c
+gettimeofday.o: gettimeofday.c
+os-inline.o: os-inline.c $(INCDIR)/ap_config.h \
+ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h \
+ $(OSDIR)/os.h $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h
+os.o: os.c $(INCDIR)/ap_config.h $(INCDIR)/ap_mmn.h \
+ $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \
+ $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h os.h
diff --git a/APACHE_1_3_42/src/os/mpeix/README b/APACHE_1_3_42/src/os/mpeix/README
new file mode 100644
index 0000000000..81c23bc950
--- /dev/null
+++ b/APACHE_1_3_42/src/os/mpeix/README
@@ -0,0 +1,274 @@
+ Using Apache With HP MPE/iX
+
+This document explains how to compile, install, configure and run Apache
+1.3 under HP MPE/iX.
+
+The bug reporting page and new-httpd mailing list are NOT provided to
+answer questions about configuration or running Apache. Before you submit a
+bug report or request, first consult this document, the Frequently Asked
+Questions page and the other relevant documentation topics. If you still
+have a question or problem, post it to the comp.sys.hp.mpe newsgroup or the
+associated HP3000-L mailing list, where many Apache users and several
+contributors are more than willing to answer new and obscure questions
+about using Apache on MPE/iX.
+
+deja.com's newsgroup archives offer easy browsing of previous questions.
+Searching the newsgroup archives, you will usually find your question was
+already asked and answered by other users!
+
+---------------------------------------------------------------------------
+
+ * Requirements
+ * Implementation Considerations
+ * Binary Distributions
+ * Create the Accounting Structure
+ * Downloading Apache
+ * Compiling Apache
+ * Installing Apache
+ * Configuring Apache
+ * Running Apache
+ * Controlling Apache
+
+---------------------------------------------------------------------------
+
+Requirements
+
+Apache 1.3 requires MPE/iX 6.0 or greater. It will NOT run on earlier
+releases of MPE/iX. The following MPE/iX patches (or their superseding
+descendants) are relevant to Apache:
+
+ * MPE/iX 6.0:
+ o MPEKXT3B - fixes an MPE bug that results in transient "permission
+ denied" errors being returned by the server to the browser.
+ o MPELX36A - enhances the kill() function so that MPE users with SM
+ capability can send signals to Apache for shutdown, restart, etc.
+ o MPELX44C - fixes an MPE bug that prevents DSO modules from being
+ dynamically loaded.
+ o MPELX51C - enhances the kill() function so that Apache can use it
+ when the Apache parent UID is different from the Apache children
+ UID (strongly recommended).
+ o NSTxxxxx - the latest network transport patch should always be
+ installed when using TCP/IP applications such as Apache.
+ * MPE/iX 6.5:
+ o MPELX44D - fixes an MPE bug that prevents DSO modules from being
+ dynamically loaded.
+ o MPELX51D - enhances the kill() function so that Apache can use it
+ when the Apache parent UID is different from the Apache children
+ UID (strongly recommended).
+ o NSTxxxxx - the latest network transport patch should always be
+ installed when using TCP/IP applications such as Apache.
+
+---------------------------------------------------------------------------
+
+Implementation Considerations
+
+While MPE has a very good POSIX implementation that enables fairly simple
+porting of Unix applications such as Apache, there are some Unix concepts
+which just don't exist or aren't fully implemented in MPE, and so this may
+force some functionality changes in the package being ported.
+
+Significant MPE vs. Unix OS differences
+
+ * MPE lacks the concept of a Unix UID=0 root user with special
+ privileges. Where Unix functions require a user to be executing as
+ root, MPE requires the user to be executing in priv mode, so the
+ program file must be linked with PM (Priv Mode) capability, and the
+ Unix function calls must be bracketed by GETPRIVMODE() and
+ GETUSERMODE() calls. The following Unix functions used by Apache are
+ affected:
+ o bind() for ports less than 1024
+ o setgid()
+ o setuid()
+ * MPE's support for UIDs and GIDs is more limited than Unix. Every MPE
+ account maps to a unique GID. Each MPE account can contain multiple
+ MPE users, and every MPE user maps to a unique UID (UID 0 is not
+ supported). The current UID for a process must correspond to an MPE
+ user within the MPE account that corresponds to the current GID of the
+ process.
+ * MPE child processes cannot survive the death of their parent. When
+ the parent terminates, any remaining children will be killed.
+ * MPE doesn't initialize the envp parameter when invoking the main() of
+ a new process. Use the global variable environ instead of envp.
+ * MPE link() exists, but always returns EIMPL. Use rename() or symlinks
+ instead of hard links.
+ * MPE doesn't allow the @ character in filenames.
+ * MPE lacks support for TCP_NODELAY, but that's the default anyway.
+ * MPE lacks support for SO_KEEPALIVE.
+ * MPE lacks support for process groups.
+ * MPE inetd only passes stdin (and NOT stdout) to the invoked service.
+ But you can write to stdin just fine.
+
+Major Apache functionality issues
+
+ * Beginning with HP-supported Apache 1.3.9 and HP WebWise MPE/iX Secure
+ Web Server A.01.00 (based on Apache 1.3.9), the User and Group
+ directives in httpd.conf are now unconditionally executed as
+ corresponding setuid()/setgid() calls. Previously this was only done
+ if HTTPD was being run as MANAGER.SYS. This functionality change was
+ submitted back to the 1.3.13-dev source tree at www.apache.org. The
+ Apache for Unix behavior is to only honor User and Group if running as
+ root.
+ * Beginning with HP-supported Apache 1.3.9 and HP WebWise MPE/iX Secure
+ Web Server A.01.00 (based on Apache 1.3.9), the SVIPC shared memory
+ macros SHM_R and SHM_W have been modified from their traditional
+ owner-only-read and owner-only-write values to be owner-and-group-read
+ and owner-and-group-write on MPE/iX in order to allow increased
+ parent/child flexibility in spite of MPE's limited POSIX UID/GID
+ support. This functionality change was submitted back to the
+ 1.3.13-dev source tree at www.apache.org. The Apache for Unix
+ behavior uses the traditional owner-only values of SHM_R and SHM_W.
+
+Minor Apache functionality issues
+
+ * Apache for Unix must be run as root to bind to TCP ports 1-1023.
+ Apache for MPE must call GETPRIVMODE() to bind to TCP ports 1-1023; PM
+ is not used for ports greater than 1023. The standard web server HTTP
+ port is 80.
+ * Apache for Unix in standalone mode will detach itself and run in the
+ background as a system-type process. Apache for MPE in standalone mode
+ cannot detach itself and run in the background because MPE POSIX
+ doesn't allow this (the detached child would be killed when the parent
+ terminated). Therefore you must use an MPE batch job to run Apache in
+ standalone mode.
+ * Apache for Unix uses process groups to manage child processes. Apache
+ for MPE cannot use process groups because MPE POSIX doesn't support
+ this. The implications of this are unknown.
+ * Apache for Unix uses the setsockopt() option TCP_NODELAY. Apache for
+ MPE does not, because MPE doesn't support it. But TCP_NODELAY is the
+ default MPE behavior anyway.
+ * Apache for Unix uses the setsockopt() option SO_KEEPALIVE. Apache for
+ MPE does not, because MPE doesn't support it.
+ * Apache for Unix under inetd reads from the socket via stdin and writes
+ via stdout. Apache for MPE under inetd reads *AND* writes the socket
+ via stdin. I consider MPE 5.5 inetd to be broken and poorly
+ documented, so I submitted SR 5003355016 to address this. If HP ever
+ alters the MPE inetd to pass the socket the way HPUX inetd does (not
+ likely in the grand scheme of things), the existing Apache for MPE
+ code will break.
+ * Apache for Unix will use the @ character in proxy cache filenames, but
+ since @ is illegal in MPE filenames, Apache for MPE uses the %
+ character instead.
+
+---------------------------------------------------------------------------
+
+Binary Distributions
+
+HP ships a fully supported Apache binary distribution with the Fundamental
+Operating System (FOS) in MPE/iX 6.5 and later. This distribution can be
+found in the APACHE account.
+
+HP supplies fully supported Apache binary distributions for MPE/iX 6.0 or
+later available for downloading from
+http://jazz.external.hp.com/src/apache/.
+
+Mark Bixby supplies Apache binary distributions for MPE/iX available for
+downloading from http://www.bixby.org/mark/apacheix.html. Binaries from
+bixby.org are NOT supported by HP. HP only supports binaries distributed
+by HP.
+
+All of the binary distributions mentioned above may possibly include
+functionality that hasn't yet been submitted back to the Apache Software
+Foundation (though submitting back is the intended goal). Please read the
+documentation that comes with these binaries in order to determine
+functionality differences (if any) compared to the latest sources available
+from the ASF.
+
+If you will be using one of these binary distributions, please stop reading
+this document and start reading the specific distribution documentation for
+installation details.
+
+---------------------------------------------------------------------------
+
+Create the Accounting Structure
+
+Apache can be installed under the account of your choice. For the purposes
+of this document, the APACHE account will be used:
+
+ 1. :HELLO MANAGER.SYS
+ 2. :NEWACCT APACHE,MGR
+ 3. :ALTACCT APACHE;PASS=xxxxxxxx;CAP=AM,AL,ND,SF,BA,IA,PM,PH
+ 4. :ALTGROUP PUB.APACHE;CAP=BA,IA,PM,PH;ACCESS=(R,L,X:AC;W,A,S:AL)
+ 5. :ALTUSER MGR.APACHE;CAP=AM,AL,ND,SF,BA,IA,PM,PH;HOME=PUB
+ 6. :NEWUSER SERVER.APACHE
+ 7. :ALTUSER SERVER.APACHE;CAP=ND,SF,BA,IA,PH;HOME=PUB
+
+Downloading Apache
+
+Use your web browser to download the Apache source tarball from
+http://www.apache.org/dist/. Then ftp upload the tarball to your e3000 as
+show below:
+
+C:\Temp>ftp 3000.host.name
+Connected to 3000.host.name.
+220 HP ARPA FTP Server [A0009H09] (C) Hewlett-Packard Co. 1990
+User (3000.host.name:(none)): MGR.APACHE
+331 Password required for MGR.APACHE. Syntax: acctpass
+Password:xxxxxxxx
+230 User logged on
+ftp> quote type L 8
+200 Type set to L (byte size 8).
+ftp> put apache_v.u.ff.tar.Z /tmp/apache.tar.Z
+200 PORT command ok.
+150 File: /tmp/apache.tar.Z opened; data connection will be opened
+226 Transfer complete.
+ftp: 2685572 bytes sent in 2.75Seconds 976.57Kbytes/sec.
+ftp> quit
+221 Server is closing command connection
+
+Unpack the tarball:
+
+ 1. :HELLO MGR.APACHE
+ 2. :XEQ SH.HPBIN.SYS -L
+ 3. $ mkdir src
+ 4. $ chmod 700 src
+ 5. $ cd src
+ 6. $ tar xvfopz /tmp/apache.tar.Z
+
+Compiling Apache
+
+It is STRONGLY recommended to use gcc instead of the HP C/iX compiler. You
+can obtain gcc from http://jazz.external.hp.com/src/gnu/gnuframe.html.
+
+ 1. $ cd apache_v.uu.ff
+ 2. $ ./configure --prefix=/APACHE/PUB --enable-module=xxx
+ --enable-module=yyy ...etc...
+ 3. $ make
+
+Installing Apache
+
+ 1. $ make install
+ 2. $ cd /APACHE/PUB
+ 3. $ mv bin/httpd HTTPD
+ 4. $ ln -s HTTPD bin/httpd
+ 5. $ callci "xeq linkedit.pub.sys 'altprog HTTPD;cap=ia,ba,ph,pm'"
+
+Configuring Apache
+
+Edit /APACHE/PUB/conf/httpd.conf and customize as needed for your
+environment. Be sure to make the following mandatory changes:
+
+ * User SERVER.APACHE
+ * Group APACHE
+
+Running Apache
+
+Simply create and :STREAM the following standalone server job in order to
+start Apache:
+
+!JOB JHTTPD,MGR.APACHE;OUTCLASS=,2
+!XEQ SH.HPBIN.SYS "-c 'umask 007; ./HTTPD -f /APACHE/PUB/conf/httpd.conf'"
+!eoj
+
+Controlling Apache
+
+Log on as MGR.APACHE (or MANAGER.SYS or any other SM user if you've
+installed MPELX36A on 6.0) in order to shutdown or restart Apache via the
+use of signals.
+
+To shut down Apache from the POSIX shell:
+
+$ kill `cat /APACHE/PUB/logs/httpd.pid`
+
+To shut down Apache from the CI:
+
+:XEQ SH.HPBIN.SYS '-c "kill `cat /APACHE/PUB/logs/httpd.pid`"'
diff --git a/APACHE_1_3_42/src/os/mpeix/dlopen.c b/APACHE_1_3_42/src/os/mpeix/dlopen.c
new file mode 100644
index 0000000000..a13e460b48
--- /dev/null
+++ b/APACHE_1_3_42/src/os/mpeix/dlopen.c
@@ -0,0 +1,240 @@
+/* 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.
+ */
+
+/*
+ * dlopen()/dlsym()/dlclose()/dlerror() emulation code for MPE
+ *
+ * This is not intended to be a 100% complete implementation.
+ */
+
+#include "httpd.h"
+
+typedef struct {
+ char libname[PATH_MAX + 3];
+ } t_mpe_dld, *p_mpe_dld;
+
+/*
+ * hpunload() is an undocumented and unsupported function used to unload
+ * NMXL library symbols. While it isn't listed in the Intrinsics manual
+ * or SYSINTR.PUB.SYS, it performs the same level of parameter checking
+ * that a regular intrinsic does. The parameter contents are the same
+ * as for HPGETPROCPLABEL(), with the exception of symbolname which can
+ * use the wildcard of " @ " which means unload ALL symbols RIGHT NOW.
+ */
+
+extern void hpunload(
+ int parms, /* option extensible hidden parameter */
+ char * symbolname,
+ char * libname,
+ int * status,
+ int * symboltype,
+ int casesensitive);
+
+#ifdef __GNUC__
+extern void HPGETPROCPLABEL(
+ int parms, /* option extensible hidden parameter */
+ char * symbolname,
+ void * symboladdr,
+ int * status,
+ char * libname,
+ int casesensitive,
+ int symboltype,
+ int * datasize,
+ int position,
+ int searchpath,
+ int binding);
+
+extern void HPERRMSG(
+ int parms, /* option extensible hidden parameter */
+ int displaycode,
+ int depth,
+ short errorproc,
+ int errornum,
+ char * buffer,
+ short * buflength,
+ int * status);
+#else
+#pragma intrinsic HPERRMSG
+#pragma intrinsic HPGETPROCPLABEL
+#endif
+
+int mpe_dl_status = 0;
+char mpe_dl_errmsg[1024];
+char mpe_dl_symname[128];
+int mpe_dl_symtype; /* 0=proc, 1=data, 2=malloc, 3=hpunload */
+
+/*
+ * dlopen()
+ */
+
+void *dlopen(const char *libname, int flag) {
+
+t_mpe_dld *handle;
+char cwd[PATH_MAX+3];
+char library[PATH_MAX+3];
+void *symaddr;
+int datalen;
+
+/* Save the library name in absolute format for later use */
+if (libname[0] != '/') {
+ getcwd(cwd, sizeof(cwd));
+ ap_snprintf(library, sizeof(library), " %s/%s ", cwd, libname);
+} else
+ ap_snprintf(library, sizeof(library), " %s ", libname);
+
+#define MPE_WITHOUT_MPELX44
+#ifdef MPE_WITHOUT_MPELX44
+/*
+Unfortunately if we simply tried to load the module structure data item
+directly in dlsym(), it would complain about unresolved function pointer
+references.
+
+However, if we first load an actual dummy procedure, we can then subsequently
+load the data item without trouble. Go figure.
+
+This bug is fixed by patch MPELX44A on MPE/iX 6.0 and patch MPELX44B on
+MPE/iX 6.5.
+*/
+
+/* Load the dummy procedure mpe_dl_stub */
+ap_cpystrn(mpe_dl_symname, " mpe_dl_stub ", sizeof(mpe_dl_symname));
+mpe_dl_symtype = 0;
+
+HPGETPROCPLABEL(
+#ifdef __GNUC__
+ 8,
+#endif
+ mpe_dl_symname, &symaddr, &mpe_dl_status, library, 1,
+ mpe_dl_symtype, &datalen, 1, 0, 0);
+
+/* We consider it to be a failure if the dummy procedure doesn't exist */
+/* if (mpe_dl_status != 0) return NULL; */
+/* Or not. If we failed to load mpe_dl_stub, press on and try to load the
+ real data item later in dlsym(). */
+#endif /* MPE_WITHOUT_MPELX44 */
+
+mpe_dl_symtype = 2;
+
+/* Allocate a handle */
+if ((handle = (t_mpe_dld *)malloc(sizeof(t_mpe_dld))) == NULL) return NULL;
+
+/* Initialize the handle fields */
+memset(handle, 0, sizeof(t_mpe_dld));
+
+ap_cpystrn(handle->libname,library,sizeof(handle->libname));
+
+return handle;
+}
+
+/*
+ * dlsym()
+ */
+
+void *dlsym(void *handle, const char *symbol) {
+
+t_mpe_dld *myhandle = handle;
+int datalen;
+void * symaddr = NULL;
+
+ap_snprintf(mpe_dl_symname, sizeof(mpe_dl_symname), " %s ", symbol);
+mpe_dl_symtype = 1;
+
+HPGETPROCPLABEL(
+#ifdef __GNUC__
+ 8,
+#endif
+ mpe_dl_symname, &symaddr, &mpe_dl_status, myhandle->libname, 1,
+ mpe_dl_symtype, &datalen, 1, 0, 0);
+
+if (mpe_dl_status != 0) {
+ return NULL;
+} else {
+ return symaddr;
+}
+
+}
+
+/*
+ * dlclose()
+ */
+
+int dlclose(void *handle) {
+
+p_mpe_dld myhandle = handle;
+
+mpe_dl_symtype = 3;
+
+/* unload ALL symbols from the library RIGHT NOW */
+hpunload(5, " @ ", myhandle->libname, &mpe_dl_status, NULL, 0);
+
+free(handle);
+
+if (mpe_dl_status == 0)
+ return 0;
+else
+ return -1;
+
+}
+
+/*
+ * dlerror()
+ */
+
+const char *dlerror(void) {
+
+char errmsg[1024];
+short buflen = sizeof(errmsg)-1;
+int status;
+char prefix[80];
+
+if (mpe_dl_status == 0) return NULL;
+
+switch (mpe_dl_symtype) {
+ case 0:
+ ap_snprintf(prefix,sizeof(prefix),
+ "HPGETPROCPLABEL() failed on procedure%s",mpe_dl_symname);
+ break;
+ case 1:
+ ap_snprintf(prefix,sizeof(prefix),
+ "HPGETPROCPLABEL() failed on data item%s",mpe_dl_symname);
+ break;
+ case 3:
+ ap_cpystrn(prefix,"hpunload() failed",sizeof(prefix));
+ break;
+ default:
+ ap_cpystrn(prefix,"Unknown MPE dynaloader error",sizeof(prefix));
+ break;
+}
+
+/* Obtain the error message for the most recent mpe_dl_status value */
+HPERRMSG(
+#ifdef __GNUC__
+ 7,
+#endif
+ 3, 0, 0, mpe_dl_status, (char *)&errmsg, &buflen, &status);
+
+if (status == 0)
+ errmsg[buflen] = '\0';
+else
+ ap_snprintf(errmsg,sizeof(errmsg),
+ "HPERRMSG failed (status=%x); MPE loader status = %x",
+ status, mpe_dl_status);
+
+ap_snprintf(mpe_dl_errmsg,sizeof(mpe_dl_errmsg),"%s\n%s",prefix,errmsg);
+
+return (char *)&mpe_dl_errmsg;
+
+}
diff --git a/APACHE_1_3_42/src/os/mpeix/gettimeofday.c b/APACHE_1_3_42/src/os/mpeix/gettimeofday.c
new file mode 100644
index 0000000000..dfb1462026
--- /dev/null
+++ b/APACHE_1_3_42/src/os/mpeix/gettimeofday.c
@@ -0,0 +1,132 @@
+/* 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.
+ */
+
+/*
+ stub for gettimeofday():
+ gettimeofday() is UNIX, not POSIX
+*/
+
+/*-------------------------------------------------------------------*/
+/* */
+/* gettimeofday */
+/* */
+/*-------------------------------------------------------------------*/
+/* */
+/* #include <time.h> */
+/* */
+/* int gettimeofday( */
+/* struct timeval *tp, */
+/* struct timezone *tzp, */
+/* ); */
+/* */
+/*-------------------------------------------------------------------*/
+/* */
+/* This function returns seconds and microseconds since midnight */
+/* January 1, 1970. The microseconds is actually only accurate to */
+/* the millisecond. */
+/* */
+/* Note: To pick up the definitions of structs timeval and timezone */
+/* from the <time.h> include file, the directive */
+/* _SOCKET_SOURCE must be used. */
+/* */
+/*-------------------------------------------------------------------*/
+/* */
+/* RETURN VALUE */
+/* A 0 return value indicates that the call succeeded. A -1 return */
+/* value indicates an error occurred; errno is set to indicate the */
+/* error. */
+/* */
+/*-------------------------------------------------------------------*/
+/* */
+/* ERRORS */
+/* EFAULT not implemented yet. */
+/* */
+/*-------------------------------------------------------------------*/
+/* Changes: */
+/* 2-91 DR. Created. */
+/* */
+/*-------------------------------------------------------------------*/
+
+
+/* need _SOCKET_SOURCE to pick up structs timeval and timezone in time.h */
+#ifndef _SOCKET_SOURCE
+# define _SOCKET_SOURCE
+#endif
+
+#include <time.h> /* structs timeval & timezone,
+ difftime(), localtime(), mktime(), time() */
+
+#pragma intrinsic TIMER
+
+
+
+int
+gettimeofday(struct timeval *tp, struct timezone *tpz)
+{
+ static unsigned long basetime = 0;
+ static int dsttime = 0;
+ static int minuteswest = 0;
+ static int oldtime = 0;
+ register int newtime;
+ int TIMER();
+
+
+ /*-------------------------------------------------------------------*/
+ /* Setup a base from which all future time will be computed. */
+ /*-------------------------------------------------------------------*/
+ if ( basetime == 0 )
+ {
+ time_t gmt_time;
+ time_t loc_time;
+ struct tm *loc_time_tm;
+
+ gmt_time = time( NULL );
+ loc_time_tm = localtime( &gmt_time ) ;
+ loc_time = mktime( loc_time_tm );
+
+ oldtime = TIMER();
+ basetime = (unsigned long) ( loc_time - (oldtime/1000) );
+
+ /*----------------------------------------------------------------*/
+ /* The calling process must be restarted if timezone or dst */
+ /* changes. */
+ /*----------------------------------------------------------------*/
+ minuteswest = (int) (difftime( loc_time, gmt_time ) / 60);
+ dsttime = loc_time_tm->tm_isdst;
+ }
+
+ /*-------------------------------------------------------------------*/
+ /* Get the new time value. The timer value rolls over every 24 days, */
+ /* so if the delta is negative, the basetime value is adjusted. */
+ /*-------------------------------------------------------------------*/
+ newtime = TIMER();
+ if ( newtime < oldtime ) basetime += 2073600;
+ oldtime = newtime;
+
+ /*-------------------------------------------------------------------*/
+ /* Return the timestamp info. */
+ /*-------------------------------------------------------------------*/
+ tp->tv_sec = basetime + newtime/1000;
+ tp->tv_usec = (newtime%1000) * 1000; /* only accurate to milli */
+ if (tpz)
+ {
+ tpz->tz_minuteswest = minuteswest;
+ tpz->tz_dsttime = dsttime;
+ }
+
+ return 0;
+
+} /* gettimeofday() */
diff --git a/APACHE_1_3_42/src/os/mpeix/mpe_dl_stub.c b/APACHE_1_3_42/src/os/mpeix/mpe_dl_stub.c
new file mode 100644
index 0000000000..0d03a4d407
--- /dev/null
+++ b/APACHE_1_3_42/src/os/mpeix/mpe_dl_stub.c
@@ -0,0 +1,17 @@
+/* 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.
+ */
+
+int mpe_dl_stub(void) { return 0; };
diff --git a/APACHE_1_3_42/src/os/mpeix/os-inline.c b/APACHE_1_3_42/src/os/mpeix/os-inline.c
new file mode 100644
index 0000000000..26801eef41
--- /dev/null
+++ b/APACHE_1_3_42/src/os/mpeix/os-inline.c
@@ -0,0 +1,47 @@
+/* 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.
+ */
+
+/*
+ * This file contains functions which can be inlined if the compiler
+ * has an "inline" modifier. Because of this, this file is both a
+ * header file and a compilable module.
+ *
+ * Only inlineable functions should be defined in here. They must all
+ * include the INLINE modifier.
+ *
+ * If the compiler supports inline, this file will be #included as a
+ * header file from os.h to create all the inline function
+ * definitions. INLINE will be defined to whatever is required on
+ * function definitions to make them inline declarations.
+ *
+ * If the compiler does not support inline, this file will be compiled
+ * as a normal C file into libos.a (along with os.c). In this case
+ * INLINE will _not_ be set so we can use this to test if we are
+ * compiling this source file.
+ */
+
+#ifndef INLINE
+#define INLINE
+
+/* Anything required only when compiling */
+#include "ap_config.h"
+
+#endif
+
+INLINE int ap_os_is_path_absolute(const char *file)
+{
+ return file[0] == '/';
+}
diff --git a/APACHE_1_3_42/src/os/mpeix/os.c b/APACHE_1_3_42/src/os/mpeix/os.c
new file mode 100644
index 0000000000..955304809a
--- /dev/null
+++ b/APACHE_1_3_42/src/os/mpeix/os.c
@@ -0,0 +1,17 @@
+/* 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.
+ */
+
+#include "../unix/os.c"
diff --git a/APACHE_1_3_42/src/os/mpeix/os.h b/APACHE_1_3_42/src/os/mpeix/os.h
new file mode 100644
index 0000000000..abf56d8e8a
--- /dev/null
+++ b/APACHE_1_3_42/src/os/mpeix/os.h
@@ -0,0 +1,106 @@
+/* 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.
+ */
+
+#ifndef APACHE_OS_H
+#define APACHE_OS_H
+
+#include "ap_config.h"
+
+#ifndef PLATFORM
+#define PLATFORM "MPE/iX"
+#endif
+
+/*
+ * 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
+ */
+
+#if !defined(INLINE) && defined(USE_GNU_INLINE)
+/* Compiler supports inline, so include the inlineable functions as
+ * part of the header
+ */
+#define INLINE extern ap_inline
+
+INLINE int ap_os_is_path_absolute(const char *file);
+
+#include "os-inline.c"
+
+#else
+
+/* Compiler does not support inline, so prototype the inlineable functions
+ * as normal
+ */
+extern int ap_os_is_path_absolute(const char *file);
+#endif
+
+/* Other ap_os_ routines not used by this platform */
+
+#define ap_os_is_filename_valid(f) (1)
+#define ap_os_kill(pid, sig) kill(pid, sig)
+
+/*
+ * Abstraction layer for loading
+ * Apache modules under run-time via
+ * dynamic shared object (DSO) mechanism
+ */
+
+#ifdef HAVE_DL_H
+#include <dl.h>
+#endif
+
+/*
+ * Do not use native AIX DSO support
+ */
+#ifdef AIX
+#undef HAVE_DLFCN_H
+#endif
+
+#ifdef HAVE_DLFCN_H
+#include <dlfcn.h>
+#else
+void *dlopen(const char *, int);
+int dlclose(void *);
+void *dlsym(void *, const char *);
+const char *dlerror(void);
+#endif
+
+/* probably on an older system that doesn't support RTLD_NOW or RTLD_LAZY.
+ * The below define is a lie since we are really doing RTLD_LAZY since the
+ * system doesn't support RTLD_NOW.
+ */
+#ifndef RTLD_NOW
+#define RTLD_NOW 1
+#endif
+
+#ifndef RTLD_GLOBAL
+#define RTLD_GLOBAL 0
+#endif
+
+#if (defined(__FreeBSD__) ||\
+ defined(__OpenBSD__) ||\
+ defined(__NetBSD__) ) && !defined(__ELF__)
+#define DLSYM_NEEDS_UNDERSCORE
+#endif
+
+#define ap_os_dso_handle_t void *
+void ap_os_dso_init(void);
+void * ap_os_dso_load(const char *);
+void ap_os_dso_unload(void *);
+void * ap_os_dso_sym(void *, const char *);
+const char *ap_os_dso_error(void);
+
+#endif /* !APACHE_OS_H */
diff --git a/APACHE_1_3_42/src/os/netware/Apache.def b/APACHE_1_3_42/src/os/netware/Apache.def
new file mode 100644
index 0000000000..9f1c81463d
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/Apache.def
@@ -0,0 +1,4 @@
+# NLMs Apache depends on
+
+MODULE clib.nlm
+MODULE apachec.nlm
diff --git a/APACHE_1_3_42/src/os/netware/ApacheCore.imp b/APACHE_1_3_42/src/os/netware/ApacheCore.imp
new file mode 100644
index 0000000000..2cda1b1bb5
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheCore.imp
@@ -0,0 +1,428 @@
+ ap_MD5Final,
+ ap_MD5Init,
+ ap_MD5Update,
+ ap_acquire_mutex,
+ ap_add_cgi_vars,
+ ap_add_common_vars,
+ ap_add_loaded_module,
+ ap_add_module,
+ ap_add_named_module,
+ ap_add_per_dir_conf,
+ ap_add_per_url_conf,
+ ap_add_version_component,
+ ap_allow_options,
+ ap_allow_overrides,
+ ap_append_arrays,
+ ap_array_cat,
+ ap_auth_name,
+ ap_auth_type,
+ ap_auth_nonce,
+ ap_basic_http_header,
+ ap_bclose,
+ ap_bcreate,
+ ap_bfilbuf,
+ ap_bfileno,
+ ap_bflsbuf,
+ ap_bflush,
+ ap_bgetopt,
+ ap_bgets,
+ ap_bhalfduplex,
+ ap_block_alarms,
+ ap_blookc,
+ ap_bnonblock,
+ ap_bonerror,
+ ap_bpushfd,
+ ap_bputs,
+ ap_bread,
+ ap_bsetflag,
+ ap_bsetopt,
+ ap_bskiplf,
+ ap_bspawn_child,
+ ap_bwrite,
+ ap_bytes_in_free_blocks,
+ ap_bytes_in_pool,
+ ap_call_exec,
+ ap_can_exec,
+ ap_cfg_closefile,
+ ap_cfg_getc,
+ ap_cfg_getline,
+ ap_chdir_file,
+ ap_check_alarm,
+ ap_check_cmd_context,
+ ap_checkmask,
+ ap_cleanup_for_exec,
+ ap_clear_module_list,
+ ap_clear_pool,
+ ap_clear_table,
+ ap_close_piped_log,
+ ap_construct_server,
+ ap_construct_url,
+ ap_content_type_tolower,
+ ap_copy_array,
+ ap_copy_array_hdr,
+ ap_copy_table,
+ ap_count_dirs,
+ ap_cpystrn,
+ ap_create_environment,
+ ap_create_mutex,
+ ap_create_per_dir_config,
+ ap_custom_response,
+ ap_default_port_for_request,
+ ap_default_port_for_scheme,
+ ap_default_type,
+ ap_destroy_mutex,
+ ap_destroy_pool,
+ ap_destroy_sub_req,
+ ap_die,
+ ap_discard_request_body,
+ ap_document_root,
+ ap_each_byterange,
+ ap_error_log2stderr,
+ ap_escape_html,
+ ap_escape_logitem,
+ ap_escape_path_segment,
+ ap_escape_quotes,
+ ap_escape_shell_cmd,
+ ap_exists_scoreboard_image,
+ ap_finalize_request_protocol,
+ ap_finalize_sub_req_protocol,
+ ap_find_command,
+ ap_find_command_in_modules,
+ ap_find_last_token,
+ ap_find_linked_module,
+ ap_find_module_name,
+ ap_find_path_info,
+ ap_find_token,
+ ap_get_basic_auth_pw,
+ ap_get_client_block,
+ ap_get_gmtoff,
+ ap_get_limit_req_body,
+ ap_get_remote_host,
+ ap_get_remote_logname,
+ ap_get_server_built,
+ ap_get_server_name,
+ ap_get_server_port,
+ ap_get_server_version,
+ ap_get_time,
+ ap_get_token,
+ ap_getparents,
+ ap_getword,
+ ap_getword_conf,
+ ap_getword_conf_nc,
+ ap_getword_nc,
+ ap_getword_nulls,
+ ap_getword_nulls_nc,
+ ap_getword_white,
+ ap_getword_white_nc,
+ ap_gm_timestr_822,
+ ap_gname2id,
+ ap_handle_command,
+ ap_hard_timeout,
+ ap_ht_time,
+ ap_ind,
+ ap_index_of_response,
+ ap_init_virtual_host,
+ ap_internal_redirect,
+ ap_internal_redirect_handler,
+ ap_is_directory,
+ ap_is_fnmatch,
+ ap_is_initial_req,
+ ap_is_matchexp,
+ ap_is_url,
+ ap_kill_cleanup,
+ ap_kill_cleanups_for_fd,
+ ap_kill_cleanups_for_socket,
+ ap_kill_timeout,
+ ap_log_assert,
+ ap_log_error_old,
+ ap_log_reason,
+ ap_log_unixerr,
+ ap_make_array,
+ ap_make_dirstr,
+ ap_make_dirstr_parent,
+ ap_make_dirstr_prefix,
+ ap_make_full_path,
+ ap_make_sub_pool,
+ ap_make_table,
+ ap_matches_request_vhost,
+ ap_md5,
+ ap_md5_binary,
+ ap_md5contextTo64,
+ ap_md5digest,
+ ap_meets_conditions,
+ ap_no2slash,
+ ap_note_auth_failure,
+ ap_note_basic_auth_failure,
+ ap_note_cleanups_for_fd,
+ ap_note_cleanups_for_file,
+ ap_note_cleanups_for_socket,
+ ap_note_digest_auth_failure,
+ ap_note_subprocess,
+ ap_open_mutex,
+ ap_open_piped_log,
+ ap_os_escape_path,
+ ap_overlap_tables,
+ ap_overlay_tables,
+ ap_palloc,
+ ap_parseHTTPdate,
+ ap_parse_hostinfo_components,
+ ap_parse_uri,
+ ap_parse_uri_components,
+ ap_pcalloc,
+ ap_pcfg_open_custom,
+ ap_pcfg_openfile,
+ ap_pclosedir,
+ ap_pclosef,
+ ap_pclosesocket,
+ ap_pduphostent,
+ ap_pfclose,
+ ap_pfdopen,
+ ap_pfopen,
+ ap_pgethostbyname,
+ ap_popendir,
+ ap_popenf,
+ ap_popenf_ex,
+ ap_pregcomp,
+ ap_pregfree,
+ ap_pregsub,
+ ap_psignature,
+ ap_psocket,
+ ap_psocket_ex,
+ ap_pstrdup,
+ ap_pstrndup,
+ ap_push_array,
+ ap_pvsprintf,
+ ap_rationalize_mtime,
+ ap_register_cleanup,
+ ap_release_mutex,
+ ap_remove_loaded_module,
+ ap_remove_module,
+ ap_requires,
+ ap_reset_timeout,
+ ap_rflush,
+ ap_rind,
+ ap_rputc,
+ ap_rputs,
+ ap_run_cleanup,
+ ap_run_sub_req,
+ ap_rwrite,
+ ap_satisfies,
+ ap_scan_script_header_err,
+ ap_scan_script_header_err_buff,
+ ap_scan_script_header_err_core,
+ ap_send_fb,
+ ap_send_fb_length,
+ ap_send_fd,
+ ap_send_fd_length,
+ ap_send_http_header,
+ ap_send_http_trace,
+ ap_send_mmap,
+ ap_send_size,
+ ap_server_root_relative,
+ ap_set_byterange,
+ ap_set_content_length,
+ ap_set_etag,
+ ap_set_keepalive,
+ ap_set_last_modified,
+ ap_setup_client_block,
+ ap_should_client_block,
+ ap_soft_timeout,
+ ap_some_auth_required,
+ ap_spawn_child,
+ ap_srm_command_loop,
+ ap_str_tolower,
+ ap_strcasecmp_match,
+ ap_strcmp_match,
+ ap_sub_req_lookup_file,
+ ap_sub_req_lookup_uri,
+ ap_sync_scoreboard_image,
+ ap_table_add,
+ ap_table_addn,
+ ap_table_get,
+ ap_table_merge,
+ ap_table_mergen,
+ ap_table_set,
+ ap_table_setn,
+ ap_table_unset,
+ ap_tm2sec,
+ ap_uname2id,
+ ap_unblock_alarms,
+ ap_unescape_url,
+ ap_unparse_uri_components,
+ ap_update_mtime,
+ ap_uudecode,
+ ap_uuencode,
+ ap_vbprintf,
+ ap_vformatter,
+ ap_vsnprintf,
+ regcomp,
+ regexec,
+ regfree,
+ access_module,
+ alias_module,
+ ap_bprintf,
+ ap_bvputs,
+ ap_day_snames,
+ ap_extended_status,
+ ap_limit_section,
+ ap_loaded_modules,
+ ap_log_error,
+ ap_log_printf,
+ ap_log_rerror,
+ ap_month_snames,
+ ap_null_cleanup,
+ ap_psprintf,
+ ap_pstrcat,
+ ap_restart_time,
+ ap_rprintf,
+ ap_rvputs,
+ ap_scoreboard_image,
+ ap_send_header_field,
+ ap_server_argv0,
+ ap_server_root,
+ ap_set_file_slot,
+ ap_set_flag_slot,
+ ap_set_string_slot,
+ ap_set_string_slot_lower,
+ ap_snprintf,
+ ap_suexec_enabled,
+ ap_table_do,
+ apache_main,
+ asis_module,
+ auth_module,
+ autoindex_module,
+ config_log_module,
+ core_module,
+ dir_module,
+ env_module,
+ imap_module,
+ includes_module,
+ mime_module,
+ negotiation_module,
+ setenvif_module,
+ so_module,
+ top_module,
+ ap_fnmatch,
+ ap_method_number_of,
+ ap_exists_config_define,
+ ap_single_module_configure,
+ ap_make_etag,
+ ap_array_pstrcat,
+ ap_find_list_item,
+ ap_MD5Encode,
+ ap_validate_password,
+ ap_size_list_item,
+ ap_get_list_item,
+ ap_scoreboard_fname,
+ ap_pid_fname,
+ ap_excess_requests_per_child,
+ ap_threads_per_child,
+ ap_max_requests_per_child,
+ ap_daemons_to_start,
+ ap_daemons_min_free,
+ ap_daemons_max_free,
+ ap_daemons_limit,
+ ap_user_name,
+ ap_user_id,
+ ap_group_id,
+ ap_standalone,
+ ap_server_confname,
+ ap_sub_req_method_uri,
+ ap_regerror,
+ ap_regexec,
+ ap_field_noparam,
+ ap_pbase64decode,
+ ap_pbase64encode,
+ ap_base64encode,
+ ap_base64encode_binary,
+ ap_base64encode_len,
+ ap_base64decode,
+ ap_base64decode_binary,
+ ap_base64decode_len,
+ ap_SHA1Init,
+ ap_SHA1Update_binary,
+ ap_SHA1Update,
+ ap_SHA1Final,
+ ap_sha1_base64,
+ ap_my_generation,
+ ap_get_virthost_addr,
+ ap_listeners,
+ ap_listenbacklog,
+ clean_parent_exit,
+ init_tsd,
+ ap_set_config_vectors,
+ ap_strcasestr,
+ ap_to64,
+ ap_vrprintf,
+ regerror,
+ ap_add_file_conf,
+ ap_configtestonly,
+ ap_is_rdirectory,
+ ap_remove_spaces,
+ ap_scan_script_header_err_strs,
+ ap_start_shutdown,
+ ap_start_restart,
+ ap_stripprefix,
+ ap_send_error_response,
+ ap_os_canonical_filename,
+ ap_os_case_canonical_filename,
+ ap_os_http_method,
+ ap_os_default_port,
+ ap_os_is_filename_valid,
+ os_readdir,
+ os_opendir,
+ os_closedir,
+ ap_update_vhost_from_headers,
+ ap_update_vhost_given_ip,
+ ap_set_name_virtual_host,
+ ap_parse_vhost_addrs,
+ ap_fini_vhost_config,
+ ap_init_vhost_config,
+ ap_check_access,
+ ap_check_auth,
+ ap_check_user_id,
+ ap_translate_name,
+ ap_find_types,
+ ap_run_fixups,
+ ap_invoke_handler,
+ ap_log_transaction,
+ ap_header_parse,
+ ap_run_post_read_request,
+ ap_single_module_configure,
+ ap_init_modules,
+ ap_child_init_modules,
+ ap_child_exit_modules,
+ ap_setup_prelinked_modules,
+ ap_show_directives,
+ ap_show_modules,
+ ap_parse_htaccess,
+ ap_process_resource_config,
+ ap_create_request_config,
+ ap_merge_per_dir_configs,
+ ap_bind_address,
+ ap_core_reorder_directories,
+ ap_coredump_dir,
+ ap_force_library_loading,
+ ap_get_local_host,
+ ap_get_virthost_addr,
+ ap_init_alloc,
+ ap_keepalive_timeout,
+ ap_lock_fname,
+ ap_log_pid,
+ ap_open_logs,
+ ap_process_request,
+ ap_read_config,
+ ap_read_request,
+ ap_response_code_string,
+ ap_rfc1413,
+ ap_send_http_options,
+ ap_server_config_defines,
+ ap_server_post_read_config,
+ ap_server_pre_read_config,
+ ap_set_callback_and_alarm,
+ ap_set_sub_req_protocol,
+ ap_update_child_status,
+ ap_sendwithtimeout,
+ ap_recvwithtimeout,
+ ap_getline,
+ ap_get_chunk_size,
diff --git a/APACHE_1_3_42/src/os/netware/ApacheCoreNW.def b/APACHE_1_3_42/src/os/netware/ApacheCoreNW.def
new file mode 100644
index 0000000000..6762ac5dfe
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheCoreNW.def
@@ -0,0 +1,8 @@
+MODULE CLIB.NLM
+MODULE WS2_32.NLM
+IMPORT KillMe
+IMPORT kMutexAlloc
+IMPORT kMutexFree
+IMPORT kMutexLock
+IMPORT kMutexUnlock
+EXPORT @apachecore.imp
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleAuthAnon.def b/APACHE_1_3_42/src/os/netware/ApacheModuleAuthAnon.def
new file mode 100644
index 0000000000..7465f677d1
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleAuthAnon.def
@@ -0,0 +1,2 @@
+EXPORT anon_auth_module
+
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleAuthDBM.def b/APACHE_1_3_42/src/os/netware/ApacheModuleAuthDBM.def
new file mode 100644
index 0000000000..a25efea00c
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleAuthDBM.def
@@ -0,0 +1,2 @@
+EXPORT dbm_auth_module
+
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleCERNMeta.def b/APACHE_1_3_42/src/os/netware/ApacheModuleCERNMeta.def
new file mode 100644
index 0000000000..cb57210ebd
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleCERNMeta.def
@@ -0,0 +1 @@
+EXPORT cern_meta_module
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleDigest.def b/APACHE_1_3_42/src/os/netware/ApacheModuleDigest.def
new file mode 100644
index 0000000000..74575fff4f
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleDigest.def
@@ -0,0 +1 @@
+EXPORT digest_module
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleExpires.def b/APACHE_1_3_42/src/os/netware/ApacheModuleExpires.def
new file mode 100644
index 0000000000..b48301ca05
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleExpires.def
@@ -0,0 +1 @@
+EXPORT expires_module
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleForensic.def b/APACHE_1_3_42/src/os/netware/ApacheModuleForensic.def
new file mode 100644
index 0000000000..c6641c24a0
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleForensic.def
@@ -0,0 +1 @@
+EXPORT log_forensic_module
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleHeaders.def b/APACHE_1_3_42/src/os/netware/ApacheModuleHeaders.def
new file mode 100644
index 0000000000..5c765c286e
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleHeaders.def
@@ -0,0 +1 @@
+EXPORT headers_module
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleInfo.def b/APACHE_1_3_42/src/os/netware/ApacheModuleInfo.def
new file mode 100644
index 0000000000..6669099004
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleInfo.def
@@ -0,0 +1,2 @@
+EXPORT info_module
+
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleProxy.def b/APACHE_1_3_42/src/os/netware/ApacheModuleProxy.def
new file mode 100644
index 0000000000..7b1c93b7d7
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleProxy.def
@@ -0,0 +1 @@
+EXPORT proxy_module
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleRewrite.def b/APACHE_1_3_42/src/os/netware/ApacheModuleRewrite.def
new file mode 100644
index 0000000000..2f7d7e8c11
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleRewrite.def
@@ -0,0 +1 @@
+EXPORT rewrite_module
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleSpeling.def b/APACHE_1_3_42/src/os/netware/ApacheModuleSpeling.def
new file mode 100644
index 0000000000..dec9ffc366
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleSpeling.def
@@ -0,0 +1,2 @@
+EXPORT speling_module
+
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleStatus.def b/APACHE_1_3_42/src/os/netware/ApacheModuleStatus.def
new file mode 100644
index 0000000000..06f9577cea
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleStatus.def
@@ -0,0 +1 @@
+EXPORT status_module
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleTLS.def b/APACHE_1_3_42/src/os/netware/ApacheModuleTLS.def
new file mode 100644
index 0000000000..cd923a556e
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleTLS.def
@@ -0,0 +1,3 @@
+MODULE wspssl
+EXPORT tls_module
+
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleUniqueID.def b/APACHE_1_3_42/src/os/netware/ApacheModuleUniqueID.def
new file mode 100644
index 0000000000..95cfc83546
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleUniqueID.def
@@ -0,0 +1 @@
+EXPORT unique_id_module
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleUserTrack.def b/APACHE_1_3_42/src/os/netware/ApacheModuleUserTrack.def
new file mode 100644
index 0000000000..bd975910c2
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleUserTrack.def
@@ -0,0 +1 @@
+EXPORT usertrack_module
diff --git a/APACHE_1_3_42/src/os/netware/ApacheModuleVhostAlias.def b/APACHE_1_3_42/src/os/netware/ApacheModuleVhostAlias.def
new file mode 100644
index 0000000000..09f5dc2eae
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/ApacheModuleVhostAlias.def
@@ -0,0 +1 @@
+EXPORT vhost_alias_module
diff --git a/APACHE_1_3_42/src/os/netware/NWGNUmakefile b/APACHE_1_3_42/src/os/netware/NWGNUmakefile
new file mode 100644
index 0000000000..3625360b63
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/NWGNUmakefile
@@ -0,0 +1,27 @@
+#
+# Declare the sub-directories to be built here
+#
+
+SUBDIRS = \
+ $(EOLIST)
+
+#
+# Get the 'head' of the build environment. This includes default targets and
+# paths to tools
+#
+
+include $(AP_WORK)\NWGNUhead.inc
+
+#
+# build this level's files
+
+ifeq "$(wildcard NWGNUmakefile.mak)" "NWGNUmakefile.mak"
+include NWGNUmakefile.mak
+endif
+
+#
+# You can use this target if all that is needed is to copy files to the
+# installation area
+#
+install :: nlms FORCE
+
diff --git a/APACHE_1_3_42/src/os/netware/NWGNUmakefile.mak b/APACHE_1_3_42/src/os/netware/NWGNUmakefile.mak
new file mode 100644
index 0000000000..b66cc406f4
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/NWGNUmakefile.mak
@@ -0,0 +1,246 @@
+#
+# Make sure all needed macro's are defined
+#
+
+#
+# Get the 'head' of the build environment if necessary. This includes default
+# targets and paths to tools
+#
+
+ifndef EnvironmentDefined
+include $(AP_WORK)\NWGNUhead.inc
+endif
+
+#
+# These directories will be at the beginning of the include list, followed by
+# INCDIRS
+#
+XINCDIRS += \
+ $(SRC)\include \
+ $(EOLIST)
+
+#
+# These flags will come after CFLAGS
+#
+XCFLAGS += \
+ $(EOLIST)
+
+#
+# These defines will come after DEFINES
+#
+XDEFINES += \
+ $(EOLIST)
+
+#
+# These flags will be added to the link.opt file
+#
+XLFLAGS += \
+ $(EOLIST)
+
+#
+# These values will be appended to the correct variables based on the value of
+# RELEASE
+#
+ifeq "$(RELEASE)" "debug"
+XINCDIRS += \
+ $(EOLIST)
+
+XCFLAGS += \
+ $(EOLIST)
+
+XDEFINES += \
+ $(EOLIST)
+
+XLFLAGS += \
+ $(EOLIST)
+endif
+
+ifeq "$(RELEASE)" "noopt"
+XINCDIRS += \
+ $(EOLIST)
+
+XCFLAGS += \
+ $(EOLIST)
+
+XDEFINES += \
+ $(EOLIST)
+
+XLFLAGS += \
+ $(EOLIST)
+endif
+
+ifeq "$(RELEASE)" "release"
+XINCDIRS += \
+ $(EOLIST)
+
+XCFLAGS += \
+ $(EOLIST)
+
+XDEFINES += \
+ $(EOLIST)
+
+XLFLAGS += \
+ $(EOLIST)
+endif
+
+#
+# These are used by the link target if an NLM is being generated
+# This is used by the link 'name' directive to name the nlm. If left blank
+# TARGET_nlm (see below) will be used.
+#
+NLM_NAME = mod_tls
+
+#
+# This is used by the link '-desc ' directive.
+# If left blank, NLM_NAME will be used.
+#
+NLM_DESCRIPTION = Apache TLS/SSL Module
+
+#
+# This is used by the '-threadname' directive. If left blank,
+# NLM_NAME Thread will be used.
+#
+NLM_THREAD_NAME = TLSModule
+
+#
+# If this is specified, it will override VERSION value in
+# $(AP_WORK)\NWGNUenvironment.inc
+#
+NLM_VERSION = 1,0,0
+
+#
+# If this is specified, it will override the default of 64K
+#
+NLM_STACK_SIZE = 8192
+
+#
+# If this is specified it will be used by the link '-entry' directive
+#
+NLM_ENTRY_SYM = _lib_start_ws
+
+#
+# If this is specified it will be used by the link '-exit' directive
+#
+NLM_EXIT_SYM = _lib_stop_ws
+
+#
+# If this is specified it will be used by the link '-flags' directive
+#
+NLM_FLAGS =
+
+#
+# Declare all target files (you must add your files here)
+#
+
+#
+# If there is an NLM target, put it here
+#
+TARGET_nlm = \
+ $(OBJDIR)/mod_tls.nlm \
+ $(EOLIST)
+
+#
+# If there is an LIB target, put it here
+#
+TARGET_lib = \
+ $(OBJDIR)/NetWare.lib \
+ $(EOLIST)
+
+#
+# These are the OBJ files needed to create the NLM target above.
+# Paths must all use the '/' character
+#
+FILES_nlm_objs = \
+ $(OBJDIR)/mod_tls.o \
+ $(EOLIST)
+
+#
+# These are the LIB files needed to create the NLM target above.
+# These will be added as a library command in the link.opt file.
+#
+FILES_nlm_libs = \
+ $(NWOS)\$(OBJDIR)\libprews.o \
+ $(EOLIST)
+
+#
+# These are the modules that the above NLM target depends on to load.
+# These will be added as a module command in the link.opt file.
+#
+FILES_nlm_modules = \
+ wspssl \
+ $(EOLIST)
+
+#
+# If the nlm has a msg file, put it's path here
+#
+FILE_nlm_msg =
+
+#
+# If the nlm has a hlp file put it's path here
+#
+FILE_nlm_hlp =
+
+#
+# If this is specified, it will override $(NWOS)\copyright.txt.
+#
+FILE_nlm_copyright =
+
+#
+# Any additional imports go here
+#
+FILES_nlm_Ximports = \
+ @ws2nlm.imp \
+ @threads.imp \
+ @clib.imp \
+ @ApacheCore.imp \
+ $(EOLIST)
+
+#
+# Any symbols exported to here
+#
+FILES_nlm_exports = \
+ tls_module \
+ $(EOLIST)
+
+#
+# These are the OBJ files needed to create the LIB target above.
+# Paths must all use the '/' character
+#
+FILES_lib_objs = \
+ $(OBJDIR)/mod_nlm.o \
+ $(OBJDIR)/os.o \
+ $(OBJDIR)/getopt.o \
+ $(OBJDIR)/modules.o \
+ $(OBJDIR)/multithread.o \
+ $(OBJDIR)/libpre.o \
+ $(OBJDIR)/libprews.o \
+ $(OBJDIR)/mod_tls.o \
+ $(EOLIST)
+
+#
+# implement targets and dependancies (leave this section alone)
+#
+
+libs :: $(OBJDIR) $(TARGET_lib)
+
+nlms :: libs $(TARGET_nlm)
+
+#
+# Updated this target to create necessary directories and copy files to the
+# correct place. (See $(AP_WORK)\NWGNUhead.inc for examples)
+#
+install :: nlms FORCE
+ copy $(OBJDIR)\mod_tls.nlm $(INSTALL)\Apache\modules
+
+#
+# Any specialized rules here
+#
+
+
+#
+# Include the 'tail' makefile that has targets that depend on variables defined
+# in this makefile
+#
+
+include $(AP_WORK)\NWGNUtail.inc
+
diff --git a/APACHE_1_3_42/src/os/netware/apache.xdc b/APACHE_1_3_42/src/os/netware/apache.xdc
new file mode 100644
index 0000000000..12a7f6ba2d
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/apache.xdc
Binary files differ
diff --git a/APACHE_1_3_42/src/os/netware/getopt.c b/APACHE_1_3_42/src/os/netware/getopt.c
new file mode 100644
index 0000000000..8b04bf9803
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/getopt.c
@@ -0,0 +1,177 @@
+/* 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.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <stdlib.h>
+
+#define OPTERRCOLON (1)
+#define OPTERRNF (2)
+#define OPTERRARG (3)
+
+char *optarg;
+int optind = 1;
+int opterr = 1;
+int optopt;
+
+static int
+optiserr(int argc, char * const *argv, int oint, const char *optstr,
+ int optchr, int err)
+{
+ if (opterr) {
+ fprintf(stderr, "Error in argument %d, char %d: ", oint, optchr + 1);
+
+ switch (err) {
+ case OPTERRCOLON:
+ fprintf(stderr, ": in flags\n");
+ break;
+ case OPTERRNF:
+ fprintf(stderr, "option not found %c\n", argv[oint][optchr]);
+ break;
+ case OPTERRARG:
+ fprintf(stderr, "no argument for option %c\n", argv[oint][optchr]);
+ break;
+ default:
+ fprintf(stderr, "unknown\n");
+ break;
+ }
+ }
+ optopt = argv[oint][optchr];
+ return('?');
+}
+
+int
+getopt(int argc, char* const *argv, const char *optstr)
+{
+ static int optchr = 0;
+ static int dash = 0; /* have already seen the - */
+
+ char *cp;
+
+ if (optind >= argc)
+ return(EOF);
+
+ if (!dash && (argv[optind][0] != '-'))
+ return(EOF);
+
+ if (!dash && (argv[optind][0] == '-') && !argv[optind][1]) {
+ /*
+ * use to specify stdin. Need to let pgm process this and
+ * the following args
+ */
+ return(EOF);
+ }
+
+ if ((argv[optind][0] == '-') && (argv[optind][1] == '-')) {
+ /* -- indicates end of args */
+ optind++;
+ return(EOF);
+ }
+
+ if (!dash) {
+ assert((argv[optind][0] == '-') && argv[optind][1]);
+ dash = 1;
+ optchr = 1;
+ }
+
+ /* Check if the guy tries to do a -: kind of flag */
+ assert(dash);
+ if (argv[optind][optchr] == ':') {
+ dash = 0;
+ optind++;
+ return(optiserr(argc, argv, optind-1, optstr, optchr, OPTERRCOLON));
+ }
+
+ if (!(cp = strchr(optstr, argv[optind][optchr]))) {
+ int errind = optind;
+ int errchr = optchr;
+
+ if (!argv[optind][optchr+1]) {
+ dash = 0;
+ optind++;
+ }
+ else
+ optchr++;
+ return(optiserr(argc, argv, errind, optstr, errchr, OPTERRNF));
+ }
+
+ if (cp[1] == ':') {
+ dash = 0;
+ optind++;
+
+ if(optind == argc)
+ return(optiserr(argc, argv, optind-1, optstr, optchr, OPTERRARG));
+ optarg = argv[optind++];
+ return(*cp);
+ } else {
+ if (!argv[optind][optchr+1]) {
+ dash = 0;
+ optind++;
+ }
+ else
+ optchr++;
+ return(*cp);
+ }
+ assert(0);
+ return(0);
+}
+
+#ifdef TESTGETOPT
+int main(int argc, char **argv)
+{
+ int c;
+ extern char *optarg;
+ extern int optind;
+ int aflg = 0;
+ int bflg = 0;
+ int errflg = 0;
+ char *ofile = NULL;
+
+ while ((c = getopt(argc, argv, "abo:")) != EOF)
+ switch (c) {
+ case 'a':
+ if (bflg)
+ errflg++;
+ else
+ aflg++;
+ break;
+ case 'b':
+ if (aflg)
+ errflg++;
+ else
+ bflg++;
+ break;
+ case 'o':
+ ofile = optarg;
+ (void)printf("ofile = %s\n", ofile);
+ break;
+ case '?':
+ errflg++;
+ }
+
+ if (errflg) {
+ (void)fprintf(stderr, "usage: cmd [-a|-b] [-o <filename>] files...\n");
+ exit(2);
+ }
+
+ for ( ; optind < argc; optind++)
+ (void)printf("%s\n", argv[optind]);
+
+ return 0;
+}
+
+#endif /* TESTGETOPT */
diff --git a/APACHE_1_3_42/src/os/netware/getopt.h b/APACHE_1_3_42/src/os/netware/getopt.h
new file mode 100644
index 0000000000..9ab82d5142
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/getopt.h
@@ -0,0 +1,26 @@
+/* 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.
+ */
+
+#ifndef GETOPT_H
+#define GETOPT_H
+
+extern char *optarg;
+extern int optind;
+extern int opterr;
+extern int optopt;
+int getopt(int argc, char* const *argv, const char *optstr);
+
+#endif /* GETOPT_H */
diff --git a/APACHE_1_3_42/src/os/netware/libpre.c b/APACHE_1_3_42/src/os/netware/libpre.c
new file mode 100644
index 0000000000..e1e4c69c94
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/libpre.c
@@ -0,0 +1,47 @@
+/* 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.
+ */
+
+/*------------------------------------------------------------------
+ These functions are to be called when the shared NLM starts and
+ stops. By using these functions instead of defining a main()
+ and calling ExitThread(TSR_THREAD, 0), the load time of the
+ shared NLM is faster and memory size reduced.
+
+ You may also want to override these in your own Apache module
+ to do any cleanup other than the mechanism Apache modules
+ provide.
+------------------------------------------------------------------*/
+
+int _lib_start();
+int _lib_stop();
+
+#ifdef __GNUC__
+#include <string.h> /* memset */
+extern char _edata, _end ; /* end of DATA (start of BSS), end of BSS */
+#endif
+
+int _lib_start()
+{
+#ifdef __GNUC__
+ memset (&_edata, 0, &_end - &_edata);
+#endif
+ return 0;
+}
+
+int _lib_stop()
+{
+ return 0;
+}
diff --git a/APACHE_1_3_42/src/os/netware/libprews.c b/APACHE_1_3_42/src/os/netware/libprews.c
new file mode 100644
index 0000000000..7467d8d881
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/libprews.c
@@ -0,0 +1,52 @@
+/* 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.
+ */
+
+/*------------------------------------------------------------------
+ These functions are to be called when the shared NLM starts and
+ stops. By using these functions instead of defining a main()
+ and calling ExitThread(TSR_THREAD, 0), the load time of the
+ shared NLM is faster and memory size reduced.
+
+ You may also want to override these in your own Apache module
+ to do any cleanup other than the mechanism Apache modules
+ provide.
+------------------------------------------------------------------*/
+#include "stddef.h"
+#include "ws2nlm.h"
+
+int _lib_start_ws();
+int _lib_stop_ws();
+
+#ifdef __GNUC__
+#include <string.h> /* memset */
+extern char _edata, _end ; /* end of DATA (start of BSS), end of BSS */
+#endif
+
+int _lib_start_ws()
+{
+ WSADATA wsaData;
+
+#ifdef __GNUC__
+ memset (&_edata, 0, &_end - &_edata);
+#endif
+ return WSAStartup((WORD) MAKEWORD(2, 0), &wsaData);
+}
+
+int _lib_stop_ws()
+{
+ WSACleanup();
+ return 0;
+}
diff --git a/APACHE_1_3_42/src/os/netware/main_nlm.c b/APACHE_1_3_42/src/os/netware/main_nlm.c
new file mode 100644
index 0000000000..2172ec5c36
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/main_nlm.c
@@ -0,0 +1,26 @@
+/* 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.
+ */
+
+/* main_NLM.c - Apache executable stub file for NetWare
+ * This file's purpose in life is to load, and call the
+ * "real" main function, apache_main(), located in ApacheC.nlm
+ */
+int apache_main(int argc, char *argv[]);
+
+int main(int argc, char *argv[])
+{
+ return apache_main(argc, argv);
+}
diff --git a/APACHE_1_3_42/src/os/netware/mod_log_nw.c b/APACHE_1_3_42/src/os/netware/mod_log_nw.c
new file mode 100644
index 0000000000..b0e900418e
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/mod_log_nw.c
@@ -0,0 +1,1256 @@
+/* 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.
+ */
+
+/*
+ * Modified by djm@va.pubnix.com:
+ * If no TransferLog is given explicitly, decline to log.
+ *
+ * This is module implements the TransferLog directive (same as the
+ * common log module), and additional directives, LogFormat and CustomLog.
+ *
+ *
+ * Syntax:
+ *
+ * TransferLog fn Logs transfers to fn in standard log format, unless
+ * a custom format is set with LogFormat
+ * LogFormat format Set a log format from TransferLog files
+ * CustomLog fn format
+ * Log to file fn with format given by the format
+ * argument
+ *
+ * CookieLog fn For backwards compatability with old Cookie
+ * logging module - now deprecated.
+ *
+ * There can be any number of TransferLog and CustomLog
+ * commands. Each request will be logged to _ALL_ the
+ * named files, in the appropriate format.
+ *
+ * If no TransferLog or CustomLog directive appears in a VirtualHost,
+ * the request will be logged to the log file(s) defined outside
+ * the virtual host section. If a TransferLog or CustomLog directive
+ * appears in the VirtualHost section, the log files defined outside
+ * the VirtualHost will _not_ be used. This makes this module compatable
+ * with the CLF and config log modules, where the use of TransferLog
+ * inside the VirtualHost section overrides its use outside.
+ *
+ * Examples:
+ *
+ * TransferLog logs/access_log
+ * <VirtualHost>
+ * LogFormat "... custom format ..."
+ * TransferLog log/virtual_only
+ * CustomLog log/virtual_useragents "%t %{user-agent}i"
+ * </VirtualHost>
+ *
+ * This will log using CLF to access_log any requests handled by the
+ * main server, while any requests to the virtual host will be logged
+ * with the "... custom format..." to virtual_only _AND_ using
+ * the custom user-agent log to virtual_useragents.
+ *
+ * Note that the NCSA referer and user-agent logs are easily added with
+ * CustomLog:
+ * CustomLog logs/referer "%{referer}i -> %U"
+ * CustomLog logs/agent "%{user-agent}i"
+ *
+ * RefererIgnore functionality can be obtained with conditional
+ * logging (SetEnvIf and CustomLog ... env=!VAR).
+ *
+ * But using this method allows much easier modification of the
+ * log format, e.g. to log hosts along with UA:
+ * CustomLog logs/referer "%{referer}i %U %h"
+ *
+ * The argument to LogFormat and CustomLog is a string, which can include
+ * literal characters copied into the log files, and '%' directives as
+ * follows:
+ *
+ * %...B: bytes sent, excluding HTTP headers.
+ * %...b: bytes sent, excluding HTTP headers in CLF format, i.e. a '-'
+ * when no bytes where sent (rather than a '0'.
+ * %...c: Status of the connection.
+ * 'X' = connection aborted before the response completed.
+ * '+' = connection may be kept alive after the response is sent.
+ * '-' = connection will be closed after the response is sent.
+ * %...{FOOBAR}e: The contents of the environment variable FOOBAR
+ * %...f: filename
+ * %...h: remote host
+ * %...a: remote IP-address
+ * %...A: local IP-address
+ * %...{Foobar}i: The contents of Foobar: header line(s) in the request
+ * sent to the client.
+ * %...l: remote logname (from identd, if supplied)
+ * %...{Foobar}n: The contents of note "Foobar" from another module.
+ * %...{Foobar}o: The contents of Foobar: header line(s) in the reply.
+ * %...p: the port the request was served to
+ * %...P: the process ID of the child that serviced the request.
+ * %...r: first line of request
+ * %...s: status. For requests that got internally redirected, this
+ * is status of the *original* request --- %...>s for the last.
+ * %...t: time, in common log format time format
+ * %...{format}t: The time, in the form given by format, which should
+ * be in strftime(3) format.
+ * %...T: the time taken to serve the request, in seconds.
+ * %...u: remote user (from auth; may be bogus if return status (%s) is 401)
+ * %...U: the URL path requested.
+ * %...v: the configured name of the server (i.e. which virtual host?)
+ * %...V: the server name according to the UseCanonicalName setting
+ * %...m: the request method
+ * %...H: the request protocol
+ * %...q: the query string prepended by "?", or empty if no query string
+ *
+ * The '...' can be nothing at all (e.g. "%h %u %r %s %b"), or it can
+ * indicate conditions for inclusion of the item (which will cause it
+ * to be replaced with '-' if the condition is not met). Note that
+ * there is no escaping performed on the strings from %r, %...i and
+ * %...o; some with long memories may remember that I thought this was
+ * a bad idea, once upon a time, and I'm still not comfortable with
+ * it, but it is difficult to see how to "do the right thing" with all
+ * of '%..i', unless we URL-escape everything and break with CLF.
+ *
+ * The forms of condition are a list of HTTP status codes, which may
+ * or may not be preceded by '!'. Thus, '%400,501{User-agent}i' logs
+ * User-agent: on 400 errors and 501 errors (Bad Request, Not
+ * Implemented) only; '%!200,304,302{Referer}i' logs Referer: on all
+ * requests which did *not* return some sort of normal status.
+ *
+ * The default LogFormat reproduces CLF; see below.
+ *
+ * The way this is supposed to work with virtual hosts is as follows:
+ * a virtual host can have its own LogFormat, or its own TransferLog.
+ * If it doesn't have its own LogFormat, it inherits from the main
+ * server. If it doesn't have its own TransferLog, it writes to the
+ * same descriptor (meaning the same process for "| ...").
+ *
+ * --- rst */
+
+#define DEFAULT_LOG_FORMAT "%h %l %u %t \"%r\" %>s %b"
+
+#include "httpd.h"
+#include "http_config.h"
+#include "http_core.h" /* For REMOTE_NAME */
+#include "http_log.h"
+#include <limits.h>
+
+module MODULE_VAR_EXPORT config_log_module;
+
+static int xfer_flags = (O_WRONLY | O_APPEND | O_CREAT);
+#if defined(OS2) || defined(WIN32) || defined(NETWARE)
+/* OS/2 dosen't support users and groups */
+static mode_t xfer_mode = (S_IREAD | S_IWRITE);
+#else
+static mode_t xfer_mode = (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+#endif
+
+/* POSIX.1 defines PIPE_BUF as the maximum number of bytes that is
+ * guaranteed to be atomic when writing a pipe. And PIPE_BUF >= 512
+ * is guaranteed. So we'll just guess 512 in the event the system
+ * doesn't have this. Now, for file writes there is actually no limit,
+ * the entire write is atomic. Whether all systems implement this
+ * correctly is another question entirely ... so we'll just use PIPE_BUF
+ * because it's probably a good guess as to what is implemented correctly
+ * everywhere.
+ */
+#ifdef PIPE_BUF
+#define LOG_BUFSIZE PIPE_BUF
+#else
+#define LOG_BUFSIZE (512)
+#endif
+
+/*
+ * multi_log_state is our per-(virtual)-server configuration. We store
+ * an array of the logs we are going to use, each of type config_log_state.
+ * If a default log format is given by LogFormat, store in default_format
+ * (backward compat. with mod_log_config). We also store for each virtual
+ * server a pointer to the logs specified for the main server, so that if this
+ * vhost has no logs defined, we can use the main server's logs instead.
+ *
+ * So, for the main server, config_logs contains a list of the log files
+ * and server_config_logs in empty. For a vhost, server_config_logs
+ * points to the same array as config_logs in the main server, and
+ * config_logs points to the array of logs defined inside this vhost,
+ * which might be empty.
+ */
+
+typedef struct {
+ char *default_format_string;
+ array_header *default_format;
+ array_header *config_logs;
+ array_header *server_config_logs;
+ table *formats;
+ int rotatedaily;
+ int rotateinterval;
+} multi_log_state;
+
+/*
+ * config_log_state holds the status of a single log file. fname might
+ * be NULL, which means this module does no logging for this
+ * request. format might be NULL, in which case the default_format
+ * from the multi_log_state should be used, or if that is NULL as
+ * well, use the CLF. log_fd is -1 before the log file is opened and
+ * set to a valid fd after it is opened.
+ */
+
+typedef struct {
+ char *fname;
+ char *format_string;
+ array_header *format;
+ int log_fd;
+ char *condition_var;
+#ifdef BUFFERED_LOGS
+ int outcnt;
+ char outbuf[LOG_BUFSIZE];
+#endif
+ time_t time_jump;
+} config_log_state;
+
+/*
+ * Format items...
+ * Note that many of these could have ap_sprintfs replaced with static buffers.
+ */
+
+typedef const char *(*item_key_func) (request_rec *, char *);
+
+typedef struct {
+ item_key_func func;
+ char *arg;
+ int condition_sense;
+ int want_orig;
+ array_header *conditions;
+} log_format_item;
+
+static char *format_integer(pool *p, int i)
+{
+ return ap_psprintf(p, "%d", i);
+}
+
+static char *pfmt(pool *p, int i)
+{
+ if (i <= 0) {
+ return "-";
+ }
+ else {
+ return format_integer(p, i);
+ }
+}
+
+static const char *constant_item(request_rec *dummy, char *stuff)
+{
+ return stuff;
+}
+
+static const char *log_remote_host(request_rec *r, char *a)
+{
+ return ap_get_remote_host(r->connection, r->per_dir_config,
+ REMOTE_NAME);
+}
+
+static const char *log_remote_address(request_rec *r, char *a)
+{
+ return r->connection->remote_ip;
+}
+
+static const char *log_local_address(request_rec *r, char *a)
+{
+ return r->connection->local_ip;
+}
+
+static const char *log_remote_logname(request_rec *r, char *a)
+{
+ return ap_get_remote_logname(r);
+}
+
+static const char *log_remote_user(request_rec *r, char *a)
+{
+ char *rvalue = r->connection->user;
+
+ if (rvalue == NULL) {
+ rvalue = "-";
+ }
+ else if (strlen(rvalue) == 0) {
+ rvalue = "\"\"";
+ }
+ return rvalue;
+}
+
+static const char *log_request_line(request_rec *r, char *a)
+{
+ /* NOTE: If the original request contained a password, we
+ * re-write the request line here to contain XXXXXX instead:
+ * (note the truncation before the protocol string for HTTP/0.9 requests)
+ * (note also that r->the_request contains the unmodified request)
+ */
+ return (r->parsed_uri.password) ? ap_pstrcat(r->pool, r->method, " ",
+ ap_unparse_uri_components(r->pool, &r->parsed_uri, 0),
+ r->assbackwards ? NULL : " ", r->protocol, NULL)
+ : r->the_request;
+}
+
+static const char *log_request_file(request_rec *r, char *a)
+{
+ return r->filename;
+}
+static const char *log_request_uri(request_rec *r, char *a)
+{
+ return r->uri;
+}
+static const char *log_request_method(request_rec *r, char *a)
+{
+ return r->method;
+}
+static const char *log_request_protocol(request_rec *r, char *a)
+{
+ return r->protocol;
+}
+static const char *log_request_query(request_rec *r, char *a)
+{
+ return (r->args != NULL) ? ap_pstrcat(r->pool, "?", r->args, NULL)
+ : "";
+}
+static const char *log_status(request_rec *r, char *a)
+{
+ return pfmt(r->pool, r->status);
+}
+
+static const char *clf_log_bytes_sent(request_rec *r, char *a)
+{
+ if (!r->sent_bodyct) {
+ return "-";
+ }
+ else {
+ long int bs;
+ ap_bgetopt(r->connection->client, BO_BYTECT, &bs);
+ return ap_psprintf(r->pool, "%ld", bs);
+ }
+}
+
+static const char *log_bytes_sent(request_rec *r, char *a)
+{
+ if (!r->sent_bodyct) {
+ return "0";
+ }
+ else {
+ long int bs;
+ ap_bgetopt(r->connection->client, BO_BYTECT, &bs);
+ return ap_psprintf(r->pool, "%ld", bs);
+ }
+}
+
+
+static const char *log_header_in(request_rec *r, char *a)
+{
+ return ap_table_get(r->headers_in, a);
+}
+
+static const char *log_header_out(request_rec *r, char *a)
+{
+ const char *cp = ap_table_get(r->headers_out, a);
+ if (!strcasecmp(a, "Content-type") && r->content_type) {
+ cp = ap_field_noparam(r->pool, r->content_type);
+ }
+ if (cp) {
+ return cp;
+ }
+ return ap_table_get(r->err_headers_out, a);
+}
+
+static const char *log_note(request_rec *r, char *a)
+{
+ return ap_table_get(r->notes, a);
+}
+static const char *log_env_var(request_rec *r, char *a)
+{
+ return ap_table_get(r->subprocess_env, a);
+}
+
+static const char *log_request_time(request_rec *r, char *a)
+{
+ int timz;
+ struct tm *t;
+ char tstr[MAX_STRING_LEN];
+
+ t = ap_get_gmtoff(&timz);
+
+ if (a && *a) { /* Custom format */
+ strftime(tstr, MAX_STRING_LEN, a, t);
+ }
+ else { /* CLF format */
+ char sign = (timz < 0 ? '-' : '+');
+
+ if (timz < 0) {
+ timz = -timz;
+ }
+ ap_snprintf(tstr, sizeof(tstr), "[%02d/%s/%d:%02d:%02d:%02d %c%.2d%.2d]",
+ t->tm_mday, ap_month_snames[t->tm_mon], t->tm_year+1900,
+ t->tm_hour, t->tm_min, t->tm_sec,
+ sign, timz / 60, timz % 60);
+ }
+
+ return ap_pstrdup(r->pool, tstr);
+}
+
+static const char *log_request_duration(request_rec *r, char *a)
+{
+ return ap_psprintf(r->pool, "%ld", time(NULL) - r->request_time);
+}
+
+/* These next two routines use the canonical name:port so that log
+ * parsers don't need to duplicate all the vhost parsing crud.
+ */
+static const char *log_virtual_host(request_rec *r, char *a)
+{
+ return r->server->server_hostname;
+}
+
+static const char *log_server_port(request_rec *r, char *a)
+{
+ return ap_psprintf(r->pool, "%u",
+ r->server->port ? r->server->port : ap_default_port(r));
+}
+
+/* This respects the setting of UseCanonicalName so that
+ * the dynamic mass virtual hosting trick works better.
+ */
+static const char *log_server_name(request_rec *r, char *a)
+{
+ return ap_get_server_name(r);
+}
+
+static const char *log_child_pid(request_rec *r, char *a)
+{
+ return ap_psprintf(r->pool, "%ld", (long) getpid());
+}
+static const char *log_connection_status(request_rec *r, char *a)
+{
+ if (r->connection->aborted)
+ return "X";
+
+ if ((r->connection->keepalive) &&
+ ((r->server->keep_alive_max - r->connection->keepalives) > 0)) {
+ return "+";
+ }
+
+ return "-";
+}
+/*****************************************************************
+ *
+ * Parsing the log format string
+ */
+
+static struct log_item_list {
+ char ch;
+ item_key_func func;
+ int want_orig_default;
+} log_item_keys[] = {
+
+ {
+ 'h', log_remote_host, 0
+ },
+ {
+ 'a', log_remote_address, 0
+ },
+ {
+ 'A', log_local_address, 0
+ },
+ {
+ 'l', log_remote_logname, 0
+ },
+ {
+ 'u', log_remote_user, 0
+ },
+ {
+ 't', log_request_time, 0
+ },
+ {
+ 'T', log_request_duration, 1
+ },
+ {
+ 'r', log_request_line, 1
+ },
+ {
+ 'f', log_request_file, 0
+ },
+ {
+ 'U', log_request_uri, 1
+ },
+ {
+ 's', log_status, 1
+ },
+ {
+ 'b', clf_log_bytes_sent, 0
+ },
+ {
+ 'B', log_bytes_sent, 0
+ },
+ {
+ 'i', log_header_in, 0
+ },
+ {
+ 'o', log_header_out, 0
+ },
+ {
+ 'n', log_note, 0
+ },
+ {
+ 'e', log_env_var, 0
+ },
+ {
+ 'V', log_server_name, 0
+ },
+ {
+ 'v', log_virtual_host, 0
+ },
+ {
+ 'p', log_server_port, 0
+ },
+ {
+ 'P', log_child_pid, 0
+ },
+ {
+ 'H', log_request_protocol, 0
+ },
+ {
+ 'm', log_request_method, 0
+ },
+ {
+ 'q', log_request_query, 0
+ },
+ {
+ 'c', log_connection_status, 0
+ },
+ {
+ '\0'
+ }
+};
+
+static struct log_item_list *find_log_func(char k)
+{
+ int i;
+
+ for (i = 0; log_item_keys[i].ch; ++i)
+ if (k == log_item_keys[i].ch) {
+ return &log_item_keys[i];
+ }
+
+ return NULL;
+}
+
+static char *parse_log_misc_string(pool *p, log_format_item *it,
+ const char **sa)
+{
+ const char *s;
+ char *d;
+
+ it->func = constant_item;
+ it->conditions = NULL;
+
+ s = *sa;
+ while (*s && *s != '%') {
+ s++;
+ }
+ /*
+ * This might allocate a few chars extra if there's a backslash
+ * escape in the format string.
+ */
+ it->arg = ap_palloc(p, s - *sa + 1);
+
+ d = it->arg;
+ s = *sa;
+ while (*s && *s != '%') {
+ if (*s != '\\') {
+ *d++ = *s++;
+ }
+ else {
+ s++;
+ switch (*s) {
+ case '\\':
+ *d++ = '\\';
+ s++;
+ break;
+ case 'n':
+ *d++ = '\n';
+ s++;
+ break;
+ case 't':
+ *d++ = '\t';
+ s++;
+ break;
+ default:
+ /* copy verbatim */
+ *d++ = '\\';
+ /*
+ * Allow the loop to deal with this *s in the normal
+ * fashion so that it handles end of string etc.
+ * properly.
+ */
+ break;
+ }
+ }
+ }
+ *d = '\0';
+
+ *sa = s;
+ return NULL;
+}
+
+static char *parse_log_item(pool *p, log_format_item *it, const char **sa)
+{
+ const char *s = *sa;
+
+ if (*s != '%') {
+ return parse_log_misc_string(p, it, sa);
+ }
+
+ ++s;
+ it->condition_sense = 0;
+ it->conditions = NULL;
+ it->want_orig = -1;
+ it->arg = ""; /* For safety's sake... */
+
+ while (*s) {
+ int i;
+ struct log_item_list *l;
+
+ switch (*s) {
+ case '!':
+ ++s;
+ it->condition_sense = !it->condition_sense;
+ break;
+
+ case '<':
+ ++s;
+ it->want_orig = 1;
+ break;
+
+ case '>':
+ ++s;
+ it->want_orig = 0;
+ break;
+
+ case ',':
+ ++s;
+ break;
+
+ case '{':
+ ++s;
+ it->arg = ap_getword(p, &s, '}');
+ break;
+
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ i = *s - '0';
+ while (ap_isdigit(*++s)) {
+ i = i * 10 + (*s) - '0';
+ }
+ if (!it->conditions) {
+ it->conditions = ap_make_array(p, 4, sizeof(int));
+ }
+ *(int *) ap_push_array(it->conditions) = i;
+ break;
+
+ default:
+ l = find_log_func(*s++);
+ if (!l) {
+ char dummy[2];
+
+ dummy[0] = s[-1];
+ dummy[1] = '\0';
+ return ap_pstrcat(p, "Unrecognized LogFormat directive %",
+ dummy, NULL);
+ }
+ it->func = l->func;
+ if (it->want_orig == -1) {
+ it->want_orig = l->want_orig_default;
+ }
+ *sa = s;
+ return NULL;
+ }
+ }
+
+ return "Ran off end of LogFormat parsing args to some directive";
+}
+
+static array_header *parse_log_string(pool *p, const char *s, const char **err)
+{
+ array_header *a = ap_make_array(p, 30, sizeof(log_format_item));
+ char *res;
+
+ while (*s) {
+ if ((res = parse_log_item(p, (log_format_item *) ap_push_array(a), &s))) {
+ *err = res;
+ return NULL;
+ }
+ }
+
+ s = "\n";
+ parse_log_item(p, (log_format_item *) ap_push_array(a), &s);
+ return a;
+}
+
+/*****************************************************************
+ *
+ * Actually logging.
+ */
+
+static const char *process_item(request_rec *r, request_rec *orig,
+ log_format_item *item)
+{
+ const char *cp;
+
+ /* First, see if we need to process this thing at all... */
+
+ if (item->conditions && item->conditions->nelts != 0) {
+ int i;
+ int *conds = (int *) item->conditions->elts;
+ int in_list = 0;
+
+ for (i = 0; i < item->conditions->nelts; ++i) {
+ if (r->status == conds[i]) {
+ in_list = 1;
+ break;
+ }
+ }
+
+ if ((item->condition_sense && in_list)
+ || (!item->condition_sense && !in_list)) {
+ return "-";
+ }
+ }
+
+ /* We do. Do it... */
+
+ cp = (*item->func) (item->want_orig ? orig : r, item->arg);
+ return cp ? cp : "-";
+}
+
+#ifdef BUFFERED_LOGS
+static void flush_log(config_log_state *cls)
+{
+ if (cls->outcnt && cls->log_fd != -1) {
+ write(cls->log_fd, cls->outbuf, cls->outcnt);
+ cls->outcnt = 0;
+ }
+}
+#endif
+
+static int config_log_transaction(request_rec *r, config_log_state *cls,
+ array_header *default_format)
+{
+ log_format_item *items;
+ char *str, *s;
+ const char **strs;
+ int *strl;
+ request_rec *orig;
+ int i;
+ int len = 0;
+ array_header *format;
+ char *envar;
+ int log_fd;
+
+ multi_log_state *mls = ap_get_module_config(r->server->module_config,&config_log_module);
+
+ if ((mls->rotatedaily || mls->rotateinterval) &&
+ (r->request_time>=cls->time_jump) &&
+ (*cls->fname!='|') && (strcmp(cls->fname,"/dev/null") != 0)) {
+ char * fname;
+ struct tm *time_tmp;
+
+ if (mls->rotatedaily) {
+ time_tmp=localtime(&(r->request_time));
+ cls->time_jump=r->request_time+((60-time_tmp->tm_sec)+60*(59-time_tmp->tm_min)+3600*(23-time_tmp->tm_hour));
+ }
+ else
+ cls->time_jump = r->request_time + (60*mls->rotateinterval);
+
+ fname = ap_pstrcat(r->pool,
+ ap_server_root_relative(r->pool, cls->fname),
+ "-",
+ ap_ht_time(r->pool,r->request_time,"%Y%m%d%H%M",0),
+ NULL
+ );
+
+ if ((log_fd = open(fname, xfer_flags, xfer_mode)) < 0) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "could not open transfer log file %s.", fname);
+ }
+ else {
+ dup2 (log_fd, cls->log_fd);
+ close (log_fd);
+ }
+ }
+
+ if (cls->fname == NULL) {
+ return DECLINED;
+ }
+
+ /*
+ * See if we've got any conditional envariable-controlled logging decisions
+ * to make.
+ */
+ if (cls->condition_var != NULL) {
+ envar = cls->condition_var;
+ if (*envar != '!') {
+ if (ap_table_get(r->subprocess_env, envar) == NULL) {
+ return DECLINED;
+ }
+ }
+ else {
+ if (ap_table_get(r->subprocess_env, &envar[1]) != NULL) {
+ return DECLINED;
+ }
+ }
+ }
+
+ format = cls->format ? cls->format : default_format;
+
+ strs = ap_palloc(r->pool, sizeof(char *) * (format->nelts));
+ strl = ap_palloc(r->pool, sizeof(int) * (format->nelts));
+ items = (log_format_item *) format->elts;
+
+ orig = r;
+ while (orig->prev) {
+ orig = orig->prev;
+ }
+ while (r->next) {
+ r = r->next;
+ }
+
+ for (i = 0; i < format->nelts; ++i) {
+ strs[i] = process_item(r, orig, &items[i]);
+ }
+
+ for (i = 0; i < format->nelts; ++i) {
+ len += strl[i] = strlen(strs[i]);
+ }
+
+#ifdef BUFFERED_LOGS
+ if (len + cls->outcnt > LOG_BUFSIZE) {
+ flush_log(cls);
+ }
+ if (len >= LOG_BUFSIZE) {
+ str = ap_palloc(r->pool, len + 1);
+ for (i = 0, s = str; i < format->nelts; ++i) {
+ memcpy(s, strs[i], strl[i]);
+ s += strl[i];
+ }
+ write(cls->log_fd, str, len);
+ }
+ else {
+ for (i = 0, s = &cls->outbuf[cls->outcnt]; i < format->nelts; ++i) {
+ memcpy(s, strs[i], strl[i]);
+ s += strl[i];
+ }
+ cls->outcnt += len;
+ }
+#else
+ str = ap_palloc(r->pool, len + 1);
+
+ for (i = 0, s = str; i < format->nelts; ++i) {
+ memcpy(s, strs[i], strl[i]);
+ s += strl[i];
+ }
+
+ write(cls->log_fd, str, len);
+#endif
+
+ return OK;
+}
+
+static int multi_log_transaction(request_rec *r)
+{
+ multi_log_state *mls = ap_get_module_config(r->server->module_config,
+ &config_log_module);
+ config_log_state *clsarray;
+ int i;
+
+ /*
+ * Log this transaction..
+ */
+ if (mls->config_logs->nelts) {
+ clsarray = (config_log_state *) mls->config_logs->elts;
+ for (i = 0; i < mls->config_logs->nelts; ++i) {
+ config_log_state *cls = &clsarray[i];
+
+ config_log_transaction(r, cls, mls->default_format);
+ }
+ }
+ else if (mls->server_config_logs) {
+ clsarray = (config_log_state *) mls->server_config_logs->elts;
+ for (i = 0; i < mls->server_config_logs->nelts; ++i) {
+ config_log_state *cls = &clsarray[i];
+
+ config_log_transaction(r, cls, mls->default_format);
+ }
+ }
+
+ return OK;
+}
+
+/*****************************************************************
+ *
+ * Module glue...
+ */
+
+static void *make_config_log_state(pool *p, server_rec *s)
+{
+ multi_log_state *mls;
+
+ mls = (multi_log_state *) ap_palloc(p, sizeof(multi_log_state));
+ mls->config_logs = ap_make_array(p, 1, sizeof(config_log_state));
+ mls->default_format_string = NULL;
+ mls->default_format = NULL;
+ mls->server_config_logs = NULL;
+ mls->formats = ap_make_table(p, 4);
+ ap_table_setn(mls->formats, "CLF", DEFAULT_LOG_FORMAT);
+ mls->rotatedaily = 0;
+ mls->rotateinterval = 0;
+
+ return mls;
+}
+
+/*
+ * Use the merger to simply add a pointer from the vhost log state
+ * to the log of logs specified for the non-vhost configuration. Make sure
+ * vhosts inherit any globally-defined format names.
+ */
+
+static void *merge_config_log_state(pool *p, void *basev, void *addv)
+{
+ multi_log_state *base = (multi_log_state *) basev;
+ multi_log_state *add = (multi_log_state *) addv;
+
+ if (add->rotatedaily==0) {
+ add->rotatedaily=base->rotatedaily;
+ }
+ if (add->rotateinterval==0) {
+ add->rotateinterval=base->rotateinterval;
+ }
+
+ add->server_config_logs = base->config_logs;
+ if (!add->default_format) {
+ add->default_format_string = base->default_format_string;
+ add->default_format = base->default_format;
+ }
+ add->formats = ap_overlay_tables(p, base->formats, add->formats);
+
+ return add;
+}
+
+/*
+ * Set the default logfile format, or define a nickname for a format string.
+ */
+static const char *log_format(cmd_parms *cmd, void *dummy, char *fmt,
+ char *name)
+{
+ const char *err_string = NULL;
+ multi_log_state *mls = ap_get_module_config(cmd->server->module_config,
+ &config_log_module);
+
+ /*
+ * If we were given two arguments, the second is a name to be given to the
+ * format. This syntax just defines the nickname - it doesn't actually
+ * make the format the default.
+ */
+ if (name != NULL) {
+ parse_log_string(cmd->pool, fmt, &err_string);
+ if (err_string == NULL) {
+ ap_table_setn(mls->formats, name, fmt);
+ }
+ }
+ else {
+ mls->default_format_string = fmt;
+ mls->default_format = parse_log_string(cmd->pool, fmt, &err_string);
+ }
+ return err_string;
+}
+
+
+static const char *add_custom_log(cmd_parms *cmd, void *dummy, char *fn,
+ char *fmt, char *envclause)
+{
+ const char *err_string = NULL;
+ multi_log_state *mls = ap_get_module_config(cmd->server->module_config,
+ &config_log_module);
+ config_log_state *cls;
+
+ cls = (config_log_state *) ap_push_array(mls->config_logs);
+ cls->condition_var = NULL;
+ if (envclause != NULL) {
+ if (strncasecmp(envclause, "env=", 4) != 0) {
+ return "error in condition clause";
+ }
+ if ((envclause[4] == '\0')
+ || ((envclause[4] == '!') && (envclause[5] == '\0'))) {
+ return "missing environment variable name";
+ }
+ cls->condition_var = ap_pstrdup(cmd->pool, &envclause[4]);
+ }
+
+ cls->fname = fn;
+ cls->format_string = fmt;
+ if (fmt == NULL) {
+ cls->format = NULL;
+ }
+ else {
+ cls->format = parse_log_string(cmd->pool, fmt, &err_string);
+ }
+ cls->log_fd = -1;
+
+ return err_string;
+}
+
+static const char *set_transfer_log(cmd_parms *cmd, void *dummy, char *fn)
+{
+ return add_custom_log(cmd, dummy, fn, NULL, NULL);
+}
+
+static const char *set_cookie_log(cmd_parms *cmd, void *dummy, char *fn)
+{
+ return add_custom_log(cmd, dummy, fn, "%{Cookie}n \"%r\" %t", NULL);
+}
+
+static const char *set_rotate_log_daily(cmd_parms *cmd, void *dummy, int arg)
+{
+ multi_log_state *mls = ap_get_module_config(cmd->server->module_config,
+ &config_log_module);
+
+ mls->rotatedaily = arg;
+ if (mls->rotatedaily)
+ mls->rotateinterval = 0;
+ return NULL;
+}
+
+static const char *set_rotate_log_interval(cmd_parms *cmd, void *dummy, char *arg)
+{
+ multi_log_state *mls = ap_get_module_config(cmd->server->module_config,
+ &config_log_module);
+ int interval = 0;
+
+ if (arg)
+ interval = atoi(arg);
+
+ if (interval < 0)
+ return NULL;
+
+ mls->rotatedaily = 0;
+ mls->rotateinterval = interval;
+ return NULL;
+}
+
+static const command_rec config_log_cmds[] =
+{
+ {"CustomLog", add_custom_log, NULL, RSRC_CONF, TAKE23,
+ "a file name, a custom log format string or format name, "
+ "and an optional \"env=\" clause (see docs)"},
+ {"TransferLog", set_transfer_log, NULL, RSRC_CONF, TAKE1,
+ "the filename of the access log"},
+ {"LogFormat", log_format, NULL, RSRC_CONF, TAKE12,
+ "a log format string (see docs) and an optional format name"},
+ {"CookieLog", set_cookie_log, NULL, RSRC_CONF, TAKE1,
+ "the filename of the cookie log"},
+ {"LogRotateDaily", set_rotate_log_daily, NULL, RSRC_CONF, FLAG,
+ "rotate logs daily (On:Off)"},
+ {"LogRotateInterval", set_rotate_log_interval, NULL, RSRC_CONF, TAKE1,
+ "rotate logs every NNN minutes"},
+ {NULL}
+};
+
+static config_log_state *open_config_log(server_rec *s, pool *p,
+ config_log_state *cls,
+ array_header *default_format)
+{
+ if (cls->log_fd > 0) {
+ return cls; /* virtual config shared w/main server */
+ }
+
+ if (cls->fname == NULL) {
+ return cls; /* Leave it NULL to decline. */
+ }
+
+ if (*cls->fname == '|') {
+ piped_log *pl;
+
+ pl = ap_open_piped_log(p, cls->fname + 1);
+ if (pl == NULL) {
+ exit(1);
+ }
+ cls->log_fd = ap_piped_log_write_fd(pl);
+ }
+ else {
+ char * fname;
+ struct tm *time_tmp;
+ time_t time_now;
+ multi_log_state *mls = ap_get_module_config(s->module_config,&config_log_module);
+
+ if ((mls->rotatedaily || mls->rotateinterval)&&(*cls->fname!='|')&&(strcmp(cls->fname,"/dev/null") != 0)) {
+ time_now=time(NULL);
+ if (mls->rotatedaily) {
+ time_tmp=localtime(&time_now);
+ cls->time_jump=time_now+((60-time_tmp->tm_sec)+60*(59-time_tmp->tm_min)+3600*(23-time_tmp->tm_hour));
+ }
+ else
+ cls->time_jump = time_now + (60*mls->rotateinterval);
+ fname = ap_pstrcat(p,
+ ap_server_root_relative(p, cls->fname),
+ "-",
+ ap_ht_time(p,time_now,"%Y%m%d%H%M",0),
+ NULL
+ );
+ } else {
+ fname = ap_server_root_relative(p, cls->fname);
+ }
+
+ if ((cls->log_fd = ap_popenf_ex(p, fname, xfer_flags, xfer_mode, 1)) < 0) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, s,
+ "could not open transfer log file %s.", fname);
+ exit(1);
+ }
+ }
+#ifdef BUFFERED_LOGS
+ cls->outcnt = 0;
+#endif
+
+ return cls;
+}
+
+static config_log_state *open_multi_logs(server_rec *s, pool *p)
+{
+ int i;
+ multi_log_state *mls = ap_get_module_config(s->module_config,
+ &config_log_module);
+ config_log_state *clsarray;
+ const char *dummy;
+ const char *format;
+
+ if (mls->default_format_string) {
+ format = ap_table_get(mls->formats, mls->default_format_string);
+ if (format) {
+ mls->default_format = parse_log_string(p, format, &dummy);
+ }
+ }
+
+ if (!mls->default_format) {
+ mls->default_format = parse_log_string(p, DEFAULT_LOG_FORMAT, &dummy);
+ }
+
+ if (mls->config_logs->nelts) {
+ clsarray = (config_log_state *) mls->config_logs->elts;
+ for (i = 0; i < mls->config_logs->nelts; ++i) {
+ config_log_state *cls = &clsarray[i];
+
+ if (cls->format_string) {
+ format = ap_table_get(mls->formats, cls->format_string);
+ if (format) {
+ cls->format = parse_log_string(p, format, &dummy);
+ }
+ }
+
+ cls = open_config_log(s, p, cls, mls->default_format);
+ }
+ }
+ else if (mls->server_config_logs) {
+ clsarray = (config_log_state *) mls->server_config_logs->elts;
+ for (i = 0; i < mls->server_config_logs->nelts; ++i) {
+ config_log_state *cls = &clsarray[i];
+
+ if (cls->format_string) {
+ format = ap_table_get(mls->formats, cls->format_string);
+ if (format) {
+ cls->format = parse_log_string(p, format, &dummy);
+ }
+ }
+
+ cls = open_config_log(s, p, cls, mls->default_format);
+ }
+ }
+
+ return NULL;
+}
+
+static void init_config_log(server_rec *s, pool *p)
+{
+ /* First, do "physical" server, which gets default log fd and format
+ * for the virtual servers, if they don't override...
+ */
+
+ open_multi_logs(s, p);
+
+ /* Then, virtual servers */
+
+ for (s = s->next; s; s = s->next) {
+ open_multi_logs(s, p);
+ }
+}
+
+#ifdef BUFFERED_LOGS
+static void flush_all_logs(server_rec *s, pool *p)
+{
+ multi_log_state *mls;
+ array_header *log_list;
+ config_log_state *clsarray;
+ int i;
+
+ for (; s; s = s->next) {
+ mls = ap_get_module_config(s->module_config, &config_log_module);
+ log_list = NULL;
+ if (mls->config_logs->nelts) {
+ log_list = mls->config_logs;
+ }
+ else if (mls->server_config_logs) {
+ log_list = mls->server_config_logs;
+ }
+ if (log_list) {
+ clsarray = (config_log_state *) log_list->elts;
+ for (i = 0; i < log_list->nelts; ++i) {
+ flush_log(&clsarray[i]);
+ }
+ }
+ }
+}
+#endif
+
+module MODULE_VAR_EXPORT config_log_module =
+{
+ STANDARD_MODULE_STUFF,
+ init_config_log, /* initializer */
+ NULL, /* create per-dir config */
+ NULL, /* merge per-dir config */
+ make_config_log_state, /* server config */
+ merge_config_log_state, /* merge server config */
+ config_log_cmds, /* command table */
+ NULL, /* handlers */
+ NULL, /* filename translation */
+ NULL, /* check_user_id */
+ NULL, /* check auth */
+ NULL, /* check access */
+ NULL, /* type_checker */
+ NULL, /* fixups */
+ multi_log_transaction, /* logger */
+ NULL, /* header parser */
+ NULL, /* child_init */
+#ifdef BUFFERED_LOGS
+ flush_all_logs, /* child_exit */
+#else
+ NULL,
+#endif
+ NULL /* post read-request */
+};
diff --git a/APACHE_1_3_42/src/os/netware/mod_nlm.c b/APACHE_1_3_42/src/os/netware/mod_nlm.c
new file mode 100644
index 0000000000..941849f166
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/mod_nlm.c
@@ -0,0 +1,107 @@
+/* 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.
+ */
+
+#include "httpd.h"
+#include "http_config.h"
+#include <nwadv.h>
+
+module MODULE_VAR_EXPORT nlm_module;
+static int been_there_done_that = 0; /* Loaded the modules yet? */
+
+static const char *load_module(cmd_parms *cmd, void *dummy, char *modname, char *filename)
+{
+ module *modp;
+ int nlmHandle;
+ const char *szModuleFile = ap_server_root_relative(cmd->pool, filename);
+
+ if (been_there_done_that)
+ return NULL;
+
+ nlmHandle = FindNLMHandle(filename);
+
+ if (nlmHandle == NULL) {
+ spawnlp(P_NOWAIT, szModuleFile, NULL);
+ nlmHandle = FindNLMHandle(filename);
+
+ if (nlmHandle == NULL)
+ return ap_pstrcat(cmd->pool, "Cannot load ", szModuleFile,
+ " into server", NULL);
+ }
+
+ modp = (module *) ImportSymbol(nlmHandle, modname);
+
+ if (!modp)
+ return ap_pstrcat(cmd->pool, "Can't find module ", modname,
+ " in file ", filename, NULL);
+
+ ap_add_module(modp);
+
+ if (modp->create_server_config)
+ ((void**)cmd->server->module_config)[modp->module_index] =
+ (*modp->create_server_config)(cmd->pool, cmd->server);
+
+ if (modp->create_dir_config)
+ ((void**)cmd->server->lookup_defaults)[modp->module_index] =
+ (*modp->create_dir_config)(cmd->pool, NULL);
+
+ return NULL;
+}
+
+static const char *load_file(cmd_parms *cmd, void *dummy, char *filename)
+{
+ if (been_there_done_that)
+ return NULL;
+
+ if (spawnlp(P_NOWAIT, ap_server_root_relative(cmd->pool, filename), NULL))
+ return ap_pstrcat(cmd->pool, "Cannot load ", filename, " into server", NULL);
+
+ return NULL;
+}
+
+void check_loaded_modules(server_rec *dummy, pool *p)
+{
+ if (been_there_done_that)
+ return;
+
+ been_there_done_that = 1;
+}
+
+command_rec nlm_cmds[] = {
+{ "LoadModule", load_module, NULL, RSRC_CONF, TAKE2,
+ "a module name, and the name of a file to load it from"},
+{ "LoadFile", load_file, NULL, RSRC_CONF, ITERATE,
+ "files or libraries to link into the server at runtime"},
+{ NULL }
+};
+
+module nlm_module = {
+ STANDARD_MODULE_STUFF,
+ check_loaded_modules, /* initializer */
+ NULL, /* create per-dir config */
+ NULL, /* merge per-dir config */
+ NULL, /* server config */
+ NULL, /* merge server config */
+ nlm_cmds, /* command table */
+ NULL, /* handlers */
+ NULL, /* filename translation */
+ NULL, /* check_user_id */
+ NULL, /* check auth */
+ NULL, /* check access */
+ NULL, /* type_checker */
+ NULL, /* logger */
+ NULL /* header parser */
+};
+
diff --git a/APACHE_1_3_42/src/os/netware/mod_tls.c b/APACHE_1_3_42/src/os/netware/mod_tls.c
new file mode 100644
index 0000000000..f711c6a6f7
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/mod_tls.c
@@ -0,0 +1,374 @@
+/* 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.
+ */
+
+/*
+ * mod_tls.c - Apache SSL/TLS module for NetWare by Mike Gardiner.
+ *
+ * This module gives Apache the ability to do SSL/TLS with a minimum amount
+ * of effort. All of the SSL/TLS logic is already on NetWare versions 5 and
+ * above and is interfaced through WinSock on NetWare. As you can see in
+ * the code below SSL/TLS sockets can be created with three WinSock calls.
+ *
+ * To load, simply place the module in the modules directory under the main
+ * apache tree. Then add a "SecureListen" with two arguments. The first
+ * argument is an address and/or port. The second argument is the key pair
+ * name as created in ConsoleOne.
+ *
+ * Examples:
+ *
+ * SecureListen 443 "SSL CertificateIP"
+ * SecureListen 123.45.67.89:443 mycert
+ */
+
+#define CORE_PRIVATE
+#define WS_SSL
+
+#define MAX_ADDRESS 512
+#define MAX_KEY 80
+
+#include "httpd.h"
+#include "http_config.h"
+#include "http_conf_globals.h"
+#include "http_log.h"
+#include "http_main.h"
+
+module MODULE_VAR_EXPORT tls_module;
+
+typedef struct TLSSrvConfigRec TLSSrvConfigRec;
+typedef struct seclisten_rec seclisten_rec;
+static fd_set listenfds;
+
+struct seclisten_rec {
+ seclisten_rec *next;
+ struct sockaddr_in local_addr; /* local IP address and port */
+ int fd;
+ int used; /* Only used during restart */
+ char key[MAX_KEY];
+ int mutual;
+};
+
+struct TLSSrvConfigRec {
+ table *sltable;
+};
+
+static seclisten_rec* ap_seclisteners = NULL;
+
+#define get_tls_cfg(srv) (TLSSrvConfigRec *) ap_get_module_config(srv->module_config, &tls_module)
+
+
+static int find_secure_listener(seclisten_rec *lr)
+{
+ seclisten_rec *sl;
+
+ for (sl = ap_seclisteners; sl; sl = sl->next) {
+ if (!memcmp(&sl->local_addr, &lr->local_addr, sizeof(sl->local_addr))) {
+ sl->used = 1;
+ return sl->fd;
+ }
+ }
+ return -1;
+}
+
+
+static int make_secure_socket(pool *p, const struct sockaddr_in *server,
+ char* key, int mutual, server_rec *server_conf)
+{
+ int s;
+ int one = 1;
+ char addr[MAX_ADDRESS];
+ struct sslserveropts opts;
+ struct linger li;
+ unsigned int optParam;
+ WSAPROTOCOL_INFO SecureProtoInfo;
+ int no = 1;
+
+ if (server->sin_addr.s_addr != htonl(INADDR_ANY))
+ ap_snprintf(addr, sizeof(addr), "address %s port %d",
+ inet_ntoa(server->sin_addr), ntohs(server->sin_port));
+ else
+ ap_snprintf(addr, sizeof(addr), "port %d", ntohs(server->sin_port));
+
+ /* note that because we're about to slack we don't use psocket */
+ ap_block_alarms();
+ memset(&SecureProtoInfo, 0, sizeof(WSAPROTOCOL_INFO));
+
+ SecureProtoInfo.iAddressFamily = AF_INET;
+ SecureProtoInfo.iSocketType = SOCK_STREAM;
+ SecureProtoInfo.iProtocol = IPPROTO_TCP;
+ SecureProtoInfo.iSecurityScheme = SECURITY_PROTOCOL_SSL;
+
+ s = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP,
+ (LPWSAPROTOCOL_INFO)&SecureProtoInfo, 0, 0);
+
+ if (s == INVALID_SOCKET) {
+ errno = WSAGetLastError();
+ ap_log_error(APLOG_MARK, APLOG_CRIT, server_conf,
+ "make_secure_socket: failed to get a socket for %s", addr);
+ ap_unblock_alarms();
+ return -1;
+ }
+
+ if (!mutual) {
+ optParam = SO_SSL_ENABLE | SO_SSL_SERVER;
+
+ if (WSAIoctl(s, SO_SSL_SET_FLAGS, (char *)&optParam,
+ sizeof(optParam), NULL, 0, NULL, NULL, NULL)) {
+ errno = WSAGetLastError();
+ ap_log_error(APLOG_MARK, APLOG_CRIT, server_conf,
+ "make_secure_socket: for %s, WSAIoctl: (SO_SSL_SET_FLAGS)", addr);
+ ap_unblock_alarms();
+ return -1;
+ }
+ }
+
+ opts.cert = key;
+ opts.certlen = strlen(key);
+ opts.sidtimeout = 0;
+ opts.sidentries = 0;
+ opts.siddir = NULL;
+
+ if (WSAIoctl(s, SO_SSL_SET_SERVER, (char *)&opts, sizeof(opts),
+ NULL, 0, NULL, NULL, NULL) != 0) {
+ errno = WSAGetLastError();
+ ap_log_error(APLOG_MARK, APLOG_CRIT, server_conf,
+ "make_secure_socket: for %s, WSAIoctl: (SO_SSL_SET_SERVER)", addr);
+ ap_unblock_alarms();
+ return -1;
+ }
+
+ if (mutual) {
+ optParam = 0x07; // SO_SSL_AUTH_CLIENT
+
+ if(WSAIoctl(s, SO_SSL_SET_FLAGS, (char*)&optParam,
+ sizeof(optParam), NULL, 0, NULL, NULL, NULL)) {
+ errno = WSAGetLastError();
+ ap_log_error( APLOG_MARK, APLOG_CRIT, server_conf,
+ "make_secure_socket: for %s, WSAIoctl: (SO_SSL_SET_FLAGS)", addr );
+ ap_unblock_alarms();
+ return -1;
+ }
+ }
+
+ if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *) &one, sizeof(int)) < 0) {
+ errno = WSAGetLastError();
+ ap_log_error(APLOG_MARK, APLOG_CRIT, server_conf,
+ "make_secure_socket: for %s, setsockopt: (SO_REUSEADDR)", addr);
+ ap_unblock_alarms();
+ return -1;
+ }
+
+ one = 1;
+#ifdef SO_KEEPALIVE
+ if (setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (char *) &one, sizeof(int)) < 0) {
+ errno = WSAGetLastError();
+ ap_log_error(APLOG_MARK, APLOG_CRIT, server_conf,
+ "make_secure_socket: for %s, setsockopt: (SO_KEEPALIVE)", addr);
+#endif
+ ap_unblock_alarms();
+ return -1;
+ }
+
+ if (server_conf->send_buffer_size) {
+ if (setsockopt(s, SOL_SOCKET, SO_SNDBUF,
+ (char *) &server_conf->send_buffer_size, sizeof(int)) < 0) {
+ errno = WSAGetLastError();
+ ap_log_error(APLOG_MARK, APLOG_WARNING, server_conf,
+ "make_secure_socket: failed to set SendBufferSize for %s, "
+ "using default", addr);
+ ap_unblock_alarms();
+ return -1;
+ }
+ }
+
+ if (bind(s, (struct sockaddr *) server, sizeof(struct sockaddr_in)) == -1) {
+ errno = WSAGetLastError();
+ ap_log_error(APLOG_MARK, APLOG_CRIT, server_conf,
+ "make_secure_socket: could not bind to %s", addr);
+ ap_unblock_alarms();
+ return -1;
+ }
+
+ if (setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char *) &no, sizeof(int)) < 0) {
+ errno = WSAGetLastError();
+ ap_log_error(APLOG_MARK, APLOG_WARNING, server_conf,
+ "setsockopt: (TCP_NODELAY)");
+ }
+
+ if (listen(s, ap_listenbacklog) == -1) {
+ errno = WSAGetLastError();
+ ap_log_error(APLOG_MARK, APLOG_ERR, server_conf,
+ "make_secure_socket: unable to listen for connections on %s", addr);
+ ap_unblock_alarms();
+ return -1;
+ }
+
+ ap_unblock_alarms();
+ return s;
+}
+
+static const char *set_secure_listener(cmd_parms *cmd, void *dummy, char *ips, char* key, char* mutual)
+{
+ TLSSrvConfigRec* sc = get_tls_cfg(cmd->server);
+ const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
+ char *ports;
+ unsigned short port;
+ seclisten_rec *new;
+
+
+ if (err != NULL)
+ return err;
+
+ ports = strchr(ips, ':');
+
+ if (ports != NULL) {
+ if (ports == ips)
+ return "Missing IP address";
+ else if (ports[1] == '\0')
+ return "Address must end in :<port-number>";
+
+ *(ports++) = '\0';
+ }
+ else {
+ ports = ips;
+ }
+
+ new = ap_pcalloc(cmd->pool, sizeof(seclisten_rec));
+ new->local_addr.sin_family = AF_INET;
+
+ if (ports == ips)
+ new->local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+ else
+ new->local_addr.sin_addr.s_addr = ap_get_virthost_addr(ips, NULL);
+
+ port = atoi(ports);
+
+ if (!port)
+ return "Port must be numeric";
+
+ ap_table_set(sc->sltable, ports, "T");
+
+ new->local_addr.sin_port = htons(port);
+ new->fd = -1;
+ new->used = 0;
+ new->next = ap_seclisteners;
+ strcpy(new->key, key);
+ new->mutual = (mutual) ? 1 : 0;
+ ap_seclisteners = new;
+ return NULL;
+}
+
+static void InitTLS(server_rec *s, pool *p)
+{
+ seclisten_rec* sl;
+ listen_rec* lr;
+
+ for (sl = ap_seclisteners; sl != NULL; sl = sl->next) {
+ sl->fd = find_secure_listener(sl);
+
+ if (sl->fd < 0)
+ sl->fd = make_secure_socket(p, &sl->local_addr, sl->key, sl->mutual, s);
+ else
+ ap_note_cleanups_for_socket(p, sl->fd);
+
+ if (sl->fd >= 0) {
+ FD_SET(sl->fd, &listenfds);
+ ap_note_cleanups_for_socket(p, sl->fd);
+
+ lr = ap_pcalloc(p, sizeof(listen_rec));
+
+ if (lr) {
+ lr->local_addr = sl->local_addr;
+ lr->used = 0;
+ lr->fd = sl->fd;
+ lr->next = ap_listeners;
+ ap_listeners = lr;
+ }
+ } else {
+ clean_parent_exit(1);
+ }
+ }
+}
+
+void *tls_config_server_create(pool *p, server_rec *s)
+{
+ TLSSrvConfigRec *new = ap_palloc(p, sizeof(TLSSrvConfigRec));
+ new->sltable = ap_make_table(p, 5);
+ return new;
+}
+
+void *tls_config_server_merge(pool *p, void *basev, void *addv)
+{
+ TLSSrvConfigRec *base = (TLSSrvConfigRec *)basev;
+ TLSSrvConfigRec *add = (TLSSrvConfigRec *)addv;
+ TLSSrvConfigRec *merged = (TLSSrvConfigRec *)ap_palloc(p, sizeof(TLSSrvConfigRec));
+ return merged;
+}
+
+int tls_hook_Fixup(request_rec *r)
+{
+ TLSSrvConfigRec *sc = get_tls_cfg(r->server);
+ table *e = r->subprocess_env;
+ const char *s_secure;
+ char port[8];
+
+
+ /* For some reason r->server->port always return 80 rather than
+ * the current port. So for now we will get it straight from
+ * the horses mouth.
+ */
+ /* itoa(r->server->port, port, 10); */
+ itoa(ntohs(((r->connection)->local_addr).sin_port), port, 10);
+ s_secure = ap_table_get(sc->sltable, port);
+
+ if (!s_secure)
+ return DECLINED;
+
+ ap_table_set(e, "HTTPS", "on");
+
+ return DECLINED;
+}
+
+static const command_rec tls_module_cmds[] = {
+ { "SecureListen", set_secure_listener, NULL, RSRC_CONF, TAKE23,
+ "specify an address and/or port with a key pair name.\n"
+ "Optional third parameter of MUTUAL configures the port for mutual authentication."},
+ { NULL }
+};
+
+module MODULE_VAR_EXPORT tls_module =
+{
+ STANDARD_MODULE_STUFF,
+ InitTLS, /* initializer */
+ NULL, /* dir config creater */
+ NULL, /* dir merger --- default is to override */
+ tls_config_server_create, /* server config */
+ tls_config_server_merge, /* merge server config */
+ tls_module_cmds, /* command table */
+ NULL, /* handlers */
+ NULL, /* filename translation */
+ NULL, /* check_user_id */
+ NULL, /* check auth */
+ NULL, /* check access */
+ NULL, /* type_checker */
+ NULL, /* fixups */
+ NULL, /* logger */
+ NULL, /* header parser */
+ NULL, /* child_init */
+ NULL, /* child_exit */
+ tls_hook_Fixup /* post read request */
+};
+
+
diff --git a/APACHE_1_3_42/src/os/netware/modules.c b/APACHE_1_3_42/src/os/netware/modules.c
new file mode 100644
index 0000000000..3f697a2df5
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/modules.c
@@ -0,0 +1,86 @@
+/* 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.
+ */
+
+/* modules.c --- major modules compiled into Apache for NetWare.
+ * Only insert an entry for a module if it must be compiled into
+ * the core server
+ */
+
+#include "httpd.h"
+#include "http_config.h"
+
+extern module core_module;
+extern module so_module;
+extern module mime_module;
+extern module access_module;
+extern module auth_module;
+extern module negotiation_module;
+extern module includes_module;
+extern module autoindex_module;
+extern module dir_module;
+// extern module cgi_module;
+extern module userdir_module;
+extern module alias_module;
+extern module env_module;
+extern module config_log_module;
+extern module asis_module;
+extern module imap_module;
+extern module action_module;
+extern module setenvif_module;
+
+module *ap_prelinked_modules[] = {
+ &core_module,
+ &so_module,
+ &mime_module,
+ &access_module,
+ &auth_module,
+ &negotiation_module,
+ &includes_module,
+ &autoindex_module,
+ &dir_module,
+// &cgi_module,
+ &userdir_module,
+ &alias_module,
+ &env_module,
+ &config_log_module,
+ &asis_module,
+ &imap_module,
+ &action_module,
+ &setenvif_module,
+ NULL
+};
+
+module *ap_preloaded_modules[] = {
+ &core_module,
+ &so_module,
+ &mime_module,
+ &access_module,
+ &auth_module,
+ &negotiation_module,
+ &includes_module,
+ &autoindex_module,
+ &dir_module,
+// &cgi_module,
+ &userdir_module,
+ &alias_module,
+ &env_module,
+ &config_log_module,
+ &asis_module,
+ &imap_module,
+ &action_module,
+ &setenvif_module,
+ NULL
+};
diff --git a/APACHE_1_3_42/src/os/netware/multithread.c b/APACHE_1_3_42/src/os/netware/multithread.c
new file mode 100644
index 0000000000..2ca928b70e
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/multithread.c
@@ -0,0 +1,119 @@
+/* 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.
+ */
+
+#include "ap_config.h"
+#include "httpd.h"
+#include "http_conf_globals.h"
+#include "multithread.h"
+#include <nwsemaph.h>
+
+
+thread *create_thread(void (thread_fn)(void *), void *thread_arg)
+{
+ int rv;
+
+ rv = BeginThreadGroup(thread_fn, NULL, ap_thread_stack_size, thread_arg);
+ return((thread *)rv);
+}
+
+int kill_thread(thread *thread_id)
+{
+ return(0);
+}
+
+int await_thread(thread *thread_id, int sec_to_wait)
+{
+ return(0);
+}
+
+void exit_thread(int status)
+{}
+
+void free_thread(thread *thread_id)
+{}
+
+
+mutex * ap_create_mutex(char *name)
+{
+ return (mutex*)kMutexAlloc(name);
+}
+
+mutex * ap_open_mutex(char *name)
+{
+ return(NULL);
+}
+
+int ap_acquire_mutex(mutex *mutex_id)
+{
+ return(kMutexLock(mutex_id));
+}
+
+int ap_release_mutex(mutex *mutex_id)
+{
+ if (kMutexUnlock(mutex_id))
+ return 0;
+ else
+ return 1;
+}
+
+void ap_destroy_mutex(mutex *mutex_id)
+{
+ kMutexFree(mutex_id);
+}
+
+
+semaphore *create_semaphore(int initial)
+{
+ return((semaphore*)OpenLocalSemaphore(initial));
+}
+int acquire_semaphore(semaphore *semaphore_id)
+{
+ return(WaitOnLocalSemaphore((long)semaphore_id));
+}
+int release_semaphore(semaphore *semaphore_id)
+{
+ return(SignalLocalSemaphore((long)semaphore_id));
+}
+void destroy_semaphore(semaphore *semaphore_id)
+{
+ CloseLocalSemaphore((long)semaphore_id);
+}
+
+event *create_event(int manual, int initial, char *name)
+{
+ return(NULL);
+}
+event *open_event(char *name)
+{
+ return(NULL);
+}
+int acquire_event(event *event_id)
+{
+ return(0);
+}
+int set_event(event *event_id)
+{
+ return(0);
+}
+int reset_event(event *event_id)
+{
+ return(0);
+}
+void destroy_event(event *event_id)
+{}
+
+
+
diff --git a/APACHE_1_3_42/src/os/netware/os.c b/APACHE_1_3_42/src/os/netware/os.c
new file mode 100644
index 0000000000..b45b373de2
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/os.c
@@ -0,0 +1,467 @@
+/* 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 WS_SSL
+
+#include "httpd.h"
+#include "ap_config.h"
+#include "http_config.h"
+#include "http_log.h"
+#include <dirent.h>
+
+extern char ap_server_root[MAX_STRING_LEN];
+
+void ap_os_dso_init(void)
+{
+}
+
+void *ap_os_dso_load(const char *path)
+{
+ unsigned int nlmHandle;
+ char *moduleName = NULL;
+
+ moduleName = strrchr(path, '/');
+
+ if (moduleName) {
+ moduleName++;
+ }
+
+ nlmHandle = FindNLMHandleInAddressSpace((char*)moduleName, NULL);
+
+ if (nlmHandle == NULL) {
+ spawnlp(P_NOWAIT | P_SPAWN_IN_CURRENT_DOMAIN, path, NULL);
+ nlmHandle = FindNLMHandleInAddressSpace((char*)moduleName, NULL);
+ }
+
+ return (void *)nlmHandle;
+}
+
+void ap_os_dso_unload(void *handle)
+{
+ KillMe(handle);
+}
+
+void *ap_os_dso_sym(void *handle, const char *symname)
+{
+ return ImportSymbol((int)GetNLMHandle(), (char *)symname);
+}
+
+void ap_os_dso_unsym(void *handle, const char *symname)
+{
+ UnimportSymbol((int)GetNLMHandle(), (char *)symname);
+}
+
+const char *ap_os_dso_error(void)
+{
+ return NULL;
+}
+
+char *remove_filename(char* str)
+{
+ int i, len = strlen(str);
+
+ for (i=len; i; i--) {
+ if (str[i] == '\\' || str[i] == '/') {
+ str[i] = NULL;
+ break;
+ }
+ }
+ return str;
+}
+
+char *bslash2slash(char* str)
+{
+ int i, len = strlen(str);
+
+ for (i=0; i<len; i++) {
+ if (str[i] == '\\') {
+ str[i] = '/';
+ break;
+ }
+ }
+ return str;
+}
+
+void check_clean_load(module *top_module)
+{
+ if (top_module != NULL) {
+ module *m;
+
+ ap_log_error(APLOG_MARK, APLOG_CRIT, NULL,
+ "abnormal shutdown detected, performing a clean shutdown: please restart apache");
+ for (m = top_module; m; m = m->next)
+ ap_os_dso_unload((ap_os_dso_handle_t)m->dynamic_load_handle);
+ exit(1);
+ }
+}
+
+void init_name_space()
+{
+ UnAugmentAsterisk(TRUE);
+ SetCurrentNameSpace(NW_NS_LONG);
+ SetTargetNameSpace(NW_NS_LONG);
+}
+
+/* Perform complete canonicalization. On NetWare we are just
+ lower casing the file name so that the comparisons will match.
+ NetWare assumes that all physical paths are fully qualified.
+ Each file path must include a volume name.
+ */
+static char *os_canonical_filename(pool *pPool, const char *szFile)
+{
+ char *pNewName = ap_pstrdup(pPool, szFile);
+ char *slash_test;
+
+ bslash2slash(pNewName);
+ /* Don't try to canonicalize a filename that isn't even valid
+ This way we don't mess up proxy requests or other kinds
+ of special filenames.
+ */
+ if (ap_os_is_filename_valid(pNewName)) {
+ if ((pNewName[0] == '/') && (strchr (pNewName, ':') == NULL))
+ {
+ char vol[256];
+
+ _splitpath (ap_server_root, vol, NULL, NULL, NULL);
+ pNewName = ap_pstrcat (pPool, vol, pNewName, NULL);
+ }
+ if ((slash_test = strchr(pNewName, ':')) && (*(slash_test+1) != '/')
+ && (*(slash_test+1) != '\0'))
+ {
+ char vol[_MAX_VOLUME+1];
+
+ _splitpath (pNewName, vol, NULL, NULL, NULL);
+ pNewName = ap_pstrcat (pPool, vol, "/", pNewName+strlen(vol), NULL);
+ }
+ }
+ return pNewName;
+}
+
+char *ap_os_canonical_filename(pool *pPool, const char *szFile)
+{
+ char *pNewName = os_canonical_filename(pPool, szFile);
+
+ /* Lower case the name so that the interal string compares work */
+ strlwr(pNewName);
+ return pNewName;
+}
+
+
+char *ap_os_case_canonical_filename(pool *pPool, const char *szFile)
+{
+ /* First thing we need to do is get a copy of the
+ canonicalized path */
+ char *pNewName = os_canonical_filename(pPool, szFile);
+ int volnum=0;
+ long dirnum=0;
+ long pathcount=0;
+ char *path;
+ char vol[_MAX_VOLUME+1];
+ int retval, x, y;
+
+ /* See if path exists by trying to get the volume and directory number */
+ retval = FEMapPathVolumeDirToVolumeDir(pNewName, 0, 0, &volnum, &dirnum);
+ if (retval == 0) {
+ /* allocate a buffer and ask the file system for the real name of
+ the directory and file */
+ path = ap_palloc(pPool, strlen(pNewName)+2);
+ FEMapVolumeAndDirectoryToPath (volnum, dirnum, path, &pathcount);
+
+ /* The file system gives it back in a lengh preceded string so we
+ need to convert it to a null terminated string. */
+ x = 0;
+ while (pathcount-- > 0) {
+ y = path[x];
+ path[x] = '/';
+ x += y + 1;
+ }
+ path[x] = '\0'; /* null terminate the full path */
+
+ /* Get the name of the volume so that we can prepend it onto the path */
+ FEMapVolumeNumberToName (volnum, vol);
+ vol[vol[0]+1] = '\0';
+ pNewName = ap_pstrcat (pPool, &(vol[1]), ":", path, NULL);
+ }
+
+ /* At this point we either have a real case accurate canonical path or
+ the original name canonicalized */
+ return pNewName;
+}
+
+
+/*
+ * ap_os_is_filename_valid is given a filename, and returns 0 if the filename
+ * is not valid for use on this system. On NetWare, this means it fails any
+ * of the tests below. Otherwise returns 1.
+ *
+ * The tests are:
+ *
+ * 1) total path length greater than MAX_PATH
+ *
+ * 2) the file path must contain a volume specifier and no / or \
+ * can appear before the volume specifier.
+ *
+ * 3) anything using the octets 0-31 or characters " < > | :
+ * (these are reserved for Windows use in filenames. In addition
+ * each file system has its own additional characters that are
+ * invalid. See KB article Q100108 for more details).
+ *
+ * 4) anything ending in "." (no matter how many)
+ * (filename doc, doc. and doc... all refer to the same file)
+ *
+ * 5) any segment in which the basename (before first period) matches
+ * one of the DOS device names
+ * (the list comes from KB article Q100108 although some people
+ * reports that additional names such as "COM5" are also special
+ * devices).
+ *
+ * If the path fails ANY of these tests, the result must be to deny access.
+ */
+
+int ap_os_is_filename_valid(const char *file)
+{
+ const char *segstart;
+ unsigned int seglength;
+ const char *pos;
+ char *colonpos, *fslashpos, *bslashpos;
+ static const char * const invalid_characters = "?\"<>*|:";
+ static const char * const invalid_filenames[] = {
+ "CON", "AUX", "COM1", "COM2", "COM3",
+ "COM4", "LPT1", "LPT2", "LPT3", "PRN", "NUL", NULL
+ };
+
+ /* First check to make sure that we have a file so that we don't abend */
+ if (file == NULL)
+ return 0;
+
+ /* Test 1 */
+ if (strlen(file) >= _MAX_PATH) {
+ /* Path too long for Windows. Note that this test is not valid
+ * if the path starts with //?/ or \\?\. */
+ return 0;
+ }
+
+ pos = file;
+
+ /* Skip any leading non-path components. This can be either a
+ * drive letter such as C:, or a UNC path such as \\SERVER\SHARE\.
+ * We continue and check the rest of the path based on the rules above.
+ * This means we could eliminate valid filenames from servers which
+ * are not running NT (such as Samba).
+ */
+
+ colonpos = strchr (file, ':');
+
+ if (!colonpos)
+ return 0;
+
+ pos = ++colonpos;
+ if (!*pos) {
+ /* No path information */
+ /* Same as specifying volume:\ */
+ return 1;
+ }
+
+ while (*pos) {
+ unsigned int idx;
+ unsigned int baselength;
+
+ while (*pos == '/' || *pos == '\\') {
+ pos++;
+ }
+ if (*pos == '\0') {
+ break;
+ }
+ segstart = pos; /* start of segment */
+ while (*pos && *pos != '/' && *pos != '\\') {
+ pos++;
+ }
+ seglength = pos - segstart;
+ /*
+ * Now we have a segment of the path, starting at position "segstart"
+ * and length "seglength"
+ */
+
+ /* Test 2 */
+ for (idx = 0; idx < seglength; idx++) {
+ if ((segstart[idx] > 0 && segstart[idx] < 32) ||
+ strchr(invalid_characters, segstart[idx])) {
+ return 0;
+ }
+ }
+
+ /* Test 2.5 */
+ if (seglength == 2) {
+ if ( (segstart[0] == '.') && (segstart[1] == '.') ) {
+ return 1;
+ }
+
+ }
+
+ /* Test 3 */
+ if (segstart[seglength-1] == '.') {
+ return 0;
+ }
+
+ /* Test 4 */
+ for (baselength = 0; baselength < seglength; baselength++) {
+ if (segstart[baselength] == '.') {
+ break;
+ }
+ }
+
+ /* baselength is the number of characters in the base path of
+ * the segment (which could be the same as the whole segment length,
+ * if it does not include any dot characters). */
+ if (baselength == 3 || baselength == 4) {
+ for (idx = 0; invalid_filenames[idx]; idx++) {
+ if (strlen(invalid_filenames[idx]) == baselength &&
+ !strnicmp(invalid_filenames[idx], segstart, baselength)) {
+ return 0;
+ }
+ }
+ }
+ }
+
+ return 1;
+}
+
+#undef opendir_411
+DIR *os_opendir (const char *pathname)
+{
+ struct stat s;
+ DIR *d = opendir_411 (pathname);
+
+ if (d) {
+ strcpy (d->d_name, "<<**");
+ }
+
+ if (!d) {
+ /* Let's check if this is an empty directory */
+ if (stat(pathname, &s) != 0)
+ return NULL;
+ if (!(S_ISDIR(s.st_mode)))
+ return NULL;
+
+ /* If we are here, then this appears to be a directory */
+ /* We allocate a name */
+ d = NULL;
+ d = (DIR *)malloc(sizeof(DIR));
+ if (d) {
+ memset(d, 0, sizeof(DIR));
+ strcpy(d->d_name, "**<<");
+ d->d_cdatetime = 50;
+
+ }
+
+ }
+
+ return d;
+
+}
+
+#undef readdir_411
+DIR *os_readdir (DIR *dirP)
+{
+
+/*
+ * First three if statements added for empty directory support.
+ *
+ */
+ if ( (dirP->d_cdatetime == 50) && (dirP->d_name[0] == '*') &&
+ (dirP->d_name[2] == '<') )
+ {
+ strcpy (dirP->d_name, ".");
+ strcpy (dirP->d_nameDOS, ".");
+ return (dirP);
+ }
+ else if ((dirP->d_cdatetime == 50) &&
+ (dirP->d_name[0] == '.') &&
+ (dirP->d_name[1] == '\0')) {
+ strcpy (dirP->d_name, "..");
+ strcpy (dirP->d_nameDOS, "..");
+ return (dirP);
+ }
+ else if ( (dirP->d_cdatetime == 50) &&
+ (dirP->d_name[0] == '.') &&
+ (dirP->d_name[1] == '.') &&
+ (dirP->d_name[2] == '\0') ) {
+ return (NULL);
+ }
+ else if ((dirP->d_name[0] == '<') && (dirP->d_name[2] == '*')) {
+ strcpy (dirP->d_name, ".");
+ strcpy (dirP->d_nameDOS, ".");
+ return (dirP);
+ }
+ else if ((dirP->d_name[0] == '.') && (dirP->d_name[1] == '\0')) {
+ strcpy (dirP->d_name, "..");
+ strcpy (dirP->d_nameDOS, "..");
+ return (dirP);
+ }
+ else
+ return readdir_411 (dirP);
+}
+
+
+#undef closedir_510
+int os_closedir (DIR *dirP)
+{
+/*
+ * Modified to handle empty directories.
+ *
+ */
+
+ if (dirP == NULL) {
+ return 0;
+ }
+
+ if ( ( (dirP->d_cdatetime == 50) && (dirP->d_name[0] == '*') &&
+ (dirP->d_name[2] == '<')
+ ) ||
+ ( (dirP->d_cdatetime == 50) && (dirP->d_name[0] == '.') &&
+ (dirP->d_name[1] == '\0')
+ ) ||
+ ( (dirP->d_cdatetime == 50) && (dirP->d_name[0] == '.') &&
+ (dirP->d_name[1] == '.') && (dirP->d_name[2] == '\0')
+ )
+ )
+ {
+
+ free(dirP);
+ dirP = NULL;
+ return 0;
+ }
+ else {
+ return closedir_510(dirP);
+ }
+
+
+}
+
+char *ap_os_http_method(void *r)
+{
+ int s = ((request_rec*)r)->connection->client->fd;
+ unsigned int optParam;
+
+ if (!WSAIoctl(s, SO_SSL_GET_FLAGS, NULL, 0, &optParam, sizeof(optParam), NULL, NULL, NULL))
+ if (optParam & (SO_SSL_ENABLE | SO_SSL_SERVER)) return "https";
+ return "http";
+}
+
+unsigned short ap_os_default_port(void *r)
+{
+ return ap_default_port_for_scheme(ap_os_http_method(r));
+}
diff --git a/APACHE_1_3_42/src/os/netware/os.h b/APACHE_1_3_42/src/os/netware/os.h
new file mode 100644
index 0000000000..a61ccf1905
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/os.h
@@ -0,0 +1,149 @@
+/* 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.
+ */
+
+#ifndef APACHE_OS_H
+#define APACHE_OS_H
+
+#define PLATFORM "NETWARE"
+#define HAVE_CANONICAL_FILENAME
+
+/*
+ * 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
+ */
+
+typedef signed long int32;
+typedef int uid_t;
+typedef int gid_t;
+typedef int tid_t;
+
+#include "ap_config.h"
+#include <string.h>
+#include <stddef.h>
+#include <nwthread.h>
+#include <nwmalloc.h>
+#include <nwnamspc.h>
+#include <nwlib.h>
+#include <nwadv.h>
+#include <ws2nlm.h>
+#include <winsock2.h>
+#include <fcntl.h>
+#include <dirent.h>
+
+#define NO_LINGCLOSE
+#define NO_SLACK
+#define HAVE_UNISTD_H
+#define NO_SETSID
+#define NO_KILLPG
+#define NO_WRITEV
+#define NO_GETTIMEOFDAY
+#define NO_TIMES
+#define NO_USE_SIGACTION
+#define USE_LONGJMP
+#define MULTITHREAD
+
+#define NO_RELIABLE_PIPED_LOGS
+#define CASE_BLIND_FILESYSTEM
+#define NO_OTHER_CHILD
+
+#define USE_HSREGEX
+#define NETDB_USE_INTERNET
+#define N_PLAT_NLM
+#define APX386
+#define ALLOC_USE_MALLOC
+#define OPTIMIZE_TIMEOUTS
+#define FD_SETSIZE 128
+#define NO_DBM_REWRITEMAP
+
+#define crypt(buf,salt) (buf)
+#define sleep(t) delay(t*1000)
+#define getpid() ((pid_t)GetThreadGroupID())
+#define gettid() ((tid_t)GetThreadID())
+/* Netware doesn't have symlinks so S_ISLNK is always false */
+#define S_ISLNK(m) 0
+/* Netware doesn't have isnan,isinf so they always return false */
+#define isnan(m) 0
+#define isinf(m) 0
+#define lstat(x, y) stat(x, y)
+#define strcasecmp(s1, s2) stricmp(s1, s2)
+#define strncasecmp(s1, s2, n) strnicmp(s1, s2, n)
+#define mktemp(s) tmpnam(s)
+#define _getch getch
+
+/* Watcom reports that ERANGE is returned properly for any out of bounds
+ * conditions, with a MIN/MAX_LONG value. This should be safe.
+ */
+#define ap_strtol strtol
+
+#define opendir_411(p) os_opendir(p)
+#define opendir(p) os_opendir(p)
+DIR *os_opendir (const char *pathname);
+
+#define readdir_411(p) os_readdir(p)
+#define readdir(p) os_readdir(p)
+DIR *os_readdir (DIR *dirP);
+
+#define closedir_510(p) os_closedir(p)
+#define closedir(p) os_closedir(p)
+int os_closedir (DIR *dirP);
+
+/* Prototypes */
+void AMCSocketCleanup(void);
+void clean_parent_exit(int code);
+
+#ifdef __GNUC__
+static
+#endif
+inline int ap_os_is_path_absolute(const char *file)
+{
+ char *s = strstr (file, "://");
+
+ /* First make sure we aren't looking at a URL such as
+ a proxy:http://blah.
+ */
+ if (!s) {
+ s = strchr (file, ':');
+
+ if (s) {
+ if (strncmp(s, "://", 3) != 0)
+ /* XXX: we assume that everything before the : is letters */
+ return 1;
+ }
+ else {
+ if (file[0] == '/')
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+#define ap_os_dso_handle_t void *
+void ap_os_dso_init(void);
+void *ap_os_dso_load(const char *);
+void ap_os_dso_unload(void *);
+void *ap_os_dso_sym(void *, const char *);
+void ap_os_dso_unsym(void *handle, const char *symname);
+const char *ap_os_dso_error(void);
+char *remove_filename(char*);
+char *bslash2slash(char*);
+void init_name_space(void);
+int ap_os_is_filename_valid(const char *file);
+char *ap_os_http_method(void *r);
+unsigned short ap_os_default_port(void *r);
+#endif /*! APACHE_OS_H*/
+
diff --git a/APACHE_1_3_42/src/os/netware/precomp.h b/APACHE_1_3_42/src/os/netware/precomp.h
new file mode 100644
index 0000000000..70abf45f37
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/precomp.h
@@ -0,0 +1,27 @@
+/* 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.
+ */
+
+#pragma precompile_target "precomp.mch"
+#define NETWARE
+
+#ifndef __int64
+#define __int64 long long
+#endif
+
+
+
+
+
diff --git a/APACHE_1_3_42/src/os/netware/test_char.h b/APACHE_1_3_42/src/os/netware/test_char.h
new file mode 100644
index 0000000000..b8d4ad49e9
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/test_char.h
@@ -0,0 +1,44 @@
+/* this file is automatically generated by gen_test_char, do not edit */
+/* this file is automatically generated by gen_test_char, do not edit */
+#define T_ESCAPE_SHELL_CMD 0x01 /* chars with special meaning in the shell */
+#define T_ESCAPE_PATH_SEGMENT 0x02 /* find path segment, as defined in RFC1808 */
+#define T_OS_ESCAPE_PATH 0x04 /* escape characters in a path or uri */
+#define T_HTTP_TOKEN_STOP 0x08 /* find http tokens, as defined in RFC2616 */
+#define T_ESCAPE_LOGITEM 0x10 /* filter what should go in the log file */
+#define T_ESCAPE_FORENSIC 0x20 /* filter what should go in the forensic log */
+
+static const unsigned char test_char_table[256] = {
+ 0x20, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, /*0x00...0x07*/
+ 0x3e, 0x3e, 0x3f, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, /*0x08...0x0f*/
+ 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, /*0x10...0x17*/
+ 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, /*0x18...0x1f*/
+ 0x0e, 0x00, 0x17, 0x06, 0x01, 0x26, 0x01, 0x01, /*0x20...0x27*/
+ 0x09, 0x09, 0x01, 0x00, 0x08, 0x00, 0x00, 0x0a, /*0x28...0x2f*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x30...0x37*/
+ 0x00, 0x00, 0x28, 0x0f, 0x0f, 0x08, 0x0f, 0x0f, /*0x38...0x3f*/
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x40...0x47*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x48...0x4f*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x50...0x57*/
+ 0x00, 0x00, 0x00, 0x0f, 0x1f, 0x0f, 0x07, 0x00, /*0x58...0x5f*/
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x60...0x67*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x68...0x6f*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x70...0x77*/
+ 0x00, 0x00, 0x00, 0x0f, 0x27, 0x0f, 0x01, 0x3e, /*0x78...0x7f*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0x80...0x87*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0x88...0x8f*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0x90...0x97*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0x98...0x9f*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0xa0...0xa7*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0xa8...0xaf*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0xb0...0xb7*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0xb8...0xbf*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0xc0...0xc7*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0xc8...0xcf*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0xd0...0xd7*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0xd8...0xdf*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0xe0...0xe7*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0xe8...0xef*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0xf0...0xf7*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 /*0xf8...0xff*/
+
+};
diff --git a/APACHE_1_3_42/src/os/netware/uri_delims.h b/APACHE_1_3_42/src/os/netware/uri_delims.h
new file mode 100644
index 0000000000..0c855bf726
--- /dev/null
+++ b/APACHE_1_3_42/src/os/netware/uri_delims.h
@@ -0,0 +1,16 @@
+/* this file is automatically generated by gen_uri_delims, do not edit */
+static const unsigned char uri_delims[256] = {
+ T_NUL,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,T_HASH,0,0,0,0,
+ 0,0,0,0,0,0,0,T_SLASH,0,0,0,0,0,0,0,0,0,0,T_COLON,0,
+ 0,0,0,T_QUESTION,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+};
diff --git a/APACHE_1_3_42/src/os/os2/Makefile.tmpl b/APACHE_1_3_42/src/os/os2/Makefile.tmpl
new file mode 100644
index 0000000000..9e21b9c69e
--- /dev/null
+++ b/APACHE_1_3_42/src/os/os2/Makefile.tmpl
@@ -0,0 +1,57 @@
+CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS)
+LIBS=$(EXTRA_LIBS) $(LIBS1)
+INCLUDES=$(INCLUDES1) $(INCLUDES0) $(EXTRA_INCLUDES)
+LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS)
+
+OBJS= os.o os-inline.o util_os2.o
+COPY= os.h os-inline.c
+
+LIB= libos.a
+
+all: $(LIB)
+
+$(LIB): $(OBJS)
+ rm -f $@
+ ar cr $@ $(OBJS)
+ $(RANLIB) $@
+
+.c.o:
+ $(CC) -c $(INCLUDES) $(CFLAGS) $<
+
+clean:
+ for i in $(COPY); do rm -f $(INCDIR)/$$i ; done
+ rm -f $(OBJS) $(LIB)
+
+distclean: clean
+ -rm -f Makefile
+
+$(OBJS): Makefile
+
+$(INCDIR)/os.h: os.h
+ cp $< $@
+
+$(INCDIR)/os-inline.c: os-inline.c
+ cp $< $@
+
+# We really don't expect end users to use this rule. It works only with
+# gcc, and rebuilds Makefile.tmpl. You have to re-run Configure after
+# using it.
+depend:
+ cp Makefile.tmpl Makefile.tmpl.bak \
+ && sed -ne '1,/^# DO NOT REMOVE/p' Makefile.tmpl > Makefile.new \
+ && gcc -MM $(INCLUDES) $(CFLAGS) *.c >> Makefile.new \
+ && sed -e '1,$$s: $(INCDIR)/: $$(INCDIR)/:g' \
+ -e '1,$$s: $(OSDIR)/: $$(OSDIR)/:g' Makefile.new \
+ > Makefile.tmpl \
+ && rm Makefile.new
+
+# DO NOT REMOVE
+os-inline.o: os-inline.c $(INCDIR)/ap_config.h \
+ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h \
+ $(INCDIR)/os.h $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h
+os.o: os.c os.h os-inline.c
+util_os2.o: util_os2.c $(INCDIR)/httpd.h $(INCDIR)/ap_config.h \
+ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h \
+ $(INCDIR)/os.h $(INCDIR)/os-inline.c $(INCDIR)/ap_ctype.h \
+ $(INCDIR)/hsregex.h $(INCDIR)/ap_alloc.h $(INCDIR)/buff.h \
+ $(INCDIR)/ap.h $(INCDIR)/util_uri.h $(INCDIR)/http_log.h
diff --git a/APACHE_1_3_42/src/os/os2/os-inline.c b/APACHE_1_3_42/src/os/os2/os-inline.c
new file mode 100644
index 0000000000..b9b838391f
--- /dev/null
+++ b/APACHE_1_3_42/src/os/os2/os-inline.c
@@ -0,0 +1,50 @@
+/* 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.
+ */
+
+/*
+ * This file contains functions which can be inlined if the compiler
+ * has an "inline" modifier. Because of this, this file is both a
+ * header file and a compilable module.
+ *
+ * Only inlineable functions should be defined in here. They must all
+ * include the INLINE modifier.
+ *
+ * If the compiler supports inline, this file will be #included as a
+ * header file from os.h to create all the inline function
+ * definitions. INLINE will be defined to whatever is required on
+ * function definitions to make them inline declarations.
+ *
+ * If the compiler does not support inline, this file will be compiled
+ * as a normal C file into libos.a (along with os.c). In this case
+ * INLINE will _not_ be set so we can use this to test if we are
+ * compiling this source file.
+ */
+
+#ifndef INLINE
+#define INLINE
+
+/* Anything required only when compiling */
+#include "ap_config.h"
+
+#endif
+
+INLINE int ap_os_is_path_absolute(const char *file)
+{
+ /* For now, just do the same check that http_request.c and mod_alias.c
+ * do.
+ */
+ return file && (file[0] == '/' || (file[1] == ':' && file[2] == '/'));
+}
diff --git a/APACHE_1_3_42/src/os/os2/os.c b/APACHE_1_3_42/src/os/os2/os.c
new file mode 100644
index 0000000000..cb0927b87d
--- /dev/null
+++ b/APACHE_1_3_42/src/os/os2/os.c
@@ -0,0 +1,79 @@
+/* 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.
+ */
+
+/*
+ * This file will include OS specific functions which are not inlineable.
+ * Any inlineable functions should be defined in os-inline.c instead.
+ */
+
+#include "os.h"
+#define INCL_DOS
+#include <os2.h>
+#include <stdio.h>
+#include <string.h>
+
+static int rc=0;
+static char errorstr[20];
+
+void ap_os_dso_init(void)
+{
+}
+
+
+
+ap_os_dso_handle_t ap_os_dso_load(const char *module_name)
+{
+ HMODULE handle;
+
+ rc = DosLoadModule(errorstr, sizeof(errorstr), module_name, &handle);
+
+ if (rc == 0)
+ return handle;
+
+ return 0;
+}
+
+
+
+void ap_os_dso_unload(ap_os_dso_handle_t handle)
+{
+ DosFreeModule(handle);
+}
+
+
+
+void *ap_os_dso_sym(ap_os_dso_handle_t handle, const char *funcname)
+{
+ PFN func;
+
+ rc = DosQueryProcAddr( handle, 0, funcname, &func );
+
+ if (rc == 0)
+ return func;
+
+ return NULL;
+}
+
+
+
+const char *ap_os_dso_error(void)
+{
+ static char message[200];
+ strcpy(message, ap_os_error_message(rc));
+ strcat(message, " for module ");
+ strcat(message, errorstr);
+ return message;
+}
diff --git a/APACHE_1_3_42/src/os/os2/os.h b/APACHE_1_3_42/src/os/os2/os.h
new file mode 100644
index 0000000000..fa1f3fb8e7
--- /dev/null
+++ b/APACHE_1_3_42/src/os/os2/os.h
@@ -0,0 +1,77 @@
+/* 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.
+ */
+
+#ifndef APACHE_OS_H
+#define APACHE_OS_H
+
+#define PLATFORM "OS/2"
+#define HAVE_CANONICAL_FILENAME
+#define HAVE_DRIVE_LETTERS
+#define HAVE_UNC_PATHS
+
+/*
+ * 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
+ */
+
+#if defined(__GNUC__) && !defined(INLINE)
+/* Compiler supports inline, so include the inlineable functions as
+ * part of the header
+ */
+#define INLINE extern __inline__
+
+INLINE int ap_os_is_path_absolute(const char *file);
+
+#include "os-inline.c"
+#endif
+
+#ifndef INLINE
+/* Compiler does not support inline, so prototype the inlineable functions
+ * as normal
+ */
+extern int ap_os_is_path_absolute(const char *file);
+#endif
+
+/* FIXME: the following should be implemented on this platform */
+#define ap_os_is_filename_valid(f) (1)
+
+/* Use a specialized kill() function */
+int ap_os_kill(int pid, int sig);
+
+/* Maps an OS error code to an error message */
+char *ap_os_error_message(int err);
+
+/* OS/2 doesn't have symlinks so S_ISLNK is always false */
+#define S_ISLNK(m) 0
+#define lstat(x, y) stat(x, y)
+
+#define isinf(n) (!isfinite(n))
+#define HAVE_ISINF
+#define HAVE_ISNAN
+
+/* strtol() correctly returns ERANGE on overflow, use it */
+#define ap_strtol strtol
+
+/* Dynamic loading functions */
+#define ap_os_dso_handle_t unsigned long
+void ap_os_dso_init(void);
+ap_os_dso_handle_t ap_os_dso_load(const char *);
+void ap_os_dso_unload(ap_os_dso_handle_t);
+void * ap_os_dso_sym(ap_os_dso_handle_t, const char *);
+const char *ap_os_dso_error(void);
+
+#endif /* ! APACHE_OS_H */
diff --git a/APACHE_1_3_42/src/os/os2/util_os2.c b/APACHE_1_3_42/src/os/os2/util_os2.c
new file mode 100644
index 0000000000..5b518f8581
--- /dev/null
+++ b/APACHE_1_3_42/src/os/os2/util_os2.c
@@ -0,0 +1,170 @@
+/* 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 "httpd.h"
+#include "http_log.h"
+
+
+API_EXPORT(char *)ap_os_case_canonical_filename(pool *pPool, const char *szFile)
+{
+ char *buf;
+ char buf2[CCHMAXPATH];
+ int rc, len;
+ char *pos;
+
+/* Remove trailing slash unless it's a root directory */
+ len = strlen(szFile);
+ buf = ap_pstrndup(pPool, szFile, len);
+
+ if (len > 3 && buf[len-1] == '/')
+ buf[--len] = 0;
+
+ if (buf[0] == '/' && buf[1] == '/') {
+ /* A UNC path */
+ if (strchr(buf+2, '/') == NULL) { /* Allow // or //server */
+ return ap_pstrdup(pPool, buf);
+ }
+ }
+
+ rc = DosQueryPathInfo(buf, FIL_QUERYFULLNAME, buf2, sizeof(buf2));
+
+ if (rc) {
+ if ( rc != ERROR_INVALID_NAME ) {
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, NULL, "OS/2 error %d for file %s", rc, szFile);
+ }
+
+ return ap_pstrdup(pPool, szFile);
+ }
+
+/* Switch backslashes to forward */
+ for (pos=buf2; *pos; pos++)
+ if (*pos == '\\')
+ *pos = '/';
+
+ return ap_pstrdup(pPool, buf2);
+}
+
+
+
+static void fix_component(char *path, char *lastcomp)
+{
+ FILEFINDBUF3 fb3;
+ HDIR hDir = HDIR_CREATE;
+ ULONG numNames = 1;
+ ULONG rc = DosFindFirst( (UCHAR *)path, &hDir, FILE_NORMAL|FILE_DIRECTORY, &fb3, sizeof(fb3), &numNames, FIL_STANDARD );
+
+ if (rc == 0)
+ strcpy(lastcomp, fb3.achName);
+
+ DosFindClose(hDir);
+}
+
+
+
+char *ap_os_systemcase_canonical_filename(pool *pPool, const char *szFile)
+{
+ char *szCanonicalFile = ap_os_case_canonical_filename(pPool, szFile);
+ int startslash = 2, slashnum=0;
+ char *pos, *prevslash = NULL;
+
+ if (szCanonicalFile[0] == '/' && szCanonicalFile[1] == '/') /* a UNC name */
+ startslash = 5;
+
+ for (pos = szCanonicalFile; *pos; pos++) {
+ if (*pos == '/') {
+ slashnum++;
+ if (slashnum >= startslash) {
+ *pos = 0;
+ fix_component(szCanonicalFile, prevslash+1);
+ *pos = '/';
+ }
+ prevslash = pos;
+ }
+ }
+
+ if (slashnum >= startslash) {
+ fix_component(szCanonicalFile, prevslash+1);
+ }
+
+ return szCanonicalFile;
+}
+
+
+
+API_EXPORT(char *)ap_os_canonical_filename(pool *pPool, const char *szFile)
+{
+ char *szCanonicalFile = ap_os_systemcase_canonical_filename(pPool, szFile);
+ strlwr(szCanonicalFile);
+ return szCanonicalFile;
+}
+
+
+
+int ap_os_kill(pid_t pid, int sig)
+{
+/* SIGTERM's don't work too well in OS/2 (only affects other EMX programs).
+ CGIs may not be, esp. REXX scripts, so use a native call instead */
+
+ int rc;
+
+ if ( sig == SIGTERM ) {
+ rc = DosSendSignalException( pid, XCPT_SIGNAL_BREAK );
+
+ if ( rc ) {
+ errno = ESRCH;
+ rc = -1;
+ }
+ } else {
+ rc = kill(pid, sig);
+ }
+
+ return rc;
+}
+
+
+
+char *ap_os_error_message(int err)
+{
+ static char result[200];
+ char message[HUGE_STRING_LEN];
+ ULONG len;
+ char *pos;
+ int c;
+
+ if (DosGetMessage(NULL, 0, message, HUGE_STRING_LEN, err, "OSO001.MSG", &len) == 0) {
+ len--;
+ message[len] = 0;
+ pos = result;
+
+ if (len >= sizeof(result))
+ len = sizeof(result-1);
+
+ for (c=0; c<len; c++) {
+ while (ap_isspace(message[c]) && ap_isspace(message[c+1])) /* skip multiple whitespace */
+ c++;
+ *(pos++) = ap_isspace(message[c]) ? ' ' : message[c];
+ }
+
+ *pos = 0;
+ } else {
+ sprintf(result, "OS/2 error %d", err);
+ }
+
+ return result;
+}
diff --git a/APACHE_1_3_42/src/os/os390/Makefile.tmpl b/APACHE_1_3_42/src/os/os390/Makefile.tmpl
new file mode 100644
index 0000000000..23c509918e
--- /dev/null
+++ b/APACHE_1_3_42/src/os/os390/Makefile.tmpl
@@ -0,0 +1,64 @@
+CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS)
+LIBS=$(EXTRA_LIBS) $(LIBS1)
+INCLUDES=$(INCLUDES1) $(INCLUDES0) $(EXTRA_INCLUDES)
+LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS)
+
+OBJS= os.o os-inline.o
+
+LIB= libos.a
+
+all: $(LIB)
+
+$(LIB): $(OBJS)
+ rm -f $@
+ ar cr $@ $(OBJS)
+ $(RANLIB) $@
+
+.c.o:
+ $(CC) -c $(INCLUDES) $(CFLAGS) $<
+
+clean:
+ rm -f $(OBJS) $(LIB)
+
+distclean: clean
+ -rm -f Makefile
+
+# We really don't expect end users to use this rule. It works only with
+# gcc, and rebuilds Makefile.tmpl. You have to re-run Configure after
+# using it.
+depend:
+ cp Makefile.tmpl Makefile.tmpl.bak \
+ && sed -ne '1,/^# DO NOT REMOVE/p' Makefile.tmpl > Makefile.new \
+ && gcc -MM $(INCLUDES) $(CFLAGS) *.c >> Makefile.new \
+ && sed -e '1,$$s: $(INCDIR)/: $$(INCDIR)/:g' \
+ -e '1,$$s: $(OSDIR)/: $$(OSDIR)/:g' Makefile.new \
+ > Makefile.tmpl \
+ && rm Makefile.new
+
+$(OBJS): Makefile
+
+# DO NOT REMOVE
+
+os-inline.o: os-inline.c
+os-inline.o: $(INCDIR)/ap_config.h
+os-inline.o: $(INCDIR)/ap_mmn.h
+os-inline.o: $(INCDIR)/ap_config_auto.h
+os-inline.o: os.h
+os-inline.o: $(INCDIR)/ap_ctype.h
+os-inline.o: $(INCDIR)/hsregex.h
+os.o: os.c
+os.o: $(INCDIR)/httpd.h
+os.o: $(INCDIR)/ap_config.h
+os.o: $(INCDIR)/ap_mmn.h
+os.o: $(INCDIR)/ap_config_auto.h
+os.o: os.h
+os.o: $(INCDIR)/ap_ctype.h
+os.o: $(INCDIR)/hsregex.h
+os.o: $(INCDIR)/ap_alloc.h
+os.o: $(INCDIR)/buff.h
+os.o: $(INCDIR)/ap.h
+os.o: ebcdic.h
+os.o: $(INCDIR)/util_uri.h
+os.o: $(INCDIR)/http_core.h
+
+
diff --git a/APACHE_1_3_42/src/os/os390/README.os390 b/APACHE_1_3_42/src/os/os390/README.os390
new file mode 100644
index 0000000000..547b3f6633
--- /dev/null
+++ b/APACHE_1_3_42/src/os/os390/README.os390
@@ -0,0 +1,86 @@
+README.os390
+==============
+
+This file describes how one extracts the apache source files from a compressed
+archive on one of the apache source code distribution web pages to an OS/390
+system. OS/390 represents characters with the ebcdic code set. The files
+in the apache source trees on the web represent characters using the ascii
+code set. The procedure described here de-compresses the archive file and
+extracts the files from the archive while translating characters in the files
+from ascii to ebcdic. Once you download the compressed archive to an OS/390
+system and follow this procedure, you will be ready to configure, compile, and
+install apache on your OS/390 system.
+
+This procedure assumes that you will download the apache tree using a browser
+on a workstation and then you will transfer the compressed archive from your
+workstation to an OS/390 system. You could probably just ftp the compressed
+archive to your OS/390 system ifyou like. If you download to a workstation as
+described here, it is assumed that the workstation has TCP/IP and FTP installed
+on it. It is also assumed that you have TCP/IP and FTP access from the
+workstation to the OS/390 system you want to put apache on.
+
+Procedure for extracting apache source to an OS/390 system:
+-----------------------------------------------------------
+
+- From either www.apache.org/dist or from dev.apache.org/from-CVS/apache-version
+ select one of the source trees with a file type of .tar.gz or .tar.Z and
+ download it to your workstation. Ensure that the name of the downloaded
+ file remains the same as the name of the file on the web page.
+
+- Also from the same web page download xebcdic.sh.
+
+- From your workstation ftp to the OS/390 system you would like to run apache
+ on.
+ - ftp os390-host-name
+ - You'll be prompted for user id and password.
+ - Once you've logged in successfully you'll get the ftp prompt.
+
+- FTP the .tar.gz file and xebcdic.sh files you downloaded to your workstation
+ to the OS/390 system. The xebcdic.sh file must be ftp'ed in ascii mode. The
+ apache compressed archive file must be ftp'ed in binary mode.
+ - put xebcdic.sh
+ - bin
+ - put apache-compressed-archive-file-name
+
+- End your ftp connection.
+ - bye or quit
+
+- From your OS/390 system use the xebcdic.sh shell script to de-compress and
+ extract the apache source. This script will de-compress the apache source
+ tree and will then extract all the files from the archive. As the files are
+ extracted, they are all translated from ascii to ebcdic. All the gif files
+ are then re-extracted from the archive without applying the ascii to ebcdic
+ translation so that they won't be corrupted.
+
+ The name of the compressed archive file you specify to xebcdic.sh must follow
+ the following format:
+
+ apache-version_timeStamp.tar.gz or
+ apache-version_timeStamp.tar.Z or
+ apache-version.tar.gz or
+ apache-version.tar.Z or
+ apache_version.tar.gz or
+ apache_version.tar.Z
+
+ When you invoke the script, you may specify which file types should be
+ re-extracted without applying the ascii to ebcdic translation. This can be
+ used to save static pages as ascii improving performance when serving those
+ pages by avoiding the ebcdic to ascii translation at the time they are served.
+ Please refer to top-of-source-tree/src/README.ebcdic for information on how
+ to use the AddType and DefaultType directives to serve static pages without
+ trying to translate from ebcdic to ascii.
+
+ - To extract the source tree and have html and txt files re-extracted
+ without translation specify the following:
+
+ ./xebcdic.sh apache-compressed-archive-file-name --f=*.html --f=*.txt
+
+ - To extract the source tree and have the static text content files that
+ are part of the source tree stored on your OS/390 system in ascii specify
+ the following:
+
+ ./xebcdic.sh apache-compressed-archive-file-name --all-ascii-content
+
+- The apache source tree is now ready for you to configure, make and install.
+ Refer to top-of-source-tree/INSTALL for directions on how to proceed.
+
diff --git a/APACHE_1_3_42/src/os/os390/ebcdic.h b/APACHE_1_3_42/src/os/os390/ebcdic.h
new file mode 100644
index 0000000000..c495eba165
--- /dev/null
+++ b/APACHE_1_3_42/src/os/os390/ebcdic.h
@@ -0,0 +1,22 @@
+/* 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.
+ */
+
+#ifndef EBCDIC_H
+#define EBCDIC_H "$Id$"
+
+#include <ap_ebcdic.h>
+
+#endif /*EBCDIC_H*/
diff --git a/APACHE_1_3_42/src/os/os390/os-inline.c b/APACHE_1_3_42/src/os/os390/os-inline.c
new file mode 100644
index 0000000000..efd915d4cf
--- /dev/null
+++ b/APACHE_1_3_42/src/os/os390/os-inline.c
@@ -0,0 +1,47 @@
+/* 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.
+ */
+
+/*
+ * This file contains functions which can be inlined if the compiler
+ * has an "inline" modifier. Because of this, this file is both a
+ * header file and a compilable module.
+ *
+ * Only inlineable functions should be defined in here. They must all
+ * include the INLINE modifier.
+ *
+ * If the compiler supports inline, this file will be #included as a
+ * header file from os.h to create all the inline function
+ * definitions. INLINE will be defined to whatever is required on
+ * function definitions to make them inline declarations.
+ *
+ * If the compiler does not support inline, this file will be compiled
+ * as a normal C file into libos.a (along with os.c). In this case
+ * INLINE will _not_ be set so we can use this to test if we are
+ * compiling this source file.
+ */
+
+#ifndef INLINE
+#define INLINE
+
+/* Anything required only when compiling */
+#include "ap_config.h"
+
+#endif
+
+INLINE int ap_os_is_path_absolute(const char *file)
+{
+ return (file && file[0] == '/' ? 1 : 0);
+}
diff --git a/APACHE_1_3_42/src/os/os390/os.c b/APACHE_1_3_42/src/os/os390/os.c
new file mode 100644
index 0000000000..eb17041ed8
--- /dev/null
+++ b/APACHE_1_3_42/src/os/os390/os.c
@@ -0,0 +1,25 @@
+/* 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.
+ */
+
+/*
+ * This file will include OS specific functions which are not inlineable.
+ * Any inlineable functions should be defined in os-inline.c instead.
+ */
+
+#include "httpd.h"
+#include "http_core.h"
+#include "os.h"
+
diff --git a/APACHE_1_3_42/src/os/os390/os.h b/APACHE_1_3_42/src/os/os390/os.h
new file mode 100644
index 0000000000..40935460b8
--- /dev/null
+++ b/APACHE_1_3_42/src/os/os390/os.h
@@ -0,0 +1,51 @@
+/* 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.
+ */
+
+#ifndef APACHE_OS_H
+#define APACHE_OS_H
+
+#define PLATFORM "OS390"
+
+/*
+ * 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
+ */
+
+#if !defined(INLINE) && defined(USE_GNU_INLINE)
+/* Compiler supports inline, so include the inlineable functions as
+ * part of the header
+ */
+#define INLINE extern ap_inline
+
+INLINE int ap_os_is_path_absolute(const char *file);
+
+#include "os-inline.c"
+#endif
+
+#ifndef INLINE
+/* Compiler does not support inline, so prototype the inlineable functions
+ * as normal
+ */
+extern int ap_os_is_path_absolute(const char *file);
+#endif
+
+/* Other ap_os_ routines not used by this platform */
+
+#define ap_os_is_filename_valid(f) (1)
+#define ap_os_kill(pid, sig) kill(pid, sig)
+
+#endif /*! APACHE_OS_H*/
diff --git a/APACHE_1_3_42/src/os/os390/xebcdic.sh b/APACHE_1_3_42/src/os/os390/xebcdic.sh
new file mode 100755
index 0000000000..d0ae9b41b2
--- /dev/null
+++ b/APACHE_1_3_42/src/os/os390/xebcdic.sh
@@ -0,0 +1,218 @@
+#!/bin/sh
+#
+# 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.
+#
+#
+# xebcdic.sh fileName [--all-ascii-content] [--f=pattern ... ]
+#
+# This shell script decompresses an archive containing an apache source tree
+# and then extracts the source files from the archive. The source files are
+# translated from ASCII to EBCDIC as they are extracted from the archive.
+# Once all the files have been extracted and translated, the binary files are
+# re-extracted to undo the ASCII to EBCDIC translation on those files. Once
+# this script is done, the extracted tree can be used on an EBCDIC based
+# system.
+#
+# Input: fileName -- fileName has one of the following formats:
+# apache-version_timeStamp.tar.gz or
+# apache-version_timeStamp.tar.Z or
+# apache-version.tar.gz or
+# apache-version.tar.Z or
+# apache_version.tar.gz or
+# apache_version.tar.Z
+#
+# --f=pattern -- specifies that all files which match the pattern
+# are to be re-extracted without ascii to ebcdic
+# translation being applied. pattern is a file name
+# specification that may contain path names and
+# the wildcard character. All paths are assumed to
+# be under the apache source tree top. Binary files
+# are always re-extracted without ascii to ebcdic
+# translation regardless of whether any pattern is
+# specified or not. Multiple patterns may be specified
+# by repeating this option.
+#
+#
+# --all-ascii-content -- specifies that all the text content shipped
+# with the apache tree should be stored in
+# ascii on the OS/390 system. This re-extracts
+# all the *.htm* files in the htdocs directory
+# of the apache tree without doing the ascii
+# to ebcdic translation. In addition to the
+# *.htm* files, file htdocs/manual/LICENSE and
+# file htdocs/manual/misc/HTTP_Features.tsv
+# are also stored in ascii. If this option
+# is specified, directives AddType and
+# DefaultType need to be used to correctly
+# serve the pages without trying to first
+# translate from ebcdic to ascii. See
+# apache-tree-top/src/README.EBCDIC.
+#
+# Example Invocations:
+#
+# ./xebcdic.sh apache_1.3.9.tar.gz: Runs gunzip, runs pax and
+# extracts everything translating it to ebcdic, and re-extracts
+# all gif files in the htdocs and icons directories without
+# applying ascii to ebcdic translation.
+#
+# ./xebcdic.sh apache_1.3.9.tar.gz --f=*.htm* --f=htdocs/*.tsv:
+# Runs gunzip, runs pax and extracts everything translating it to
+# ebcdic, re-extracts all gif files without ascii to ebcdic
+# translation, and re-extracts all the *.htm* files in the apache
+# source tree and all *.tsv files in the htdocs directory of the
+# apache source tree without ascii to ebcdic translation.
+#
+# ./xebcdic.sh apache_1.3.9.tar.gz --all-ascii-content: Runs gunzip,
+# runs pax and extracts everything translating it to ebcdic,
+# re-extracts all gif files without ascii to ebcdic translation,
+# and re-extracts all the *.htm* files in the htdocs directory
+# as well as htdocs/manual/LICENSE and
+# htdocs/manual/misc/HTTP_Features.tsv without ascii to ebcdic
+# translation.
+#
+# Output: fileName.tar.gz is replaced with fileName.tar and the apache
+# source tree is extracted into a directory named apache-version or
+# apache_version. All files except binary files and any files
+# specified through the options are translated from ascii to
+# ebcdic.
+#
+# Assumptions: The path to gunzip, uncompress and pax is defined and
+# from where this script is invoked.
+#
+
+echo "Input file name is: $1"
+
+# Verify fileName
+if ! echo $1 | grep -q 'apache_.*\.tar\.gz' && \
+ ! echo $1 | grep -q 'apache_.*\.tar\.Z' && \
+ ! echo $1 | grep -q 'apache-.*_.*\.tar\.gz' && \
+ ! echo $1 | grep -q 'apache-.*_.*\.tar\.Z' && \
+ ! echo $1 | grep -q 'apache-.*\.tar\.gz' && \
+ ! echo $1 | grep -q 'apache-.*\.tar\.Z'
+then
+ echo "Filename, $1, does not follow required format."
+ echo "Filename should have one of the following formats:"
+ echo "apache-version_timeStamp.tar.gz or"
+ echo "apache-version_timeStamp.tar.Z or"
+ echo "apache-version.tar.gz or"
+ echo "apache-version.tar.Z or"
+ echo "apache_version.tar.gz or"
+ echo "apache_version.tar.Z"
+ exit 1;
+fi
+
+if [ ! -f $1 ]; then
+ echo "$1 is not a file"
+ exit 1;
+fi
+
+if [ ! -a $1 ]; then
+ echo "$1 file does not exist"
+ exit 1;
+fi
+
+# Verify fileType option if specified
+for option in $@
+do
+ case "$option" in
+ $1) ;;
+ --all-ascii-content) ;;
+ --f=*) ;;
+ *) echo "Invalid option specified. Command syntax is:"
+ echo "xebcdic.sh compressed-archive-file-name [--all-ascii-content]"
+ echo " [--f=pattern ... ]"
+ exit 1;
+ ;;
+ esac
+done
+
+# Figure out whether to gunzip or uncompress
+if echo $1 | grep -q 'apache[-_].*\.tar\.gz'; then
+ DECOMPRESS="gunzip"
+else
+ DECOMPRESS="uncompress"
+fi
+echo "Decompression utility $DECOMPRESS will be used."
+
+# Set name of tar file after decompressing
+if [ "x$DECOMPRESS" = "xgunzip" ]; then
+ TARFILE=`echo $1 | sed s/\.tar\.gz/\.tar/`
+else
+ TARFILE=`echo $1 | sed s/\.tar\.Z/\.tar/`
+fi
+echo "Archive file name is: $TARFILE"
+
+# Set name of apache source tree directory
+if echo $1 | grep -q 'apache-.*_.*\.tar*'; then
+ APDIR=`echo $1 | sed s/_.*//`
+else
+ APDIR=`echo $1 | sed s/\.tar.*//`
+fi
+echo "Apache source tree top is: $APDIR"
+
+# Decompress input file
+echo "Starting decompression of $1"
+if [ "x$DECOMPRESS" = "xgunzip" ]; then
+ if gunzip $1; then
+ echo "Decompression of $1 completed successfully"
+ else
+ exit 1;
+ fi
+else
+ if uncompress $1; then
+ echo "Decompression of $1 completed successfully"
+ else
+ exit 1;
+ fi
+fi
+
+# Extract source files and translate them all from ASCII to EBCDIC
+
+# Determine code page for locale
+
+echo "Starting extraction of source files from archive $TARFILE."
+echo "ASCII being translated to EBCDIC."
+echo "ASCII code page assumed to be ISO8859-1."
+echo "EBCDIC code page assumed to be IBM-1047."
+pax -ofrom=ISO8859-1,to=IBM-1047 -rvf $TARFILE
+echo "Extraction and translation of source files from archive completed."
+
+# Re-extract gif files without ASCII to EBCDIC translation
+echo "Re-extracting gif files without ASCII to EBCDIC translation"
+pax -rvf $TARFILE $(find $APDIR/htdocs -type f -name "*.gif*")
+pax -rvf $TARFILE $(find $APDIR/icons -type f -name "*.gif*")
+
+# Re-extract appropriate files as requested by user
+for option in $@; do
+ case "$option" in
+ $1)
+ ;;
+ --all-ascii-content) echo "Re-extracting files in $APDIR/htdocs without ASCII to EBCDIC translation"
+ pax -rvf $TARFILE $(find $APDIR/htdocs -type f -name "*.htm*")
+ pax -rvf $TARFILE $(find $APDIR/htdocs -type f -name "*.tsv*")
+ pax -rvf $TARFILE $(find $APDIR/htdocs -name "manual/LICENSE")
+ ;;
+ --f=*) PATTERN=`echo $option | sed s/--f=//`
+ if [ "x$PATTERN" != "x" ]; then
+ echo "Re-extracting files matching $PATTERN without ASCII to EBCDIC translation"
+ pax -rvf $TARFILE $(find $APDIR -type f -name "$PATTERN")
+ fi
+ ;;
+ *)
+ ;;
+ esac
+done
+
diff --git a/APACHE_1_3_42/src/os/tpf/Makefile.tmpl b/APACHE_1_3_42/src/os/tpf/Makefile.tmpl
new file mode 100644
index 0000000000..719f603bda
--- /dev/null
+++ b/APACHE_1_3_42/src/os/tpf/Makefile.tmpl
@@ -0,0 +1,41 @@
+CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS)
+LIBS=$(EXTRA_LIBS) $(LIBS1)
+INCLUDES=$(INCLUDES1) $(INCLUDES0) $(EXTRA_INCLUDES)
+LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS)
+
+OBJS= os.o os-inline.o cgetop.o
+
+LIB= libos.a
+
+all: $(LIB)
+
+$(LIB): $(OBJS)
+ rm -f $@
+ ar cr $@ $(OBJS)
+ $(RANLIB) $@
+
+.c.o:
+ $(CC) -c $(INCLUDES) $(CFLAGS) $(SPACER) $<
+
+clean:
+ rm -f $(OBJS) $(LIB)
+
+distclean: clean
+ -rm -f Makefile
+
+# We really don't expect end users to use this rule. It works only with
+# gcc, and rebuilds Makefile.tmpl. You have to re-run Configure after
+# using it.
+depend:
+ cp Makefile.tmpl Makefile.tmpl.bak \
+ && sed -ne '1,/^# DO NOT REMOVE/p' Makefile.tmpl > Makefile.new \
+ && gcc -MM $(INCLUDES) $(CFLAGS) *.c >> Makefile.new \
+ && sed -e '1,$$s: $(INCDIR)/: $$(INCDIR)/:g' Makefile.new \
+ > Makefile.tmpl \
+ && rm Makefile.new
+
+$(OBJS): Makefile
+os.o: os.c os-inline.c $(INCDIR)/ap_config.h
+cgetop.o: cgetop.c
+# DO NOT REMOVE
+os.o: os.c
diff --git a/APACHE_1_3_42/src/os/tpf/TPFExport b/APACHE_1_3_42/src/os/tpf/TPFExport
new file mode 100644
index 0000000000..8453d02ee3
--- /dev/null
+++ b/APACHE_1_3_42/src/os/tpf/TPFExport
@@ -0,0 +1,10 @@
+#!/bin/sh
+echo " Setting TPF41/c89 environment variables"
+export _C89_CCMODE=1
+# replace the following with the location of your TPF41 include files
+export _C89_INCDIRS="/u/tpf41/rlse/include"
+export TPF=YES
+export _C89_INCLIBS=""
+export _C89_CSYSLIB=""
+export _C89_OPTIONS="-W 0,langlvl(extended)"
+echo "Done"
diff --git a/APACHE_1_3_42/src/os/tpf/cgetop.c b/APACHE_1_3_42/src/os/tpf/cgetop.c
new file mode 100644
index 0000000000..03356603d4
--- /dev/null
+++ b/APACHE_1_3_42/src/os/tpf/cgetop.c
@@ -0,0 +1,153 @@
+/**********************************************************************/
+/* */
+/* Copyright (c) 1987, 1993, 1994 */
+/* The Regents of the University of California. All rights reserved. */
+/* */
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+/* */
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above */
+/* copyright notice, this list of conditions and the following */
+/* disclaimer in the documentation and/or other materials provided */
+/* with the distribution. */
+/* 3. All advertising materials mentioning features or use of this */
+/* software must display the following acknowledgement: */
+/* This product includes software developed by the University of */
+/* California, Berkeley and its contributors. */
+/* 4. Neither the name of the University nor the names of its */
+/* contributors may be used to endorse or promote products derived */
+/* from this software without specific prior written permission. */
+/* */
+/* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS''*/
+/* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */
+/* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A */
+/* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS */
+/* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
+/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
+/* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF */
+/* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND*/
+/* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, */
+/* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT */
+/* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF */
+/* SUCH DAMAGE. */
+/* */
+/**********************************************************************/
+
+/* used only on TPF41 systems */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)getopt.c 8.2 (Berkeley) 4/2/94";
+#endif /* LIBC_SCCS and not lint */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef __CGETOP_
+extern char *optarg;
+extern int opterr, optind, optopt;
+int getopt (int, char * const *, const char *);
+char *group_from_gid (unsigned long, int);
+char *user_from_uid (unsigned long, int);
+extern int optreset;
+#endif
+
+int opterr = 1, /* if error message should be */
+ /* printed */
+ optind = 1, /* index into parent argv vector */
+ optopt, /* character checked for validity */
+ optreset; /* reset getopt */
+char *optarg; /* argument associated with */
+ /* option */
+
+#define BADCH (int)'?'
+#define BADARG (int)':'
+#define EMSG ""
+
+/**********************************************************************/
+/* */
+/* getopt -- */
+/* Parse argc/argv argument vector. */
+/* */
+/**********************************************************************/
+int
+getopt(nargc, nargv, ostr)
+ int nargc;
+ char * const *nargv;
+ const char *ostr;
+{
+ /* removed -- BSD2TPF -- crt0 does not create __progname on TPF */
+ /* extern char *__progname; */
+ /* end of removed -- BSD2TPF */
+
+ static char *place = EMSG; /* option letter processing */
+ char *oli; /* option letter list index */
+
+ /* added -- BSD2TPF -- emulate BSD crt0 function to set __progname */
+ char empty = '\0';
+ char *__progname = &empty;
+ if (nargv[0]) {
+ if ((__progname = strrchr(nargv[0], '/')) == NULL) {
+ __progname = nargv[0];
+ }
+ else {
+ ++__progname;
+ }
+ }
+ /* end of added -- BSD2TPF */
+
+ if (optreset || !*place) { /* update scanning pointer */
+ optreset = 0;
+ if (optind >= nargc || *(place = nargv[optind]) != '-') {
+ place = EMSG;
+ return (EOF);
+ }
+ if (place[1] && *++place == '-') {
+ /* found "--" */
+ ++optind;
+ place = EMSG;
+ return (EOF);
+ }
+ } /* option letter okay? */
+ if ((optopt = (int)*place++) == (int)':' ||
+ !(oli = strchr(ostr, optopt))) {
+ /* if the user didn't */
+ /* specify '-' as an option, */
+ /* assume it means EOF. */
+ if (optopt == (int)'-')
+ return (EOF);
+ if (!*place)
+ ++optind;
+ if (opterr && *ostr != ':')
+ (void)fprintf(stderr,
+ "%s: illegal option -- %c\n", __progname, optopt);
+ return (BADCH);
+ }
+ if (*++oli != ':') { /* don't need argument */
+ optarg = NULL;
+ if (!*place)
+ ++optind;
+ }
+ else { /* need an argument */
+ if (*place) /* no white space */
+ optarg = place;
+ else if (nargc <= ++optind) { /* no arg */
+ place = EMSG;
+ if (*ostr == ':')
+ return (BADARG);
+ if (opterr)
+ (void)fprintf(stderr,
+ "%s: option requires an argument -- %c\n",
+ __progname, optopt);
+ return (BADCH);
+ }
+ else /* white space */
+ optarg = nargv[optind];
+ place = EMSG;
+ ++optind;
+ }
+ return (optopt); /* dump back option letter */
+}
diff --git a/APACHE_1_3_42/src/os/tpf/ebcdic.h b/APACHE_1_3_42/src/os/tpf/ebcdic.h
new file mode 100644
index 0000000000..c495eba165
--- /dev/null
+++ b/APACHE_1_3_42/src/os/tpf/ebcdic.h
@@ -0,0 +1,22 @@
+/* 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.
+ */
+
+#ifndef EBCDIC_H
+#define EBCDIC_H "$Id$"
+
+#include <ap_ebcdic.h>
+
+#endif /*EBCDIC_H*/
diff --git a/APACHE_1_3_42/src/os/tpf/os-inline.c b/APACHE_1_3_42/src/os/tpf/os-inline.c
new file mode 100644
index 0000000000..efd915d4cf
--- /dev/null
+++ b/APACHE_1_3_42/src/os/tpf/os-inline.c
@@ -0,0 +1,47 @@
+/* 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.
+ */
+
+/*
+ * This file contains functions which can be inlined if the compiler
+ * has an "inline" modifier. Because of this, this file is both a
+ * header file and a compilable module.
+ *
+ * Only inlineable functions should be defined in here. They must all
+ * include the INLINE modifier.
+ *
+ * If the compiler supports inline, this file will be #included as a
+ * header file from os.h to create all the inline function
+ * definitions. INLINE will be defined to whatever is required on
+ * function definitions to make them inline declarations.
+ *
+ * If the compiler does not support inline, this file will be compiled
+ * as a normal C file into libos.a (along with os.c). In this case
+ * INLINE will _not_ be set so we can use this to test if we are
+ * compiling this source file.
+ */
+
+#ifndef INLINE
+#define INLINE
+
+/* Anything required only when compiling */
+#include "ap_config.h"
+
+#endif
+
+INLINE int ap_os_is_path_absolute(const char *file)
+{
+ return (file && file[0] == '/' ? 1 : 0);
+}
diff --git a/APACHE_1_3_42/src/os/tpf/os.c b/APACHE_1_3_42/src/os/tpf/os.c
new file mode 100644
index 0000000000..015b95f4f0
--- /dev/null
+++ b/APACHE_1_3_42/src/os/tpf/os.c
@@ -0,0 +1,860 @@
+/* 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.
+ */
+
+/*
+ * This file will include OS specific functions which are not inlineable.
+ * Any inlineable functions should be defined in os-inline.c instead.
+ */
+
+#include "httpd.h"
+#include "http_core.h"
+#include "os.h"
+#include "scoreboard.h"
+#include "http_log.h"
+#include "http_conf_globals.h"
+#ifdef TPF41
+#ifdef __PIPE_
+#include <ipc.h>
+#include <shm.h>
+static TPF_FD_LIST *tpf_fds = NULL;
+#endif /* __PIPE_ */
+#else
+#include <sys/ipc.h>
+#include <sys/shm.h>
+static TPF_FD_LIST *tpf_fds = NULL;
+#endif /* TPF41 */
+
+void *tpf_shm_static_ptr = NULL;
+unsigned short zinet_model;
+char *argv_ptr = NULL;
+
+static FILE *sock_fp;
+static int sock_sd;
+
+int tpf_select(int maxfds, fd_set *reads, fd_set *writes, fd_set *excepts,
+ struct timeval *tv)
+{
+/* We're going to force our way through select. We're only interested reads
+ and TPF allows 2billion+ socket descriptors for we don't want an fd_set
+ that big. Just assume that maxfds-1 contains the socket descriptor we're
+ interested in. If it's 0, leave it alone. */
+
+ int sockets[1];
+ int no_reads = 0;
+ int no_writes = 0;
+ int no_excepts = 0;
+ int timeout_seconds = 0;
+ int timeout_millisec = 0;
+ int rv = 0;
+
+ if(maxfds) {
+ if(tv)
+ timeout_millisec = tv->tv_sec * 1000 + tv->tv_usec;
+ sockets[0] = maxfds-1;
+ no_reads++;
+ }
+ else
+ sockets[0] = 0;
+
+ ap_check_signals();
+ if ((no_reads + no_writes + no_excepts == 0) &&
+ (tv) && (tv->tv_sec + tv->tv_usec != 0)) {
+ /* TPF's select immediately returns if the sum of
+ no_reads, no_writes, and no_excepts is zero.
+ The following code makes TPF's select work a little closer
+ to everyone else's select:
+ */
+#ifdef TPF_HAVE_SAWNC
+ struct ev0bk evnblock;
+#endif
+ /* event processing uses seconds, select uses milliseconds */
+ timeout_seconds = tv->tv_sec;
+ if (tv->tv_usec) {
+ timeout_seconds++; /* round up to seconds (like TPF's select does) */
+ }
+ if (timeout_seconds > 0) { /* paranoid check for valid timeout */
+#ifdef TPF_HAVE_SAWNC
+ evnblock.evnpstinf.evnbkc1 = 1; /* nbr of posts needed */
+ evntc(&evnblock, EVENT_CNT, 'N', timeout_seconds, EVNTC_1052);
+ tpf_sawnc(&evnblock, EVENT_CNT);
+#else
+ sleep(timeout_seconds);
+#endif
+ }
+ } else {
+ if (timeout_millisec < 0) { /* paranoid check for valid timeout */
+ timeout_millisec = 0;
+ }
+ if (timeout_millisec != 0)
+ timeout_millisec += 1000;
+
+ rv = select(sockets, no_reads, no_writes, no_excepts, timeout_millisec);
+ }
+ ap_check_signals();
+
+ return rv;
+
+}
+
+int tpf_accept(int sockfd, struct sockaddr *peer, int *paddrlen)
+{
+ extern pid_t tpf_parent_pid;
+ int socks[1];
+ int rv;
+
+ socks[0] = sockfd;
+ rv = select(socks, 1, 0, 0, 1 * 1000);
+ ap_check_signals();
+ if ((rv == 0) && (errno == 0)) {
+ /* select timed out */
+ errno = EINTR; /* make errno look like accept was interruped */
+ /* now's a good time to make sure our parent didn't abnormally exit */
+ if (getppid() == 1) {
+ /* our parent is gone... close the socket so Apache can restart
+ (it shouldn't still be open but we're taking no chances) */
+ closesocket(sockfd);
+ ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_NOERRNO, NULL,
+ "child %d closing the socket because getppid()"
+ " returned 1 instead of parent pid %d",
+ getpid(), tpf_parent_pid);
+ errno = 0;
+ }
+ return -1;
+ }
+ /* paranoid check for rv == 0 and errno != 0, should never happen */
+ if (rv == 0) {
+ rv = -1;
+ }
+
+ if(rv>0) {
+ rv = accept(sockfd, peer, paddrlen);
+ errno = sock_errno();
+ }
+ return rv;
+}
+
+/* the getpass function is not usable on TPF */
+char *getpass(const char* prompt)
+{
+ errno = EIO;
+ return((char *)NULL);
+}
+
+/* fork and exec functions are not defined on
+ TPF due to the implementation of tpf_fork() */
+
+pid_t fork(void)
+{
+ errno = ENOSYS;
+ return(-1);
+}
+
+int execl(const char *path, const char *arg0, ...)
+{
+ errno = ENOSYS;
+ return(-1);
+}
+
+int execle(const char *path, const char *arg0, ...)
+{
+ errno = ENOSYS;
+ return(-1);
+}
+
+int execve(const char *path, char *const argv[], char *const envp[])
+{
+ errno = ENOSYS;
+ return(-1);
+}
+
+int execvp(const char *file, char *const argv[])
+{
+ errno = ENOSYS;
+ return(-1);
+}
+
+
+
+int ap_tpf_spawn_child(pool *p, int (*func) (void *, child_info *),
+ void *data, enum kill_conditions kill_how,
+ int *pipe_in, int *pipe_out, int *pipe_err,
+ int out_fds[], int in_fds[], int err_fds[])
+
+{
+ int i, temp_out=0, temp_in=0, temp_err=0, save_errno, pid, result=0;
+ int fd_flags_out=0, fd_flags_in=0, fd_flags_err=0;
+ struct tpf_fork_input fork_input;
+ TPF_FORK_CHILD *cld = (TPF_FORK_CHILD *) data;
+#ifdef TPF_FORK_EXTENDED
+#define WHITE " \t\n"
+#define MAXARGC 49
+ char *arguments;
+ char *args[MAXARGC + 1];
+ char **envp = NULL;
+ pool *subpool = NULL;
+
+#include "util_script.h"
+#else
+ array_header *env_arr = ap_table_elts ((array_header *) cld->subprocess_env);
+ table_entry *elts = (table_entry *) env_arr->elts;
+#endif /* TPF_FORK_EXTENDED */
+
+ if (func) {
+ if ((result=func(data, NULL))) {
+ return 0; /* error from child function */
+ }
+ }
+
+ if (pipe_out) {
+ fd_flags_out = fcntl(out_fds[0], F_GETFD);
+ fcntl(out_fds[0], F_SETFD, FD_CLOEXEC);
+ temp_out = dup(STDOUT_FILENO);
+ fcntl(temp_out, F_SETFD, FD_CLOEXEC);
+ dup2(out_fds[1], STDOUT_FILENO);
+ }
+
+ if (pipe_in) {
+ fd_flags_in = fcntl(in_fds[1], F_GETFD);
+ fcntl(in_fds[1], F_SETFD, FD_CLOEXEC);
+ temp_in = dup(STDIN_FILENO);
+ fcntl(temp_in, F_SETFD, FD_CLOEXEC);
+ dup2(in_fds[0], STDIN_FILENO);
+ }
+
+ if (pipe_err) {
+ fd_flags_err = fcntl(err_fds[0], F_GETFD);
+ fcntl(err_fds[0], F_SETFD, FD_CLOEXEC);
+ temp_err = dup(STDERR_FILENO);
+ fcntl(temp_err, F_SETFD, FD_CLOEXEC);
+ dup2(err_fds[1], STDERR_FILENO);
+ }
+
+/* set up environment variables for the tpf_fork */
+ if (cld->subprocess_env) {
+#ifdef TPF_FORK_EXTENDED
+ /* with extended tpf_fork( ) we pass the pointer to a list of pointers */
+ /* that point to "key=value" strings for each env variable */
+ subpool = ap_make_sub_pool(p);
+ envp = ap_create_environment(subpool, cld->subprocess_env);
+#else
+ /* without extended tpf_fork( ) we setenv( ) each env variable */
+ /* so the child inherits them */
+ for (i = 0; i < env_arr->nelts; ++i) {
+ if (!elts[i].key)
+ continue;
+ setenv (elts[i].key, elts[i].val, 1);
+ }
+#endif /* TPF_FORK_EXTENDED */
+ }
+
+ fork_input.program = (const char*) cld->filename;
+ fork_input.prog_type = cld->prog_type;
+ fork_input.istream = TPF_FORK_IS_BALANCE;
+ fork_input.ebw_data_length = 0;
+ fork_input.ebw_data = NULL;
+ fork_input.parm_data = NULL;
+
+#ifdef TPF_FORK_EXTENDED
+ /* use a copy of cld->filename because strtok is destructive */
+ arguments = ap_pstrdup(p, cld->filename);
+ args[0] = strtok(arguments, WHITE);
+
+ for (i = 0; i < MAXARGC && args[i] ; i++) {
+ args[i + 1] = strtok(NULL, WHITE);
+ }
+ args[MAXARGC] = NULL;
+
+ if ((pid = tpf_fork(&fork_input,
+ (const char **)args,
+ (const char **)envp)) < 0) {
+#else
+ if ((pid = tpf_fork(&fork_input)) < 0) {
+#endif /* TPF_FORK_EXTENDED */
+ save_errno = errno;
+ if (pipe_out) {
+ close(out_fds[0]);
+ }
+ if (pipe_in) {
+ close(in_fds[1]);
+ }
+ if (pipe_err) {
+ close(err_fds[0]);
+ }
+ errno = save_errno;
+ pid = 0;
+ }
+
+#ifdef TPF_FORK_EXTENDED
+ if (subpool) {
+ ap_destroy_pool(subpool);
+ }
+#else
+ if (cld->subprocess_env) {
+ for (i = 0; i < env_arr->nelts; ++i) {
+ if (!elts[i].key)
+ continue;
+ unsetenv (elts[i].key);
+ }
+ }
+#endif /* TPF_FORK_EXTENDED */
+
+ if (pipe_out) {
+ close(out_fds[1]);
+ dup2(temp_out, STDOUT_FILENO);
+ close(temp_out);
+ fcntl(out_fds[0], F_SETFD, fd_flags_out);
+ }
+
+ if (pipe_in) {
+ close(in_fds[0]);
+ dup2(temp_in, STDIN_FILENO);
+ close(temp_in);
+ fcntl(in_fds[1], F_SETFD, fd_flags_in);
+ }
+
+
+ if (pipe_err) {
+ close(err_fds[1]);
+ dup2(temp_err, STDERR_FILENO);
+ close(temp_err);
+ fcntl(err_fds[0], F_SETFD, fd_flags_err);
+ }
+
+
+ if (pid) {
+
+ ap_note_subprocess(p, pid, kill_how);
+
+ if (pipe_out) {
+ *pipe_out = out_fds[0];
+ }
+ if (pipe_in) {
+ *pipe_in = in_fds[1];
+ }
+ if (pipe_err) {
+ *pipe_err = err_fds[0];
+ }
+ }
+
+ return pid;
+
+}
+
+pid_t os_fork(server_rec *s, int slot)
+{
+ struct tpf_fork_input fork_input;
+ APACHE_TPF_INPUT input_parms;
+ int count;
+ listen_rec *lr;
+
+ input_parms.generation = ap_my_generation;
+#ifdef USE_SHMGET_SCOREBOARD
+ input_parms.scoreboard_heap = ap_scoreboard_image;
+#endif
+
+ lr = ap_listeners;
+ count = 0;
+ do {
+ input_parms.listeners[count] = lr->fd;
+ lr = lr->next;
+ count++;
+ } while(lr != ap_listeners);
+
+ input_parms.slot = slot;
+ input_parms.restart_time = ap_restart_time;
+ input_parms.shm_static_ptr = tpf_shm_static_ptr;
+ input_parms.tpf_fds = tpf_fds;
+ fork_input.ebw_data = &input_parms;
+ fork_input.program = ap_server_argv0;
+ fork_input.prog_type = TPF_FORK_NAME;
+ fork_input.istream = TPF_FORK_IS_BALANCE;
+ fork_input.ebw_data_length = sizeof(input_parms);
+ fork_input.parm_data = argv_ptr;
+#ifdef TPF_FORK_EXTENDED
+ return tpf_fork(&fork_input, NULL, NULL);
+#else
+ return tpf_fork(&fork_input);
+#endif /* TPF_FORK_EXTENDED */
+}
+
+void ap_tpf_zinet_checks(int standalone,
+ const char *servername,
+ server_rec *s) {
+
+ INETD_IDCT_ENTRY_PTR idct;
+
+ /* explicitly disallow "ServerType inetd" on TPF */
+ if (!standalone) {
+ ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_NOERRNO, s,
+ TPF_SERVERTYPE_MSG);
+ exit(1); /* abort start-up of server */
+ }
+
+ /* figure out zinet model for our server from the idct slot */
+ idct = inetd_getServer(servername);
+ if (idct) {
+ zinet_model = idct->model;
+ free(idct);
+ } else {
+ ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_NOERRNO, s,
+ TPF_UNABLE_TO_DETERMINE_ZINET_MODEL, servername);
+ exit(1); /* abort start-up of server */
+ }
+
+ /* check for valid zinet models */
+ if (zinet_model != INETD_IDCF_MODEL_DAEMON &&
+ zinet_model != INETD_IDCF_MODEL_NOLISTEN) {
+ ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_NOERRNO, s,
+ TPF_STANDALONE_CONFLICT_MSG);
+ exit(1); /* abort start-up of server */
+ }
+
+#ifdef TPF_NOLISTEN_WARNING
+/* nag about switching to DAEMON model */
+ if (zinet_model == INETD_IDCF_MODEL_NOLISTEN) {
+ ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, s,
+ TPF_NOLISTEN_WARNING);
+ }
+#endif
+
+}
+
+int os_check_server(char *server) {
+ int *current_acn;
+
+ ap_check_signals();
+
+ /* check our InetD status */
+ if (inetd_getServerStatus(server) != INETD_SERVER_STATUS_ACTIVE) {
+ return 1; /* shutdown */
+ }
+
+ /* if DAEMON model, make sure CLTZ parent is still around */
+ if (zinet_model == INETD_IDCF_MODEL_DAEMON) {
+ if (getppid() == 1) {
+ return 1; /* shutdown */
+ }
+ } else {
+ /* this is the NOLISTEN model (INETD_IDCF_MODEL_NOLISTEN) */
+ /* check that the program activation number hasn't changed */
+ current_acn = (int *)cinfc_fast(CINFC_CMMACNUM);
+ if (ecbp2()->ce2acn != *current_acn) {
+ return 1; /* shutdown */
+ }
+ }
+
+ return 0; /* keep on running... */
+}
+
+void os_note_additional_cleanups(pool *p, int sd) {
+ char sockfilename[50];
+ /* write the socket to file so that TPF socket device driver
+ will close socket in case we happen to abend. */
+ sprintf(sockfilename, "/dev/tpf.socket.file/%.8X", sd);
+ sock_fp = fopen(sockfilename, "r+");
+ /* we don't want the children to inherit this fd */
+ fcntl(fileno(sock_fp), F_SETFD, FD_CLOEXEC);
+ sock_sd = sd;
+}
+
+void ap_tpf_save_argv(int argc, char **argv) {
+
+ int i, len = 3; /* 3 for "-x " */
+
+ for (i = 1; i < argc; i++) { /* find len for calloc */
+ len += strlen (argv[i]);
+ ++len; /* 1 for blank */
+ }
+
+ argv_ptr = malloc(len + 1);
+ strcpy(argv_ptr, "-x");
+ for (i = 1; i < argc; i++) {
+ strcat(argv_ptr, " ");
+ strcat(argv_ptr, argv[i]);
+ }
+}
+
+void os_tpf_child(APACHE_TPF_INPUT *input_parms) {
+ extern pid_t tpf_parent_pid;
+ extern char tpf_mutex_key[TPF_MUTEX_KEY_SIZE];
+
+ tpf_child = 1;
+ ap_my_generation = input_parms->generation;
+ ap_restart_time = input_parms->restart_time;
+ tpf_fds = input_parms->tpf_fds;
+ tpf_shm_static_ptr = input_parms->shm_static_ptr;
+ tpf_parent_pid = getppid();
+ sprintf(tpf_mutex_key, "%.*x", (int) TPF_MUTEX_KEY_SIZE - 1, tpf_parent_pid);
+}
+
+#if defined(TPF41) && !defined(__PIPE_)
+
+int pipe(int fildes[2])
+{
+ errno = ENOSYS;
+ return(-1);
+}
+
+API_EXPORT(piped_log *) ap_open_piped_log(pool *p, const char *program)
+
+{
+ fprintf(stderr, "Pipes not supported on this TPF system\n");
+ exit (1);
+}
+
+#else
+
+void ap_tpf_detach_shared_mem(void *address)
+{
+ if (*((void **)address)) {
+ shmdt(*((void **)address));
+ *((void **)address) = NULL;
+ }
+}
+
+static void *ap_tpf_get_shared_mem(size_t size)
+{
+ key_t shmkey = IPC_PRIVATE;
+ int shmid = -1;
+ static void *result;
+
+ if ((shmid = shmget(shmkey, size, IPC_CREAT | SHM_R | SHM_W)) == -1) {
+ perror("shmget failed in ap_tpf_get_shared_mem function");
+ exit(1);
+ }
+#define BADSHMAT ((void *)(-1))
+ if ((result = shmat(shmid, 0, 0)) == BADSHMAT) {
+ perror("shmat failed in ap_tpf_get_shared_mem");
+ }
+ if (shmctl(shmid, IPC_RMID, NULL) != 0) {
+ perror("shmctl(IPC_RMID) failed in ap_tpf_get_shared_mem");
+ }
+ if (result == BADSHMAT) { /* now bailout */
+ exit(1);
+ }
+
+ return result;
+}
+
+int ap_tpf_fd_lookup(enum FILE_TYPE file_type, const char *fname)
+/* lookup a fd in the fd inheritance table */
+{
+ if (tpf_fds) {
+ int i;
+ TPF_FD_ITEM *fd_item = &tpf_fds->first_item;
+
+ for (i = 1; i <= tpf_fds->nbr_of_items; i++, fd_item++) {
+ /* check for an fd with the same type and name */
+ if ((file_type == fd_item->file_type) &&
+ (strcmp(fname, fd_item->fname) == 0) ) {
+ /* we've got a match, check that fd is still open */
+ struct stat stbuf;
+
+ if (fstat(fd_item->fd, &stbuf) == 0) {
+ return(fd_item->fd);
+ }
+ else {
+ /* fd is not open - the entire fd table is suspect */
+ fprintf(stderr, "fstat failed in ap_tpf_fd_lookup "
+ "for fd %i (filename/pipe to %s): %s\n",
+ fd_item->fd, fname, strerror(errno));
+ ap_tpf_detach_shared_mem(&tpf_fds);
+ return(-1);
+ }
+ }
+ }
+ }
+ return(-1);
+}
+
+void ap_tpf_add_fd(pool *p, int fd, enum FILE_TYPE file_type, const char *fname)
+/* add a newly opened fd to the fd inheritance table */
+{
+ int fname_size;
+
+ if (tpf_child) {
+ return; /* no kids allowed */
+ }
+ if (tpf_fds == NULL) {
+ /* get shared memory if necessary */
+ tpf_fds = ap_tpf_get_shared_mem((size_t)TPF_FD_LIST_SIZE);
+ if (tpf_fds) {
+ ap_register_cleanup(p, (void *)&tpf_fds,
+ ap_tpf_detach_shared_mem, ap_null_cleanup);
+ tpf_fds->nbr_of_items = 0;
+ tpf_fds->next_avail_byte = &tpf_fds->first_item;
+ tpf_fds->last_avail_byte = (char *)tpf_fds + TPF_FD_LIST_SIZE;
+ }
+ }
+ /* add fd */
+ if (tpf_fds) {
+ TPF_FD_ITEM *fd_item;
+
+ /* make sure there's room */
+ fname_size = strlen(fname) + 1;
+ if (sizeof(TPF_FD_ITEM) + fname_size >
+ (char *)tpf_fds->last_avail_byte -
+ (char *)tpf_fds->next_avail_byte) {
+ fprintf(stderr, "fd inheritance table out of room, increase "
+ "TPF_FD_LIST_SIZE in os.h and recompile Apache\n");
+ exit(1);
+ }
+ /* add the new item */
+ fd_item = tpf_fds->next_avail_byte;
+ tpf_fds->next_avail_byte = fd_item + 1;
+ tpf_fds->last_avail_byte
+ = (char *)tpf_fds->last_avail_byte - fname_size;
+ fd_item->fname = tpf_fds->last_avail_byte;
+ strcpy(fd_item->fname, fname);
+ fd_item->fd = fd;
+ fd_item->file_type = file_type;
+ tpf_fds->nbr_of_items++;
+ }
+}
+
+API_EXPORT(piped_log *) ap_open_piped_log(pool *p, const char *program)
+{
+ int log_fd;
+ piped_log *pl;
+
+ /* check fd inheritance table to see if this log is already open */
+ log_fd = ap_tpf_fd_lookup(PIPE_OUT, program);
+ if (log_fd < 0) {
+ /* this is a new log - open it */
+ FILE *dummy;
+ TPF_FORK_CHILD cld;
+ cld.filename = (char *)program;
+ cld.subprocess_env = NULL;
+ cld.prog_type = FORK_NAME;
+
+ if (ap_spawn_child(p, NULL, &cld, kill_after_timeout,
+ &dummy, NULL, NULL)) {
+ log_fd = fileno(dummy);
+ /* add this log to the fd inheritance table */
+ ap_tpf_add_fd(p, log_fd, PIPE_OUT, program);
+ }
+ else {
+ perror("ap_spawn_child");
+ fprintf(stderr, "Couldn't fork child for piped log process\n");
+ exit (1);
+ }
+ }
+
+ pl = ap_palloc(p, sizeof (*pl));
+ pl->p = p;
+ pl->fds[1] = log_fd;
+
+ return pl;
+}
+
+#endif /* TPF41 && ndef __PIPE_ */
+
+/* The following functions are used for the tpf specific module called
+ mod_tpf_shm_static. This module is a clone of Apache's mod_mmap_static.
+ Because TPF doesn't support the system call mmap(), it is replaced by
+ shared memory, but uses the mmap directives, etc. */
+
+union align{
+
+ /* Types which are likely to have the longest RELEVANT alignment
+ * restrictions... */
+
+ char *cp;
+ void (*f) (void);
+ long l;
+ FILE *fp;
+ double d;
+};
+
+#define CLICK_SZ (sizeof(union align))
+union block_hdr {
+ union align a;
+
+ /* Actual header... */
+
+ struct {
+ char *endp;
+ union block_hdr *next;
+ char *first_avail;
+ #ifdef POOL_DEBUG
+ union block_hdr *global_next;
+ struct pool *owning_pool;
+ #endif
+ } h;
+};
+
+struct pool {
+ union block_hdr *first;
+ union block_hdr *last;
+ struct cleanup *cleanups;
+ struct process_chain *subprocesses;
+ struct pool *sub_pools;
+ struct pool *sub_next;
+ struct pool *sub_prev;
+ struct pool *parent;
+ char *free_first_avail;
+#ifdef ALLOC_USE_MALLOC
+ void *allocation_list;
+#endif
+#ifdef POOL_DEBUG
+ struct pool *joined;
+#endif
+};
+
+#include "ap_alloc.h"
+#define POOL_HDR_CLICKS (1 + ((sizeof(struct pool) - 1) / CLICK_SZ))
+#define POOL_HDR_BYTES (POOL_HDR_CLICKS * CLICK_SZ)
+
+pool * ap_get_shared_mem_pool(size_t size)
+{
+ pool *new_pool;
+ union block_hdr *blok;
+
+ blok = (union block_hdr *) ap_tpf_get_shared_mem(size);
+ /* if shm fails, it will exit blok will be valid here */
+ memset((char *) blok, '\0', size);
+ blok->h.next = NULL;
+ blok->h.first_avail = (char *) (blok + 1);
+ blok->h.endp = size + blok->h.first_avail;
+ new_pool = (pool *) blok->h.first_avail;
+ blok->h.first_avail += POOL_HDR_BYTES;
+ new_pool->free_first_avail = blok->h.first_avail;
+ new_pool->first = new_pool->last = blok;
+
+ return new_pool;
+}
+
+int ap_check_shm_space(struct pool *a, int size)
+{
+ union block_hdr *blok = a->last;
+ char *first_avail = blok->h.first_avail;
+ char *new_first_avail;
+
+ new_first_avail = first_avail + size;
+ if (new_first_avail <= blok->h.endp) {
+ return (1);
+ }
+ else
+ return (0);
+}
+
+/*
+ This function serves as an interim killpg for Apache shutdown purposes.
+ TPF won't have an actual killpg for a very long time, if ever.
+ (And kill with a negative pid doesn't work on TPF either.)
+*/
+int killpg(pid_t pgrp, int sig)
+{
+ struct ev0bk evnblock;
+ struct timeval tv;
+ int i;
+
+ ap_sync_scoreboard_image();
+
+ for (i = 0; i < HARD_SERVER_LIMIT; ++i) {
+ int pid = ap_scoreboard_image->parent[i].pid;
+ /* the pgrp check is so that we don't kill ourself: */
+ if (pid && pid != pgrp) {
+ kill(pid, sig);
+ }
+ }
+ /* Allow time for the signals to get to the children.
+ Note that ap_select is signal interruptable,
+ so we use evnwc instead. */
+ i = TPF_SHUTDOWN_SIGNAL_DELAY;
+ evnblock.evnpstinf.evnbkc1 = 1; /* nbr of posts needed */
+ evntc(&evnblock, EVENT_CNT, 'N', i, EVNTC_1052);
+ evnwc(&evnblock, EVENT_CNT);
+
+ if (sig == SIGTERM) {
+ /* get idle children's attention by closing the socket */
+ closesocket(sock_sd);
+ /* and close the /dev/tpf.socket.file special file */
+ fclose(sock_fp);
+ /* Allow the children some more time.
+ Note that ap_select is signal interruptable,
+ so we use evnwc instead. */
+ i = TPF_SHUTDOWN_CLOSING_DELAY;
+ evnblock.evnpstinf.evnbkc1 = 1; /* nbr of posts needed */
+ evntc(&evnblock, EVENT_CNT, 'N', i, EVNTC_1052);
+ evnwc(&evnblock, EVENT_CNT);
+ }
+
+ return(0);
+}
+
+/*
+ This function augments http_main's show_compile_settings function.
+ This way definitions that are only shown on TPF won't clutter up
+ main line code.
+*/
+void show_os_specific_compile_settings(void)
+{
+int i;
+
+#ifdef USE_TPF_SCOREBOARD
+ #error "USE_TPF_SCOREBOARD (system heap scoreboard)"
+ #error "is no longer supported."
+ #error "Replace with USE_SHMGET_SCOREBOARD to use"
+ #error "shared memory or remove entirely to use"
+ #error "scoreboard on file for pre-TPF41 PUT10 systems"
+#endif
+
+#ifdef TPF_FORK_EXTENDED
+ printf(" -D TPF_FORK_EXTENDED\n");
+#endif
+
+#ifdef TPF_HAVE_NONSOCKET_SELECT
+ printf(" -D TPF_HAVE_NONSOCKET_SELECT\n");
+#endif
+
+#ifdef TPF_NO_NONSOCKET_SELECT
+ printf(" -D TPF_NO_NONSOCKET_SELECT\n");
+#endif
+
+#ifdef TPF_HAVE_SAWNC
+ printf(" -D TPF_HAVE_SAWNC\n");
+#endif
+
+#ifdef TPF_NO_SAWNC
+ printf(" -D TPF_NO_SAWNC\n");
+#endif
+
+#ifdef TPF_HAVE_NSD
+ printf(" -D TPF_HAVE_NSD\n");
+#endif
+
+#ifdef HAVE_SYSLOG
+ printf(" -D HAVE_SYSLOG\n");
+#endif
+
+ /* round SCOREBOARD_MAINTENANCE_INTERVAL up to seconds */
+ i = (SCOREBOARD_MAINTENANCE_INTERVAL + 999999) / 1000000;
+ if (i == 1) {
+ printf(" -D SCOREBOARD_MAINTENANCE_INTERVAL=1 SECOND\n");
+ } else {
+ printf(" -D SCOREBOARD_MAINTENANCE_INTERVAL=%i SECONDS\n", i);
+ }
+
+#ifdef TPF_HAVE_SIGACTION
+ printf(" -D TPF_HAVE_SIGACTION\n");
+#endif
+
+#ifdef NO_USE_SIGACTION
+ printf(" -D NO_USE_SIGACTION\n");
+#endif
+
+}
diff --git a/APACHE_1_3_42/src/os/tpf/os.h b/APACHE_1_3_42/src/os/tpf/os.h
new file mode 100644
index 0000000000..756d4a95ee
--- /dev/null
+++ b/APACHE_1_3_42/src/os/tpf/os.h
@@ -0,0 +1,358 @@
+/* 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.
+ */
+
+#ifndef APACHE_OS_H
+#define APACHE_OS_H
+
+/*
+ * This file is 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
+ */
+
+#define PLATFORM "TPF"
+#ifndef TPF
+#define TPF 1
+#endif
+#if !defined(TPF64BIT) && !defined(TPF41)
+#define TPF41
+#endif
+
+/*---------------------------------------------------------------------*/
+#ifdef TPF64BIT
+/*---------------------------------------------------------------------*/
+#define TPF_HAVE_NONSOCKET_SELECT
+#define TPF_HAVE_SAWNC
+#define HAVE_SYSLOG
+#define TPF_HAVE_SIGACTION
+#define HAVE_SYS_SELECT_H
+#define HAVE_ISNAN
+#define HAVE_ISINF
+#define TPF_FORK_EXTENDED
+#include <stdlib.h>
+#include <tpf/tpfeq.h>
+#include <tpf/tpfio.h>
+#include <tpf/sysapi.h>
+#include <time.h>
+#include <tpf/i_netd.h>
+#include <strings.h>
+#include <unistd.h>
+#endif /* TPF64BIT */
+
+/*---------------------------------------------------------------------*/
+#ifdef TPF41
+/*---------------------------------------------------------------------*/
+
+/************************************************************************
+ * TPF41 PJ26895 provides support for non_socket_select.
+ * You can determine if this apar is applied to your system by looking
+ * at i$pwbl.h. If the function non_socket_select is defined,
+ * then add #define TPF_HAVE_NONSOCKET_SELECT
+ * else add #define TPF_NO_NONSOCKET_SELECT
+ *
+ * One of these two #defines is required and must be added here in os.h
+ * before the following check.
+ ************************************************************************/
+
+#if !defined(TPF_HAVE_NONSOCKET_SELECT) && !defined(TPF_NO_NONSOCKET_SELECT)
+ #error "You must define whether your system supports non_socket_select()"
+ #error "See src/os/tpf/os.h for instructions"
+#endif
+
+#if defined(TPF_HAVE_NONSOCKET_SELECT) && defined(TPF_NO_NONSOCKET_SELECT)
+ #error "TPF_HAVE_NONSOCKET_SELECT and TPF_NO_NONSOCKET_SELECT"
+ #error "cannot both be defined"
+ #error "See src/os/tpf/os.h for instructions"
+#endif
+
+/************************************************************************
+ * TPF41 PJ27387 or PJ26188 provides support for tpf_sawnc.
+ * You can determine if this apar is applied to your system by looking at
+ * tpfapi.h or i$fsdd.h. If the function tpf_sawnc is defined,
+ * then add #define TPF_HAVE_SAWNC
+ * else add #define TPF_NO_SAWNC
+ *
+ * One of these two #defines is required and must be added here in os.h
+ * before the following check.
+ ************************************************************************/
+
+#if !defined(TPF_HAVE_SAWNC) && !defined(TPF_NO_SAWNC)
+ #error "You must define whether your system supports tpf_sawnc()"
+ #error "See src/os/tpf/os.h for instructions"
+#endif
+
+#if defined(TPF_HAVE_SAWNC) && defined(TPF_NO_SAWNC)
+ #error "TPF_HAVE_SAWNC and TPF_NO_SAWNC"
+ #error "cannot both be defined"
+ #error "See src/os/tpf/os.h for instructions"
+#endif
+
+/* if the compiler defined errno then undefine it
+ and pick up the correct definition from errno.h */
+#if defined(errno) && !defined(__errnoh)
+#undef errno
+#include <errno.h>
+#endif
+
+/* If TPF41 APAR PJ27277 (which shipped on TPF41 PUT13) has been applied */
+/* then we want to #define TPF_FORK_EXTENDED so Perl CGIs will work. */
+/* Rather than hardcoding it we'll check for "environ" in stdlib.h, */
+/* which was also added by TPF41 PJ27277. */
+#include <stdlib.h>
+#if defined(environ) && !defined(TPF_FORK_EXTENDED)
+#define TPF_FORK_EXTENDED
+#endif
+#define WUNTRACED 0 /* TPF41's waitpid() doesn't support WUNTRACED */
+#include <tpfeq.h>
+#include <tpfio.h>
+#include <sysapi.h>
+#include <sysgtime.h>
+#include <i$netd.h>
+#include <strings.h>
+#ifndef __strings_h
+#define NEED_STRCASECMP
+#define NEED_STRNCASECMP
+#endif
+#define NEED_STRDUP
+#define NO_GETTIMEOFDAY
+#ifndef _POSIX_SOURCE
+#define _POSIX_SOURCE 1
+#endif
+#ifndef USE_HSREGEX
+#define USE_HSREGEX 1
+#endif
+#include <unistd.h>
+#define crypt(buf,salt) ((char *)buf)
+#undef offsetof
+#define offsetof(s_type,field) ((size_t)&(((s_type*)0)->field))
+
+#endif /* TPF41 */
+
+/*---------------------------------------------------------------------*/
+/* common */
+/*---------------------------------------------------------------------*/
+#define AP_LONGEST_LONG long long
+/* byte order of machine (12: little endian, 21: big endian) */
+#define AP_BYTE_ORDER 21 /* TPF is big endian */
+#define CHARSET_EBCDIC 1
+#define PRIMECRAS 0x010000
+#define JMP_BUF jmp_buf
+#define HAVE_SHMGET
+#define HAVE_SYS_PARAM_H
+#define NEED_INITGROUPS
+#define NEED_SIGNAL_INTERRUPT
+#define NO_LINGCLOSE
+#define NO_MMAP
+#define NO_OTHER_CHILD
+#define NO_PIPED_LOGS
+#define NO_RELIABLE_PIPED_LOGS
+#define NO_SETSID
+#define NO_SLACK
+#define NO_TIMES
+#ifndef TPF_HAVE_SIGACTION
+#define NO_USE_SIGACTION
+#endif
+#define USE_LONGJMP
+#define USE_SHMGET_SCOREBOARD
+#define USE_TPF_ACCEPT
+#define HAVE_TPF_CORE_SERIALIZED_ACCEPT
+#define USE_TPF_SELECT
+#define S_IREAD S_IRUSR
+#define S_IWRITE S_IWUSR
+#define S_IEXEC S_IXUSR
+#define HAVE_UNISTD_H 1
+#ifndef NO_DL_NEEDED
+#define NO_DL_NEEDED 1
+#endif
+
+#include "ap_config.h"
+
+#if !defined(INLINE) && defined(USE_GNU_INLINE)
+/* Compiler supports inline, so include the inlineable functions as
+ * part of the header
+ */
+#define INLINE extern ap_inline
+#include "os-inline.c"
+#endif
+
+#ifndef INLINE
+/* Compiler does not support inline, so prototype the inlineable functions
+ * as normal
+ */
+extern int ap_os_is_path_absolute(const char *f);
+#endif
+
+/* Other ap_os_ routines not used by this platform */
+
+#define ap_os_is_filename_valid(f) (1)
+#define ap_os_kill(pid, sig) kill(pid, sig)
+
+/*---------------------------------------------------------------------*/
+#ifdef TPF41
+/*---------------------------------------------------------------------*/
+#ifndef __strings_h
+
+#define FD_SETSIZE 2048
+
+typedef long fd_mask;
+
+#define NBBY 8 /* number of bits in a byte */
+#define NFDBITS (sizeof(fd_mask) * NBBY)
+#define howmany(x, y) (((x)+((y)-1))/(y))
+
+typedef struct fd_set {
+ fd_mask fds_bits [howmany(FD_SETSIZE, NFDBITS)];
+} fd_set;
+
+#define FD_CLR(n, p)((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
+#define FD_ISSET(n, p)((p)->fds_bits[(n)/NFDBITS] & (1 <<((n) % NFDBITS)))
+#define FD_ZERO(p) memset((char *)(p), 0, sizeof(*(p)))
+#endif /* __strings_h */
+
+#ifdef FD_SET
+#undef FD_SET
+#define FD_SET(n, p) (0)
+#endif /* FD_SET */
+
+#endif /* TPF41 */
+
+/*---------------------------------------------------------------------*/
+/* common */
+/*---------------------------------------------------------------------*/
+#define TPF_MUTEX_KEY_SIZE (sizeof(pid_t)*2+1)
+
+/* TPF doesn't have, or need, tzset (it is used in mod_expires.c) */
+#define tzset()
+
+/* definitions for the file descriptor inheritance table */
+#define TPF_FD_LIST_SIZE 4000
+
+/* seconds to delay after shutdown/restart signals have been sent */
+#ifndef TPF_SHUTDOWN_SIGNAL_DELAY
+#define TPF_SHUTDOWN_SIGNAL_DELAY 2
+#endif
+
+/* seconds to delay after closing the port as part of shutdown */
+#ifndef TPF_SHUTDOWN_CLOSING_DELAY
+#define TPF_SHUTDOWN_CLOSING_DELAY 3
+#endif
+
+#ifndef AP_OS_RECLAIM_LOOP_ADJUSTMENTS
+/* expedite shutdown/restart in http_main.c's reclaim_child_processes
+ function by skipping some of the loop iterations */
+#define AP_OS_RECLAIM_LOOP_ADJUSTMENTS \
+ if (tries == 4) { \
+ tries += 1; /* skip try #5 */ \
+ } else { \
+ if (tries == 8) { \
+ tries += 3; /* skip try #9, #10, & #11 */ \
+ } \
+ }
+#endif /* AP_OS_RECLAIM_LOOP_ADJUSTMENTS */
+
+enum FILE_TYPE { PIPE_OUT = 1, PIPE_IN, PIPE_ERR };
+
+typedef struct tpf_fd_item {
+ int fd;
+ enum FILE_TYPE file_type;
+ char *fname;
+}TPF_FD_ITEM;
+
+typedef struct tpf_fd_list {
+ void *next_avail_byte;
+ void *last_avail_byte;
+ unsigned int nbr_of_items;
+ TPF_FD_ITEM first_item;
+}TPF_FD_LIST;
+
+typedef struct apache_input {
+ void *scoreboard_heap; /* scoreboard system heap address */
+ int slot; /* child number */
+ int generation; /* server generation number */
+ int listeners[10];
+ time_t restart_time;
+ TPF_FD_LIST *tpf_fds; /* fd inheritance table ptr */
+ void *shm_static_ptr; /* shm ptr for static pages */
+} APACHE_TPF_INPUT;
+
+typedef union ebw_area {
+ INETD_SERVER_INPUT parent;
+ APACHE_TPF_INPUT child;
+} EBW_AREA;
+
+extern void *tpf_shm_static_ptr; /* mod_tpf_shm_static */
+#define TPF_SHM_STATIC_SIZE 200000
+#define MMAP_SEGMENT_SIZE 32767 /* writev can handle 32767 */
+#define _SYS_UIO_H_ /* writev */
+
+typedef struct tpf_fork_child {
+ char *filename;
+ enum { FORK_NAME = 1, FORK_FILE = 2 } prog_type;
+ void *subprocess_env;
+} TPF_FORK_CHILD;
+
+int tpf_accept(int sockfd, struct sockaddr *peer, int *paddrlen);
+extern int tpf_child;
+
+struct server_rec;
+pid_t os_fork(struct server_rec *s, int slot);
+void ap_tpf_zinet_checks(int standalone,
+ const char *servername,
+ struct server_rec *s);
+int os_check_server(char *server);
+void show_os_specific_compile_settings(void);
+char *getpass(const char *prompt);
+int killpg(pid_t pgrp, int sig);
+extern char *ap_server_argv0;
+#include <signal.h>
+#if defined(TPF41) && !defined(SIGPIPE)
+#define SIGPIPE 14
+#endif
+#if defined(TPF41) && defined(NSIG)
+#undef NSIG
+#endif
+void ap_tpf_save_argv(int argc, char **argv);
+int tpf_select(int maxfds, fd_set *reads, fd_set *writes, fd_set *excepts,
+ struct timeval *tv);
+void os_tpf_child(APACHE_TPF_INPUT *input_parms);
+#if defined(TPF64BIT) || defined(__PIPE_)
+static void *ap_tpf_get_shared_mem(size_t size);
+#endif
+
+/* various #defines for ServerType/ZINET model checks: */
+
+#define TPF_SERVERTYPE_MSG \
+ "ServerType inetd is not supported on TPF" \
+ " -- Apache startup aborted"
+
+#ifdef INETD_IDCF_MODEL_DAEMON
+#define TPF_STANDALONE_CONFLICT_MSG \
+ "ServerType standalone requires ZINET model DAEMON or NOLISTEN" \
+ " -- Apache startup aborted"
+#define TPF_NOLISTEN_WARNING \
+ "ZINET model DAEMON is preferred over model NOLISTEN"
+#else
+#define INETD_IDCF_MODEL_DAEMON -1
+#define TPF_STANDALONE_CONFLICT_MSG \
+ "ServerType standalone requires ZINET model NOLISTEN" \
+ " -- Apache startup aborted"
+#endif
+
+#define TPF_UNABLE_TO_DETERMINE_ZINET_MODEL \
+ "Unable to determine ZINET model: inetd_getServer(\"%s\") " \
+ "call failed -- Apache startup aborted"
+
+#endif /*! APACHE_OS_H*/
diff --git a/APACHE_1_3_42/src/os/tpf/samples/linkhttp.dlm b/APACHE_1_3_42/src/os/tpf/samples/linkhttp.dlm
new file mode 100644
index 0000000000..a4ee418c3e
--- /dev/null
+++ b/APACHE_1_3_42/src/os/tpf/samples/linkhttp.dlm
@@ -0,0 +1,66 @@
+CHTA.dlm
+DLMVERSION(<vv>)
+CSTRTD(40)
+CINET640
+buildmark.o
+modules.o
+ap/ap_base64.o
+ap/ap_checkpass.o
+ap/ap_cpystrn.o
+ap/ap_ebcdic.o
+ap/ap_execve.o
+ap/ap_fnmatch.o
+ap/ap_getpass.o
+ap/ap_md5c.o
+ap/ap_sha1.o
+ap/ap_signal.o
+ap/ap_slack.o
+ap/ap_snprintf.o
+ap/ap_strtol.o
+main/alloc.o
+main/buff.o
+main/http_config.o
+main/http_core.o
+main/http_log.o
+main/http_main.o
+main/http_protocol.o
+main/http_request.o
+main/http_vhost.o
+main/rfc1413.o
+main/util.o
+main/util_date.o
+main/util_md5.o
+main/util_script.o
+main/util_uri.o
+modules/standard/mod_access.o
+modules/standard/mod_actions.o
+modules/standard/mod_alias.o
+modules/standard/mod_asis.o
+modules/standard/mod_auth.o
+modules/standard/mod_autoindex.o
+modules/standard/mod_cgi.o
+modules/standard/mod_dir.o
+modules/standard/mod_env.o
+modules/standard/mod_imap.o
+modules/standard/mod_include.o
+modules/standard/mod_log_config.o
+modules/standard/mod_mime.o
+modules/standard/mod_negotiation.o
+modules/standard/mod_setenvif.o
+modules/standard/mod_status.o
+modules/standard/mod_userdir.o
+os/tpf/cgetop.o
+os/tpf/os.o
+os/tpf/os-inline.o
+regex/regcomp.o
+regex/regerror.o
+regex/regexec.o
+regex/regfree.o
+SYSLIB(<your-first-syslib-dsn>)
+SYSLIB(<your-final-syslib-dsn>)
+OBJLIB(<your-first-objlib-dsn>)
+OBJLIB(<your-final-objlib-dsn>)
+STUBS()
+TARGET(<your-target-dsn-here>)
+PRELINK(MAP)
+LINK(AMODE=31 RMODE=ANY LIST XREF MAP)
diff --git a/APACHE_1_3_42/src/os/tpf/samples/linkhttp.jcl b/APACHE_1_3_42/src/os/tpf/samples/linkhttp.jcl
new file mode 100644
index 0000000000..bafc62c1be
--- /dev/null
+++ b/APACHE_1_3_42/src/os/tpf/samples/linkhttp.jcl
@@ -0,0 +1,147 @@
+//LINKHTTP JOB MSGLEVEL=(1,1),CLASS=S,MSGCLASS=S
+//* SAMPLE JCL FOR LINKING APACHE ON TPF41
+/*ROUTE PRINT <your-id-here>
+/*ROUTE PUNCH <your-id-here>
+/*NOTIFY <your-id-here>
+//CCLE JCLLIB ORDER=(SYS1.CBC.SCBCPRC,SYS1.CEE.SCEEPROC)
+//PRELINK EXEC EDCPL,COND.LKED=(0,NE),
+// PPARM='OMVS,DLLNAME(CHTA)',
+// LREGSIZ='2048K',
+// LPARM='AMODE=31,RMODE=ANY,LIST,XREF,MAP'
+//PLKED.SYSLIB DD DISP=SHR,DSN=<your-first-syslib-dsn>
+// DD DISP=SHR,DSN=<your-final-syslib-dsn>
+//PLKED.OBJLIB DD DISP=SHR,DSN=<your-first-objlib-dsn>
+// DD DISP=SHR,DSN=<your-final-objlib-dsn>
+//PLKED.SYSDEFSD DD DISP=SHR,DSN=<your-dsd-dsn>(CHTA<vv>)
+//PLKED.OBJ01 DD PATH='/<your-path-here>/src/buildmark.o'
+//PLKED.OBJ02 DD PATH='/<your-path-here>/src/modules.o'
+//PLKED.OBJ03 DD PATH='/<your-path-here>/src/ap/ap_base64.o'
+//PLKED.OBJ04 DD PATH='/<your-path-here>/src/ap/ap_checkpass.o'
+//PLKED.OBJ05 DD PATH='/<your-path-here>/src/ap/ap_cpystrn.o'
+//PLKED.OBJ06 DD PATH='/<your-path-here>/src/ap/ap_ebcdic.o'
+//PLKED.OBJ07 DD PATH='/<your-path-here>/src/ap/ap_execve.o'
+//PLKED.OBJ08 DD PATH='/<your-path-here>/src/ap/ap_fnmatch.o'
+//PLKED.OBJ09 DD PATH='/<your-path-here>/src/ap/ap_getpass.o'
+//PLKED.OBJ10 DD PATH='/<your-path-here>/src/ap/ap_md5c.o'
+//PLKED.OBJ11 DD PATH='/<your-path-here>/src/ap/ap_sha1.o'
+//PLKED.OBJ12 DD PATH='/<your-path-here>/src/ap/ap_signal.o'
+//PLKED.OBJ13 DD PATH='/<your-path-here>/src/ap/ap_slack.o'
+//PLKED.OBJ14 DD PATH='/<your-path-here>/src/ap/ap_snprintf.o'
+//PLKED.OBJ15 DD PATH='/<your-path-here>/src/ap/ap_strtol.o'
+//PLKED.OBJ16 DD PATH='/<your-path-here>/src/main/alloc.o'
+//PLKED.OBJ17 DD PATH='/<your-path-here>/src/main/buff.o'
+//PLKED.OBJ18 DD PATH='/<your-path-here>/src/main/http_config.o'
+//PLKED.OBJ19 DD PATH='/<your-path-here>/src/main/http_core.o'
+//PLKED.OBJ20 DD PATH='/<your-path-here>/src/main/http_log.o'
+//PLKED.OBJ21 DD PATH='/<your-path-here>/src/main/http_main.o'
+//PLKED.OBJ22 DD PATH='/<your-path-here>/src/main/http_protocol.o'
+//PLKED.OBJ23 DD PATH='/<your-path-here>/src/main/http_request.o'
+//PLKED.OBJ24 DD PATH='/<your-path-here>/src/main/http_vhost.o'
+//PLKED.OBJ25 DD PATH='/<your-path-here>/src/main/rfc1413.o'
+//PLKED.OBJ26 DD PATH='/<your-path-here>/src/main/util.o'
+//PLKED.OBJ27 DD PATH='/<your-path-here>/src/main/util_date.o'
+//PLKED.OBJ28 DD PATH='/<your-path-here>/src/main/util_md5.o'
+//PLKED.OBJ29 DD PATH='/<your-path-here>/src/main/util_script.o'
+//PLKED.OBJ30 DD PATH='/<your-path-here>/src/main/util_uri.o'
+//PLKED.OBJ31 DD PATH='/<your-path-here>/src/modules/standard/mod_acce\
+// ss.o'
+//PLKED.OBJ32 DD PATH='/<your-path-here>/src/modules/standard/mod_acti\
+// ons.o'
+//PLKED.OBJ33 DD PATH='/<your-path-here>/src/modules/standard/mod_alia\
+// s.o'
+//PLKED.OBJ34 DD PATH='/<your-path-here>/src/modules/standard/mod_asis\
+// .o'
+//PLKED.OBJ35 DD PATH='/<your-path-here>/src/modules/standard/mod_auth\
+// .o'
+//PLKED.OBJ36 DD PATH='/<your-path-here>/src/modules/standard/mod_auto\
+// index.o'
+//PLKED.OBJ37 DD PATH='/<your-path-here>/src/modules/standard/mod_cgi.\
+// o'
+//PLKED.OBJ38 DD PATH='/<your-path-here>/src/modules/standard/mod_dir.\
+// o'
+//PLKED.OBJ39 DD PATH='/<your-path-here>/src/modules/standard/mod_env.\
+// o'
+//PLKED.OBJ40 DD PATH='/<your-path-here>/src/modules/standard/mod_imap\
+// .o'
+//PLKED.OBJ41 DD PATH='/<your-path-here>/src/modules/standard/mod_incl\
+// ude.o'
+//PLKED.OBJ42 DD PATH='/<your-path-here>/src/modules/standard/mod_log_\
+// config.o'
+//PLKED.OBJ43 DD PATH='/<your-path-here>/src/modules/standard/mod_mime\
+// .o'
+//PLKED.OBJ44 DD PATH='/<your-path-here>/src/modules/standard/mod_nego\
+// tiation.o'
+//PLKED.OBJ45 DD PATH='/<your-path-here>/src/modules/standard/mod_sete\
+// nvif.o'
+//PLKED.OBJ46 DD PATH='/<your-path-here>/src/modules/standard/mod_stat\
+// us.o'
+//PLKED.OBJ47 DD PATH='/<your-path-here>/src/modules/standard/mod_user\
+// dir.o'
+//PLKED.OBJ48 DD PATH='/<your-path-here>/src/os/tpf/cgetop.o'
+//PLKED.OBJ49 DD PATH='/<your-path-here>/src/os/tpf/os.o'
+//PLKED.OBJ50 DD PATH='/<your-path-here>/src/os/tpf/os-inline.o'
+//PLKED.OBJ51 DD PATH='/<your-path-here>/src/regex/regcomp.o'
+//PLKED.OBJ52 DD PATH='/<your-path-here>/src/regex/regerror.o'
+//PLKED.OBJ53 DD PATH='/<your-path-here>/src/regex/regexec.o'
+//PLKED.OBJ54 DD PATH='/<your-path-here>/src/regex/regfree.o'
+//PLKED.SYSIN DD *
+ ORDER @@DLMHDR
+ INCLUDE OBJLIB(CSTRTD40)
+ INCLUDE OBJ01
+ INCLUDE OBJ02
+ INCLUDE OBJ03
+ INCLUDE OBJ04
+ INCLUDE OBJ05
+ INCLUDE OBJ06
+ INCLUDE OBJ07
+ INCLUDE OBJ08
+ INCLUDE OBJ09
+ INCLUDE OBJ10
+ INCLUDE OBJ11
+ INCLUDE OBJ12
+ INCLUDE OBJ13
+ INCLUDE OBJ14
+ INCLUDE OBJ15
+ INCLUDE OBJ16
+ INCLUDE OBJ17
+ INCLUDE OBJ18
+ INCLUDE OBJ19
+ INCLUDE OBJ20
+ INCLUDE OBJ21
+ INCLUDE OBJ22
+ INCLUDE OBJ23
+ INCLUDE OBJ24
+ INCLUDE OBJ25
+ INCLUDE OBJ26
+ INCLUDE OBJ27
+ INCLUDE OBJ28
+ INCLUDE OBJ29
+ INCLUDE OBJ30
+ INCLUDE OBJ31
+ INCLUDE OBJ32
+ INCLUDE OBJ33
+ INCLUDE OBJ34
+ INCLUDE OBJ35
+ INCLUDE OBJ36
+ INCLUDE OBJ37
+ INCLUDE OBJ38
+ INCLUDE OBJ39
+ INCLUDE OBJ40
+ INCLUDE OBJ41
+ INCLUDE OBJ42
+ INCLUDE OBJ43
+ INCLUDE OBJ44
+ INCLUDE OBJ45
+ INCLUDE OBJ46
+ INCLUDE OBJ47
+ INCLUDE OBJ48
+ INCLUDE OBJ49
+ INCLUDE OBJ50
+ INCLUDE OBJ51
+ INCLUDE OBJ52
+ INCLUDE OBJ53
+ INCLUDE OBJ54
+ INCLUDE OBJLIB(CINET640)
+/*
+//LKED.SYSLMOD DD DISP=OLD,DSN=<your-target-dsn-here>(CHTA<vv>)
+//
diff --git a/APACHE_1_3_42/src/os/tpf/samples/loadset.jcl b/APACHE_1_3_42/src/os/tpf/samples/loadset.jcl
new file mode 100644
index 0000000000..ea74a2dfd0
--- /dev/null
+++ b/APACHE_1_3_42/src/os/tpf/samples/loadset.jcl
@@ -0,0 +1,42 @@
+//LOADSET JOB MSGLEVEL=1,CLASS=S,MSGCLASS=S
+//* SAMPLE JCL TO BUILD AN APACHE LOADSET FOR TPF41
+/*ROUTE PRINT <your-id-here>
+/*ROUTE PUNCH <your-id-here>
+//TLDR EXEC PGM=TPFLDR40,REGION=8M,
+// PARM='OLDR,SYS=ACP,CLMSIZE=8000000'
+//STEPLIB DD DSN=ACP.LINK.RLSE40.BSS,DISP=SHR
+// DD DSN=SYS1.CEE.SCEERUN,DISP=SHR
+//SALTB DD DSN=ACP.SALTBL.RLSE40.BSS,DISP=SHR
+//OBJLIB DD DSN=ACP.OBJ.RLSE40.BSS,DISP=SHR
+//LOADMOD DD DSN=<your-source-dsn-here>,DISP=SHR
+// DD DSN=ACP.LINK.RLSE40.BSS,DISP=SHR
+//LOADSUM DD DSN=&&LOADSUM,DISP=(NEW,PASS),UNIT=SYSDA,
+// LRECL=133,SPACE=(TRK,(10,10)),RECFM=FBA
+//CPRTEMP DD UNIT=SYSDA,
+// DSN=&&CPRTEMP,SPACE=(TRK,(100,20)),
+// DCB=(RECFM=FB,BLKSIZE=4095,LRECL=4095),
+// DISP=(NEW,DELETE)
+//PROGTEMP DD UNIT=SYSDA,
+// DSN=&&PRTEMP,SPACE=(TRK,(100,20)),
+// DCB=(RECFM=FB,BLKSIZE=4095,LRECL=4095),
+// DISP=(NEW,DELETE)
+//OUTPUT DD DSN=&&VRDROUT,DISP=(NEW,PASS),UNIT=SYSDA,
+// DCB=(RECFM=F,BLKSIZE=4095,LRECL=4095)
+//SYSUDUMP DD DUMMY
+//SYSABEND DD DUMMY
+//SYSOUT DD SYSOUT=A
+//SYSPRINT DD SYSOUT=A
+//PRINTER DD SYSOUT=A
+//CEEDUMP DD SYSOUT=A
+//SYSIN DD *
+SYSID=BSS
+PATVERS=NONE
+SALVERS=40
+LOADER LOADSET HTTPD<vv>
+LOADER CALL PROG CHTA<vv>
+/*
+//TRANSMIT EXEC PGM=IKJEFT01,
+// PARM='TRANSMIT <your-id-here> DDNAME(SYSTSIN) NOLOG NONOTIFY SEQ'
+//SYSTSIN DD UNIT=SYSDA,
+// DSN=&&VRDROUT,DISP=(OLD,DELETE)
+//SYSTSPRT DD DUMMY
diff --git a/APACHE_1_3_42/src/os/tpf/samples/sample_env.txt b/APACHE_1_3_42/src/os/tpf/samples/sample_env.txt
new file mode 100644
index 0000000000..4a4526a106
--- /dev/null
+++ b/APACHE_1_3_42/src/os/tpf/samples/sample_env.txt
@@ -0,0 +1,51 @@
+# Sample maketpf environment file for Apache
+
+#######################################################################
+# Define the directories where the shared objects reside #
+#######################################################################
+ROOTLIBDIRS := $(foreach d,$(TPF_ROOT),$d/opensource/apache/lib)
+
+#######################################################################
+# Define directories where the loadables (XXXXVV) are to be written #
+#######################################################################
+ROOTLOADDIRS := $(foreach d,$(TPF_ROOT),$d/opensource/load)
+
+#######################################################################
+# Define location of the export files used by the LD postprocessor #
+# The .exp files will live in lib directory #
+#######################################################################
+ROOTEXPDIRS := $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/exp)
+
+#######################################################################
+# Define the object file directory name #
+#######################################################################
+ROOTOBJDIRS := $(foreach d,$(TPF_ROOT),$d/opensource/apache/obj)
+
+#######################################################################
+# Define the listing files directory name #
+#######################################################################
+ROOTLSTDIRS := $(foreach d,$(TPF_ROOT),$d/opensource/apache/lst)
+
+#######################################################################
+# Set the include/header file directories #
+#######################################################################
+ROOTINCDIRS := $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src/include)
+ROOTINCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src/modules/proxy)
+ROOTINCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src/modules/standard)
+ROOTINCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src/os/tpf)
+ROOTINCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src/regex)
+
+#######################################################################
+# Set the C file directories #
+#######################################################################
+ROOTCDIRS := $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src)
+ROOTCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src/ap)
+ROOTCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src/main)
+ROOTCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src/modules/example)
+ROOTCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src/modules/extra)
+ROOTCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src/modules/experimental)
+ROOTCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src/modules/proxy)
+ROOTCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src/modules/standard)
+ROOTCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src/os/tpf)
+ROOTCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src/regex)
+ROOTCDIRS += $(foreach d,$(TPF_ROOT_LM),$d/opensource/apache/src/support)
diff --git a/APACHE_1_3_42/src/os/tpf/samples/sample_mak.txt b/APACHE_1_3_42/src/os/tpf/samples/sample_mak.txt
new file mode 100644
index 0000000000..7fdaa38c06
--- /dev/null
+++ b/APACHE_1_3_42/src/os/tpf/samples/sample_mak.txt
@@ -0,0 +1,72 @@
+# Sample .mak file for Apache
+
+#######################################################################
+# Define shared object name #
+#######################################################################
+APP := CHTA
+APP_ENTRY := main
+
+#######################################################################
+# External LIB References #
+#######################################################################
+# Apache needs the Internet Daemon / ZINET (CLTY)
+LIBS := CLTY
+
+#######################################################################
+# Environments needed for build #
+#######################################################################
+maketpf_env := apache
+maketpf_env += base_rt
+maketpf_env += system
+
+CFLAGS_CHTA := -fPIC
+CFLAGS_CHTA += -w
+CFLAGS_CHTA += -DTPF
+CFLAGS_CHTA += -DTPF64BIT
+
+#######################################################################
+# C programs to be compiled #
+#######################################################################
+C_SRC := buildmark.c
+C_SRC += modules.c
+C_SRC += ap_base64.c
+C_SRC += ap_checkpass.c
+C_SRC += ap_cpystrn.c
+C_SRC += ap_ebcdic.c
+C_SRC += ap_execve.c
+C_SRC += ap_fnmatch.c
+C_SRC += ap_getpass.c
+C_SRC += ap_md5c.c
+C_SRC += ap_sha1.c
+C_SRC += ap_signal.c
+C_SRC += ap_slack.c
+C_SRC += ap_snprintf.c
+C_SRC += ap_strtol.c
+C_SRC += alloc.c
+C_SRC += buff.c
+C_SRC += http_config.c
+C_SRC += http_core.c
+C_SRC += http_log.c
+C_SRC += http_main.c
+C_SRC += http_protocol.c
+C_SRC += http_request.c
+C_SRC += http_vhost.c
+C_SRC += rfc1413.c
+C_SRC += util.c
+C_SRC += util_date.c
+C_SRC += util_md5.c
+C_SRC += util_script.c
+C_SRC += util_uri.c
+C_SRC += os.c
+C_SRC += os-inline.c
+
+APACHE_MODULE_FILE := $(word 1,$(foreach d,$(TPF_ROOT),$(wildcard $d/opensource/apache/src/apache.modules)))
+ifeq ("$(APACHE_MODULE_FILE)","")
+$(error $(MTPF0045E))
+endif
+C_SRC += $(shell cat $(APACHE_MODULE_FILE))
+
+#######################################################################
+# Include maketpf build rules #
+#######################################################################
+include maketpf.rules
diff --git a/APACHE_1_3_42/src/os/tpf/samples/test_char.txt b/APACHE_1_3_42/src/os/tpf/samples/test_char.txt
new file mode 100644
index 0000000000..4e436b6a1b
--- /dev/null
+++ b/APACHE_1_3_42/src/os/tpf/samples/test_char.txt
@@ -0,0 +1,43 @@
+/* this file is automatically generated by gen_test_char, do not edit */
+#define T_ESCAPE_SHELL_CMD 0x01 /* chars with special meaning in the shell */
+#define T_ESCAPE_PATH_SEGMENT 0x02 /* find path segment, as defined in RFC1808 */
+#define T_OS_ESCAPE_PATH 0x04 /* escape characters in a path or uri */
+#define T_HTTP_TOKEN_STOP 0x08 /* find http tokens, as defined in RFC2616 */
+#define T_ESCAPE_LOGITEM 0x10 /* filter what should go in the log file */
+#define T_ESCAPE_FORENSIC 0x20 /* filter what should go in the forensic log */
+
+static const unsigned char test_char_table[256] = {
+ 0x20, 0x3e, 0x3e, 0x3e, 0x36, 0x3e, 0x36, 0x3e, /*0x00...0x07*/
+ 0x36, 0x36, 0x36, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, /*0x08...0x0f*/
+ 0x3e, 0x3e, 0x3e, 0x3e, 0x36, 0x3f, 0x3e, 0x36, /*0x10...0x17*/
+ 0x3e, 0x3e, 0x36, 0x36, 0x3e, 0x3e, 0x3e, 0x3e, /*0x18...0x1f*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3e, 0x3e, /*0x20...0x27*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x3e, 0x3e, 0x3e, /*0x28...0x2f*/
+ 0x36, 0x36, 0x3e, 0x36, 0x36, 0x36, 0x36, 0x3e, /*0x30...0x37*/
+ 0x36, 0x36, 0x36, 0x36, 0x3e, 0x3e, 0x36, 0x3e, /*0x38...0x3f*/
+ 0x0e, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0x40...0x47*/
+ 0x36, 0x36, 0x36, 0x00, 0x0f, 0x09, 0x00, 0x27, /*0x48...0x4f*/
+ 0x01, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0x50...0x57*/
+ 0x36, 0x36, 0x00, 0x01, 0x01, 0x09, 0x0f, 0x07, /*0x58...0x5f*/
+ 0x00, 0x0a, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0x60...0x67*/
+ 0x36, 0x36, 0x36, 0x08, 0x26, 0x00, 0x0f, 0x0f, /*0x68...0x6f*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0x70...0x77*/
+ 0x36, 0x07, 0x28, 0x06, 0x08, 0x01, 0x08, 0x17, /*0x78...0x7f*/
+ 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x80...0x87*/
+ 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0x88...0x8f*/
+ 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x90...0x97*/
+ 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0x98...0x9f*/
+ 0x36, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0xa0...0xa7*/
+ 0x00, 0x00, 0x36, 0x36, 0x36, 0x0f, 0x36, 0x36, /*0xa8...0xaf*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0xb0...0xb7*/
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x0f, 0x36, 0x36, /*0xb8...0xbf*/
+ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0xc0...0xc7*/
+ 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0xc8...0xcf*/
+ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0xd0...0xd7*/
+ 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0xd8...0xdf*/
+ 0x1f, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0xe0...0xe7*/
+ 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, /*0xe8...0xef*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0xf0...0xf7*/
+ 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 /*0xf8...0xff*/
+
+};
diff --git a/APACHE_1_3_42/src/os/tpf/samples/uri_delims.txt b/APACHE_1_3_42/src/os/tpf/samples/uri_delims.txt
new file mode 100644
index 0000000000..b995c0ebac
--- /dev/null
+++ b/APACHE_1_3_42/src/os/tpf/samples/uri_delims.txt
@@ -0,0 +1,16 @@
+/* this file is automatically generated by gen_uri_delims, do not edit */
+static const unsigned char uri_delims[256] = {
+ T_NUL,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,T_SLASH,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,T_QUESTION,0,0,0,0,0,0,0,0,
+ 0,0,T_COLON,T_HASH,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+};
diff --git a/APACHE_1_3_42/src/os/unix/Makefile.tmpl b/APACHE_1_3_42/src/os/unix/Makefile.tmpl
new file mode 100644
index 0000000000..a68b781fcf
--- /dev/null
+++ b/APACHE_1_3_42/src/os/unix/Makefile.tmpl
@@ -0,0 +1,47 @@
+CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS)
+LIBS=$(EXTRA_LIBS) $(LIBS1)
+INCLUDES=$(INCLUDES1) $(INCLUDES0) $(EXTRA_INCLUDES)
+LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS)
+
+OBJS= os.o os-inline.o
+
+LIB= libos.a
+
+all: $(LIB)
+
+$(LIB): $(OBJS)
+ rm -f $@
+ ar cr $@ $(OBJS)
+ $(RANLIB) $@
+
+.c.o:
+ $(CC) -c $(INCLUDES) $(CFLAGS) $<
+
+clean:
+ rm -f $(OBJS) $(LIB)
+
+distclean: clean
+ -rm -f Makefile
+
+# We really don't expect end users to use this rule. It works only with
+# gcc, and rebuilds Makefile.tmpl. You have to re-run Configure after
+# using it.
+depend:
+ cp Makefile.tmpl Makefile.tmpl.bak \
+ && sed -ne '1,/^# DO NOT REMOVE/p' Makefile.tmpl > Makefile.new \
+ && gcc -MM $(INCLUDES) $(CFLAGS) *.c >> Makefile.new \
+ && sed -e '1,$$s: $(INCDIR)/: $$(INCDIR)/:g' \
+ -e '1,$$s: $(OSDIR)/: $$(OSDIR)/:g' Makefile.new \
+ > Makefile.tmpl \
+ && rm Makefile.new
+
+$(OBJS): Makefile
+
+# DO NOT REMOVE
+os-aix-dso.o: os-aix-dso.c
+os-inline.o: os-inline.c $(INCDIR)/ap_config.h \
+ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h \
+ $(OSDIR)/os.h $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h
+os.o: os.c $(INCDIR)/ap_config.h $(INCDIR)/ap_mmn.h \
+ $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \
+ $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h os.h
diff --git a/APACHE_1_3_42/src/os/unix/os-aix-dso.c b/APACHE_1_3_42/src/os/unix/os-aix-dso.c
new file mode 100644
index 0000000000..944478106a
--- /dev/null
+++ b/APACHE_1_3_42/src/os/unix/os-aix-dso.c
@@ -0,0 +1,627 @@
+/* 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.
+ */
+
+/*
+** os-aix-dso.c -- DSO system function emulation for AIX
+ */
+
+/*
+** Based on libdl (dlfcn.c/dlfcn.h) which is
+** Copyright (c) 1992,1993,1995,1996,1997,1988
+** Jens-Uwe Mager, Helios Software GmbH, Hannover, Germany.
+**
+** Not derived from licensed software.
+**
+** Permission is granted to freely use, copy, modify, and redistribute
+** this software, provided that the author is not construed to be liable
+** for any results of using the software, alterations are clearly marked
+** as such, and this notice is not modified.
+**
+** Changes marked with `--jwe' were made on April 7 1996 by
+** John W. Eaton <jwe@bevo.che.wisc.edu> to support g++
+**
+** Bundled, stripped and adjusted on April 1998 as one single source file
+** for inclusion into the Apache HTTP server by
+** Ralf S. Engelschall <rse@apache.org>
+*/
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/ldr.h>
+#include <a.out.h>
+
+#undef FREAD
+#undef FWRITE
+#include <ldfcn.h>
+
+/*
+ * AIX 4.3 does remove some useful definitions from ldfcn.h. Define
+ * these here to compensate for that lossage.
+ */
+#ifndef BEGINNING
+#define BEGINNING SEEK_SET
+#endif
+#ifndef FSEEK
+#define FSEEK(ldptr,o,p) fseek(IOPTR(ldptr),(p==BEGINNING)?(OFFSET(ldptr) +o):o,p)
+#endif
+#ifndef FREAD
+#define FREAD(p,s,n,ldptr) fread(p,s,n,IOPTR(ldptr))
+#endif
+
+/*
+ * Mode flags for the dlopen routine.
+ */
+#undef RTLD_LAZY
+#define RTLD_LAZY 1 /* lazy function call binding */
+#undef RTLD_NOW
+#define RTLD_NOW 2 /* immediate function call binding */
+#undef RTLD_GLOBAL
+#define RTLD_GLOBAL 0x100 /* allow symbols to be global */
+
+/*
+ * To be able to initialize, a library may provide a dl_info structure
+ * that contains functions to be called to initialize and terminate.
+ */
+struct dl_info {
+ void (*init) (void);
+ void (*fini) (void);
+};
+
+
+/*
+ * Forward declarations
+ */
+void *dlopen(const char *path, int mode);
+void *dlsym(void *handle, const char *symbol);
+const char *dlerror(void);
+int dlclose(void *handle);
+
+/*
+ * We simulate dlopen() et al. through a call to load. Because AIX has
+ * no call to find an exported symbol we read the loader section of the
+ * loaded module and build a list of exported symbols and their virtual
+ * address.
+ */
+
+typedef struct {
+ char *name; /* the symbols's name */
+ void *addr; /* its relocated virtual address */
+} Export, *ExportPtr;
+
+/*
+ * xlC uses the following structure to list its constructors and
+ * destructors. This is gleaned from the output of munch.
+ */
+typedef struct {
+ void (*init) (void); /* call static constructors */
+ void (*term) (void); /* call static destructors */
+} Cdtor, *CdtorPtr;
+
+typedef void (*GccCDtorPtr) (void);
+
+/*
+ * The void * handle returned from dlopen is actually a ModulePtr.
+ */
+typedef struct Module {
+ struct Module *next;
+ char *name; /* module name for refcounting */
+ int refCnt; /* the number of references */
+ void *entry; /* entry point from load */
+ struct dl_info *info; /* optional init/terminate functions */
+ CdtorPtr cdtors; /* optional C++ constructors */
+ GccCDtorPtr gcc_ctor; /* g++ constructors --jwe */
+ GccCDtorPtr gcc_dtor; /* g++ destructors --jwe */
+ int nExports; /* the number of exports found */
+ ExportPtr exports; /* the array of exports */
+} Module, *ModulePtr;
+
+/*
+ * We keep a list of all loaded modules to be able to call the fini
+ * handlers and destructors at atexit() time.
+ */
+static ModulePtr modList;
+
+/*
+ * The last error from one of the dl* routines is kept in static
+ * variables here. Each error is returned only once to the caller.
+ */
+static char errbuf[BUFSIZ];
+static int errvalid;
+
+/*
+ * The `fixed' gcc header files on AIX 3.2.5 provide a prototype for
+ * strdup(). --jwe
+ */
+extern char *strdup(const char *);
+static void caterr(char *);
+static int readExports(ModulePtr);
+static void terminate(void);
+static void *findMain(void);
+
+void *dlopen(const char *path, int mode)
+{
+ register ModulePtr mp;
+ static void *mainModule;
+
+ /*
+ * Upon the first call register a terminate handler that will
+ * close all libraries. Also get a reference to the main module
+ * for use with loadbind.
+ */
+ if (!mainModule) {
+ if ((mainModule = findMain()) == NULL)
+ return NULL;
+ atexit(terminate);
+ }
+ /*
+ * Scan the list of modules if we have the module already loaded.
+ */
+ for (mp = modList; mp; mp = mp->next)
+ if (strcmp(mp->name, path) == 0) {
+ mp->refCnt++;
+ return mp;
+ }
+ if ((mp = (ModulePtr) calloc(1, sizeof(*mp))) == NULL) {
+ errvalid++;
+ strcpy(errbuf, "calloc: ");
+ strcat(errbuf, strerror(errno));
+ return NULL;
+ }
+ if ((mp->name = strdup(path)) == NULL) {
+ errvalid++;
+ strcpy(errbuf, "strdup: ");
+ strcat(errbuf, strerror(errno));
+ free(mp);
+ return NULL;
+ }
+ /*
+ * load should be declared load(const char *...). Thus we
+ * cast the path to a normal char *. Ugly.
+ */
+ if ((mp->entry = (void *) load((char *) path, L_NOAUTODEFER, NULL)) == NULL) {
+ free(mp->name);
+ free(mp);
+ errvalid++;
+ strcpy(errbuf, "dlopen: ");
+ strcat(errbuf, path);
+ strcat(errbuf, ": ");
+ /*
+ * If AIX says the file is not executable, the error
+ * can be further described by querying the loader about
+ * the last error.
+ */
+ if (errno == ENOEXEC) {
+ char *tmp[BUFSIZ / sizeof(char *)];
+ if (loadquery(L_GETMESSAGES, tmp, sizeof(tmp)) == -1)
+ strcpy(errbuf, strerror(errno));
+ else {
+ char **p;
+ for (p = tmp; *p; p++)
+ caterr(*p);
+ }
+ }
+ else
+ strcat(errbuf, strerror(errno));
+ return NULL;
+ }
+ mp->refCnt = 1;
+ mp->next = modList;
+ modList = mp;
+ if (loadbind(0, mainModule, mp->entry) == -1) {
+ dlclose(mp);
+ errvalid++;
+ strcpy(errbuf, "loadbind: ");
+ strcat(errbuf, strerror(errno));
+ return NULL;
+ }
+ /*
+ * If the user wants global binding, loadbind against all other
+ * loaded modules.
+ */
+ if (mode & RTLD_GLOBAL) {
+ register ModulePtr mp1;
+ for (mp1 = mp->next; mp1; mp1 = mp1->next)
+ if (loadbind(0, mp1->entry, mp->entry) == -1) {
+ dlclose(mp);
+ errvalid++;
+ strcpy(errbuf, "loadbind: ");
+ strcat(errbuf, strerror(errno));
+ return NULL;
+ }
+ }
+ if (readExports(mp) == -1) {
+ dlclose(mp);
+ return NULL;
+ }
+ /*
+ * If there is a dl_info structure, call the init function.
+ */
+ if (mp->info = (struct dl_info *) dlsym(mp, "dl_info")) {
+ if (mp->info->init)
+ (*mp->info->init) ();
+ }
+ else
+ errvalid = 0;
+ /*
+ * If the shared object was compiled using xlC we will need
+ * to call static constructors (and later on dlclose destructors).
+ */
+ if (mp->cdtors = (CdtorPtr) dlsym(mp, "__cdtors")) {
+ CdtorPtr cp = mp->cdtors;
+ while (cp->init || cp->term) {
+ if (cp->init && cp->init != (void (*)(void)) 0xffffffff)
+ (*cp->init) ();
+ cp++;
+ }
+ /*
+ * If the shared object was compiled using g++, we will need
+ * to call global constructors using the _GLOBAL__DI function,
+ * and later, global destructors using the _GLOBAL_DD
+ * funciton. --jwe
+ */
+ }
+ else if (mp->gcc_ctor = (GccCDtorPtr) dlsym(mp, "_GLOBAL__DI")) {
+ (*mp->gcc_ctor) ();
+ mp->gcc_dtor = (GccCDtorPtr) dlsym(mp, "_GLOBAL__DD");
+ }
+ else
+ errvalid = 0;
+ return mp;
+}
+
+/*
+ * Attempt to decipher an AIX loader error message and append it
+ * to our static error message buffer.
+ */
+static void caterr(char *s)
+{
+ register char *p = s;
+
+ while (*p >= '0' && *p <= '9')
+ p++;
+ switch (atoi(s)) {
+ case L_ERROR_TOOMANY:
+ strcat(errbuf, "to many errors");
+ break;
+ case L_ERROR_NOLIB:
+ strcat(errbuf, "can't load library");
+ strcat(errbuf, p);
+ break;
+ case L_ERROR_UNDEF:
+ strcat(errbuf, "can't find symbol");
+ strcat(errbuf, p);
+ break;
+ case L_ERROR_RLDBAD:
+ strcat(errbuf, "bad RLD");
+ strcat(errbuf, p);
+ break;
+ case L_ERROR_FORMAT:
+ strcat(errbuf, "bad exec format in");
+ strcat(errbuf, p);
+ break;
+ case L_ERROR_ERRNO:
+ strcat(errbuf, strerror(atoi(++p)));
+ break;
+ default:
+ strcat(errbuf, s);
+ break;
+ }
+}
+
+void *dlsym(void *handle, const char *symbol)
+{
+ register ModulePtr mp = (ModulePtr) handle;
+ register ExportPtr ep;
+ register int i;
+
+ /*
+ * Could speed up the search, but I assume that one assigns
+ * the result to function pointers anyways.
+ */
+ for (ep = mp->exports, i = mp->nExports; i; i--, ep++)
+ if (strcmp(ep->name, symbol) == 0)
+ return ep->addr;
+ errvalid++;
+ strcpy(errbuf, "dlsym: undefined symbol ");
+ strcat(errbuf, symbol);
+ return NULL;
+}
+
+const char *dlerror(void)
+{
+ if (errvalid) {
+ errvalid = 0;
+ return errbuf;
+ }
+ return NULL;
+}
+
+int dlclose(void *handle)
+{
+ register ModulePtr mp = (ModulePtr) handle;
+ int result;
+ register ModulePtr mp1;
+
+ if (--mp->refCnt > 0)
+ return 0;
+ if (mp->info && mp->info->fini)
+ (*mp->info->fini) ();
+ if (mp->cdtors) {
+ CdtorPtr cp = mp->cdtors;
+ while (cp->init || cp->term) {
+ if (cp->term && cp->init != (void (*)(void)) 0xffffffff)
+ (*cp->term) ();
+ cp++;
+ }
+ /*
+ * If the function to handle global destructors for g++
+ * exists, call it. --jwe
+ */
+ }
+ else if (mp->gcc_dtor) {
+ (*mp->gcc_dtor) ();
+ }
+ result = unload(mp->entry);
+ if (result == -1) {
+ errvalid++;
+ strcpy(errbuf, strerror(errno));
+ }
+ if (mp->exports) {
+ register ExportPtr ep;
+ register int i;
+ for (ep = mp->exports, i = mp->nExports; i; i--, ep++)
+ if (ep->name)
+ free(ep->name);
+ free(mp->exports);
+ }
+ if (mp == modList)
+ modList = mp->next;
+ else {
+ for (mp1 = modList; mp1; mp1 = mp1->next)
+ if (mp1->next == mp) {
+ mp1->next = mp->next;
+ break;
+ }
+ }
+ free(mp->name);
+ free(mp);
+ return result;
+}
+
+static void terminate(void)
+{
+ while (modList)
+ dlclose(modList);
+}
+
+/*
+ * Build the export table from the XCOFF .loader section.
+ */
+static int readExports(ModulePtr mp)
+{
+ LDFILE *ldp = NULL;
+ SCNHDR sh, shdata;
+ LDHDR *lhp;
+ char *ldbuf;
+ LDSYM *ls;
+ int i;
+ ExportPtr ep;
+ struct ld_info *lp;
+ char *buf;
+ int size = 4 * 1024;
+ void *dataorg;
+
+ /*
+ * The module might be loaded due to the LIBPATH
+ * environment variable. Search for the loaded
+ * module using L_GETINFO.
+ */
+ if ((buf = malloc(size)) == NULL) {
+ errvalid++;
+ strcpy(errbuf, "readExports: ");
+ strcat(errbuf, strerror(errno));
+ return -1;
+ }
+ while ((i = loadquery(L_GETINFO, buf, size)) == -1 && errno == ENOMEM) {
+ free(buf);
+ size += 4 * 1024;
+ if ((buf = malloc(size)) == NULL) {
+ errvalid++;
+ strcpy(errbuf, "readExports: ");
+ strcat(errbuf, strerror(errno));
+ return -1;
+ }
+ }
+ if (i == -1) {
+ errvalid++;
+ strcpy(errbuf, "readExports: ");
+ strcat(errbuf, strerror(errno));
+ free(buf);
+ return -1;
+ }
+ /*
+ * Traverse the list of loaded modules. The entry point
+ * returned by load() does actually point to the TOC
+ * entry contained in the data segment.
+ */
+ lp = (struct ld_info *) buf;
+ while (lp) {
+ if ((unsigned long) mp->entry >= (unsigned long) lp->ldinfo_dataorg &&
+ (unsigned long) mp->entry < (unsigned long) lp->ldinfo_dataorg +
+ lp->ldinfo_datasize) {
+ dataorg = lp->ldinfo_dataorg;
+ ldp = ldopen(lp->ldinfo_filename, ldp);
+ break;
+ }
+ if (lp->ldinfo_next == 0)
+ lp = NULL;
+ else
+ lp = (struct ld_info *) ((char *) lp + lp->ldinfo_next);
+ }
+ free(buf);
+ if (!ldp) {
+ errvalid++;
+ strcpy(errbuf, "readExports: ");
+ strcat(errbuf, strerror(errno));
+ return -1;
+ }
+ if (TYPE(ldp) != U802TOCMAGIC) {
+ errvalid++;
+ strcpy(errbuf, "readExports: bad magic");
+ while (ldclose(ldp) == FAILURE);
+ return -1;
+ }
+ /*
+ * Get the padding for the data section. This is needed for
+ * AIX 4.1 compilers. This is used when building the final
+ * function pointer to the exported symbol.
+ */
+ if (ldnshread(ldp, _DATA, &shdata) != SUCCESS) {
+ errvalid++;
+ strcpy(errbuf, "readExports: cannot read data section header");
+ while (ldclose(ldp) == FAILURE);
+ return -1;
+ }
+ if (ldnshread(ldp, _LOADER, &sh) != SUCCESS) {
+ errvalid++;
+ strcpy(errbuf, "readExports: cannot read loader section header");
+ while (ldclose(ldp) == FAILURE);
+ return -1;
+ }
+ /*
+ * We read the complete loader section in one chunk, this makes
+ * finding long symbol names residing in the string table easier.
+ */
+ if ((ldbuf = (char *) malloc(sh.s_size)) == NULL) {
+ errvalid++;
+ strcpy(errbuf, "readExports: ");
+ strcat(errbuf, strerror(errno));
+ while (ldclose(ldp) == FAILURE);
+ return -1;
+ }
+ if (FSEEK(ldp, sh.s_scnptr, BEGINNING) != OKFSEEK) {
+ errvalid++;
+ strcpy(errbuf, "readExports: cannot seek to loader section");
+ free(ldbuf);
+ while (ldclose(ldp) == FAILURE);
+ return -1;
+ }
+ if (FREAD(ldbuf, sh.s_size, 1, ldp) != 1) {
+ errvalid++;
+ strcpy(errbuf, "readExports: cannot read loader section");
+ free(ldbuf);
+ while (ldclose(ldp) == FAILURE);
+ return -1;
+ }
+ lhp = (LDHDR *) ldbuf;
+ ls = (LDSYM *) (ldbuf + LDHDRSZ);
+ /*
+ * Count the number of exports to include in our export table.
+ */
+ for (i = lhp->l_nsyms; i; i--, ls++) {
+ if (!LDR_EXPORT(*ls))
+ continue;
+ mp->nExports++;
+ }
+ if ((mp->exports = (ExportPtr) calloc(mp->nExports, sizeof(*mp->exports))) == NULL) {
+ errvalid++;
+ strcpy(errbuf, "readExports: ");
+ strcat(errbuf, strerror(errno));
+ free(ldbuf);
+ while (ldclose(ldp) == FAILURE);
+ return -1;
+ }
+ /*
+ * Fill in the export table. All entries are relative to
+ * the beginning of the data origin.
+ */
+ ep = mp->exports;
+ ls = (LDSYM *) (ldbuf + LDHDRSZ);
+ for (i = lhp->l_nsyms; i; i--, ls++) {
+ char *symname;
+ char tmpsym[SYMNMLEN + 1];
+ if (!LDR_EXPORT(*ls))
+ continue;
+ if (ls->l_zeroes == 0)
+ symname = ls->l_offset + lhp->l_stoff + ldbuf;
+ else {
+ /*
+ * The l_name member is not zero terminated, we
+ * must copy the first SYMNMLEN chars and make
+ * sure we have a zero byte at the end.
+ */
+ strncpy(tmpsym, ls->l_name, SYMNMLEN);
+ tmpsym[SYMNMLEN] = '\0';
+ symname = tmpsym;
+ }
+ ep->name = strdup(symname);
+ ep->addr = (void *) ((unsigned long) dataorg +
+ ls->l_value - shdata.s_vaddr);
+ ep++;
+ }
+ free(ldbuf);
+ while (ldclose(ldp) == FAILURE);
+ return 0;
+}
+
+/*
+ * Find the main modules data origin. This is used as export pointer
+ * for loadbind() to be able to resolve references to the main part.
+ */
+static void *findMain(void)
+{
+ struct ld_info *lp;
+ char *buf;
+ int size = 4 * 1024;
+ int i;
+ void *ret;
+
+ if ((buf = malloc(size)) == NULL) {
+ errvalid++;
+ strcpy(errbuf, "findMain: ");
+ strcat(errbuf, strerror(errno));
+ return NULL;
+ }
+ while ((i = loadquery(L_GETINFO, buf, size)) == -1 && errno == ENOMEM) {
+ free(buf);
+ size += 4 * 1024;
+ if ((buf = malloc(size)) == NULL) {
+ errvalid++;
+ strcpy(errbuf, "findMain: ");
+ strcat(errbuf, strerror(errno));
+ return NULL;
+ }
+ }
+ if (i == -1) {
+ errvalid++;
+ strcpy(errbuf, "findMain: ");
+ strcat(errbuf, strerror(errno));
+ free(buf);
+ return NULL;
+ }
+ /*
+ * The first entry is the main module. The data segment
+ * starts with the TOC entries for all exports, so the
+ * data segment origin works as argument for loadbind.
+ */
+ lp = (struct ld_info *) buf;
+ ret = lp->ldinfo_dataorg;
+ free(buf);
+ return ret;
+}
diff --git a/APACHE_1_3_42/src/os/unix/os-inline.c b/APACHE_1_3_42/src/os/unix/os-inline.c
new file mode 100644
index 0000000000..26801eef41
--- /dev/null
+++ b/APACHE_1_3_42/src/os/unix/os-inline.c
@@ -0,0 +1,47 @@
+/* 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.
+ */
+
+/*
+ * This file contains functions which can be inlined if the compiler
+ * has an "inline" modifier. Because of this, this file is both a
+ * header file and a compilable module.
+ *
+ * Only inlineable functions should be defined in here. They must all
+ * include the INLINE modifier.
+ *
+ * If the compiler supports inline, this file will be #included as a
+ * header file from os.h to create all the inline function
+ * definitions. INLINE will be defined to whatever is required on
+ * function definitions to make them inline declarations.
+ *
+ * If the compiler does not support inline, this file will be compiled
+ * as a normal C file into libos.a (along with os.c). In this case
+ * INLINE will _not_ be set so we can use this to test if we are
+ * compiling this source file.
+ */
+
+#ifndef INLINE
+#define INLINE
+
+/* Anything required only when compiling */
+#include "ap_config.h"
+
+#endif
+
+INLINE int ap_os_is_path_absolute(const char *file)
+{
+ return file[0] == '/';
+}
diff --git a/APACHE_1_3_42/src/os/unix/os.c b/APACHE_1_3_42/src/os/unix/os.c
new file mode 100644
index 0000000000..8d05fa7991
--- /dev/null
+++ b/APACHE_1_3_42/src/os/unix/os.c
@@ -0,0 +1,209 @@
+/* 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.
+ */
+
+/*
+ * This file will include OS specific functions which are not inlineable.
+ * Any inlineable functions should be defined in os-inline.c instead.
+ */
+
+#include "ap_config.h"
+#include "os.h"
+
+
+/* some linkers complain unless there's at least one function in each
+ * .o file... and extra prototype is for gcc -Wmissing-prototypes
+ */
+extern void ap_is_not_here(void);
+void ap_is_not_here(void) {}
+
+/*
+ * Insert the DSO emulation code for AIX for releases of AIX prior
+ * to 4.3. Use the native DSO code for 4.3 and later.
+ */
+#if defined(AIX) && !defined(NO_DL_NEEDED)
+#if AIX < 430
+#include "os-aix-dso.c"
+#endif
+#endif
+
+/*
+ * Abstraction layer for loading
+ * Apache modules under run-time via
+ * dynamic shared object (DSO) mechanism
+ */
+
+#ifdef HAVE_DYLD /* NeXT/Apple dynamic linker */
+#include <mach-o/dyld.h>
+
+/*
+ * NSUnlinkModule() is a noop in old versions of dyld.
+ * Let's install an error handler to deal with "multiply defined
+ * symbol" runtime errors.
+ */
+#ifdef DYLD_CANT_UNLOAD
+#include "httpd.h"
+#include "http_log.h"
+
+ap_private_extern
+void undefined_symbol_handler(const char *symbolName)
+{
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_EMERG, NULL,
+ "dyld found undefined symbol: %s\n"
+ "Aborting.\n",
+ symbolName);
+ abort();
+}
+
+ap_private_extern
+NSModule multiple_symbol_handler (NSSymbol s, NSModule old, NSModule new)
+{
+ /*
+ * Since we can't unload symbols, we're going to run into this
+ * every time we reload a module. Workaround here is to just
+ * rebind to the new symbol, and forget about the old one.
+ * This is crummy, because it's basically a memory leak.
+ */
+
+#ifdef DEBUG
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_DEBUG, NULL,
+ "dyld found a multiply defined symbol %s in modules:\n"
+ "%s\n%s\n",
+ NSNameOfSymbol(s),
+ NSNameOfModule(old), NSNameOfModule(new));
+#endif
+
+ return(new);
+}
+
+ap_private_extern
+void linkEdit_symbol_handler (NSLinkEditErrors c, int errorNumber,
+ const char *fileName, const char *errorString)
+{
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_EMERG, NULL,
+ "dyld errors during link edit for file %s\n%s\n",
+ fileName, errorString);
+ abort();
+}
+
+#endif /* DYLD_CANT_UNLOAD */
+#endif /* HAVE_DYLD */
+
+void ap_os_dso_init(void)
+{
+#if defined(HAVE_DYLD) && defined(DYLD_CANT_UNLOAD)
+ NSLinkEditErrorHandlers handlers;
+
+ handlers.undefined = undefined_symbol_handler;
+ handlers.multiple = multiple_symbol_handler;
+ handlers.linkEdit = linkEdit_symbol_handler;
+
+ NSInstallLinkEditErrorHandlers(&handlers);
+#endif
+}
+
+void *ap_os_dso_load(const char *path)
+{
+#if defined(HPUX) || defined(HPUX10) || defined(HPUX11)
+ shl_t handle;
+ handle = shl_load(path, BIND_IMMEDIATE|BIND_VERBOSE, 0L);
+ return (void *)handle;
+
+#elif defined(HAVE_DYLD)
+ NSObjectFileImage image;
+ NSModule handle;
+ if (NSCreateObjectFileImageFromFile(path, &image) !=
+ NSObjectFileImageSuccess)
+ return NULL;
+#if defined(NSLINKMODULE_OPTION_RETURN_ON_ERROR) && defined(NSLINKMODULE_OPTION_NONE)
+ handle = NSLinkModule(image, path,
+ NSLINKMODULE_OPTION_RETURN_ON_ERROR |
+ NSLINKMODULE_OPTION_NONE);
+#else
+ handle = NSLinkModule(image, path, FALSE);
+#endif
+ NSDestroyObjectFileImage(image);
+ return handle;
+
+#elif defined(OSF1) || defined(SEQUENT) ||\
+ (defined(__FreeBSD_version) && (__FreeBSD_version >= 220000))
+ return dlopen((char *)path, RTLD_NOW | RTLD_GLOBAL);
+
+#else
+ return dlopen(path, RTLD_NOW | RTLD_GLOBAL);
+#endif
+}
+
+void ap_os_dso_unload(void *handle)
+{
+#if defined(HPUX) || defined(HPUX10) || defined(HPUX11)
+ shl_unload((shl_t)handle);
+
+#elif defined(HAVE_DYLD)
+ NSUnLinkModule(handle,FALSE);
+
+#else
+ dlclose(handle);
+#endif
+
+ return;
+}
+
+void *ap_os_dso_sym(void *handle, const char *symname)
+{
+#if defined(HPUX) || defined(HPUX10) || defined(HPUX11)
+ void *symaddr = NULL;
+ int status;
+
+ errno = 0;
+ status = shl_findsym((shl_t *)&handle, symname, TYPE_PROCEDURE, &symaddr);
+ if (status == -1 && errno == 0) /* try TYPE_DATA instead */
+ status = shl_findsym((shl_t *)&handle, symname, TYPE_DATA, &symaddr);
+ return (status == -1 ? NULL : symaddr);
+
+#elif defined(HAVE_DYLD)
+ NSSymbol symbol;
+ char *symname2 = (char*)malloc(sizeof(char)*(strlen(symname)+2));
+ sprintf(symname2, "_%s", symname);
+ symbol = NSLookupAndBindSymbol(symname2);
+ free(symname2);
+ return NSAddressOfSymbol(symbol);
+
+#elif defined(DLSYM_NEEDS_UNDERSCORE)
+ char *symbol = (char*)malloc(sizeof(char)*(strlen(symname)+2));
+ void *retval;
+ sprintf(symbol, "_%s", symname);
+ retval = dlsym(handle, symbol);
+ free(symbol);
+ return retval;
+
+#elif defined(SEQUENT)
+ return dlsym(handle, (char *)symname);
+
+#else
+ return dlsym(handle, symname);
+#endif
+}
+
+const char *ap_os_dso_error(void)
+{
+#if defined(HPUX) || defined(HPUX10) || defined(HPUX11)
+ return strerror(errno);
+#elif defined(HAVE_DYLD)
+ return NULL;
+#else
+ return dlerror();
+#endif
+}
diff --git a/APACHE_1_3_42/src/os/unix/os.h b/APACHE_1_3_42/src/os/unix/os.h
new file mode 100644
index 0000000000..9b0ece29a9
--- /dev/null
+++ b/APACHE_1_3_42/src/os/unix/os.h
@@ -0,0 +1,109 @@
+/* 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.
+ */
+
+#ifndef APACHE_OS_H
+#define APACHE_OS_H
+
+#include "ap_config.h"
+
+#ifndef PLATFORM
+#define PLATFORM "Unix"
+#endif
+
+/*
+ * 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
+ */
+
+#if !defined(INLINE) && defined(USE_GNU_INLINE)
+/* Compiler supports inline, so include the inlineable functions as
+ * part of the header
+ */
+#define INLINE extern ap_inline
+
+INLINE int ap_os_is_path_absolute(const char *file);
+
+#include "os-inline.c"
+
+#else
+
+/* Compiler does not support inline, so prototype the inlineable functions
+ * as normal
+ */
+extern int ap_os_is_path_absolute(const char *file);
+#endif
+
+/* Other ap_os_ routines not used by this platform */
+
+#define ap_os_is_filename_valid(f) (1)
+#define ap_os_kill(pid, sig) kill(pid, sig)
+
+/*
+ * Abstraction layer for loading
+ * Apache modules under run-time via
+ * dynamic shared object (DSO) mechanism
+ */
+
+#ifdef HAVE_DL_H
+#include <dl.h>
+#endif
+
+/*
+ * Do not use native AIX DSO support on releases of AIX prior
+ * to 4.3.
+ */
+#ifdef AIX
+#if AIX < 430
+#undef HAVE_DLFCN_H
+#endif
+#endif
+
+#ifdef HAVE_DLFCN_H
+#include <dlfcn.h>
+#else
+void *dlopen(const char *, int);
+int dlclose(void *);
+void *dlsym(void *, const char *);
+const char *dlerror(void);
+#endif
+
+/* probably on an older system that doesn't support RTLD_NOW or RTLD_LAZY.
+ * The below define is a lie since we are really doing RTLD_LAZY since the
+ * system doesn't support RTLD_NOW.
+ */
+#ifndef RTLD_NOW
+#define RTLD_NOW 1
+#endif
+
+#ifndef RTLD_GLOBAL
+#define RTLD_GLOBAL 0
+#endif
+
+#if (defined(__FreeBSD__) ||\
+ defined(__OpenBSD__) ||\
+ defined(__NetBSD__) ) && !defined(__ELF__)
+#define DLSYM_NEEDS_UNDERSCORE
+#endif
+
+#define ap_os_dso_handle_t void *
+void ap_os_dso_init(void);
+void * ap_os_dso_load(const char *);
+void ap_os_dso_unload(void *);
+void * ap_os_dso_sym(void *, const char *);
+const char *ap_os_dso_error(void);
+
+#endif /* !APACHE_OS_H */
diff --git a/APACHE_1_3_42/src/os/win32/ApacheOS.dep b/APACHE_1_3_42/src/os/win32/ApacheOS.dep
new file mode 100644
index 0000000000..fb0b33fb43
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/ApacheOS.dep
@@ -0,0 +1,5 @@
+# Microsoft Developer Studio Generated Dependency File, included by ApacheOS.mak
+
+.\os.c : \
+ ".\os.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/ApacheOS.dsp b/APACHE_1_3_42/src/os/win32/ApacheOS.dsp
new file mode 100644
index 0000000000..004dd7a70c
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/ApacheOS.dsp
@@ -0,0 +1,89 @@
+# Microsoft Developer Studio Project File - Name="ApacheOS" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=ApacheOS - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "ApacheOS.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "ApacheOS.mak" CFG="ApacheOS - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ApacheOS - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "ApacheOS - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+
+!IF "$(CFG)" == "ApacheOS - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "LibR"
+# PROP BASE Intermediate_Dir "LibR"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "LibR"
+# PROP Intermediate_Dir "LibR"
+# PROP Target_Dir ""
+RSC=rc.exe
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fd"LibR\ApacheOS" /FD /c
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "ApacheOS - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "LibD"
+# PROP BASE Intermediate_Dir "LibD"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "LibD"
+# PROP Intermediate_Dir "LibD"
+# PROP Target_Dir ""
+RSC=rc.exe
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fd"LibD\ApacheOS" /FD /c
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "ApacheOS - Win32 Release"
+# Name "ApacheOS - Win32 Debug"
+# Begin Source File
+
+SOURCE=.\os.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\os.h
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/ApacheOS.mak b/APACHE_1_3_42/src/os/win32/ApacheOS.mak
new file mode 100644
index 0000000000..20f6fcbcbb
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/ApacheOS.mak
@@ -0,0 +1,184 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on ApacheOS.dsp
+!IF "$(CFG)" == ""
+CFG=ApacheOS - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to ApacheOS - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "ApacheOS - Win32 Release" && "$(CFG)" != "ApacheOS - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "ApacheOS.mak" CFG="ApacheOS - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ApacheOS - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "ApacheOS - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "ApacheOS - Win32 Release"
+
+OUTDIR=.\LibR
+INTDIR=.\LibR
+# Begin Custom Macros
+OutDir=.\LibR
+# End Custom Macros
+
+ALL : "$(OUTDIR)\ApacheOS.lib"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\ApacheOS.idb"
+ -@erase "$(INTDIR)\ApacheOS.pdb"
+ -@erase "$(INTDIR)\os.obj"
+ -@erase "$(OUTDIR)\ApacheOS.lib"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\ApacheOS" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\ApacheOS.bsc"
+BSC32_SBRS= \
+
+LIB32=link.exe -lib
+LIB32_FLAGS=/nologo /out:"$(OUTDIR)\ApacheOS.lib"
+LIB32_OBJS= \
+ "$(INTDIR)\os.obj"
+
+"$(OUTDIR)\ApacheOS.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
+ $(LIB32) @<<
+ $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "ApacheOS - Win32 Debug"
+
+OUTDIR=.\LibD
+INTDIR=.\LibD
+# Begin Custom Macros
+OutDir=.\LibD
+# End Custom Macros
+
+ALL : "$(OUTDIR)\ApacheOS.lib"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\ApacheOS.idb"
+ -@erase "$(INTDIR)\ApacheOS.pdb"
+ -@erase "$(INTDIR)\os.obj"
+ -@erase "$(OUTDIR)\ApacheOS.lib"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\ApacheOS" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\ApacheOS.bsc"
+BSC32_SBRS= \
+
+LIB32=link.exe -lib
+LIB32_FLAGS=/nologo /out:"$(OUTDIR)\ApacheOS.lib"
+LIB32_OBJS= \
+ "$(INTDIR)\os.obj"
+
+"$(OUTDIR)\ApacheOS.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
+ $(LIB32) @<<
+ $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("ApacheOS.dep")
+!INCLUDE "ApacheOS.dep"
+!ELSE
+!MESSAGE Warning: cannot find "ApacheOS.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "ApacheOS - Win32 Release" || "$(CFG)" == "ApacheOS - Win32 Debug"
+SOURCE=.\os.c
+
+"$(INTDIR)\os.obj" : $(SOURCE) "$(INTDIR)"
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/BaseAddr.ref b/APACHE_1_3_42/src/os/win32/BaseAddr.ref
new file mode 100644
index 0000000000..6ac85585ba
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/BaseAddr.ref
@@ -0,0 +1,32 @@
+; os/win32/BaseAddr.ref contains the central repository
+; of all module base addresses
+; to avoid relocation
+
+; WARNING: Update this file by reviewing the image size
+; of the debug-generated dll files; release images
+; should fit in the larger debug-sized reservations.
+; Always allow some slack (if >C000, size at 20000)
+; to allow for discrepancies between builds.
+
+; module name base-address max-size
+
+ApacheCore 0x6FF60000 0x000A0000
+xmlparse 0x6FF40000 0x00020000
+xmltok 0x6FF10000 0x00030000
+mod_auth_anon 0x6FEF0000 0x00010000
+mod_auth_digest 0x6FED0000 0x00020000
+mod_cern_meta 0x6FEC0000 0x00010000
+mod_digest 0x6FEB0000 0x00010000
+mod_expires 0x6FEA0000 0x00010000
+mod_headers 0x6FE90000 0x00010000
+mod_info 0x6FE80000 0x00010000
+mod_rewrite 0x6FE60000 0x00020000
+mod_speling 0x6FE50000 0x00010000
+mod_status 0x6FE40000 0x00010000
+mod_usertrack 0x6FE30000 0x00010000
+mod_proxy 0x6FE10000 0x00020000
+mod_auth_dbm 0x6FE00000 0x00010000
+mod_unique_id 0x6FDF0000 0x00010000
+mod_vhost_alias 0x6FDE0000 0x00010000
+mod_mime_magic 0x6FDD0000 0x00010000
+mod_log_forensic 0x6FDC0000 0x00010000
diff --git a/APACHE_1_3_42/src/os/win32/MakeModuleMak.cpp b/APACHE_1_3_42/src/os/win32/MakeModuleMak.cpp
new file mode 100644
index 0000000000..f5120c392e
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/MakeModuleMak.cpp
@@ -0,0 +1,75 @@
+/* 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.
+ */
+
+#include <fstream.h>
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+void MakeMake(const char *szModule,const char *szSource)
+ {
+ ifstream ifs("Module.mak.tmpl",ios::nocreate);
+ assert(ifs.good());
+
+ char buf[1024];
+ sprintf(buf,"%s.mak",szModule);
+ ofstream ofs(buf,ios::trunc);
+ for( ; ; )
+ {
+ ifs.getline(buf,sizeof buf);
+ if(ifs.eof())
+ break;
+ for(char *s=buf ; *s ; )
+ {
+ char *p=strchr(s,'%');
+ if(!p)
+ {
+ ofs << s << '\n';
+ break;
+ }
+ if(!strncmp(p,"%Module%",8))
+ {
+ ofs.write(s,p-s);
+ ofs << szModule;
+ s=p+8;
+ }
+ else if(!strncmp(p,"%Source%",8))
+ {
+ ofs.write(s,p-s);
+ ofs << szSource;
+ s=p+8;
+ }
+ else
+ {
+ ofs.write(s,p-s+1);
+ s=p+1;
+ }
+ }
+ }
+ }
+
+void main(int argc,char **argv)
+ {
+ if(argc < 2 || (argc%2) != 1)
+ {
+ cerr << argv[0] << " [<module name> <source file>]+\n";
+ exit(1);
+ }
+ for(int n=1 ; n < argc ; n+=2)
+ MakeMake(argv[n],argv[n+1]);
+ }
+
diff --git a/APACHE_1_3_42/src/os/win32/Module.mak.tmpl b/APACHE_1_3_42/src/os/win32/Module.mak.tmpl
new file mode 100644
index 0000000000..4f6f2e1be9
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/Module.mak.tmpl
@@ -0,0 +1,230 @@
+# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+!IF "$(CFG)" == ""
+CFG=%Module% - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to %Module% - Win32\
+ Debug.
+!ENDIF
+
+!IF "$(CFG)" != "%Module% - Win32 Release" && "$(CFG)" !=\
+ "%Module% - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE on this makefile
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "%Module%.mak"\
+ CFG="%Module% - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "%Module% - Win32 Release" (based on\
+ "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "%Module% - Win32 Debug" (based on\
+ "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+################################################################################
+# Begin Project
+# PROP Target_Last_Scanned "%Module% - Win32 Debug"
+MTL=mktyplib.exe
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "%Module% - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "%Module%R"
+# PROP Intermediate_Dir "%Module%R"
+# PROP Target_Dir ""
+OUTDIR=.\%Module%R
+INTDIR=.\%Module%R
+
+ALL : "$(OUTDIR)\%Module%.dll"
+
+CLEAN :
+ -@erase "$(INTDIR)\%Source%.obj"
+ -@erase "$(OUTDIR)\%Module%.dll"
+ -@erase "$(OUTDIR)\%Module%.exp"
+ -@erase "$(OUTDIR)\%Module%.lib"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\regex" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
+CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\regex" /D "WIN32" /D "NDEBUG" /D\
+ "_WINDOWS" /Fp"$(INTDIR)/%Module%.pch" /YX /Fo"$(INTDIR)/" /c
+CPP_OBJS=.\%Module%R/
+CPP_SBRS=.\.
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /win32
+MTL_PROJ=/nologo /D "NDEBUG" /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/%Module%.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 ..\CoreR\ApacheCore.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+LINK32_FLAGS=..\CoreR\ApacheCore.lib kernel32.lib user32.lib gdi32.lib\
+ winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib\
+ uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll\
+ /incremental:no /pdb:"$(OUTDIR)/%Module%.pdb" /machine:I386\
+ /out:"$(OUTDIR)/%Module%.dll"\
+ /implib:"$(OUTDIR)/%Module%.lib"
+LINK32_OBJS= \
+ "$(INTDIR)\%Source%.obj"
+
+"$(OUTDIR)\%Module%.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "%Module% - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "%Module%D"
+# PROP Intermediate_Dir "%Module%D"
+# PROP Target_Dir ""
+OUTDIR=.\%Module%D
+INTDIR=.\%Module%D
+
+ALL : "$(OUTDIR)\%Module%.dll"
+
+CLEAN :
+ -@erase "$(INTDIR)\%Source%.obj"
+ -@erase "$(INTDIR)\vc40.idb"
+ -@erase "$(INTDIR)\vc40.pdb"
+ -@erase "$(OUTDIR)\%Module%.dll"
+ -@erase "$(OUTDIR)\%Module%.exp"
+ -@erase "$(OUTDIR)\%Module%.ilk"
+ -@erase "$(OUTDIR)\%Module%.lib"
+ -@erase "$(OUTDIR)\%Module%.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\regex" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\regex" /D "WIN32" /D "_DEBUG"\
+ /D "_WINDOWS" /Fp"$(INTDIR)/%Module%.pch" /YX /Fo"$(INTDIR)/"\
+ /Fd"$(INTDIR)/" /c
+CPP_OBJS=.\%Module%D/
+CPP_SBRS=.\.
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /win32
+MTL_PROJ=/nologo /D "_DEBUG" /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/%Module%.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
+# ADD LINK32 ..\CoreD\ApacheCore.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
+LINK32_FLAGS=..\CoreD\ApacheCore.lib kernel32.lib user32.lib gdi32.lib\
+ winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib\
+ uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll\
+ /incremental:yes /pdb:"$(OUTDIR)/%Module%.pdb" /debug /machine:I386\
+ /out:"$(OUTDIR)/%Module%.dll"\
+ /implib:"$(OUTDIR)/%Module%.lib"
+LINK32_OBJS= \
+ "$(INTDIR)\%Source%.obj"
+
+"$(OUTDIR)\%Module%.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+.c{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.cpp{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.cxx{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.c{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+.cpp{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+.cxx{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+################################################################################
+# Begin Target
+
+# Name "%Module% - Win32 Release"
+# Name "%Module% - Win32 Debug"
+
+!IF "$(CFG)" == "%Module% - Win32 Release"
+
+!ELSEIF "$(CFG)" == "%Module% - Win32 Debug"
+
+!ENDIF
+
+################################################################################
+# Begin Source File
+
+SOURCE=\work\apache\src\%Source%.c
+DEP_CPP_MOD_A=\
+ "..\ap_alloc.h"\
+ "..\buff.h"\
+ "..\conf.h"\
+ "..\http_config.h"\
+ "..\http_core.h"\
+ "..\http_log.h"\
+ "..\http_request.h"\
+ "..\httpd.h"\
+ "..\regex\regex.h"\
+ "..\ap_mmn.h"\
+ ".\readdir.h"\
+ {$(INCLUDE)}"\sys\stat.h"\
+ {$(INCLUDE)}"\sys\types.h"\
+
+NODEP_CPP_MOD_A=\
+ "..\sfio.h"\
+
+
+"$(INTDIR)\%Source%.obj" : $(SOURCE) $(DEP_CPP_MOD_A) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+# End Source File
+# End Target
+# End Project
+################################################################################
diff --git a/APACHE_1_3_42/src/os/win32/Win9xConHook.c b/APACHE_1_3_42/src/os/win32/Win9xConHook.c
new file mode 100644
index 0000000000..a352dd1b58
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/Win9xConHook.c
@@ -0,0 +1,697 @@
+/* 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.
+ */
+
+#ifdef WIN32
+
+/*
+ * Win9xConHook.dll - a hook proc to clean up Win95/98 console behavior.
+ *
+ * It is well(?) documented by Microsoft that the Win9x HandlerRoutine
+ * hooked by the SetConsoleCtrlHandler never receives the CTRL_CLOSE_EVENT,
+ * CTRL_LOGOFF_EVENT or CTRL_SHUTDOWN_EVENT signals.
+ *
+ * It is possible to have a second window to monitor the WM_ENDSESSION
+ * message, but the close button still fails..
+ *
+ * There is a 16bit polling method for the close window option, but this
+ * is CPU intensive and requires thunking.
+ *
+ * Attempts to subclass the 'tty' console fail, since that message thread
+ * is actually owned by the 16 bit winoldap.mod process, although the
+ * window reports it is owned by the process/thread of the console app.
+ *
+ * Win9xConHook is thunks the WM_CLOSE and WM_ENDSESSION messages,
+ * first through a window hook procedure in the winoldap context, into
+ * a subclass WndProc, and on to a second hidden monitor window in the
+ * console application's context that dispatches them to the console app's
+ * registered HandlerRoutine.
+ */
+
+/* This debugging define turns on output to COM1, although you better init
+ * the port first (even using hyperterm). It's the only way to catch the
+ * goings on within system logoff/shutdown.
+ * #define DBG 1
+ */
+
+#include <windows.h>
+
+/* Variables used within any process context:
+ * hookwndmsg is a shared message to send Win9xConHook signals
+ * origwndprop is a wndprop atom to store the orig wndproc of the tty
+ * hookwndprop is a wndprop atom to store the hwnd of the hidden child
+ * is_service reminds us to unmark this process on the way out
+ */
+static UINT hookwndmsg = 0;
+static LPCTSTR origwndprop;
+static LPCTSTR hookwndprop;
+static BOOL is_service = 0;
+//static HMODULE hmodThis = NULL;
+
+/* Variables used within the tty processes' context:
+ * is_tty flags this process; -1 == unknown, 1 == if tty, 0 == if not
+ * hw_tty is the handle of the top level tty in this process context
+ * is_subclassed is toggled to assure DllMain removes the subclass on unload
+ * hmodLock is there to try and prevent this dll from being unloaded if the
+ * hook is removed while we are subclassed
+ */
+static int is_tty = -1;
+static HWND hwtty = NULL;
+static BOOL is_subclassed = 0;
+
+// This simply causes a gpfault the moment it tries to FreeLibrary within
+// the subclass procedure ... not good.
+//static HMODULE hmodLock = NULL;
+
+/* Variables used within the service or console app's context:
+ * hmodHook is the instance handle of this module for registering the hooks
+ * hhkGetMessage is the hook handle for catching Posted messages
+ * hhkGetMessage is the hook handle for catching Sent messages
+ * monitor_hwnd is the invisible window that handles our tty messages
+ * the tty_info strucure is used to pass args into the hidden window's thread
+ */
+static HMODULE hmodHook = NULL;
+static HHOOK hhkGetMessage;
+//static HHOOK hhkCallWndProc;
+static HWND monitor_hwnd = NULL;
+
+typedef struct {
+ PHANDLER_ROUTINE phandler;
+ HINSTANCE instance;
+ HWND parent;
+ INT type;
+ LPCSTR name;
+} tty_info;
+
+/* These are the GetWindowLong offsets for the hidden window's internal info
+ * gwltty_phandler is the address of the app's HandlerRoutine
+ * gwltty_ttywnd is the tty this hidden window will handle messages from
+ */
+#define gwltty_phandler 0
+#define gwltty_ttywnd 4
+
+/* Forward declaration prototypes for internal functions
+ */
+static BOOL CALLBACK EnumttyWindow(HWND wnd, LPARAM retwnd);
+static LRESULT WINAPI RegisterWindows9xService(BOOL set_service);
+static LRESULT CALLBACK ttyConsoleCtrlWndProc(HWND hwnd, UINT msg,
+ WPARAM wParam, LPARAM lParam);
+static DWORD WINAPI ttyConsoleCtrlThread(LPVOID tty);
+static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
+ WPARAM wParam, LPARAM lParam);
+static int HookProc(int hc, HWND *hwnd, UINT *msg,
+ WPARAM *wParam, LPARAM *lParam);
+#ifdef DBG
+static VOID DbgPrintf(LPTSTR fmt, ...);
+#endif
+
+
+/* DllMain is invoked by every process in the entire system that is hooked
+ * by our window hooks, notably the tty processes' context, and by the user
+ * who wants tty messages (the app). Keep it light and simple.
+ */
+BOOL __declspec(dllexport) APIENTRY DllMain(HINSTANCE hModule, ULONG ulReason,
+ LPVOID pctx)
+{
+ if (ulReason == DLL_PROCESS_ATTACH)
+ {
+ //hmodThis = hModule;
+ if (!hookwndmsg) {
+ origwndprop = MAKEINTATOM(GlobalAddAtom("Win9xConHookOrigProc"));
+ hookwndprop = MAKEINTATOM(GlobalAddAtom("Win9xConHookThunkWnd"));
+ hookwndmsg = RegisterWindowMessage("Win9xConHookMsg");
+ }
+#ifdef DBG
+// DbgPrintf("H ProcessAttach:%8.8x\r\n",
+// GetCurrentProcessId());
+#endif
+ }
+ else if ( ulReason == DLL_PROCESS_DETACH )
+ {
+#ifdef DBG
+// DbgPrintf("H ProcessDetach:%8.8x\r\n", GetCurrentProcessId());
+#endif
+ if (monitor_hwnd)
+ SendMessage(monitor_hwnd, WM_DESTROY, 0, 0);
+ if (is_subclassed)
+ SendMessage(hwtty, hookwndmsg, 0, (LPARAM)hwtty);
+ if (hmodHook)
+ {
+ if (hhkGetMessage) {
+ UnhookWindowsHookEx(hhkGetMessage);
+ hhkGetMessage = NULL;
+ }
+ //if (hhkCallWndProc) {
+ // UnhookWindowsHookEx(hhkCallWndProc);
+ // hhkCallWndProc = NULL;
+ //}
+ FreeLibrary(hmodHook);
+ hmodHook = NULL;
+ }
+ if (is_service)
+ RegisterWindows9xService(FALSE);
+ if (hookwndmsg) {
+ GlobalDeleteAtom((ATOM)origwndprop);
+ GlobalDeleteAtom((ATOM)hookwndprop);
+ hookwndmsg = 0;
+ }
+ }
+ return TRUE;
+}
+
+
+/* This group of functions are provided for the service/console app
+ * to register itself a HandlerRoutine to accept tty or service messages
+ */
+
+
+/* Exported function that creates a Win9x 'service' via a hidden window,
+ * that notifies the process via the HandlerRoutine messages.
+ */
+BOOL __declspec(dllexport) WINAPI Windows9xServiceCtrlHandler(
+ PHANDLER_ROUTINE phandler,
+ LPCSTR name)
+{
+ /* If we have not yet done so */
+ FreeConsole();
+
+ if (name)
+ {
+ DWORD tid;
+ HANDLE hThread;
+ /* NOTE: this is static so the module can continue to
+ * access these args while we go on to other things
+ */
+ static tty_info tty;
+ tty.instance = GetModuleHandle(NULL);
+ tty.phandler = phandler;
+ tty.parent = NULL;
+ tty.name = name;
+ tty.type = 2;
+ RegisterWindows9xService(TRUE);
+ hThread = CreateThread(NULL, 0, ttyConsoleCtrlThread,
+ (LPVOID)&tty, 0, &tid);
+ if (hThread)
+ {
+ CloseHandle(hThread);
+ return TRUE;
+ }
+ }
+ else /* remove */
+ {
+ if (monitor_hwnd)
+ SendMessage(monitor_hwnd, WM_DESTROY, 0, 0);
+ RegisterWindows9xService(FALSE);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+/* Exported function that registers a HandlerRoutine to accept missing
+ * Win9x CTRL_EVENTs from the tty window, as NT does without a hassle.
+ * If add is 1 or 2, register the handler, if 2 also mark it as a service.
+ * If add is 0 deregister the handler, and unmark if a service
+ */
+BOOL __declspec(dllexport) WINAPI FixConsoleCtrlHandler(
+ PHANDLER_ROUTINE phandler,
+ INT add)
+{
+ HWND parent;
+
+ if (add)
+ {
+ HANDLE hThread;
+ DWORD tid;
+ /* NOTE: this is static so the module can continue to
+ * access these args while we go on to other things
+ */
+ static tty_info tty;
+ EnumWindows(EnumttyWindow, (LPARAM)&parent);
+ if (!parent) {
+#ifdef DBG
+ DbgPrintf("A EnumttyWindow failed (%d)\r\n", GetLastError());
+#endif
+ return FALSE;
+ }
+ tty.instance = GetModuleHandle(NULL);
+ tty.phandler = phandler;
+ tty.parent = parent;
+ tty.type = add;
+ if (add == 2) {
+ tty.name = "ttyService";
+ RegisterWindows9xService(TRUE);
+ }
+ else
+ tty.name = "ttyMonitor";
+ hThread = CreateThread(NULL, 0, ttyConsoleCtrlThread,
+ (LPVOID)&tty, 0, &tid);
+ if (!hThread)
+ return FALSE;
+ CloseHandle(hThread);
+ hmodHook = LoadLibrary("Win9xConHook.dll");
+ if (hmodHook)
+ {
+ hhkGetMessage = SetWindowsHookEx(WH_GETMESSAGE,
+ (HOOKPROC)GetProcAddress(hmodHook, "GetMsgProc"), hmodHook, 0);
+ //hhkCallWndProc = SetWindowsHookEx(WH_CALLWNDPROC,
+ // (HOOKPROC)GetProcAddress(hmodHook, "CallWndProc"), hmodHook, 0);
+ }
+ return TRUE;
+ }
+ else /* remove */
+ {
+ if (monitor_hwnd) {
+ SendMessage(monitor_hwnd, WM_DESTROY, 0, 0);
+ }
+ if (hmodHook)
+ {
+ if (hhkGetMessage) {
+ UnhookWindowsHookEx(hhkGetMessage);
+ hhkGetMessage = NULL;
+ }
+ //if (hhkCallWndProc) {
+ // UnhookWindowsHookEx(hhkCallWndProc);
+ // hhkCallWndProc = NULL;
+ //}
+ FreeLibrary(hmodHook);
+ hmodHook = NULL;
+ }
+ if (is_service)
+ RegisterWindows9xService(FALSE);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+/* The following internal helpers are only used within the app's context
+ */
+
+/* ttyConsoleCreateThread is the process that runs within the user app's
+ * context. It creates and pumps the messages of a hidden monitor window,
+ * watching for messages from the system, or the associated subclassed tty
+ * window. Things can happen in our context that can't be done from the
+ * tty's context, and visa versa, so the subclass procedure and this hidden
+ * window work together to make it all happen.
+ */
+static DWORD WINAPI ttyConsoleCtrlThread(LPVOID tty)
+{
+ WNDCLASS wc;
+ MSG msg;
+ wc.style = CS_GLOBALCLASS;
+ wc.lpfnWndProc = ttyConsoleCtrlWndProc;
+ wc.cbClsExtra = 0;
+ wc.cbWndExtra = 8;
+ wc.hInstance = NULL;
+ wc.hIcon = NULL;
+ wc.hCursor = NULL;
+ wc.hbrBackground = NULL;
+ wc.lpszMenuName = NULL;
+ if (((tty_info*)tty)->parent)
+ wc.lpszClassName = "ttyConHookChild";
+ else
+ wc.lpszClassName = "ApacheWin95ServiceMonitor";
+
+ if (!RegisterClass(&wc)) {
+#ifdef DBG
+ DbgPrintf("A proc %8.8x Error creating class %s (%d)\r\n",
+ GetCurrentProcessId(), wc.lpszClassName, GetLastError());
+#endif
+ return 0;
+ }
+
+ /* Create an invisible window */
+ monitor_hwnd = CreateWindow(wc.lpszClassName, ((tty_info*)tty)->name,
+ WS_OVERLAPPED & ~WS_VISIBLE,
+ CW_USEDEFAULT, CW_USEDEFAULT,
+ CW_USEDEFAULT, CW_USEDEFAULT,
+ NULL, NULL,
+ ((tty_info*)tty)->instance, tty);
+
+ if (!monitor_hwnd) {
+#ifdef DBG
+ DbgPrintf("A proc %8.8x Error creating window %s %s (%d)\r\n",
+ GetCurrentProcessId(), wc.lpszClassName,
+ ((tty_info*)tty)->name, GetLastError());
+#endif
+ return 0;
+ }
+
+ while (GetMessage(&msg, NULL, 0, 0))
+ {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+
+ /* Tag again as deleted, just in case we missed WM_DESTROY */
+ monitor_hwnd = NULL;
+ return 0;
+}
+
+
+/* This is the WndProc procedure for our invisible window.
+ * When our subclasssed tty window receives the WM_CLOSE, WM_ENDSESSION,
+ * or WM_QUERYENDSESSION messages, the message is dispatched to our hidden
+ * window (this message process), and we call the installed HandlerRoutine
+ * that was registered by the app.
+ */
+static LRESULT CALLBACK ttyConsoleCtrlWndProc(HWND hwnd, UINT msg,
+ WPARAM wParam, LPARAM lParam)
+{
+ if (msg == WM_CREATE)
+ {
+ tty_info *tty = (tty_info*)(((LPCREATESTRUCT)lParam)->lpCreateParams);
+ SetWindowLong(hwnd, gwltty_phandler, (LONG)tty->phandler);
+ SetWindowLong(hwnd, gwltty_ttywnd, (LONG)tty->parent);
+#ifdef DBG
+ DbgPrintf("A proc %8.8x created %8.8x %s for tty wnd %8.8x\r\n",
+ GetCurrentProcessId(), hwnd,
+ tty->name, tty->parent);
+#endif
+ if (tty->parent) {
+ SetProp(tty->parent, hookwndprop, hwnd);
+ PostMessage(tty->parent, hookwndmsg,
+ tty->type, (LPARAM)tty->parent);
+ }
+ return 0;
+ }
+ else if (msg == WM_DESTROY)
+ {
+ HWND parent = (HWND)GetWindowLong(hwnd, gwltty_ttywnd);
+#ifdef DBG
+ DbgPrintf("A proc %8.8x destroyed %8.8x ttyConHookChild\r\n",
+ GetCurrentProcessId(), hwnd);
+#endif
+ if (parent) {
+ RemoveProp(parent, hookwndprop);
+ SendMessage(parent, hookwndmsg, 0, (LPARAM)parent);
+ }
+ monitor_hwnd = NULL;
+ }
+ else if (msg == WM_CLOSE)
+ {
+ PHANDLER_ROUTINE phandler =
+ (PHANDLER_ROUTINE)GetWindowLong(hwnd, gwltty_phandler);
+ LRESULT rv = phandler(CTRL_CLOSE_EVENT);
+#ifdef DBG
+ DbgPrintf("A proc %8.8x invoked CTRL_CLOSE_EVENT "
+ "returning %d\r\n",
+ GetCurrentProcessId(), rv);
+#endif
+ if (rv)
+ return !rv;
+ }
+ else if ((msg == WM_QUERYENDSESSION) || (msg == WM_ENDSESSION))
+ {
+ if (lParam & ENDSESSION_LOGOFF)
+ {
+ PHANDLER_ROUTINE phandler =
+ (PHANDLER_ROUTINE)GetWindowLong(hwnd, gwltty_phandler);
+ LRESULT rv = phandler(CTRL_LOGOFF_EVENT);
+#ifdef DBG
+ DbgPrintf("A proc %8.8x invoked CTRL_LOGOFF_EVENT "
+ "returning %d\r\n",
+ GetCurrentProcessId(), rv);
+#endif
+ if (rv)
+ return ((msg == WM_QUERYENDSESSION) ? rv : !rv);
+ }
+ else
+ {
+ PHANDLER_ROUTINE phandler =
+ (PHANDLER_ROUTINE)GetWindowLong(hwnd, gwltty_phandler);
+ LRESULT rv = phandler(CTRL_SHUTDOWN_EVENT);
+#ifdef DBG
+ DbgPrintf("A proc %8.8x invoked CTRL_SHUTDOWN_EVENT "
+ "returning %d\r\n", GetCurrentProcessId(), rv);
+#endif
+ if (rv)
+ return ((msg == WM_QUERYENDSESSION) ? rv : !rv);
+ }
+ }
+ return (DefWindowProc(hwnd, msg, wParam, lParam));
+}
+
+
+/* The following internal helpers are invoked by the hooked tty and our app
+ */
+
+
+/* Register or deregister the current process as a Windows9x style service.
+ * Experience shows this call is ignored across processes, so the second
+ * arg to RegisterServiceProcess (process group id) is effectively useless.
+ */
+static LRESULT WINAPI RegisterWindows9xService(BOOL set_service)
+{
+ static HINSTANCE hkernel;
+ static DWORD (WINAPI *register_service_process)(DWORD, DWORD) = NULL;
+ BOOL rv;
+
+ if (set_service == is_service)
+ return 1;
+
+#ifdef DBG
+ DbgPrintf("R %s proc %8.8x as a service\r\n",
+ set_service ? "installing" : "removing",
+ GetCurrentProcessId());
+#endif
+
+ if (!register_service_process)
+ {
+ /* Obtain a handle to the kernel library */
+ hkernel = LoadLibrary("KERNEL32.DLL");
+ if (!hkernel)
+ return 0;
+
+ /* Find the RegisterServiceProcess function */
+ register_service_process = (DWORD (WINAPI *)(DWORD, DWORD))
+ GetProcAddress(hkernel, "RegisterServiceProcess");
+ if (register_service_process == NULL) {
+ FreeLibrary(hkernel);
+ return 0;
+ }
+ }
+
+ /* Register this process as a service */
+ rv = register_service_process(0, set_service != FALSE);
+ if (rv)
+ is_service = set_service;
+
+ if (!is_service)
+ {
+ /* Unload the kernel library */
+ FreeLibrary(hkernel);
+ register_service_process = NULL;
+ }
+ return rv;
+}
+
+
+/*
+ * This function only works when this process is the active process
+ * (e.g. once it is running a child process, it can no longer determine
+ * which console window is its own.)
+ */
+static BOOL CALLBACK EnumttyWindow(HWND wnd, LPARAM retwnd)
+{
+ char tmp[8];
+ if (GetClassName(wnd, tmp, sizeof(tmp)) && !strcmp(tmp, "tty"))
+ {
+ DWORD wndproc, thisproc = GetCurrentProcessId();
+ GetWindowThreadProcessId(wnd, &wndproc);
+ if (wndproc == thisproc) {
+ *((HWND*)retwnd) = wnd;
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+
+/* The remaining code all executes --in the tty's own process context--
+ *
+ * That means special attention must be paid to what it's doing...
+ */
+
+/* Subclass message process for the tty window
+ *
+ * This code -handles- WM_CLOSE, WM_ENDSESSION and WM_QUERYENDSESSION
+ * by dispatching them to the window identified by the hookwndprop
+ * property atom set against our window. Messages are then dispatched
+ * to origwndprop property atom we set against the window when we
+ * injected this subclass. This trick did not work with simply a hook.
+ */
+static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
+ WPARAM wParam, LPARAM lParam)
+{
+ WNDPROC origproc = (WNDPROC) GetProp(hwnd, origwndprop);
+ if (!origproc)
+ return 0;
+
+ if (msg == WM_NCDESTROY
+ || (msg == hookwndmsg && !LOWORD(wParam) && (HWND)lParam == hwnd))
+ {
+ if (is_subclassed) {
+#ifdef DBG
+ DbgPrintf("W proc %08x hwnd:%08x Subclass removed\r\n",
+ GetCurrentProcessId(), hwnd);
+#endif
+ if (is_service)
+ RegisterWindows9xService(FALSE);
+ SetWindowLong(hwnd, GWL_WNDPROC, (LONG)origproc);
+ RemoveProp(hwnd, origwndprop);
+ RemoveProp(hwnd, hookwndprop);
+ is_subclassed = FALSE;
+ //if (hmodLock)
+ // FreeLibrary(hmodLock);
+ //hmodLock = NULL;
+ }
+ }
+ else if (msg == WM_CLOSE || msg == WM_ENDSESSION
+ || msg == WM_QUERYENDSESSION)
+ {
+ HWND child = (HWND)GetProp(hwnd, hookwndprop);
+ if (child) {
+#ifdef DBG
+ DbgPrintf("W proc %08x hwnd:%08x forwarded msg:%d\r\n",
+ GetCurrentProcessId(), hwnd, msg);
+#endif
+ return SendMessage(child, msg, wParam, lParam);
+ }
+ }
+ return CallWindowProc(origproc, hwnd, msg, wParam, lParam);
+}
+
+
+/* HookProc, once installed, is responsible for subclassing the system
+ * tty windows. It generally does nothing special itself, since
+ * research indicates that it cannot deal well with the messages we are
+ * interested in, that is, WM_CLOSE, WM_QUERYSHUTDOWN and WM_SHUTDOWN
+ * of the tty process.
+ *
+ * Respond and subclass only when a WM_NULL is received by the window.
+ */
+int HookProc(int hc, HWND *hwnd, UINT *msg, WPARAM *wParam, LPARAM *lParam)
+{
+ if (is_tty == -1 && *hwnd)
+ {
+ char ttybuf[8];
+ HWND htty;
+ hwtty = *hwnd;
+ while (htty = GetParent(hwtty))
+ hwtty = htty;
+ is_tty = (GetClassName(hwtty, ttybuf, sizeof(ttybuf))
+ && !strcmp(ttybuf, "tty"));
+#ifdef DBG
+ if (is_tty)
+ DbgPrintf("H proc %08x tracking hwnd %08x\r\n",
+ GetCurrentProcessId(), hwtty);
+#endif
+ }
+
+ if (*msg == hookwndmsg && *wParam && *lParam == (LPARAM)hwtty && is_tty)
+ {
+ WNDPROC origproc = (WNDPROC)GetWindowLong(hwtty, GWL_WNDPROC);
+ //char myname[MAX_PATH];
+ //if (GetModuleFileName(hmodThis, myname, sizeof(myname)))
+ // hmodLock = LoadLibrary(myname);
+ SetProp(hwtty, origwndprop, origproc);
+ SetWindowLong(hwtty, GWL_WNDPROC, (LONG)WndProc);
+ is_subclassed = TRUE;
+#ifdef DBG
+ DbgPrintf("H proc %08x hwnd:%08x Subclassed\r\n",
+ GetCurrentProcessId(), hwtty);
+#endif
+ if (LOWORD(*wParam) == 2)
+ RegisterWindows9xService(TRUE);
+ }
+
+ return -1;
+}
+
+
+/*
+ * PostMessage Hook:
+ */
+LRESULT __declspec(dllexport) CALLBACK GetMsgProc(INT hc, WPARAM wParam,
+ LPARAM lParam)
+{
+ PMSG pmsg;
+
+ pmsg = (PMSG)lParam;
+
+ if (pmsg) {
+ int rv = HookProc(hc, &pmsg->hwnd, &pmsg->message,
+ &pmsg->wParam, &pmsg->lParam);
+ if (rv != -1)
+ return rv;
+ }
+ /*
+ * CallNextHookEx apparently ignores the hhook argument, so pass NULL
+ */
+ return CallNextHookEx(NULL, hc, wParam, lParam);
+}
+
+
+/*
+ * SendMessage Hook:
+ */
+LRESULT __declspec(dllexport) CALLBACK CallWndProc(INT hc, WPARAM wParam,
+ LPARAM lParam)
+{
+ PCWPSTRUCT pcwps = (PCWPSTRUCT)lParam;
+
+ if (pcwps) {
+ int rv = HookProc(hc, &pcwps->hwnd, &pcwps->message,
+ &pcwps->wParam, &pcwps->lParam);
+ if (rv != -1)
+ return rv;
+ }
+ /*
+ * CallNextHookEx apparently ignores the hhook argument, so pass NULL
+ */
+ return CallNextHookEx(NULL, hc, wParam, lParam);
+}
+
+
+#ifdef DBG
+VOID DbgPrintf(
+ LPTSTR fmt,
+ ...
+ )
+{
+ static HANDLE mutex;
+ va_list marker;
+ TCHAR szBuf[256];
+ DWORD t;
+ HANDLE gDbgOut;
+
+ va_start(marker, fmt);
+ wvsprintf(szBuf, fmt, marker);
+ va_end(marker);
+
+ if (!mutex)
+ mutex = CreateMutex(NULL, FALSE, "Win9xConHookDbgOut");
+ WaitForSingleObject(mutex, INFINITE);
+ gDbgOut = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0,
+ NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);
+ WriteFile(gDbgOut, szBuf, strlen(szBuf), &t, NULL);
+ CloseHandle(gDbgOut);
+ ReleaseMutex(mutex);
+}
+#endif
+
+#endif /* WIN32 */
diff --git a/APACHE_1_3_42/src/os/win32/Win9xConHook.def b/APACHE_1_3_42/src/os/win32/Win9xConHook.def
new file mode 100644
index 0000000000..85ec166404
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/Win9xConHook.def
@@ -0,0 +1,10 @@
+LIBRARY Win9xConHook
+
+EXETYPE WINDOWS
+
+EXPORTS
+ DllMain
+ GetMsgProc
+ CallWndProc
+ FixConsoleCtrlHandler
+ Windows9xServiceCtrlHandler
diff --git a/APACHE_1_3_42/src/os/win32/Win9xConHook.dep b/APACHE_1_3_42/src/os/win32/Win9xConHook.dep
new file mode 100644
index 0000000000..bc873684c8
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/Win9xConHook.dep
@@ -0,0 +1,2 @@
+# Microsoft Developer Studio Generated Dependency File, included by Win9xConHook.mak
+
diff --git a/APACHE_1_3_42/src/os/win32/Win9xConHook.dsp b/APACHE_1_3_42/src/os/win32/Win9xConHook.dsp
new file mode 100644
index 0000000000..89a115c3d1
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/Win9xConHook.dsp
@@ -0,0 +1,103 @@
+# Microsoft Developer Studio Project File - Name="Win9xConHook" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=Win9xConHook - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Win9xConHook.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Win9xConHook.mak" CFG="Win9xConHook - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Win9xConHook - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Win9xConHook - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Win9xConHook - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ".\Release"
+# PROP BASE Intermediate_Dir ".\Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\Win9xConHook_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /base:"0x1c0f0000" /opt:ref
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /base:"0x1c0f0000" /opt:ref
+
+!ELSEIF "$(CFG)" == "Win9xConHook - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\Win9xConHook_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /base:"0x1c0f0000"
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /base:"0x1c0f0000"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Win9xConHook - Win32 Release"
+# Name "Win9xConHook - Win32 Debug"
+# Begin Source File
+
+SOURCE=.\Win9xConHook.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\Win9xConHook.def
+# End Source File
+# Begin Source File
+
+SOURCE=.\Win9xConHook.h
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/Win9xConHook.h b/APACHE_1_3_42/src/os/win32/Win9xConHook.h
new file mode 100644
index 0000000000..e3471034b6
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/Win9xConHook.h
@@ -0,0 +1,57 @@
+/* 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.
+ */
+
+#ifndef AP_WIN9XCONHOOK_H
+#define AP_WIN9XCONHOOK_H
+
+#ifdef WIN32
+
+/* Windows9xServiceCtrlHandler registers a handler routine, frees the
+ * console window, and registers this process as a service in Win9x.
+ * It creats a hidden window of class "ApacheWin95ServiceMonitor"
+ * and titled by the name passed, which passes the WM_SHUTDOWN message
+ * through the given HandlerRoutine's CTRL_SHUTDOWN event.
+ * Call with name of NULL to remove the Service handler.
+ */
+BOOL WINAPI Windows9xServiceCtrlHandler(PHANDLER_ROUTINE phandler, LPCSTR name);
+
+
+/* FixConsoleControlHandler registers a handler routine with the
+ * Win9xConHook.dll, creating a hidden window and forwarding the
+ * WM_ENDSESSION and WM_CLOSE messages to the given HandlerRoutine
+ * as CTRL_SHUTDOWN_EVENT, CTRL_LOGOFF_EVENT and CTRL_CLOSE_EVENT.
+ * The application should still use SetConsoleCtrlHandler to grab
+ * the CTRL_BREAK_EVENT and CTRL_C_EVENT, if desired.
+ */
+BOOL WINAPI FixConsoleCtrlHandler(PHANDLER_ROUTINE phandler, BOOL add);
+
+
+/*
+ * Exported PostMessage Hook, never use this directly:
+ *
+ * LRESULT CALLBACK GetMsgProc(INT hc, WPARAM wParam, LPARAM lParam);
+ */
+
+
+/*
+ * Exported SendMessage Hook, never use this directly:
+ *
+ * LRESULT CALLBACK CallWndProc(INT hc, WPARAM wParam, LPARAM lParam);
+ */
+
+#endif /* WIN32 */
+
+#endif AP_WIN9XCONHOOK_H
diff --git a/APACHE_1_3_42/src/os/win32/Win9xConHook.mak b/APACHE_1_3_42/src/os/win32/Win9xConHook.mak
new file mode 100644
index 0000000000..67aef3ceb5
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/Win9xConHook.mak
@@ -0,0 +1,198 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on Win9xConHook.dsp
+!IF "$(CFG)" == ""
+CFG=Win9xConHook - Win32 Release
+!MESSAGE No configuration specified. Defaulting to Win9xConHook - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "Win9xConHook - Win32 Release" && "$(CFG)" != "Win9xConHook - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Win9xConHook.mak" CFG="Win9xConHook - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Win9xConHook - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Win9xConHook - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "Win9xConHook - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\Win9xConHook.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\Win9xConHook.obj"
+ -@erase "$(INTDIR)\Win9xConHook_src.idb"
+ -@erase "$(INTDIR)\Win9xConHook_src.pdb"
+ -@erase "$(OUTDIR)\Win9xConHook.dll"
+ -@erase "$(OUTDIR)\Win9xConHook.exp"
+ -@erase "$(OUTDIR)\Win9xConHook.lib"
+ -@erase "$(OUTDIR)\Win9xConHook.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\Win9xConHook_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\Win9xConHook.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib /nologo /base:"0x1c0f0000" /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\Win9xConHook.pdb" /debug /machine:I386 /def:".\Win9xConHook.def" /out:"$(OUTDIR)\Win9xConHook.dll" /implib:"$(OUTDIR)\Win9xConHook.lib" /opt:ref
+DEF_FILE= \
+ ".\Win9xConHook.def"
+LINK32_OBJS= \
+ "$(INTDIR)\Win9xConHook.obj"
+
+"$(OUTDIR)\Win9xConHook.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "Win9xConHook - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\Win9xConHook.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\Win9xConHook.obj"
+ -@erase "$(INTDIR)\Win9xConHook_src.idb"
+ -@erase "$(INTDIR)\Win9xConHook_src.pdb"
+ -@erase "$(OUTDIR)\Win9xConHook.dll"
+ -@erase "$(OUTDIR)\Win9xConHook.exp"
+ -@erase "$(OUTDIR)\Win9xConHook.lib"
+ -@erase "$(OUTDIR)\Win9xConHook.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\Win9xConHook_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\Win9xConHook.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib /nologo /base:"0x1c0f0000" /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\Win9xConHook.pdb" /debug /machine:I386 /def:".\Win9xConHook.def" /out:"$(OUTDIR)\Win9xConHook.dll" /implib:"$(OUTDIR)\Win9xConHook.lib"
+DEF_FILE= \
+ ".\Win9xConHook.def"
+LINK32_OBJS= \
+ "$(INTDIR)\Win9xConHook.obj"
+
+"$(OUTDIR)\Win9xConHook.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("Win9xConHook.dep")
+!INCLUDE "Win9xConHook.dep"
+!ELSE
+!MESSAGE Warning: cannot find "Win9xConHook.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "Win9xConHook - Win32 Release" || "$(CFG)" == "Win9xConHook - Win32 Debug"
+SOURCE=.\Win9xConHook.c
+
+"$(INTDIR)\Win9xConHook.obj" : $(SOURCE) "$(INTDIR)"
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/apache.ico b/APACHE_1_3_42/src/os/win32/apache.ico
new file mode 100644
index 0000000000..bfb4f63ab6
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/apache.ico
Binary files differ
diff --git a/APACHE_1_3_42/src/os/win32/apache.rc b/APACHE_1_3_42/src/os/win32/apache.rc
new file mode 100644
index 0000000000..6dde63f950
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/apache.rc
@@ -0,0 +1,84 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "winresrc.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Neutral resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
+#ifdef _WIN32
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_APACHE ICON DISCARDABLE "apache.ico"
+#endif // Neutral resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.K.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#include ""winresrc.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+#endif // English (U.K.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/APACHE_1_3_42/src/os/win32/getopt.c b/APACHE_1_3_42/src/os/win32/getopt.c
new file mode 100644
index 0000000000..4257bf2f6a
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/getopt.c
@@ -0,0 +1,189 @@
+/* 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.
+ */
+
+#ifdef WIN32
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <stdlib.h>
+
+#define OPTERRCOLON (1)
+#define OPTERRNF (2)
+#define OPTERRARG (3)
+
+char *optarg;
+int optreset = 0;
+int optind = 1;
+int opterr = 1;
+int optopt;
+
+static int
+optiserr(int argc, char * const *argv, int oint, const char *optstr,
+ int optchr, int err)
+{
+ if(opterr)
+ {
+ fprintf(stderr, "Error in argument %d, char %d: ", oint, optchr+1);
+ switch(err)
+ {
+ case OPTERRCOLON:
+ fprintf(stderr, ": in flags\n");
+ break;
+ case OPTERRNF:
+ fprintf(stderr, "option not found %c\n", argv[oint][optchr]);
+ break;
+ case OPTERRARG:
+ fprintf(stderr, "no argument for option %c\n", argv[oint][optchr]);
+ break;
+ default:
+ fprintf(stderr, "unknown\n");
+ break;
+ }
+ }
+ optopt = argv[oint][optchr];
+ return('?');
+}
+
+
+
+int
+getopt(int argc, char* const *argv, const char *optstr)
+{
+ static int optchr = 0;
+ static int dash = 0; /* have already seen the - */
+
+ char *cp;
+
+ if (optreset)
+ optreset = optchr = dash = 0;
+ if(optind >= argc)
+ return(EOF);
+ if(!dash && (argv[optind][0] != '-'))
+ return(EOF);
+ if(!dash && (argv[optind][0] == '-') && !argv[optind][1])
+ {
+ /*
+ * use to specify stdin. Need to let pgm process this and
+ * the following args
+ */
+ return(EOF);
+ }
+ if((argv[optind][0] == '-') && (argv[optind][1] == '-'))
+ {
+ /* -- indicates end of args */
+ optind++;
+ return(EOF);
+ }
+ if(!dash)
+ {
+ assert((argv[optind][0] == '-') && argv[optind][1]);
+ dash = 1;
+ optchr = 1;
+ }
+
+ /* Check if the guy tries to do a -: kind of flag */
+ assert(dash);
+ if(argv[optind][optchr] == ':')
+ {
+ dash = 0;
+ optind++;
+ return(optiserr(argc, argv, optind-1, optstr, optchr, OPTERRCOLON));
+ }
+ if(!(cp = strchr(optstr, argv[optind][optchr])))
+ {
+ int errind = optind;
+ int errchr = optchr;
+
+ if(!argv[optind][optchr+1])
+ {
+ dash = 0;
+ optind++;
+ }
+ else
+ optchr++;
+ return(optiserr(argc, argv, errind, optstr, errchr, OPTERRNF));
+ }
+ if(cp[1] == ':')
+ {
+ dash = 0;
+ optind++;
+ if(optind == argc)
+ return(optiserr(argc, argv, optind-1, optstr, optchr, OPTERRARG));
+ optarg = argv[optind++];
+ return(*cp);
+ }
+ else
+ {
+ if(!argv[optind][optchr+1])
+ {
+ dash = 0;
+ optind++;
+ }
+ else
+ optchr++;
+ return(*cp);
+ }
+ assert(0);
+ return(0);
+}
+
+#ifdef TESTGETOPT
+int
+ main (int argc, char **argv)
+ {
+ int c;
+ extern char *optarg;
+ extern int optind;
+ int aflg = 0;
+ int bflg = 0;
+ int errflg = 0;
+ char *ofile = NULL;
+
+ while ((c = getopt(argc, argv, "abo:")) != EOF)
+ switch (c) {
+ case 'a':
+ if (bflg)
+ errflg++;
+ else
+ aflg++;
+ break;
+ case 'b':
+ if (aflg)
+ errflg++;
+ else
+ bflg++;
+ break;
+ case 'o':
+ ofile = optarg;
+ (void)printf("ofile = %s\n", ofile);
+ break;
+ case '?':
+ errflg++;
+ }
+ if (errflg) {
+ (void)fprintf(stderr,
+ "usage: cmd [-a|-b] [-o <filename>] files...\n");
+ exit (2);
+ }
+ for ( ; optind < argc; optind++)
+ (void)printf("%s\n", argv[optind]);
+ return 0;
+ }
+
+#endif /* TESTGETOPT */
+
+#endif /* WIN32 */
diff --git a/APACHE_1_3_42/src/os/win32/getopt.h b/APACHE_1_3_42/src/os/win32/getopt.h
new file mode 100644
index 0000000000..0d6487ca10
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/getopt.h
@@ -0,0 +1,31 @@
+/* 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.
+ */
+
+#ifndef GETOPT_H
+#define GETOPT_H
+
+#ifdef WIN32
+
+extern char *optarg;
+extern int optreset;
+extern int optind;
+extern int opterr;
+extern int optopt;
+int getopt(int argc, char* const *argv, const char *optstr);
+
+#endif /* WIN32 */
+
+#endif /* GETOPT_H */
diff --git a/APACHE_1_3_42/src/os/win32/main_win32.c b/APACHE_1_3_42/src/os/win32/main_win32.c
new file mode 100644
index 0000000000..2fa2e7379e
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/main_win32.c
@@ -0,0 +1,36 @@
+/* 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.
+ */
+
+#ifdef WIN32
+
+/* main_win32.c - Apache executable stub file for Win32
+ * This file's purpose in life is to load, and call the
+ * "real" main function, apache_main(), located in ApacheCore.dll
+ *
+ * This was done because having the main() function in a DLL,
+ * although Win32 allows it, seemed wrong. Also, MSVC++ won't
+ * link an executable without at least one object file. This
+ * satistifies that requirement.
+ */
+
+__declspec(dllexport) int apache_main(int argc, char *argv[]);
+
+int main(int argc, char *argv[])
+{
+ return apache_main(argc, argv);
+}
+
+#endif /* WIN32 */
diff --git a/APACHE_1_3_42/src/os/win32/mod_auth_anon.dep b/APACHE_1_3_42/src/os/win32/mod_auth_anon.dep
new file mode 100644
index 0000000000..4ea4c5622d
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_auth_anon.dep
@@ -0,0 +1,21 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_auth_anon.mak
+
+..\..\modules\standard\mod_auth_anon.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_core.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\http_protocol.h"\
+ "..\..\include\http_request.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_uri.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_auth_anon.dsp b/APACHE_1_3_42/src/os/win32/mod_auth_anon.dsp
new file mode 100644
index 0000000000..faa789f02d
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_auth_anon.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="mod_auth_anon" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_auth_anon - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_auth_anon.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_auth_anon.mak" CFG="mod_auth_anon - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_auth_anon - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_auth_anon - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_auth_anon - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\mod_auth_anon_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_auth_anon.so" /base:@"BaseAddr.ref",mod_auth_anon /opt:ref
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_auth_anon.so" /base:@"BaseAddr.ref",mod_auth_anon /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_auth_anon - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\mod_auth_anon_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_auth_anon.so" /base:@"BaseAddr.ref",mod_auth_anon
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_auth_anon.so" /base:@"BaseAddr.ref",mod_auth_anon
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_auth_anon - Win32 Release"
+# Name "mod_auth_anon - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\standard\mod_auth_anon.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_auth_anon.mak b/APACHE_1_3_42/src/os/win32/mod_auth_anon.mak
new file mode 100644
index 0000000000..4561dcb888
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_auth_anon.mak
@@ -0,0 +1,246 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_auth_anon.dsp
+!IF "$(CFG)" == ""
+CFG=mod_auth_anon - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_auth_anon - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_auth_anon - Win32 Release" && "$(CFG)" != "mod_auth_anon - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_auth_anon.mak" CFG="mod_auth_anon - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_auth_anon - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_auth_anon - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_auth_anon - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_auth_anon.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_auth_anon.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_auth_anon.obj"
+ -@erase "$(INTDIR)\mod_auth_anon_src.idb"
+ -@erase "$(INTDIR)\mod_auth_anon_src.pdb"
+ -@erase "$(OUTDIR)\mod_auth_anon.exp"
+ -@erase "$(OUTDIR)\mod_auth_anon.lib"
+ -@erase "$(OUTDIR)\mod_auth_anon.pdb"
+ -@erase "$(OUTDIR)\mod_auth_anon.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_auth_anon_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_auth_anon.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_auth_anon.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_auth_anon.so" /implib:"$(OUTDIR)\mod_auth_anon.lib" /base:@"BaseAddr.ref",mod_auth_anon /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_auth_anon.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_auth_anon.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_auth_anon - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_auth_anon.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_auth_anon.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_auth_anon.obj"
+ -@erase "$(INTDIR)\mod_auth_anon_src.idb"
+ -@erase "$(INTDIR)\mod_auth_anon_src.pdb"
+ -@erase "$(OUTDIR)\mod_auth_anon.exp"
+ -@erase "$(OUTDIR)\mod_auth_anon.lib"
+ -@erase "$(OUTDIR)\mod_auth_anon.pdb"
+ -@erase "$(OUTDIR)\mod_auth_anon.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_auth_anon_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_auth_anon.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_auth_anon.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_auth_anon.so" /implib:"$(OUTDIR)\mod_auth_anon.lib" /base:@"BaseAddr.ref",mod_auth_anon
+LINK32_OBJS= \
+ "$(INTDIR)\mod_auth_anon.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_auth_anon.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_auth_anon.dep")
+!INCLUDE "mod_auth_anon.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_auth_anon.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_auth_anon - Win32 Release" || "$(CFG)" == "mod_auth_anon - Win32 Debug"
+
+!IF "$(CFG)" == "mod_auth_anon - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_auth_anon - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\standard\mod_auth_anon.c
+
+"$(INTDIR)\mod_auth_anon.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_auth_dbm.dep b/APACHE_1_3_42/src/os/win32/mod_auth_dbm.dep
new file mode 100644
index 0000000000..0fdf0f2d6a
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_auth_dbm.dep
@@ -0,0 +1,21 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_auth_dbm.mak
+
+..\..\modules\standard\mod_auth_dbm.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_core.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\http_protocol.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_uri.h"\
+ "..\..\lib\sdbm\sdbm.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_auth_dbm.dsp b/APACHE_1_3_42/src/os/win32/mod_auth_dbm.dsp
new file mode 100644
index 0000000000..37a416a89b
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_auth_dbm.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="mod_auth_dbm" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_auth_dbm - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_auth_dbm.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_auth_dbm.mak" CFG="mod_auth_dbm - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_auth_dbm - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_auth_dbm - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_auth_dbm - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /I "..\..\lib\sdbm" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\mod_auth_dbm_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_auth_dbm.so" /base:@"BaseAddr.ref",mod_auth_dbm /opt:ref
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_auth_dbm.so" /base:@"BaseAddr.ref",mod_auth_dbm /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_auth_dbm - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /I "..\..\lib\sdbm" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\mod_auth_dbm_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_auth_dbm.so" /base:@"BaseAddr.ref",mod_auth_dbm
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_auth_dbm.so" /base:@"BaseAddr.ref",mod_auth_dbm
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_auth_dbm - Win32 Release"
+# Name "mod_auth_dbm - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\standard\mod_auth_dbm.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_auth_dbm.mak b/APACHE_1_3_42/src/os/win32/mod_auth_dbm.mak
new file mode 100644
index 0000000000..0e3aac2390
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_auth_dbm.mak
@@ -0,0 +1,274 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_auth_dbm.dsp
+!IF "$(CFG)" == ""
+CFG=mod_auth_dbm - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_auth_dbm - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_auth_dbm - Win32 Release" && "$(CFG)" != "mod_auth_dbm - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_auth_dbm.mak" CFG="mod_auth_dbm - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_auth_dbm - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_auth_dbm - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_auth_dbm - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_auth_dbm.so"
+
+!ELSE
+
+ALL : "sdbm - Win32 Release" "ApacheCore - Win32 Release" "$(OUTDIR)\mod_auth_dbm.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN" "sdbm - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_auth_dbm.obj"
+ -@erase "$(INTDIR)\mod_auth_dbm_src.idb"
+ -@erase "$(INTDIR)\mod_auth_dbm_src.pdb"
+ -@erase "$(OUTDIR)\mod_auth_dbm.exp"
+ -@erase "$(OUTDIR)\mod_auth_dbm.lib"
+ -@erase "$(OUTDIR)\mod_auth_dbm.pdb"
+ -@erase "$(OUTDIR)\mod_auth_dbm.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /I "..\..\lib\sdbm" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_auth_dbm_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_auth_dbm.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_auth_dbm.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_auth_dbm.so" /implib:"$(OUTDIR)\mod_auth_dbm.lib" /base:@"BaseAddr.ref",mod_auth_dbm /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_auth_dbm.obj" \
+ "..\..\Release\ApacheCore.lib" \
+ "..\..\lib\sdbm\LibR\sdbm.lib"
+
+"$(OUTDIR)\mod_auth_dbm.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_auth_dbm - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_auth_dbm.so"
+
+!ELSE
+
+ALL : "sdbm - Win32 Debug" "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_auth_dbm.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN" "sdbm - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_auth_dbm.obj"
+ -@erase "$(INTDIR)\mod_auth_dbm_src.idb"
+ -@erase "$(INTDIR)\mod_auth_dbm_src.pdb"
+ -@erase "$(OUTDIR)\mod_auth_dbm.exp"
+ -@erase "$(OUTDIR)\mod_auth_dbm.lib"
+ -@erase "$(OUTDIR)\mod_auth_dbm.pdb"
+ -@erase "$(OUTDIR)\mod_auth_dbm.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /I "..\..\lib\sdbm" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_auth_dbm_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_auth_dbm.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_auth_dbm.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_auth_dbm.so" /implib:"$(OUTDIR)\mod_auth_dbm.lib" /base:@"BaseAddr.ref",mod_auth_dbm
+LINK32_OBJS= \
+ "$(INTDIR)\mod_auth_dbm.obj" \
+ "..\..\Debug\ApacheCore.lib" \
+ "..\..\lib\sdbm\LibD\sdbm.lib"
+
+"$(OUTDIR)\mod_auth_dbm.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_auth_dbm.dep")
+!INCLUDE "mod_auth_dbm.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_auth_dbm.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_auth_dbm - Win32 Release" || "$(CFG)" == "mod_auth_dbm - Win32 Debug"
+
+!IF "$(CFG)" == "mod_auth_dbm - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_auth_dbm - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+!IF "$(CFG)" == "mod_auth_dbm - Win32 Release"
+
+"sdbm - Win32 Release" :
+ cd ".\..\..\lib\sdbm"
+ $(MAKE) /$(MAKEFLAGS) /F ".\sdbm.mak" CFG="sdbm - Win32 Release"
+ cd "..\..\os\win32"
+
+"sdbm - Win32 ReleaseCLEAN" :
+ cd ".\..\..\lib\sdbm"
+ $(MAKE) /$(MAKEFLAGS) /F ".\sdbm.mak" CFG="sdbm - Win32 Release" RECURSE=1 CLEAN
+ cd "..\..\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_auth_dbm - Win32 Debug"
+
+"sdbm - Win32 Debug" :
+ cd ".\..\..\lib\sdbm"
+ $(MAKE) /$(MAKEFLAGS) /F ".\sdbm.mak" CFG="sdbm - Win32 Debug"
+ cd "..\..\os\win32"
+
+"sdbm - Win32 DebugCLEAN" :
+ cd ".\..\..\lib\sdbm"
+ $(MAKE) /$(MAKEFLAGS) /F ".\sdbm.mak" CFG="sdbm - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\..\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\standard\mod_auth_dbm.c
+
+"$(INTDIR)\mod_auth_dbm.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_auth_digest.dep b/APACHE_1_3_42/src/os/win32/mod_auth_digest.dep
new file mode 100644
index 0000000000..fa5e3fcfca
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_auth_digest.dep
@@ -0,0 +1,25 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_auth_digest.mak
+
+..\..\modules\experimental\mod_auth_digest.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_md5.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\ap_sha1.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_conf_globals.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_core.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\http_protocol.h"\
+ "..\..\include\http_request.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_md5.h"\
+ "..\..\include\util_uri.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_auth_digest.dsp b/APACHE_1_3_42/src/os/win32/mod_auth_digest.dsp
new file mode 100644
index 0000000000..feb76bc100
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_auth_digest.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="mod_auth_digest" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_auth_digest - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_auth_digest.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_auth_digest.mak" CFG="mod_auth_digest - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_auth_digest - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_auth_digest - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_auth_digest - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\mod_auth_digest_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib advapi32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_auth_digest.so" /base:@"BaseAddr.ref",mod_auth_digest /opt:ref
+# ADD LINK32 kernel32.lib advapi32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_auth_digest.so" /base:@"BaseAddr.ref",mod_auth_digest /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_auth_digest - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\mod_auth_digest_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib advapi32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_auth_digest.so" /base:@"BaseAddr.ref",mod_auth_digest
+# ADD LINK32 kernel32.lib advapi32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_auth_digest.so" /base:@"BaseAddr.ref",mod_auth_digest
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_auth_digest - Win32 Release"
+# Name "mod_auth_digest - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\experimental\mod_auth_digest.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_auth_digest.mak b/APACHE_1_3_42/src/os/win32/mod_auth_digest.mak
new file mode 100644
index 0000000000..fb83987787
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_auth_digest.mak
@@ -0,0 +1,246 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_auth_digest.dsp
+!IF "$(CFG)" == ""
+CFG=mod_auth_digest - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to mod_auth_digest - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "mod_auth_digest - Win32 Release" && "$(CFG)" != "mod_auth_digest - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_auth_digest.mak" CFG="mod_auth_digest - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_auth_digest - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_auth_digest - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_auth_digest - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_auth_digest.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_auth_digest.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_auth_digest.obj"
+ -@erase "$(INTDIR)\mod_auth_digest_src.idb"
+ -@erase "$(INTDIR)\mod_auth_digest_src.pdb"
+ -@erase "$(OUTDIR)\mod_auth_digest.exp"
+ -@erase "$(OUTDIR)\mod_auth_digest.lib"
+ -@erase "$(OUTDIR)\mod_auth_digest.pdb"
+ -@erase "$(OUTDIR)\mod_auth_digest.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_auth_digest_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_auth_digest.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib advapi32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_auth_digest.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_auth_digest.so" /implib:"$(OUTDIR)\mod_auth_digest.lib" /base:@"BaseAddr.ref",mod_auth_digest /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_auth_digest.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_auth_digest.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_auth_digest - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_auth_digest.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_auth_digest.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_auth_digest.obj"
+ -@erase "$(INTDIR)\mod_auth_digest_src.idb"
+ -@erase "$(INTDIR)\mod_auth_digest_src.pdb"
+ -@erase "$(OUTDIR)\mod_auth_digest.exp"
+ -@erase "$(OUTDIR)\mod_auth_digest.lib"
+ -@erase "$(OUTDIR)\mod_auth_digest.pdb"
+ -@erase "$(OUTDIR)\mod_auth_digest.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_auth_digest_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_auth_digest.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib advapi32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_auth_digest.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_auth_digest.so" /implib:"$(OUTDIR)\mod_auth_digest.lib" /base:@"BaseAddr.ref",mod_auth_digest
+LINK32_OBJS= \
+ "$(INTDIR)\mod_auth_digest.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_auth_digest.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_auth_digest.dep")
+!INCLUDE "mod_auth_digest.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_auth_digest.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_auth_digest - Win32 Release" || "$(CFG)" == "mod_auth_digest - Win32 Debug"
+
+!IF "$(CFG)" == "mod_auth_digest - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_auth_digest - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\experimental\mod_auth_digest.c
+
+"$(INTDIR)\mod_auth_digest.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_cern_meta.dep b/APACHE_1_3_42/src/os/win32/mod_cern_meta.dep
new file mode 100644
index 0000000000..505237605b
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_cern_meta.dep
@@ -0,0 +1,20 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_cern_meta.mak
+
+..\..\modules\standard\mod_cern_meta.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\http_request.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_script.h"\
+ "..\..\include\util_uri.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_cern_meta.dsp b/APACHE_1_3_42/src/os/win32/mod_cern_meta.dsp
new file mode 100644
index 0000000000..7bc2c92682
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_cern_meta.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="mod_cern_meta" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_cern_meta - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_cern_meta.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_cern_meta.mak" CFG="mod_cern_meta - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_cern_meta - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_cern_meta - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_cern_meta - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\mod_cern_meta_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_cern_meta.so" /base:@"BaseAddr.ref",mod_cern_meta /opt:ref
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_cern_meta.so" /base:@"BaseAddr.ref",mod_cern_meta /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_cern_meta - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\mod_cern_meta_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_cern_meta.so" /base:@"BaseAddr.ref",mod_cern_meta
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_cern_meta.so" /base:@"BaseAddr.ref",mod_cern_meta
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_cern_meta - Win32 Release"
+# Name "mod_cern_meta - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\standard\mod_cern_meta.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_cern_meta.mak b/APACHE_1_3_42/src/os/win32/mod_cern_meta.mak
new file mode 100644
index 0000000000..c4956a8147
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_cern_meta.mak
@@ -0,0 +1,246 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_cern_meta.dsp
+!IF "$(CFG)" == ""
+CFG=mod_cern_meta - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_cern_meta - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_cern_meta - Win32 Release" && "$(CFG)" != "mod_cern_meta - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_cern_meta.mak" CFG="mod_cern_meta - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_cern_meta - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_cern_meta - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_cern_meta - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_cern_meta.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_cern_meta.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_cern_meta.obj"
+ -@erase "$(INTDIR)\mod_cern_meta_src.idb"
+ -@erase "$(INTDIR)\mod_cern_meta_src.pdb"
+ -@erase "$(OUTDIR)\mod_cern_meta.exp"
+ -@erase "$(OUTDIR)\mod_cern_meta.lib"
+ -@erase "$(OUTDIR)\mod_cern_meta.pdb"
+ -@erase "$(OUTDIR)\mod_cern_meta.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_cern_meta_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_cern_meta.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_cern_meta.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_cern_meta.so" /implib:"$(OUTDIR)\mod_cern_meta.lib" /base:@"BaseAddr.ref",mod_cern_meta /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_cern_meta.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_cern_meta.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_cern_meta - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_cern_meta.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_cern_meta.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_cern_meta.obj"
+ -@erase "$(INTDIR)\mod_cern_meta_src.idb"
+ -@erase "$(INTDIR)\mod_cern_meta_src.pdb"
+ -@erase "$(OUTDIR)\mod_cern_meta.exp"
+ -@erase "$(OUTDIR)\mod_cern_meta.lib"
+ -@erase "$(OUTDIR)\mod_cern_meta.pdb"
+ -@erase "$(OUTDIR)\mod_cern_meta.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_cern_meta_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_cern_meta.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_cern_meta.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_cern_meta.so" /implib:"$(OUTDIR)\mod_cern_meta.lib" /base:@"BaseAddr.ref",mod_cern_meta
+LINK32_OBJS= \
+ "$(INTDIR)\mod_cern_meta.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_cern_meta.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_cern_meta.dep")
+!INCLUDE "mod_cern_meta.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_cern_meta.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_cern_meta - Win32 Release" || "$(CFG)" == "mod_cern_meta - Win32 Debug"
+
+!IF "$(CFG)" == "mod_cern_meta - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_cern_meta - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\standard\mod_cern_meta.c
+
+"$(INTDIR)\mod_cern_meta.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_digest.dep b/APACHE_1_3_42/src/os/win32/mod_digest.dep
new file mode 100644
index 0000000000..eb61788761
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_digest.dep
@@ -0,0 +1,22 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_digest.mak
+
+..\..\modules\standard\mod_digest.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_md5.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_core.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\http_protocol.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_md5.h"\
+ "..\..\include\util_uri.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_digest.dsp b/APACHE_1_3_42/src/os/win32/mod_digest.dsp
new file mode 100644
index 0000000000..563ada8e7f
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_digest.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="mod_digest" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_digest - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_digest.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_digest.mak" CFG="mod_digest - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_digest - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_digest - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_digest - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\mod_digest_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_digest.so" /base:@"BaseAddr.ref",mod_digest /opt:ref
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_digest.so" /base:@"BaseAddr.ref",mod_digest /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_digest - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\mod_digest_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_digest.so" /base:@"BaseAddr.ref",mod_digest
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_digest.so" /base:@"BaseAddr.ref",mod_digest
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_digest - Win32 Release"
+# Name "mod_digest - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\standard\mod_digest.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_digest.mak b/APACHE_1_3_42/src/os/win32/mod_digest.mak
new file mode 100644
index 0000000000..4e678469fd
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_digest.mak
@@ -0,0 +1,246 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_digest.dsp
+!IF "$(CFG)" == ""
+CFG=mod_digest - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_digest - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_digest - Win32 Release" && "$(CFG)" != "mod_digest - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_digest.mak" CFG="mod_digest - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_digest - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_digest - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_digest - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_digest.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_digest.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_digest.obj"
+ -@erase "$(INTDIR)\mod_digest_src.idb"
+ -@erase "$(INTDIR)\mod_digest_src.pdb"
+ -@erase "$(OUTDIR)\mod_digest.exp"
+ -@erase "$(OUTDIR)\mod_digest.lib"
+ -@erase "$(OUTDIR)\mod_digest.pdb"
+ -@erase "$(OUTDIR)\mod_digest.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_digest_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_digest.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_digest.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_digest.so" /implib:"$(OUTDIR)\mod_digest.lib" /base:@"BaseAddr.ref",mod_digest /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_digest.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_digest.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_digest - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_digest.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_digest.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_digest.obj"
+ -@erase "$(INTDIR)\mod_digest_src.idb"
+ -@erase "$(INTDIR)\mod_digest_src.pdb"
+ -@erase "$(OUTDIR)\mod_digest.exp"
+ -@erase "$(OUTDIR)\mod_digest.lib"
+ -@erase "$(OUTDIR)\mod_digest.pdb"
+ -@erase "$(OUTDIR)\mod_digest.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_digest_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_digest.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_digest.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_digest.so" /implib:"$(OUTDIR)\mod_digest.lib" /base:@"BaseAddr.ref",mod_digest
+LINK32_OBJS= \
+ "$(INTDIR)\mod_digest.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_digest.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_digest.dep")
+!INCLUDE "mod_digest.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_digest.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_digest - Win32 Release" || "$(CFG)" == "mod_digest - Win32 Debug"
+
+!IF "$(CFG)" == "mod_digest - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_digest - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\standard\mod_digest.c
+
+"$(INTDIR)\mod_digest.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_expires.dep b/APACHE_1_3_42/src/os/win32/mod_expires.dep
new file mode 100644
index 0000000000..898172d84e
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_expires.dep
@@ -0,0 +1,18 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_expires.mak
+
+..\..\modules\standard\mod_expires.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_uri.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_expires.dsp b/APACHE_1_3_42/src/os/win32/mod_expires.dsp
new file mode 100644
index 0000000000..f7a0661f10
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_expires.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="mod_expires" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_expires - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_expires.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_expires.mak" CFG="mod_expires - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_expires - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_expires - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_expires - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\mod_expires_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_expires.so" /base:@"BaseAddr.ref",mod_expires /opt:ref
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_expires.so" /base:@"BaseAddr.ref",mod_expires /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_expires - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\mod_expires_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_expires.so" /base:@"BaseAddr.ref",mod_expires
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_expires.so" /base:@"BaseAddr.ref",mod_expires
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_expires - Win32 Release"
+# Name "mod_expires - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\standard\mod_expires.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_expires.mak b/APACHE_1_3_42/src/os/win32/mod_expires.mak
new file mode 100644
index 0000000000..c263395ee1
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_expires.mak
@@ -0,0 +1,246 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_expires.dsp
+!IF "$(CFG)" == ""
+CFG=mod_expires - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_expires - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_expires - Win32 Release" && "$(CFG)" != "mod_expires - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_expires.mak" CFG="mod_expires - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_expires - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_expires - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_expires - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_expires.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_expires.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_expires.obj"
+ -@erase "$(INTDIR)\mod_expires_src.idb"
+ -@erase "$(INTDIR)\mod_expires_src.pdb"
+ -@erase "$(OUTDIR)\mod_expires.exp"
+ -@erase "$(OUTDIR)\mod_expires.lib"
+ -@erase "$(OUTDIR)\mod_expires.pdb"
+ -@erase "$(OUTDIR)\mod_expires.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_expires_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_expires.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_expires.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_expires.so" /implib:"$(OUTDIR)\mod_expires.lib" /base:@"BaseAddr.ref",mod_expires /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_expires.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_expires.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_expires - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_expires.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_expires.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_expires.obj"
+ -@erase "$(INTDIR)\mod_expires_src.idb"
+ -@erase "$(INTDIR)\mod_expires_src.pdb"
+ -@erase "$(OUTDIR)\mod_expires.exp"
+ -@erase "$(OUTDIR)\mod_expires.lib"
+ -@erase "$(OUTDIR)\mod_expires.pdb"
+ -@erase "$(OUTDIR)\mod_expires.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_expires_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_expires.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_expires.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_expires.so" /implib:"$(OUTDIR)\mod_expires.lib" /base:@"BaseAddr.ref",mod_expires
+LINK32_OBJS= \
+ "$(INTDIR)\mod_expires.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_expires.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_expires.dep")
+!INCLUDE "mod_expires.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_expires.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_expires - Win32 Release" || "$(CFG)" == "mod_expires - Win32 Debug"
+
+!IF "$(CFG)" == "mod_expires - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_expires - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\standard\mod_expires.c
+
+"$(INTDIR)\mod_expires.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_headers.dep b/APACHE_1_3_42/src/os/win32/mod_headers.dep
new file mode 100644
index 0000000000..a686ac2de6
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_headers.dep
@@ -0,0 +1,17 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_headers.mak
+
+..\..\modules\standard\mod_headers.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_uri.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_headers.dsp b/APACHE_1_3_42/src/os/win32/mod_headers.dsp
new file mode 100644
index 0000000000..0badf1746e
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_headers.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="mod_headers" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_headers - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_headers.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_headers.mak" CFG="mod_headers - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_headers - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_headers - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_headers - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\mod_headers_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_headers.so" /base:@"BaseAddr.ref",mod_headers /opt:ref
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_headers.so" /base:@"BaseAddr.ref",mod_headers /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_headers - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\mod_headers_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_headers.so" /base:@"BaseAddr.ref",mod_headers
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_headers.so" /base:@"BaseAddr.ref",mod_headers
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_headers - Win32 Release"
+# Name "mod_headers - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\standard\mod_headers.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_headers.mak b/APACHE_1_3_42/src/os/win32/mod_headers.mak
new file mode 100644
index 0000000000..bd36985e8c
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_headers.mak
@@ -0,0 +1,246 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_headers.dsp
+!IF "$(CFG)" == ""
+CFG=mod_headers - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_headers - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_headers - Win32 Release" && "$(CFG)" != "mod_headers - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_headers.mak" CFG="mod_headers - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_headers - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_headers - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_headers - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_headers.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_headers.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_headers.obj"
+ -@erase "$(INTDIR)\mod_headers_src.idb"
+ -@erase "$(INTDIR)\mod_headers_src.pdb"
+ -@erase "$(OUTDIR)\mod_headers.exp"
+ -@erase "$(OUTDIR)\mod_headers.lib"
+ -@erase "$(OUTDIR)\mod_headers.pdb"
+ -@erase "$(OUTDIR)\mod_headers.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_headers_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_headers.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_headers.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_headers.so" /implib:"$(OUTDIR)\mod_headers.lib" /base:@"BaseAddr.ref",mod_headers /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_headers.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_headers.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_headers - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_headers.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_headers.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_headers.obj"
+ -@erase "$(INTDIR)\mod_headers_src.idb"
+ -@erase "$(INTDIR)\mod_headers_src.pdb"
+ -@erase "$(OUTDIR)\mod_headers.exp"
+ -@erase "$(OUTDIR)\mod_headers.lib"
+ -@erase "$(OUTDIR)\mod_headers.pdb"
+ -@erase "$(OUTDIR)\mod_headers.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_headers_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_headers.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_headers.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_headers.so" /implib:"$(OUTDIR)\mod_headers.lib" /base:@"BaseAddr.ref",mod_headers
+LINK32_OBJS= \
+ "$(INTDIR)\mod_headers.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_headers.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_headers.dep")
+!INCLUDE "mod_headers.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_headers.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_headers - Win32 Release" || "$(CFG)" == "mod_headers - Win32 Debug"
+
+!IF "$(CFG)" == "mod_headers - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_headers - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\standard\mod_headers.c
+
+"$(INTDIR)\mod_headers.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_info.dep b/APACHE_1_3_42/src/os/win32/mod_info.dep
new file mode 100644
index 0000000000..b17bac54cf
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_info.dep
@@ -0,0 +1,23 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_info.mak
+
+..\..\modules\standard\mod_info.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_conf_globals.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_core.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\http_main.h"\
+ "..\..\include\http_protocol.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_script.h"\
+ "..\..\include\util_uri.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_info.dsp b/APACHE_1_3_42/src/os/win32/mod_info.dsp
new file mode 100644
index 0000000000..34a952bd2d
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_info.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="mod_info" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_info - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_info.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_info.mak" CFG="mod_info - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_info - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_info - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_info - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\mod_info_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_info.so" /base:@"BaseAddr.ref",mod_info /opt:ref
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_info.so" /base:@"BaseAddr.ref",mod_info /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_info - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\mod_info_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_info.so" /base:@"BaseAddr.ref",mod_info
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_info.so" /base:@"BaseAddr.ref",mod_info
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_info - Win32 Release"
+# Name "mod_info - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\standard\mod_info.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_info.mak b/APACHE_1_3_42/src/os/win32/mod_info.mak
new file mode 100644
index 0000000000..16bce97bc4
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_info.mak
@@ -0,0 +1,246 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_info.dsp
+!IF "$(CFG)" == ""
+CFG=mod_info - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_info - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_info - Win32 Release" && "$(CFG)" != "mod_info - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_info.mak" CFG="mod_info - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_info - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_info - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_info - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_info.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_info.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_info.obj"
+ -@erase "$(INTDIR)\mod_info_src.idb"
+ -@erase "$(INTDIR)\mod_info_src.pdb"
+ -@erase "$(OUTDIR)\mod_info.exp"
+ -@erase "$(OUTDIR)\mod_info.lib"
+ -@erase "$(OUTDIR)\mod_info.pdb"
+ -@erase "$(OUTDIR)\mod_info.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_info_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_info.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_info.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_info.so" /implib:"$(OUTDIR)\mod_info.lib" /base:@"BaseAddr.ref",mod_info /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_info.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_info.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_info - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_info.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_info.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_info.obj"
+ -@erase "$(INTDIR)\mod_info_src.idb"
+ -@erase "$(INTDIR)\mod_info_src.pdb"
+ -@erase "$(OUTDIR)\mod_info.exp"
+ -@erase "$(OUTDIR)\mod_info.lib"
+ -@erase "$(OUTDIR)\mod_info.pdb"
+ -@erase "$(OUTDIR)\mod_info.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_info_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_info.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_info.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_info.so" /implib:"$(OUTDIR)\mod_info.lib" /base:@"BaseAddr.ref",mod_info
+LINK32_OBJS= \
+ "$(INTDIR)\mod_info.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_info.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_info.dep")
+!INCLUDE "mod_info.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_info.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_info - Win32 Release" || "$(CFG)" == "mod_info - Win32 Debug"
+
+!IF "$(CFG)" == "mod_info - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_info - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\standard\mod_info.c
+
+"$(INTDIR)\mod_info.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_isapi.c b/APACHE_1_3_42/src/os/win32/mod_isapi.c
new file mode 100644
index 0000000000..9a8a04afbf
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_isapi.c
@@ -0,0 +1,891 @@
+/* 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.
+ */
+
+/*
+ * mod_isapi.c - Internet Server Application (ISA) module for Apache
+ * by Alexei Kosut <akosut@apache.org>
+ *
+ * This module implements Microsoft's ISAPI, allowing Apache (when running
+ * under Windows) to load Internet Server Applications (ISAPI extensions).
+ * It implements all of the ISAPI 2.0 specification, except for the
+ * "Microsoft-only" extensions dealing with asynchronous I/O. All ISAPI
+ * extensions that use only synchronous I/O and are compatible with the
+ * ISAPI 2.0 specification should work (most ISAPI 1.0 extensions should
+ * function as well).
+ *
+ * To load, simply place the ISA in a location in the document tree.
+ * Then add an "AddHandler isapi-isa dll" into your config file.
+ * You should now be able to load ISAPI DLLs just be reffering to their
+ * URLs. Make sure the ExecCGI option is active in the directory
+ * the ISA is in.
+ */
+
+#ifdef WIN32
+
+/* A lousy hack to include ap_check_cmd_context(): */
+#define CORE_PRIVATE
+
+#include "httpd.h"
+#include "http_config.h"
+#include "http_core.h"
+#include "http_protocol.h"
+#include "http_request.h"
+#include "http_log.h"
+#include "util_script.h"
+#include <stdlib.h>
+/* We use the exact same header file as the original */
+#include <HttpExt.h>
+
+/* Seems IIS does not enforce the requirement for \r\n termination on HSE_REQ_SEND_RESPONSE_HEADER,
+ define this to conform */
+#define RELAX_HEADER_RULE
+
+#if !defined(HSE_REQ_SEND_RESPONSE_HEADER_EX) \
+ || !defined(HSE_REQ_MAP_URL_TO_PATH_EX)
+#pragma message("WARNING: This build of Apache is missing the recent changes")
+#pragma message("in the Microsoft Win32 Platform SDK; some mod_isapi features")
+#pragma message("will be disabled. To obtain the latest Platform SDK files,")
+#pragma message("please refer to:")
+#pragma message("http://msdn.microsoft.com/downloads/sdks/platform/platform.asp")
+#endif
+
+module isapi_module;
+
+static DWORD ReadAheadBuffer = 49152;
+static int LogNotSupported = -1;
+static int AppendLogToErrors = 0;
+static int AppendLogToQuery = 0;
+
+/* Our "Connection ID" structure */
+
+typedef struct {
+ LPEXTENSION_CONTROL_BLOCK ecb;
+ request_rec *r;
+ int status;
+} isapi_cid;
+
+/* Declare the ISAPI functions */
+
+BOOL WINAPI GetServerVariable (HCONN hConn, LPSTR lpszVariableName,
+ LPVOID lpvBuffer, LPDWORD lpdwSizeofBuffer);
+BOOL WINAPI WriteClient (HCONN ConnID, LPVOID Buffer, LPDWORD lpwdwBytes,
+ DWORD dwReserved);
+BOOL WINAPI ReadClient (HCONN ConnID, LPVOID lpvBuffer, LPDWORD lpdwSize);
+BOOL WINAPI ServerSupportFunction (HCONN hConn, DWORD dwHSERequest,
+ LPVOID lpvBuffer, LPDWORD lpdwSize,
+ LPDWORD lpdwDataType);
+
+/*
+ The optimiser blows it totally here. What happens is that autos are addressed relative to the
+ stack pointer, which, of course, moves around. The optimiser seems to lose track of it somewhere
+ between setting isapi_entry and calling through it. We work around the problem by forcing it to
+ use frame pointers.
+*/
+#pragma optimize("y",off)
+
+int isapi_handler (request_rec *r) {
+ LPEXTENSION_CONTROL_BLOCK ecb =
+ ap_pcalloc(r->pool, sizeof(struct _EXTENSION_CONTROL_BLOCK));
+ HSE_VERSION_INFO *pVer = ap_pcalloc(r->pool, sizeof(HSE_VERSION_INFO));
+
+ HINSTANCE isapi_handle;
+ BOOL (*isapi_version)(HSE_VERSION_INFO *); /* entry point 1 */
+ DWORD (*isapi_entry)(LPEXTENSION_CONTROL_BLOCK); /* entry point 2 */
+ BOOL (*isapi_term)(DWORD); /* optional entry point 3 */
+
+ isapi_cid *cid = ap_pcalloc(r->pool, sizeof(isapi_cid));
+ table *e = r->subprocess_env;
+ DWORD read;
+ char *p;
+ int retval;
+ int res;
+
+ /* Use similar restrictions as CGIs */
+
+ if (!(ap_allow_options(r) & OPT_EXECCGI))
+ return FORBIDDEN;
+
+ if (r->finfo.st_mode == 0)
+ return NOT_FOUND;
+
+ if (S_ISDIR(r->finfo.st_mode))
+ return FORBIDDEN;
+
+ if (!(isapi_handle = ap_os_dso_load(r->filename))) {
+ ap_log_rerror(APLOG_MARK, APLOG_ALERT, r,
+ "ISAPI Could not load DLL: %s", r->filename);
+ return SERVER_ERROR;
+ }
+
+ if (!(isapi_version =
+ (void *)(ap_os_dso_sym(isapi_handle, "GetExtensionVersion")))) {
+ ap_log_rerror(APLOG_MARK, APLOG_ALERT, r,
+ "DLL could not load GetExtensionVersion(): %s",
+ r->filename);
+ ap_os_dso_unload(isapi_handle);
+ return SERVER_ERROR;
+ }
+
+ if (!(isapi_entry =
+ (void *)(ap_os_dso_sym(isapi_handle, "HttpExtensionProc")))) {
+ ap_log_rerror(APLOG_MARK, APLOG_ALERT, r,
+ "DLL could not load HttpExtensionProc(): %s",
+ r->filename);
+ ap_os_dso_unload(isapi_handle);
+ return SERVER_ERROR;
+ }
+
+ isapi_term = (void *)(ap_os_dso_sym(isapi_handle, "TerminateExtension"));
+
+ /* Run GetExtensionVersion() */
+
+ if (!(*isapi_version)(pVer)) {
+ ap_log_rerror(APLOG_MARK, APLOG_ALERT, r,
+ "ISAPI GetExtensionVersion() failed: %s", r->filename);
+ ap_os_dso_unload(isapi_handle);
+ return SERVER_ERROR;
+ }
+
+ /* Set up variables. There are a couple of special cases for ISAPI.
+ * XXX: These were taken verbatim from GetServerVariable, and should
+ * be reviewed carefully.
+ */
+ ap_add_common_vars(r);
+ ap_add_cgi_vars(r);
+ ap_table_setn(r->subprocess_env, "UNMAPPED_REMOTE_USER", "REMOTE_USER");
+ ap_table_setn(r->subprocess_env, "SERVER_PORT_SECURE", "0");
+ ap_table_setn(r->subprocess_env, "URL", r->uri);
+
+ /* Set up connection ID */
+ ecb->ConnID = (HCONN)cid;
+ cid->ecb = ecb;
+ cid->r = r;
+ cid->status = 0;
+
+ ecb->cbSize = sizeof(struct _EXTENSION_CONTROL_BLOCK);
+ ecb->dwVersion = MAKELONG(0, 2);
+ ecb->dwHttpStatusCode = 0;
+ strcpy(ecb->lpszLogData, "");
+ ecb->lpszMethod = ap_pstrdup(r->pool, r->method);
+ ecb->lpszQueryString = ap_pstrdup(r->pool, ap_table_get(e, "QUERY_STRING"));
+ ecb->lpszPathInfo = ap_pstrdup(r->pool, ap_table_get(e, "PATH_INFO"));
+ ecb->lpszPathTranslated = ap_pstrdup(r->pool, ap_table_get(e, "PATH_TRANSLATED"));
+ ecb->lpszContentType = ap_pstrdup(r->pool, ap_table_get(e, "CONTENT_TYPE"));
+
+ /* Set up client input */
+ if ((retval = ap_setup_client_block(r, REQUEST_CHUNKED_ERROR))) {
+ if (isapi_term) (*isapi_term)( 2 /* HSE_TERM_MUST_UNLOAD */);
+ ap_os_dso_unload(isapi_handle);
+ return retval;
+ }
+
+ if (ap_should_client_block(r)) {
+ /* Time to start reading the appropriate amount of data,
+ * and allow the administrator to tweak the number
+ * TODO: add the httpd.conf option for ReadAheadBuffer.
+ */
+ if (r->remaining) {
+ ecb->cbTotalBytes = r->remaining;
+ if (ecb->cbTotalBytes > ReadAheadBuffer)
+ ecb->cbAvailable = ReadAheadBuffer;
+ else
+ ecb->cbAvailable = ecb->cbTotalBytes;
+ }
+ else
+ {
+ ecb->cbTotalBytes = 0xffffffff;
+ ecb->cbAvailable = ReadAheadBuffer;
+ }
+
+ ecb->lpbData = ap_pcalloc(r->pool, ecb->cbAvailable + 1);
+
+ p = ecb->lpbData;
+ read = 0;
+ while (read < ecb->cbAvailable &&
+ ((res = ap_get_client_block(r, ecb->lpbData + read,
+ ecb->cbAvailable - read)) > 0)) {
+ read += res;
+ }
+
+ if (res < 0) {
+ if (isapi_term) (*isapi_term)(HSE_TERM_MUST_UNLOAD);
+ ap_os_dso_unload(isapi_handle);
+ return SERVER_ERROR;
+ }
+
+ /* Although its not to spec, IIS seems to null-terminate
+ * its lpdData string. So we will too.
+ *
+ * XXX: This must be an issue... backing out the null
+ * from the count of bytes.
+ */
+ if (res == 0)
+ ecb->cbAvailable = ecb->cbTotalBytes = read;
+ else
+ ecb->cbAvailable = read;
+ ecb->lpbData[read] = '\0';
+ }
+ else {
+ ecb->cbTotalBytes = 0;
+ ecb->cbAvailable = 0;
+ ecb->lpbData = NULL;
+ }
+
+ /* Set up the callbacks */
+
+ ecb->GetServerVariable = &GetServerVariable;
+ ecb->WriteClient = &WriteClient;
+ ecb->ReadClient = &ReadClient;
+ ecb->ServerSupportFunction = &ServerSupportFunction;
+
+ /* All right... try and load the sucker */
+ retval = (*isapi_entry)(ecb);
+
+ /* Set the status (for logging) */
+ if (ecb->dwHttpStatusCode)
+ r->status = ecb->dwHttpStatusCode;
+
+ /* Check for a log message - and log it */
+ if (ecb->lpszLogData && strcmp(ecb->lpszLogData, ""))
+ ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r,
+ "ISAPI: %s: %s", ecb->lpszLogData, r->filename);
+
+ /* Soak up any remaining input */
+ if (r->remaining > 0) {
+ char argsbuffer[HUGE_STRING_LEN];
+ while (ap_get_client_block(r, argsbuffer, HUGE_STRING_LEN) > 0);
+ }
+
+ /* All done with the DLL... get rid of it */
+ if (isapi_term) (*isapi_term)(HSE_TERM_MUST_UNLOAD);
+ ap_os_dso_unload(isapi_handle);
+
+ switch(retval) {
+ case 0: /* Strange, but MS isapi accepts this as success */
+ case HSE_STATUS_SUCCESS:
+ case HSE_STATUS_SUCCESS_AND_KEEP_CONN:
+ /* Ignore the keepalive stuff; Apache handles it just fine without
+ * the ISA's "advice".
+ */
+
+ if (cid->status) /* We have a special status to return */
+ return cid->status;
+
+ return OK;
+ case HSE_STATUS_PENDING: /* We don't support this */
+ if (LogNotSupported)
+ ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, r,
+ "ISAPI asynchronous I/O not supported: %s",
+ r->filename);
+ case HSE_STATUS_ERROR:
+ default:
+ return SERVER_ERROR;
+ }
+
+}
+#pragma optimize("",on)
+
+BOOL WINAPI GetServerVariable (HCONN hConn, LPSTR lpszVariableName,
+ LPVOID lpvBuffer, LPDWORD lpdwSizeofBuffer) {
+ request_rec *r = ((isapi_cid *)hConn)->r;
+ const char *result;
+ DWORD len;
+
+ if (!strcmp(lpszVariableName, "ALL_HTTP")) {
+ /* lf delimited, colon split, comma seperated and
+ * null terminated list of HTTP_ vars
+ */
+ char **env = (char**) ap_table_elts(r->subprocess_env)->elts;
+ int nelts = 2 * ap_table_elts(r->subprocess_env)->nelts;
+ int i;
+
+ for (len = 0, i = 0; i < nelts; i += 2)
+ if (!strncmp(env[i], "HTTP_", 5))
+ len += strlen(env[i]) + strlen(env[i + 1]) + 2;
+
+ if (*lpdwSizeofBuffer < len + 1) {
+ *lpdwSizeofBuffer = len + 1;
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ return FALSE;
+ }
+
+ for (i = 0; i < nelts; i += 2)
+ if (!strncmp(env[i], "HTTP_", 5)) {
+ strcpy(lpvBuffer, env[i]);
+ ((char*)lpvBuffer) += strlen(env[i]);
+ *(((char*)lpvBuffer)++) = ':';
+ strcpy(lpvBuffer, env[i + 1]);
+ ((char*)lpvBuffer) += strlen(env[i + 1]);
+ *(((char*)lpvBuffer)++) = '\n';
+ }
+ *(((char*)lpvBuffer)++) = '\0';
+ *lpdwSizeofBuffer = len;
+ return TRUE;
+ }
+
+ if (!strcmp(lpszVariableName, "ALL_RAW")) {
+ /* lf delimited, colon split, comma seperated and
+ * null terminated list of the raw request header
+ */
+ char **raw = (char**) ap_table_elts(r->headers_in)->elts;
+ int nelts = 2 * ap_table_elts(r->headers_in)->nelts;
+ int i;
+
+ for (len = 0, i = 0; i < nelts; i += 2)
+ len += strlen(raw[i]) + strlen(raw[i + 1]) + 2;
+
+ if (*lpdwSizeofBuffer < len + 1) {
+ *lpdwSizeofBuffer = len + 1;
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ return FALSE;
+ }
+
+ for (i = 0; i < nelts; i += 2) {
+ strcpy(lpvBuffer, raw[i]);
+ ((char*)lpvBuffer) += strlen(raw[i]);
+ *(((char*)lpvBuffer)++) = ':';
+ *(((char*)lpvBuffer)++) = ' ';
+ strcpy(lpvBuffer, raw[i + 1]);
+ ((char*)lpvBuffer) += strlen(raw[i + 1]);
+ *(((char*)lpvBuffer)++) = '\n';
+ i += 2;
+ }
+ *(((char*)lpvBuffer)++) = '\0';
+ *lpdwSizeofBuffer = len;
+ return TRUE;
+ }
+
+ /* Not a special case */
+ result = ap_table_get(r->subprocess_env, lpszVariableName);
+ if (result) {
+ len = strlen(result);
+ if (*lpdwSizeofBuffer < len + 1) {
+ *lpdwSizeofBuffer = len + 1;
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ return FALSE;
+ }
+ strcpy(lpvBuffer, result);
+ *lpdwSizeofBuffer = len;
+ return TRUE;
+ }
+
+ /* Not Found */
+ SetLastError(ERROR_INVALID_INDEX);
+ return FALSE;
+}
+
+BOOL WINAPI WriteClient (HCONN ConnID, LPVOID Buffer, LPDWORD lpwdwBytes,
+ DWORD dwReserved) {
+ request_rec *r = ((isapi_cid *)ConnID)->r;
+
+ /* We only support synchronous writing */
+ if (dwReserved && dwReserved != HSE_IO_SYNC) {
+ if (LogNotSupported)
+ ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, r,
+ "ISAPI asynchronous I/O not supported: %s",
+ r->filename);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ if ((*lpwdwBytes = ap_rwrite(Buffer, *lpwdwBytes, r)) <= 0) {
+ if (!GetLastError())
+ SetLastError(ERROR); /* XXX: Find the right error code */
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+BOOL WINAPI ReadClient (HCONN ConnID, LPVOID lpvBuffer, LPDWORD lpdwSize) {
+ request_rec *r = ((isapi_cid *)ConnID)->r;
+ DWORD read = 0;
+ int res;
+
+ if (r->remaining < (long) *lpdwSize)
+ *lpdwSize = r->remaining;
+
+ while (read < *lpdwSize &&
+ ((res = ap_get_client_block(r, (char*)lpvBuffer + read,
+ *lpdwSize - read)) > 0)) {
+ if (res < 0) {
+ *lpdwSize = 0;
+ if (!GetLastError())
+ SetLastError(ERROR); /* XXX: Find the right error code */
+ return FALSE;
+ }
+
+ read += res;
+ }
+
+ *lpdwSize = read;
+ return TRUE;
+}
+
+static BOOL SendResponseHeaderEx(isapi_cid *cid, const char *stat,
+ const char *head, DWORD statlen,
+ DWORD headlen)
+{
+ int termarg;
+ char *termch;
+
+ if (!stat || statlen == 0 || !*stat) {
+ stat = "Status: 200 OK";
+ }
+ else {
+ char *newstat;
+ newstat = ap_palloc(cid->r->pool, statlen + 9);
+ strcpy(newstat, "Status: ");
+ ap_cpystrn(newstat + 8, stat, statlen + 1);
+ stat = newstat;
+ }
+
+ if (!head || headlen == 0 || !*head) {
+ head = "\r\n";
+ }
+ else
+ {
+ if (head[headlen]) {
+ /* Whoops... not NULL terminated */
+ head = ap_pstrndup(cid->r->pool, head, headlen);
+ }
+ }
+
+ /* Parse them out, or die trying */
+ cid->status = ap_scan_script_header_err_strs(cid->r, NULL, &termch,
+ &termarg, stat, head, NULL);
+ cid->ecb->dwHttpStatusCode = cid->r->status;
+
+ /* All the headers should be set now */
+ ap_send_http_header(cid->r);
+
+ /* Any data left should now be sent directly,
+ * it may be raw if headlen was provided.
+ */
+ if (termch && (termarg == 1)) {
+ if (headlen == -1 && *termch)
+ ap_rputs(termch, cid->r);
+ else if (headlen > (size_t) (termch - head))
+ ap_rwrite(termch, headlen - (termch - head), cid->r);
+ }
+
+ if (cid->status == HTTP_INTERNAL_SERVER_ERROR)
+ return FALSE;
+ return TRUE;
+}
+
+/* XXX: Is there is still an O(n^2) attack possible here? Please detail. */
+BOOL WINAPI ServerSupportFunction (HCONN hConn, DWORD dwHSERequest,
+ LPVOID lpvBuffer, LPDWORD lpdwSize,
+ LPDWORD lpdwDataType) {
+ isapi_cid *cid = (isapi_cid *)hConn;
+ request_rec *r = cid->r;
+ request_rec *subreq;
+
+ switch (dwHSERequest) {
+ case 1: /* HSE_REQ_SEND_URL_REDIRECT_RESP */
+ /* Set the status to be returned when the HttpExtensionProc()
+ * is done.
+ * WARNING: Microsoft now advertises HSE_REQ_SEND_URL_REDIRECT_RESP
+ * and HSE_REQ_SEND_URL as equivalant per the Jan 2000 SDK.
+ * They most definately are not, even in their own samples.
+ */
+ ap_table_set(r->headers_out, "Location", lpvBuffer);
+ cid->status = cid->r->status
+ = cid->ecb->dwHttpStatusCode = HTTP_MOVED_TEMPORARILY;
+ return TRUE;
+
+ case 2: /* HSE_REQ_SEND_URL */
+ /* Soak up remaining input (there should be none) */
+ if (r->remaining > 0) {
+ char argsbuffer[HUGE_STRING_LEN];
+ while (ap_get_client_block(r, argsbuffer, HUGE_STRING_LEN) > 0);
+ }
+
+ /* Reset the method to GET */
+ r->method = ap_pstrdup(r->pool, "GET");
+ r->method_number = M_GET;
+
+ /* Don't let anyone think there's still data */
+ ap_table_unset(r->headers_in, "Content-Length");
+
+ /* AV fault per PR3598 - redirected path is lost! */
+ (char*)lpvBuffer = ap_pstrdup(r->pool, (char*)lpvBuffer);
+ ap_internal_redirect((char*)lpvBuffer, r);
+ return TRUE;
+
+ case 3: /* HSE_REQ_SEND_RESPONSE_HEADER */
+ {
+ /* Parse them out, or die trying */
+ DWORD statlen = 0, headlen = 0;
+ if (lpvBuffer)
+ statlen = strlen((char*) lpvBuffer);
+ if (lpdwDataType)
+ headlen = strlen((char*) lpdwDataType);
+ return SendResponseHeaderEx(cid, (char*) lpvBuffer, (char*) lpdwDataType,
+ statlen, headlen);
+ }
+
+ case 4: /* HSE_REQ_DONE_WITH_SESSION */
+ /* Do nothing... since we don't support async I/O, they'll
+ * return from HttpExtensionProc soon
+ */
+ return TRUE;
+
+ case 1001: /* HSE_REQ_MAP_URL_TO_PATH */
+ {
+ /* Map a URL to a filename */
+ char *file = (char *)lpvBuffer;
+ DWORD len;
+ subreq = ap_sub_req_lookup_uri(ap_pstrndup(r->pool, file, *lpdwSize), r);
+
+ len = ap_cpystrn(file, subreq->filename, *lpdwSize) - file;
+
+ /* IIS puts a trailing slash on directories, Apache doesn't */
+ if (S_ISDIR (subreq->finfo.st_mode)) {
+ if (len < *lpdwSize - 1) {
+ file[len++] = '\\';
+ file[len] = '\0';
+ }
+ }
+ *lpdwSize = len;
+ return TRUE;
+ }
+
+ case 1002: /* HSE_REQ_GET_SSPI_INFO */
+ if (LogNotSupported)
+ ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, r,
+ "ISAPI ServerSupportFunction HSE_REQ_GET_SSPI_INFO "
+ "is not supported: %s", r->filename);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+
+ case 1003: /* HSE_APPEND_LOG_PARAMETER */
+ /* Log lpvBuffer, of lpdwSize bytes, in the URI Query (cs-uri-query) field
+ * This code will do for now...
+ */
+ ap_table_set(r->notes, "isapi-parameter", (char*) lpvBuffer);
+ if (AppendLogToQuery) {
+ if (r->args)
+ r->args = ap_pstrcat(r->pool, r->args, (char*) lpvBuffer, NULL);
+ else
+ r->args = ap_pstrdup(r->pool, (char*) lpvBuffer);
+ }
+ if (AppendLogToErrors)
+ ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, r,
+ "ISAPI %s: %s", cid->r->filename,
+ (char*) lpvBuffer);
+ return TRUE;
+
+ /* We don't support all this async I/O, Microsoft-specific stuff */
+ case 1005: /* HSE_REQ_IO_COMPLETION */
+ case 1006: /* HSE_REQ_TRANSMIT_FILE */
+ if (LogNotSupported)
+ ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, r,
+ "ISAPI asynchronous I/O not supported: %s",
+ r->filename);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+
+ case 1007: /* HSE_REQ_REFRESH_ISAPI_ACL */
+ /* Since we don't override the user ID and access, we can't reset.
+ */
+ if (LogNotSupported)
+ ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, r,
+ "ISAPI ServerSupportFunction "
+ "HSE_REQ_REFRESH_ISAPI_ACL "
+ "is not supported: %s", r->filename);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+
+ case 1008: /* HSE_REQ_IS_KEEP_CONN */
+ *((LPBOOL) lpvBuffer) = (r->connection->keepalive == 1);
+ return TRUE;
+
+ case 1010: /* HSE_REQ_ASYNC_READ_CLIENT */
+ if (LogNotSupported)
+ ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, r,
+ "ISAPI asynchronous I/O not supported: %s",
+ r->filename);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+
+ case 1011: /* HSE_REQ_GET_IMPERSONATION_TOKEN Added in ISAPI 4.0 */
+ if (LogNotSupported)
+ ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, r,
+ "ISAPI ServerSupportFunction "
+ "HSE_REQ_GET_IMPERSONATION_TOKEN "
+ "is not supported: %s", r->filename);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+
+#ifdef HSE_REQ_MAP_URL_TO_PATH_EX
+ case 1012: /* HSE_REQ_MAP_URL_TO_PATH_EX */
+ {
+ /* Map a URL to a filename */
+ LPHSE_URL_MAPEX_INFO info = (LPHSE_URL_MAPEX_INFO) lpdwDataType;
+ char* test_uri = ap_pstrndup(r->pool, (char *)lpvBuffer, *lpdwSize);
+
+ subreq = ap_sub_req_lookup_uri(test_uri, r);
+ info->cchMatchingURL = strlen(test_uri);
+ info->cchMatchingPath = ap_cpystrn(info->lpszPath, subreq->filename,
+ MAX_PATH) - info->lpszPath;
+
+ /* Mapping started with assuming both strings matched.
+ * Now roll on the path_info as a mismatch and handle
+ * terminating slashes for directory matches.
+ */
+ if (subreq->path_info && *subreq->path_info) {
+ ap_cpystrn(info->lpszPath + info->cchMatchingPath,
+ subreq->path_info, MAX_PATH - info->cchMatchingPath);
+ info->cchMatchingURL -= strlen(subreq->path_info);
+ if (S_ISDIR(subreq->finfo.st_mode)
+ && info->cchMatchingPath < MAX_PATH - 1) {
+ /* roll forward over path_info's first slash */
+ ++info->cchMatchingPath;
+ ++info->cchMatchingURL;
+ }
+ }
+ else if (S_ISDIR(subreq->finfo.st_mode)
+ && info->cchMatchingPath < MAX_PATH - 1) {
+ /* Add a trailing slash for directory */
+ info->lpszPath[info->cchMatchingPath++] = '/';
+ info->lpszPath[info->cchMatchingPath] = '\0';
+ }
+
+ /* If the matched isn't a file, roll match back to the prior slash */
+ if (!subreq->finfo.st_mode) {
+ while (info->cchMatchingPath && info->cchMatchingURL) {
+ if (info->lpszPath[info->cchMatchingPath - 1] == '/')
+ break;
+ --info->cchMatchingPath;
+ --info->cchMatchingURL;
+ }
+ }
+
+ /* Paths returned with back slashes */
+ for (test_uri = info->lpszPath; *test_uri; ++test_uri)
+ if (*test_uri == '/')
+ *test_uri = '\\';
+
+ /* is a combination of:
+ * HSE_URL_FLAGS_READ 0x001 Allow read
+ * HSE_URL_FLAGS_WRITE 0x002 Allow write
+ * HSE_URL_FLAGS_EXECUTE 0x004 Allow execute
+ * HSE_URL_FLAGS_SSL 0x008 Require SSL
+ * HSE_URL_FLAGS_DONT_CACHE 0x010 Don't cache (VRoot only)
+ * HSE_URL_FLAGS_NEGO_CERT 0x020 Allow client SSL cert
+ * HSE_URL_FLAGS_REQUIRE_CERT 0x040 Require client SSL cert
+ * HSE_URL_FLAGS_MAP_CERT 0x080 Map client SSL cert to account
+ * HSE_URL_FLAGS_SSL128 0x100 Require 128-bit SSL cert
+ * HSE_URL_FLAGS_SCRIPT 0x200 Allow script execution
+ *
+ * XxX: As everywhere, EXEC flags could use some work...
+ * and this could go further with more flags, as desired.
+ */
+ info->dwFlags = (subreq->finfo.st_mode & _S_IREAD ? 0x001 : 0)
+ | (subreq->finfo.st_mode & _S_IWRITE ? 0x002 : 0)
+ | (subreq->finfo.st_mode & _S_IEXEC ? 0x204 : 0);
+ return TRUE;
+ }
+#endif
+
+ case 1014: /* HSE_REQ_ABORTIVE_CLOSE */
+ if (LogNotSupported)
+ ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, r,
+ "ISAPI ServerSupportFunction HSE_REQ_ABORTIVE_CLOSE"
+ " is not supported: %s", r->filename);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+
+ case 1015: /* HSE_REQ_GET_CERT_INFO_EX Added in ISAPI 4.0 */
+ if (LogNotSupported)
+ ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, r,
+ "ISAPI ServerSupportFunction "
+ "HSE_REQ_GET_CERT_INFO_EX "
+ "is not supported: %s", r->filename);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+
+#ifdef HSE_REQ_SEND_RESPONSE_HEADER_EX
+ case 1016: /* HSE_REQ_SEND_RESPONSE_HEADER_EX Added in ISAPI 4.0 */
+ {
+ LPHSE_SEND_HEADER_EX_INFO shi
+ = (LPHSE_SEND_HEADER_EX_INFO) lpvBuffer;
+ /* XXX: ignore shi->fKeepConn? We shouldn't need the advise */
+ /* r->connection->keepalive = shi->fKeepConn; */
+ return SendResponseHeaderEx(cid, shi->pszStatus, shi->pszHeader,
+ shi->cchStatus, shi->cchHeader);
+ }
+#endif
+
+ case 1017: /* HSE_REQ_CLOSE_CONNECTION Added after ISAPI 4.0 */
+ if (LogNotSupported)
+ ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, r,
+ "ISAPI ServerSupportFunction "
+ "HSE_REQ_CLOSE_CONNECTION "
+ "is not supported: %s", r->filename);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+
+ case 1018: /* HSE_REQ_IS_CONNECTED Added after ISAPI 4.0 */
+ /* Returns True if client is connected c.f. MSKB Q188346
+ * XXX: That statement is very ambigious... assuming the
+ * identical return mechanism as HSE_REQ_IS_KEEP_CONN.
+ */
+ *((LPBOOL) lpvBuffer) = (r->connection->aborted == 0);
+ return TRUE;
+
+ case 1020: /* HSE_REQ_EXTENSION_TRIGGER Added after ISAPI 4.0 */
+ /* Undocumented - defined by the Microsoft Jan '00 Platform SDK
+ */
+ if (LogNotSupported)
+ ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, r,
+ "ISAPI ServerSupportFunction "
+ "HSE_REQ_EXTENSION_TRIGGER "
+ "is not supported: %s", r->filename);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+
+
+ default:
+ if (LogNotSupported)
+ ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, r,
+ "ISAPI ServerSupportFunction (%d) not supported: "
+ "%s", dwHSERequest, r->filename);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+}
+
+/*
+ * Command handler for the ISAPIReadAheadBuffer directive, which is TAKE1
+ */
+static const char *isapi_cmd_readaheadbuffer(cmd_parms *cmd, void *config,
+ char *arg)
+{
+ long val;
+ const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
+ if (err != NULL) {
+ return err;
+ }
+
+ if (((val = ap_strtol(arg, (char **) &err, 10)) <= 0) || *err)
+ return "ISAPIReadAheadBuffer must be a legitimate value.";
+
+ ReadAheadBuffer = val;
+ return NULL;
+}
+
+/*
+ * Command handler for the ISAPIReadAheadBuffer directive, which is TAKE1
+ */
+static const char *isapi_cmd_lognotsupported(cmd_parms *cmd, void *config,
+ char *arg)
+{
+ const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
+ if (err != NULL) {
+ return err;
+ }
+
+ if (strcasecmp(arg, "on") == 0) {
+ LogNotSupported = -1;
+ }
+ else if (strcasecmp(arg, "off") == 0) {
+ LogNotSupported = 0;
+ }
+ else {
+ return "ISAPILogNotSupported must be on or off";
+ }
+ return NULL;
+}
+
+static const char *isapi_cmd_appendlogtoerrors(cmd_parms *cmd, void *config,
+ char *arg)
+{
+ const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
+ if (err != NULL) {
+ return err;
+ }
+
+ if (strcasecmp(arg, "on") == 0) {
+ AppendLogToErrors = -1;
+ }
+ else if (strcasecmp(arg, "off") == 0) {
+ AppendLogToErrors = 0;
+ }
+ else {
+ return "ISAPIAppendLogToErrors must be on or off";
+ }
+ return NULL;
+}
+
+static const char *isapi_cmd_appendlogtoquery(cmd_parms *cmd, void *config,
+ char *arg)
+{
+ const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
+ if (err != NULL) {
+ return err;
+ }
+
+ if (strcasecmp(arg, "on") == 0) {
+ AppendLogToQuery = -1;
+ }
+ else if (strcasecmp(arg, "off") == 0) {
+ AppendLogToQuery = 0;
+ }
+ else {
+ return "ISAPIAppendLogToQuery must be on or off";
+ }
+ return NULL;
+}
+
+static const command_rec isapi_cmds[] = {
+{ "ISAPIReadAheadBuffer", isapi_cmd_readaheadbuffer, NULL, RSRC_CONF, TAKE1,
+ "Maximum bytes to initially pass to the ISAPI handler" },
+{ "ISAPILogNotSupported", isapi_cmd_lognotsupported, NULL, RSRC_CONF, TAKE1,
+ "Log requests not supported by the ISAPI server" },
+{ "ISAPIAppendLogToErrors", isapi_cmd_appendlogtoerrors, NULL, RSRC_CONF, TAKE1,
+ "Send all Append Log requests to the error log" },
+{ "ISAPIAppendLogToQuery", isapi_cmd_appendlogtoquery, NULL, RSRC_CONF, TAKE1,
+ "Append Log requests are concatinated to the query args" },
+{ NULL }
+};
+
+handler_rec isapi_handlers[] = {
+{ "isapi-isa", isapi_handler },
+{ NULL}
+};
+
+module isapi_module = {
+ STANDARD_MODULE_STUFF,
+ NULL, /* initializer */
+ NULL, /* create per-dir config */
+ NULL, /* merge per-dir config */
+ NULL, /* server config */
+ NULL, /* merge server config */
+ isapi_cmds, /* command table */
+ isapi_handlers, /* handlers */
+ NULL, /* filename translation */
+ NULL, /* check_user_id */
+ NULL, /* check auth */
+ NULL, /* check access */
+ NULL, /* type_checker */
+ NULL, /* logger */
+ NULL /* header parser */
+};
+
+#endif /* WIN32 */
diff --git a/APACHE_1_3_42/src/os/win32/mod_log_forensic.dep b/APACHE_1_3_42/src/os/win32/mod_log_forensic.dep
new file mode 100644
index 0000000000..a067008ef9
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_log_forensic.dep
@@ -0,0 +1,2 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_log_forensic.mak
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_log_forensic.dsp b/APACHE_1_3_42/src/os/win32/mod_log_forensic.dsp
new file mode 100644
index 0000000000..89db5a8678
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_log_forensic.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="mod_log_forensic" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_log_forensic - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_log_forensic.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_log_forensic.mak" CFG="mod_log_forensic - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_log_forensic - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_log_forensic - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_log_forensic - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\mod_log_forensic_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_log_forensic.so" /base:@"BaseAddr.ref",mod_log_forensic /opt:ref
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_log_forensic.so" /base:@"BaseAddr.ref",mod_log_forensic /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_log_forensic - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\mod_log_forensic_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_log_forensic.so" /base:@"BaseAddr.ref",mod_log_forensic
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_log_forensic.so" /base:@"BaseAddr.ref",mod_log_forensic
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_log_forensic - Win32 Release"
+# Name "mod_log_forensic - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\standard\mod_log_forensic.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_log_forensic.mak b/APACHE_1_3_42/src/os/win32/mod_log_forensic.mak
new file mode 100644
index 0000000000..d5e5d9983b
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_log_forensic.mak
@@ -0,0 +1,246 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_log_forensic.dsp
+!IF "$(CFG)" == ""
+CFG=mod_log_forensic - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_log_forensic - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_log_forensic - Win32 Release" && "$(CFG)" != "mod_log_forensic - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_log_forensic.mak" CFG="mod_log_forensic - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_log_forensic - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_log_forensic - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_log_forensic - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_log_forensic.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_log_forensic.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_log_forensic.obj"
+ -@erase "$(INTDIR)\mod_log_forensic_src.idb"
+ -@erase "$(INTDIR)\mod_log_forensic_src.pdb"
+ -@erase "$(OUTDIR)\mod_log_forensic.exp"
+ -@erase "$(OUTDIR)\mod_log_forensic.lib"
+ -@erase "$(OUTDIR)\mod_log_forensic.pdb"
+ -@erase "$(OUTDIR)\mod_log_forensic.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_log_forensic_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_log_forensic.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_log_forensic.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_log_forensic.so" /implib:"$(OUTDIR)\mod_log_forensic.lib" /base:@"BaseAddr.ref",mod_log_forensic /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_log_forensic.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_log_forensic.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_log_forensic - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_log_forensic.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_log_forensic.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_log_forensic.obj"
+ -@erase "$(INTDIR)\mod_log_forensic_src.idb"
+ -@erase "$(INTDIR)\mod_log_forensic_src.pdb"
+ -@erase "$(OUTDIR)\mod_log_forensic.exp"
+ -@erase "$(OUTDIR)\mod_log_forensic.lib"
+ -@erase "$(OUTDIR)\mod_log_forensic.pdb"
+ -@erase "$(OUTDIR)\mod_log_forensic.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_log_forensic_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_log_forensic.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_log_forensic.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_log_forensic.so" /implib:"$(OUTDIR)\mod_log_forensic.lib" /base:@"BaseAddr.ref",mod_log_forensic
+LINK32_OBJS= \
+ "$(INTDIR)\mod_log_forensic.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_log_forensic.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_log_forensic.dep")
+!INCLUDE "mod_log_forensic.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_log_forensic.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_log_forensic - Win32 Release" || "$(CFG)" == "mod_log_forensic - Win32 Debug"
+
+!IF "$(CFG)" == "mod_log_forensic - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_log_forensic - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\standard\mod_log_forensic.c
+
+"$(INTDIR)\mod_log_forensic.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_mime_magic.dep b/APACHE_1_3_42/src/os/win32/mod_mime_magic.dep
new file mode 100644
index 0000000000..943a5655a4
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_mime_magic.dep
@@ -0,0 +1,21 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_mime_magic.mak
+
+..\..\modules\standard\mod_mime_magic.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_core.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\http_protocol.h"\
+ "..\..\include\http_request.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_uri.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_mime_magic.dsp b/APACHE_1_3_42/src/os/win32/mod_mime_magic.dsp
new file mode 100644
index 0000000000..e24a156cbf
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_mime_magic.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="mod_mime_magic" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_mime_magic - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_mime_magic.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_mime_magic.mak" CFG="mod_mime_magic - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_mime_magic - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_mime_magic - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_mime_magic - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\mod_mime_magic_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_mime_magic.so" /base:@"BaseAddr.ref",mod_mime_magic /opt:ref
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_mime_magic.so" /base:@"BaseAddr.ref",mod_mime_magic /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_mime_magic - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\mod_mime_magic_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_mime_magic.so" /base:@"BaseAddr.ref",mod_mime_magic
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_mime_magic.so" /base:@"BaseAddr.ref",mod_mime_magic
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_mime_magic - Win32 Release"
+# Name "mod_mime_magic - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\standard\mod_mime_magic.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_mime_magic.mak b/APACHE_1_3_42/src/os/win32/mod_mime_magic.mak
new file mode 100644
index 0000000000..ca3c3f2b41
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_mime_magic.mak
@@ -0,0 +1,246 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_mime_magic.dsp
+!IF "$(CFG)" == ""
+CFG=mod_mime_magic - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_mime_magic - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_mime_magic - Win32 Release" && "$(CFG)" != "mod_mime_magic - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_mime_magic.mak" CFG="mod_mime_magic - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_mime_magic - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_mime_magic - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_mime_magic - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_mime_magic.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_mime_magic.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_mime_magic.obj"
+ -@erase "$(INTDIR)\mod_mime_magic_src.idb"
+ -@erase "$(INTDIR)\mod_mime_magic_src.pdb"
+ -@erase "$(OUTDIR)\mod_mime_magic.exp"
+ -@erase "$(OUTDIR)\mod_mime_magic.lib"
+ -@erase "$(OUTDIR)\mod_mime_magic.pdb"
+ -@erase "$(OUTDIR)\mod_mime_magic.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_mime_magic_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_mime_magic.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_mime_magic.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_mime_magic.so" /implib:"$(OUTDIR)\mod_mime_magic.lib" /base:@"BaseAddr.ref",mod_mime_magic /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_mime_magic.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_mime_magic.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_mime_magic - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_mime_magic.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_mime_magic.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_mime_magic.obj"
+ -@erase "$(INTDIR)\mod_mime_magic_src.idb"
+ -@erase "$(INTDIR)\mod_mime_magic_src.pdb"
+ -@erase "$(OUTDIR)\mod_mime_magic.exp"
+ -@erase "$(OUTDIR)\mod_mime_magic.lib"
+ -@erase "$(OUTDIR)\mod_mime_magic.pdb"
+ -@erase "$(OUTDIR)\mod_mime_magic.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_mime_magic_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_mime_magic.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_mime_magic.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_mime_magic.so" /implib:"$(OUTDIR)\mod_mime_magic.lib" /base:@"BaseAddr.ref",mod_mime_magic
+LINK32_OBJS= \
+ "$(INTDIR)\mod_mime_magic.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_mime_magic.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_mime_magic.dep")
+!INCLUDE "mod_mime_magic.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_mime_magic.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_mime_magic - Win32 Release" || "$(CFG)" == "mod_mime_magic - Win32 Debug"
+
+!IF "$(CFG)" == "mod_mime_magic - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_mime_magic - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\standard\mod_mime_magic.c
+
+"$(INTDIR)\mod_mime_magic.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_proxy.dep b/APACHE_1_3_42/src/os/win32/mod_proxy.dep
new file mode 100644
index 0000000000..2c3a30467a
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_proxy.dep
@@ -0,0 +1,139 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_proxy.mak
+
+..\..\modules\proxy\mod_proxy.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\explain.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\http_protocol.h"\
+ "..\..\include\http_request.h"\
+ "..\..\include\http_vhost.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_uri.h"\
+ "..\..\modules\proxy\mod_proxy.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
+
+..\..\modules\proxy\proxy_cache.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_md5.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\explain.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_conf_globals.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_core.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\http_main.h"\
+ "..\..\include\http_protocol.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\multithread.h"\
+ "..\..\include\util_date.h"\
+ "..\..\include\util_uri.h"\
+ "..\..\modules\proxy\mod_proxy.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
+
+..\..\modules\proxy\proxy_connect.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\explain.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\http_main.h"\
+ "..\..\include\http_protocol.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_uri.h"\
+ "..\..\modules\proxy\mod_proxy.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
+
+..\..\modules\proxy\proxy_ftp.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\explain.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_core.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\http_main.h"\
+ "..\..\include\http_protocol.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_uri.h"\
+ "..\..\modules\proxy\mod_proxy.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
+
+..\..\modules\proxy\proxy_http.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\explain.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_core.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\http_main.h"\
+ "..\..\include\http_protocol.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_date.h"\
+ "..\..\include\util_uri.h"\
+ "..\..\modules\proxy\mod_proxy.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
+
+..\..\modules\proxy\proxy_util.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_md5.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\explain.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\http_main.h"\
+ "..\..\include\http_protocol.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\multithread.h"\
+ "..\..\include\util_date.h"\
+ "..\..\include\util_uri.h"\
+ "..\..\modules\proxy\mod_proxy.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_proxy.dsp b/APACHE_1_3_42/src/os/win32/mod_proxy.dsp
new file mode 100644
index 0000000000..bf0d5b8599
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_proxy.dsp
@@ -0,0 +1,127 @@
+# Microsoft Developer Studio Project File - Name="mod_proxy" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_proxy - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_proxy.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_proxy.mak" CFG="mod_proxy - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_proxy - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_proxy - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_proxy - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /I "..\..\modules\proxy" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /D "WIN32_LEAN_AND_MEAN" /Fd"Release\mod_proxy_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_proxy.so" /base:@"BaseAddr.ref",mod_proxy /opt:ref
+# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_proxy.so" /base:@"BaseAddr.ref",mod_proxy /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_proxy - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ".\ApacheM0"
+# PROP BASE Intermediate_Dir ".\ApacheM0"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /I "..\..\modules\proxy" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /D "WIN32_LEAN_AND_MEAN" /Fd"Debug\mod_proxy_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_proxy.so" /base:@"BaseAddr.ref",mod_proxy
+# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_proxy.so" /base:@"BaseAddr.ref",mod_proxy
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_proxy - Win32 Release"
+# Name "mod_proxy - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
+# Begin Source File
+
+SOURCE=..\..\modules\proxy\mod_proxy.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\modules\proxy\proxy_cache.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\modules\proxy\proxy_connect.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\modules\proxy\proxy_ftp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\modules\proxy\proxy_http.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\modules\proxy\proxy_util.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
+# Begin Source File
+
+SOURCE=..\..\modules\proxy\mod_proxy.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_proxy.mak b/APACHE_1_3_42/src/os/win32/mod_proxy.mak
new file mode 100644
index 0000000000..ab127eaa96
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_proxy.mak
@@ -0,0 +1,295 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_proxy.dsp
+!IF "$(CFG)" == ""
+CFG=mod_proxy - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_proxy - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_proxy - Win32 Release" && "$(CFG)" != "mod_proxy - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_proxy.mak" CFG="mod_proxy - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_proxy - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_proxy - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_proxy - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_proxy.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_proxy.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_proxy.obj"
+ -@erase "$(INTDIR)\mod_proxy_src.idb"
+ -@erase "$(INTDIR)\mod_proxy_src.pdb"
+ -@erase "$(INTDIR)\proxy_cache.obj"
+ -@erase "$(INTDIR)\proxy_connect.obj"
+ -@erase "$(INTDIR)\proxy_ftp.obj"
+ -@erase "$(INTDIR)\proxy_http.obj"
+ -@erase "$(INTDIR)\proxy_util.obj"
+ -@erase "$(OUTDIR)\mod_proxy.exp"
+ -@erase "$(OUTDIR)\mod_proxy.lib"
+ -@erase "$(OUTDIR)\mod_proxy.pdb"
+ -@erase "$(OUTDIR)\mod_proxy.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /I "..\..\modules\proxy" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /D "WIN32_LEAN_AND_MEAN" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_proxy_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_proxy.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_proxy.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_proxy.so" /implib:"$(OUTDIR)\mod_proxy.lib" /base:@"BaseAddr.ref",mod_proxy /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_proxy.obj" \
+ "$(INTDIR)\proxy_cache.obj" \
+ "$(INTDIR)\proxy_connect.obj" \
+ "$(INTDIR)\proxy_ftp.obj" \
+ "$(INTDIR)\proxy_http.obj" \
+ "$(INTDIR)\proxy_util.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_proxy.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_proxy - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_proxy.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_proxy.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_proxy.obj"
+ -@erase "$(INTDIR)\mod_proxy_src.idb"
+ -@erase "$(INTDIR)\mod_proxy_src.pdb"
+ -@erase "$(INTDIR)\proxy_cache.obj"
+ -@erase "$(INTDIR)\proxy_connect.obj"
+ -@erase "$(INTDIR)\proxy_ftp.obj"
+ -@erase "$(INTDIR)\proxy_http.obj"
+ -@erase "$(INTDIR)\proxy_util.obj"
+ -@erase "$(OUTDIR)\mod_proxy.exp"
+ -@erase "$(OUTDIR)\mod_proxy.lib"
+ -@erase "$(OUTDIR)\mod_proxy.pdb"
+ -@erase "$(OUTDIR)\mod_proxy.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /I "..\..\modules\proxy" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /D "WIN32_LEAN_AND_MEAN" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_proxy_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_proxy.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_proxy.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_proxy.so" /implib:"$(OUTDIR)\mod_proxy.lib" /base:@"BaseAddr.ref",mod_proxy
+LINK32_OBJS= \
+ "$(INTDIR)\mod_proxy.obj" \
+ "$(INTDIR)\proxy_cache.obj" \
+ "$(INTDIR)\proxy_connect.obj" \
+ "$(INTDIR)\proxy_ftp.obj" \
+ "$(INTDIR)\proxy_http.obj" \
+ "$(INTDIR)\proxy_util.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_proxy.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_proxy.dep")
+!INCLUDE "mod_proxy.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_proxy.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_proxy - Win32 Release" || "$(CFG)" == "mod_proxy - Win32 Debug"
+SOURCE=..\..\modules\proxy\mod_proxy.c
+
+"$(INTDIR)\mod_proxy.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\modules\proxy\proxy_cache.c
+
+"$(INTDIR)\proxy_cache.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\modules\proxy\proxy_connect.c
+
+"$(INTDIR)\proxy_connect.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\modules\proxy\proxy_ftp.c
+
+"$(INTDIR)\proxy_ftp.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\modules\proxy\proxy_http.c
+
+"$(INTDIR)\proxy_http.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\modules\proxy\proxy_util.c
+
+"$(INTDIR)\proxy_util.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!IF "$(CFG)" == "mod_proxy - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_proxy - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_rewrite.dep b/APACHE_1_3_42/src/os/win32/mod_rewrite.dep
new file mode 100644
index 0000000000..76ddd96c04
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_rewrite.dep
@@ -0,0 +1,27 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_rewrite.mak
+
+..\..\modules\standard\mod_rewrite.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_conf_globals.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_core.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\http_request.h"\
+ "..\..\include\http_vhost.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_uri.h"\
+ "..\..\modules\standard\mod_rewrite.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
+
+.\passwd.c : \
+ ".\passwd.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_rewrite.dsp b/APACHE_1_3_42/src/os/win32/mod_rewrite.dsp
new file mode 100644
index 0000000000..3594837640
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_rewrite.dsp
@@ -0,0 +1,99 @@
+# Microsoft Developer Studio Project File - Name="mod_rewrite" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_rewrite - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_rewrite.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_rewrite.mak" CFG="mod_rewrite - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_rewrite - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_rewrite - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_rewrite - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "NO_DBM_REWRITEMAP" /D "SHARED_MODULE" /D "WIN32_LEAN_AND_MEAN" /Fd"Release\mod_rewrite_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_rewrite.so" /base:@"BaseAddr.ref",mod_rewrite /opt:ref
+# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_rewrite.so" /base:@"BaseAddr.ref",mod_rewrite /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_rewrite - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "NO_DBM_REWRITEMAP" /D "SHARED_MODULE" /D "WIN32_LEAN_AND_MEAN" /Fd"Debug\mod_rewrite_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_rewrite.so" /base:@"BaseAddr.ref",mod_rewrite
+# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_rewrite.so" /base:@"BaseAddr.ref",mod_rewrite
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_rewrite - Win32 Release"
+# Name "mod_rewrite - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\standard\mod_rewrite.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\passwd.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_rewrite.mak b/APACHE_1_3_42/src/os/win32/mod_rewrite.mak
new file mode 100644
index 0000000000..8f96fbff4d
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_rewrite.mak
@@ -0,0 +1,255 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_rewrite.dsp
+!IF "$(CFG)" == ""
+CFG=mod_rewrite - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_rewrite - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_rewrite - Win32 Release" && "$(CFG)" != "mod_rewrite - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_rewrite.mak" CFG="mod_rewrite - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_rewrite - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_rewrite - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_rewrite - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_rewrite.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_rewrite.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_rewrite.obj"
+ -@erase "$(INTDIR)\mod_rewrite_src.idb"
+ -@erase "$(INTDIR)\mod_rewrite_src.pdb"
+ -@erase "$(INTDIR)\passwd.obj"
+ -@erase "$(OUTDIR)\mod_rewrite.exp"
+ -@erase "$(OUTDIR)\mod_rewrite.lib"
+ -@erase "$(OUTDIR)\mod_rewrite.pdb"
+ -@erase "$(OUTDIR)\mod_rewrite.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "NO_DBM_REWRITEMAP" /D "SHARED_MODULE" /D "WIN32_LEAN_AND_MEAN" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_rewrite_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_rewrite.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_rewrite.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_rewrite.so" /implib:"$(OUTDIR)\mod_rewrite.lib" /base:@"BaseAddr.ref",mod_rewrite /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_rewrite.obj" \
+ "$(INTDIR)\passwd.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_rewrite.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_rewrite - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_rewrite.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_rewrite.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_rewrite.obj"
+ -@erase "$(INTDIR)\mod_rewrite_src.idb"
+ -@erase "$(INTDIR)\mod_rewrite_src.pdb"
+ -@erase "$(INTDIR)\passwd.obj"
+ -@erase "$(OUTDIR)\mod_rewrite.exp"
+ -@erase "$(OUTDIR)\mod_rewrite.lib"
+ -@erase "$(OUTDIR)\mod_rewrite.pdb"
+ -@erase "$(OUTDIR)\mod_rewrite.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "NO_DBM_REWRITEMAP" /D "SHARED_MODULE" /D "WIN32_LEAN_AND_MEAN" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_rewrite_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_rewrite.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_rewrite.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_rewrite.so" /implib:"$(OUTDIR)\mod_rewrite.lib" /base:@"BaseAddr.ref",mod_rewrite
+LINK32_OBJS= \
+ "$(INTDIR)\mod_rewrite.obj" \
+ "$(INTDIR)\passwd.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_rewrite.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_rewrite.dep")
+!INCLUDE "mod_rewrite.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_rewrite.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_rewrite - Win32 Release" || "$(CFG)" == "mod_rewrite - Win32 Debug"
+
+!IF "$(CFG)" == "mod_rewrite - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_rewrite - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\standard\mod_rewrite.c
+
+"$(INTDIR)\mod_rewrite.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=.\passwd.c
+
+"$(INTDIR)\passwd.obj" : $(SOURCE) "$(INTDIR)"
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_speling.dep b/APACHE_1_3_42/src/os/win32/mod_speling.dep
new file mode 100644
index 0000000000..ece0bb4ff7
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_speling.dep
@@ -0,0 +1,19 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_speling.mak
+
+..\..\modules\standard\mod_speling.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_core.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_uri.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_speling.dsp b/APACHE_1_3_42/src/os/win32/mod_speling.dsp
new file mode 100644
index 0000000000..d9c0eaf5f1
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_speling.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="mod_speling" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_speling - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_speling.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_speling.mak" CFG="mod_speling - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_speling - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_speling - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_speling - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\mod_speling_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_speling.so" /base:@"BaseAddr.ref",mod_speling /opt:ref
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_speling.so" /base:@"BaseAddr.ref",mod_speling /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_speling - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\mod_speling_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_speling.so" /base:@"BaseAddr.ref",mod_speling
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_speling.so" /base:@"BaseAddr.ref",mod_speling
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_speling - Win32 Release"
+# Name "mod_speling - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\standard\mod_speling.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_speling.mak b/APACHE_1_3_42/src/os/win32/mod_speling.mak
new file mode 100644
index 0000000000..6fd7eaf2d1
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_speling.mak
@@ -0,0 +1,246 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_speling.dsp
+!IF "$(CFG)" == ""
+CFG=mod_speling - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_speling - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_speling - Win32 Release" && "$(CFG)" != "mod_speling - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_speling.mak" CFG="mod_speling - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_speling - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_speling - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_speling - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_speling.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_speling.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_speling.obj"
+ -@erase "$(INTDIR)\mod_speling_src.idb"
+ -@erase "$(INTDIR)\mod_speling_src.pdb"
+ -@erase "$(OUTDIR)\mod_speling.exp"
+ -@erase "$(OUTDIR)\mod_speling.lib"
+ -@erase "$(OUTDIR)\mod_speling.pdb"
+ -@erase "$(OUTDIR)\mod_speling.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_speling_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_speling.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_speling.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_speling.so" /implib:"$(OUTDIR)\mod_speling.lib" /base:@"BaseAddr.ref",mod_speling /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_speling.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_speling.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_speling - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_speling.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_speling.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_speling.obj"
+ -@erase "$(INTDIR)\mod_speling_src.idb"
+ -@erase "$(INTDIR)\mod_speling_src.pdb"
+ -@erase "$(OUTDIR)\mod_speling.exp"
+ -@erase "$(OUTDIR)\mod_speling.lib"
+ -@erase "$(OUTDIR)\mod_speling.pdb"
+ -@erase "$(OUTDIR)\mod_speling.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_speling_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_speling.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_speling.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_speling.so" /implib:"$(OUTDIR)\mod_speling.lib" /base:@"BaseAddr.ref",mod_speling
+LINK32_OBJS= \
+ "$(INTDIR)\mod_speling.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_speling.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_speling.dep")
+!INCLUDE "mod_speling.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_speling.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_speling - Win32 Release" || "$(CFG)" == "mod_speling - Win32 Debug"
+
+!IF "$(CFG)" == "mod_speling - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_speling - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\standard\mod_speling.c
+
+"$(INTDIR)\mod_speling.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_status.dep b/APACHE_1_3_42/src/os/win32/mod_status.dep
new file mode 100644
index 0000000000..4ef8561d29
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_status.dep
@@ -0,0 +1,24 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_status.mak
+
+..\..\modules\standard\mod_status.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_conf_globals.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_core.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\http_main.h"\
+ "..\..\include\http_protocol.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\scoreboard.h"\
+ "..\..\include\util_script.h"\
+ "..\..\include\util_uri.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_status.dsp b/APACHE_1_3_42/src/os/win32/mod_status.dsp
new file mode 100644
index 0000000000..191c08e2f3
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_status.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="mod_status" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_status - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_status.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_status.mak" CFG="mod_status - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_status - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_status - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_status - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\mod_status_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_status.so" /base:@"BaseAddr.ref",mod_status /opt:ref
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_status.so" /base:@"BaseAddr.ref",mod_status /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_status - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\mod_status_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_status.so" /base:@"BaseAddr.ref",mod_status
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_status.so" /base:@"BaseAddr.ref",mod_status
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_status - Win32 Release"
+# Name "mod_status - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\standard\mod_status.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_status.mak b/APACHE_1_3_42/src/os/win32/mod_status.mak
new file mode 100644
index 0000000000..9e85dee521
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_status.mak
@@ -0,0 +1,246 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_status.dsp
+!IF "$(CFG)" == ""
+CFG=mod_status - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_status - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_status - Win32 Release" && "$(CFG)" != "mod_status - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_status.mak" CFG="mod_status - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_status - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_status - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_status - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_status.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_status.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_status.obj"
+ -@erase "$(INTDIR)\mod_status_src.idb"
+ -@erase "$(INTDIR)\mod_status_src.pdb"
+ -@erase "$(OUTDIR)\mod_status.exp"
+ -@erase "$(OUTDIR)\mod_status.lib"
+ -@erase "$(OUTDIR)\mod_status.pdb"
+ -@erase "$(OUTDIR)\mod_status.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_status_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_status.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_status.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_status.so" /implib:"$(OUTDIR)\mod_status.lib" /base:@"BaseAddr.ref",mod_status /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_status.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_status.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_status - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_status.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_status.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_status.obj"
+ -@erase "$(INTDIR)\mod_status_src.idb"
+ -@erase "$(INTDIR)\mod_status_src.pdb"
+ -@erase "$(OUTDIR)\mod_status.exp"
+ -@erase "$(OUTDIR)\mod_status.lib"
+ -@erase "$(OUTDIR)\mod_status.pdb"
+ -@erase "$(OUTDIR)\mod_status.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_status_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_status.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_status.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_status.so" /implib:"$(OUTDIR)\mod_status.lib" /base:@"BaseAddr.ref",mod_status
+LINK32_OBJS= \
+ "$(INTDIR)\mod_status.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_status.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_status.dep")
+!INCLUDE "mod_status.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_status.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_status - Win32 Release" || "$(CFG)" == "mod_status - Win32 Debug"
+
+!IF "$(CFG)" == "mod_status - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_status - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\standard\mod_status.c
+
+"$(INTDIR)\mod_status.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_unique_id.dep b/APACHE_1_3_42/src/os/win32/mod_unique_id.dep
new file mode 100644
index 0000000000..a91486c541
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_unique_id.dep
@@ -0,0 +1,19 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_unique_id.mak
+
+..\..\modules\standard\mod_unique_id.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_log.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\multithread.h"\
+ "..\..\include\util_uri.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_unique_id.dsp b/APACHE_1_3_42/src/os/win32/mod_unique_id.dsp
new file mode 100644
index 0000000000..c89cfd946a
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_unique_id.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="mod_unique_id" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_unique_id - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_unique_id.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_unique_id.mak" CFG="mod_unique_id - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_unique_id - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_unique_id - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_unique_id - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\mod_unique_id_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_unique_id.so" /base:@"BaseAddr.ref",mod_unique_id /opt:ref
+# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_unique_id.so" /base:@"BaseAddr.ref",mod_unique_id /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_unique_id - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\mod_unique_id_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_unique_id.so" /base:@"BaseAddr.ref",mod_unique_id
+# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_unique_id.so" /base:@"BaseAddr.ref",mod_unique_id
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_unique_id - Win32 Release"
+# Name "mod_unique_id - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\standard\mod_unique_id.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_unique_id.mak b/APACHE_1_3_42/src/os/win32/mod_unique_id.mak
new file mode 100644
index 0000000000..22c0561915
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_unique_id.mak
@@ -0,0 +1,246 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_unique_id.dsp
+!IF "$(CFG)" == ""
+CFG=mod_unique_id - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_unique_id - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_unique_id - Win32 Release" && "$(CFG)" != "mod_unique_id - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_unique_id.mak" CFG="mod_unique_id - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_unique_id - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_unique_id - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_unique_id - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_unique_id.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_unique_id.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_unique_id.obj"
+ -@erase "$(INTDIR)\mod_unique_id_src.idb"
+ -@erase "$(INTDIR)\mod_unique_id_src.pdb"
+ -@erase "$(OUTDIR)\mod_unique_id.exp"
+ -@erase "$(OUTDIR)\mod_unique_id.lib"
+ -@erase "$(OUTDIR)\mod_unique_id.pdb"
+ -@erase "$(OUTDIR)\mod_unique_id.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_unique_id_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_unique_id.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_unique_id.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_unique_id.so" /implib:"$(OUTDIR)\mod_unique_id.lib" /base:@"BaseAddr.ref",mod_unique_id /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_unique_id.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_unique_id.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_unique_id - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_unique_id.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_unique_id.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_unique_id.obj"
+ -@erase "$(INTDIR)\mod_unique_id_src.idb"
+ -@erase "$(INTDIR)\mod_unique_id_src.pdb"
+ -@erase "$(OUTDIR)\mod_unique_id.exp"
+ -@erase "$(OUTDIR)\mod_unique_id.lib"
+ -@erase "$(OUTDIR)\mod_unique_id.pdb"
+ -@erase "$(OUTDIR)\mod_unique_id.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_unique_id_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_unique_id.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_unique_id.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_unique_id.so" /implib:"$(OUTDIR)\mod_unique_id.lib" /base:@"BaseAddr.ref",mod_unique_id
+LINK32_OBJS= \
+ "$(INTDIR)\mod_unique_id.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_unique_id.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_unique_id.dep")
+!INCLUDE "mod_unique_id.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_unique_id.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_unique_id - Win32 Release" || "$(CFG)" == "mod_unique_id - Win32 Debug"
+
+!IF "$(CFG)" == "mod_unique_id - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_unique_id - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\standard\mod_unique_id.c
+
+"$(INTDIR)\mod_unique_id.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_usertrack.dep b/APACHE_1_3_42/src/os/win32/mod_usertrack.dep
new file mode 100644
index 0000000000..43d6aeeb70
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_usertrack.dep
@@ -0,0 +1,18 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_usertrack.mak
+
+..\..\modules\standard\mod_usertrack.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_core.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_uri.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_usertrack.dsp b/APACHE_1_3_42/src/os/win32/mod_usertrack.dsp
new file mode 100644
index 0000000000..fe2167a1c3
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_usertrack.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="mod_usertrack" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_usertrack - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_usertrack.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_usertrack.mak" CFG="mod_usertrack - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_usertrack - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_usertrack - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_usertrack - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\mod_usertrack_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib wsock32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_usertrack.so" /base:@"BaseAddr.ref",mod_usertrack /opt:ref
+# ADD LINK32 kernel32.lib wsock32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_usertrack.so" /base:@"BaseAddr.ref",mod_usertrack /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_usertrack - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\mod_usertrack_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib wsock32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_usertrack.so" /base:@"BaseAddr.ref",mod_usertrack
+# ADD LINK32 kernel32.lib wsock32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_usertrack.so" /base:@"BaseAddr.ref",mod_usertrack
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_usertrack - Win32 Release"
+# Name "mod_usertrack - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\standard\mod_usertrack.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_usertrack.mak b/APACHE_1_3_42/src/os/win32/mod_usertrack.mak
new file mode 100644
index 0000000000..8ee6ca813d
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_usertrack.mak
@@ -0,0 +1,246 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_usertrack.dsp
+!IF "$(CFG)" == ""
+CFG=mod_usertrack - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_usertrack - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_usertrack - Win32 Release" && "$(CFG)" != "mod_usertrack - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_usertrack.mak" CFG="mod_usertrack - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_usertrack - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_usertrack - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_usertrack - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_usertrack.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_usertrack.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_usertrack.obj"
+ -@erase "$(INTDIR)\mod_usertrack_src.idb"
+ -@erase "$(INTDIR)\mod_usertrack_src.pdb"
+ -@erase "$(OUTDIR)\mod_usertrack.exp"
+ -@erase "$(OUTDIR)\mod_usertrack.lib"
+ -@erase "$(OUTDIR)\mod_usertrack.pdb"
+ -@erase "$(OUTDIR)\mod_usertrack.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_usertrack_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_usertrack.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib wsock32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_usertrack.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_usertrack.so" /implib:"$(OUTDIR)\mod_usertrack.lib" /base:@"BaseAddr.ref",mod_usertrack /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_usertrack.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_usertrack.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_usertrack - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_usertrack.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_usertrack.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_usertrack.obj"
+ -@erase "$(INTDIR)\mod_usertrack_src.idb"
+ -@erase "$(INTDIR)\mod_usertrack_src.pdb"
+ -@erase "$(OUTDIR)\mod_usertrack.exp"
+ -@erase "$(OUTDIR)\mod_usertrack.lib"
+ -@erase "$(OUTDIR)\mod_usertrack.pdb"
+ -@erase "$(OUTDIR)\mod_usertrack.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_usertrack_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_usertrack.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib wsock32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_usertrack.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_usertrack.so" /implib:"$(OUTDIR)\mod_usertrack.lib" /base:@"BaseAddr.ref",mod_usertrack
+LINK32_OBJS= \
+ "$(INTDIR)\mod_usertrack.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_usertrack.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_usertrack.dep")
+!INCLUDE "mod_usertrack.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_usertrack.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_usertrack - Win32 Release" || "$(CFG)" == "mod_usertrack - Win32 Debug"
+
+!IF "$(CFG)" == "mod_usertrack - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_usertrack - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\standard\mod_usertrack.c
+
+"$(INTDIR)\mod_usertrack.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_vhost_alias.dep b/APACHE_1_3_42/src/os/win32/mod_vhost_alias.dep
new file mode 100644
index 0000000000..e4c3465afc
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_vhost_alias.dep
@@ -0,0 +1,18 @@
+# Microsoft Developer Studio Generated Dependency File, included by mod_vhost_alias.mak
+
+..\..\modules\standard\mod_vhost_alias.c : \
+ "..\..\include\ap.h"\
+ "..\..\include\ap_alloc.h"\
+ "..\..\include\ap_config.h"\
+ "..\..\include\ap_ctype.h"\
+ "..\..\include\ap_ebcdic.h"\
+ "..\..\include\ap_mmn.h"\
+ "..\..\include\buff.h"\
+ "..\..\include\hsregex.h"\
+ "..\..\include\http_config.h"\
+ "..\..\include\http_core.h"\
+ "..\..\include\httpd.h"\
+ "..\..\include\util_uri.h"\
+ ".\os.h"\
+ ".\readdir.h"\
+
diff --git a/APACHE_1_3_42/src/os/win32/mod_vhost_alias.dsp b/APACHE_1_3_42/src/os/win32/mod_vhost_alias.dsp
new file mode 100644
index 0000000000..14180ab33d
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_vhost_alias.dsp
@@ -0,0 +1,95 @@
+# Microsoft Developer Studio Project File - Name="mod_vhost_alias" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_vhost_alias - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_vhost_alias.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_vhost_alias.mak" CFG="mod_vhost_alias - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_vhost_alias - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_vhost_alias - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_vhost_alias - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /Zi /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\mod_vhost_alias_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_vhost_alias.so" /base:@"BaseAddr.ref",mod_vhost_alias /opt:ref
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_vhost_alias.so" /base:@"BaseAddr.ref",mod_vhost_alias /opt:ref
+
+!ELSEIF "$(CFG)" == "mod_vhost_alias - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\mod_vhost_alias_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_vhost_alias.so" /base:@"BaseAddr.ref",mod_vhost_alias
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_vhost_alias.so" /base:@"BaseAddr.ref",mod_vhost_alias
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_vhost_alias - Win32 Release"
+# Name "mod_vhost_alias - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\..\modules\standard\mod_vhost_alias.c
+# End Source File
+# End Target
+# End Project
diff --git a/APACHE_1_3_42/src/os/win32/mod_vhost_alias.mak b/APACHE_1_3_42/src/os/win32/mod_vhost_alias.mak
new file mode 100644
index 0000000000..285a1008c1
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/mod_vhost_alias.mak
@@ -0,0 +1,246 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on mod_vhost_alias.dsp
+!IF "$(CFG)" == ""
+CFG=mod_vhost_alias - Win32 Release
+!MESSAGE No configuration specified. Defaulting to mod_vhost_alias - Win32 Release.
+!ENDIF
+
+!IF "$(CFG)" != "mod_vhost_alias - Win32 Release" && "$(CFG)" != "mod_vhost_alias - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_vhost_alias.mak" CFG="mod_vhost_alias - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_vhost_alias - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_vhost_alias - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "mod_vhost_alias - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_vhost_alias.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Release" "$(OUTDIR)\mod_vhost_alias.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_vhost_alias.obj"
+ -@erase "$(INTDIR)\mod_vhost_alias_src.idb"
+ -@erase "$(INTDIR)\mod_vhost_alias_src.pdb"
+ -@erase "$(OUTDIR)\mod_vhost_alias.exp"
+ -@erase "$(OUTDIR)\mod_vhost_alias.lib"
+ -@erase "$(OUTDIR)\mod_vhost_alias.pdb"
+ -@erase "$(OUTDIR)\mod_vhost_alias.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /Zi /O2 /Oy- /I "..\..\include" /I "..\..\os\win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_vhost_alias_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_vhost_alias.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_vhost_alias.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_vhost_alias.so" /implib:"$(OUTDIR)\mod_vhost_alias.lib" /base:@"BaseAddr.ref",mod_vhost_alias /opt:ref
+LINK32_OBJS= \
+ "$(INTDIR)\mod_vhost_alias.obj" \
+ "..\..\Release\ApacheCore.lib"
+
+"$(OUTDIR)\mod_vhost_alias.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "mod_vhost_alias - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\mod_vhost_alias.so"
+
+!ELSE
+
+ALL : "ApacheCore - Win32 Debug" "$(OUTDIR)\mod_vhost_alias.so"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"ApacheCore - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\mod_vhost_alias.obj"
+ -@erase "$(INTDIR)\mod_vhost_alias_src.idb"
+ -@erase "$(INTDIR)\mod_vhost_alias_src.pdb"
+ -@erase "$(OUTDIR)\mod_vhost_alias.exp"
+ -@erase "$(OUTDIR)\mod_vhost_alias.lib"
+ -@erase "$(OUTDIR)\mod_vhost_alias.pdb"
+ -@erase "$(OUTDIR)\mod_vhost_alias.so"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /GX /Zi /Od /I "..\..\include" /I "..\..\os\win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\mod_vhost_alias_src" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_vhost_alias.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib /nologo /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\mod_vhost_alias.pdb" /debug /machine:I386 /out:"$(OUTDIR)\mod_vhost_alias.so" /implib:"$(OUTDIR)\mod_vhost_alias.lib" /base:@"BaseAddr.ref",mod_vhost_alias
+LINK32_OBJS= \
+ "$(INTDIR)\mod_vhost_alias.obj" \
+ "..\..\Debug\ApacheCore.lib"
+
+"$(OUTDIR)\mod_vhost_alias.so" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("mod_vhost_alias.dep")
+!INCLUDE "mod_vhost_alias.dep"
+!ELSE
+!MESSAGE Warning: cannot find "mod_vhost_alias.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "mod_vhost_alias - Win32 Release" || "$(CFG)" == "mod_vhost_alias - Win32 Debug"
+
+!IF "$(CFG)" == "mod_vhost_alias - Win32 Release"
+
+"ApacheCore - Win32 Release" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 ReleaseCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Release" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ELSEIF "$(CFG)" == "mod_vhost_alias - Win32 Debug"
+
+"ApacheCore - Win32 Debug" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug"
+ cd ".\os\win32"
+
+"ApacheCore - Win32 DebugCLEAN" :
+ cd ".\..\.."
+ $(MAKE) /$(MAKEFLAGS) /F ".\ApacheCore.mak" CFG="ApacheCore - Win32 Debug" RECURSE=1 CLEAN
+ cd ".\os\win32"
+
+!ENDIF
+
+SOURCE=..\..\modules\standard\mod_vhost_alias.c
+
+"$(INTDIR)\mod_vhost_alias.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/APACHE_1_3_42/src/os/win32/modules.c b/APACHE_1_3_42/src/os/win32/modules.c
new file mode 100644
index 0000000000..f548e6e579
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/modules.c
@@ -0,0 +1,92 @@
+/* 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.
+ */
+
+/* modules.c --- major modules compiled into Apache for Win32.
+ * Only insert an entry for a module if it must be compiled into
+ * the core server
+ */
+
+#ifdef WIN32
+
+#include "httpd.h"
+#include "http_config.h"
+
+extern module core_module;
+extern module so_module;
+extern module mime_module;
+extern module access_module;
+extern module auth_module;
+extern module negotiation_module;
+extern module includes_module;
+extern module autoindex_module;
+extern module dir_module;
+extern module cgi_module;
+extern module userdir_module;
+extern module alias_module;
+extern module env_module;
+extern module config_log_module;
+extern module asis_module;
+extern module imap_module;
+extern module action_module;
+extern module setenvif_module;
+extern module isapi_module;
+
+module *ap_prelinked_modules[] = {
+ &core_module,
+ &so_module,
+ &mime_module,
+ &access_module,
+ &auth_module,
+ &negotiation_module,
+ &includes_module,
+ &autoindex_module,
+ &dir_module,
+ &cgi_module,
+ &userdir_module,
+ &alias_module,
+ &env_module,
+ &config_log_module,
+ &asis_module,
+ &imap_module,
+ &action_module,
+ &setenvif_module,
+ &isapi_module,
+ NULL
+};
+module *ap_preloaded_modules[] = {
+ &core_module,
+ &so_module,
+ &mime_module,
+ &access_module,
+ &auth_module,
+ &negotiation_module,
+ &includes_module,
+ &autoindex_module,
+ &dir_module,
+ &cgi_module,
+ &userdir_module,
+ &alias_module,
+ &env_module,
+ &config_log_module,
+ &asis_module,
+ &imap_module,
+ &action_module,
+ &setenvif_module,
+ &isapi_module,
+ NULL
+};
+
+#endif /* WIN32 */
diff --git a/APACHE_1_3_42/src/os/win32/monitoring-services.txt b/APACHE_1_3_42/src/os/win32/monitoring-services.txt
new file mode 100644
index 0000000000..c35fd84846
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/monitoring-services.txt
@@ -0,0 +1,53 @@
+From: William A. Rowe, Jr.
+Date: June 7th '00
+Subject: service monitoring in Apache 1.3.13
+
+The concept for a taskbar monitor has been thrown around
+for a very long while. 1.3.13 introduced Win9x services,
+and that added fuel to the mix. Here are some sideband
+observations I've made for other developers...
+
+About Apache as a console, don't start Apache hidden without
+any command line arguments if you want to launch it yourself
+in a hidden window (it will do the classic test for
+AllocConsole/FreeConsole)... drop in some arguments such as
+the -f or -r option and it will fly without thinking it is a
+service under 9x and NT.
+
+Rule two, don't use --ntservice as an argument, ever. Only
+the Windows NT Service Control Manager is allowed to pass that
+flag, and only that flag, when it runs Apache.exe. Do use
+--ntservice as the sole argument to the executable name if
+you are installing an Apache NT service yourself.
+
+Rule three, use -k start and -n name when maintaining the
+HKLM/Software/Microsoft/Windows/CurrentVersion/RunServices
+list, since there is no other way for Apache to know what
+the service is named :) And look at any 9x installed service's
+RunServices entry in the registry for the start service semantic.
+
+Rule four, use the WinNT Service Control Manager exclusively
+for starting, stopping and restarting Apache as an NT service.
+The restart signal is the value 128, as documented in service.h
+and service.c - this will continue to work in Apache 2.0. If
+it fails, you are handling an older version (pre 1.3.13) of
+Apache, and need to stop and then start the service instead.
+
+Rule five, use the legacy pid-named events to signal Win9x
+service Apache to restart and stop the service. But don't
+bother looking for httpd.pid files... you can get the pid
+right from the hidden service control window. Apache 1.3.13
+and 2.x create a hidden window named for the name of the
+service (without the spaces), with a window class of
+"ApacheWin95ServiceMonitor", so can use FindWindow to track
+down running Win9x services. See the service.c code for how
+I accomplished this pretty simply in the -k stop/-k restart
+handler.
+
+Finally, to identify all installed Apache services, just query
+the registry key HKLM\SYSTEM\CurrentControlSet\Services for any
+key that has the ImagePath value of "...\Apache.exe"... or else
+"...\httpd.exe"... (quotes are significant here, if the leading
+quote is ommitted the entire string ends with the text \Apache.exe
+based on Apache's own service installer in every released version.)
+
diff --git a/APACHE_1_3_42/src/os/win32/multithread.c b/APACHE_1_3_42/src/os/win32/multithread.c
new file mode 100644
index 0000000000..f2f1be1214
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/multithread.c
@@ -0,0 +1,273 @@
+/* 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.
+ */
+
+#ifdef WIN32
+
+#include "ap_config.h"
+#include "multithread.h"
+
+#include <process.h>
+#include <assert.h>
+
+static int
+map_rv(int rv)
+{
+ switch(rv)
+ {
+ case WAIT_OBJECT_0:
+ case WAIT_ABANDONED:
+ return(MULTI_OK);
+ case WAIT_TIMEOUT:
+ return(MULTI_TIMEOUT);
+ case WAIT_FAILED:
+ return(MULTI_ERR);
+ default:
+ assert(0);
+ }
+
+ assert(0);
+ return(0);
+}
+
+
+thread *
+create_thread(void (thread_fn)(void *), void *thread_arg)
+{
+ int id;
+ int rv;
+
+ rv = _beginthreadex(NULL, 0, (LPTHREAD_START_ROUTINE)thread_fn,
+ thread_arg, 0, &id);
+
+ return((thread *)rv);
+}
+
+
+int
+kill_thread(thread *thread_id)
+{
+ return(TerminateThread(thread_id, 1));
+}
+
+
+int
+await_thread(thread *thread_id, int sec_to_wait)
+{
+ int rv;
+
+ rv = WaitForSingleObject(thread_id, sec_to_wait*1000);
+
+ return(map_rv(rv));
+}
+
+void
+exit_thread(int status)
+{
+ _endthreadex(status);
+}
+
+void
+free_thread(thread *thread_id)
+{
+ CloseHandle(thread_id);
+}
+
+
+
+API_EXPORT(mutex *) ap_create_mutex(char *name)
+{
+ return(CreateMutex(NULL, FALSE, name));
+}
+
+API_EXPORT(mutex *) ap_open_mutex(char *name)
+{
+ return(OpenMutex(MUTEX_ALL_ACCESS, FALSE, name));
+}
+
+
+API_EXPORT(int) ap_acquire_mutex(mutex *mutex_id)
+{
+ int rv;
+
+ rv = WaitForSingleObject(mutex_id, INFINITE);
+
+ return(map_rv(rv));
+}
+
+API_EXPORT(int) ap_release_mutex(mutex *mutex_id)
+{
+ return(ReleaseMutex(mutex_id));
+}
+
+API_EXPORT(void) ap_destroy_mutex(mutex *mutex_id)
+{
+ CloseHandle(mutex_id);
+}
+
+
+semaphore *
+create_semaphore(int initial)
+{
+ return(CreateSemaphore(NULL, initial, 1000000, NULL));
+}
+
+int acquire_semaphore(semaphore *semaphore_id)
+{
+ int rv;
+
+ rv = WaitForSingleObject(semaphore_id, INFINITE);
+
+ return(map_rv(rv));
+}
+
+int release_semaphore(semaphore *semaphore_id)
+{
+ return(ReleaseSemaphore(semaphore_id, 1, NULL));
+}
+
+void destroy_semaphore(semaphore *semaphore_id)
+{
+ CloseHandle(semaphore_id);
+}
+
+
+event *
+create_event(int manual, int initial, char *name)
+{
+ return(CreateEvent(NULL, manual, initial, name));
+}
+
+event *
+open_event(char *name)
+{
+ return(OpenEvent(EVENT_ALL_ACCESS, FALSE, name));
+}
+
+
+int acquire_event(event *event_id)
+{
+ int rv;
+
+ rv = WaitForSingleObject(event_id, INFINITE);
+
+ return(map_rv(rv));
+}
+
+int set_event(event *event_id)
+{
+ return(SetEvent(event_id));
+}
+
+int reset_event(event *event_id)
+{
+ return(ResetEvent(event_id));
+}
+
+
+void destroy_event(event *event_id)
+{
+ CloseHandle(event_id);
+}
+
+#else
+
+
+thread *create_thread(void (thread_fn)(void *thread_arg),
+ void *thread_arg)
+{
+ return(NULL);
+}
+
+int kill_thread(thread *thread_id)
+{
+ return(0);
+}
+
+int await_thread(thread *thread_id, int sec_to_wait)
+{
+ return(0);
+}
+
+void exit_thread(int status)
+{}
+
+void free_thread(thread *thread_id)
+{}
+
+
+mutex *ap_create_mutex(char *name)
+{
+ return(NULL);
+}
+
+mutex *ap_open_mutex(char *name)
+{
+ return(NULL);
+}
+
+int ap_acquire_mutex(mutex *mutex_id)
+{
+ return(0);
+}
+int ap_release_mutex(mutex *mutex_id)
+{
+ return(0);
+}
+void ap_destroy_mutex(mutex *mutex_id)
+{}
+
+
+semaphore *create_semaphore(int initial)
+{
+ return(NULL);
+}
+int acquire_semaphore(semaphore *semaphore_id)
+{
+ return(0);
+}
+int release_semaphore(semaphore *semaphore_id)
+{
+ return(0);
+}
+void destroy_semaphore(semaphore *semaphore_id)
+{}
+
+event *create_event(int manual, int initial, char *name)
+{
+ return(NULL);
+}
+event *open_event(char *name)
+{
+ return(NULL);
+}
+int acquire_event(event *event_id)
+{
+ return(0);
+}
+int set_event(event *event_id)
+{
+ return(0);
+}
+int reset_event(event *event_id)
+{
+ return(0);
+}
+void destroy_event(event *event_id)
+{}
+
+
+#endif /* WIN32 */
+
diff --git a/APACHE_1_3_42/src/os/win32/os.c b/APACHE_1_3_42/src/os/win32/os.c
new file mode 100644
index 0000000000..a4dd5ceca1
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/os.c
@@ -0,0 +1,294 @@
+/* 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.
+ */
+
+/*
+ * OS abstraction functions. Small functions should be defined
+ * as "__inline" in os.h.
+ */
+
+#include <sys/stat.h>
+#include <stdio.h>
+#include <time.h>
+#include "os.h"
+#include "errno.h"
+
+/* Win95 doesn't like trailing /s. NT and Unix don't mind. This works
+ * around the problem.
+ * Errr... except if it is UNC and we are referring to the root of
+ * the UNC, we MUST have a trailing \ and we can't use /s. Jeez.
+ * Not sure if this refers to all UNCs or just roots,
+ * but I'm going to fix it for all cases for now. (Ben)
+ */
+
+#undef stat
+API_EXPORT(int) os_stat(const char *szPath, struct stat *pStat)
+{
+ int n;
+ int len = strlen(szPath);
+
+ if (len == 0) {
+ errno = ENOENT;
+ return -1;
+ }
+
+ if (len >= MAX_PATH) {
+ errno = ENAMETOOLONG;
+ return -1;
+ }
+
+ if (szPath[0] == '/' && szPath[1] == '/') {
+ char buf[MAX_PATH];
+ char *s;
+ int nSlashes = 0;
+
+ strcpy(buf, szPath);
+ for (s = buf; *s; ++s) {
+ if (*s == '/') {
+ *s = '\\';
+ ++nSlashes;
+ }
+ }
+ /* then we need to add one more to get \\machine\share\ */
+ if (nSlashes == 3) {
+ if (++len >= MAX_PATH) {
+ errno = ENAMETOOLONG;
+ return -1;
+ }
+ *s++ = '\\';
+ }
+ *s = '\0';
+ return stat(buf, pStat);
+ }
+
+ /*
+ * Below removes the trailing /, however, do not remove
+ * it in the case of 'x:/' or stat will fail
+ */
+ n = strlen(szPath);
+ if ((szPath[n - 1] == '\\' || szPath[n - 1] == '/') &&
+ !(n == 3 && szPath[1] == ':')) {
+ char buf[MAX_PATH];
+
+ strcpy(buf, szPath);
+ buf[n - 1] = '\0';
+
+ return stat(buf, pStat);
+ }
+ return stat(szPath, pStat);
+}
+
+/* Fix two really crap problems with Win32 spawn[lv]e*:
+ *
+ * 1. Win32 doesn't deal with spaces in argv.
+ * 2. Win95 doesn't like / in cmdname.
+ */
+
+#undef _spawnv
+API_EXPORT(int) os_spawnv(int mode, const char *cmdname,
+ const char *const *argv)
+{
+ int n;
+ char **aszArgs;
+ const char *szArg;
+ char *szCmd;
+ char *s;
+
+ szCmd = _alloca(strlen(cmdname)+1);
+ strcpy(szCmd, cmdname);
+ for (s = szCmd; *s; ++s) {
+ if (*s == '/') {
+ *s = '\\';
+ }
+ }
+
+ for (n = 0; argv[n]; ++n)
+ ;
+
+ aszArgs = _alloca((n + 1) * sizeof(const char *));
+
+ for (n = 0; szArg = argv[n]; ++n) {
+ if (strchr(szArg, ' ')) {
+ int l = strlen(szArg);
+
+ aszArgs[n] = _alloca(l + 2 + 1);
+ aszArgs[n][0] = '"';
+ strcpy(&aszArgs[n][1], szArg);
+ aszArgs[n][l + 1] = '"';
+ aszArgs[n][l + 2] = '\0';
+ }
+ else {
+ aszArgs[n] = (char *)szArg;
+ }
+ }
+
+ aszArgs[n] = NULL;
+
+ return _spawnv(mode, szCmd, aszArgs);
+}
+
+#undef _spawnve
+API_EXPORT(int) os_spawnve(int mode, const char *cmdname,
+ const char *const *argv, const char *const *envp)
+{
+ int n;
+ char **aszArgs;
+ const char *szArg;
+ char *szCmd;
+ char *s;
+
+ szCmd = _alloca(strlen(cmdname)+1);
+ strcpy(szCmd, cmdname);
+ for (s = szCmd; *s; ++s) {
+ if (*s == '/') {
+ *s = '\\';
+ }
+ }
+
+ for (n = 0; argv[n]; ++n)
+ ;
+
+ aszArgs = _alloca((n + 1)*sizeof(const char *));
+
+ for (n = 0; szArg = argv[n]; ++n){
+ if (strchr(szArg, ' ')) {
+ int l = strlen(szArg);
+
+ aszArgs[n] = _alloca(l + 2 + 1);
+ aszArgs[n][0] = '"';
+ strcpy(&aszArgs[n][1], szArg);
+ aszArgs[n][l + 1] = '"';
+ aszArgs[n][l + 2] = '\0';
+ }
+ else {
+ aszArgs[n] = (char *)szArg;
+ }
+ }
+
+ aszArgs[n] = NULL;
+
+ return _spawnve(mode, szCmd, aszArgs, envp);
+}
+
+API_EXPORT_NONSTD(int) os_spawnle(int mode, const char *cmdname, ...)
+{
+ int n;
+ va_list vlist;
+ char **aszArgs;
+ const char *szArg;
+ const char *const *aszEnv;
+ char *szCmd;
+ char *s;
+
+ szCmd = _alloca(strlen(cmdname)+1);
+ strcpy(szCmd, cmdname);
+ for (s = szCmd; *s; ++s) {
+ if (*s == '/') {
+ *s = '\\';
+ }
+ }
+
+ va_start(vlist, cmdname);
+ for (n = 0; va_arg(vlist, const char *); ++n)
+ ;
+ va_end(vlist);
+
+ aszArgs = _alloca((n + 1) * sizeof(const char *));
+
+ va_start(vlist, cmdname);
+ for (n = 0; szArg = va_arg(vlist, const char *); ++n) {
+ if (strchr(szArg, ' ')) {
+ int l = strlen(szArg);
+
+ aszArgs[n] = _alloca(l + 2 + 1);
+ aszArgs[n][0] = '"';
+ strcpy(&aszArgs[n][1], szArg);
+ aszArgs[n][l + 1] = '"';
+ aszArgs[n][l + 2] = '\0';
+ }
+ else {
+ aszArgs[n] = (char *)szArg;
+ }
+ }
+
+ aszArgs[n] = NULL;
+
+ aszEnv = va_arg(vlist, const char *const *);
+ va_end(vlist);
+
+ return _spawnve(mode, szCmd, aszArgs, aszEnv);
+}
+
+#undef strftime
+
+/* Partial replacement for strftime. This adds certain expandos to the
+ * Windows version
+ */
+
+API_EXPORT(int) os_strftime(char *s, size_t max, const char *format,
+ const struct tm *tm) {
+ /* If the new format string is bigger than max, the result string probably
+ * won't fit anyway. When %-expandos are added, made sure the padding below
+ * is enough.
+ */
+ char *new_format = (char *) _alloca(max + 11);
+ size_t i, j, format_length = strlen(format);
+ int return_value;
+ int length_written;
+
+ for (i = 0, j = 0; (i < format_length && j < max);) {
+ if (format[i] != '%') {
+ new_format[j++] = format[i++];
+ continue;
+ }
+ switch (format[i+1]) {
+ case 'D':
+ /* Is this locale dependent? Shouldn't be...
+ Also note the year 2000 exposure here */
+ memcpy(new_format + j, "%m/%d/%y", 8);
+ i += 2;
+ j += 8;
+ break;
+ case 'r':
+ memcpy(new_format + j, "%I:%M:%S %p", 11);
+ i += 2;
+ j += 11;
+ break;
+ case 'T':
+ memcpy(new_format + j, "%H:%M:%S", 8);
+ i += 2;
+ j += 8;
+ break;
+ case 'e':
+ length_written = _snprintf(new_format + j, max - j, "%2d",
+ tm->tm_mday);
+ j = (length_written == -1) ? max : (j + length_written);
+ i += 2;
+ break;
+ default:
+ /* We know we can advance two characters forward here. */
+ new_format[j++] = format[i++];
+ new_format[j++] = format[i++];
+ }
+ }
+ if (j >= max) {
+ *s = '\0'; /* Defensive programming, okay since output is undefined */
+ return_value = 0;
+ } else {
+ new_format[j] = '\0';
+ return_value = strftime(s, max, new_format, tm);
+ }
+ return return_value;
+}
diff --git a/APACHE_1_3_42/src/os/win32/os.h b/APACHE_1_3_42/src/os/win32/os.h
new file mode 100644
index 0000000000..1fba2d2616
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/os.h
@@ -0,0 +1,193 @@
+/* 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.
+ */
+
+#ifndef APACHE_OS_H
+#define APACHE_OS_H
+
+#ifdef WIN32
+
+/*
+ * Compile the server including all the Windows NT 4.0 header files by
+ * default. We still want the server to run on Win95/98 so use
+ * runtime checks before calling NT specific functions to verify we are
+ * really running on an NT system.
+ */
+#define _WIN32_WINNT 0x0400
+
+/* If it isn't too late, prevent windows.h from including the original
+ * winsock.h header, so that we can still include winsock2.h
+ */
+#if !defined(_WINSOCKAPI_) || !defined(_WINDOWS_)
+#define _WINSOCKAPI_
+#include <windows.h>
+#include <winsock2.h>
+#include <mswsock.h>
+#else
+#include <windows.h>
+#endif
+#include <process.h>
+#include <malloc.h>
+#include <io.h>
+#include <fcntl.h>
+
+#define PLATFORM "Win32"
+
+/*
+ * 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
+ */
+
+/* temporarily replace crypt */
+/* char *crypt(const char *pw, const char *salt); */
+#define crypt(buf,salt) (buf)
+
+/* Although DIR_TYPE is dirent (see nt/readdir.h) we need direct.h for
+ chdir() */
+#include <direct.h>
+
+#define STATUS
+#ifndef STRICT
+#define STRICT
+#endif
+#define CASE_BLIND_FILESYSTEM
+#define NO_WRITEV
+#define NO_SETSID
+#define NO_USE_SIGACTION
+#define NO_TIMES
+#define NO_GETTIMEOFDAY
+#define USE_LONGJMP
+#define HAVE_MMAP
+#define USE_MMAP_SCOREBOARD
+#define MULTITHREAD
+#define HAVE_CANONICAL_FILENAME
+#define HAVE_DRIVE_LETTERS
+#define HAVE_UNC_PATHS
+typedef int uid_t;
+typedef int gid_t;
+typedef int pid_t;
+typedef int tid_t;
+#ifdef _MSC_VER
+/* modified to match declaration in sys/stat.h */
+typedef unsigned short mode_t;
+#endif
+typedef char * caddr_t;
+
+/*
+Define export types. API_EXPORT_NONSTD is a nasty hack to avoid having to declare
+every configuration function as __stdcall.
+*/
+
+#ifdef SHARED_MODULE
+#define API_VAR_EXPORT __declspec(dllimport)
+#define API_EXPORT(type) __declspec(dllimport) type __stdcall
+#define API_EXPORT_NONSTD(type) __declspec(dllimport) type __cdecl
+#else
+#define API_VAR_EXPORT __declspec(dllexport)
+#define API_EXPORT(type) __declspec(dllexport) type __stdcall
+#define API_EXPORT_NONSTD(type) __declspec(dllexport) type __cdecl
+#endif
+#define MODULE_VAR_EXPORT __declspec(dllexport)
+
+#define strcasecmp(s1, s2) stricmp(s1, s2)
+#define strncasecmp(s1, s2, n) strnicmp(s1, s2, n)
+#define lstat(x, y) stat(x, y)
+#ifndef S_ISLNK
+#define S_ISLNK(m) (0)
+#endif
+#ifndef S_ISREG
+#define S_ISREG(m) ((m & _S_IFREG) == _S_IFREG)
+#endif
+#ifndef S_ISDIR
+#define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR)
+#endif
+#define STDIN_FILENO 0
+#define STDOUT_FILENO 1
+#define STDERR_FILENO 2
+#define JMP_BUF jmp_buf
+#define sleep(t) Sleep(t*1000)
+#ifndef O_CREAT
+#define O_CREAT _O_CREAT
+#endif
+#ifndef O_RDWR
+#define O_RDWR _O_RDWR
+#endif
+#define SIGPIPE 17
+/* Seems Windows is not a subgenius */
+#define NO_SLACK
+#include <stddef.h>
+
+/* MSVC asserts that strtol "errno is set to ERANGE
+ * if overflow or underflow occurs"
+ * Ergo we can use the library strtol safely.
+ */
+#define ap_strtol strtol
+
+#define NO_OTHER_CHILD
+#define NO_RELIABLE_PIPED_LOGS
+
+__inline int ap_os_is_path_absolute(const char *file)
+{
+ /* For now, just do the same check that http_request.c and mod_alias.c
+ * do.
+ */
+ return file && (file[0] == '/' || (file[1] == ':' && file[2] == '/'));
+}
+
+#define stat(f,ps) os_stat(f,ps)
+API_EXPORT(int) os_stat(const char *szPath,struct stat *pStat);
+
+API_EXPORT(int) os_strftime(char *s, size_t max, const char *format, const struct tm *tm);
+
+#define _spawnv(mode,cmdname,argv) os_spawnv(mode,cmdname,argv)
+#define spawnv(mode,cmdname,argv) os_spawnv(mode,cmdname,argv)
+API_EXPORT(int) os_spawnv(int mode,const char *cmdname,const char *const *argv);
+#define _spawnve(mode,cmdname,argv,envp) os_spawnve(mode,cmdname,argv,envp)
+#define spawnve(mode,cmdname,argv,envp) os_spawnve(mode,cmdname,argv,envp)
+API_EXPORT(int) os_spawnve(int mode,const char *cmdname,const char *const *argv,const char *const *envp);
+#define _spawnle os_spawnle
+#define spawnle os_spawnle
+API_EXPORT_NONSTD(int) os_spawnle(int mode,const char *cmdname,...);
+
+/* OS-dependent filename routines in util_win32.c */
+
+API_EXPORT(int) ap_os_is_filename_valid(const char *file);
+
+/* Abstractions for dealing with shared object files (DLLs on Win32).
+ * These are used by mod_so.c
+ */
+#define ap_os_dso_handle_t HINSTANCE
+#define ap_os_dso_init()
+#define ap_os_dso_unload(l) FreeLibrary(l)
+#define ap_os_dso_sym(h,s) GetProcAddress(h,s)
+
+API_EXPORT(ap_os_dso_handle_t) ap_os_dso_load(const char *);
+API_EXPORT(const char *) ap_os_dso_error(void);
+
+/* Other ap_os_ routines not used by this platform */
+#define ap_os_kill(pid, sig) kill(pid, sig)
+
+/* Some Win32isms */
+#define HAVE_ISNAN
+#define isnan(n) _isnan(n)
+#define HAVE_ISINF
+#define isinf(n) (!_finite(n))
+
+#define gettid() ((tid_t)GetCurrentThreadId())
+
+#endif /* WIN32 */
+
+#endif /* ! APACHE_OS_H */
diff --git a/APACHE_1_3_42/src/os/win32/passwd.c b/APACHE_1_3_42/src/os/win32/passwd.c
new file mode 100644
index 0000000000..e67c36966e
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/passwd.c
@@ -0,0 +1,37 @@
+/* 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.
+ */
+
+#ifdef WIN32
+
+#include <stdio.h>
+#include <string.h>
+#include "passwd.h"
+
+/* Very tacky implementation */
+
+struct passwd *getpwnam(const char *szUser)
+{
+ static struct passwd pw;
+
+ if(strlen(szUser) > _MAX_PATH-10)
+ return NULL;
+
+ sprintf(pw.pw_dir,"c:/users/%s",szUser);
+
+ return &pw;
+}
+
+#endif /* WIN32 */
diff --git a/APACHE_1_3_42/src/os/win32/passwd.h b/APACHE_1_3_42/src/os/win32/passwd.h
new file mode 100644
index 0000000000..820c2afefb
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/passwd.h
@@ -0,0 +1,33 @@
+/* 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.
+ */
+
+#ifndef APACHE_PASSWD_H
+#define APACHE_PASSWD_H
+
+#ifdef WIN32
+
+#include <stdlib.h>
+
+struct passwd
+{
+ char pw_dir[_MAX_PATH];
+};
+
+struct passwd *getpwnam(const char *szUser);
+
+#endif /* WIN32 */
+
+#endif /* ndef APACHE_PASSWD_H */
diff --git a/APACHE_1_3_42/src/os/win32/readdir.c b/APACHE_1_3_42/src/os/win32/readdir.c
new file mode 100644
index 0000000000..526bb55dad
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/readdir.c
@@ -0,0 +1,100 @@
+/* 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.
+ */
+
+#ifdef WIN32
+
+#include <malloc.h>
+#include <string.h>
+#include <errno.h>
+
+#include "readdir.h"
+
+/**********************************************************************
+ * Implement dirent-style opendir/readdir/closedir on Window 95/NT
+ *
+ * Functions defined are opendir(), readdir() and closedir() with the
+ * same prototypes as the normal dirent.h implementation.
+ *
+ * Does not implement telldir(), seekdir(), rewinddir() or scandir().
+ * The dirent struct is compatible with Unix, except that d_ino is
+ * always 1 and d_off is made up as we go along.
+ *
+ * The DIR typedef is not compatible with Unix.
+ **********************************************************************/
+
+API_EXPORT(DIR *) opendir(const char *dir)
+{
+ DIR *dp;
+ char *filespec;
+ long handle;
+ int index;
+
+ filespec = malloc(strlen(dir) + 2 + 1);
+ strcpy(filespec, dir);
+ index = strlen(filespec) - 1;
+ if (index >= 0 && (filespec[index] == '/' || filespec[index] == '\\'))
+ filespec[index] = '\0';
+ strcat(filespec, "/*");
+
+ dp = (DIR *)malloc(sizeof(DIR));
+ dp->offset = 0;
+ dp->finished = 0;
+ dp->dir = strdup(dir);
+
+ if ((handle = _findfirst(filespec, &(dp->fileinfo))) < 0) {
+ if (errno == ENOENT)
+ dp->finished = 1;
+ else
+ return NULL;
+ }
+
+ dp->handle = handle;
+ free(filespec);
+
+ return dp;
+}
+
+API_EXPORT(struct dirent *) readdir(DIR *dp)
+{
+ if (!dp || dp->finished) return NULL;
+
+ if (dp->offset != 0) {
+ if (_findnext(dp->handle, &(dp->fileinfo)) < 0) {
+ dp->finished = 1;
+ return NULL;
+ }
+ }
+ dp->offset++;
+
+ strncpy(dp->dent.d_name, dp->fileinfo.name, _MAX_FNAME);
+ dp->dent.d_ino = 1;
+ dp->dent.d_reclen = strlen(dp->dent.d_name);
+ dp->dent.d_off = dp->offset;
+
+ return &(dp->dent);
+}
+
+API_EXPORT(int) closedir(DIR *dp)
+{
+ if (!dp) return 0;
+ _findclose(dp->handle);
+ if (dp->dir) free(dp->dir);
+ if (dp) free(dp);
+
+ return 0;
+}
+
+#endif /* WIN32 */
diff --git a/APACHE_1_3_42/src/os/win32/readdir.h b/APACHE_1_3_42/src/os/win32/readdir.h
new file mode 100644
index 0000000000..22dfbc35de
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/readdir.h
@@ -0,0 +1,61 @@
+/* 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.
+ */
+
+/*
+ * Structures and types used to implement opendir/readdir/closedir
+ * on Windows 95/NT.
+ */
+
+#ifndef APACHE_READDIR_H
+#define APACHE_READDIR_H
+
+#ifdef WIN32
+
+#include <io.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+
+#ifndef API_EXPORT
+# define API_EXPORT(type) __declspec(dllexport) type __stdcall
+#endif
+
+/* struct dirent - same as Unix */
+struct dirent {
+ long d_ino; /* inode (always 1 in WIN32) */
+ off_t d_off; /* offset to this dirent */
+ unsigned short d_reclen; /* length of d_name */
+ char d_name[_MAX_FNAME+1]; /* filename (null terminated) */
+};
+
+/* typedef DIR - not the same as Unix */
+typedef struct {
+ long handle; /* _findfirst/_findnext handle */
+ short offset; /* offset into directory */
+ short finished; /* 1 if there are not more files */
+ struct _finddata_t fileinfo; /* from _findfirst/_findnext */
+ char *dir; /* the dir we are reading */
+ struct dirent dent; /* the dirent to return */
+} DIR;
+
+/* Function prototypes */
+API_EXPORT(DIR *) opendir(const char *);
+API_EXPORT(struct dirent *) readdir(DIR *);
+API_EXPORT(int) closedir(DIR *);
+
+#endif /* WIN32 */
+
+#endif /* ndef APACHE_READDIR_H */
diff --git a/APACHE_1_3_42/src/os/win32/registry.c b/APACHE_1_3_42/src/os/win32/registry.c
new file mode 100644
index 0000000000..44620fed8c
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/registry.c
@@ -0,0 +1,568 @@
+/* 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.
+ */
+
+#ifdef WIN32
+/*
+ * Functions to handle interacting with the Win32 registry
+ */
+
+/*
+ * Apache registry key structure
+ *
+ * Apache's registry information is stored in the HKEY_LOCAL_MACHINE
+ * key, under
+ *
+ * HKLM\SOFTWARE\Apache Group\Apache\version
+ *
+ * These keys are defined in this file. The definition of the "version" part
+ * will need updating each time Apache moves from beta to non-beta or from a
+ * release to a development or beta version.
+ */
+
+/* To allow for multiple services, store the configuration file's full path
+ * under each service entry:
+ *
+ * HKLM\System\CurrentControlSet\Services\[service name]\Parameters\ConfPath
+ *
+ * The default configuration path (for console apache) is still stored:
+ *
+ * HKLM\Software\[Vendor]\[Software]\[Version]\ServerRoot
+ */
+
+#include <windows.h>
+#include <stdio.h>
+
+#include "httpd.h"
+#include "http_log.h"
+#include "service.h"
+
+/* Define where the Apache values are stored in the registry. In general
+ * VERSION will be the same across all beta releases for a particular
+ * major release, but will change when the final release is made.
+ */
+
+/* Define where the Apache values are stored in the registry.
+ *
+ * If you are looking here to roll the tarball, you didn't need to visit.
+ * registry.c now picks up the version from include/httpd.h
+ */
+
+#define REGKEY "SOFTWARE\\" SERVER_BASEVENDOR "\\" SERVER_BASEPRODUCT "\\" SERVER_BASEREVISION
+
+#define SERVICEKEYPRE "System\\CurrentControlSet\\Services\\"
+#define SERVICEKEYPOST "\\Parameters"
+
+/*
+ * The Windows API registry key functions don't set the last error
+ * value (the windows equivalent of errno). So we need to set it
+ * with SetLastError() before calling the aplog_error() function.
+ * Because this is common, let's have a macro.
+ */
+#define do_error(rv,fmt,arg) do { \
+ SetLastError(rv); \
+ ap_log_error(APLOG_MARK, APLOG_WIN32ERROR|APLOG_ERR, NULL, fmt,arg); \
+ } while (0);
+
+/*
+ * Get the data for registry key value. This is a generic function that
+ * can either get a value into a caller-supplied buffer, or it can
+ * allocate space for the value from the pass-in pool. It will normally
+ * be used by other functions within this file to get specific key values
+ * (e.g. registry_get_server_root()). This function returns a number of
+ * different error statuses, allowing the caller to differentiate
+ * between a key or value not existing and other kinds of errors. Depending
+ * on the type of data being obtained the caller can then either ignore
+ * the key-not-existing error, or treat it as a real error.
+ *
+ * If ppValue is NULL, allocate space for the value and return it in
+ * *pValue. The return value is the number of bytes in the value.
+ * The first argument is the pool to use to allocate space for the value.
+ *
+ * If pValue is not NULL, assume it is a buffer of nSizeValue bytes,
+ * and write the value into the buffer. The return value is the number
+ * of bytes in the value (so if the return value is greater than
+ * the supplied nSizeValue, the caller knows that *pValue is truncated).
+ * The pool argument is ignored.
+ *
+ * The return value is the number of bytes in the successfully retreived
+ * key if everything worked, or:
+ *
+ * -1 the key does not exists
+ * -2 if out of memory during the function
+ * -3 if the buffer specified by *pValue/nSizeValue was not large enough
+ * for the value.
+ * -4 if an error occurred
+ *
+ * If the return value is negative a message will be logged to the error
+ * log (aplog_error) function. If the return value is -2, -3 or -4 the message
+ * will be logged at priority "error", while if the return value is -1 the
+ * message will be logged at priority "warning".
+ */
+
+static int ap_registry_get_key_int(pool *p, char *key, char *name, char *pBuffer, int nSizeBuffer, char **ppValue)
+{
+ long rv;
+ HKEY hKey;
+ char *pValue;
+ int nSize;
+ int retval;
+
+ rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+ key,
+ 0,
+ KEY_READ,
+ &hKey);
+
+ if (rv == ERROR_FILE_NOT_FOUND) {
+ ap_log_error(APLOG_MARK,APLOG_WARNING|APLOG_NOERRNO,NULL,
+ "Registry does not contain key %s",key);
+ return -1;
+ }
+ if (rv != ERROR_SUCCESS) {
+ do_error(rv, "RegOpenKeyEx HKLM\\%s",key);
+ return -4;
+ }
+
+ if (pBuffer == NULL) {
+ /* Find the size required for the data by passing NULL as the buffer
+ * pointer. On return nSize will contain the size required for the
+ * buffer if the return value is ERROR_SUCCESS.
+ */
+ rv = RegQueryValueEx(hKey,
+ name, /* key name */
+ NULL, /* reserved */
+ NULL, /* type */
+ NULL, /* for value */
+ &nSize); /* for size of "value" */
+
+ if (rv != ERROR_SUCCESS) {
+ do_error(rv, "RegQueryValueEx(key %s)", key);
+ return -1;
+ }
+
+ pValue = ap_palloc(p, nSize);
+ *ppValue = pValue;
+ if (!pValue) {
+ /* Eek, out of memory, probably not worth trying to carry on,
+ * but let's give it a go
+ */
+ ap_log_error(APLOG_MARK,APLOG_ERR|APLOG_NOERRNO,NULL,
+ "Error getting registry key: out of memory");
+ return -2;
+ }
+ }
+ else {
+ /* Get the value into the existing buffer of length nSizeBuffer */
+ pValue = pBuffer;
+ nSize = nSizeBuffer;
+ }
+
+ rv = RegQueryValueEx(hKey,
+ name, /* key name */
+ NULL, /* reserved */
+ NULL, /* type */
+ pValue, /* for value */
+ &nSize); /* for size of "value" */
+
+ retval = 0; /* Return value */
+
+ if (rv == ERROR_FILE_NOT_FOUND) {
+ ap_log_error(APLOG_MARK,APLOG_WARNING|APLOG_NOERRNO,NULL,
+ "Registry does not contain value %s\\%s", key, name);
+ retval = -1;
+ }
+ else if (rv == ERROR_MORE_DATA) {
+ /* This should only happen if we got passed a pre-existing buffer
+ * (pBuffer, nSizeBuffer). But I suppose it could also happen if we
+ * allocate a buffer if another process changed the length of the
+ * value since we found out its length above. Umm.
+ */
+ ap_log_error(APLOG_MARK,APLOG_ERR|APLOG_NOERRNO,NULL,
+ "Error getting registry value %s: buffer not big enough", key);
+ retval = -3;
+ }
+ else if (rv != ERROR_SUCCESS) {
+ do_error(rv, "RegQueryValueEx(key %s)", key);
+ retval = -4;
+ }
+
+ rv = RegCloseKey(hKey);
+ if (rv != ERROR_SUCCESS) {
+ do_error(rv, "RegCloseKey HKLM\\%s", key);
+ if (retval == 0) {
+ /* Keep error status from RegQueryValueEx, if any */
+ retval = -4;
+ }
+ }
+
+ return retval < 0 ? retval : nSize;
+}
+
+/*
+ * Get the server root from the registry into 'dir' which is
+ * size bytes long. Returns 0 if the server root was found
+ * or if the serverroot key does not exist (in which case
+ * dir will contain an empty string), or -1 if there was
+ * an error getting the key.
+ */
+
+API_EXPORT(int) ap_registry_get_server_root(pool *p, char *dir, int size)
+{
+ int rv;
+
+ rv = ap_registry_get_key_int(p, REGKEY, "ServerRoot", dir, size, NULL);
+ if (rv < 0) {
+ dir[0] = '\0';
+ }
+
+ return (rv < 0) ? -1 : 0;
+}
+
+API_EXPORT(char *) ap_get_service_key(char *display_name)
+{
+ char *key, *service_name;
+
+ if (display_name == NULL)
+ return strdup("");
+
+ service_name = get_service_name(display_name);
+
+ key = malloc(strlen(SERVICEKEYPRE) +
+ strlen(service_name) +
+ strlen(SERVICEKEYPOST) + 1);
+
+ sprintf(key,"%s%s%s", SERVICEKEYPRE, service_name, SERVICEKEYPOST);
+
+ return(key);
+}
+
+/**********************************************************************
+ * The rest of this file deals with storing keys or values in the registry
+ */
+
+char *ap_registry_parse_key(int index, char *key)
+{
+ char *head = key, *skey;
+ int i;
+
+ if(!key)
+ return(NULL);
+
+ for(i = 0; i <= index; i++)
+ {
+ if(key && key[0] == '\\')
+ key++;
+ if (!key)
+ return(NULL);
+ head = key;
+ key = strchr(head, '\\');
+ }
+
+ if(!key)
+ return(strdup(head));
+ *key = '\0';
+ skey = strdup(head);
+ *key = '\\';
+ return(skey);
+}
+
+/*
+ * ap_registry_create_apache_key() creates the Apache registry key
+ * (HLKM\SOFTWARE\Apache Group\Apache\version, as defined at the start
+ * of this file), if it does not already exist. It will be called by
+ * ap_registry_store_key_int() if it cannot open this key. This
+ * function is intended to be called by ap_registry_store_key_int() if
+ * the Apache key does not exist when it comes to store a data item.
+ *
+ * Returns 0 on success or -1 on error. If -1 is returned, the error will
+ * already have been logged.
+ */
+
+static int ap_registry_create_key(char *longkey)
+{
+ int index;
+ HKEY hKey;
+ HKEY hKeyNext;
+ int retval;
+ int rv;
+ char *key;
+
+ hKey = HKEY_LOCAL_MACHINE;
+ index = 0;
+ retval = 0;
+
+ /* Walk the tree, creating at each stage if necessary */
+ while (key=ap_registry_parse_key(index,longkey)) {
+ int result;
+
+ rv = RegCreateKeyEx(hKey,
+ key, /* subkey */
+ 0, /* reserved */
+ NULL, /* class */
+ REG_OPTION_NON_VOLATILE,
+ KEY_WRITE,
+ NULL,
+ &hKeyNext,
+ &result);
+ if (rv != ERROR_SUCCESS) {
+ do_error(rv, "RegCreateKeyEx(%s)", longkey);
+ retval = -4;
+ }
+
+ /* Close the old key */
+ rv = RegCloseKey(hKey);
+ if (rv != ERROR_SUCCESS) {
+ do_error(rv, "RegCloseKey", NULL);
+ if (retval == 0) {
+ /* Keep error status from RegCreateKeyEx, if any */
+ retval = -4;
+ }
+ }
+
+ if (retval) {
+ break;
+ }
+
+ free(key);
+ hKey = hKeyNext;
+ index++;
+ }
+
+ if (!key) {
+ /* Close the final key we opened, if we walked the entire
+ * tree
+ */
+ rv = RegCloseKey(hKey);
+ if (rv != ERROR_SUCCESS) {
+ do_error(rv, "RegCloseKey", NULL);
+ if (retval == 0) {
+ /* Keep error status from RegCreateKeyEx, if any */
+ retval = -4;
+ }
+ }
+ }
+ else
+ free(key);
+
+ return retval;
+}
+
+/*
+ * ap_registry_store_key_int() stores a value name and value under the
+ * Apache registry key. If the Apache key does not exist it is created
+ * first. This function is intended to be called from a wrapper function
+ * in this file to set particular data values, such as
+ * ap_registry_set_server_root() below.
+ *
+ * Returns 0 if the value name and data was stored successfully, or
+ * returns -1 if the Apache key does not exist (since we try to create
+ * this key, this should never happen), or -4 if any other error occurred
+ * (these values are consistent with ap_registry_get_key_int()).
+ * If the return value is negative then the error will already have been
+ * logged via aplog_error().
+ */
+
+static int ap_registry_store_key_int(char *key, char *name, DWORD type, void *value, int value_size)
+{
+ long rv;
+ HKEY hKey;
+ int retval;
+
+ rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+ key,
+ 0,
+ KEY_WRITE,
+ &hKey);
+
+ if (rv == ERROR_FILE_NOT_FOUND) {
+ /* Key could not be opened -- try to create it
+ */
+ if (ap_registry_create_key(key) < 0) {
+ /* Creation failed (error already reported) */
+ return -4;
+ }
+
+ /* Now it has been created we should be able to open it
+ */
+ rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+ key,
+ 0,
+ KEY_WRITE,
+ &hKey);
+
+ if (rv == ERROR_FILE_NOT_FOUND) {
+ ap_log_error(APLOG_MARK,APLOG_WARNING|APLOG_NOERRNO,NULL,
+ "Registry does not contain key %s after creation",key);
+ return -1;
+ }
+ }
+
+ if (rv != ERROR_SUCCESS) {
+ do_error(rv, "RegOpenKeyEx HKLM\\%s", key);
+ return -4;
+ }
+
+ /* Now set the value and data */
+ rv = RegSetValueEx(hKey,
+ name, /* value key name */
+ 0, /* reserved */
+ type, /* type */
+ value, /* value data */
+ (DWORD)value_size); /* for size of "value" */
+
+ retval = 0; /* Return value */
+
+ if (rv != ERROR_SUCCESS) {
+ do_error(rv, "RegQueryValueEx(key %s)", key);
+ retval = -4;
+ }
+ else {
+ ap_log_error(APLOG_MARK,APLOG_INFO|APLOG_NOERRNO,NULL,
+ "Registry stored HKLM\\" REGKEY "\\%s value %s", key,
+ type == REG_SZ ? value : "(not displayable)");
+ }
+
+ /* Make sure we close the key even if there was an error storing
+ * the data
+ */
+ rv = RegCloseKey(hKey);
+ if (rv != ERROR_SUCCESS) {
+ do_error(rv, "RegCloseKey HKLM\\%s", key);
+ if (retval == 0) {
+ /* Keep error status from RegQueryValueEx, if any */
+ retval = -4;
+ }
+ }
+
+ return retval;
+}
+
+/*
+ * Sets the serverroot value within the registry. Returns 0 on success
+ * or -1 on error. If -1 is return the error will already have been
+ * logged via aplog_error().
+ */
+
+int ap_registry_set_server_root(char *dir)
+{
+ int rv;
+
+ rv = ap_registry_store_key_int(REGKEY, "ServerRoot", REG_SZ, dir, strlen(dir)+1);
+
+ return rv < 0 ? -1 : 0;
+}
+
+/* Creates and fills array pointed to by parray with the requested registry string
+ *
+ * Returns 0 on success, machine specific error code on error
+ */
+int ap_registry_get_array(pool *p, char *key, char *name,
+ array_header **pparray)
+{
+ char *pValue;
+ char *tmp;
+ char **newelem;
+ int ret;
+ int nSize = 0;
+
+ ret = ap_registry_get_key_int(p, key, name, NULL, 0, &pValue);
+ if (ret < 0)
+ return ret;
+
+ tmp = pValue;
+ if ((ret > 2) && (tmp[0] || tmp[1]))
+ nSize = 1; /* Element Count */
+ while ((tmp < pValue + ret) && (tmp[0] || tmp[1]))
+ {
+ if (!tmp[0])
+ ++nSize;
+ ++tmp;
+ }
+
+ *pparray = ap_make_array(p, nSize, sizeof(char *));
+ tmp = pValue;
+ if (tmp[0] || tmp[1]) {
+ newelem = (char **) ap_push_array(*pparray);
+ *newelem = tmp;
+ }
+ while ((tmp < pValue + ret) && (tmp[0] || tmp[1]))
+ {
+ if (!tmp[0]) {
+ newelem = (char **) ap_push_array(*pparray);
+ *newelem = tmp + 1;
+ }
+ ++tmp;
+ }
+
+ return nSize;
+}
+
+int ap_registry_get_service_args(pool *p, int *argc, char ***argv, char *display_name)
+{
+ int ret;
+ array_header *parray;
+ char *key = ap_get_service_key(display_name);
+ ret = ap_registry_get_array(p, key, "ConfigArgs", &parray);
+ if (ret > 0) {
+ *argc = parray->nelts;
+ *argv = (char**) parray->elts;
+ }
+ else {
+ *argc = 0;
+ *argv = NULL;
+ }
+ free(key);
+ return ret;
+}
+
+int ap_registry_store_array(pool *p, char *key, char *name,
+ int nelts, char **elts)
+{
+ int bufsize, i;
+ char *buf, *tmp;
+
+ bufsize = 1; /* For trailing second null */
+ for (i = 0; i < nelts; ++i)
+ {
+ bufsize += strlen(elts[i]) + 1;
+ }
+ if (!nelts)
+ ++bufsize;
+
+ buf = ap_palloc(p, bufsize);
+ tmp = buf;
+ for (i = 0; i < nelts; ++i)
+ {
+ strcpy(tmp, elts[i]);
+ tmp += strlen(elts[i]) + 1;
+ }
+ if (!nelts)
+ *(tmp++) = '\0';
+ *(tmp++) = '\0'; /* Trailing second null */
+
+ return ap_registry_store_key_int(key, name, REG_MULTI_SZ, buf, tmp - buf);
+}
+
+int ap_registry_set_service_args(pool *p, int argc, char **argv, char *display_name)
+{
+ int ret;
+ char *key = ap_get_service_key(display_name);
+ ret = ap_registry_store_array(p, key, "ConfigArgs", argc, argv);
+ free(key);
+ return ret;
+}
+
+#endif /* WIN32 */
diff --git a/APACHE_1_3_42/src/os/win32/registry.h b/APACHE_1_3_42/src/os/win32/registry.h
new file mode 100644
index 0000000000..f503afa5a8
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/registry.h
@@ -0,0 +1,33 @@
+/* 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.
+ */
+
+#ifndef APACHE_REGISTRY_H
+#define APACHE_REGISTRY_H
+
+#ifdef WIN32
+
+/*
+ * Declarations for users of the functions defined in registry.c
+ */
+
+API_EXPORT(int) ap_registry_get_server_root(pool *p, char *dir, int size);
+extern int ap_registry_set_server_root(char *dir);
+extern int ap_registry_get_service_args(pool *p, int *argc, char ***argv, char *display_name);
+extern int ap_registry_set_service_args(pool *p, int argc, char **argv, char *display_name);
+
+#endif WIN32
+
+#endif APACHE_REGISTRY_H
diff --git a/APACHE_1_3_42/src/os/win32/resource.h b/APACHE_1_3_42/src/os/win32/resource.h
new file mode 100644
index 0000000000..820bb6aaaf
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/resource.h
@@ -0,0 +1,17 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by Apache.rc
+//
+#define IDI_APACHE 101
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC 1
+#define _APS_NEXT_RESOURCE_VALUE 102
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1000
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/APACHE_1_3_42/src/os/win32/service.c b/APACHE_1_3_42/src/os/win32/service.c
new file mode 100644
index 0000000000..db56ce5be9
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/service.c
@@ -0,0 +1,1483 @@
+/* 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.
+ */
+
+#ifdef WIN32
+
+#include <windows.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <process.h>
+#include <direct.h>
+
+#include "httpd.h"
+#include "http_conf_globals.h"
+#include "http_log.h"
+#include "http_main.h"
+#include "multithread.h"
+#include "service.h"
+#include "registry.h"
+#include "Win9xConHook.h"
+
+#define SERVICE_APACHE_RESTART 128
+
+static struct
+{
+ int (*main_fn)(int, char **);
+ int connected;
+ SERVICE_STATUS_HANDLE hServiceStatus;
+ char *name;
+ int exit_status;
+ SERVICE_STATUS ssStatus;
+ FILE *logFile;
+} globdat;
+
+/* statics for atexit processing or shared between threads */
+static BOOL die_on_logoff = FALSE;
+static HWND console_wnd = NULL;
+static int is_service = -1;
+
+static void WINAPI service_main_fn(DWORD, LPTSTR *);
+static void WINAPI service_ctrl(DWORD ctrlCode);
+static int ReportStatusToSCMgr(int currentState, int exitCode, int waitHint);
+static int ap_start_service(SC_HANDLE, DWORD argc, char **argv);
+static int ap_stop_service(SC_HANDLE);
+static int ap_restart_service(SC_HANDLE);
+
+/* exit() for Win32 is macro mapped (horrible, we agree) that allows us
+ * to catch the non-zero conditions and inform the console process that
+ * the application died, and hang on to the console a bit longer.
+ *
+ * The macro only maps for http_main.c and other sources that include
+ * the service.h header, so we best assume it's an error to exit from
+ * _any_ other module.
+ *
+ * If real_exit_code is not set to 2, it will not be set or trigger this
+ * behavior on exit. All service and child processes are expected to
+ * reset this flag to zero to avoid undesireable side effects. The value
+ * 1 simply tells the system it is safe to enable the feature (set to 2),
+ * while 0 prohibits the feature from being enabled.
+ */
+int real_exit_code = 1;
+
+void hold_console_open_on_error(void)
+{
+ HANDLE hConIn;
+ HANDLE hConErr;
+ DWORD result;
+ DWORD mode;
+ time_t start;
+ time_t remains;
+ char *msg = "Note the errors or messages above, "
+ "and press the <ESC> key to exit. ";
+ CONSOLE_SCREEN_BUFFER_INFO coninfo;
+ INPUT_RECORD in;
+ char count[16];
+
+#ifdef WIN32
+ /* The service parent cannot just 'pop' out of the main thread,
+ * as it is about to try to do...
+ * We must end this thread properly so the service control
+ * thread exits gracefully. atexit()s registered in the running
+ * apache_main thread _should_ have already been handled, so now
+ * we can exit this thread and allow the service thread to exit.
+ */
+ if (isWindowsNT() && isProcessService() && globdat.connected) {
+ service_set_status(SERVICE_STOPPED);
+ ExitThread(0);
+ }
+#endif
+
+ if (!real_exit_code)
+ return;
+ hConIn = GetStdHandle(STD_INPUT_HANDLE);
+ hConErr = GetStdHandle(STD_ERROR_HANDLE);
+ if ((hConIn == INVALID_HANDLE_VALUE) || (hConErr == INVALID_HANDLE_VALUE))
+ return;
+ if (!WriteConsole(hConErr, msg, strlen(msg), &result, NULL) || !result)
+ return;
+ if (!GetConsoleScreenBufferInfo(hConErr, &coninfo))
+ return;
+ if (isWindowsNT())
+ mode = ENABLE_MOUSE_INPUT | 0x80;
+ else
+ mode = ENABLE_MOUSE_INPUT;
+ if (!SetConsoleMode(hConIn, mode))
+ return;
+
+ start = time(NULL);
+ do
+ {
+ while (PeekConsoleInput(hConIn, &in, 1, &result) && result)
+ {
+ if (!ReadConsoleInput(hConIn, &in, 1, &result) || !result)
+ return;
+ if ((in.EventType == KEY_EVENT) && in.Event.KeyEvent.bKeyDown
+ && (in.Event.KeyEvent.uChar.AsciiChar == 27))
+ return;
+ if (in.EventType == MOUSE_EVENT
+ && (in.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK))
+ return;
+ }
+ remains = ((start + 30) - time(NULL));
+ sprintf (count, "%d...", remains);
+ if (!SetConsoleCursorPosition(hConErr, coninfo.dwCursorPosition))
+ return;
+ if (!WriteConsole(hConErr, count, strlen(count), &result, NULL)
+ || !result)
+ return;
+ }
+ while ((remains > 0) && WaitForSingleObject(hConIn, 1000) != WAIT_FAILED);
+}
+
+/* Console Control handler for processing Ctrl-C/Ctrl-Break and
+ * on Windows NT also user logoff and system shutdown,
+ * this also used for the Win9x hidden service and child process
+ */
+static BOOL CALLBACK ap_control_handler(DWORD ctrl_type)
+{
+ switch (ctrl_type)
+ {
+ case CTRL_C_EVENT:
+ case CTRL_BREAK_EVENT:
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, NULL,
+ "Ctrl+C/Break initiated, shutting down server.");
+
+ real_exit_code = 0;
+ /* for Interrupt signals, shut down the server.
+ * Tell the system we have dealt with the signal
+ * without waiting for Apache to terminate.
+ */
+ ap_start_shutdown();
+ return TRUE;
+
+ case CTRL_LOGOFF_EVENT:
+ if (!die_on_logoff)
+ return TRUE;
+ /* or fall through... */
+
+ case CTRL_CLOSE_EVENT:
+ case CTRL_SHUTDOWN_EVENT:
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, NULL,
+ "Close/Logoff/Shutdown initiated, shutting down server.");
+
+ /* for Terminate signals, shut down the server.
+ * Wait for Apache to terminate, but respond
+ * after a reasonable time to tell the system
+ * that we have already tried to shut down.
+ */
+ real_exit_code = 0;
+ fprintf(stderr, "Apache server shutdown initiated...\n");
+ ap_start_shutdown();
+ Sleep(30000);
+ return TRUE;
+ }
+
+ /* We should never get here, but this is (mostly) harmless */
+ return FALSE;
+}
+
+/* Once we are running a child process in our tty, it can no longer
+ * determine which console window is our own, since the window
+ * reports that it is owned by the child process.
+ */
+static BOOL CALLBACK EnumttyWindow(HWND wnd, LPARAM retwnd)
+{
+ char tmp[20], *tty;
+ if (isWindowsNT())
+ tty = "ConsoleWindowClass";
+ else
+ tty = "tty";
+ if (GetClassName(wnd, tmp, sizeof(tmp)) && !strcmp(tmp, tty))
+ {
+ DWORD wndproc, thisproc = GetCurrentProcessId();
+ GetWindowThreadProcessId(wnd, &wndproc);
+ if (wndproc == thisproc) {
+ *((HWND*)retwnd) = wnd;
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+void stop_child_monitor(void)
+{
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, NULL,
+ "Unhooking the child process monitor for shutdown.");
+
+ FixConsoleCtrlHandler(ap_control_handler, 0);
+}
+
+/*
+ * The Win32 Apache child cannot loose its console since 16bit cgi
+ * processes will hang (9x) or fail (NT) if they are not launched
+ * from a 32bit console app into that app's console window.
+ * Mark the 9x child as a service process and let the parent process
+ * clean it up as necessary.
+ */
+void ap_start_child_console(int is_child_of_service)
+{
+ int maxwait = 100;
+
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, NULL,
+ "Hooking up the child process monitor to watch for shutdown.");
+
+ /* The child is never exactly a service */
+ is_service = 0;
+
+ /* Prevent holding open the (hidden) console */
+ real_exit_code = 0;
+
+ /* We only die on logoff if we not a service's child */
+ die_on_logoff = !is_child_of_service;
+
+ if (isWindowsNT()) {
+ if (!is_child_of_service) {
+ /*
+ * Console mode Apache/WinNT needs to detach from the parent
+ * console and create and hide it's own console window.
+ * Not only is logout and shutdown more stable under W2K,
+ * but this eliminates the mystery 'flicker' that users see
+ * when invoking CGI apps (e.g. the titlebar or icon of the
+ * console window changing to the cgi process's identifiers.)
+ */
+ FreeConsole();
+ AllocConsole();
+ EnumWindows(EnumttyWindow, (long)(&console_wnd));
+ if (console_wnd)
+ ShowWindow(console_wnd, SW_HIDE);
+ }
+ /*
+ * Apache/WinNT installs no child console handler, otherwise
+ * logoffs interfere with the service's child process!
+ * The child process must have a later shutdown priority
+ * than the parent, or the parent cannot shut down the
+ * child process properly. (The parent's default is 0x280.)
+ */
+ SetProcessShutdownParameters(0x200, 0);
+ return;
+ }
+
+ if (!is_child_of_service) {
+ FreeConsole();
+ AllocConsole();
+ }
+ while (!console_wnd && maxwait-- > 0) {
+ EnumWindows(EnumttyWindow, (long)(&console_wnd));
+ Sleep(100);
+ }
+ if (console_wnd) {
+ FixConsoleCtrlHandler(ap_control_handler, die_on_logoff ? 1 : 2);
+ ShowWindow(console_wnd, SW_HIDE);
+ atexit(stop_child_monitor);
+ }
+}
+
+
+void stop_console_monitor(void)
+{
+ /* Remove the control handler at the end of the day. */
+ SetConsoleCtrlHandler(ap_control_handler, FALSE);
+
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, NULL,
+ "Unhooking the console monitor for shutdown.");
+
+ if (!isWindowsNT())
+ FixConsoleCtrlHandler(ap_control_handler, 0);
+}
+
+void ap_start_console_monitor(void)
+{
+ HANDLE console_input;
+
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, NULL,
+ "Hooking up the console monitor to watch for shutdown.");
+
+ die_on_logoff = TRUE;
+
+ is_service = 0;
+
+ console_input = GetStdHandle(STD_INPUT_HANDLE);
+ /* Assure we properly accept Ctrl+C as an interrupt...
+ * Win/2000 definately makes some odd assumptions about
+ * ctrl+c and the reserved console mode bits!
+ */
+ if (console_input != INVALID_HANDLE_VALUE)
+ {
+ /* The SetConsoleCtrlHandler(NULL... would fault under Win9x
+ * WinNT also includes an undocumented 0x80 bit for console mode
+ * that preserves the console window behavior, and prevents the
+ * bogus 'selection' mode from being accedently triggered.
+ */
+ if (isWindowsNT()) {
+ SetConsoleCtrlHandler(NULL, FALSE);
+ SetConsoleMode(console_input, ENABLE_LINE_INPUT
+ | ENABLE_ECHO_INPUT
+ | ENABLE_PROCESSED_INPUT
+ | 0x80);
+ }
+ else {
+ SetConsoleMode(console_input, ENABLE_LINE_INPUT
+ | ENABLE_ECHO_INPUT
+ | ENABLE_PROCESSED_INPUT);
+ }
+ }
+
+ if (!isWindowsNT())
+ FixConsoleCtrlHandler(ap_control_handler, die_on_logoff ? 1 : 2);
+
+ SetConsoleCtrlHandler(ap_control_handler, TRUE);
+
+ atexit(stop_console_monitor);
+}
+
+void stop_service_monitor(void)
+{
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, NULL,
+ "Unhooking up the service monitor for shutdown.");
+
+ Windows9xServiceCtrlHandler(ap_control_handler, FALSE);
+}
+
+int service95_main(int (*main_fn)(int, char **), int argc, char **argv,
+ char *display_name)
+{
+ /* Windows 95/98 */
+ char *service_name;
+
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, NULL,
+ "Hooking up the service monitor to watch for shutdown.");
+
+ is_service = 1;
+ die_on_logoff = FALSE;
+
+ /* Set up the Win9x server name, as WinNT would */
+ ap_server_argv0 = globdat.name = display_name;
+
+ /* Remove spaces from display name to create service name */
+ service_name = strdup(display_name);
+ ap_remove_spaces(service_name, display_name);
+
+ /* Prevent holding open the (hidden) console */
+ real_exit_code = 0;
+
+ Windows9xServiceCtrlHandler(ap_control_handler, service_name);
+
+ atexit(stop_service_monitor);
+
+ /* Run the service */
+ globdat.exit_status = main_fn(argc, argv);
+
+ return (globdat.exit_status);
+}
+
+static HANDLE eventlog_pipewrite = NULL;
+static HANDLE eventlog_thread = NULL;
+
+int service_main(int (*main_fn)(int, char **), int argc, char **argv )
+{
+ SERVICE_TABLE_ENTRY dispatchTable[] =
+ {
+ { "", service_main_fn },
+ { NULL, NULL }
+ };
+
+ /* Prevent holding open the (nonexistant) console and allow us past
+ * the first NT service to parse the service's args in apache_main()
+ */
+ ap_server_argv0 = argv[0];
+ real_exit_code = 0;
+
+ /* keep the server from going to any real effort, since we know */
+ is_service = 1;
+
+ globdat.main_fn = main_fn;
+ globdat.connected = 1;
+
+ if(!StartServiceCtrlDispatcher(dispatchTable))
+ {
+ /* This is a genuine failure of the SCM. */
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "Error starting service control dispatcher");
+ }
+
+ globdat.connected = 0;
+
+ if (eventlog_pipewrite)
+ {
+ CloseHandle(eventlog_pipewrite);
+ WaitForSingleObject(eventlog_thread, 10000);
+ eventlog_pipewrite = NULL;
+ }
+
+ return(globdat.exit_status);
+}
+
+long __stdcall service_stderr_thread(LPVOID hPipe)
+{
+ HANDLE hPipeRead = (HANDLE) hPipe;
+ HANDLE hEventSource;
+ char errbuf[256];
+ char *errmsg = errbuf;
+ char *errarg[9];
+ DWORD errlen = 0;
+ DWORD errres;
+ HKEY hk;
+
+ errarg[0] = "The Apache service named";
+ errarg[1] = ap_server_argv0;
+ errarg[2] = "reported the following error:\r\n>>>";
+ errarg[3] = errmsg;
+ errarg[4] = "<<<\r\n before the error.log file could be opened.\r\n";
+ errarg[5] = "More information may be available in the error.log file.";
+ errarg[6] = NULL;
+ errarg[7] = NULL;
+ errarg[8] = NULL;
+
+ /* What are we going to do in here, bail on the user? not. */
+ if (!RegCreateKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services"
+ "\\EventLog\\Application\\Apache Service", &hk))
+ {
+ /* The stock message file */
+ char *netmsgkey = "%SystemRoot%\\System32\\netmsg.dll";
+ DWORD dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE |
+ EVENTLOG_INFORMATION_TYPE;
+
+ RegSetValueEx(hk, "EventMessageFile", 0, REG_EXPAND_SZ,
+ (LPBYTE) netmsgkey, strlen(netmsgkey) + 1);
+
+ RegSetValueEx(hk, "TypesSupported", 0, REG_DWORD,
+ (LPBYTE) &dwData, sizeof(dwData));
+ RegCloseKey(hk);
+ }
+
+ hEventSource = RegisterEventSource(NULL, "Apache Service");
+
+ while (ReadFile(hPipeRead, errmsg, 1, &errres, NULL) && (errres == 1))
+ {
+ if ((errmsg > errbuf) || !isspace(*errmsg))
+ {
+ ++errlen;
+ ++errmsg;
+ if ((*(errmsg - 1) == '\n') || (errlen == sizeof(errbuf) - 1))
+ {
+ while (errlen && isspace(errbuf[errlen - 1]))
+ --errlen;
+ errbuf[errlen] = '\0';
+
+ /* Generic message: '%1 %2 %3 %4 %5 %6 %7 %8 %9'
+ * The event code in netmsg.dll is 3299
+ */
+ ReportEvent(hEventSource, EVENTLOG_ERROR_TYPE, 0,
+ 3299, NULL, 9, 0, errarg, NULL);
+ errmsg = errbuf;
+ errlen = 0;
+ }
+ }
+ }
+
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, NULL,
+ "Shut down the Service Error Event Logger.");
+
+ CloseHandle(eventlog_pipewrite);
+ eventlog_pipewrite = NULL;
+
+ CloseHandle(hPipeRead);
+
+ CloseHandle(eventlog_thread);
+ eventlog_thread = NULL;
+ return 0;
+}
+
+void __stdcall service_main_fn(DWORD argc, LPTSTR *argv)
+{
+ HANDLE hCurrentProcess;
+ HANDLE hPipeRead = NULL;
+ HANDLE hPipeReadDup;
+ HANDLE hNullFile;
+ DWORD threadid;
+ SECURITY_ATTRIBUTES sa = {0};
+ char **newargv;
+
+ if(!(globdat.hServiceStatus = RegisterServiceCtrlHandler(argv[0],
+ service_ctrl)))
+ {
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "Failure registering service handler");
+ return;
+ }
+
+ ReportStatusToSCMgr(
+ SERVICE_START_PENDING, // service state
+ NO_ERROR, // exit code
+ 3000); // wait hint
+
+ /* Create a pipe to send stderr messages to the system error log */
+ hCurrentProcess = GetCurrentProcess();
+ if (CreatePipe(&hPipeRead, &eventlog_pipewrite, &sa, 0))
+ {
+ if (DuplicateHandle(hCurrentProcess, hPipeRead, hCurrentProcess,
+ &hPipeReadDup, 0, FALSE, DUPLICATE_SAME_ACCESS))
+ {
+ CloseHandle(hPipeRead);
+ hPipeRead = hPipeReadDup;
+ eventlog_thread = CreateThread(NULL, 0, service_stderr_thread,
+ (LPVOID) hPipeRead, 0, &threadid);
+ if (eventlog_thread)
+ {
+ int fh;
+ FILE *fl;
+ fflush(stderr);
+ SetStdHandle(STD_ERROR_HANDLE, eventlog_pipewrite);
+
+ fh = _open_osfhandle((long) STD_ERROR_HANDLE,
+ _O_WRONLY | _O_BINARY);
+ dup2(fh, STDERR_FILENO);
+ fl = _fdopen(STDERR_FILENO, "wcb");
+ memcpy(stderr, fl, sizeof(FILE));
+ }
+ else
+ {
+ CloseHandle(hPipeRead);
+ CloseHandle(eventlog_pipewrite);
+ eventlog_pipewrite = NULL;
+ }
+ }
+ else
+ {
+ CloseHandle(hPipeRead);
+ CloseHandle(eventlog_pipewrite);
+ eventlog_pipewrite = NULL;
+ }
+ }
+
+ /* Open a null handle to nak our stdin */
+ hNullFile = CreateFile("nul", GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ &sa, OPEN_EXISTING, 0, NULL);
+ if (hNullFile == INVALID_HANDLE_VALUE) {
+ ap_log_error(APLOG_MARK, APLOG_WIN32ERROR | APLOG_CRIT, NULL,
+ "Parent: Unable to create null stdin pipe for this service process.\n");
+ }
+ else {
+ int fh;
+ FILE *fl;
+ fflush(stdin);
+ SetStdHandle(STD_INPUT_HANDLE, hNullFile);
+ fh = _open_osfhandle((long) STD_INPUT_HANDLE,
+ _O_RDONLY | _O_BINARY);
+ dup2(fh, STDIN_FILENO);
+ fl = _fdopen(STDIN_FILENO, "rcb");
+ memcpy(stdin, fl, sizeof(FILE));
+ }
+
+ /* Open a null handle to soak our stdout */
+ hNullFile = CreateFile("nul", GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ &sa, OPEN_EXISTING, 0, NULL);
+ if (hNullFile == INVALID_HANDLE_VALUE) {
+ ap_log_error(APLOG_MARK, APLOG_WIN32ERROR | APLOG_CRIT, NULL,
+ "Parent: Unable to create null stdout pipe for this service process.\n");
+ }
+ else {
+ int fh;
+ FILE *fl;
+ fflush(stdout);
+ SetStdHandle(STD_OUTPUT_HANDLE, hNullFile);
+ fh = _open_osfhandle((long) STD_OUTPUT_HANDLE,
+ _O_WRONLY | _O_BINARY);
+ dup2(fh, STDOUT_FILENO);
+ fl = _fdopen(STDOUT_FILENO, "wcb");
+ memcpy(stdout, fl, sizeof(FILE));
+ }
+
+ /* Grab it or lose it */
+ globdat.name = argv[0];
+
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, NULL,
+ "Hooked up the Service Error Event Logger.");
+
+ /* Fold the "Start Parameters" in with the true executable argv[0],
+ * and insert a -n tag to pass the service name from the SCM's argv[0]
+ */
+ newargv = (char**) malloc((argc + 3) * sizeof(char*));
+ newargv[0] = ap_server_argv0; /* The true executable name */
+ newargv[1] = "-n"; /* True service name follows (argv[0]) */
+ memcpy (newargv + 2, argv, argc * sizeof(char*));
+ newargv[argc + 2] = NULL; /* SCM doesn't null terminate the array */
+ argv = newargv;
+ argc += 2;
+
+ /* Use the name of the service as the error log marker */
+ ap_server_argv0 = globdat.name;
+
+ globdat.exit_status = globdat.main_fn( argc, argv );
+}
+
+/* Set the service description regardless of platform.
+ * We revert to set_service_description_string on NT/9x, the
+ * very long way so any Apache management program can grab the
+ * description. This would be bad on Win2000, since it wouldn't
+ * notify the service control manager of the name change.
+ */
+static void set_service_description_string(const char *description)
+{
+ char szPath[MAX_PATH];
+ HKEY hkey;
+
+ /* Create/Find the Service key that Monitor Applications iterate */
+ ap_snprintf(szPath, sizeof(szPath),
+ "SYSTEM\\CurrentControlSet\\Services\\%s", globdat.name);
+ ap_remove_spaces(szPath, szPath);
+ if (RegCreateKey(HKEY_LOCAL_MACHINE, szPath, &hkey) != ERROR_SUCCESS) {
+ return;
+ }
+
+ /* Attempt to set the Description value for our service */
+ RegSetValueEx(hkey, "Description", 0, REG_SZ,
+ (unsigned char *) description,
+ strlen(description) + 1);
+ RegCloseKey(hkey);
+}
+
+
+char *get_service_name(char *display_name)
+{
+ /* Get the service's true name from the SCM on NT/2000, since it
+ * can be changed by the user on 2000, especially, from the
+ * service control panel. We can't trust the service name to
+ * match a space-collapsed display name.
+ */
+ char service_name[MAX_PATH];
+ if (isWindowsNT())
+ {
+ SC_HANDLE scm = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);
+ DWORD namelen = sizeof(service_name);
+ if (scm) {
+ BOOL ok = GetServiceKeyName(scm, display_name, service_name,
+ &namelen);
+ CloseServiceHandle(scm);
+ if (ok)
+ return strdup(service_name);
+ }
+ }
+ ap_remove_spaces(service_name, display_name);
+ return strdup(service_name);
+}
+
+
+char *get_display_name(char *service_name)
+{
+ /* Get the service's display name from the SCM on NT/2000, since it
+ * can be changed by the user on 2000, especially, from the
+ * service control panel. We can't trust the service name as
+ * provided by the user.
+ */
+ if (isWindowsNT())
+ {
+ char display_name[MAX_PATH];
+ SC_HANDLE scm = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);
+ DWORD namelen = sizeof(display_name);
+ if (scm) {
+ BOOL ok = GetServiceDisplayName(scm, service_name, display_name,
+ &namelen);
+ CloseServiceHandle(scm);
+ if (ok)
+ return strdup(display_name);
+ }
+ }
+ return service_name;
+}
+
+
+/* ChangeServiceConfig2() prototype:
+ */
+typedef WINADVAPI BOOL (WINAPI *CSD_T)(SC_HANDLE, DWORD, LPCVOID);
+
+
+/* Windows 2000 alone supports ChangeServiceConfig2 in order to
+ * register our server_version string... so we need some fixups
+ * to avoid binding to that function if we are on WinNT/9x.
+ * Fall back on set_service_description_string if we fail.
+ */
+void service_set_status(int status)
+{
+ const char *full_description;
+ SC_HANDLE schSCManager;
+ CSD_T ChangeServiceDescription;
+ HANDLE hwin2000scm;
+ BOOL ret = 0;
+
+ /* Nothing to do if we are a console
+ */
+ if (!is_service)
+ return;
+
+ ReportStatusToSCMgr(status, NO_ERROR, 3000);
+
+ if (status != SERVICE_RUNNING)
+ return;
+
+ /* Time to fix up the description, upon each successful restart
+ */
+ full_description = ap_get_server_version();
+ hwin2000scm = GetModuleHandle("ADVAPI32.DLL");
+ if (!hwin2000scm) {
+ set_service_description_string(full_description);
+ return;
+ }
+ ChangeServiceDescription = (CSD_T) GetProcAddress(hwin2000scm,
+ "ChangeServiceConfig2A");
+ if (!ChangeServiceDescription) {
+ set_service_description_string(full_description);
+ return;
+ }
+ schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
+ if (schSCManager) {
+ SC_HANDLE schService = OpenService(schSCManager, globdat.name,
+ SERVICE_ALL_ACCESS);
+ if (schService) {
+ ret = ChangeServiceDescription(schService,
+ 1 /* SERVICE_CONFIG_DESCRIPTION */,
+ &full_description);
+ CloseServiceHandle(schService);
+ }
+ CloseServiceHandle(schSCManager);
+ }
+ if (!ret)
+ set_service_description_string(full_description);
+}
+
+
+//
+// FUNCTION: service_ctrl
+//
+// PURPOSE: This function is called by the SCM whenever
+// ControlService() is called on this service.
+//
+// PARAMETERS:
+// dwCtrlCode - type of control requested
+//
+// RETURN VALUE:
+// none
+//
+// COMMENTS: See the user-defined Handler() entry in the PSDK
+//
+VOID WINAPI service_ctrl(DWORD dwCtrlCode)
+{
+ switch(dwCtrlCode)
+ {
+ // Stop the service.
+ //
+ case SERVICE_CONTROL_SHUTDOWN:
+ case SERVICE_CONTROL_STOP:
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, NULL,
+ "Service Stop/Shutdown signaled, shutting down server.");
+ ReportStatusToSCMgr(SERVICE_STOP_PENDING, NO_ERROR, 15000);
+ ap_start_shutdown();
+ break;
+
+ case SERVICE_APACHE_RESTART:
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, NULL,
+ "Service Restart signaled, shutting down server.");
+ ReportStatusToSCMgr(SERVICE_START_PENDING, NO_ERROR, 15000);
+ ap_start_restart(1);
+ break;
+
+ // Update the service status.
+ //
+ case SERVICE_CONTROL_INTERROGATE:
+ ReportStatusToSCMgr(globdat.ssStatus.dwCurrentState, NO_ERROR, 0);
+ break;
+
+ // invalid control code, ignored
+ //
+ default:
+ break;
+ }
+}
+
+
+int ReportStatusToSCMgr(int currentState, int exitCode, int waitHint)
+{
+ static int firstTime = 1;
+ static int checkPoint = 1;
+ int rv;
+
+ if (firstTime)
+ {
+ firstTime = 0;
+ globdat.ssStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
+ globdat.ssStatus.dwServiceSpecificExitCode = 0;
+ globdat.ssStatus.dwCheckPoint = 1;
+ }
+
+ if (globdat.connected)
+ {
+ if ((currentState == SERVICE_START_PENDING)
+ || (currentState == SERVICE_STOP_PENDING))
+ globdat.ssStatus.dwControlsAccepted = 0;
+ else
+ globdat.ssStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP
+ | SERVICE_ACCEPT_SHUTDOWN;
+
+ globdat.ssStatus.dwCurrentState = currentState;
+ globdat.ssStatus.dwWin32ExitCode = exitCode;
+
+ if ( ( currentState == SERVICE_RUNNING ) ||
+ ( currentState == SERVICE_STOPPED ) )
+ {
+ globdat.ssStatus.dwWaitHint = 0;
+ globdat.ssStatus.dwCheckPoint = 0;
+ }
+ else
+ {
+ if(waitHint)
+ globdat.ssStatus.dwWaitHint = waitHint;
+ globdat.ssStatus.dwCheckPoint = ++checkPoint;
+ }
+
+ rv = SetServiceStatus(globdat.hServiceStatus, &globdat.ssStatus);
+ }
+ return(1);
+}
+
+void InstallService(pool *p, char *display_name, int argc, char **argv, int reconfig)
+{
+ TCHAR szPath[MAX_PATH];
+ TCHAR szQuotedPath[512];
+ char *service_name;
+ int regargc = 0;
+ char default_depends[] = "Tcpip\0Afd\0";
+ char *depends = default_depends;
+ size_t depends_len = sizeof(default_depends);
+ char **regargv = malloc((argc + 4) * sizeof(char*));
+ char **newelem = regargv;
+
+ regargc += 4;
+ *(newelem++) = "-d";
+ *(newelem++) = ap_server_root;
+ *(newelem++) = "-f";
+ *(newelem++) = ap_server_confname;
+
+ while (++argv, --argc) {
+ if ((**argv == '-') && strchr("kndf", argv[0][1]))
+ --argc, ++argv; /* Skip already handled -k -n -d -f options */
+ else if ((**argv == '-') && (argv[0][1] == 'W'))
+ {
+ /* Catch this service -W dependency
+ * the depends list is null seperated, double-null terminated
+ */
+ char *service = get_service_name(*(argv + 1));
+ size_t add_len = strlen(service) + 1;
+ char *more_depends = malloc(depends_len + add_len);
+ memcpy (more_depends, depends, depends_len - 1);
+ memcpy (more_depends + depends_len - 1, service, add_len);
+ depends_len += add_len;
+ depends = more_depends;
+ depends[depends_len - 1] = '\0';
+ ++argv, --argc;
+ }
+ else if ((**argv != '-') || !strchr("iuw", argv[0][1]))
+ *(newelem++) = *argv, ++regargc; /* Ignoring -i -u -w options */
+ }
+
+ /* Remove spaces from display name to create service name */
+ service_name = get_service_name(display_name);
+
+ printf(reconfig ? "Reconfiguring the %s service\n"
+ : "Installing the %s service\n",
+ display_name);
+
+ if (GetModuleFileName( NULL, szPath, 512 ) == 0)
+ {
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "GetModuleFileName failed");
+ return;
+ }
+
+ if (isWindowsNT())
+ {
+ SC_HANDLE schService;
+ SC_HANDLE schSCManager;
+
+ ap_snprintf(szQuotedPath, sizeof(szQuotedPath), "\"%s\" --ntservice", szPath);
+
+ schSCManager = OpenSCManager(
+ NULL, // machine (local)
+ NULL, // database (default)
+ SC_MANAGER_ALL_ACCESS // access required
+ );
+ if (!schSCManager) {
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "OpenSCManager failed");
+ return;
+ }
+
+ /* Added dependencies for the following: TCPIP, AFD
+ * AFD is the winsock handler, TCPIP is self evident
+ *
+ * RPCSS is the Remote Procedure Call (RPC) Locator
+ * required for DCOM communication. I am far from
+ * convinced we should toggle this, but be warned that
+ * future apache modules or ISAPI dll's may depend on it.
+ * Also UNC share users may need the networking service
+ * started (usually "LanmanWorkstation"). "ProtectedStorage"
+ * may be needed depending on how files and registry keys are
+ * stored. And W3SVC may be needed to wait until IIS has
+ * glommed and released 0.0.0.0:80 if the admin allocates
+ * two different IP's to Apache and IIS on the same port.
+ */
+ if (reconfig)
+ {
+ schService = OpenService(schSCManager, service_name,
+ SERVICE_ALL_ACCESS);
+ if (!schService)
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "OpenService failed");
+ else if (!ChangeServiceConfig(
+ schService, // Service handle
+ SERVICE_WIN32_OWN_PROCESS, // service type
+ SERVICE_AUTO_START, // start type
+ SERVICE_ERROR_NORMAL, // error control type
+ szQuotedPath, // service's binary
+ NULL, // no load ordering group
+ NULL, // no tag identifier
+ depends, // dependencies
+ NULL, // user account
+ NULL, // account password
+ display_name)) { // service display name
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "ChangeServiceConfig failed");
+ /* !schService aborts configuration below */
+ CloseServiceHandle(schService);
+ schService = NULL;
+ }
+ }
+ else /* !reconfig */
+ {
+ schService = CreateService(
+ schSCManager, // SCManager database
+ service_name, // name of service
+ display_name, // name to display
+ SERVICE_ALL_ACCESS, // desired access
+ SERVICE_WIN32_OWN_PROCESS, // service type
+ SERVICE_AUTO_START, // start type
+ SERVICE_ERROR_NORMAL, // error control type
+ szQuotedPath, // service's binary
+ NULL, // no load ordering group
+ NULL, // no tag identifier
+ depends, // dependencies
+ NULL, // user account
+ NULL); // account password
+ if (!schService)
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "CreateService failed");
+ }
+ if (schService)
+ CloseServiceHandle(schService);
+
+ CloseServiceHandle(schSCManager);
+
+ if (!schService)
+ return;
+ }
+ else /* !isWindowsNT() */
+ {
+ HKEY hkey;
+ DWORD rv;
+
+ ap_snprintf(szQuotedPath, sizeof(szQuotedPath),
+ "\"%s\" -k start -n %s",
+ szPath, service_name);
+ /* Create/Find the RunServices key */
+ rv = RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows"
+ "\\CurrentVersion\\RunServices", &hkey);
+ if (rv != ERROR_SUCCESS) {
+ SetLastError(rv);
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "Could not create/open the RunServices registry key");
+ return;
+ }
+
+ /* Attempt to add the value for our service */
+ rv = RegSetValueEx(hkey, service_name, 0, REG_SZ,
+ (unsigned char *)szQuotedPath,
+ strlen(szQuotedPath) + 1);
+ if (rv != ERROR_SUCCESS) {
+ SetLastError(rv);
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "Unable to install service: "
+ "Could not add to RunServices Registry Key");
+ RegCloseKey(hkey);
+ return;
+ }
+
+ RegCloseKey(hkey);
+
+ /* Create/Find the Service key for Monitor Applications to iterate */
+ ap_snprintf(szPath, sizeof(szPath),
+ "SYSTEM\\CurrentControlSet\\Services\\%s", service_name);
+ rv = RegCreateKey(HKEY_LOCAL_MACHINE, szPath, &hkey);
+ if (rv != ERROR_SUCCESS) {
+ SetLastError(rv);
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "Could not create/open the %s registry key", szPath);
+ return;
+ }
+
+ /* Attempt to add the ImagePath value to identify it as Apache */
+ rv = RegSetValueEx(hkey, "ImagePath", 0, REG_SZ,
+ (unsigned char *)szQuotedPath,
+ strlen(szQuotedPath) + 1);
+ if (rv != ERROR_SUCCESS) {
+ SetLastError(rv);
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "Unable to install service: "
+ "Could not add ImagePath to %s Registry Key",
+ service_name);
+ RegCloseKey(hkey);
+ return;
+ }
+
+ /* Attempt to add the DisplayName value for our service */
+ rv = RegSetValueEx(hkey, "DisplayName", 0, REG_SZ,
+ (unsigned char *)display_name,
+ strlen(display_name) + 1);
+ if (rv != ERROR_SUCCESS) {
+ SetLastError(rv);
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "Unable to install service: "
+ "Could not add DisplayName to %s Registry Key",
+ service_name);
+ RegCloseKey(hkey);
+ return;
+ }
+
+ RegCloseKey(hkey);
+ }
+
+ /* Both Platforms: Now store the args in the registry */
+ if (ap_registry_set_service_args(p, regargc, regargv, service_name)) {
+ return;
+ }
+
+ printf("The %s service has been %s successfully.\n",
+ display_name, reconfig ? "reconfigured" : "installed");
+}
+
+void RemoveService(char *display_name)
+{
+ char *service_name;
+ BOOL success = FALSE;
+
+ printf("Removing the %s service\n", display_name);
+
+ /* Remove spaces from display name to create service name */
+ service_name = get_service_name(display_name);
+
+ if (isWindowsNT())
+ {
+ SC_HANDLE schService;
+ SC_HANDLE schSCManager;
+
+ schSCManager = OpenSCManager(
+ NULL, // machine (NULL == local)
+ NULL, // database (NULL == default)
+ SC_MANAGER_ALL_ACCESS // access required
+ );
+ if (!schSCManager) {
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "OpenSCManager failed");
+ return;
+ }
+
+ schService = OpenService(schSCManager, service_name, SERVICE_ALL_ACCESS);
+
+ if (schService == NULL) {
+ /* Could not open the service */
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "OpenService failed");
+ }
+ else {
+ /* try to stop the service */
+ ap_stop_service(schService);
+
+ // now remove the service
+ if (DeleteService(schService) == 0)
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "DeleteService failed");
+ else
+ success = TRUE;
+ CloseServiceHandle(schService);
+ }
+ /* SCM removes registry parameters */
+ CloseServiceHandle(schSCManager);
+ }
+ else /* !isWindowsNT() */
+ {
+ HKEY hkey;
+ DWORD service_pid;
+ DWORD rv;
+ HWND hwnd;
+
+ /* Locate the named window of class ApacheWin95ServiceMonitor
+ * from the active top level windows
+ */
+ hwnd = FindWindow("ApacheWin95ServiceMonitor", service_name);
+ if (hwnd && GetWindowThreadProcessId(hwnd, &service_pid))
+ {
+ int ticks = 120;
+ char prefix[20];
+ ap_snprintf(prefix, sizeof(prefix), "ap%ld", (long)service_pid);
+ setup_signal_names(prefix);
+ ap_start_shutdown();
+ while (--ticks) {
+ if (!IsWindow(hwnd))
+ break;
+ Sleep(1000);
+ }
+ }
+
+ /* Open the RunServices key */
+ rv = RegOpenKey(HKEY_LOCAL_MACHINE,
+ "Software\\Microsoft\\Windows\\CurrentVersion\\RunServices",
+ &hkey);
+ if (rv != ERROR_SUCCESS) {
+ SetLastError(rv);
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "Could not open the RunServices registry key.");
+ }
+ else {
+ /* Delete the registry value for this service */
+ rv = RegDeleteValue(hkey, service_name);
+ if (rv != ERROR_SUCCESS) {
+ SetLastError(rv);
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "Unable to remove service: "
+ "Could not delete the RunServices entry.");
+ }
+ else
+ success = TRUE;
+ }
+ RegCloseKey(hkey);
+
+ /* Open the Services key */
+ rv = RegOpenKey(HKEY_LOCAL_MACHINE,
+ "SYSTEM\\CurrentControlSet\\Services", &hkey);
+ if (rv != ERROR_SUCCESS) {
+ rv = RegDeleteValue(hkey, service_name);
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "Could not open the Services registry key.");
+ success = FALSE;
+ }
+ else {
+ /* Delete the registry key for this service */
+ rv = RegDeleteKey(hkey, service_name);
+ if (rv != ERROR_SUCCESS) {
+ SetLastError(rv);
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "Unable to remove service: "
+ "Could not delete the Services registry key.");
+ success = FALSE;
+ }
+ }
+ RegCloseKey(hkey);
+ }
+ if (success)
+ printf("The %s service has been removed successfully.\n",
+ display_name);
+}
+
+
+BOOL isWindowsNT(void)
+{
+ static BOOL once = FALSE;
+ static BOOL isNT = FALSE;
+
+ if (!once)
+ {
+ OSVERSIONINFO osver;
+ osver.dwOSVersionInfoSize = sizeof(osver);
+ if (GetVersionEx(&osver))
+ if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
+ isNT = TRUE;
+ once = TRUE;
+ }
+ return isNT;
+}
+
+
+/*
+ * A hack to determine if we're running as a service without waiting for
+ * the SCM to fail.
+ */
+
+BOOL isProcessService()
+{
+ if (is_service != -1)
+ return is_service;
+ if (!isWindowsNT() || !AllocConsole()) {
+ /* Don't assume anything, just yet */
+ return FALSE;
+ }
+ FreeConsole();
+ is_service = 1;
+ return TRUE;
+}
+
+/* Determine is service_name is a valid service
+ *
+ * TODO: be nice if we tested that it is an 'apache' service, no?
+ */
+
+BOOL isValidService(char *display_name) {
+ char service_key[MAX_PATH];
+ char *service_name;
+ HKEY hkey;
+
+ /* Remove spaces from display name to create service name */
+ strcpy(service_key, "System\\CurrentControlSet\\Services\\");
+ service_name = get_service_name(display_name);
+ strcat(service_key, service_name);
+
+ if (RegOpenKey(HKEY_LOCAL_MACHINE, service_key, &hkey) != ERROR_SUCCESS) {
+ return FALSE;
+ }
+ RegCloseKey(hkey);
+ return TRUE;
+}
+
+
+int send_signal_to_service(char *display_name, char *sig,
+ int argc, char **argv)
+{
+ DWORD service_pid;
+ HANDLE hwnd;
+ SC_HANDLE schService;
+ SC_HANDLE schSCManager;
+ char *service_name;
+ int success = FALSE;
+
+ enum { start, restart, stop, unknown } action;
+ static char *param[] = { "start", "restart", "shutdown" };
+ static char *participle[] = { "starting", "restarting", "stopping" };
+ static char *past[] = { "started", "restarted", "stopped" };
+
+ for (action = start; action < unknown; action++)
+ if (!strcasecmp(sig, param[action]))
+ break;
+
+ if (action == unknown) {
+ printf("signal must be start, restart, or shutdown\n");
+ return FALSE;
+ }
+
+ service_name = get_service_name(display_name);
+
+ if (isWindowsNT())
+ {
+ schSCManager = OpenSCManager(
+ NULL, // machine (NULL == local)
+ NULL, // database (NULL == default)
+ SC_MANAGER_ALL_ACCESS // access required
+ );
+ if (!schSCManager) {
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "OpenSCManager failed");
+ return FALSE;
+ }
+
+ schService = OpenService(schSCManager, service_name, SERVICE_ALL_ACCESS);
+
+ if (schService == NULL) {
+ /* Could not open the service */
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "OpenService failed");
+ CloseServiceHandle(schSCManager);
+ return FALSE;
+ }
+
+ if (!QueryServiceStatus(schService, &globdat.ssStatus)) {
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+ "QueryService failed");
+ CloseServiceHandle(schService);
+ CloseServiceHandle(schSCManager);
+ }
+ }
+ else /* !isWindowsNT() */
+ {
+ /* Locate the window named service_name of class ApacheWin95ServiceMonitor
+ * from the active top level windows
+ */
+ hwnd = FindWindow("ApacheWin95ServiceMonitor", service_name);
+ if (hwnd && GetWindowThreadProcessId(hwnd, &service_pid))
+ globdat.ssStatus.dwCurrentState = SERVICE_RUNNING;
+ else
+ globdat.ssStatus.dwCurrentState = SERVICE_STOPPED;
+ }
+
+ if (globdat.ssStatus.dwCurrentState == SERVICE_STOPPED
+ && action == stop) {
+ printf("The %s service is not started.\n", display_name);
+ return FALSE;
+ }
+ else if (globdat.ssStatus.dwCurrentState == SERVICE_RUNNING
+ && action == start) {
+ printf("The %s service has already been started.\n", display_name);
+ strcpy(sig, "");
+ return FALSE;
+ }
+ else
+ {
+ printf("The %s service is %s.\n", display_name, participle[action]);
+
+ if (isWindowsNT())
+ {
+ if (action == stop)
+ success = ap_stop_service(schService);
+ else if ((action == start)
+ || ((action == restart)
+ && (globdat.ssStatus.dwCurrentState
+ == SERVICE_STOPPED)))
+ {
+ /* start NT service needs service args */
+ char **args = malloc(argc * sizeof(char*));
+ int i, j;
+ for (i = 1, j = 0; i < argc; i++) {
+ if ((argv[i][0] == '-') && ((argv[i][1] == 'k')
+ || (argv[i][1] == 'n')))
+ ++i;
+ else
+ args[j++] = argv[i];
+ }
+ success = ap_start_service(schService, j, args);
+ }
+ else if (action == restart)
+ success = ap_restart_service(schService);
+ }
+ else /* !isWindowsNT()) */
+ {
+ char prefix[20];
+ ap_snprintf(prefix, sizeof(prefix), "ap%ld", (long)service_pid);
+ setup_signal_names(prefix);
+
+ if (action == stop) {
+ int ticks = 60;
+ ap_start_shutdown();
+ while (--ticks)
+ {
+ if (!IsWindow(hwnd)) {
+ success = TRUE;
+ break;
+ }
+ Sleep(1000);
+ }
+ }
+ else if (action == restart)
+ {
+ /* This gets a bit tricky... start and restart (of stopped service)
+ * will simply fall through and *THIS* process will fade into an
+ * invisible 'service' process, detaching from the user's console.
+ * We need to change the restart signal to "start", however,
+ * if the service was not -yet- running, and we do return FALSE
+ * to assure main() that we haven't done anything yet.
+ */
+ if (globdat.ssStatus.dwCurrentState == SERVICE_STOPPED)
+ {
+ printf("The %s service has %s.\n", display_name,
+ past[action]);
+ strcpy(sig, "start");
+ return FALSE;
+ }
+
+ ap_start_restart(1);
+ success = TRUE;
+ }
+ else /* action == start */
+ {
+ printf("The %s service is %s.\n", display_name,
+ past[action]);
+ return FALSE;
+ }
+ }
+
+ if( success )
+ printf("The %s service has %s.\n", display_name, past[action]);
+ else
+ printf("Failed to %s the %s service.\n", sig, display_name);
+ }
+
+ if (isWindowsNT()) {
+ CloseServiceHandle(schService);
+ CloseServiceHandle(schSCManager);
+ }
+ return success;
+}
+
+int ap_stop_service(SC_HANDLE schService)
+{
+ if (ControlService(schService, SERVICE_CONTROL_STOP, &globdat.ssStatus)) {
+ Sleep(1000);
+ while (QueryServiceStatus(schService, &globdat.ssStatus)) {
+ if (globdat.ssStatus.dwCurrentState == SERVICE_STOP_PENDING)
+ Sleep(1000);
+ else
+ break;
+ }
+ }
+ if (QueryServiceStatus(schService, &globdat.ssStatus))
+ if (globdat.ssStatus.dwCurrentState == SERVICE_STOPPED)
+ return TRUE;
+ return FALSE;
+}
+
+int ap_start_service(SC_HANDLE schService, DWORD argc, char **argv) {
+ if (StartService(schService, argc, argv)) {
+ Sleep(1000);
+ while(QueryServiceStatus(schService, &globdat.ssStatus)) {
+ if(globdat.ssStatus.dwCurrentState == SERVICE_START_PENDING)
+ Sleep(1000);
+ else
+ break;
+ }
+ }
+ if (QueryServiceStatus(schService, &globdat.ssStatus))
+ if (globdat.ssStatus.dwCurrentState == SERVICE_RUNNING)
+ return TRUE;
+ return FALSE;
+}
+
+int ap_restart_service(SC_HANDLE schService)
+{
+ int ticks;
+ if (ControlService(schService, SERVICE_APACHE_RESTART, &globdat.ssStatus))
+ {
+ ticks = 60;
+ while (globdat.ssStatus.dwCurrentState == SERVICE_START_PENDING)
+ {
+ Sleep(1000);
+ if (!QueryServiceStatus(schService, &globdat.ssStatus))
+ return FALSE;
+ if (!--ticks)
+ break;
+ }
+ }
+ if (globdat.ssStatus.dwCurrentState == SERVICE_RUNNING)
+ return TRUE;
+ return FALSE;
+}
+
+#endif /* WIN32 */
diff --git a/APACHE_1_3_42/src/os/win32/service.h b/APACHE_1_3_42/src/os/win32/service.h
new file mode 100644
index 0000000000..77684e6a9a
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/service.h
@@ -0,0 +1,54 @@
+/* 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.
+ */
+
+#ifndef SERVICE_H
+#define SERVICE_H
+
+#ifdef WIN32
+
+/* BIG RED WARNING: exit() is mapped to allow us to capture the exit
+ * status. This header must only be included from modules linked into
+ * the ApacheCore.dll - since it's a horrible behavior to exit() from
+ * any module outside the main() block, and we -will- assume it's a
+ * fatal error. No dynamically linked module will ever be able to find
+ * the real_exit_code, and _will_ GP fault if it tries this macro.
+ */
+
+#define exit(status) ((exit)((real_exit_code==2) ? (real_exit_code = (status)) \
+ : ((real_exit_code = 0), (status))))
+extern int real_exit_code;
+void hold_console_open_on_error(void);
+
+int service_main(int (*main_fn)(int, char **), int argc, char **argv);
+int service95_main(int (*main_fn)(int, char **), int argc, char **argv,
+ char *display_name);
+void service_set_status(int status);
+void service_cd();
+char *get_service_name(char *display_name);
+char *get_display_name(char *service_name);
+BOOL isProcessService();
+BOOL isValidService(char *display_name);
+void InstallService(pool *p, char *display_name, int argc, char **argv, int reconfig);
+void RemoveService(char *display_name);
+int send_signal_to_service(char *display_name, char *sig,
+ int argc, char **argv);
+BOOL isWindowsNT(void);
+void ap_start_console_monitor(void);
+void ap_start_child_console(int is_child_of_service);
+
+#endif /* WIN32 */
+
+#endif /* SERVICE_H */
diff --git a/APACHE_1_3_42/src/os/win32/util_win32.c b/APACHE_1_3_42/src/os/win32/util_win32.c
new file mode 100644
index 0000000000..104e9dc2bc
--- /dev/null
+++ b/APACHE_1_3_42/src/os/win32/util_win32.c
@@ -0,0 +1,530 @@
+/* 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.
+ */
+
+#ifdef WIN32
+
+#include <sys/stat.h>
+#include <stdarg.h>
+#include <time.h>
+#include <stdlib.h>
+
+#include "httpd.h"
+#include "http_log.h"
+
+/* Returns TRUE if the input string is a string
+ * of one or more '.' characters.
+ */
+static BOOL OnlyDots(char *pString)
+{
+ char *c;
+
+ if (*pString == '\0')
+ return FALSE;
+
+ for (c = pString;*c;c++)
+ if (*c != '.')
+ return FALSE;
+
+ return TRUE;
+}
+
+
+/* Accepts as input a pathname, and tries to match it to an
+ * existing path and return the pathname in the case that
+ * is present on the existing path. This routine also
+ * converts alias names to long names.
+ *
+ * WARNING: Folding to systemcase fails when /path/to/foo/../bar
+ * is given and foo does not exist, is not a directory.
+ */
+API_EXPORT(char *) ap_os_systemcase_filename(pool *pPool,
+ const char *szFile)
+{
+ char *buf, *t, *r;
+ const char *q, *p;
+ BOOL bDone = FALSE;
+ BOOL bFileExists = TRUE;
+ HANDLE hFind;
+ WIN32_FIND_DATA wfd;
+ size_t buflen;
+ int slack = 0;
+
+ if (!szFile || strlen(szFile) == 0)
+ return ap_pstrdup(pPool, "");
+
+ buflen = strlen(szFile);
+ t = buf = ap_palloc(pPool, buflen + 1);
+ q = szFile;
+
+ /* If there is drive information, copy it over. */
+ if (szFile[1] == ':') {
+ /* Lowercase, so that when systemcase is used for
+ * comparison, d: designations will match
+ */
+ *(t++) = tolower(*(q++));
+ *(t++) = *(q++);
+ }
+ else if ((*q == '/') || (*q == '\\')) {
+ /* Get past the root path (/ or //foo/bar/) so we can go
+ * on to normalize individual path elements.
+ */
+ *(t++) = '\\', ++q;
+ if ((*q == '/') || (*q == '\\')) /* UNC name */
+ {
+ /* Lower-case the machine name, so compares match.
+ * FindFirstFile won't parse \\machine alone
+ */
+ *(t++) = '\\', ++q;
+ for (p = q; *p && (*p != '/') && (*p != '\\'); ++p)
+ /* continue */ ;
+ if (*p || p > q)
+ {
+ /* Lower-case the machine name, so compares match.
+ * FindFirstFile won't parse \\machine\share alone
+ */
+ memcpy(t, q, p - q);
+ t[p - q] = '\0';
+ strlwr(t);
+ t += p - q;
+ q = p;
+ if (*p) {
+ *(t++) = '\\', ++q;
+ for (p = q; *p && (*p != '/') && (*p != '\\'); ++p)
+ /* continue */ ;
+ if (*p || p > q)
+ {
+ /* Copy the lower-cased share name. FindFirstFile
+ * cannot not find a \\machine\share name only
+ */
+ memcpy(t, q, p - q);
+ t[p - q] = '\0';
+ strlwr(t);
+ t += p - q;
+ q = p;
+ if (*p)
+ *(t++) = '\\', ++q;
+ else
+ bFileExists = FALSE;
+ }
+ else
+ bFileExists = FALSE;
+ }
+ else
+ bFileExists = FALSE;
+ }
+ else
+ bFileExists = FALSE;
+ }
+ }
+
+ while (bFileExists) {
+
+ /* parse past any leading slashes */
+ for (; (*q == '/') || (*q == '\\'); ++q)
+ *(t++) = '\\';
+
+ /* break on end of string */
+ if (!*q)
+ break;
+
+ /* get to the end of this path segment */
+ for (p = q; *p && (*p != '/') && (*p != '\\'); ++p)
+ /* continue */ ;
+
+ /* copy the segment */
+ memcpy(t, q, p - q);
+ t[p - q] = '\0';
+
+ /* Test for nasties that can exhibit undesired effects */
+ if (strpbrk(t, "?\"<>*|:")) {
+ t += p - q;
+ q = p;
+ break;
+ }
+
+ /* If the path exists so far, call FindFirstFile
+ * again. However, if this portion of the path contains
+ * only '.' charaters, skip the call to FindFirstFile
+ * since it will convert '.' and '..' to actual names.
+ * On win32, '...' is an alias for '..', so we gain
+ * a bit of slack.
+ */
+ if (*t == '.' && OnlyDots(t)) {
+ if (p - q == 3) {
+ t += 2;
+ q = p;
+ ++slack;
+ }
+ else {
+ t += p - q;
+ q = p;
+ }
+ /* Paths of 4 dots or more are invalid */
+ if (p - q > 3)
+ break;
+ }
+ else {
+ if ((hFind = FindFirstFile(buf, &wfd)) == INVALID_HANDLE_VALUE) {
+ t += p - q;
+ q = p;
+ break;
+ }
+ else {
+ size_t fnlen = strlen(wfd.cFileName);
+ FindClose(hFind);
+ /* the string length just changed, could have shrunk
+ * (trailing spaces or dots) or could have grown
+ * (longer filename aliases). Realloc as necessary
+ */
+ slack -= fnlen - (p - q);
+ if (slack < 0) {
+ char *n;
+ slack += buflen + fnlen - (p - q);
+ buflen += buflen + fnlen - (p - q);
+ n = ap_palloc(pPool, buflen + 1);
+ memcpy (n, buf, t - buf);
+ t = n + (t - buf);
+ buf = n;
+ }
+ memcpy(t, wfd.cFileName, fnlen);
+ t += fnlen;
+ q = p;
+ if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
+ break;
+ }
+ }
+ }
+
+ /* Convert all parsed '\'s to '/' for canonical form (doesn't touch
+ * the non-existant portion of the path whatsoever.)
+ */
+ for (r = buf; r < t; ++r) {
+ if (*r == '\\')
+ *r = '/';
+ }
+
+ /* Copy the non-existant portion (minimally nul-terminates the string) */
+ strcpy(t, q);
+
+ return buf;
+}
+
+
+/* Perform canonicalization with the exception that the
+ * input case is preserved.
+ */
+API_EXPORT(char *) ap_os_case_canonical_filename(pool *pPool,
+ const char *szFile)
+{
+ char *pNewStr;
+ char *s;
+ char *p;
+ char *q;
+
+ if (szFile == NULL || strlen(szFile) == 0)
+ return ap_pstrdup(pPool, "");
+
+ pNewStr = ap_pstrdup(pPool, szFile);
+
+ /* Change all '\' characters to '/' characters.
+ * While doing this, remove any trailing '.'.
+ * Also, blow away any directories with 3 or
+ * more '.'
+ */
+ for (p = pNewStr,s = pNewStr; *s; s++,p++) {
+ if (*s == '\\' || *s == '/') {
+
+ q = p;
+ while (p > pNewStr && *(p-1) == '.')
+ p--;
+
+ if (p == pNewStr && q-p <= 2 && *p == '.')
+ p = q;
+ else if (p > pNewStr && p < q && *(p-1) == '/') {
+ if (q-p > 2)
+ p--;
+ else
+ p = q;
+ }
+
+ *p = '/';
+ }
+ else {
+ *p = *s;
+ }
+ }
+ *p = '\0';
+
+ /* Blow away any final trailing '.' since on Win32
+ * foo.bat == foo.bat. == foo.bat... etc.
+ * Also blow away any trailing spaces since
+ * "filename" == "filename "
+ */
+ q = p;
+ while (p > pNewStr && (*(p-1) == '.' || *(p-1) == ' '))
+ p--;
+ if ((p > pNewStr) ||
+ (p == pNewStr && q-p > 2))
+ *p = '\0';
+
+
+ /* One more security issue to deal with. Win32 allows
+ * you to create long filenames. However, alias filenames
+ * are always created so that the filename will
+ * conform to 8.3 rules. According to the Microsoft
+ * Developer's network CD (1/98)
+ * "Automatically generated aliases are composed of the
+ * first six characters of the filename plus ~n
+ * (where n is a number) and the first three characters
+ * after the last period."
+ * Here, we attempt to detect and decode these names.
+ *
+ * XXX: Netware network clients may have alternate short names,
+ * simply truncated, with no embedded '~'. Further, this behavior
+ * can be modified on WinNT volumes. This was not a safe test,
+ * therefore exclude the '~' pretest.
+ */
+#ifdef WIN32_SHORT_FILENAME_INSECURE_BEHAVIOR
+ p = strchr(pNewStr, '~');
+ if (p != NULL)
+#endif
+ /* ap_os_systemcase_filename now changes the case of only
+ * the pathname elements that are found.
+ */
+ pNewStr = ap_os_systemcase_filename(pPool, pNewStr);
+
+ return pNewStr;
+}
+
+/* Perform complete canonicalization.
+ */
+API_EXPORT(char *) ap_os_canonical_filename(pool *pPool, const char *szFile)
+{
+ char *pNewName;
+ pNewName = ap_os_case_canonical_filename(pPool, szFile);
+ strlwr(pNewName);
+ return pNewName;
+}
+
+
+/*
+ * ap_os_is_filename_valid is given a filename, and returns 0 if the filename
+ * is not valid for use on this system. On Windows, this means it fails any
+ * of the tests below. Otherwise returns 1.
+ *
+ * Test for filename validity on Win32. This is of tests come in part from
+ * the MSDN article at "Technical Articles, Windows Platform, Base Services,
+ * Guidelines, Making Room for Long Filenames" although the information
+ * in MSDN about filename testing is incomplete or conflicting. There is a
+ * similar set of tests in "Technical Articles, Windows Platform, Base Services,
+ * Guidelines, Moving Unix Applications to Windows NT".
+ *
+ * The tests are:
+ *
+ * 1) total path length greater than MAX_PATH
+ *
+ * 2) anything using the octets 0-31 or characters " < > | :
+ * (these are reserved for Windows use in filenames. In addition
+ * each file system has its own additional characters that are
+ * invalid. See KB article Q100108 for more details).
+ *
+ * 3) anything ending in "." (no matter how many)
+ * (filename doc, doc. and doc... all refer to the same file)
+ *
+ * 4) any segment in which the basename (before first period) matches
+ * one of the DOS device names
+ * (the list comes from KB article Q100108 although some people
+ * reports that additional names such as "COM5" are also special
+ * devices).
+ *
+ * If the path fails ANY of these tests, the result must be to deny access.
+ */
+
+API_EXPORT(int) ap_os_is_filename_valid(const char *file)
+{
+ const char *segstart;
+ unsigned int seglength;
+ const char *pos;
+ static const char * const invalid_characters = "?\"<>*|:";
+ static const char * const invalid_filenames[] = {
+ "CON", "AUX", "COM1", "COM2", "COM3",
+ "COM4", "LPT1", "LPT2", "LPT3", "PRN", "NUL", NULL
+ };
+
+ /* Test 1 */
+ if (strlen(file) >= MAX_PATH) {
+ /* Path too long for Windows. Note that this test is not valid
+ * if the path starts with //?/ or \\?\. */
+ return 0;
+ }
+
+ pos = file;
+
+ /* Skip any leading non-path components. This can be either a
+ * drive letter such as C:, or a UNC path such as \\SERVER\SHARE\.
+ * We continue and check the rest of the path based on the rules above.
+ * This means we could eliminate valid filenames from servers which
+ * are not running NT (such as Samba).
+ */
+
+ if (pos[0] && pos[1] == ':') {
+ /* Skip leading drive letter */
+ pos += 2;
+ }
+ else {
+ if ((pos[0] == '\\' || pos[0] == '/') &&
+ (pos[1] == '\\' || pos[1] == '/')) {
+ /* Is a UNC, so skip the server name and share name */
+ pos += 2;
+ while (*pos && *pos != '/' && *pos != '\\')
+ pos++;
+ if (!*pos) {
+ /* No share name */
+ return 0;
+ }
+ pos++; /* Move to start of share name */
+ while (*pos && *pos != '/' && *pos != '\\')
+ pos++;
+ if (!*pos) {
+ /* No path information */
+ return 0;
+ }
+ }
+ }
+
+ while (*pos) {
+ unsigned int idx;
+ unsigned int baselength;
+
+ while (*pos == '/' || *pos == '\\') {
+ pos++;
+ }
+ if (*pos == '\0') {
+ break;
+ }
+ segstart = pos; /* start of segment */
+ while (*pos && *pos != '/' && *pos != '\\') {
+ pos++;
+ }
+ seglength = pos - segstart;
+ /*
+ * Now we have a segment of the path, starting at position "segstart"
+ * and length "seglength"
+ */
+
+ /* Test 2 */
+ for (idx = 0; idx < seglength; idx++) {
+ if ((segstart[idx] > 0 && segstart[idx] < 32) ||
+ strchr(invalid_characters, segstart[idx])) {
+ return 0;
+ }
+ }
+
+ /* Test 3 */
+ if (segstart[seglength-1] == '.') {
+ return 0;
+ }
+
+ /* Test 4 */
+ for (baselength = 0; baselength < seglength; baselength++) {
+ if (segstart[baselength] == '.') {
+ break;
+ }
+ }
+
+ /* baselength is the number of characters in the base path of
+ * the segment (which could be the same as the whole segment length,
+ * if it does not include any dot characters). */
+ if (baselength == 3 || baselength == 4) {
+ for (idx = 0; invalid_filenames[idx]; idx++) {
+ if (strlen(invalid_filenames[idx]) == baselength &&
+ !strnicmp(invalid_filenames[idx], segstart, baselength)) {
+ return 0;
+ }
+ }
+ }
+ }
+
+ return 1;
+}
+
+
+API_EXPORT(ap_os_dso_handle_t) ap_os_dso_load(const char *module_name)
+{
+ UINT em;
+ ap_os_dso_handle_t dsoh;
+ char path[MAX_PATH], *p;
+ /* Load the module...
+ * per PR2555, the LoadLibraryEx function is very picky about slashes.
+ * Debugging on NT 4 SP 6a reveals First Chance Exception within NTDLL.
+ * LoadLibrary in the MS PSDK also reveals that it -explicitly- states
+ * that backslashes must be used.
+ *
+ * Transpose '\' for '/' in the filename.
+ */
+ ap_cpystrn(path, module_name, MAX_PATH);
+ p = path;
+ while (p = strchr(p, '/'))
+ *p = '\\';
+
+ /* First assume the dso/dll's required by -this- dso are sitting in the
+ * same path or can be found in the usual places. Failing that, let's
+ * let that dso look in the apache root.
+ */
+ em = SetErrorMode(SEM_FAILCRITICALERRORS);
+ dsoh = LoadLibraryEx(path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
+ if (!dsoh) {
+ dsoh = LoadLibraryEx(path, NULL, 0);
+ }
+ SetErrorMode(em);
+ return dsoh;
+}
+
+API_EXPORT(const char *) ap_os_dso_error(void)
+{
+ int len, nErrorCode;
+ static char errstr[120];
+ /* This is -not- threadsafe code, but it's about the best we can do.
+ * mostly a potential problem for isapi modules, since LoadModule
+ * errors are handled within a single config thread.
+ */
+
+ nErrorCode = GetLastError();
+ len = ap_snprintf(errstr, sizeof(errstr), "(%d) ", nErrorCode);
+
+ len += FormatMessage(
+ FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL,
+ nErrorCode,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default language */
+ (LPTSTR) errstr + len,
+ sizeof(errstr) - len,
+ NULL
+ );
+ /* FormatMessage may have appended a newline (\r\n). So remove it
+ * and use ": " instead like the Unix errors. The error may also
+ * end with a . before the return - if so, trash it.
+ */
+ if (len > 1 && errstr[len-2] == '\r' && errstr[len-1] == '\n') {
+ if (len > 2 && errstr[len-3] == '.')
+ len--;
+ errstr[len-2] = ':';
+ errstr[len-1] = ' ';
+ }
+ return errstr;
+}
+
+#endif /* WIN32 */