Das funktioniert.... ... allerdings versehe ich dieses Statement nicht... ich kanns nicht lesen... denn awk ist ja viel mehr, als nur mal eben ne Feld-Ausgabe... und so tief bin ich da leider nicht drin. Meine Version ist zwar länger und offensichtlich auch umständlicher, aber die verstehe wenigstens.... ich bin jetzt echt hin- und hergerissen.
Ein eigener Mailserver - wie geht das?
-
WinterUnit16246 -
26. Juli 2017 um 17:06 -
Erledigt
Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
-
-
Ein eigener Mailserver - wie geht das?? Schau mal ob du hier fündig wirst!
-
LinuxUser=$(/usr/bin/awk -v user="$VirtUser" '$1 == user {print $NF;exit}' /etc/dovecot/alias_maps)
awk kann leider keine Shell-Variablen als Suchbegriff in normaler Form nutzen, sonst sähe es so aus:
Also einfach "Wenn Feld 1 ($1) gleich der Var $VirtUser ist, dann gib das letzte Feld der Zeile ($NF) aus und beende dich (exit)"
Deswegen der Umweg awk eine eigene Variable "-v user=" mit dem Inhalt von $VirtUser zu übergeben und die für den Vergleich her zu nehmen.
-
Das sieht erst besser aus und führt zu 2 korrekten Ausgaben, aber dann zum gleichen Fehler wie oben, siehe das Otto-Problem. Der Linux-User "thomas" hat mehrere Postfächer (virt.user) und eines von denen heisst auch "thomas", ein weiteres "toml".
Da ich mit Deinem Otto-Beispiel kein Problem hatte, würde ich das gerne verstehen: Kannst Du die entsprechenden Zeilen mal posten? Eigentlich sollte mein grep nur Zeilen finden, die mit dem entsprechenden VirtUser als ganzes Wort anfangen.
-
...würde ich das gerne verstehen:
Du hast tatsächlich Recht, das war wirklich nicht das Problem, sondern die Tatsache, dass es mehrere Postfächer gibt, die mit dem Wort "thomas" anfangen.... also nach dem Muster "vorname.nachname@domain.tld". Ich habe 3 Echt-Namen-Postfächer bei 3 Mailhostern. Dementsprechend angelehnt sind die virtuellen User bei Dovecot bezeichnet.
-
Habe ich das richtig verstanden, daß Du virtuelle User der Form "thomas.a", "thomas.b" etc. hast? Dann klappt mein Vorschlag natürlich nicht, da auch das enthaltene Satzzeichen als Wortgrenze (switch "-w") interpretiert wird. Alternative wäre
-
lutz, danke, das habe ich verstanden... ich bin zum einen an der Logik {print $NF;exit} hängengeblieben...und auch an der Tatsache, dass eingabe, greppen, if-condition und ausgeben alles in einem einzigen Statement stattfindet.... welches schließlich an einer Stelle zusätzlich irritierend auch noch eine bestimmte Rückschluss-Logik verwendet.... und zwar wird das letzte Feld von der Anzahl "Number of fields" zurückgegeben, was bei mir quasi nur zufällig mit dem gewollten Ergebnis als Feld 2 übereinstimmt. In meinem Fall eindeutiger und etwas leichter zu verstehen wäre jedoch die Variante {print $2;exit}.
Aber insgesamt ist das schon starker Tobak.... und wiedermal bin ich total von den Möglichkeiten in Linux beeindruckt.... aber gleichzeitig auch etwas abgeschreckt... weil ich Sourcecode immer eher nach der Prämisse "hohe reproduzierbarkeit" erstellt habe.
-
Habe ich das richtig verstanden, daß Du virtuelle User der Form "thomas.a", "thomas.b" etc. hast?
Ja, richtig, genau so ist. Aber ich denke, Lutz' Lösung ist genial... ich muss die nur erst mal mental verdauen...
-
wiedermal bin ich total von den Möglichkeiten in Linux beeindruckt
nanana, GNU Awk 4.1.4, nix Linux!
-
awk kann leider keine Shell-Variablen als Suchbegriff in normaler Form nutzen
Zumindest nicht ohne wildes escapen. Die folgenden beiden Varianten scheinen zu funktionieren:
Code/usr/bin/awk '$1 == "'$VirtUser'" {print $NF;exit}' am /usr/bin/awk "\$1 == \"$VirtUser\" {print \$NF;exit}" am
Ob das eleganter ist als die Variablenübergabe ist allerdings sicher Geschmackssache...
-
'Linux' sollte nur ausdrücken, dass ich damit Linux-Betriebssysteme im allgemeinen meinte.... unter Windows kannte ich das damals (bis 2012) jedenfalls nicht....
-
-
Zumindest nicht ohne wildes escapen. Die folgenden beiden Varianten scheinen zu funktionieren:
Die 1. (hier)
nichtauch (wenn man die Var richtig schreibt), sryDer für mich tägliche Fall ist sowas wie awk '/suchwas/ { print $xy} file' und das geht mit Shell-Vars nicht bzw. wie du schriebst, nur mit wildem, fehlerträchtigen Escapen. Deswegen habe ich mir das mit der Hilfsvariablen angewöhnt.
-
und das geht mit Shell-Vars nicht bzw. wie du schriebst, nur mit wildem, fehlerträchtigen Escapen.
Anscheinend gehts ja auch ohne escapen, wenn mit ' (vorne und hinten) verhindert wird, dass die Shell-Var expandiert wird. Das heisst, es geht, wenn die Shell-Var als Namen übergeben wird, aber nicht der Inhalt. Und der Inhalt kann nicht übergeben werden, weil die ganze Condition mit ' eingepackt ist, was wiederum die Expansion verhindert.... *hmmm*
-
Geschmackssache, ich finde mixed-quoting unschön und nicht weniger fehlerträchtig. Aber ist doch schön, wenn jeder irgendwo seinen Weg findet.
-
ich finde mixed-quoting unschön
Ja, das stimmt... der Vorteil hierbei ist allerdings, mir fällt die Interpretation bzw. das Verstehen der Bedeutung des Statements beim Lesen einfacher.... weil weniger Elemente..... was natürlich aber auch nur meinen subjektiven Vorlieben entspricht.... und ein wenig dem Alter entgegenkommt *fg*.
Ich habe jetzt jedenfalls diese Variante produktiv übernommen... womit ich im Moment eigentlich auch zufrieden bin. Die anschließenden Tests haben auch keine Umstimmigkeiten ergeben.
LinuxUser=$(awk '$1 == "'$VirtUser'" {print $2;exit}' /etc/dovecot/alias_maps)
Danke Euch beiden....
-
An dieser Stelle noch einmal ausdrücklich meinen Dank an Lutz und Manu für einige wirklich hilfreiche Anregungen, die ich heute endgültig produktiv gesetzt habe.
Das ist jetzt der aktuelle Stand dreier relevanter Code-Zeilen, die ich heute morgen ca 'ne halbe Stunde lang mit Stresstests und provozierten Fehlersituationen genervt habe... und verdammte hacke.... alles hat zu meiner großen Freude perfekt funktioniert...
-
Senden funktioniert nicht
Die Installation habe ich auf einem Raspi3 nach dieser hervorragenden Anleitung durchgeführt. Die Dienste starten ohne Fehlermeldung und das Abrufen der zwei Mailadressen sowie die Zuordnung funktioniern einwandfrei.
Aber beim senden erhalte ich ständig folgende Meldung:
Jän 15 16:05:32 raspimail postfix/smtp[864]: warning: SASL authentication failure: No worthy mechs found
Jän 15 16:05:32 raspimail postfix/smtp[864]: 5106B1FCAF: to=<gemu56@gmail.com>, \
relay=securemail.a1.net[195.3.96.71]:25, delay=75598, delays=75598/0.19/0.49/0, \
dsn=4.7.0, status=deferred (SASL authentication failed; cannot authenticate to server \
securemail.a1.net[195.3.96.71]: no mechanism available)
Ich habe die configs (Postfix & ./rules) xmal verglichen / kontrolliert aber Momentan sehe ich den Wald vor lauter Bäume nicht. Ich halte mich zwar für einen fortgeschrittenen Anwender, aber hier wäre ich für jeden Tipp dankbar.
-
Das ist jetzt fummelei..... und sucherei.... mal sehen. Wie sind die Ausgaben der beiden folgenden Befehle, jeweils als root:
Und zweitens, ist sichergestellt, dass der Absender ("from" im Mail-Header) identisch mit der Postfach-Adresse bei gmail ist? Also das der Replace in check_generic_replace_from mit der richtigen from-Adresse ersetzt?
-
@ThomasL
Hab mir deine Dokumentation jetzt erst angeguckt
respekt da hast du dir ja richtig Arbeit gemacht
-
Das ist jetzt fummelei..... und sucherei.... mal sehen. Wie sind die Ausgaben der beiden folgenden Befehle, jeweils als root:
Und zweitens, ist sichergestellt, dass der Absender ("from" im Mail-Header) identisch mit der Postfach-Adresse bei gmail ist? Also das der Replace in check_generic_replace_from mit der richtigen from-Adresse ersetzt?
Hallo Thomas,
Danke für Deine rasche Rückmeldung. Hier die Ausgabe in der Console:
root@raspimail:/home/pi# dpkg -l libsasl2-modules
Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten
| Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/
Halb installiert/Trigger erWartet/Trigger anhängig
|/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht)
||/ Name Version Architektur Beschreibung
+++-================-============-============-=================================
un libsasl2-modules <keine> <keine> (keine Beschreibung vorhanden)
root@raspimail:/home/pi# postconf -n | grep smtp_sasl
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/get_relayhost_passwd
smtp_sasl_security_options = noanonymous
In der "check_generic_replace_from" habe ich folgendes eingetragen:
# Per-sender replacement of local "from" to Provider-"from"
#==========================================================
root@mail gemu@a1.net
gerhard_a1@mail gemu@a1.net
gerhard_gmail@mail gemu56@gmail.com
Ich habe vor kurzem ein Systemupdate gemacht. Seitdem denke ich habe ich das Problem beim Senden.
Am Wochenende hat's noch geklappt.
Gehe ich richtig in der Annahme (werde es gleich testen ), da das "libsasl2-modules" nicht installiert ist daher das Senden nicht funktioniert?
Jawohlja, das war's - da wäre ich nie draufgekommen, Danke für Deine Mühe
-
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!