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));