Subject: kern/7836: gethostname fails with small buffer
To: None <gnats-bugs@gnats.netbsd.org>
From: None <simonb@netbsd.org>
List: netbsd-bugs
Date: 06/22/1999 20:23:46
>Number:         7836
>Category:       kern
>Synopsis:       gethostname fails with small buffer
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    kern-bug-people (Kernel Bug People)
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Jun 22 20:05:01 1999
>Last-Modified:
>Originator:     gethostname fails with small buffer
>Organization:
	TNF
>Release:        NetBSD 1.4C, 9th June 1999
>Environment:
System: NetBSD mona 1.4C NetBSD 1.4C (MONA) #149: Wed Jun 9 11:30:29 EST 1999
simonb@mona:/NetBSD/src/sys/arch/pmax/compile/MONA pmax


>Description:
	gethostname() fails with ENOMEM if the buffer provided is
	too small, due to gethostname() being implemented with
	sysctl().  Not only is this in conflict with the man page for
	gethostname(), it also doesn't match what the rest of the known
	UNIX world seems to do.

>How-To-Repeat:
	Compile up an old game and watch the high score table fail
	dismally after killing all the zombies.  Or just try the
	following:

	mona:/tmp 132> cat zz.c
	main()
	{
		char buf[XX];

		if (gethostname(buf, XX) == 0)
			printf("Hostname: %s\n", buf);
		else
			perror("gethostname");
		exit(0);
	}
	mona:/tmp 133> cc -DXX=5 zz.c -o zz
	mona:/tmp 134> ./zz 
	Hostname: mona
	mona:/tmp 135> cc -DXX=3 zz.c -o zz
	mona:/tmp 136> ./zz
	gethostname: Cannot allocate memory


>Fix:
	None given.  It'd be real easy to change the manpage to say
	"the buffer must be long enough to hold the hostname.", but I
	don't think this is the right answer.  Maybe sysctl_string()
	in sys/kern/kern_sysctl.c could gain a flag saying it's OK
	to truncate a return string?

	Is gethostname() in any standards?
>Audit-Trail:
>Unformatted: