Mercurial > dovecot > original-hg > dovecot-1.2
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);