From owner-freebsd-bugs Wed Jan 12 12:40:20 2000 Delivered-To: freebsd-bugs@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.ORG [204.216.27.21]) by hub.freebsd.org (Postfix) with ESMTP id 4B2921507E for ; Wed, 12 Jan 2000 12:40:01 -0800 (PST) (envelope-from gnats@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.9.3/8.9.2) id MAA87538; Wed, 12 Jan 2000 12:40:01 -0800 (PST) (envelope-from gnats@FreeBSD.org) Received: from peace.mahoroba.org (peace.calm.imasy.or.jp [202.227.26.34]) by hub.freebsd.org (Postfix) with ESMTP id 1B12414E9B for ; Wed, 12 Jan 2000 12:36:49 -0800 (PST) (envelope-from ume@mahoroba.org) Received: (from ume@localhost) by peace.mahoroba.org (8.10.0.Beta10/3.7W-peace) id e0CKa5J60957; Thu, 13 Jan 2000 05:36:05 +0900 (JST) (envelope-from ume) Message-Id: <200001122036.e0CKa5J60957@peace.mahoroba.org> Date: Thu, 13 Jan 2000 05:36:05 +0900 (JST) From: Hajimu UMEMOTO Reply-To: ume@mahoroba.org To: FreeBSD-gnats-submit@freebsd.org X-Send-Pr-Version: 3.2 Subject: bin/16086: Inetd internal IDENT is not work well. Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org >Number: 16086 >Category: bin >Synopsis: Inetd internal IDENT is not work well. >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Jan 12 12:40:00 PST 2000 >Closed-Date: >Last-Modified: >Originator: Hajimu UMEMOTO >Release: FreeBSD 4.0-CURRENT i386 >Organization: Internet Mutual Aid Society, YOKOHAMA >Environment: 3.4-RELEASE or later >Description: When lookup IDENT, inetd internal IDENT often reply ERROR. It seems OK with sendmail's query or libident's query. But, it seems that inetd cannot treat libwrap's query. It is because, libwrap's query is often separated by 2 packets. >How-To-Repeat: IDENT lookup by libwrap. >Fix: Please apply following patch: --- usr.sbin/inetd/builtins.c.orig Sat Aug 28 10:16:34 1999 +++ usr.sbin/inetd/builtins.c Thu Jan 13 03:45:58 2000 @@ -345,6 +345,7 @@ char buf[BUFSIZE], *cp = NULL, *p, **av, *osname = NULL; int len, c, fflag = 0, nflag = 0, rflag = 0, argc = 0; u_short lport, fport; + int bufsiz = sizeof(buf) - 1, size = 0; inetd_setproctitle(sep->se_service, s); /* @@ -411,18 +412,22 @@ * "local_port , foreign_port\r\n" (with local being the * server's port and foreign being the client's.) */ - FD_ZERO(&fdset); - FD_SET(s, &fdset); - if (select(s + 1, &fdset, NULL, NULL, &tv) == -1) - iderror(0, 0, s, errno); - if (ioctl(s, FIONREAD, &len) == -1) - iderror(0, 0, s, errno); - if (len >= sizeof(buf)) - len = sizeof(buf) - 1; - len = read(s, buf, len); - if (len == -1) - iderror(0, 0, s, errno); - buf[len] = '\0'; + do { + FD_ZERO(&fdset); + FD_SET(s, &fdset); + if (select(s + 1, &fdset, NULL, NULL, &tv) == -1) + iderror(0, 0, s, errno); + if (ioctl(s, FIONREAD, &len) == -1) + iderror(0, 0, s, errno); + if (len > bufsiz) + len = bufsiz; + len = read(s, &buf[size], len); + if (len == -1) + iderror(0, 0, s, errno); + bufsiz -= len; + size += len; + } while ((size < 1 || buf[size - 1] != '\n') && bufsiz > 0); + buf[size] = '\0'; if (sscanf(buf, "%hu , %hu", &lport, &fport) != 2) iderror(0, 0, s, 0); if (!rflag) /* Send HIDDEN-USER immediately if not "real" */ >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message