changeset 7946:aad49536db41 HEAD

If core dump limit is 0, add "core dumps disabled" to startup log line.
author Timo Sirainen <tss@iki.fi>
date Mon, 23 Jun 2008 07:28:07 +0300
parents 346fb1ff74ed
children cd2789afcb09
files configure.in src/lib/restrict-process-size.c src/lib/restrict-process-size.h src/master/main.c
diffstat 4 files changed, 48 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/configure.in	Mon Jun 23 06:52:55 2008 +0300
+++ b/configure.in	Mon Jun 23 07:28:07 2008 +0300
@@ -1065,6 +1065,18 @@
   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([
--- a/src/lib/restrict-process-size.c	Mon Jun 23 06:52:55 2008 +0300
+++ b/src/lib/restrict-process-size.c	Mon Jun 23 07:28:07 2008 +0300
@@ -4,10 +4,6 @@
 #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)
@@ -53,3 +49,19 @@
 		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
+}
--- a/src/lib/restrict-process-size.h	Mon Jun 23 06:52:55 2008 +0300
+++ b/src/lib/restrict-process-size.h	Mon Jun 23 07:28:07 2008 +0300
@@ -1,10 +1,18 @@
 #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
--- a/src/master/main.c	Mon Jun 23 06:52:55 2008 +0300
+++ b/src/master/main.c	Mon Jun 23 07:28:07 2008 +0300
@@ -234,6 +234,17 @@
 	(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();
@@ -255,7 +266,7 @@
 		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);