From 4901f2c10b4393fd4407c8feb022c3415ab323c7 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Fri, 3 Feb 2017 14:22:03 +1100 Subject: [PATCH] 4567. [port] Call getprotobyname and getservbyname prior to calling chroot so that shared libraries get loaded. [RT #44537] (cherry picked from commit c550e75ade4ceb4ece96f660292799519a5c3183) --- CHANGES | 3 +++ lib/isc/unix/dir.c | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/CHANGES b/CHANGES index 791302321a..fa18aabc25 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +4567. [port] Call getprotobyname and getservbyname prior to calling + chroot so that shared libraries get loaded. [RT #44537] + 4565. [cleanup] The inline macro versions of isc_buffer_put*() did not implement automatic buffer reallocation. [RT #44216] diff --git a/lib/isc/unix/dir.c b/lib/isc/unix/dir.c index 3fbfcaf4c2..29a587ac2c 100644 --- a/lib/isc/unix/dir.c +++ b/lib/isc/unix/dir.c @@ -22,6 +22,7 @@ #include #include +#include #include #include @@ -163,6 +164,14 @@ isc_dir_chroot(const char *dirname) { REQUIRE(dirname != NULL); #ifdef HAVE_CHROOT + /* + * Try to use getservbyname and getprotobyname before chroot. + * If WKS records are used in a zone under chroot, Name Service Switch + * may fail to load library in chroot. + * Do not report errors if it fails, we do not need any result now. + */ + getprotobyname("udp") && getservbyname("domain", "udp"); + if (chroot(dirname) < 0 || chdir("/") < 0) return (isc__errno2result(errno));