Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!mcvax!ukc!einode!simon From: simon@einode.UUCP (Simon Kenyon) Newsgroups: net.sources Subject: sources to a tiny sendmail test package Message-ID: <221@einode.UUCP> Date: Mon, 24-Nov-86 07:20:05 EST Article-I.D.: einode.221 Posted: Mon Nov 24 07:20:05 1986 Date-Received: Tue, 25-Nov-86 03:16:42 EST Organization: The National Software Centre, Dublin, Ireland. Lines: 357 Keywords: sendmail ruleset .cf test # To unbundle, sh this file echo README 1>&2 cat >README <<'End of README' This is my little package to work out what is going on inside sendmail. It consists of a sendmail configuration file and a shell script. The sendmail configuration file was created with ease (see previous messages in net.mail about ease - i think it's due in mod.sources). The ease source is included. What this is all about: I was having difficulty creating a sendmail.cf. So, I wrote a sendmail.cf whose sole function was to tag an address as it went through the ruleset. I coupled this with a little shell script, called args, which snarfs it's arguments (and stdin) and write them to a log file (/tmp/log is what I have used - you can alter it to taste, bearing in mind that it will probably have to suid to write to your directory :-() What do you do: Unpack all this junk. You should have test.mc, test.cf, args and README. Put args in your search path. Create a dummy mail message. It helps to know how you mailer calls sendmail. I used args to find out. (I briefly replaced /usr/lib/sendmail with args and sent some mail). Call sendmail with the dummy mail item as stdin. ie: /usr/lib/sendmail -Ctest.cf foobar <&2 cat >args <<'End of args' #!/bin/sh # # little shell script to snarf it's arguments and stdin and put them # in a log file. this way you can see what is being given to the various # mailers and also what is being done to addresses. # it's a real hack, but it works for me # # Simon Kenyon, The NSC, Dublin, IRELAND. 24th Nov 86 # echo '-------------'`date`'------------------' >>/tmp/log echo -n "Command line: " >>/tmp/log for i in "$@" do echo -n "$i " >>/tmp/log done echo >>/tmp/log while read foo do echo $foo >>/tmp/log done End of args echo test.cf 1>&2 cat >test.cf <<'End of test.cf' ################################################### ## ## ## WARNING: THIS FILE IS TO BE MODIFIED BY ## ## THE EASE TRANSLATOR (ET) ONLY. ## ## ## ## ALL OTHER MODIFICATIONS WILL ## ## DISAPPEAR THE NEXT TIME ET IS RUN. ## ## ## ## MAKE MODIFICATIONS TO THE EASE ## ## SOURCE ONLY. ## ## ## ################################################### DAmy_domain DBruleset tester V1.0 Dwwhatever Dj$w.$A DnMAILER-DAEMON DlFrom $g $d Do.:%@!^=/[]{} Dq$?x$x <$g>$|$g$. De$j Sendmail $v/$B ready at $b OA/usr/lib/aliases Odb Ou1 OS/usr/lib/sendmail.st OH/usr/lib/sendmail.hf Og1 Oo OQ/usr/spool/mqueue OT3d Os OL9 OtWET OF0644 Orr2h OW* Pfirst-class=0 Pspecial-delivery=100 Pjunk=-100 Troot daemon uucp network Tsimon Ha: The origination date in Arpanet format = $a Hb: The current date in Arpanet format = $b Hc: The hop count = $c Hd: The date in UNIX (ctime) format = $d He: The SMTP entry message = $e Hf: The sender (from) address = $f Hg: The sender address relative to the recipient = $g Hh: The recipient host = $h Hi: The queue id = $i Hj: The official domain name for this site = $j Hl: The format of the UNIX from line = $l Hn: The name of the daemon (for error messages) = $n Ho: The set of operators in addresses = $o Hp: Sendmail's pid = $p Hq: The default format of sender address = $q Hr: Protocol used = $r Hs: Sender's host name = $s Ht: A numeric representation of the current time = $t Hu: The recipient user = $u Hv: The version number of sendmail = $v Hw: The hostname of this site = $w Hx: The full name of the sender = $x Hy: The id of the sender's tty = $y Hz: The home directory of the recipient = $z S3 R$+ $:{3}$1 S0 R$+@$+ $#uucp$@{0_uucp}$2$:{0_uucp}$1 R$+!$+ $#uucp$@{0_uucp}$1$:{0_uucp}$2 R$+ $#local$:{0_local}$1 S1 R$+ $@{1}$1 S2 R$+ $@{2}$1 S4 R$+ $@{4}$1 S10 R$+ $@{S_local}$1 S20 R$+ $@{R_local}$1 S11 R$+ $@{S_uucp}$1 S21 R$+ $@{R_uucp}$1 Mlocal, P=/usr/src/local/EUnet/ease/test/args, F=DFlMmnrs, S=10, R=20, A=args mail -d $u Mprog, P=/usr/src/local/EUnet/ease/test/args, F=DeFlMns, S=10, R=20, A=args sh -c $u Muucp, P=/usr/src/local/EUnet/ease/test/args, F=DFMsUhu, S=11, R=21, M=65535, A=args uumail -h -oc -gA -f$g $h!$u End of test.cf echo test.mc 1>&2 cat >test.mc <<'End of test.mc' /* * Sendmail configuration file for test rulesets * * Simon Kenyon November 20th, 1986 */ bind EnvelopeTo = ruleset 0; From = ruleset 1; HeaderTo = ruleset 2; Canonicalize = ruleset 3; Externalize = ruleset 4; LocalHeaderFrom = ruleset 10; UucpHeaderFrom = ruleset 11; LocalHeaderTo = ruleset 20; UucpHeaderTo = ruleset 21; macro Domain = "my_domain"; Version = "ruleset tester V1.0"; m_sitename = "whatever"; m_oname = "${m_sitename}.${Domain}"; m_daemon = "MAILER-DAEMON"; /*m_ufrom = "From ${m_sreladdr} ${m_udate} remote from ${m_sitename}";*/ m_ufrom = "From ${m_sreladdr} ${m_udate}"; m_addrops = ".:%@!^=/[]{}"; m_defaddr = concat ( ifset (m_sname, "${m_sname} <${m_sreladdr}>", "${m_sreladdr}"), "" ); m_smtp = "${m_oname} Sendmail ${m_version}/${Version} ready at ${m_adate}"; options o_alias = "/usr/lib/aliases"; o_delivery = d_background; o_dmuid = "1"; o_flog = "/usr/lib/sendmail.st"; o_fsmtp = "/usr/lib/sendmail.hf"; o_gid = "1"; o_hformat = ""; o_qdir = "/usr/spool/mqueue"; o_qtimeout = "3d"; o_safe = ""; o_slog = "9"; o_timezone = "WET"; o_tmode = "0644"; o_tread = "r2h"; o_wizpass = "*"; precedence first-class = 0; special-delivery = 100; junk = -100; trusted {root, daemon, uucp, network}; {simon}; header define ("a:", "The origination date in Arpanet format = ${m_odate}"); define ("b:", "The current date in Arpanet format = ${m_adate}"); define ("c:", "The hop count = ${m_hops}"); define ("d:", "The date in UNIX (ctime) format = ${m_udate}"); define ("e:", "The SMTP entry message = ${m_smtp}"); define ("f:", "The sender (from) address = ${m_saddr}"); define ("g:", "The sender address relative to the recipient = ${m_sreladdr}"); define ("h:", "The recipient host = ${m_rhost}"); define ("i:", "The queue id = ${m_qid}"); define ("j:", "The official domain name for this site = ${m_oname}"); define ("l:", "The format of the UNIX from line = ${m_ufrom}"); define ("n:", "The name of the daemon (for error messages) = ${m_daemon}"); define ("o:", "The set of operators in addresses = ${m_addrops}"); define ("p:", "Sendmail's pid = ${m_pid}"); define ("q:", "The default format of sender address = ${m_defaddr}"); define ("r:", "Protocol used = ${m_protocol}"); define ("s:", "Sender's host name = ${m_shostname}"); define ("t:", "A numeric representation of the current time = ${m_ctime}"); define ("u:", "The recipient user = ${m_ruser}"); define ("v:", "The version number of sendmail = ${m_version}"); define ("w:", "The hostname of this site = ${m_sitename}"); define ("x:", "The full name of the sender = ${m_sname}"); define ("y:", "The id of the sender's tty = ${m_stty}"); define ("z:", "The home directory of the recipient = ${m_rhdir}"); field path : match (1*); ruleset Canonicalize { if (path) next ("{3}" $1); } ruleset EnvelopeTo { if (path @ path) resolve (mailer (uucp), host ("{0_uucp}" $2), user ("{0_uucp}" $1)); if (path ! path) resolve (mailer (uucp), host ("{0_uucp}" $1), user ("{0_uucp}" $2)); if (path) resolve (mailer (local), user ("{0_local}" $1)); } ruleset From { if (path) return ("{1}" $1); } ruleset HeaderTo { if (path) return ("{2}" $1); } ruleset Externalize { if (path) return ("{4}" $1); } ruleset LocalHeaderFrom { if (path) return ("{S_local}" $1); } ruleset LocalHeaderTo { if (path) return ("{R_local}" $1); } ruleset UucpHeaderFrom { if (path) return ("{S_uucp}" $1); } ruleset UucpHeaderTo { if (path) return ("{R_uucp}" $1); } mailer local { Path = "/usr/src/local/EUnet/ease/test/args", Flags = {f_date, f_from, f_locm, f_mesg, f_mult, f_noufrom, f_rfrom, f_strip}, Sender = LocalHeaderFrom, Recipient = LocalHeaderTo, Argv = "args mail -d ${m_ruser}" }; prog { Path = "/usr/src/local/EUnet/ease/test/args", Flags = {f_date, f_expensive, f_from, f_locm, f_mesg, f_noufrom, f_strip}, Sender = LocalHeaderFrom, Recipient = LocalHeaderTo, Argv = "args sh -c ${m_ruser}" }; uucp { Path = "/usr/src/local/EUnet/ease/test/args", Flags = {f_date, f_from, f_mesg, f_strip, f_ufrom, f_upperh, f_upperu}, Sender = UucpHeaderFrom, Recipient = UucpHeaderTo, Maxsize = "65535", Argv = "args uumail -h -oc -gA -f${m_sreladdr} ${m_rhost}!${m_ruser}" }; End of test.mc -- Simon Kenyon EUnet: simon@einode.UUCP Smail: The National Software Centre, Dublin, IRELAND Phone: +353-1-716255 EUnet is a registered trademark of the EUUG