nslookup issues

Mark Andrews marka at isc.org
Wed Sep 14 00:00:04 UTC 2022


The old socket code did something like

	int fd = socket(…);

	if (fd == -1) {
		error handling
	}

	if (fd < 100) {
		int newfd = fcntl(fd, F_DUPFD, 100);
		if (newfd == -1) {
			error handling
		}
		close(fd);
		fd = newfd;
	}

to leave file descriptor space for stdio to work in where the descriptors where stored in a (char).

> On 14 Sep 2022, at 09:06, Casey Deccio <casey at deccio.net> wrote:
> 
> 
>> On Sep 13, 2022, at 3:35 PM, Graham Clinch <g.clinch at lancaster.ac.uk> wrote:
>> 
>> I suspect nrpe-ng is closing stdin before launching nslookup.
>> 
>> 
>> With mac homebrew's build of bind 9.18.6 and a bit of shell redirection to close stdin, I get:
>> 
>> ---
>> $ /opt/homebrew/bin/nslookup -version
>> nslookup 9.18.6
>> 
>> $ /opt/homebrew/bin/nslookup example.net 0<&-
>> [... usual output snipped ...]
>> 
>> Assertion failed: (fd > STDERR_FILENO), function uv__close, file core.c, line 602.
>> Abort trap: 6
>> 
>> $ echo $?
>> 134
>> ---
>> 
> 
> Nice find!!
> 
>> This might count as a regression of sorts from the migration to libuv, as older nslookup doesn't fail in the same way:
> 
> Could be.  At the very least it's a behavioral difference, which affects some packages that depend on it.  I'll leave it to the BIND devs to determine if/how to handle it.
> 
>> (dig & delv are also affected in the same way)
>> 
>> The cmake group came across the same situation with libuv and open missing standard fds against /dev/null to compensate:
>> https://gitlab.kitware.com/cmake/cmake/-/merge_requests/3282
> 
> I've patched the code for nrpe_ng, and it works!
> 
> $ diff -u /usr/lib/python3/dist-packages/nrpe_ng/commands.py{.old,}
> --- /usr/lib/python3/dist-packages/nrpe_ng/commands.py.old	2017-08-08 13:05:02.000000000 -0600
> +++ /usr/lib/python3/dist-packages/nrpe_ng/commands.py	2022-09-13 17:00:36.767239885 -0600
> @@ -85,6 +85,7 @@
> 
>         proc = tornado.process.Subprocess(
>             run_args,
> +            stdin=subprocess.DEVNULL,
>             stdout=tornado.process.Subprocess.STREAM,
>             close_fds=True,
>             env=env)
> 
> I'll request that something get pushed upstream.  Many thanks for help tracking that down!
> 
> Casey
> -- 
> Visit https://lists.isc.org/mailman/listinfo/bind-users to unsubscribe from this list
> 
> ISC funds the development of this software with paid support subscriptions. Contact us at https://www.isc.org/contact/ for more information.
> 
> 
> bind-users mailing list
> bind-users at lists.isc.org
> https://lists.isc.org/mailman/listinfo/bind-users

-- 
Mark Andrews, ISC
1 Seymour St., Dundas Valley, NSW 2117, Australia
PHONE: +61 2 9871 4742              INTERNET: marka at isc.org



More information about the bind-users mailing list