From owner-freebsd-bugs@FreeBSD.ORG Fri May 6 18:20:08 2005 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4353916A4D4 for ; Fri, 6 May 2005 18:20:08 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 2C7FA43D60 for ; Fri, 6 May 2005 18:20:08 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.3/8.13.3) with ESMTP id j46IK7eg028640 for ; Fri, 6 May 2005 18:20:07 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.3/8.13.1/Submit) id j46IK7Kr028639; Fri, 6 May 2005 18:20:07 GMT (envelope-from gnats) Date: Fri, 6 May 2005 18:20:07 GMT Message-Id: <200505061820.j46IK7Kr028639@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Bruce Evans Subject: Re: bin/80687: [patch] Missing NULL termination after strncpy() in login(1) X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Bruce Evans List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 May 2005 18:20:08 -0000 The following reply was made to PR bin/80687; it has been noted by GNATS. From: Bruce Evans To: Przemyslaw Frasunek Cc: FreeBSD-gnats-submit@FreeBSD.org, freebsd-bugs@FreeBSD.org Subject: Re: bin/80687: [patch] Missing NULL termination after strncpy() in login(1) Date: Sat, 7 May 2005 04:18:34 +1000 (EST) On Fri, 6 May 2005, Przemyslaw Frasunek wrote: >> Description: > Similar to bin/80661 >> How-To-Repeat: > N/A >> Fix: > --- usr.bin/login/login.c.old Fri May 6 11:20:19 2005 > +++ usr.bin/login/login.c Fri May 6 11:20:36 2005 > @@ -512,10 +512,10 @@ > /* Nothing else left to fail -- really log in. */ > memset((void *)&utmp, 0, sizeof(utmp)); > (void)time(&utmp.ut_time); > - (void)strncpy(utmp.ut_name, username, sizeof(utmp.ut_name)); > + (void)strlcpy(utmp.ut_name, username, sizeof(utmp.ut_name)); > if (hostname) > - (void)strncpy(utmp.ut_host, hostname, sizeof(utmp.ut_host)); > - (void)strncpy(utmp.ut_line, tty, sizeof(utmp.ut_line)); > + (void)strlcpy(utmp.ut_host, hostname, sizeof(utmp.ut_host)); > + (void)strlcpy(utmp.ut_line, tty, sizeof(utmp.ut_line)); > login(&utmp); > > dolastlog(quietlog); The utmp names are apparently not strings, so teminating them just breaks recording of some names that work now. Everything (?) uses strn*() to access these names, so non-strings in them work. I logged in as a user with a 16-char username and least the following programs displayed it correctly: w who last ps The bug seems to be just that the non-stringness of the names is not documented. Bruce