mirror of
https://github.com/apache/httpd.git
synced 2025-08-07 04:02:58 +03:00
remove OS/2 platform support
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@758929 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
2
LAYOUT
2
LAYOUT
@@ -143,8 +143,6 @@ os/ .....................
|
|||||||
|
|
||||||
netware/ ................
|
netware/ ................
|
||||||
|
|
||||||
os2/ ....................
|
|
||||||
|
|
||||||
tpf/ ....................
|
tpf/ ....................
|
||||||
|
|
||||||
samples/ ................
|
samples/ ................
|
||||||
|
@@ -231,5 +231,3 @@ suexec:
|
|||||||
|
|
||||||
x-local-distclean:
|
x-local-distclean:
|
||||||
@rm -rf autom4te.cache
|
@rm -rf autom4te.cache
|
||||||
|
|
||||||
include $(top_srcdir)/os/os2/core.mk
|
|
||||||
|
@@ -53,14 +53,6 @@ CMD="$SH_LIBTOOL --mode=install cp $DSOARCHIVE $TARGETDIR/"
|
|||||||
echo $CMD
|
echo $CMD
|
||||||
$CMD || exit $?
|
$CMD || exit $?
|
||||||
|
|
||||||
if test "$SYS" = "OS/2"
|
|
||||||
then
|
|
||||||
# on OS/2, aplibtool --install doesn't copy the .la files & we can't
|
|
||||||
# rename DLLs to have a .so extension or they won't load so none of the
|
|
||||||
# steps below make sense.
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -s "$TARGETDIR/$DSOARCHIVE_BASENAME"
|
if test -s "$TARGETDIR/$DSOARCHIVE_BASENAME"
|
||||||
then
|
then
|
||||||
DLNAME=`sed -n "/^dlname=/{s/.*='\([^']*\)'/\1/;p;}" $TARGETDIR/$DSOARCHIVE_BASENAME`
|
DLNAME=`sed -n "/^dlname=/{s/.*='\([^']*\)'/\1/;p;}" $TARGETDIR/$DSOARCHIVE_BASENAME`
|
||||||
|
60
configure.in
60
configure.in
@@ -227,56 +227,34 @@ APR_ADDTO(INCLUDES, $APU_INCLUDES)
|
|||||||
dnl Add in path to PCRE includes
|
dnl Add in path to PCRE includes
|
||||||
APR_ADDTO(INCLUDES, $PCRE_INCLUDES)
|
APR_ADDTO(INCLUDES, $PCRE_INCLUDES)
|
||||||
|
|
||||||
echo $ac_n "${nl}Applying OS-specific hints for httpd ...${nl}"
|
if test "x$LTFLAGS" = "x"; then
|
||||||
|
LTFLAGS='--silent'
|
||||||
case $host in
|
fi
|
||||||
*os2*)
|
my_libtool=`$apr_config --apr-libtool`
|
||||||
# Use a custom made libtool replacement
|
LIBTOOL="$my_libtool \$(LTFLAGS)"
|
||||||
echo "using aplibtool"
|
libtoolversion=`$my_libtool --version`
|
||||||
LIBTOOL="$abs_srcdir/srclib/apr/build/aplibtool"
|
case $libtoolversion in
|
||||||
SH_LIBTOOL="$LIBTOOL --shared --export-all"
|
*1.[[45]]* | *[[2-9]].[[0-9]]*)
|
||||||
SH_LIBS="\$(ALL_LIBS)"
|
SH_LIBTOOL='$(LIBTOOL)'
|
||||||
CORE_IMPLIB_FILE="ApacheCoreOS2.la"
|
SHLTCFLAGS="-prefer-pic"
|
||||||
CORE_IMPLIB="$abs_srcdir/server/$CORE_IMPLIB_FILE"
|
LTCFLAGS="-prefer-non-pic -static"
|
||||||
MK_IMPLIB="emximp"
|
;;
|
||||||
other_targets="$other_targets os2core"
|
*)
|
||||||
INSTALL_PROG_FLAGS="-e .exe"
|
SH_LIBTOOL='$(SHELL) $(top_builddir)/shlibtool $(LTFLAGS)'
|
||||||
SHLTCFLAGS=""
|
SHLTCFLAGS=""
|
||||||
LTCFLAGS=""
|
LTCFLAGS=""
|
||||||
;;
|
;;
|
||||||
*)
|
|
||||||
if test "x$LTFLAGS" = "x"; then
|
|
||||||
LTFLAGS='--silent'
|
|
||||||
fi
|
|
||||||
my_libtool=`$apr_config --apr-libtool`
|
|
||||||
LIBTOOL="$my_libtool \$(LTFLAGS)"
|
|
||||||
libtoolversion=`$my_libtool --version`
|
|
||||||
case $libtoolversion in
|
|
||||||
*1.[[45]]* | *[[2-9]].[[0-9]]*)
|
|
||||||
SH_LIBTOOL='$(LIBTOOL)'
|
|
||||||
SHLTCFLAGS="-prefer-pic"
|
|
||||||
LTCFLAGS="-prefer-non-pic -static"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
SH_LIBTOOL='$(SHELL) $(top_builddir)/shlibtool $(LTFLAGS)'
|
|
||||||
SHLTCFLAGS=""
|
|
||||||
LTCFLAGS=""
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
APACHE_SUBST(SHLTCFLAGS)
|
APACHE_SUBST(SHLTCFLAGS)
|
||||||
APACHE_SUBST(LTCFLAGS)
|
APACHE_SUBST(LTCFLAGS)
|
||||||
|
|
||||||
|
echo $ac_n "${nl}Applying OS-specific hints for httpd ...${nl}"
|
||||||
|
|
||||||
case $host in
|
case $host in
|
||||||
*-apple-aux3*)
|
*-apple-aux3*)
|
||||||
APR_SETVAR(APACHE_MPM, [prefork])
|
APR_SETVAR(APACHE_MPM, [prefork])
|
||||||
APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
|
APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
|
||||||
;;
|
;;
|
||||||
*os2-emx*)
|
|
||||||
APR_SETVAR(APACHE_MPM, [mpmt_os2])
|
|
||||||
APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
|
|
||||||
;;
|
|
||||||
*-linux-*)
|
*-linux-*)
|
||||||
case `uname -r` in
|
case `uname -r` in
|
||||||
2.[[2-9]]* )
|
2.[[2-9]]* )
|
||||||
|
@@ -73,7 +73,7 @@
|
|||||||
|
|
||||||
<p>The error log is usually written to a file (typically
|
<p>The error log is usually written to a file (typically
|
||||||
<code>error_log</code> on Unix systems and
|
<code>error_log</code> on Unix systems and
|
||||||
<code>error.log</code> on Windows and OS/2). On Unix systems it
|
<code>error.log</code> on Windows). On Unix systems it
|
||||||
is also possible to have the server send errors to
|
is also possible to have the server send errors to
|
||||||
<code>syslog</code> or <a href="#piped">pipe them to a
|
<code>syslog</code> or <a href="#piped">pipe them to a
|
||||||
program</a>.</p>
|
program</a>.</p>
|
||||||
|
@@ -1016,7 +1016,7 @@ in case of an error</description>
|
|||||||
<name>ErrorLog</name>
|
<name>ErrorLog</name>
|
||||||
<description>Location where the server will log errors</description>
|
<description>Location where the server will log errors</description>
|
||||||
<syntax> ErrorLog <var>file-path</var>|syslog[:<var>facility</var>]</syntax>
|
<syntax> ErrorLog <var>file-path</var>|syslog[:<var>facility</var>]</syntax>
|
||||||
<default>ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows and OS/2)</default>
|
<default>ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows)</default>
|
||||||
<contextlist><context>server config</context><context>virtual host</context>
|
<contextlist><context>server config</context><context>virtual host</context>
|
||||||
</contextlist>
|
</contextlist>
|
||||||
|
|
||||||
|
@@ -774,8 +774,8 @@ indexing</description>
|
|||||||
<dd>This returns the <code>Last-Modified</code> and <code>ETag</code>
|
<dd>This returns the <code>Last-Modified</code> and <code>ETag</code>
|
||||||
values for the listed directory in the HTTP header. It is only valid
|
values for the listed directory in the HTTP header. It is only valid
|
||||||
if the operating system and file system return appropriate stat()
|
if the operating system and file system return appropriate stat()
|
||||||
results. Some Unix systems do so, as do OS2's JFS and Win32's
|
results. Some Unix systems do so, as do Win32's
|
||||||
NTFS volumes. OS2 and Win32 FAT volumes, for example, do not.
|
NTFS volumes. Win32 FAT volumes, for example, do not.
|
||||||
Once this feature is enabled, the client or proxy can track
|
Once this feature is enabled, the client or proxy can track
|
||||||
changes to the list of files when they perform a <code>HEAD</code>
|
changes to the list of files when they perform a <code>HEAD</code>
|
||||||
request. Note some operating systems correctly track new and
|
request. Note some operating systems correctly track new and
|
||||||
|
@@ -75,10 +75,7 @@ extern "C" {
|
|||||||
* file with a relative pathname will have this added.
|
* file with a relative pathname will have this added.
|
||||||
*/
|
*/
|
||||||
#ifndef HTTPD_ROOT
|
#ifndef HTTPD_ROOT
|
||||||
#ifdef OS2
|
#if defined(WIN32)
|
||||||
/** Set default for OS/2 file system */
|
|
||||||
#define HTTPD_ROOT "/os2httpd"
|
|
||||||
#elif defined(WIN32)
|
|
||||||
/** Set default for Windows file system */
|
/** Set default for Windows file system */
|
||||||
#define HTTPD_ROOT "/apache"
|
#define HTTPD_ROOT "/apache"
|
||||||
#elif defined (NETWARE)
|
#elif defined (NETWARE)
|
||||||
@@ -103,13 +100,7 @@ extern "C" {
|
|||||||
* directive.
|
* directive.
|
||||||
*/
|
*/
|
||||||
#ifndef DOCUMENT_LOCATION
|
#ifndef DOCUMENT_LOCATION
|
||||||
#ifdef OS2
|
|
||||||
/* Set default for OS/2 file system */
|
|
||||||
#define DOCUMENT_LOCATION HTTPD_ROOT "/docs"
|
|
||||||
#else
|
|
||||||
/* Set default for non OS/2 file system */
|
|
||||||
#define DOCUMENT_LOCATION HTTPD_ROOT "/htdocs"
|
#define DOCUMENT_LOCATION HTTPD_ROOT "/htdocs"
|
||||||
#endif
|
|
||||||
#endif /* DOCUMENT_LOCATION */
|
#endif /* DOCUMENT_LOCATION */
|
||||||
|
|
||||||
/** Maximum number of dynamically loaded modules */
|
/** Maximum number of dynamically loaded modules */
|
||||||
@@ -122,7 +113,7 @@ extern "C" {
|
|||||||
|
|
||||||
/** The name of the log files */
|
/** The name of the log files */
|
||||||
#ifndef DEFAULT_ERRORLOG
|
#ifndef DEFAULT_ERRORLOG
|
||||||
#if defined(OS2) || defined(WIN32)
|
#if defined(WIN32)
|
||||||
#define DEFAULT_ERRORLOG "logs/error.log"
|
#define DEFAULT_ERRORLOG "logs/error.log"
|
||||||
#else
|
#else
|
||||||
#define DEFAULT_ERRORLOG "logs/error_log"
|
#define DEFAULT_ERRORLOG "logs/error_log"
|
||||||
@@ -131,12 +122,7 @@ extern "C" {
|
|||||||
|
|
||||||
/** Define this to be what your per-directory security files are called */
|
/** Define this to be what your per-directory security files are called */
|
||||||
#ifndef DEFAULT_ACCESS_FNAME
|
#ifndef DEFAULT_ACCESS_FNAME
|
||||||
#ifdef OS2
|
|
||||||
/* Set default for OS/2 file system */
|
|
||||||
#define DEFAULT_ACCESS_FNAME "htaccess"
|
|
||||||
#else
|
|
||||||
#define DEFAULT_ACCESS_FNAME ".htaccess"
|
#define DEFAULT_ACCESS_FNAME ".htaccess"
|
||||||
#endif
|
|
||||||
#endif /* DEFAULT_ACCESS_FNAME */
|
#endif /* DEFAULT_ACCESS_FNAME */
|
||||||
|
|
||||||
/** The name of the server config file */
|
/** The name of the server config file */
|
||||||
@@ -1603,7 +1589,7 @@ AP_DECLARE(char *) ap_make_full_path(apr_pool_t *a, const char *dir, const char
|
|||||||
* Test if the given path has an an absolute path.
|
* Test if the given path has an an absolute path.
|
||||||
* @param p The pool to allocate from
|
* @param p The pool to allocate from
|
||||||
* @param dir The directory name
|
* @param dir The directory name
|
||||||
* @note The converse is not necessarily true, some OS's (Win32/OS2/Netware) have
|
* @note The converse is not necessarily true, some OS's (Win32/Netware) have
|
||||||
* multiple forms of absolute paths. This only reports if the path is absolute
|
* multiple forms of absolute paths. This only reports if the path is absolute
|
||||||
* in a canonical sense.
|
* in a canonical sense.
|
||||||
*/
|
*/
|
||||||
|
@@ -107,8 +107,8 @@ static int set_group_privs(void)
|
|||||||
else
|
else
|
||||||
name = ap_unixd_config.user_name;
|
name = ap_unixd_config.user_name;
|
||||||
|
|
||||||
#if !defined(OS2) && !defined(TPF)
|
#if !defined(TPF)
|
||||||
/* OS/2 and TPF don't support groups. */
|
/* TPF doesn't support groups. */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the GID before initgroups(), since on some platforms
|
* Set the GID before initgroups(), since on some platforms
|
||||||
@@ -129,7 +129,7 @@ static int set_group_privs(void)
|
|||||||
"and Group %u", name, (unsigned)ap_unixd_config.group_id);
|
"and Group %u", name, (unsigned)ap_unixd_config.group_id);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif /* !defined(OS2) && !defined(TPF) */
|
#endif /* !defined(TPF) */
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -230,7 +230,7 @@ unixd_set_user(cmd_parms *cmd, void *dummy,
|
|||||||
|
|
||||||
ap_unixd_config.user_name = arg;
|
ap_unixd_config.user_name = arg;
|
||||||
ap_unixd_config.user_id = ap_uname2id(arg);
|
ap_unixd_config.user_id = ap_uname2id(arg);
|
||||||
#if !defined (BIG_SECURITY_HOLE) && !defined (OS2)
|
#if !defined (BIG_SECURITY_HOLE)
|
||||||
if (ap_unixd_config.user_id == 0) {
|
if (ap_unixd_config.user_id == 0) {
|
||||||
return "Error:\tApache has not been designed to serve pages while\n"
|
return "Error:\tApache has not been designed to serve pages while\n"
|
||||||
"\trunning as root. There are known race conditions that\n"
|
"\trunning as root. There are known race conditions that\n"
|
||||||
|
@@ -10,14 +10,6 @@ else
|
|||||||
dav_fs_enable=$dav_enable
|
dav_fs_enable=$dav_enable
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "$host" in
|
|
||||||
*os2*)
|
|
||||||
# OS/2 DLLs must resolve all symbols at build time
|
|
||||||
# and we need some from main DAV module
|
|
||||||
dav_fs_objects="$dav_fs_objects ../main/mod_dav.la"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
APACHE_MODULE(dav_fs, DAV provider for the filesystem, $dav_fs_objects, , $dav_fs_enable)
|
APACHE_MODULE(dav_fs, DAV provider for the filesystem, $dav_fs_objects, , $dav_fs_enable)
|
||||||
|
|
||||||
APACHE_MODPATH_FINISH
|
APACHE_MODPATH_FINISH
|
||||||
|
@@ -4,14 +4,6 @@ APACHE_MODPATH_INIT(dav/lock)
|
|||||||
|
|
||||||
dav_lock_objects="mod_dav_lock.lo locks.lo"
|
dav_lock_objects="mod_dav_lock.lo locks.lo"
|
||||||
|
|
||||||
case "$host" in
|
|
||||||
*os2*)
|
|
||||||
# OS/2 DLLs must resolve all symbols at build time
|
|
||||||
# and we need some from main DAV module
|
|
||||||
dav_lock_objects="$dav_lock_objects ../main/mod_dav.la"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
APACHE_MODULE(dav_lock, DAV provider for generic locking, $dav_lock_objects, , no)
|
APACHE_MODULE(dav_lock, DAV provider for generic locking, $dav_lock_objects, , no)
|
||||||
|
|
||||||
APACHE_MODPATH_FINISH
|
APACHE_MODPATH_FINISH
|
||||||
|
@@ -54,7 +54,7 @@
|
|||||||
#include "http_protocol.h"
|
#include "http_protocol.h"
|
||||||
#include "ap_config.h"
|
#include "ap_config.h"
|
||||||
|
|
||||||
#if !defined(OS2) && !defined(WIN32) && !defined(NETWARE)
|
#if !defined(WIN32) && !defined(NETWARE)
|
||||||
#include "unixd.h"
|
#include "unixd.h"
|
||||||
#define MOD_EXIPC_SET_MUTEX_PERMS /* XXX Apache should define something */
|
#define MOD_EXIPC_SET_MUTEX_PERMS /* XXX Apache should define something */
|
||||||
#endif
|
#endif
|
||||||
|
@@ -3053,7 +3053,7 @@ static int include_fixup(request_rec *r)
|
|||||||
r->handler = "default-handler";
|
r->handler = "default-handler";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#if defined(OS2) || defined(WIN32) || defined(NETWARE)
|
#if defined(WIN32) || defined(NETWARE)
|
||||||
/* These OS's don't support xbithack. This is being worked on. */
|
/* These OS's don't support xbithack. This is being worked on. */
|
||||||
{
|
{
|
||||||
return DECLINED;
|
return DECLINED;
|
||||||
|
@@ -390,12 +390,7 @@ static apr_status_t run_cgi_child(apr_file_t **script_out,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_CGI
|
#ifdef DEBUG_CGI
|
||||||
#ifdef OS2
|
|
||||||
/* Under OS/2 need to use device con. */
|
|
||||||
FILE *dbg = fopen("con", "w");
|
|
||||||
#else
|
|
||||||
FILE *dbg = fopen("/dev/tty", "w");
|
FILE *dbg = fopen("/dev/tty", "w");
|
||||||
#endif
|
|
||||||
int i;
|
int i;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -1366,7 +1366,7 @@ static int cgid_handler(request_rec *r)
|
|||||||
return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
|
return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
|
||||||
"attempt to include NPH CGI script");
|
"attempt to include NPH CGI script");
|
||||||
|
|
||||||
#if defined(OS2) || defined(WIN32)
|
#if defined(WIN32)
|
||||||
#error mod_cgid does not work on this platform. If you teach it to, look
|
#error mod_cgid does not work on this platform. If you teach it to, look
|
||||||
#error at mod_cgi.c for required code in this path.
|
#error at mod_cgi.c for required code in this path.
|
||||||
#else
|
#else
|
||||||
|
@@ -437,10 +437,8 @@ static int status_handler(request_rec *r)
|
|||||||
count, kbcount);
|
count, kbcount);
|
||||||
|
|
||||||
#ifdef HAVE_TIMES
|
#ifdef HAVE_TIMES
|
||||||
/* Allow for OS/2 not having CPU stats */
|
ap_rprintf(r, "CPULoad: %g\n",
|
||||||
if (ts || tu || tcu || tcs)
|
(tu + ts + tcu + tcs) / tick / up_time * 100.);
|
||||||
ap_rprintf(r, "CPULoad: %g\n",
|
|
||||||
(tu + ts + tcu + tcs) / tick / up_time * 100.);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ap_rprintf(r, "Uptime: %ld\n", (long) (up_time));
|
ap_rprintf(r, "Uptime: %ld\n", (long) (up_time));
|
||||||
@@ -461,13 +459,11 @@ static int status_handler(request_rec *r)
|
|||||||
ap_rputs("</dt>\n", r);
|
ap_rputs("</dt>\n", r);
|
||||||
|
|
||||||
#ifdef HAVE_TIMES
|
#ifdef HAVE_TIMES
|
||||||
/* Allow for OS/2 not having CPU stats */
|
|
||||||
ap_rprintf(r, "<dt>CPU Usage: u%g s%g cu%g cs%g",
|
ap_rprintf(r, "<dt>CPU Usage: u%g s%g cu%g cs%g",
|
||||||
tu / tick, ts / tick, tcu / tick, tcs / tick);
|
tu / tick, ts / tick, tcu / tick, tcs / tick);
|
||||||
|
|
||||||
if (ts || tu || tcu || tcs)
|
ap_rprintf(r, " - %.3g%% CPU load</dt>\n",
|
||||||
ap_rprintf(r, " - %.3g%% CPU load</dt>\n",
|
(tu + ts + tcu + tcs) / tick / up_time * 100.);
|
||||||
(tu + ts + tcu + tcs) / tick / up_time * 100.);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (up_time > 0) {
|
if (up_time > 0) {
|
||||||
|
@@ -3779,13 +3779,11 @@ static int apply_rewrite_cond(rewritecond_entry *p, rewrite_ctx *ctx)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONDPAT_FILE_LINK:
|
case CONDPAT_FILE_LINK:
|
||||||
#if !defined(OS2)
|
|
||||||
if ( apr_stat(&sb, input, APR_FINFO_MIN | APR_FINFO_LINK,
|
if ( apr_stat(&sb, input, APR_FINFO_MIN | APR_FINFO_LINK,
|
||||||
r->pool) == APR_SUCCESS
|
r->pool) == APR_SUCCESS
|
||||||
&& sb.filetype == APR_LNK) {
|
&& sb.filetype == APR_LNK) {
|
||||||
rc = 1;
|
rc = 1;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONDPAT_FILE_DIR:
|
case CONDPAT_FILE_DIR:
|
||||||
|
@@ -64,7 +64,7 @@
|
|||||||
#include "http_config.h"
|
#include "http_config.h"
|
||||||
#include "http_request.h"
|
#include "http_request.h"
|
||||||
|
|
||||||
#if !defined(WIN32) && !defined(OS2) && !defined(NETWARE)
|
#if !defined(WIN32) && !defined(NETWARE)
|
||||||
#define HAVE_UNIX_SUEXEC
|
#define HAVE_UNIX_SUEXEC
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -22,21 +22,6 @@ proxy_fdpass_objs="mod_proxy_fdpass.lo"
|
|||||||
proxy_ajp_objs="mod_proxy_ajp.lo ajp_header.lo ajp_link.lo ajp_msg.lo ajp_utils.lo"
|
proxy_ajp_objs="mod_proxy_ajp.lo ajp_header.lo ajp_link.lo ajp_msg.lo ajp_utils.lo"
|
||||||
proxy_balancer_objs="mod_proxy_balancer.lo"
|
proxy_balancer_objs="mod_proxy_balancer.lo"
|
||||||
|
|
||||||
case "$host" in
|
|
||||||
*os2*)
|
|
||||||
# OS/2 DLLs must resolve all symbols at build time and
|
|
||||||
# these sub-modules need some from the main proxy module
|
|
||||||
proxy_connect_objs="$proxy_connect_objs mod_proxy.la"
|
|
||||||
proxy_ftp_objs="$proxy_ftp_objs mod_proxy.la"
|
|
||||||
proxy_http_objs="$proxy_http_objs mod_proxy.la"
|
|
||||||
proxy_fcgi_objs="$proxy_fcgi_objs mod_proxy.la"
|
|
||||||
proxy_scgi_objs="$proxy_scgi_objs mod_proxy.la"
|
|
||||||
proxy_fdpass_objs="$proxy_fdpass_objs mod_proxy.la"
|
|
||||||
proxy_ajp_objs="$proxy_ajp_objs mod_proxy.la"
|
|
||||||
proxy_balancer_objs="$proxy_balancer_objs mod_proxy.la"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
APACHE_MODULE(proxy_connect, Apache proxy CONNECT module, $proxy_connect_objs, , $proxy_mods_enable)
|
APACHE_MODULE(proxy_connect, Apache proxy CONNECT module, $proxy_connect_objs, , $proxy_mods_enable)
|
||||||
APACHE_MODULE(proxy_ftp, Apache proxy FTP module, $proxy_ftp_objs, , $proxy_mods_enable)
|
APACHE_MODULE(proxy_ftp, Apache proxy FTP module, $proxy_ftp_objs, , $proxy_mods_enable)
|
||||||
APACHE_MODULE(proxy_http, Apache proxy HTTP module, $proxy_http_objs, , $proxy_mods_enable)
|
APACHE_MODULE(proxy_http, Apache proxy HTTP module, $proxy_http_objs, , $proxy_mods_enable)
|
||||||
|
@@ -1,10 +1,6 @@
|
|||||||
AC_MSG_CHECKING(for target platform)
|
AC_MSG_CHECKING(for target platform)
|
||||||
|
|
||||||
case $host in
|
case $host in
|
||||||
*pc-os2-emx*)
|
|
||||||
OS="os2"
|
|
||||||
OS_DIR=$OS
|
|
||||||
;;
|
|
||||||
bs2000*)
|
bs2000*)
|
||||||
OS="unix"
|
OS="unix"
|
||||||
OS_DIR=$OS
|
OS_DIR=$OS
|
||||||
|
@@ -1,5 +0,0 @@
|
|||||||
|
|
||||||
LTLIBRARY_NAME = libos.la
|
|
||||||
LTLIBRARY_SOURCES = util_os2.c
|
|
||||||
|
|
||||||
include $(top_srcdir)/build/ltlib.mk
|
|
@@ -1,3 +0,0 @@
|
|||||||
if test "$OS" = "os2" ; then
|
|
||||||
APR_ADDTO(CFLAGS, [-DOS2 -O2])
|
|
||||||
fi
|
|
@@ -1,7 +0,0 @@
|
|||||||
# Some rules for making a shared core dll on OS/2
|
|
||||||
|
|
||||||
os2core: httpd.dll $(CORE_IMPLIB)
|
|
||||||
$(LIBTOOL) --mode=link gcc -Zstack 512 $(LDFLAGS) $(EXTRA_LDFLAGS) -o httpd $(CORE_IMPLIB)
|
|
||||||
|
|
||||||
httpd.dll: $(PROGRAM_DEPENDENCIES) $(CORE_IMPLIB)
|
|
||||||
$(LINK) -Zdll $(EXTRA_LDFLAGS) -s -o $@ server/exports.lo modules.lo $(PROGRAM_DEPENDENCIES) $(AP_LIBS) server/ApacheCoreOS2.def
|
|
@@ -1,19 +0,0 @@
|
|||||||
LIBRARY httpd INITINSTANCE
|
|
||||||
DESCRIPTION "Apache Server Core"
|
|
||||||
DATA NONSHARED
|
|
||||||
|
|
||||||
EXPORTS
|
|
||||||
"main"
|
|
||||||
|
|
||||||
; One for mod_dav from socket library
|
|
||||||
"_swaps"
|
|
||||||
|
|
||||||
; And some more for mod_unique_id
|
|
||||||
"gethostname"
|
|
||||||
"gethostbyname"
|
|
||||||
"_swapl"
|
|
||||||
"h_errno"
|
|
||||||
"inet_ntoa"
|
|
||||||
|
|
||||||
; mod_proxy needs this one
|
|
||||||
"inet_addr"
|
|
39
os/os2/os.h
39
os/os2/os.h
@@ -1,39 +0,0 @@
|
|||||||
/* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
||||||
* (the "License"); you may not use this file except in compliance with
|
|
||||||
* the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file os2/os.h
|
|
||||||
* @brief This file in included in all Apache source code. It contains definitions
|
|
||||||
* of facilities available on _this_ operating system (HAVE_* macros),
|
|
||||||
* and prototypes of OS specific functions defined in os.c or os-inline.c
|
|
||||||
*
|
|
||||||
* @defgroup APACHE_OS_OS2 os2
|
|
||||||
* @ingroup APACHE_OS
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef APACHE_OS_H
|
|
||||||
#define APACHE_OS_H
|
|
||||||
|
|
||||||
#define PLATFORM "OS/2"
|
|
||||||
|
|
||||||
/* going away shortly... */
|
|
||||||
#define HAVE_DRIVE_LETTERS
|
|
||||||
#define HAVE_UNC_PATHS
|
|
||||||
#define CASE_BLIND_FILESYSTEM
|
|
||||||
|
|
||||||
#endif /* ! APACHE_OS_H */
|
|
||||||
/** @} */
|
|
@@ -1,39 +0,0 @@
|
|||||||
/* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
||||||
* (the "License"); you may not use this file except in compliance with
|
|
||||||
* the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define INCL_DOS
|
|
||||||
#define INCL_DOSERRORS
|
|
||||||
#include <os2.h>
|
|
||||||
#include "ap_config.h"
|
|
||||||
#include "httpd.h"
|
|
||||||
#include "http_log.h"
|
|
||||||
#include "os.h"
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <sys/signal.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "apr_strings.h"
|
|
||||||
|
|
||||||
|
|
||||||
AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
|
|
||||||
const request_rec *r,
|
|
||||||
apr_proc_t *newproc, const char *progname,
|
|
||||||
const char * const *args,
|
|
||||||
const char * const *env,
|
|
||||||
apr_procattr_t *attr, apr_pool_t *p)
|
|
||||||
{
|
|
||||||
return apr_proc_create(newproc, progname, args, env, attr, p);
|
|
||||||
}
|
|
@@ -1,6 +1,5 @@
|
|||||||
|
|
||||||
CLEAN_TARGETS = gen_test_char test_char.h \
|
CLEAN_TARGETS = gen_test_char test_char.h httpd.exp export_files \
|
||||||
ApacheCoreOS2.def httpd.exp export_files \
|
|
||||||
exports.c export_vars.h
|
exports.c export_vars.h
|
||||||
|
|
||||||
SUBDIRS = mpm
|
SUBDIRS = mpm
|
||||||
@@ -70,12 +69,6 @@ exports.c: export_files
|
|||||||
export_vars.h: export_files
|
export_vars.h: export_files
|
||||||
$(AWK) -f $(top_srcdir)/build/make_var_export.awk `cat $?` > $@
|
$(AWK) -f $(top_srcdir)/build/make_var_export.awk `cat $?` > $@
|
||||||
|
|
||||||
# Rule to make def file for OS/2 core dll
|
|
||||||
ApacheCoreOS2.def: exports.c export_vars.h $(top_srcdir)/os/$(OS_DIR)/core_header.def
|
|
||||||
cat $(top_srcdir)/os/$(OS_DIR)/core_header.def > $@
|
|
||||||
$(CPP) $< $(ALL_CPPFLAGS) $(ALL_INCLUDES) | grep "ap_hack_" | sed -e 's/^.*[)]\(.*\);$$/ "\1"/' >> $@
|
|
||||||
$(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) export_vars.h | grep "^[a-z]" | sed -e 's/^\(.*\)$$/ "\1"/' >> $@
|
|
||||||
|
|
||||||
# Rule to make exp file for AIX DSOs
|
# Rule to make exp file for AIX DSOs
|
||||||
httpd.exp: exports.c export_vars.h
|
httpd.exp: exports.c export_vars.h
|
||||||
@echo "#! ." > $@
|
@echo "#! ." > $@
|
||||||
|
@@ -1723,8 +1723,8 @@ AP_CORE_DECLARE_NONSTD(const char *) ap_limit_section(cmd_parms *cmd,
|
|||||||
return errmsg;
|
return errmsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* XXX: Bogus - need to do this differently (at least OS2/Netware suffer
|
/* XXX: Bogus - need to do this differently (at least Netware suffers
|
||||||
* the same problem!!!
|
* the same problem!!!)
|
||||||
* We use this in <DirectoryMatch> and <FilesMatch>, to ensure that
|
* We use this in <DirectoryMatch> and <FilesMatch>, to ensure that
|
||||||
* people don't get bitten by wrong-cased regex matches
|
* people don't get bitten by wrong-cased regex matches
|
||||||
*/
|
*/
|
||||||
|
@@ -62,14 +62,14 @@ int main(int argc, char *argv[])
|
|||||||
printf("\n ");
|
printf("\n ");
|
||||||
|
|
||||||
/* escape_shell_cmd */
|
/* escape_shell_cmd */
|
||||||
#if defined(WIN32) || defined(OS2)
|
#if defined(WIN32)
|
||||||
/* Win32/OS2 have many of the same vulnerable characters
|
/* Win32 has many of the same vulnerable characters
|
||||||
* as Unix sh, plus the carriage return and percent char.
|
* as Unix sh, plus the carriage return and percent char.
|
||||||
* The proper escaping of these characters varies from unix
|
* The proper escaping of these characters varies from unix
|
||||||
* since Win32/OS2 use carets or doubled-double quotes,
|
* since Win32 uses carets or doubled-double quotes,
|
||||||
* and neither lf nor cr can be escaped. We escape unix
|
* and neither lf nor cr can be escaped. We escape unix
|
||||||
* specific as well, to assure that cross-compiled unix
|
* specific as well, to assure that cross-compiled unix
|
||||||
* applications behave similiarly when invoked on win32/os2.
|
* applications behave similiarly when invoked on win32.
|
||||||
*
|
*
|
||||||
* Rem please keep in-sync with apr's list in win32/filesys.c
|
* Rem please keep in-sync with apr's list in win32/filesys.c
|
||||||
*/
|
*/
|
||||||
|
@@ -198,7 +198,7 @@ AP_DECLARE(gid_t) ap_gname2id(const char *name)
|
|||||||
#ifndef HAVE_INITGROUPS
|
#ifndef HAVE_INITGROUPS
|
||||||
int initgroups(const char *name, gid_t basegid)
|
int initgroups(const char *name, gid_t basegid)
|
||||||
{
|
{
|
||||||
#if defined(QNX) || defined(MPE) || defined(_OSD_POSIX) || defined(TPF) || defined(__TANDEM) || defined(OS2) || defined(WIN32) || defined(NETWARE)
|
#if defined(QNX) || defined(MPE) || defined(_OSD_POSIX) || defined(TPF) || defined(__TANDEM) || defined(WIN32) || defined(NETWARE)
|
||||||
/* QNX and MPE do not appear to support supplementary groups. */
|
/* QNX and MPE do not appear to support supplementary groups. */
|
||||||
return 0;
|
return 0;
|
||||||
#else /* ndef QNX */
|
#else /* ndef QNX */
|
||||||
|
@@ -529,8 +529,8 @@ AP_CORE_DECLARE(void) ap_parse_uri(request_rec *r, const char *uri)
|
|||||||
r->uri = r->parsed_uri.path ? r->parsed_uri.path
|
r->uri = r->parsed_uri.path ? r->parsed_uri.path
|
||||||
: apr_pstrdup(r->pool, "/");
|
: apr_pstrdup(r->pool, "/");
|
||||||
|
|
||||||
#if defined(OS2) || defined(WIN32)
|
#if defined(WIN32)
|
||||||
/* Handle path translations for OS/2 and plug security hole.
|
/* Handle path translations and plug security hole.
|
||||||
* This will prevent "http://www.wherever.com/..\..\/" from
|
* This will prevent "http://www.wherever.com/..\..\/" from
|
||||||
* returning a directory for the root drive.
|
* returning a directory for the root drive.
|
||||||
*/
|
*/
|
||||||
@@ -540,7 +540,7 @@ AP_CORE_DECLARE(void) ap_parse_uri(request_rec *r, const char *uri)
|
|||||||
for (x = r->uri; (x = strchr(x, '\\')) != NULL; )
|
for (x = r->uri; (x = strchr(x, '\\')) != NULL; )
|
||||||
*x = '/';
|
*x = '/';
|
||||||
}
|
}
|
||||||
#endif /* OS2 || WIN32 */
|
#endif /* WIN32 */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
r->args = NULL;
|
r->args = NULL;
|
||||||
|
@@ -822,7 +822,7 @@ AP_DECLARE(int) ap_directory_walk(request_rec *r)
|
|||||||
|
|
||||||
/* We will never skip '0' element components, e.g. plain old
|
/* We will never skip '0' element components, e.g. plain old
|
||||||
* <Directory >, and <Directory "/"> are classified as zero
|
* <Directory >, and <Directory "/"> are classified as zero
|
||||||
* so that Win32/Netware/OS2 etc all pick them up.
|
* so that Win32/Netware etc all pick them up.
|
||||||
* Otherwise, skip over the mismatches.
|
* Otherwise, skip over the mismatches.
|
||||||
*/
|
*/
|
||||||
if (entry_core->d_components
|
if (entry_core->d_components
|
||||||
|
@@ -71,7 +71,7 @@
|
|||||||
*/
|
*/
|
||||||
#define TEST_CHAR(c, f) (test_char_table[(unsigned)(c)] & (f))
|
#define TEST_CHAR(c, f) (test_char_table[(unsigned)(c)] & (f))
|
||||||
|
|
||||||
/* Win32/NetWare/OS2 need to check for both forward and back slashes
|
/* Win32/NetWare need to check for both forward and back slashes
|
||||||
* in ap_getparents() and ap_escape_url.
|
* in ap_getparents() and ap_escape_url.
|
||||||
*/
|
*/
|
||||||
#ifdef CASE_BLIND_FILESYSTEM
|
#ifdef CASE_BLIND_FILESYSTEM
|
||||||
@@ -910,11 +910,11 @@ AP_DECLARE(apr_status_t) ap_pcfg_openfile(ap_configfile_t **ret_cfg,
|
|||||||
return status;
|
return status;
|
||||||
|
|
||||||
if (finfo.filetype != APR_REG &&
|
if (finfo.filetype != APR_REG &&
|
||||||
#if defined(WIN32) || defined(OS2) || defined(NETWARE)
|
#if defined(WIN32) || defined(NETWARE)
|
||||||
strcasecmp(apr_filepath_name_get(name), "nul") != 0) {
|
strcasecmp(apr_filepath_name_get(name), "nul") != 0) {
|
||||||
#else
|
#else
|
||||||
strcmp(name, "/dev/null") != 0) {
|
strcmp(name, "/dev/null") != 0) {
|
||||||
#endif /* WIN32 || OS2 */
|
#endif /* WIN32 */
|
||||||
ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
|
ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
|
||||||
"Access to file %s denied by server: not a regular file",
|
"Access to file %s denied by server: not a regular file",
|
||||||
name);
|
name);
|
||||||
@@ -1489,9 +1489,9 @@ AP_DECLARE(char *) ap_escape_shell_cmd(apr_pool_t *p, const char *str)
|
|||||||
s = (const unsigned char *)str;
|
s = (const unsigned char *)str;
|
||||||
for (; *s; ++s) {
|
for (; *s; ++s) {
|
||||||
|
|
||||||
#if defined(OS2) || defined(WIN32)
|
#if defined(WIN32)
|
||||||
/*
|
/*
|
||||||
* Newlines to Win32/OS2 CreateProcess() are ill advised.
|
* Newlines to Win32 CreateProcess() are ill advised.
|
||||||
* Convert them to spaces since they are effectively white
|
* Convert them to spaces since they are effectively white
|
||||||
* space to most applications
|
* space to most applications
|
||||||
*/
|
*/
|
||||||
|
@@ -37,11 +37,6 @@
|
|||||||
#include "apr_date.h" /* For apr_date_parse_http() */
|
#include "apr_date.h" /* For apr_date_parse_http() */
|
||||||
#include "util_ebcdic.h"
|
#include "util_ebcdic.h"
|
||||||
|
|
||||||
#ifdef OS2
|
|
||||||
#define INCL_DOS
|
|
||||||
#include <os2.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Various utility functions which are common to a whole lot of
|
* Various utility functions which are common to a whole lot of
|
||||||
* script-type extensions mechanisms, and might as well be gathered
|
* script-type extensions mechanisms, and might as well be gathered
|
||||||
@@ -122,7 +117,7 @@ AP_DECLARE(void) ap_add_common_vars(request_rec *r)
|
|||||||
conn_rec *c = r->connection;
|
conn_rec *c = r->connection;
|
||||||
const char *rem_logname;
|
const char *rem_logname;
|
||||||
char *env_path;
|
char *env_path;
|
||||||
#if defined(WIN32) || defined(OS2)
|
#if defined(WIN32)
|
||||||
char *env_temp;
|
char *env_temp;
|
||||||
#endif
|
#endif
|
||||||
const char *host;
|
const char *host;
|
||||||
@@ -200,21 +195,6 @@ AP_DECLARE(void) ap_add_common_vars(request_rec *r)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef OS2
|
|
||||||
if ((env_temp = getenv("COMSPEC")) != NULL) {
|
|
||||||
apr_table_addn(e, "COMSPEC", env_temp);
|
|
||||||
}
|
|
||||||
if ((env_temp = getenv("ETC")) != NULL) {
|
|
||||||
apr_table_addn(e, "ETC", env_temp);
|
|
||||||
}
|
|
||||||
if ((env_temp = getenv("DPATH")) != NULL) {
|
|
||||||
apr_table_addn(e, "DPATH", env_temp);
|
|
||||||
}
|
|
||||||
if ((env_temp = getenv("PERLLIB_PREFIX")) != NULL) {
|
|
||||||
apr_table_addn(e, "PERLLIB_PREFIX", env_temp);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
apr_table_addn(e, "SERVER_SIGNATURE", ap_psignature("", r));
|
apr_table_addn(e, "SERVER_SIGNATURE", ap_psignature("", r));
|
||||||
apr_table_addn(e, "SERVER_SOFTWARE", ap_get_server_banner());
|
apr_table_addn(e, "SERVER_SOFTWARE", ap_get_server_banner());
|
||||||
apr_table_addn(e, "SERVER_NAME",
|
apr_table_addn(e, "SERVER_NAME",
|
||||||
|
@@ -490,7 +490,7 @@ if ($opt_i or $opt_e) {
|
|||||||
my @cmds = ();
|
my @cmds = ();
|
||||||
my $f;
|
my $f;
|
||||||
foreach $f (@args) {
|
foreach $f (@args) {
|
||||||
# ack all potential gcc, hp/ux, win32+os2+aix and os/x extensions
|
# ack all potential gcc, hp/ux, win32, aix and os/x extensions
|
||||||
if ($f !~ m#(\.so$|\.la$|\.sl$|\.dll$|\.dylib$|)#) {
|
if ($f !~ m#(\.so$|\.la$|\.sl$|\.dll$|\.dylib$|)#) {
|
||||||
error("file $f is not a shared object");
|
error("file $f is not a shared object");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@@ -148,7 +148,7 @@ int main(int argc, const char * const argv[])
|
|||||||
exit_error(rv, "apr_proc_detach");
|
exit_error(rv, "apr_proc_detach");
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(WIN32) || defined(OS2) || defined(NETWARE)
|
#if defined(WIN32) || defined(NETWARE)
|
||||||
|
|
||||||
#error "Please implement me."
|
#error "Please implement me."
|
||||||
|
|
||||||
|
@@ -118,17 +118,11 @@ static void usage(const char *argv0, const char *reason)
|
|||||||
"{<rotation time in seconds>|<rotation size>(B|K|M|G)} "
|
"{<rotation time in seconds>|<rotation size>(B|K|M|G)} "
|
||||||
"[offset minutes from UTC]\n\n",
|
"[offset minutes from UTC]\n\n",
|
||||||
argv0);
|
argv0);
|
||||||
#ifdef OS2
|
|
||||||
fprintf(stderr,
|
|
||||||
"Add this:\n\nTransferLog \"|%s.exe /some/where 86400\"\n\n",
|
|
||||||
argv0);
|
|
||||||
#else
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Add this:\n\nTransferLog \"|%s /some/where 86400\"\n\n",
|
"Add this:\n\nTransferLog \"|%s /some/where 86400\"\n\n",
|
||||||
argv0);
|
argv0);
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"or \n\nTransferLog \"|%s /some/where 5M\"\n\n", argv0);
|
"or \n\nTransferLog \"|%s /some/where 5M\"\n\n", argv0);
|
||||||
#endif
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"to httpd.conf. The generated name will be /some/where.nnnn "
|
"to httpd.conf. The generated name will be /some/where.nnnn "
|
||||||
"where nnnn is the\nsystem time at which the log nominally "
|
"where nnnn is the\nsystem time at which the log nominally "
|
||||||
|
Reference in New Issue
Block a user