ident: do not drop username when reading from /etc/mailname
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>
This commit is contained in:

committed by
Junio C Hamano

parent
7e2010537e
commit
dc342a25d1
6
ident.c
6
ident.c
@ -41,6 +41,7 @@ static void copy_gecos(const struct passwd *w, struct strbuf *name)
|
|||||||
static int add_mailname_host(struct strbuf *buf)
|
static int add_mailname_host(struct strbuf *buf)
|
||||||
{
|
{
|
||||||
FILE *mailname;
|
FILE *mailname;
|
||||||
|
struct strbuf mailnamebuf = STRBUF_INIT;
|
||||||
|
|
||||||
mailname = fopen("/etc/mailname", "r");
|
mailname = fopen("/etc/mailname", "r");
|
||||||
if (!mailname) {
|
if (!mailname) {
|
||||||
@ -49,14 +50,17 @@ static int add_mailname_host(struct strbuf *buf)
|
|||||||
strerror(errno));
|
strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (strbuf_getline(buf, mailname, '\n') == EOF) {
|
if (strbuf_getline(&mailnamebuf, mailname, '\n') == EOF) {
|
||||||
if (ferror(mailname))
|
if (ferror(mailname))
|
||||||
warning("cannot read /etc/mailname: %s",
|
warning("cannot read /etc/mailname: %s",
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
|
strbuf_release(&mailnamebuf);
|
||||||
fclose(mailname);
|
fclose(mailname);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/* success! */
|
/* success! */
|
||||||
|
strbuf_addbuf(buf, &mailnamebuf);
|
||||||
|
strbuf_release(&mailnamebuf);
|
||||||
fclose(mailname);
|
fclose(mailname);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user