From owner-freebsd-bugs@FreeBSD.ORG Mon Dec 1 01:10:01 2008 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 73E441065675 for ; Mon, 1 Dec 2008 01:10:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 5287C8FC1B for ; Mon, 1 Dec 2008 01:10:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.3/8.14.3) with ESMTP id mB11A15K061548 for ; Mon, 1 Dec 2008 01:10:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.3/8.14.3/Submit) id mB11A1jP061547; Mon, 1 Dec 2008 01:10:01 GMT (envelope-from gnats) Resent-Date: Mon, 1 Dec 2008 01:10:01 GMT Resent-Message-Id: <200812010110.mB11A1jP061547@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Ighighi Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2510F1065677 for ; Mon, 1 Dec 2008 01:00:22 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21]) by mx1.freebsd.org (Postfix) with ESMTP id 12B978FC1A for ; Mon, 1 Dec 2008 01:00:22 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.3/8.14.3) with ESMTP id mB110LEf008255 for ; Mon, 1 Dec 2008 01:00:21 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.3/8.14.3/Submit) id mB110Lrw008252; Mon, 1 Dec 2008 01:00:21 GMT (envelope-from nobody) Message-Id: <200812010100.mB110Lrw008252@www.freebsd.org> Date: Mon, 1 Dec 2008 01:00:21 GMT From: Ighighi To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: bin/129318: [patch]: sockstat(1) not usable in shell scripts (no white space between entries) X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Dec 2008 01:10:01 -0000 >Number: 129318 >Category: bin >Synopsis: [patch]: sockstat(1) not usable in shell scripts (no white space between entries) >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Dec 01 01:10:00 UTC 2008 >Closed-Date: >Last-Modified: >Originator: Ighighi >Release: RELENG_6 >Organization: >Environment: 6.4-PRERELEASE FreeBSD 6.4-PRERELEASE #0: Mon Nov 17 07:38:05 VET 2008 >Description: Currently, sockstat(1) isn't usable in shell scripts to retrieve individual entries via, e.g, awk(1) because there's no provision for separating entries with a white space. >How-To-Repeat: $ sockstat -4l USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS root sendmail 911 3 tcp4 127.0.0.1:25 *:* bind named 722 20 tcp4 127.0.0.1:53 *:* bind named 722 21 tcp4 127.0.0.1:953 *:* bind named 722 512udp4 127.0.0.1:53 *:* bind named 722 513udp4 *:64755 *:* # Note the last 2 lines... >Fix: The attached patch (to version 1.19 of sockstat.c in HEAD) gives the following output: USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS root sendmail 911 3 tcp4 127.0.0.1:25 *:* bind named 722 20 tcp4 127.0.0.1:53 *:* bind named 722 21 tcp4 127.0.0.1:953 *:* bind named 722 512 udp4 127.0.0.1:53 *:* bind named 722 513 udp4 *:64755 *:* The vulnerable entries seem to me to be USER, PID, FD and PROTO Patch attached with submission follows: --- src/usr.bin/sockstat/sockstat.c.orig 2008-05-19 07:05:11.000000000 -0430 +++ src/usr.bin/sockstat/sockstat.c 2008-11-30 20:09:46.471087728 -0430 @@ -596,18 +596,18 @@ display(void) continue; pos = 0; if ((pwd = getpwuid(xf->xf_uid)) == NULL) - pos += xprintf("%lu", (u_long)xf->xf_uid); + pos += xprintf("%lu ", (u_long)xf->xf_uid); else - pos += xprintf("%s", pwd->pw_name); + pos += xprintf("%s ", pwd->pw_name); while (pos < 9) pos += xprintf(" "); pos += xprintf("%.10s", getprocname(xf->xf_pid)); while (pos < 20) pos += xprintf(" "); - pos += xprintf("%lu", (u_long)xf->xf_pid); + pos += xprintf("%lu ", (u_long)xf->xf_pid); while (pos < 26) pos += xprintf(" "); - pos += xprintf("%d", xf->xf_fd); + pos += xprintf("%d ", xf->xf_fd); while (pos < 29) pos += xprintf(" "); pos += xprintf("%s", s->protoname); @@ -615,6 +615,7 @@ display(void) pos += xprintf("4"); if (s->vflag & INP_IPV6) pos += xprintf("6"); + pos += xprintf(" "); while (pos < 36) pos += xprintf(" "); switch (s->family) { >Release-Note: >Audit-Trail: >Unformatted: