Subject : sendmail.cf file

Description :


1. sendmail.cf file 소개

* sendmail 의 수행은 주로 구동시에 configuration file 에 의해 통제된다.
  이 화일이 하는일은 
  1) 매크로 정의 해석 
  2)클래스 정의 해석 
  3) optios 해석
  4) precedence 정의 해석, 
  5) trusted users. 
  6) header 선언해석
  7) rewriting rules. 8) mailer 해석.

* 한 line 의 오직  첫번째 character 가 command type 을 결정한다.
 (Macro, Class, Rewriting Rules, Mailer, etc.)
  EX:DnMailer-Daemon

  D 은 macro define 을 나타내며 n 은 그 macro 의 이름이다.
  macro 는 변수를 정의할때에 사용된다. 
  Dmsvc.hei.co.kr 에서 mail domain name 을 정의하고 있다.

* Class 는 class type 의 variable 에게 여러값을 줄때 사용함.
  예를들면, Cm 은 incoming mail 을 위해, Dm 은 outgoing mail 을 위해 사용되며
  이것은 보내는 주소에 domain name 이 붙여져서 나간다.

* Rewriting Rules 은 하나의 mail address 로서 수행되는 명령.
  즉, sendmail 은 address 의 parsing 과 필요하면 이 address 를 다시쓸수있도록
  rewriting rule 을 사용한다. 이것은 sendmail.cf file  의 가장 중요한부분이며
  수정하기에 가장어려운 부분이다.
  functions 으로써 보여질수있는 몇개의 rewriting rules 가 있다.
  sendmail 은 rewriting rules 을 적절한  mailer 를 선택하기위해 사용한다.
  이것은 또한 sender 와 receiver address 를 다시쓰기위해서도 사용된다.
 (예를들면, user name 변경, internal machine name 숨김, domain name 정보 추가)

* Mailer 는 서로다른 rule set 을 통한 address 의 분석후에 호출되며 rule set 을
  통한 몇개의 추가적인 일이 수행된다.
  만약에  address 가 local 이면 local 이라는 하나의 mailer 가 호출된다.
  만약에 address 가 uucp style 이면, uucp mailer 가 호출된다. 
  특별한 mailer 인 error 는 해당 address 가 이해되지않을때에 호출된다.
  Mailer 는 sendmail.cf file 의 M column 의 첫번째 character 로서 분별된다.

  Ex:
  Mlocal, P=/bin/mail, F=flsSDFMmnP, S=10,R=20,A=mail -d $u

  설명:
  local - mailer 의 이름
  /bin/mail - program 의 위치
  mail -d $u  : -d $u argument 로 mail command 수행.
  F= : set 될 flag 정의. 부록참조.
  S= 보내는 주소에  적용될 rule sets
  R= 보내는 주소에  적용될 rule sets


2. Macros

  매크로는 변수를 정의할때 사용된다. 
  sendmail 은 pre-defined variables 과 user-defined variables 을 사용한다.
  만약 당신이 변수를 정의한다면 소문자를 쓰지마라, 왜냐하면 internal 변수로
  사용하기 때문이다.
  sendmail 은 또한 대문자로 M,R,L,G,V 를 내부적으로 사용한다.

  Ex: Built-in Macros used by sendmail internally.

  a : The origination date in ARPANET format
  b : The current date in ARPANET format
  c : hop count
  d : the date in UNIX format
  e : SMTP entry message
  f : sender(from) address
  g : sender name relative to the recipient
  h : recipient host
  i : queue ID
  j : official domainname of this site
  l : format of the UNIX Form line
  m : domainname 
  n : name of the daemon ( for error messages)
  o : the set of "separators" in named
  p : sendmail process ID
  q : Default format for sender names
  r : Protocol used
  s : Sender`s host name
  t : A numeric representation of the current time
  u : The recipient user
  v : version number of sendmail
  w : host name of this site
  x : full name of the sender
  z : home directory of the recipient

* 매크로 정의 : sendmail.cf 는 단순한 text file 이 아니라 하나의 프로그램이다.
 당신이 만약 프로그램을 짠다면 항상 field 를 선언할 필용가 있을것이다.
 이러한 field 는 초기화되고 수정되고, check 되고 test 된다.
 sendmail.cf 화일에 variables 는 이러한 목적으로 사용된다. 예를들면
 당신이 address 에 mail domain name 을 추가해야만된다면, macro m 이 사용된다.
 이것은 한번정의되면 당신이 원하는 만큼많이 사용된다.
 여기에 두가지 종류의 macro 를 정의하는 방법이 있다. : D 와 ㅣ command.

 1) D command : D command 는 하나의 macro variable 을 초기화 하는데 사용됨.
    Syntax: Dmstring ( m 은 한 character macro name, string 은 macro 변수)
    DMsvc.hei.co.kr

    예를들면 DRmailhost 는 macro R 변수에 mailhost 값을 할당. 
    #DR ddn-gateway

 2) L command : L command 는 하나의 macro variable 을 초기화 하는데 사용될수
    있다. command 상에 주어진 그 macro 의 값은 sendmailvars 라는
    database 에서 하나의 search key 로 사용된다.
    물론 sendmailvars 는 NIS+ 에 table 로 정의될수 있다.
    에를들면 Lmmaildomain 은 내부변수 m 을 search key 로서 maildomain 
    을 이용하여 sendmailvars database 에 서 발견되는 변수로 setting
    한다.만약 sendmailvars databae 가 maildomain Eng.Sun.COM 이면
    변수 m 은 Eng.Sun.COM 이 된다.

3) 매크로 의 참조.

  $x 표시는 하나의 변수를 확인할때 사용된다. rewriting rules 내에서 이것은
  testing 목적을 위해 사용된다. 우리는 나중에 rewriting rule 에서 볼수 있다.

  예: Dj$s.$m

  이것은 j 에 w 와 m 매크로의 concatenated 변수를 할당한다는 의미이다. 
  만약, w(hostname) 이 hyundai3 이고 m 이 svc.hei.co.kr 이면
  j 는 hyundai3.svc.hei.co.kr 이 된다.


3. Classes

  macro 는 유일한 변수와 관련이있다. 만약, 하나이상의 변수를 할당할 필요가 
  있으면 class 를 사용하라. 당신은 위에서 하나의 변수를 retrieve 하기위해 
  또는 그들의 초기화를 check 하기위해 macro 가 사용되는것을 보았다.
  예를들면 당신이 mail address  에서 명시된 host name 이 local 인지 아닌지를
  check  하고 싶으면 pre-defined class y 는 host database 에서 hosts 의
  list 를 포함하고 있다.

* 클래스 정의방법(C,F,G command)

  3-1) C command

  C command 는 명시된 값을 직접 할당한다.

  예: CC word1 word2 ..
  C는 하나의 character class name 이고 word 는 그 class 를 위한 value list 이다;

  3-2) F command

  F command 는 file 또는 다른 command 로 부터 value 를 읽는다.

  예: FC file ( FC /.rhosts : /.rhosts 의 내용을 class C 에 load)
  (FC | command ) ex: FC | awk '{print $2}' /etc/inet/hosts

  3-3) G command

  G command 는 sendmailvars database 에서 찾은 value 를 할당한다.

  예: GCkey_name : C 는 class name, key_name 은 sendmailvars 의 search key.
  GVuucp_list 는 sendmailvars database 에서 uucp_list 를 ckwdk 그 값을
  V 에 할당. 예를 들면 sendmailvars 에 uucp-list 가 hyundai3 이면 V 의
  값은 hyundai3 이된다.

  3-4) Class 의 참조

  class type 의 변수는  address 의 testing 을 위해서 적절하다. 
  다음은 하나의 class 로써 당신 이 수행할수 있는 다른 operation 을 나타냄.

  $%x : Match any tocken in an NIS map or NIS+ table $x
  $!x : Match any tocken not in NIS map or NIS+ table Sx
  $=x : Match any tocken in class x
  $~x : Match any tocken not in class x

  $x 는 찾을 table 의 name 을 반환한다. 
  $%x 와 $!x 는 table 의 내용을 찾는다.
  이 네개의 symbol 은 rewriting rules 에 자주사용된다.

  Class y 는 host database 를 위해 reserve 되어있다.
  $%y 는 hosts.byname map 또는 /etc/host ( not NIS) 에서 어떤 hostname 을 반환.

  True answer(T) 는 $=x 에서 class x 에 그 string 이 있을때, $~x 는 없을때
  가각 True 이다. 예를들면, class v 가 모든 local machine 을 가진다고할때
  sendmail 이 class v 에서 주어진 value 와 email address 를 비교할때,
  sendmail 은 그 machine 이 주어진 address 에서 local 인지 아닌지를 
  확인할수 있어야 한다.

4. Rewriting Rules

  Address parsing 은 rewriting rules  에 의해 완성된다.
  이것은 간단한 pattern-matching 과 replacement system 에 사용되고
  rule sets 로서 구성된다.

* Rule Sets : A rule set is a set of rewriting rules.

  하나의 rule set 은 Sn line 으로 시작된다. 여기서 S 는 rule set 이고 n 은
  rule number 이다.
  각 rewriting rule line 은 하나의 program 에서의 code 의 한 line 과 같다.
  이것은 또한 그 rule set 내에서 순서적으로 수행된다.

  rewriting rule 은 입력 address 를 다른 string 으로 짤라서 input pattern 으로
  비교하고 하나의 match  가 발생하면 그 input 를 output pattern 으로
  재배치한다.
  다음의  재배치에 따라 그 process 는  no match or exit 조건을 만날때까지
  동일한 rewriting 를 반복한다.
  Strings  은 o macro 에 의해 명시된 delimiters 을 사용하여 구성된다.
  default o macro 는 Do.:%@!^=/[] 이다. o 뒤에 나오는 각 character 는 
  delimiter  이다.

  Syntax of a rule set: Sn ( n 에 분류될 현재 rule set 을 set  한다.)
  Syntax of a rewriting rule : Rlhs  rhs  comments

  lhs:(left-hand side) 는 input 에 적용될 pattern
  addresses 는 words 또는 tokens 로 나누어진다. 만약, lhs 가 match 되면
  input 은 rhs 로 rewrittne 된다. pattern 에 있어 metasymbols 이 사용됨.

  $* - Match zero or more tokens
  $+ - Match one or more tokens
  $- - Match exactly one tokens
  $=x  - Match any token in class x
  $~x  - Match any token in NIS map or NIS+ table $x
  $%x  - Match any token not NIS map or NIS+ table $x
  $!x  - Match any token not NIS map or NIS+ table $x
  $x  - Match macro x 

  rhs:(right-hand side) 는 address 를 다시 쓰는데 사용된다.


5. 표준 Rule Sets

  8 개의 pre-defined  rule set 이 있으며 특정한 순서에 따라 적용된다.
  이것은 sendmail.cf 에 순서에따라 적용되는것은 아니다.

  Rule Set3 : puts the address into the canonical form
  local-address@hostdomain.
  This rule is always executed first.

  Rule Set0 : determines what the destination is, and which mailer program
  to use to send it.

  Rule Set R :allows each mailer to specify an additional rule set
  to be applied on the sender addresses.

  Rule Set S : allows each mailer to specify an additional rule set to be
  applied on the sender addresses.

  Rule Set 4 : is applied last to all names in the message, usually from 
  internal to external form

  Rule Set D : adds sender domain information to addresses that have
  no domain

  Rule Set 1 : is applied to all From: addresses.
  This rule set is generally empty(no associated rewriting rules)

  Rule Set 2 : is applied to all To: and Cc: lines.
  This rule set is generally empty(no associated rewriting rules)


Revision History

작성일자 : 96.09.05
작성자 : 이승훈

수정일자 :
수정자 :