summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SConstruct3
-rw-r--r--configure.ac4
-rw-r--r--src/CMakeLists.txt5
-rw-r--r--src/config.h.cmake2
-rw-r--r--src/meson.build5
-rw-r--r--src/server.c11
6 files changed, 30 insertions, 0 deletions
diff --git a/SConstruct b/SConstruct
index 42232367..4b9d2718 100644
--- a/SConstruct
+++ b/SConstruct
@@ -463,6 +463,9 @@ if 1:
])
autoconf.haveFunc('getentropy', 'sys/random.h')
autoconf.haveFunc('getrandom', 'linux/random.h')
+ if re.compile("sunos|solaris").search(env['PLATFORM']):
+ autoconf.haveCHeader('priv.h')
+ autoconf.haveFunc('setpflags', 'priv.h')
autoconf.haveTypes(Split('pid_t size_t off_t'))
diff --git a/configure.ac b/configure.ac
index d139ae51..65e12703 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1472,6 +1472,10 @@ AC_CHECK_FUNCS([\
])
AC_CHECK_HEADERS([sys/random.h], [AC_CHECK_FUNCS([getentropy])])
AC_CHECK_HEADERS([linux/random.h], [AC_CHECK_FUNCS([getrandom])])
+case "$host_os" in
+*sunos*|*solaris* ) AC_CHECK_HEADERS([priv.h], [AC_CHECK_FUNCS([setpflags])]) ;;
+* ) ;;
+esac
AC_MSG_NOTICE([----------------------------------------])
AC_MSG_CHECKING([if weak symbols are supported])
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index cc94bf37..dc81096b 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -155,6 +155,11 @@ set(CMAKE_EXTRA_INCLUDE_FILES time.h)
check_function_exists(timegm HAVE_TIMEGM)
set(CMAKE_EXTRA_INCLUDE_FILES)
+if(CMAKE_SYSTEM_NAME MATCHES "SunOS")
+check_include_files(priv.h HAVE_PRIV_H)
+check_function_exists(setpflags HAVE_SETPFLAGS)
+endif()
+
check_type_size(long SIZEOF_LONG)
check_type_size(off_t SIZEOF_OFF_T)
diff --git a/src/config.h.cmake b/src/config.h.cmake
index 09dfcf4b..ef9a2560 100644
--- a/src/config.h.cmake
+++ b/src/config.h.cmake
@@ -20,6 +20,7 @@
#cmakedefine HAVE_MALLOC_H
#cmakedefine HAVE_POLL_H
#cmakedefine HAVE_PORT_H
+#cmakedefine HAVE_PRIV_H
#cmakedefine HAVE_PWD_H
#cmakedefine HAVE_STDINT_H
#cmakedefine HAVE_STDLIB_H
@@ -186,6 +187,7 @@
#cmakedefine HAVE_SEND_FILE
#cmakedefine HAVE_SENDFILE64
#cmakedefine HAVE_SENDFILEV
+#cmakedefine HAVE_SETPFLAGS
#cmakedefine HAVE_SIGACTION
#cmakedefine HAVE_SIGNAL
#cmakedefine HAVE_SIGTIMEDWAIT
diff --git a/src/meson.build b/src/meson.build
index 034c7452..bfe6a29c 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -118,6 +118,11 @@ if conf_data.get('HAVE_LINUX_RANDOM_H')
))
endif
+if target_machine.system() == 'sunos'
+conf_data.set('HAVE_PRIV_H', compiler.has_header('priv.h'))
+conf_data.set('HAVE_SETPFLAGS', compiler.has_function('setpflags', args: defs))
+endif
+
conf_data.set('SIZEOF_LONG', compiler.sizeof('long', args: defs))
conf_data.set('SIZEOF_OFF_T', compiler.sizeof('off_t', args: defs))
diff --git a/src/server.c b/src/server.c
index 89870115..cc394f84 100644
--- a/src/server.c
+++ b/src/server.c
@@ -68,6 +68,9 @@ static const buffer default_server_tag = { CONST_STR_LEN(PACKAGE_DESC)+1, 0 };
#ifdef HAVE_SYS_PROCCTL_H
# include <sys/procctl.h>
#endif
+#ifdef HAVE_PRIV_H
+# include <priv.h>
+#endif
#ifdef HAVE_MALLOC_H
#ifndef LIGHTTPD_STATIC
@@ -1474,6 +1477,14 @@ static int server_main_setup (server * const srv, int argc, char **argv) {
int dumpable = PROC_TRACE_CTL_ENABLE;
procctl(P_PID, 0, PROC_TRACE_CTL, &dumpable);
}
+#elif defined(HAVE_SETPFLAGS) && defined(__PROC_PROTECT)
+ /**
+ * setpflags seems uniquely a solaris/illumos feature
+ * but just taking extra precautions clearing __PROC_PROTECT option
+ */
+ if (srv->srvconf.enable_cores) {
+ setpflags(__PROC_PROTECT, 0);
+ }
#endif
}