New HTTPROOT control file statement

git-svn-id: file:///home/jj/hercules.svn/trunk@963 956126f8-22a0-4046-8f4a-272fa8102e63
This commit is contained in:
Fish (David B Trout)
2002-07-11 18:10:16 +00:00
parent 8543bbfa8e
commit 8b99f45aba
8 changed files with 202 additions and 32 deletions
+1
View File
@@ -1,3 +1,4 @@
11 Jul 2002 New optional HTTPROOT control file statement - Fish
09 Jul 2002 Minor fix to OPTION_CPU_UTILIZATION to fix FISH_HANG issue - Fish
02 Jul 2002 Fixes to ckdtab in dasdtab.c - Greg Smith
02 Jul 2002 Correct Erase All Unprotected 3270 order - Tomas Fott
+11 -21
View File
@@ -81,7 +81,6 @@ static BYTE *operand; /* -> First argument */
static int addargc; /* Number of additional args */
static BYTE *addargv[MAX_ARGS]; /* Additional argument array */
//#ifdef EXTERNALGUI
/*-------------------------------------------------------------------*/
/* Subroutine to parse an argument string. The string that is passed */
/* is modified in-place by inserting null characters at the end of */
@@ -129,7 +128,6 @@ int parse_args (BYTE* p, int maxargc, BYTE** pargv, int* pargc)
return *pargc;
}
//#endif /*EXTERNALGUI*/
/*-------------------------------------------------------------------*/
/* Subroutine to read a statement from the configuration file */
@@ -199,8 +197,6 @@ int stmtlen; /* Statement length */
if (stmtlen == 0 || buf[0] == '*' || buf[0] == '#')
continue;
#if 1 // def EXTERNALGUI
/* Parse the statement just read */
parse_args (buf, MAX_ARGS, addargv, &addargc);
@@ -218,23 +214,6 @@ int stmtlen; /* Statement length */
else addargv[i] = NULL;
}
#else /*EXTERNALGUI*/
/* Split the statement into keyword and first operand */
keyword = strtok (buf, " \t");
operand = strtok (NULL, " \t");
/* Extract any additional operands */
for (addargc = 0; addargc < MAX_ARGS &&
(addargv[addargc] = strtok (NULL, " \t")) != NULL
&& addargv[addargc][0] != '#';
addargc++);
/* Clear any unused additional operand pointers */
for (i = addargc; i < MAX_ARGS; i++) addargv[i] = NULL;
#endif /*!EXTERNALGUI*/
break;
} /* end while */
@@ -570,6 +549,17 @@ BYTE c; /* Work area for sscanf */
}
}
else if (strcasecmp (keyword, "httproot") == 0)
{
if (operand)
sysblk.httproot = strdup(operand);
else
{
logmsg(_("HHS003E Error in %s line %d: Missing argument.\n"),
fname, stmt);
exit(1);
}
}
#endif /*defined(OPTION_HTTP_SERVER)*/
else if (strcasecmp (keyword, "cckd") == 0)
{
+6
View File
@@ -70,6 +70,12 @@
/* Define to 1 if you have the `getpagesize' function. */
#undef HAVE_GETPAGESIZE
/* Define to 1 if you have the `getresuid' function. */
#undef HAVE_GETRESUID
/* Define to 1 if you have the `getreuid' function. */
#undef HAVE_GETREUID
/* Define if the GNU gettext() function is already present or preinstalled. */
#undef HAVE_GETTEXT
Vendored
+157 -2
View File
@@ -8309,8 +8309,76 @@ fi
done
echo "$as_me:$LINENO: checking for InitializeCriticalSectionAndSpinCount" >&5
echo $ECHO_N "checking for InitializeCriticalSectionAndSpinCount... $ECHO_C" >&6
if test "${ac_cv_func_InitializeCriticalSectionAndSpinCount+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char InitializeCriticalSectionAndSpinCount (); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char InitializeCriticalSectionAndSpinCount ();
char (*f) ();
for ac_func in setresuid setreuid
#ifdef F77_DUMMY_MAIN
# ifdef __cplusplus
extern "C"
# endif
int F77_DUMMY_MAIN() { return 1; }
#endif
int
main ()
{
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_InitializeCriticalSectionAndSpinCount) || defined (__stub___InitializeCriticalSectionAndSpinCount)
choke me
#else
f = InitializeCriticalSectionAndSpinCount;
#endif
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_func_InitializeCriticalSectionAndSpinCount=yes
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
ac_cv_func_InitializeCriticalSectionAndSpinCount=no
fi
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
echo "$as_me:$LINENO: result: $ac_cv_func_InitializeCriticalSectionAndSpinCount" >&5
echo "${ECHO_T}$ac_cv_func_InitializeCriticalSectionAndSpinCount" >&6
# If we have setresuid AND getresuid, we can do setuid stuff
for ac_func in setresuid getresuid
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -8381,10 +8449,97 @@ if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
enable_setuid=true;break
enable_setuid=true
else
enable_setuid=false;break
fi
done
if test x$enable_setuid != xtrue; then
# Likewise if we have setreuid AND getreuid
for ac_func in setreuid getreuid
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
echo "$as_me:$LINENO: checking for $ac_func" >&5
echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
if eval "test \"\${$as_ac_var+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func (); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func ();
char (*f) ();
#ifdef F77_DUMMY_MAIN
# ifdef __cplusplus
extern "C"
# endif
int F77_DUMMY_MAIN() { return 1; }
#endif
int
main ()
{
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
f = $ac_func;
#endif
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
eval "$as_ac_var=yes"
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
eval "$as_ac_var=no"
fi
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
enable_setuid=true
else
enable_setuid=false;break
fi
done
fi
# Otherwise, not
if test x$enable_setuid != xtrue; then
cat >>confdefs.h <<\_ACEOF
#define NO_SETUID 1
+1
View File
@@ -719,6 +719,7 @@ typedef struct _SYSBLK {
int httpauth; /* HTTP auth required flag */
char *httpuser; /* HTTP userid */
char *httppass; /* HTTP password */
char *httproot; /* HTTP root */
// #endif /*defined(OPTION_HTTP_SERVER)*/
CPCONV *codepage;
#ifdef OPTION_IODELAY_KLUDGE
+14
View File
@@ -29,6 +29,7 @@ a real System/390. The configuration file is an ASCII text file.
CODEPAGE default
CNSLPORT 3270
HTTPPORT 8081
HTTPROOT /usr/local/share/hercules/
NUMCPU 1
NUMVEC 1
CPUPRIO 15
@@ -100,6 +101,19 @@ The following system parameters may be specified:
<tt>AUTH</tt> indictates that a userid and password are required to access
the HTTP server, whereas <tt>NOAUTH</tt> indicates that a userid and password
are not required. The userid and password may be any valid string.
<dt><code>HTTPROOT<em>pathname</em></code>
<dd>specifies the root directory where the HTTP server's files reside.
The default value varies depending on how the hercules executable was
built, but is usually <tt>/usr/local/share/hercules/</tt>.<br>
Note: Windows users
of Hercules who do not have Cygwin installed (and are instead just using
the Cygwin DLLs) should specify "<tt>/cygdrive/x/pathname/</tt>" where
'<tt>x</tt>' is the Windows drive letter. For example, if the Windows
directory where the http server's files reside is
"<tt>H:\Hercules\httpserv\</tt>"
then you should specify
"<tt>/cygdrive/h/Hercules/httpserv/</tt>"
on your HTTPROOT statement.
<dt><code>CNSLPORT <em>nnnn</em></code>
<dd>specifies the port number (in decimal) to which tn3270 and
telnet clients will connect
+11 -9
View File
@@ -17,12 +17,12 @@
/* */
/* If the request is for a /cgi-bin/ path, then the cgibin */
/* directory in cgibin.c will be searched, for any other request */
/* the HTTP_ROOT (/usr/local/hercules) will be used as the root */
/* to find the specified file. */
/* the sysblk.httproot (/usr/local/hercules) will be used as the */
/* root to find the specified file. */
/* */
/* As realpath() is used to verify that the files are from within */
/* the HTTP_ROOT tree symbolic links that refer to files outside */
/* the HTTP_ROOT tree are not supported. */
/* the sysblk.httproot tree symbolic links that refer to files */
/* outside the sysblk.httproot tree are not supported. */
/* */
/* */
/* Jan Jaeger - 28/03/2002 */
@@ -52,11 +52,12 @@ static CONTYP mime_types[] = {
int html_include(WEBBLK *webblk, char *filename)
{
FILE *inclfile;
char fullname[1024] = HTTP_ROOT;
char fullname[1024];
char buffer[1024];
int ret;
inclfile = fopen(strcat(fullname,filename),"r");
strncpy(fullname,sysblk.httproot,1024);
inclfile = fopen(strncat(fullname,filename,1024),"r");
if (!inclfile)
{
@@ -280,7 +281,7 @@ static void http_verify_path(WEBBLK *webblk, char *path)
char resolved_path[1024];
int i;
realpath(HTTP_ROOT,resolved_base); strcat(resolved_base,"/");
realpath(sysblk.httproot,resolved_base); strncat(resolved_base,"/",1024);
realpath(path,resolved_path);
for (i = 0; path[i]; i++)
@@ -358,11 +359,12 @@ static void http_download(WEBBLK *webblk, char *filename)
char tbuf[80];
int fd, length;
char *filetype;
char fullname[1024] = HTTP_ROOT;
char fullname[1024];
struct stat st;
CONTYP *mime_type = mime_types;
strcat(fullname,filename);
strncpy(fullname,sysblk.httproot,1024);
strncat(fullname,filename,1024);
http_verify_path(webblk,fullname);
+1
View File
@@ -230,6 +230,7 @@ TID paneltid;
#if defined(OPTION_HTTP_SERVER)
if(sysblk.httpport) {
/* Start the http server connection thread */
if (!sysblk.httproot) sysblk.httproot = HTTP_ROOT;
if ( create_thread (&sysblk.httptid, &sysblk.detattr,
http_server, NULL) )
{