diff --git a/CHANGES b/CHANGES index 6cabbd86d7..6701087549 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,9 @@ +2292. [bug] Log if the working directory is not writable. + [RT #17312] + +2291. [bug] PR_SET_DUMPABLE may be set too late. Also report + failure to set PR_SET_DUMPABLE. [RT #17312] + 2290. [bug] Let AD in the query signal that the client wants AD set in the response. [RT #17301] diff --git a/bin/named/server.c b/bin/named/server.c index 09496eacf3..86f7529881 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -15,13 +15,14 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: server.c,v 1.495 2007/12/14 04:01:20 marka Exp $ */ +/* $Id: server.c,v 1.496 2008/01/09 04:48:33 marka Exp $ */ /*! \file */ #include #include +#include #include #include @@ -2934,6 +2935,15 @@ load_configuration(const char *filename, ns_server_t *server, } CHECK(result); + /* + * Check that the working directory is writable. + */ + if (access(".", W_OK) != 0) { + isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, + NS_LOGMODULE_SERVER, ISC_LOG_ERROR, + "the working directory is not writable"); + } + /* * Check the validity of the configuration. */ diff --git a/bin/named/unix/os.c b/bin/named/unix/os.c index 206deba44f..38652e1210 100644 --- a/bin/named/unix/os.c +++ b/bin/named/unix/os.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: os.c,v 1.79 2007/06/19 23:46:59 tbox Exp $ */ +/* $Id: os.c,v 1.80 2008/01/09 04:48:33 marka Exp $ */ /*! \file */ @@ -496,15 +496,19 @@ ns_os_changeuser(void) { ns_main_earlyfatal("setuid(): %s", strbuf); } -#if defined(HAVE_LINUX_CAPABILITY_H) && !defined(HAVE_LINUXTHREADS) - linux_minprivs(); -#endif #if defined(HAVE_SYS_PRCTL_H) && defined(PR_SET_DUMPABLE) /* * Restore the ability of named to drop core after the setuid() * call has disabled it. */ - prctl(PR_SET_DUMPABLE,1,0,0,0); + if (prctl(PR_SET_DUMPABLE,1,0,0,0) < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); + ns_main_earlywarning("prctl(PR_SET_DUMPABLE) failed: %s", + strbuf); + } +#endif +#if defined(HAVE_LINUX_CAPABILITY_H) && !defined(HAVE_LINUXTHREADS) + linux_minprivs(); #endif }