So frage ich meinen FQDN unter POSIX 2018 ab

So frage ich meinen FQDN unter POSIX 2018 ab

Problem 7 von POSIX wurde behoben gethostbyname, sodass ich nicht mehr gethostbyname("my_hostname")den kanonischen Hostnamen für meine Maschine erhalten kann. Ich habe versucht, getnameinfostattdessen zu verwenden, aber es wurde /etc/hostswie folgt angezeigt:

127.0.0.1 localhost
127.0.0.1 my_hostname.fqdn my_hostname

Ich komme zurück localhost(was Sinn macht). gethostbyname("my_hostname")Kehrt jedoch zurück my_hostname.fqdn(zumindest sowohl unter musl als auch unter glibc).

Gibt es für meinen Anwendungsfall in Ausgabe 7 einen sinnvollen Ersatz oder habe ich hier Pech gehabt?

Antwort1

Aus der Solaris-Manpage:

DESCRIPTION
 These functions are used to obtain entries describing hosts.
 An  entry  can come from any of the sources for hosts speci-
 fied in the /etc/nsswitch.conf file.  See  nsswitch.conf(4).
 These      functions     have     been     superseded     by
 getipnodebyname(3SOCKET),   getipnodebyaddr(3SOCKET),    and
 getaddrinfo(3SOCKET),  which  provide greater portability to
 applications when multithreading is performed  or  technolo-
 gies  such  as  IPv6  are  used.  For example, the functions
 described in the following cannot be used with  applications
 targeted to work with IPv6.

Wie Sie sehen, liegt die Funktion getaddrinfo()auch dem POSIX-Standard bei und wird unterstützt …

Antwort2

Die aktuelle POSIX-kompatible Methode, den „kanonischen“ FQDN des aktuellen Hosts zu ermitteln (zu versuchen), ist der Aufrufgethostname()um den konfigurierten Hostnamen zu ermitteln, danngetaddrinfo()um die entsprechenden Adressinformationen zu ermitteln.

Fehler ignorieren:

char buf[256];
struct addrinfo *res, *cur;
struct addrinfo hints = {0};
hints.ai_family = AF_UNSPEC;
hints.ai_flags = AI_CANONNAME;
hints.ai_socktype = SOCK_DGRAM;

gethostname(buf, sizeof(buf));
getaddrinfo(buf, 0, &hints, &res);
for (cur = res; cur; cur = cur->ai_next) {
    printf("Host name: %s\n", cur->ai_canonname);
}

Die Ergebnisse sind stark von der System- und Resolverkonfiguration abhängig.

verwandte Informationen