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

Re: [PATCH 08/13] ident: don't write fallback username into git_default_name

From
Jeff King <peff@peff.net>
Date
May 21, 2012, 06:31 UTC
Message-ID
<20120521063145.GB2077@sigill.intra.peff.net>
In-Reply-To
<7v7gw69rbz.fsf@alter.siamese.dyndns.org>
On Sun, May 20, 2012 at 07:54:24PM -0700, Junio C Hamano wrote:
> This step seems to break t/t4014-format-patch.sh; the last output when the
> test is run with "-i -v" indicates that Message-Id: and In-Reply-To: lines
> have "<long-hexdigits.long-decimal.git.name@host" without matching closing
> ">" on it.

I found the issue. The test failure is actually introduced by patch 06/13 (format-patch: use default email for generating message ids). But then it later gets fixed in 09/13 (drop length limitations on gecos-derived names and emails).

The problems turns out to be a latent bug hidden in add_mailname_host. It uses fgets to read from /etc/mailname, but never trims the trailing newline. So git_default_email ends up set to something like "peff@peff.net\n". Most of the time, this bug gets covered up by the normalization that happens in fmt_ident (where we remove cruft characters like newline). But in patch 6, we start using it directly instead of re-parsing the output of fmt_ident, introducing a noticeable bug.

I suspect there is also a bug in http-push.c, which directly uses git_default_email as part of the xml in the dav request. I don't know if it actually matters there or not. And of course this triggers only on systems with /etc/mailname, and only when you don't have user.email set. So it may just be that the combination of that and the fact that hardly anybody uses dumb http push has caused it to remain hidden.

The bug later ends up fixed in patch 9, because we replace fgets with strbuf_getline, which trims the newline for us. Placing the patch below anywhere before patch 6 fixes the issue (and then patch 9 would need to later remove the code).

It does raise a subtle issue, though: should we be trimming whitespace and other undesirable characters from git_default_email (or git_default_name)? We don't currently, and it ends up OK because the result typically is fed through fmt_ident, which cleans it up. But:

  1. We do look at the git_default_* variables for things like deciding
     whether the name is blank. So if your gecos field was " ", I think
     that would fool git into thinking it had something useful, and skip
     the IDENT_ERROR_ON_NO_NAME check, even though fmt_ident would
     produce an empty name.
  2. We don't always feed it through fmt_ident (the http-push.c callsite
     I mentioned above, and now patch 6 adds another one).
So I think my preference would be:
  - apply the patch below as 5.5/13
  - tweak patch 9 to remove the extra trimming
  - add a patch 14 to call strbuf_trim on the name and email buffers
    after reading them from system files.
-- >8 --
Subject: [PATCH] ident: trim trailing whitespace from /etc/mailname

Otherwise we will typically end up with an extra newline in our git_default_email. Most of the time this doesn't matter, as fmt_ident will skip it as cruft, but there is one code path that accesses it directly (in http-push.c:lock_remote).

Let's trim any trailing space or line termination when we read from /etc/mailname.

Signed-off-by: Jeff King <peff@peff.net>
---
 ident.c | 3 +++
 1 file changed, 3 insertions(+)
diff --git a/ident.c b/ident.c
index af92b2c..e797e36 100644
--- a/ident.c
+++ b/ident.c
@@ -57,6 +57,7 @@ static void copy_gecos(const struct passwd *w, char *name, size_t sz)
 static int add_mailname_host(char *buf, size_t len)
 {
 	FILE *mailname;
+	char *p;
 
 	mailname = fopen("/etc/mailname", "r");
 	if (!mailname) {
@@ -74,6 +75,8 @@ static int add_mailname_host(char *buf, size_t len)
 	}
 	/* success! */
 	fclose(mailname);
+	for (p = buf + strlen(buf) - 1; p >= buf && isspace(*p); p--)
+		*p = '\0';
 	return 0;
 }
 
-- 
1.7.10.1.19.g711d603
Previous: Junio C HamanoNext: Junio C Hamano
Message 16 of 45 in “ident cleanups and bugfixes”
  1. 0/13 ident cleanups and bugfixesJeff King, May 18, 2012
  2. 01/13 ident: split setup_ident into separate functionsJeff King, May 18, 2012
  3. 02/13 http-push: do not access git_default_email directlyJeff King, May 18, 2012
  4. 03/13 fmt-merge-msg: don't use static buffer in record_personJeff King, May 18, 2012
  5. 04/13 move identity config parsing to ident.cJeff King, May 18, 2012
  6. 05/13 move git_default_* variables to ident.cJeff King, May 18, 2012
  7. Junio C HamanoMay 21, 2012
  8. Jeff KingMay 21, 2012
  9. Jeff KingMay 21, 2012
  10. 06/13 format-patch: use default email for generating message idsJeff King, May 18, 2012
  11. Junio C HamanoMay 21, 2012
  12. Jeff KingMay 21, 2012
  13. 07/13 fmt_ident: drop IDENT_WARN_ON_NO_NAME codeJeff King, May 18, 2012
  14. 08/13 ident: don't write fallback username into git_default_nameJeff King, May 18, 2012
  15. Junio C HamanoMay 21, 2012
  16. Jeff KingMay 21, 2012
  17. Junio C HamanoMay 21, 2012
  18. 0/15 ident cleanups git_default_nameJeff King, May 21, 2012
  19. 01/15 ident: split setup_ident into separate functionsJeff King, May 21, 2012
  20. 02/15 http-push: do not access git_default_email directlyJeff King, May 21, 2012
  21. 03/15 fmt-merge-msg: don't use static buffer in record_personJeff King, May 21, 2012
  22. 04/15 move identity config parsing to ident.cJeff King, May 21, 2012
  23. 05/15 move git_default_* variables to ident.cJeff King, May 21, 2012
  24. 06/15 ident: trim trailing newline from /etc/mailnameJeff King, May 21, 2012
  25. 07/15 format-patch: use default email for generating message idsJeff King, May 21, 2012
  26. 08/15 fmt_ident: drop IDENT_WARN_ON_NO_NAME codeJeff King, May 21, 2012
  27. 09/15 ident: don't write fallback username into git_default_nameJeff King, May 21, 2012
  28. 10/15 drop length limitations on gecos-derived names and emailsJeff King, May 21, 2012
  29. [regression] Re: [PATCHv2 10/15] drop length limitations on gecos-derived names and emailsJonathan Nieder, Jan 24, 2013
  30. Jeff KingJan 25, 2013
  31. Junio C HamanoJan 25, 2013
  32. Jeff KingJan 25, 2013
  33. 11/15 ident: report passwd errors with a more friendly messageJeff King, May 21, 2012
  34. 12/15 ident: use full dns names to generate email addressesJeff King, May 21, 2012
  35. 13/15 ident: use a dynamic strbuf in fmt_identJeff King, May 21, 2012
  36. 14/15 ident: trim whitespace from default name/emailJeff King, May 21, 2012
  37. Junio C HamanoMay 22, 2012
  38. Jeff KingMay 22, 2012
  39. Junio C HamanoMay 22, 2012
  40. 15/15 format-patch: refactor get_patch_filenameJeff King, May 21, 2012
  41. 09/13 drop length limitations on gecos-derived names and emailsJeff King, May 18, 2012
  42. 10/13 ident: report passwd errors with a more friendly messageJeff King, May 18, 2012
  43. 11/13 ident: use full dns names to generate email addressesJeff King, May 18, 2012
  44. 12/13 ident: use a dynamic strbuf in fmt_identJeff King, May 18, 2012
  45. 13/13 format-patch: refactor get_patch_filenameJeff King, May 18, 2012

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.