summaryrefslogtreecommitdiffstats
path: root/os
diff options
context:
space:
mode:
Diffstat (limited to 'os')
-rw-r--r--os/beos/os.c9
-rw-r--r--os/bs2000/os.c9
-rw-r--r--os/os2/util_os2.c8
-rw-r--r--os/tpf/os.c8
-rw-r--r--os/unix/Makefile.in2
-rw-r--r--os/unix/unixd.c15
-rw-r--r--os/unix/unixd.h2
7 files changed, 51 insertions, 2 deletions
diff --git a/os/beos/os.c b/os/beos/os.c
index 9b2f647dcf..b040432a1f 100644
--- a/os/beos/os.c
+++ b/os/beos/os.c
@@ -63,8 +63,17 @@
#include "ap_config.h"
#include "os.h"
+#include "httpd.h"
int ap_os_is_path_absolute(const char *file)
{
return file[0] == '/';
}
+
+AP_DECLARE(apr_status_t) ap_os_create_privileged_process(const request_rec *r,
+ apr_proc_t *newproc, const char *progname,
+ char *const *args, char **env,
+ apr_procattr_t *attr, apr_pool_t *p)
+{
+ return apr_create_process(newproc, progname, args, env, attr, p);
+}
diff --git a/os/bs2000/os.c b/os/bs2000/os.c
index 2ad3a49669..72f7664057 100644
--- a/os/bs2000/os.c
+++ b/os/bs2000/os.c
@@ -64,6 +64,7 @@
#include "httpd.h"
#include "http_core.h"
#include "os.h"
+#include "httpd.h"
/* Check the Content-Type to decide if conversion is needed */
int ap_checkconv(struct request_rec *r)
@@ -102,3 +103,11 @@ int ap_checkconv(struct request_rec *r)
return convert_to_ascii;
}
+AP_DECLARE(apr_status_t) ap_os_create_privileged_process(const request_rec *r,
+ apr_proc_t *newproc, const char *progname,
+ char *const *args, char **env,
+ apr_procattr_t *attr, apr_pool_t *p)
+{
+ return apr_create_process(newproc, progname, args, env, attr, p);
+}
+
diff --git a/os/os2/util_os2.c b/os/os2/util_os2.c
index 8d0a5014b5..637eca4642 100644
--- a/os/os2/util_os2.c
+++ b/os/os2/util_os2.c
@@ -170,3 +170,11 @@ char *ap_os_canonical_filename(apr_pool_t *pPool, const char *szFile)
strlwr(szCanonicalFile);
return szCanonicalFile;
}
+
+AP_DECLARE(apr_status_t) ap_os_create_privileged_process(const request_rec *r,
+ apr_proc_t *newproc, const char *progname,
+ char *const *args, char **env,
+ apr_procattr_t *attr, apr_pool_t *p)
+{
+ return apr_create_process(newproc, progname, args, env, attr, p);
+}
diff --git a/os/tpf/os.c b/os/tpf/os.c
index 3833d9957b..a8af4bdaea 100644
--- a/os/tpf/os.c
+++ b/os/tpf/os.c
@@ -412,4 +412,10 @@ void os_tpf_child(APACHE_TPF_INPUT *input_parms) {
ap_restart_time = input_parms->restart_time;
}
-
+AP_DECLARE(apr_status_t) ap_os_create_privileged_process(const request_rec *r,
+ apr_proc_t *newproc, const char *progname,
+ char *const *args, char **env,
+ apr_procattr_t *attr, apr_pool_t *p)
+{
+ return apr_create_process(newproc, progname, args, env, attr, p);
+}
diff --git a/os/unix/Makefile.in b/os/unix/Makefile.in
index 63596967db..521f298464 100644
--- a/os/unix/Makefile.in
+++ b/os/unix/Makefile.in
@@ -1,5 +1,5 @@
LTLIBRARY_NAME = libos.la
-LTLIBRARY_SOURCES = os-inline.c unixd.c
+LTLIBRARY_SOURCES = os-inline.c unixd.c suexec.c
include $(top_srcdir)/build/ltlib.mk
diff --git a/os/unix/unixd.c b/os/unix/unixd.c
index caa87fe45d..d70b3fd5cc 100644
--- a/os/unix/unixd.c
+++ b/os/unix/unixd.c
@@ -68,6 +68,8 @@
#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
#endif
+/* XXX */
+#include <sys/stat.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -214,9 +216,22 @@ const char *unixd_set_group(cmd_parms *cmd, void *dummy, const char *arg)
void unixd_pre_config(apr_pool_t *ptemp)
{
+ apr_finfo_t wrapper;
+
unixd_config.user_name = DEFAULT_USER;
unixd_config.user_id = ap_uname2id(DEFAULT_USER);
unixd_config.group_id = ap_gname2id(DEFAULT_GROUP);
+
+ /* Check for suexec */
+ unixd_config.suexec_enabled = 0;
+ if ((apr_stat(&wrapper, SUEXEC_BIN, ptemp)) != APR_SUCCESS) {
+ return;
+ }
+
+ /* XXX - apr_stat is incapable of checking suid bits (grumble) */
+ /* if ((wrapper.filetype & S_ISUID) && wrapper.user == 0) { */
+ unixd_config.suexec_enabled = 1;
+ /* } */
}
#ifdef NEED_AP_SYS_SIGLIST
diff --git a/os/unix/unixd.h b/os/unix/unixd.h
index 0fdfcc2715..d8ac46f87b 100644
--- a/os/unix/unixd.h
+++ b/os/unix/unixd.h
@@ -60,6 +60,7 @@
#define UNIXD_H
#include "httpd.h"
+#include "http_config.h"
#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
#endif
@@ -80,6 +81,7 @@ typedef struct {
const char *user_name;
uid_t user_id;
gid_t group_id;
+ int suexec_enabled;
} unixd_config_rec;
extern unixd_config_rec unixd_config;