git/list[1] front-page[2] threads[3] people[4] search[5] about
 

RE: [PATCH] xgethostname: handle long hostnames

From
DTDavid Turner <david.turner@twosigma.com>
Date
Apr 13, 2017, 22:29 UTC
Message-ID
<b53099edc57947329f826f05de5303af@exmbdft7.ad.twosigma.com>
In-Reply-To
<20170413220524.GE10084@aiede.mtv.corp.google.com>
Show 42 quoted lines
> -----Original Message-----
> From: Jonathan Nieder [mailto:jrnieder@gmail.com]
> Sent: Thursday, April 13, 2017 6:05 PM
> To: David Turner <David.Turner@twosigma.com>
> Cc: git@vger.kernel.org
> Subject: Re: [PATCH] xgethostname: handle long hostnames
> 
> Hi,
> 
> David Turner wrote:
> 
> > If the full hostname doesn't fit in the buffer supplied to
> > gethostname, POSIX does not specify whether the buffer will be
> > null-terminated, so to be safe, we should do it ourselves.
> [...]
> > +++ b/wrapper.c
> > @@ -655,3 +655,16 @@ void sleep_millisec(int millisec)  {
> >  	poll(NULL, 0, millisec);
> >  }
> > +
> > +int xgethostname(char *buf, size_t len) {
> > +	/*
> > +	 * If the full hostname doesn't fit in buf, POSIX does not
> > +	 * specify whether the buffer will be null-terminated, so to
> > +	 * be safe, do it ourselves.
> > +	 */
> > +	int ret = gethostname(buf, len);
> > +	if (!ret)
> > +		buf[len - 1] = 0;
> > +	return ret;
> 
> I wonder if after null-terminating we would want to report this as an error,
> instead of silently using a truncated result.  I.e. something like
> 
> > +	if (!ret)
> > +		buf[len - 1] = 0;
> > +	if (strlen(buf) >= len - 1) {
> > +		errno = ENAMETOOLONG;
> > +		return -1;
> > +	}
>
> (or EINVAL --- either is equally descriptive).

Looking at the users of this function, I think most would be happier with a truncated buffer than an error: gc.c: used to see if we are the same machine as the machine that locked the repo. Unlikely that two machines have hostnames that differ only in the 256th-or-above character. fetch-pack.c, receive-pack.c: similar to gc.c; the hostname is a note in the .keep file Ident.c: used to make up a fake email address. On my laptop, gethostname returns "corey" (no domain part), so the email address is not likely to be valid anyway.

> Also POSIX requires that hostnames are <= 255 bytes.  Maybe we can force the
> buffer to be large enough.
That is now how I read it.  I read the limit as HOST_NAME_MAX, which has a *minimum* value of 255, but which might be larger.
The existing hostname buffers are 128, 256, and 1024 bytes, so they're pretty arbitrary.  
Previous: Jonathan NiederNext: René Scharfe
Message 4 of 5 in “xgethostname: handle long hostnames”
  1. xgethostname: handle long hostnamesDavid Turner, Apr 13, 2017
  2. Jeff KingApr 13, 2017
  3. Jonathan NiederApr 13, 2017
  4. David TurnerApr 13, 2017
  5. René ScharfeApr 13, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.