AC_DEFINE(HAVE_RLIMIT_NPROC,, Define if you have RLIMIT_NPROC for setrlimit())
],[])
+dnl * Do we have RLIMIT_CORE?
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ #include <sys/types.h>
+ #include <sys/time.h>
+ #include <sys/resource.h>
+]], [[
+ struct rlimit r;
+ getrlimit(RLIMIT_CORE, &r);
+]])],[
+ AC_DEFINE(HAVE_RLIMIT_CORE,, Define if you have RLIMIT_CORE for getrlimit())
+],[])
+
dnl * Linux compatible mremap()
AC_MSG_CHECKING([Linux compatible mremap()])
AC_TRY_LINK([
#include "restrict-process-size.h"
#include <unistd.h>
-#include <sys/time.h>
-#ifdef HAVE_SYS_RESOURCE_H
-# include <sys/resource.h>
-#endif
void restrict_process_size(unsigned int size ATTR_UNUSED,
unsigned int max_processes ATTR_UNUSED)
i_fatal("setrlimit(RLIMIT_NOFILE, %u): %m", count);
#endif
}
+
+int restrict_get_core_limit(rlim_t *limit_r)
+{
+#ifdef HAVE_RLIMIT_CORE
+ struct rlimit rlim;
+
+ if (getrlimit(RLIMIT_CORE, &rlim) < 0) {
+ i_error("getrlimit(RLIMIT_CORE) failed: %m");
+ return -1;
+ }
+ *limit_r = rlim.rlim_cur;
+ return 0;
+#else
+ return -1;
+#endif
+}
#ifndef RESTRICT_PROCESS_SIZE_H
#define RESTRICT_PROCESS_SIZE_H
+#include <sys/time.h>
+#ifdef HAVE_SYS_RESOURCE_H
+# include <sys/resource.h>
+#endif
+
/* Restrict max. process size. The size is in megabytes, setting it to
(unsigned int)-1 sets it unlimited. */
void restrict_process_size(unsigned int size, unsigned int max_processes);
/* Set fd limit to count. */
void restrict_fd_limit(unsigned int count);
+/* Get the core dump size limit. Returns 0 if ok, -1 if lookup failed. */
+int restrict_get_core_limit(rlim_t *limit_r);
+
#endif
(void)close(fd);
}
+static void main_log_startup(void)
+{
+#define STARTUP_STRING PACKAGE_NAME" v"VERSION" starting up"
+ rlim_t core_limit;
+
+ if (restrict_get_core_limit(&core_limit) == 0 && core_limit == 0)
+ i_info(STARTUP_STRING" (core dumps disabled)");
+ else
+ i_info(STARTUP_STRING);
+}
+
static void main_init(bool log_error)
{
drop_capabilities();
i_error("This is Dovecot's error log");
i_fatal("This is Dovecot's fatal log");
}
- i_info(PACKAGE_NAME" v"VERSION" starting up");
+ main_log_startup();
lib_signals_init();
lib_signals_set_handler(SIGINT, TRUE, sig_die, NULL);