]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
If core dump limit is 0, add "core dumps disabled" to startup log line.
authorTimo Sirainen <tss@iki.fi>
Mon, 23 Jun 2008 04:28:07 +0000 (07:28 +0300)
committerTimo Sirainen <tss@iki.fi>
Mon, 23 Jun 2008 04:28:07 +0000 (07:28 +0300)
--HG--
branch : HEAD

configure.in
src/lib/restrict-process-size.c
src/lib/restrict-process-size.h
src/master/main.c

index 2eae3f2526b5fe5b140a75a2cac9c479e21bfb4e..1a50d6d88b29d91cc9ee55fe3f0552c60aaad8d8 100644 (file)
@@ -1065,6 +1065,18 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
   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([
index 5f29938536e5a305dcc361237fe408730e091f1d..1ec60748a3bdff76564eff0bc9006ec0a89eda25 100644 (file)
@@ -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 @@ void restrict_fd_limit(unsigned int count)
                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
+}
index 174a5f18e2ca10d169955ef5dbdca793256ed39b..1e60a69cfa4b719542e28c718ddc7be5414eb9a6 100644 (file)
@@ -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
index 75e07271a4bd3d37027164f1595dfa5c89e2ef02..dca11a24bc27b63fe3d7b4101defa7c2542e0621 100644 (file)
@@ -234,6 +234,17 @@ static void create_pid_file(const char *path)
        (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 @@ static void main_init(bool log_error)
                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);