]> git.ipfire.org Git - thirdparty/git.git/commitdiff
send-email: try to get fqdn by running hostname -f on Linux and macOS
authorAditya Garg <gargaditya08@live.com>
Mon, 12 May 2025 08:11:19 +0000 (08:11 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 14 May 2025 00:14:29 +0000 (17:14 -0700)
`hostname` is a popular command available on both Linux and macOS. As
per the man-page[1], `hostname -f` command returns the fully qualified
domain name (FQDN) of the system. The current Net::Domain perl module
being used in the script for the same has been quite unrealiable in many
cases. Thankfully, we now have a better check for valid_fqdn, which does
reject the invalid FQDNs given by this module properly, but at the same
time, it will result in a fallback to 'localhost.localdomain' being
used. `hostname -f` has been quite reliable (probably even more reliable
than the Net::Domain module) and before falling back to
'localhost.localdomain', we should try to use it. Interestingly, the
`hostname` command is actually used by perl modules like Net::Domain[2]
and Sys::Hostname[3] to get the hostname. So, lets give `hostname -f` a
chance as well!

[1]: https://man7.org/linux/man-pages/man1/hostname.1.html
[2]: https://github.com/Perl/perl5/blob/blead/cpan/libnet/lib/Net/Domain.pm#L88
[3]: https://github.com/Perl/perl5/blob/blead/ext/Sys-Hostname/Hostname.pm#L93

Signed-off-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-send-email.perl

index 1f613fa979df4513c7a07c478c9c59b787fa3e9f..db5ba8deca8939d01779870a312551da25d9a8bf 100755 (executable)
@@ -1386,8 +1386,22 @@ sub maildomain_mta {
        return $maildomain;
 }
 
+sub maildomain_hostname_command {
+       my $maildomain;
+
+       if ($^O eq 'linux' || $^O eq 'darwin') {
+               my $domain = `(hostname -f) 2>/dev/null`;
+               if (!$?) {
+                       chomp($domain);
+                       $maildomain = $domain if valid_fqdn($domain);
+               }
+       }
+       return $maildomain;
+}
+
 sub maildomain {
-       return maildomain_net() || maildomain_mta() || 'localhost.localdomain';
+       return maildomain_net() || maildomain_mta() ||
+               maildomain_hostname_command || 'localhost.localdomain';
 }
 
 sub smtp_host_string {