    CANONICAL(5)                                                      CANONICAL(5)

    NAME
           canonical - Postfix canonical table format

    SYNOPSIS
           postmap /etc/postfix/canonical

           postmap -q "string" /etc/postfix/canonical

           postmap -q - /etc/postfix/canonical <inputfile

    DESCRIPTION
           The  optional canonical(5) table specifies an address map-
           ping for local and non-local  addresses.  The  mapping  is
           used  by the cleanup(8) daemon, before mail is stored into
           the queue.  The address mapping is recursive.

           Normally, the canonical(5) table is specified  as  a  text
           file  that serves as input to the postmap(1) command.  The
           result, an indexed file in dbm or db format, is  used  for
           fast  searching  by  the  mail system. Execute the command
           "postmap /etc/postfix/canonical"  to  rebuild  an  indexed
           file after changing the corresponding text file.

           When  the  table  is provided via other means such as NIS,
           LDAP or SQL, the same lookups are  done  as  for  ordinary
           indexed files.

           Alternatively,  the  table  can  be provided as a regular-
           expression map where patterns are given as regular expres-
           sions,  or lookups can be directed to TCP-based server. In
           those cases, the lookups are done in a slightly  different
           way  as  described below under "REGULAR EXPRESSION TABLES"
           or "TCP-BASED TABLES".

           By default the canonical(5) mapping affects  both  message
           header  addresses  (i.e. addresses that appear inside mes-
           sages) and message envelope addresses  (for  example,  the
           addresses  that  are used in SMTP protocol commands). This
           is controlled with the canonical_classes parameter.

           NOTE: Postfix versions 2.2 and later rewrite message head-
           ers  from  remote  SMTP clients only if the client matches
           the  local_header_rewrite_clients  parameter,  or  if  the
           remote_header_rewrite_domain configuration parameter spec-
           ifies a non-empty value. To get the behavior before  Post-
           fix    2.2,    specify   "local_header_rewrite_clients   =
           static:all".

           Typically, one would use the canonical(5) table to replace
           login   names   by  Firstname.Lastname,  or  to  clean  up
           addresses produced by legacy mail systems.

           The canonical(5) mapping is not to be confused  with  vir-
           tual  alias  support or with local aliasing. To change the
           destination but not the headers,  use  the  virtual(5)  or
           aliases(5) map instead.

    CASE FOLDING
           The  search  string is folded to lowercase before database
           lookup. As of Postfix 2.3, the search string is  not  case
           folded  with database types such as regexp: or pcre: whose
           lookup fields can match both upper and lower case.

    TABLE FORMAT
           The input format for the postmap(1) command is as follows:

           pattern address
                  When  pattern matches a mail address, replace it by
                  the corresponding address.

           blank lines and comments
                  Empty lines and whitespace-only lines are  ignored,
                  as  are  lines whose first non-whitespace character
                  is a `#'.

           multi-line text
                  A logical line starts with non-whitespace  text.  A
                  line  that starts with whitespace continues a logi-
                  cal line.

    TABLE SEARCH ORDER
           With lookups from indexed files such as DB or DBM, or from
           networked  tables  such  as NIS, LDAP or SQL, patterns are
           tried in the order as listed below:

           user@domain address
                  Replace user@domain by address. This form  has  the
                  highest precedence.

                  This  is  useful  to clean up addresses produced by
                  legacy mail systems.  It can also be used  to  pro-
                  duce  Firstname.Lastname  style  addresses, but see
                  below for a simpler solution.

           user address
                  Replace user@site by address when site is equal  to
                  $myorigin,  when  site is listed in $mydestination,
                  or  when  it  is  listed  in  $inet_interfaces   or
                  $proxy_interfaces.

                  This  form  is  useful for replacing login names by
                  Firstname.Lastname.

           @domain address
                  Replace other addresses in domain by address.  This
                  form has the lowest precedence.

                  Note:  @domain  is  a  wild-card. When this form is
                  applied to recipient addresses,  the  Postfix  SMTP
                  server  accepts  mail  for any recipient in domain,
                  regardless of whether that recipient exists.   This
                  may  turn  your  mail  system  into  a  backscatter
                  source: Postfix first accepts mail for non-existent
                  recipients  and  then  tries to return that mail as
                  "undeliverable" to the often forged sender address.

    RESULT ADDRESS REWRITING
           The lookup result is subject to address rewriting:

           o      When  the  result  has  the  form @otherdomain, the
                  result becomes the same user in otherdomain.

           o      When "append_at_myorigin=yes", append  "@$myorigin"
                  to addresses without "@domain".

           o      When "append_dot_mydomain=yes", append ".$mydomain"
                  to addresses without ".domain".

    ADDRESS EXTENSION
           When a mail address localpart contains the optional recip-
           ient  delimiter  (e.g., user+foo@domain), the lookup order
           becomes: user+foo@domain, user@domain, user+foo, user, and
           @domain.

           The   propagate_unmatched_extensions   parameter  controls
           whether an unmatched address extension  (+foo)  is  propa-
           gated to the result of table lookup.

    REGULAR EXPRESSION TABLES
           This  section  describes how the table lookups change when
           the table is given in the form of regular expressions. For
           a  description  of regular expression lookup table syntax,
           see regexp_table(5) or pcre_table(5).

           Each pattern is a regular expression that  is  applied  to
           the entire address being looked up. Thus, user@domain mail
           addresses are not broken up into their  user  and  @domain
           constituent parts, nor is user+foo broken up into user and
           foo.

           Patterns are applied in the order as specified in the  ta-
           ble,  until  a  pattern  is  found that matches the search
           string.

           Results are the same as with indexed  file  lookups,  with
           the  additional feature that parenthesized substrings from
           the pattern can be interpolated as $1, $2 and so on.

    TCP-BASED TABLES
           This section describes how the table lookups  change  when
           lookups are directed to a TCP-based server. For a descrip-
           tion of the TCP client/server lookup protocol, see tcp_ta-
           ble(5).  This feature is not available up to and including
           Postfix version 2.4.

           Each lookup operation uses the entire address once.  Thus,
           user@domain  mail  addresses  are not broken up into their
           user and @domain constituent parts, nor is user+foo broken
           up into user and foo.

           Results are the same as with indexed file lookups.

    BUGS
           The  table format does not understand quoting conventions.

    CONFIGURATION PARAMETERS
           The following main.cf parameters are especially  relevant.
           The  text  below  provides  only  a parameter summary. See
           postconf(5) for more details including examples.

           canonical_classes
                  What addresses are  subject  to  canonical  address
                  mapping.

           canonical_maps
                  List of canonical mapping tables.

           recipient_canonical_maps
                  Address  mapping  lookup  table  for  envelope  and
                  header recipient addresses.

           sender_canonical_maps
                  Address  mapping  lookup  table  for  envelope  and
                  header sender addresses.

           propagate_unmatched_extensions
                  A  list  of  address rewriting or forwarding mecha-
                  nisms that propagate an address extension from  the
                  original  address  to  the result.  Specify zero or
                  more  of  canonical,   virtual,   alias,   forward,
                  include, or generic.

           Other parameters of interest:

           inet_interfaces
                  The  network  interface  addresses that this system
                  receives mail on.  You need to stop and start Post-
                  fix when this parameter changes.

           local_header_rewrite_clients
                  Rewrite message header addresses in mail from these
                  clients and update incomplete  addresses  with  the
                  domain name in $myorigin or $mydomain; either don't
                  rewrite message headers from other clients at  all,
                  or  rewrite  message  headers and update incomplete
                  addresses  with  the  domain   specified   in   the
                  remote_header_rewrite_domain parameter.

           proxy_interfaces
                  Other interfaces that this machine receives mail on
                  by way of a proxy agent or network address transla-
                  tor.

           masquerade_classes
                  List  of  address  classes subject to masquerading:
                  zero or more of  envelope_sender,  envelope_recipi-
                  ent, header_sender, header_recipient.

           masquerade_domains
                  List  of  domains  that hide their subdomain struc-
                  ture.

           masquerade_exceptions
                  List of user names that are not subject to  address
                  masquerading.

           mydestination
                  List  of  domains  that  this mail system considers
                  local.

           myorigin
                  The domain that is appended to locally-posted mail.

           owner_request_special
                  Give special treatment to owner-xxx and xxx-request
                  addresses.

           remote_header_rewrite_domain
                  Don't rewrite message headers from  remote  clients
                  at all when this parameter is empty; otherwise, re-
                  write message  headers  and  append  the  specified
                  domain name to incomplete addresses.

    SEE ALSO
           cleanup(8), canonicalize and enqueue mail
           postmap(1), Postfix lookup table manager
           postconf(5), configuration parameters
           virtual(5), virtual aliasing

    README FILES
           DATABASE_README, Postfix lookup table overview
           ADDRESS_REWRITING_README, address rewriting guide

    LICENSE
           The Secure Mailer license must be  distributed  with  this
           software.

    AUTHOR(S)
           Wietse Venema
           IBM T.J. Watson Research
           P.O. Box 704
           Yorktown Heights, NY 10598, USA

                                                                      CANONICAL(5)