diff options
author | Junio C Hamano <gitster@pobox.com> | 2015-12-15 09:42:01 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-12-15 09:42:01 -0800 |
commit | de301c5c85b333751a21b3d6b8cff566dc31e6c9 (patch) | |
tree | 05be77a4c0a57220506738d04d03699e2c7f76f4 | |
parent | f97f2e5c645759ec3204ca99cbc5f61caf9201de (diff) | |
parent | 58d29ececf8fc287d9b244c617edd174ded66b01 (diff) | |
download | git-de301c5c85b333751a21b3d6b8cff566dc31e6c9.tar.gz |
Merge branch 'ep/ident-with-getaddrinfo' into maint
A fix-up for recent topic.
* ep/ident-with-getaddrinfo:
ident: fix undefined variable when NO_IPV6 is set
ident.c: add support for IPv6
-rw-r--r-- | ident.c | 31 |
1 files changed, 27 insertions, 4 deletions
@@ -70,10 +70,35 @@ static int add_mailname_host(struct strbuf *buf) return 0; } +static int canonical_name(const char *host, struct strbuf *out) +{ + int status = -1; + +#ifndef NO_IPV6 + struct addrinfo hints, *ai; + memset (&hints, '\0', sizeof (hints)); + hints.ai_flags = AI_CANONNAME; + if (!getaddrinfo(host, NULL, &hints, &ai)) { + if (ai && strchr(ai->ai_canonname, '.')) { + strbuf_addstr(out, ai->ai_canonname); + status = 0; + } + freeaddrinfo(ai); + } +#else + struct hostent *he = gethostbyname(host); + if (he && strchr(he->h_name, '.')) { + strbuf_addstr(out, he->h_name); + status = 0; + } +#endif /* NO_IPV6 */ + + return status; +} + static void add_domainname(struct strbuf *out) { char buf[1024]; - struct hostent *he; if (gethostname(buf, sizeof(buf))) { warning("cannot get host name: %s", strerror(errno)); @@ -82,9 +107,7 @@ static void add_domainname(struct strbuf *out) } if (strchr(buf, '.')) strbuf_addstr(out, buf); - else if ((he = gethostbyname(buf)) && strchr(he->h_name, '.')) - strbuf_addstr(out, he->h_name); - else + else if (canonical_name(buf, out) < 0) strbuf_addf(out, "%s.(none)", buf); } |