Warum wurde .localdomain in Postfix eingeführt

Beim Senden von E-Mails auf meinem lokalen Computer ( echo foo | sendmail $USER) enthält die E-Mail From: (my-user-name)@(my-machine-name).localdomain.

Laut meinen Befehlszeilentools scheint mein Host keine lokale Domänenerweiterung zu einem der verschiedenen Hostnamen hinzugefügt zu haben, die macOS zulässt .

$ grep localdomain /etc/hosts
$ grep localdomain /Library/Preferences/SystemConfiguration/preferences.plist
$ scutil --get ComputerName
(my-machine-name)
$ scutil --get HostName
(my-machine-name)
$ scutil --get LocalHostName
(my-machine-name)
$ hostname -f
(my-machine-name)
$ alias hostname
-bash: alias: hostname: not found

Meine Recherchen ergeben .localdomainsich aus einem Postfix-Update . Das Git-Protokoll enthält jedoch nur allgemeine Nachrichten, und ich konnte der Datei nicht entnehmen, HISTORYwarum es hinzugefügt wurde.

  1. Wer hat eingeführt .localdomainund warum?
  2. Für welche spezifischen Verwendungen ist es gegebenenfalls anwendbar? (z. B. sollte es E-Mail sein Message-ID?)
In der Standardkonfiguration hostnameentspricht das Ausführen dem Ausführen hostname -fvon which prints machine_name.local. Suchen Sie nach Aliasnamen, die auf definiert sind, hostnameindem Sie ausführen alias hostname.
Danke für die Bearbeitung. Was ist das Endziel hier? Warum richten Sie Ihr Sendmail nicht so ein, dass unabhängig vom lokalen Hostnamen ein korrekter vollständig qualifizierter Domänenname eingerichtet wird?
@bmike: Es dient zum Generieren von E-Mail-Headern, z. B. Message-IDbeim Senden von E-Mails von localhost. Sollten diese haben @localhostoder @localhost.localdomain? Nicht, dass es wichtig wäre, ich wurde nur irgendwie neugierig und wollte mich an Konventionen halten.
Perfekt - hoffentlich lassen meine Bearbeitungen zu, dass die Frage am Ende des "Setups" klar existiert

Antworten (1)

In Ihrem Beispiel gibt es keinen E-Mail-Client (außer möglicherweise dem echo); sendmailist Teil des Mail Transport Agents, der auf aktuellen Versionen von macOS standardmäßig Postfix ist. Postfix legt die Domäne entweder aus der Konfigurationsdatei fest oder schlägt fehl, dass ein interner Wert oder ein Systemaufruf nachgeschlagen wird:

$ postconf | grep localdomain
mydomain = localdomain
$ postconf -n | grep "^mydomain"
$ 

Dies zeigt, dass (zumindest auf meinem System) der mydomainWert ist localdomainund dass dieser Wert nicht in gesetzt ist /etc/postfix/main.cf. Es muss also stattdessen von einem internen Wert oder über einen Systemaufruf kommen. (Sie könnten es auf etwas Passendes setzen in main.cf; viele Mail Transport Agents lehnen E-Mails von solchen lokalen Domänen wegen Spammer ab oder bewerten die Nachricht auf andere Weise als Spam. Dies ist möglicherweise kein Problem, wenn die E-Mail niemals das Internet erreicht .)

$ strings /usr/sbin/postfix | grep localdomain
localdomain
$ cfu 'char buf[254]; gethostname(buf,254); printf("%s\n",buf)'
glide.local
$ 

Zeigt, dass dies als interner Wert postfixverwendet werden könnte , da diese Zeichenfolge in der Binärdatei erscheint. localdomainDies liegt wahrscheinlich daran, dass gethostbyname(3)etwas zurückgegeben wird, das sich nicht localdomainauf meinem System befindet (Sie haben es wahrscheinlich nicht, cfuaber es gibt viele Möglichkeiten, beliebige Systemaufrufe auszuführen). Wenn man den Quellcode für Postfix herunterlädt , gibt es tatsächlich diverse Verweise auf localdomain:

$ find . -name "*.c" -exec fgrep localdomain {} +
./src/global/mail_addr_find.c:    UPDATE(var_mydomain, "localdomain");
./src/global/mail_addr_find.c:    UPDATE(var_myorigin, "localdomain");
./src/global/mail_addr_find.c:    UPDATE(var_mydest, "localhost.localdomain");
./src/smtp/smtp_map11.c:    UPDATE(var_myhostname, "localhost.localdomain");
./src/smtp/smtp_map11.c:    UPDATE(var_mydomain, "localdomain");
...

Dieser Wert wird also sehr wahrscheinlich intern von Postfix gesetzt und sollte ggf. durch Editieren der Konfiguration angepasst werden.

Sehr gute Antwort, bis hin zu den fest codierten Zeichenfolgen :) postconfgibt mir das gleiche wie du. Dies erklärt jedoch nicht den Ursprung der Wurzel. Auch eine Suche gibt nur sporadisch Hinweise: google.com/search?q="localdomain ". Ich erinnere mich, dass lokale Mail vorher nur @localhost hatte, also wurde sie angeblich in einem macOS-Update hinzugefügt. Der Grund für die Konvention ist noch etwas unklar. Wenn jemand ein Licht auf dieses werfen kann, würde es geschätzt werden.
Google denkt, ich bin ein Roboter, also weiß ich nicht, was diese Suche zeigt. Es gibt nur zwei Verweise auf localdomainim RFC (6108 und 7123), die darüber hinaus nicht besonders aufschlussreich sind. Ich denke, wenn es ein Postfix-Quellcode-Repo gibt, könnten Sie git bisectsehen, wann diese Zeichenfolgen hinzugefügt wurden und warum?