From 8a180de1000fdcd994a9a5c69bb3a6c1ee3029cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20B=C3=BChler?= Date: Wed, 7 Oct 2009 16:26:37 +0200 Subject: [PATCH] fix limits: call setrlimit in the child --- src/angel/angel_proc.c | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/angel/angel_proc.c b/src/angel/angel_proc.c index 572cda4..0611ef6 100644 --- a/src/angel/angel_proc.c +++ b/src/angel/angel_proc.c @@ -157,6 +157,24 @@ liProc* li_proc_new(liServer *srv, gchar **args, gchar **env, uid_t uid, gid_t g setsid(); +#ifdef HAVE_GETRLIMIT + { + struct rlimit rlim; + if (rlim_core >= 0) { + rlim.rlim_cur = rlim.rlim_max = ((guint64) rlim_core >= RLIM_INFINITY) ? RLIM_INFINITY : (guint64) rlim_core; + if (0 != setrlimit(RLIMIT_CORE, &rlim)) { + ERROR(srv, "couldn't set 'max core file size': %s", g_strerror(errno)); + } + } + if (rlim_nofile >= 0) { + rlim.rlim_cur = rlim.rlim_max = ((guint64) rlim_nofile >= RLIM_INFINITY) ? RLIM_INFINITY : (guint64) rlim_nofile; + if (0 != setrlimit(RLIMIT_NOFILE, &rlim)) { + ERROR(srv, "couldn't set 'max filedescriptors': %s", g_strerror(errno)); + } + } + } +#endif + if (gid != (gid_t) -1) { setgid(gid); setgroups(0, NULL); @@ -183,23 +201,6 @@ liProc* li_proc_new(liServer *srv, gchar **args, gchar **env, uid_t uid, gid_t g li_proc_free(proc); return NULL; default: -#ifdef HAVE_GETRLIMIT - { - struct rlimit rlim; - if (rlim_core >= 0) { - rlim.rlim_cur = rlim.rlim_max = ((guint64) rlim_core >= RLIM_INFINITY) ? RLIM_INFINITY : (guint64) rlim_core; - if (0 != setrlimit(RLIMIT_CORE, &rlim)) { - ERROR(srv, "couldn't set 'max core file size': %s", g_strerror(errno)); - } - } - if (rlim_nofile >= 0) { - rlim.rlim_cur = rlim.rlim_max = ((guint64) rlim_nofile >= RLIM_INFINITY) ? RLIM_INFINITY : (guint64) rlim_nofile; - if (0 != setrlimit(RLIMIT_NOFILE, &rlim)) { - ERROR(srv, "couldn't set 'max filedescriptors': %s", g_strerror(errno)); - } - } - } -#endif proc->child_pid = pid; li_error_pipe_activate(proc->epipe); break;