Skip to content

Commit

Permalink
ident: do not drop username when reading from /etc/mailname
Browse files Browse the repository at this point in the history
An earlier conversion from fgets() to strbuf_getline() in the
codepath to read from /etc/mailname to learn the default host-part
of the ident e-mail address forgot that strbuf_getline() stores the
line at the beginning of the buffer just like fgets().

The "username@" the caller has prepared in the strbuf, expecting the
function to append the host-part to it, was lost because of this.

Reported-by: Mihai Rusu <dizzy@google.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jonathan Nieder authored and Junio C Hamano committed Jan 25, 2013
1 parent 7e20105 commit dc342a2
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion ident.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ static void copy_gecos(const struct passwd *w, struct strbuf *name)
static int add_mailname_host(struct strbuf *buf)
{
FILE *mailname;
struct strbuf mailnamebuf = STRBUF_INIT;

mailname = fopen("/etc/mailname", "r");
if (!mailname) {
Expand All @@ -49,14 +50,17 @@ static int add_mailname_host(struct strbuf *buf)
strerror(errno));
return -1;
}
if (strbuf_getline(buf, mailname, '\n') == EOF) {
if (strbuf_getline(&mailnamebuf, mailname, '\n') == EOF) {
if (ferror(mailname))
warning("cannot read /etc/mailname: %s",
strerror(errno));
strbuf_release(&mailnamebuf);
fclose(mailname);
return -1;
}
/* success! */
strbuf_addbuf(buf, &mailnamebuf);
strbuf_release(&mailnamebuf);
fclose(mailname);
return 0;
}
Expand Down

0 comments on commit dc342a2

Please sign in to comment.