Date: Thu, 2 May 2019 12:17:25 -0500 From: Alan Amesbury <amesbury@oitsec.umn.edu> To: Jim Thompson <jim@netgate.com> Cc: FreeBSD Hackers <freebsd-hackers@freebsd.org> Subject: Re: SIGPIPE from ssh-keyscan [patch] Message-ID: <0FE5F47E-99EF-4B64-B6AD-E2E6A1754634@oitsec.umn.edu> In-Reply-To: <144583E1-828D-4450-99B0-4FBF7FC35B26@netgate.com> References: <047FD22B-04FB-46EB-96D1-BF6E03080F9F@oitsec.umn.edu> <144583E1-828D-4450-99B0-4FBF7FC35B26@netgate.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On May 1, 2019, at 20:07 , Jim Thompson <jim@netgate.com> wrote: > The remote closed the session for some reason before ssh-keyscan wrote = the greening ("SSH-2.0-OpenSSH-keyscan\r\n=E2=80=9D), so you got SIGPIPE = and ERRNO =3D 32 back from the write call. >=20 > Arguably the right thing occurred here, with the exception that it = killed your ssh-keyscan process. >=20 > So perhaps instead of ignoring the signal, you should find out why the = remote is exiting before the local can send its greeting. I can't count on the remote side doing the write thing (yes, pun = intended), as not all of the apparent "SSH servers" I attempt to obtain = keys from are under my direct control. For me it would be better if = ssh-keyscan were simply more robust in handling unexpected input. > Otherwise, it=E2=80=99s a bit less heavy-handed to=20 >=20 > Int set =3D 1; > setsockopt(sd, SOL_SOCKET, SO_NOSIGPIPE, (void *)&set, sizeof(int)); >=20 > Where sd is the descriptor in question (16 in your example below). >=20 > But other parts of ssh-keyscan seem to want to know that EPIPE has = occurred, so neither is the correction solution here. That's why I asked where this was a sane plan. Again, I'm out of my = depth here, and my solution reflects that. --=20 Alan
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0FE5F47E-99EF-4B64-B6AD-E2E6A1754634>