diff options
Diffstat (limited to 'APACHE_1_3_42/src/os')
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 Binary files differnew file mode 100644 index 0000000000..12a7f6ba2d --- /dev/null +++ b/APACHE_1_3_42/src/os/netware/apache.xdc 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 = ∅ + 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 Binary files differnew file mode 100644 index 0000000000..bfb4f63ab6 --- /dev/null +++ b/APACHE_1_3_42/src/os/win32/apache.ico 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 */ |