From Internet to BITNET
From BITNET to Internet
From Internet to UUCP
From UUCP to Internet
step 1 : gzip -d sendmail.8.6.12h2.tar.gz tar xvf sendmail.8.6.12h2.tar step 2 : src/Makefile.SunOS (SunOS 4.1.3) DBMDEF = -DNDBM -DNIS LIBS = -ldbm -lresolv step 3 : make -f Makefile.SunOS error on-line mainual step 4 : cp /usr/lib/sendmail /usr/lib/sendmail.org make -f Makefile.SunOS install-sendmail sendmail /usr/lib mailq newaliases sendmail symbolic link step 5 : sendmail.cf cp sendmail.cf.sparc-sun-sunos4.1.3 sendmail.cf vi sendmail.cf DDkari.re.kr Djkari.re.kr DMkari.re.kr step 6 : sendmail.cf cp senfdmail.cf /etc Solaris 2.4 /etc/mail step 7 : /etc/sendmail.cw : kari.re.kr step 8 : newaliases /usr/ucb/newaliases step 9 : sendmail daemon restart $ kill -1 `ps t"?" | grep sendmail ` $ /usr/lib/sendmail -bd -q1h
$ Mail -v cypark@garam.kreonet.re.kr Subject: sendmail test This is sendmail test. Mail command is not supported Hangul messages Please use ELM Hangul version ctrl+D Cc: $ cypark@garam.kreonet.re.kr... Connecting to garam.kreonet.re.kr. (smtp)... 220-garam.kreonet.re.kr Sendmail 8.6.9H1/8.6.12 ready at Thu, 26 Oct 1995 11:40:15 220 ESMTP spoken here >>> EHLO kari.re.kr 250-garam.kreonet.re.kr Hello [150.197.1.4], pleased to meet you 250-EXPN 250-SIZE 250 HELP >>> MAIL From:<cypark@kari.re.kr> SIZE=107 250 <cypark@kari.re.kr>... Sender ok >>> RCPT To:<cypark@garam.kreonet.re.kr> 250 <cypark@garam.kreonet.re.kr>... Recipient ok >>> DATA 354 Enter mail, end with "." on a line by itself >>> . 250 LAA21010 Message accepted for delivery cypark@garam.kreonet.re.kr... Sent (LAA21010 Message accepted for delivery) Closing connection to garam.kreonet.re.kr. >>> QUIT 221 garam.kreonet.re.kr closing connection
Define Macros DDkari.re.kr Define Class CDkari.re.kr Set option OA/etc/aliases Trusted Users Troot cypark Message Precedence Pfirst-class=0 Define Mailer Mlocal, P=/bin/mail, ..... Define Header H?F?From : $q Set Ruleset S0, S1, S2,.... Define Rule Rlhs <tab> rhs <tab> comment lhs : pattern match, rhs : transforming the address
input address : hunt@nbsenh.bitnet | | rewriting rule : R$+<@$+.bitnet> $1%$2<@$B> | | address token : hunt<@nbsehn.bitnet> | | indefinite token : hunt <nbsehn> | | transformation : $1 % $2 < @ $B> | | | rewriting address : hunt%nbsehn<@cunyvm.cuny.edu>
/usr/lib/sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 0 cypark ¢Ð username rewrite: ruleset 0 input: cypark rewrite: ruleset 98 input: cypark rewrite: ruleset 98 returns: cypark rewrite: ruleset 0 returns: $# local $: @ cypark > > 0 cypark@viva ¢Ð hostname rewrite: ruleset 0 input: cypark @ viva rewrite: ruleset 98 input: cypark @ viva rewrite: ruleset 98 returns: cypark @ viva rewrite: ruleset 97 input: cypark @ viva rewrite: ruleset 3 input: cypark @ viva rewrite: ruleset 96 input: cypark < @ viva > rewrite: ruleset 96 returns: cypark < @ viva . kari . re . kr . > rewrite: ruleset 3 returns: cypark < @ viva . kari . re . kr . > rewrite: ruleset 0 input: cypark < @ viva . kari . re . kr . > rewrite: ruleset 98 input: cypark < @ viva . kari . re . kr . > rewrite: ruleset 98 returns: cypark < @ viva . kari . re . kr . > rewrite: ruleset 0 returns: $# local $: @ cypark rewrite: ruleset 97 returns: $# local $: @ cypark rewrite: ruleset 0 returns: $# local $: @ cypark > > 0 cypark@viva.kari.re.kr ¢Ð hostname.domainname rewrite: ruleset 0 input: cypark @ viva . kari . re . kr rewrite: ruleset 98 input: cypark @ viva . kari . re . kr rewrite: ruleset 98 returns: cypark @ viva . kari . re . kr rewrite: ruleset 97 input: cypark @ viva . kari . re . kr rewrite: ruleset 3 input: cypark @ viva . kari . re . kr rewrite: ruleset 96 input: cypark < @ viva . kari . re . kr > rewrite: ruleset 96 returns: cypark < @ viva . kari . re . kr . > rewrite: ruleset 3 returns: cypark < @ viva . kari . re . kr . > rewrite: ruleset 0 input: cypark < @ viva . kari . re . kr . > rewrite: ruleset 98 input: cypark < @ viva . kari . re . kr . > rewrite: ruleset 98 returns: cypark < @ viva . kari . re . kr . > rewrite: ruleset 0 returns: $# local $: @ cypark rewrite: ruleset 97 returns: $# local $: @ cypark rewrite: ruleset 0 returns: $# local $: @ cypark > > 0 cypark@garam.kreonet.re.kr ¢Ð Ÿ±â°üÀÇ address rewrite: ruleset 0 input: cypark @ garam . kreonet . re . kr rewrite: ruleset 98 input: cypark @ garam . kreonet . re . kr rewrite: ruleset 98 returns: cypark @ garam . kreonet . re . kr rewrite: ruleset 97 input: cypark @ garam . kreonet . re . kr rewrite: ruleset 3 input: cypark @ garam . kreonet . re . kr rewrite: ruleset 96 input: cypark < @ garam . kreonet . re . kr > rewrite: ruleset 96 returns: cypark < @ garam . kreonet . re . kr . > rewrite: ruleset 3 returns: cypark < @ garam . kreonet . re . kr . > rewrite: ruleset 0 input: cypark < @ garam . kreonet . re . kr . > rewrite: ruleset 98 input: cypark < @ garam . kreonet . re . kr . > rewrite: ruleset 98 returns: cypark < @ garam . kreonet . re . kr . > rewrite: ruleset 95 input: < > cypark < @ garam . kreonet . re . kr . > rewrite: ruleset 95 returns: cypark < @ garam . kreonet . re . kr . > rewrite: ruleset 0 returns: $# smtp $@ garam . kreonet . re . kr . $: cypark < @ garam . kreonet . re . kr . > rewrite: ruleset 97 returns: $# smtp $@ garam . kreonet . re . kr . $: cypark < @ garam . kreonet . re . kr . > rewrite: ruleset 0 returns: $# smtp $@ garam . kreonet . re . kr . $: cypark < @ garam . kreonet . re . kr . > > > 0 cypark@aaa.bitnet ¢Ð BITNET rewrite: ruleset 0 input: cypark @ aaa . bitnet rewrite: ruleset 98 input: cypark @ aaa . bitnet rewrite: ruleset 98 returns: cypark @ aaa . bitnet rewrite: ruleset 97 input: cypark @ aaa . bitnet rewrite: ruleset 3 input: cypark @ aaa . bitnet rewrite: ruleset 96 input: cypark < @ aaa . bitnet > rewrite: ruleset 96 returns: cypark < @ aaa . bitnet > rewrite: ruleset 3 returns: cypark < @ aaa . bitnet > rewrite: ruleset 0 input: cypark < @ aaa . bitnet > rewrite: ruleset 98 input: cypark < @ aaa . bitnet > rewrite: ruleset 98 returns: cypark < @ aaa . bitnet > rewrite: ruleset 95 input: < ibm3090 . snu . ac . kr > cypark < @ aaa . BITNET > rewrite: ruleset 95 returns: $# relay $@ ibm3090 . snu . ac . kr $: cypark < @ aaa . BITNET > rewrite: ruleset 0 returns: $# relay $@ ibm3090 . snu . ac . kr $: cypark < @ aaa . BITNET > rewrite: ruleset 97 returns: $# relay $@ ibm3090 . snu . ac . kr $: cypark < @ aaa . BITNET > rewrite: ruleset 0 returns: $# relay $@ ibm3090 . snu . ac . kr $: cypark < @ aaa . BITNET > > > 0 cypark%viva.kari.re.kr@mit.edu ¢Ð ¿ÜºÎ¿¡¼ ³»ºÎ·Î rewrite: ruleset 0 input: cypark % viva . kari . re . kr @ mit . edu rewrite: ruleset 98 input: cypark % viva . kari . re . kr @ mit . edu rewrite: ruleset 98 returns: cypark % viva . kari . re . kr @ mit . edu rewrite: ruleset 97 input: cypark % viva . kari . re . kr @ mit . edu rewrite: ruleset 3 input: cypark % viva . kari . re . kr @ mit . edu rewrite: ruleset 96 input: cypark % viva . kari . re . kr < @ mit . edu > rewrite: ruleset 96 returns: cypark % viva . kari . re . kr < @ mit . edu . > rewrite: ruleset 3 returns: cypark % viva . kari . re . kr < @ mit . edu . > rewrite: ruleset 0 input: cypark % viva . kari . re . kr < @ mit . edu . > rewrite: ruleset 98 input: cypark % viva . kari . re . kr < @ mit . edu . > rewrite: ruleset 98 returns: cypark % viva . kari . re . kr < @ mit . edu . > rewrite: ruleset 95 input: < > cypark % viva . kari . re . kr < @ mit . edu . > rewrite: ruleset 95 returns: cypark % viva . kari . re . kr < @ mit . edu . > rewrite: ruleset 0 returns: $# smtp $@ mit . edu . $: cypark % viva . kari . re . kr < @ mit . edu . > rewrite: ruleset 97 returns: $# smtp $@ mit . edu . $: cypark % viva . kari . re . kr < @ mit . edu . > rewrite: ruleset 0 returns: $# smtp $@ mit . edu . $: cypark % viva . kari . re . kr < @ mit . edu . > ###################################### ### Ruleset 0 -- Parse Address ### ###################################### S0 # resolve fake top level domains by forwarding to other hosts R$*<@$+.BITNET>$* $: $>95 < $B > $1 <@$2.BITNET> $3 user@host.BITNET R$*<@$+.CSNET>$* $: $>95 < $C > $1 <@$2.CSNET> $3 user@host.CSNET # next 6 lines are added -- cypark 95/03/31 ¢Ð ÇÊ¿ä½Ã ´ÙÀ½°ú °°ÀÌ ¹Ù²Û´Ù R$*<@karic2.$D.>$* $#local $: $1 forwared from karic2 to viva R$*<@$->$* $#smtp $@ $2.$j $: $1 < @ $2.$j > user@host R$*<@$+.$j>$* $#smtp $@ $2.$j $: $1 < @ $2.$j > $3 R$*<@$+.kaist.ac.kr>$* $: $>95 < $R > $1 <@$2.kaist.ac.kr> $3 R$*<@$+.andong.ac.kr>$* $: $>95 <ercc.snu.ac.kr > $1<@$2.andong.ac.kr>$3 # if you are using relay host, next line is uncomment #R$*<@$*>$* $: $>95 < $R > $1 <@$2> $3 relayed > 0 cypark@abc.andong.ac.kr ¢Ð ruleset 0¿¡¼ ¹Ù²Û °á°ú rewrite: ruleset 0 input: cypark @ abc . andong . ac . kr rewrite: ruleset 98 input: cypark @ abc . andong . ac . kr rewrite: ruleset 98 returns: cypark @ abc . andong . ac . kr rewrite: ruleset 97 input: cypark @ abc . andong . ac . kr rewrite: ruleset 3 input: cypark @ abc . andong . ac . kr rewrite: ruleset 96 input: cypark < @ abc . andong . ac . kr > rewrite: ruleset 96 returns: cypark < @ abc . andong . ac . kr > rewrite: ruleset 3 returns: cypark < @ abc . andong . ac . kr > rewrite: ruleset 0 input: cypark < @ abc . andong . ac . kr > rewrite: ruleset 98 input: cypark < @ abc . andong . ac . kr > rewrite: ruleset 98 returns: cypark < @ abc . andong . ac . kr > rewrite: ruleset 95 input: < ercc . snu . ac . kr > cypark < @ abc . andong . ac . kr > rewrite: ruleset 95 returns: $# relay $@ ercc . snu . ac . kr $: cypark < @ abc . andong . ac. kr > rewrite: ruleset 0 returns: $# relay $@ ercc . snu . ac . kr $: cypark < @ abc . andong . ac. kr > rewrite: ruleset 97 returns: $# relay $@ ercc . snu . ac . kr $: cypark < @ abc . andong . ac. kr > rewrite: ruleset 0 returns: $# relay $@ ercc . snu . ac . kr $: cypark < @ abc . andong . ac. kr > >
step 1 : uncompress popper-1.831beta.tar.Z tar xvf popper-1.831beta.tar step 2 : Makefile ${TARGET} : ${OBJS} cc ${OBJS} -o ${TARGET} -lresolv step 3 : compile & install make make install step 4 : /etc/service pop 110/tcp pop2 109/tcp step 5 : /etc/inetd.conf pop tcp nowait root /usr/etc/popper popper pop2 tcp nowait root /usr/etc/popper popper step 6 : inetd daemon restart $ kill -1 `ps t"?" | grep inetd` $ inetd
Step 1 : uncompress qpop2.1.4-r3.tar.Z tar xvf qpop2.1.4-r3.tar Step 2 : popper.h and make.xxx parameter Step 3 : compile make sunos popper.sunos(O/S popper.xxx) Step 4 : install cp popper.sunos /usr/etc/popper Step 5 : popper1.83 Step 4
$ telnet localhost 110 Connected to localhost Escape character is '^[' +OK UCB POP Server (Version 1.831beta) at viva starting user cypark +OK password requird for cypark pass xxxx +OK cypark has 0 message(s) (0 octets) quit
step 1 : /etc/syslog.conf local0.notice, local0.debug /usr/spool/mqueue/POPlog step 2 : POPlog touch /usr/spool/mqueue/POPlog step 3 : Syslog daemon restart $ kill -1 `ps t"?" | grep syslogd` $ syslogd
+---------------+-----------------------+-----------------------------------+ | Command | Syntax | Meaning | +---------------+-----------------------+-----------------------------------+ | Define Macro | Dxvalue | set macro x to value | | Define Class | Ccword1 [word2].. | set class c to word1, word2.. | | | Fcfile | load class c from file | | Set Option | Oovalue | set option o to value | | Trusted Users | Tuser1 [user2].. | trusted users are user1 user2.. | | Set Precedence| Pname=number | set name to precedence number | | Define Mailer | Mname,{field=value} | define mailer name | | Define Header | H[?mflag?]name:format | set header format | | Set Ruleset | Sn | start ruleset number n | | Define Rule | Rlhs rhs comment | rewrite lhs pattern to rhs format | +---------------+-----------------------+-----------------------------------+
Required sendmail macros +--------+-------------------------------+------------------------------+ | Macro | Value assigned this macro | Example | +--------+-------------------------------+------------------------------+ | e | SMTP entry message | De$j Sendmail $v ready at $b | | j | site's official domain name | Dj$w.$D | | l | format of UNIX from line | DlFrom $g $d | | n | name used in error messages | DnMAILER-DAEMON | | o | set of operators in address | Do.:%\@!^=/ | | q | default sender address format | Dq$g$?x ($x)$. | +--------+-------------------------------+------------------------------+ DDkari.re.kr
+------+-----------------------------------------------------+ |Macro | Function | +------+-----------------------------------------------------+ | a | origination date in RFC822 format | | b | current date in RFC822 format | | c | hop count | | d | date in UNIX(ctime) format | | e | SMTP entry messages | | f | sender "from" address | | g | sender address relative to the recipient | | h | recipient host | | i | queue id | | j | "official" domain name for this site | | l | format of the UNIX from line | | n | name of the daemon(for error messages) | | o | set of "operators" in address | | p | sendmail's PID | | q | default format of sender address | | r | protocol used | | s | sender's hostname | | t | numeric representation of the current time | | u | recipient user | | v | version number of sendmail | | w | hostname of this site | | x | full name of the sender | | z | home directory of the recipient | +------+-----------------------------------------------------+ Dwgaram DDkreonet.re.kr Dj$w.$D
array of values
used for anything with multiple values, such as multiple names for the local host or list of UUCP hostname
CVbronson ora Fw/etc/sendmail.cwThe Set Option Command( O )
internal options set inside the sendmail.cf file
string, integer, boolean, time interval
OA/etc/aliases OH/usr/lib/sendmail.hf OF0600 OT3dDefining Trusted Users ( T )
users who are permitted to override the sender name using -f flag
must be valid user name from the /etc/passwd file
OTroot OTdaemon uucp OTcyparkDefining Mail Precedence ( P )
assign priority to message entering its queue
higher number means high precedence
default value is zero
negative number indicate especially low priority mail
Pfirst-class=0 Pspecial-delivery=100 Pjunk=-100Defining Mail Headers ( H )
optional head flag enclosed in question marks, a header name, a colon and a header template
H?P?Return-Path: <$g> HReceived: $?sfrom $s $.by $j ($v/$Z) H?D?Recent-Date: $a H?D?Date: $a H?F?Recent-From: $q H?F?From: $q H?x?Full-Name: $x HSubject: H?M?Recent-Message-Id: <$t.$i@$j> H?M?Message-Id: <$t.$i@$j>Defining Mailers ( M )
mail delivery programs used by sendmail
Mailer Definition Fields +-------+-----------+----------------------------------+-------------+ | Field | Meaning | Contents |Example | +-------+-----------+----------------------------------+-------------+ | P | Path | path of the mailer |P=/bin/mail | | F | Flags | sendmail flags for this mailer |F=lsDFMe | | S | Sender | ruleset for sender address |S=10 | | R | Recipient | ruleset for recipient address |R=20 | | A | Argv | the mailer's argument vector |A=sh-c $u | | E | Eol | end-of-line string for the mailer|E=\r\n | | M | Maxsize | Maximum message length |M=100000 | +-------+-----------+----------------------------------+-------------+Defining Mailers ()
Sendmail Mailer Flag +-----+---------------------------------------------------------------+ |Name | Function | +-----+---------------------------------------------------------------+ | C | add @domain to address that do not have an @ | | D | the mailer wants a Date: header line | | E | add > to message lines that begin with From: | | e | this is an expensive mailer, see sendmail option c | | F | the mailer wants a From: header line | | f | the mailer accepts a -f flag from trusted users | | h | preserve uppercase in hostnames | | I | the mailer will be speaking SMTP to another sendmail | | L | limit the line lengths are as specified in RFC821 | | l | this is a local mailer | | M | this mailer wants a Message-Id: header line | | m | the mailer can send to multiple users in one transaction | | n | don't insert a UNIX-style From: line in the message | | P | the mailer wants a Return-Path: line | | R | use the MAIL From: return path rather than the return address | | r | the mailer accepts a -r flag from trusted users | | S | don't reset the userid before calling the mailer | | s | strip quotes off of the address before calling the mailer | | U | the mailer wants Unix-style From: lines | | u | preserve uppercase in the usernames | | X | prepend a dot to lines beginning with a dot | | x | the mailer wants a Full-Name: header line | +-----+---------------------------------------------------------------+ Mlocal, P=/bin/mail, F=rlsDFMmn, S=10, R=20, A=mail -d $uRewriting the Mail Address ( R )
rulesets are groups of individual rewrite rules used to phase e-mail address from user mail program and rewrite them into the form required by the mail delivery program
seperated by tab characters
a) Pattern Matching ( The Left Hand Side ) Pattern Matching Symbols +---------+-----------------------------------------------------------+ | Symbol | Meaning | +---------+-----------------------------------------------------------+ | $* | match zero or more tokens | | $+ | match one or more tokens | | $- | match exactly one token | | $=x | match any token in class x | | $~x | match any token not in class x | | $x | match all token in macro x | | $%x | match any token in NIS map named in macro x (Sun) | | $!x | match any token not in NIS map named in macro x (Sun) | | $%y | match any token in NIS hosts.byname map (Sun) | +---------+-----------------------------------------------------------+ cypark@garam.kreonet.re.kr | | $- @ $+ | | $1 @ $2 b) Transfomation the Address ( The Right Hand Side ) Transformation Metasymbols +---------------+------------------------------------------------+ | Symbol | Meaning | +---------------+------------------------------------------------+ | $x | expand macro x | | $n | substitute indefinite token n from LHS | | $>n | call ruleset n | | $#mailer | resolve to mailer | | $@ | terminate rewrite ruleset | | $: | terminate rewrite rule | | $[host$] | map to primary hostname | | ${x name$} | map name through yp map $x (Sun) | +---------------+------------------------------------------------+ input address : hunt@nbsenh.bitnet | | rewriting address: R$+<@$+.bitnet> $1%$2<@$B> | | address tocken: hunt<@nbsenh.bitnet> | | indefinite token: hunt nbsenh | | transformation $1 % $2 < @ $B> | | | rewritten address: hunt%nbsenh<@cunyvm.cuny.edu>Sendmail Command-line Arguments
+------------------+-------------------------------------------------+ | option | meaning | +------------------+-------------------------------------------------+ | -bd | run as a daemon | | -bt | run in test mode | | -bi | initialize the alias database | | -bp | print mail queue | | -bz | freeze the configuration file | | -q[time] | repeat at interval time | | -Cfile | use file as the configuration file | +------------------+-------------------------------------------------+