On Sun, 09 Dec 2001, Waldemar Brodkorb wrote:
From the keyboard of Florian, * Waldemar Brodkorb
textete am 07.12.01: Wie ist dein sendmail konfiguriert? Wie sieht deine mc-Datei bezüglich *masqerade* aus?
Das habe ich in der sendmail.cf gefunden: (sorry, lange Zeile)
R$* < @ $* $=M . > $* $: $1 < @ $2 $3 . @ $M > $4 convert \ masqueraded doms R$* $: $>94 $1 do masquerading R$* $: $>93 $1 do masquerading R$+ $: $>94 $1 do masquerading R$+ $: $>93 $1 do masquerading
Nur Probleme mit dem Sendmail ;) Warum nicht postfix?
Eigentlich tut's sendmail...
Hmm, ich sagte mc-Datei, wer soll den die Bedeutung der cf-Datei-Anweisungen verstehen? :) Aja, der David sicherlich.
Wie kommst du auf diese Idee? Ich kenn ja nichtmal das Batbook!
Was sagt uns dieser Konstrukt David?
Ich versuch's mal, aber obige Zeilen sind auf mehrere Abschnitte verteilt... Achso, ich hab hier noch sendmail 8.9.3... Die letzteren 4 Zeilen rufen die Rulesets 94 bzw. 93 jeweils mit der gesamten Zeile als Argument auf[1]. In welchen Kontexten dies jew. geschieht ist oben nicht zu erkennen. Bei mir ist sind diese Aufrufe in "Envelope Sender Rewriting" und "Header Sender Rewriting", und zwar beim "Local Mailer" und beim "SMTP Mailer", jew. als letzte Regel. Ruleset 94 ist bei mir trivial, es ruft schlicht Ruleset 93 auf, wenn das Argument (die Zeile) nicht-leer ist. Es bleibt die erste Zeile, die aus dem Ruleset 93 ("convert header names to masqueraded form") sein muesste, aber bei mir abweicht. Um aber einen Kontext herzustellen, nehm ich mal die Regeln aus meiner config. Bei mir steht da (Umbrueche markiere ich mal mit '\'): ======================== schnippel ======================== ################################################################### ### Ruleset 93 -- convert header names to masqueraded form ### ################################################################### S93 # handle generics database [..] # special case the users that should be exposed [..] # handle domain-specific masquerading R$* < @ $=M . > $* $: $1 < @ $2 . @ $M > $3 convert \ masqueraded doms R$* < @ $=w . > $* $: $1 < @ $2 . @ $M > $3 R$* < @ *LOCAL* > $* $: $1 < @ $j . @ $M > $2 R$* < @ $+ @ > $* $: $1 < @ $2 > $3 $M is null R$* < @ $+ @ $+ > $* $: $1 < @ $3 . > $4 $M is not null ======================== schnapp ======================== in /usr/share/sendmail/m4/proto.m4 findet sich dann auch, warum Flo's Zeile anders aussieht: # handle domain-specific masquerading ifdef(`_MASQUERADE_ENTIRE_DOMAIN_', `R$* < @ $* $=M . > $* $: $1 < @ $2 $3 . @ $M > $4 convert \ masqueraded doms', `R$* < @ $=M . > $* $: $1 < @ $2 . @ $M > $3 convert \ masqueraded doms') d.h. Flo hat im Gegensatz zu mir ein FEATURE(`MASQUERADE_ENTIRE_DOMAIN')dnl in seiner .mc (siehe [2]). Was machen also die Zeilen R$* < @ $=M . > $* $: $1 < @ $2 . @ $M > $3 bzw. R$* < @ $* $=M . > $* $: $1 < @ $2 $3 . @ $M > $4 Naja, als perl Ausdruck: s/(.*)<@«(.*)»($MASQ_DOMAINS).>(.*)/$1<@«$2»$3.@$M> $4/ wobei «(.*)» fuer das bei Flo zusaetzlich enthaltene $* steht, das dann in «$2» landet... $MASQ_DOMAINS stehe dabei fuer alle in der "Klasse M" enthaltenen Domains[3], die mit CM definiert werden koennen, aber i.d.R. wohl leer sind. $M ist ein Zugriff auf die "sendmail-Variable" 'M', die durch DM definiert wird, also die Domain, die in einer .mc durch "MASQUERADE_AS(`domain.tld')dnl" angegeben wird und als ==== # who I masquerade as (null for no masquerading) (see also $=M) DMdomain.tld ==== in der .cf landet. Insgesamt ist die Zeile wenig interessant, da CM (bzw. der Zugriff via '$=M') wohl bei den meisten hier leer ist, d.h. die Regel wird meist nicht angewandt. Interessanter sind da schon die folgenden 4 Zeilen: $=w ist ein Zugriff auf die Klasse w, d.h. alle mit Cw (bzw. in einem cw-file definierten) Domains. Aus 'user < @ localhost . > .*' wird durch R$* < @ $=w . > $* $: $1 < @ $2 . @ $M > $3 also 'user < @ localhost . @ domain . tld > .*' Dito, fuer '@.*LOCAL.*'. Die letzten beiden Zeilen korrigieren dann das bisherige Ergebnis, wobei der Fall, dass M nicht definiert ist eher uninteressant ist. Die Zeile R$* < @ $+ @ $+ > $* $: $1 < @ $3 . > $4 \ $M is not null macht dann also aus dem "komischen" user < @ localhost . @ domain . tld > .* ein user < @ domain . tld > .* Diese komische interne Syntax wird dann in der Regel 4 in die uebliche Syntax 'user@domain.tld' umgeschrieben. Um's nachzuvollziehen, wobei 'dh' mein lokaler user ist, und Regel 11 ist aus der SMTP-Mailer Definition. $ sendmail -bt
11,4 dh 11,4 dh rewrite: ruleset 11 input: dh rewrite: ruleset 51 input: dh rewrite: ruleset 51 returns: dh rewrite: ruleset 61 input: dh rewrite: ruleset 61 returns: dh < @ *LOCAL* > rewrite: ruleset 94 input: dh < @ *LOCAL* > rewrite: ruleset 93 input: dh < @ *LOCAL* > rewrite: ruleset 3 input: david @ dhaller . de rewrite: ruleset 96 input: david < @ dhaller . de > rewrite: ruleset 96 returns: david < @ dhaller . de . > rewrite: ruleset 3 returns: david < @ dhaller . de . > rewrite: ruleset 93 returns: david < @ dhaller . de . > rewrite: ruleset 94 returns: david < @ dhaller . de . > rewrite: ruleset 11 returns: david < @ dhaller . de . > rewrite: ruleset 4 input: david < @ dhaller . de . > rewrite: ruleset 4 returns: david @ dhaller . de 93 dh < @ localhost . > rewrite: ruleset 93 input: dh < @ localhost . > rewrite: ruleset 93 returns: dh < @ dhaller . de . >
Wobei bei mir 'DMdhaller.de' definiert ist :) Mit 'sendmail -bt -d21.99' bekommt man das dann Regel fuer Regel "vorgekaut" :)) z.B. obiges Beispiel (auf die einzelnen Schritte gekuerzt): ==========================================================
93 dh < @ localhost . > rewrite: ruleset 93 input: dh < @ localhost . > [.. genericsdomain ..] [.. exposed users ..] -----trying rule: $* < @ $=M . > $*r [..] ----- rule fails -----trying rule: $* < @ $=w . > $* [..] -----rule matches: $: $1 < @ $2 . @ dhaller . de > $3 $1: bfffd5e8="dh" $2: bfffd5ef="localhost" $3: rewritten as: dh < @ localhost . @ dhaller . de > -----trying rule: $* < @ *LOCAL* > $* [..] ----- rule fails -----trying rule: $* < @ $+ @ > $* [..] ----- rule fails -----trying rule: $* < @ $+ @ $+ > $* [..] -----rule matches: $: $1 < @ $3 . > $4 $1: bfffd5e8="dh" $3: 80cf4a0="dhaller" 80cf4b0="." 80cf4c0="de" $4: rewritten as: dh < @ dhaller . de . > rewrite: ruleset 93 returns: dh < @ dhaller . de . > ==========================================================
Man kann recht gut die Zeilen aus Regel 93 "mitverfolgen" :) Viel Spass beim selber austesten... -dnh PS: Den 'sendmail -bt' Modus beendet man mit Strg+D... [1] Aus op.txt: 5.1. R and S -- Rewriting Rules [2] /usr/share/sendmail/feature/masquerade_entire_domain.m4 [3] also in perl: (foo|bar|baz) -- Du willst einen Windows-PC als Gateway für ein NetBSD-System benutzen? Benutzt du auch Nägel, um einen Hammer in die Wand zu schlagen? (Philipp Schulte in de.org.ccc)