freeipa/ipapython/fqdn.py

34 lines
1.2 KiB
Python
Raw Normal View History

#
# Copyright (C) 2020 FreeIPA Contributors see COPYING for license
#
"""Get host's FQDN
"""
import socket
def gethostfqdn():
"""Get the fully qualified domain name of current host from glibc
This function may return an FQDN with up to MAXHOSTFQDNLEN characters
(253). The effective hostname is still limited to MAXHOSTNAMELEN (64).
:return: FQDN as str
"""
hostname = socket.gethostname()
# this call can never fail except for misconfigured nsswitch.conf
# without nss-myhostname provider. The myhostname provider translates
# gethostname() to local interfaces.
gai = socket.getaddrinfo(
hostname,
None, # service/port is irrelevant
family=socket.AF_UNSPEC, # IPv4 or IPv6
type=socket.SOCK_DGRAM, # optimization, TCP/RAW gives same result
# include canonical name in first addrinfo struct
# only use address family when at least one non-local interface
# is configured with that address family
flags=socket.AI_CANONNAME | socket.AI_ADDRCONFIG
)
# first addrinfo struct, fourth field is canonical name
# getaddrinfo() either raises an exception or returns at least one entry
return gai[0][3]