Konfig im Detail
----------------

# Welche Konfiguration wird eingelesen?

    > exim -bV | tail -n 1
    TODO: exim -be '$configure_file'

    > exim -bP configure_file

# Wann wird die Konfiguration eingelesen?

    - Klar - beim Start
    - Aber - wann wird gestartet?
        - Start Daemon
        - Signal HUP
        - re-exec for verschiedene Zwecke
    - Achtung: 
        - exim4.conf + .include ist "statisch"
        - lists, lookups, … "dynamisch"
    - Config-Parser: nur simple Syntax-Checks
    - trim, "de-comment"

# Syntax der Konfiguration

## Macros und …
    - Macros - Text-Ersatz während des Einlesens,
      ggf. bedingt über .ifdef
    - .include, .include_ifexists

    > exim -DFOO=bar -C <(echo primary_hostname = FOO) -bP primary_hostname

## Options
    - statische Namen
    - benamste Listen
    - Instanzen von Routern, Transports, ..

## Values

### bool
    Format: true|yes|false|no
        <option>          eg: split_spool_directory
        no_<option>       eg: no_split_spool_directory
        not_<option>      eg: not_split_spool_directory


    +---------------------+---------+-------------+--------------+
    |split_spool_directory|Use: main|Type: boolean|Default: false|
    +---------------------+---------+-------------+--------------+
    > exim -C <(echo split_spool_directory = no) -bP split_spool_directory


### integer:
    Format: <n>[<suffix>]     eg: 27M
           0<n>[<suffix>]     eg: 01000M
          0x<n>[<suffix>]     eg: 0xFFFFK
        suffix: k|m

    +-----------------+---------+-------------+----------+
    |check_spool_space|Use: main|Type: integer|Default: 0|
    +-----------------+---------+-------------+----------+
    > exim -C <(echo check_spool_space = 01000M) -bP check_spool_space

### fixed-point
    Format: <i>[.d[d[d]]]     eg: 0.234

    +----------------------+---------+-----------------+--------------+
    |deliver_queue_load_max|Use: main|Type: fixed-point|Default: unset|
    +----------------------+---------+-----------------+--------------+
    > exim -C <(echo deliver_queue_load_max = 3.3) -bP deliver_queue_load_max

### time intervals
    Format: n<suffix>...      eg: 2w3d
            suffix: s|m|h|d|w

    +---------+---------+----------+-----------+
    |auto_thaw|Use: main|Type: time|Default: 0s|
    +---------+---------+----------+-----------+
    > exim -C <(echo auto_thaw = 1w7s) -bP auto_thaw

### strings
    Fromat: <string>           eg: localhost
            <"string">         eg: " A\x42C"

    Quoting für \\, \n, \r, \t, \ddd, \xdd und führende oder baumelnde Spaces

    - Vorsicht: Expansion
    - Vorsicht: User/Groups

    +----------------+---------+------------+------------------+
    |primary_hostname|Use: main|Type: string|Default: see below|
    +----------------+---------+------------+------------------+
    > exim -C <(echo 'primary_hostname = a\x41b')   -bP primary_hostname
    > exim -C <(echo 'primary_hostname = "a\x41b"') -bP primary_hostname

    Steuerzeichen werden für die Ausgabe escaped:
    > exim -C <(echo 'primary_hostname = "a\x091b"') -bP primary_hostname


### Lists
    Format: <item>:…            eg:   a:b:c:d vs. a:b::c:d
                                eg:   :   -> ein leeres Element
        [<<sep> <item><sep>…]   eg:   <, a,b,c

      - leere Felder am Ende werden „gestrippt“
      - Whitespace der Felder wird gestrippt
      - leeres Feld in der Mitte: a: :b
      - leeres Felder am Anfang bleibt
      - "Escapen" des Listentrenners durch Verdoppeln

      a : b::c : d -> (a) (b:c) (d)

    > exim -be '${map{:a:b:c,}{<$item>}}'
    > exim -be '${map{<,,a,b,c,}{<$item>}}'

    > exim -C <(echo domainlist local_domains = 'a:b::c:d') -be '${listnamed:local_domains}'


### Regexp
    Format ^…

    Beginnt mit ^, damit es sich von einem normalen String unterscheidet!
    Achtung, Backslash ggf. vom String-Expander gefressen,
    hauptsächlich in Listen, die RE enthalten dürfen

    Ggf. mit \N..\N 

## Lookups

    - 2 Syntaxen
    - 2 Types
    => 4 Varianten

### Syntax 1: explizit - der Key oder die Frage wird ausdrücklich formuliert
              es ist ein String-Expansion. s.u.

    ${lookup{<key>}<type>{file}}    eg: ${lookup{$domain}dsearch{/etc/exim4/domains}}
    ${lookup <type> {<query>}}      eg: ${lookup ldap {ldap:///o=roka?mail?sub?uid=${quote_ldap:$local_part}}}

    Liefert eine Liste zurück, ggf. Listentrenner unorthodox und muss massiert werden

### Syntax 2: implizit - der Key ergibt sich aus dem Kontext
              keine Stringexpansion, sondern ein Element für sich


    <type>;<file>                   eg: domains = dsearch;/etc/exim4/domains
    <type>;<query>                  eg: domains = sqlite;/etc/db.sqlite SELECT … WHERE ${quote_sqlite:$local_part} …
                                        domains = ldap;ldap:///o=roka?mail?sub?…

    - Auffindes des "impliziten" Keys
    - Query: Success der Query ist entscheidend, nicht der Resultat-Wert
    - Achtung: In einer Liste ggf. an den Listentrenner denken!
               domains = ldap;ldap::///o=…

### Style 1: Single Key

    ${lookup{<key>}<type>{<file>}   eg: ${lookup{$sender_host_address}iplsearch{/etc/exim4/blacklist}}
    <type>;<file>                   eg: hosts = iplsearch;/etc/exim4/blacklist

    <type> ist dann lsearch, dsearch, iplsearch, …
    
### Style 2: Query Style

    ${lookup <type> {<query>}}      eg: ${lookup dnsdb{mxh=roka.net}}
    <type>;<query>                  eg: dnsdb;mxh=roka.net


    Matrix

        style|  single key                    | query style
    syntax  \|                                |
    ---------+--------------------------------+---------------------------
    explicit |  ${lookup{<key>}<type>{<file>} | ${lookup <type> {<query>}}
    implizit |  <type>;<file>                 | [ <type>;<query> ]


    eg. config:

    domains = ${lookup{$domain}lsearch{/etc/exim4/local_domains}}   # WRONG
            = <\n ${lookup mysql { SELECT domain FROM domains }}    # BETTER
            = ${lookup mysql { SELECT DISTINCT(domain) FROM domains WHERE domain = $domain}} # ggf BEST
    vs
    domains = lsearch;/etc/exim4/local_domains                      # OK


## Named Lists
   Format: <listtype> <name>
           <listtype>_cache <name>
           Bezug: +<name>

    Typen: domainlist, hostlist, addresslist, localpartlist
    Caching nur wenn die RHS keine '$' enthält, also konstante Ergebnisse zu erwarten sind.

    Jeder Listtyp hat seine Eigenarten.

    > exim -bP +<name>

### domainlist

    domainlist - @, @mx_primary, @mx_secondary, @mx_any, <pattern>, lookup, literal
    hostlist   - Namen, Adressen spec(10.11 ff)


## String-Expansion

    - von links nach rechts: $ und \ wirken als Trigger

    > exim -be [<string>]
    > exim -bem <message-file> [<string>]
    > exim -be -Mset <spool-id> [<string>]

    eg: exim -be '$primary_hostname'
        exim -be '$tod_full'
        exim -bem <(echo 'Subject: Hi') '$h_subject:'

    Expansionen liefern neuen Text zurück oder können „forced expansion failure“
    bewirken

## Expansions-Items

### Variablen
    Format: $<variable>           eg: $localhost_number
            ${<variable>}     

### Operatoren
    Format: ${<op>:<string>}
    Für einfache Expansionen, lc, uc, hash, …

### Funktionen
    Format ${<function>{string1}...}

# Debugging

## Konfiguration
   
   - > exim -bV

## Routing / Transport

    > exim -bt  <address>
    > exim -bts <address>

    > exim -bv  <address>
    > exim -bvs <address>

    Routing, Fake-Delivery
    > exim -N < <message-file>

    Fake-SMTP-Session
    > exim -bh <sender-ip>
    > swaks --pipe 'exim -bh <sender-ip>' -f <sender> -t <rcpt>
    
   - debug_print Option für Router und Transports


### Minimalkonfiguration

       .-[ m.conf ]-------- {{{
       |exim_user = exim
       |spool_directory = /tmp/exim-spool
       |log_file_path = 
       |
       |begin routers
       |
       |    default:
       |        driver = accept
       |        transport = null
       |        no_more
       |
       |begin transports
       |
       |    null:
       |        driver = appendfile
       |        file = /dev/null
       `-------------        }}}


# Routing

  - Preconditions
  - Driver und Driver-Options
    Result: - accept  -> DONE (transport oder neue Adresse)
            - pass    -> pass_router (bzw. nächster Router)
            - decline -> nächster Router (or fail, wenn no_more)
            - fail    -> DONE (bounce)
            - defer   -> Semi-DONE (re-queue)
            - error   -> wie defer

# Hint-Databases
  
  liegen in $spool_directory/db
  - retry
  - wait-<transport>
  - callout
  - ratelimit
  - misc

  Sind verzichtbar!

## Wartung

### Ansehen

  > exim_dumpdb <spool_dir> <db>
  eg: exim_dumpdb /var/spool/exim4 

  Je nach DB unterschiedliches Format

### Verändern

  Aufräumen
  > exim_tidyb <spool_dir> <db> (Cronjob)

  Reparieren
  > exim_fixdb <spool_dir> <db>

  … that's it …

# Acess Control Lists

    acl_not_smtp       ACL for non-SMTP messages
    acl_not_smtp_mime  ACL for non-SMTP MIME parts
    acl_not_smtp_start ACL at start of non-SMTP message
    acl_smtp_auth      ACL for AUTH
    acl_smtp_connect   ACL for start of SMTP connection
    acl_smtp_data      ACL after DATA is complete
    acl_smtp_data_prdr ACL for each recipient, after DATA is complete
    acl_smtp_etrn      ACL for ETRN
    acl_smtp_expn      ACL for EXPN
    acl_smtp_helo      ACL for HELO or EHLO
    acl_smtp_mail      ACL for MAIL
    acl_smtp_mailauth  ACL for the AUTH parameter of MAIL
    acl_smtp_mime      ACL for content-scanning MIME parts
    acl_smtp_notquit   ACL for non-QUIT terminations
    acl_smtp_predata   ACL at start of DATA command
    acl_smtp_quit      ACL for QUIT
    acl_smtp_rcpt      ACL for RCPT
    acl_smtp_starttls  ACL for STARTTLS
    acl_smtp_vrfy      ACL for VRFY

    acl_<hook> = <aclverb> | <filename> | <acl-name>
                 
    eg: acl_smtp_rcpt = acl_check_rcpt
        acl_smtp_rcpt = acl_check_rcpt_${primary_hostname}

## Policies

### acl_smtp_rcpt
 
    Abweisung einzelner Empfänger, noch kein Content!

### acl_smtp_data

    Content-Scan. Nicht mehr für einzelne Empfänger,
    $local_part, $domain steht nicht mehr zur Verfügung,
    aber $recpients, $rcpt_count, …

## Return-Values

    - accept
    - defer
    - deny
    - discard

    default: "accept", ausser bei acl_smtp_rcpt, dort ist es "deny"
    implizit "deny" am Ende jeder ACL!


## Test

   > exim -bh <ip>  # ohne callouts
   > exim -bhc <ip> # mit callouts
   > swaks --pipe 'exim -bh <ip> -C <config>' -f <sender> -t <rcpt>

   exim -N hilft nicht, ist nicht für die SMTP acl
   relevant!

## Format

   <aclverb>    [<condition>]
                …
                [<modifier]

   Bedingungen müssen erfüllt sein, Order matters, Abbruch
   bei nicht erfüllter Bedingung! Modifier sind immer "true"

### Verb

   accept, defer, deny, discard, drop, require, warn

### Modifier

    message = [code] text
    log_message = text

    Immediate:
        logwrite      = …
        control       = …
        set           = …
        add_header    = …
        remove_header = …
        delay         = …

### Conditions

    <condition> = <value>

        eg: deny  hosts = !192.168.3.8  # neg. Liste
            deny !hosts = 192.168.3.8   # neg. Resultat

        vs: deny !verify = recipient    # works
            deny  verify = !recipient   # FALSCH


    Wert der Condition und von Modifiern wird expandiert.
    Force Failure bedeutet: Condition war nicht anwesend!

    Reihenfolge ist wichtig! Short Circuit.
    Position der Modifier ist wichtig!



# DNS Lookups

## DNSSEC
  dns_dnssec_ok = 1

  dnslookup.dnssec_require_domains =        # leider noch falsche Syntax
       smtp.dnssec_require_domains =        # leider noch falsche Syntax
  dnslookup.dnssec_request_domains =        # leider noch falsche Syntax
       smtp.dnssec_request_domains =        # leider noch falsche Syntax

# Anhang

## Misc

    Spec.txt durchsuchen (less):
    - Option         /^.<option>         eg: |exim_user|
    - Variable       /^\$<variable       eg: $localhost_number
    - Operators:     /^\$\{<operator>:   eg: ${hash:<string>} …
    - Condition:     /^<condition> \{    eg: eq {<string1>}{<string2>} …
    - Functions:     /^\$\{<function\{   eg: ${map{<string1>}{<string2>}} …
    - ACL conditions /^<condition> =     eg: malware = …

// Die folgenden Listen sind durch einfaches Greppen im Spec-File bzw. 
// im spec.xfpt enstanden, also weder vollständig noch zwingend korrekt!

## Liste globaler Optionen {{{

    accept_8bitmime
    acl_not_smtp
    acl_not_smtp_mime
    acl_not_smtp_start
    acl_smtp_auth
    acl_smtp_connect
    acl_smtp_data
    acl_smtp_data_prdr
    acl_smtp_etrn
    acl_smtp_expn
    acl_smtp_helo
    acl_smtp_mail
    acl_smtp_mailauth
    acl_smtp_mime
    acl_smtp_predata
    acl_smtp_quit
    acl_smtp_rcpt
    acl_smtp_starttls
    acl_smtp_vrfy
    admin_groups
    allow_domain_literals
    allow_mx_to_ip
    allow_utf8_domains
    auth_advertise_hosts
    auto_thaw
    av_scanner
    bi_command
    bounce_message_file
    bounce_message_text
    bounce_return_body
    bounce_return_message
    bounce_return_size_limit
    bounce_sender_authentication
    callout_domain_negative_expire
    callout_domain_positive_expire
    callout_negative_expire
    callout_positive_expire
    callout_random_local_part
    check_log_inodes
    check_log_space
    check_rfc2047_length
    check_spool_inodes
    check_spool_space
    daemon_smtp_ports
    daemon_startup_retries
    daemon_startup_sleep
    delay_warning
    delay_warning_condition
    deliver_drop_privilege
    deliver_queue_load_max
    delivery_date_remove
    disable_fsync
    disable_ipv6
    dns_again_means_nonexist
    dns_check_names_pattern
    dns_csa_search_limit
    dns_csa_use_reverse
    dns_dnssec_ok
    dns_ipv4_lookup
    dns_retrans
    dns_retry
    dns_use_edns0
    drop_cr
    dsn_from
    envelope_to_remove
    errors_copy
    errors_reply_to
    exim_group
    exim_path
    exim_user
    extra_local_interfaces
    finduser_retries
    freeze_tell
    gecos_name
    gecos_pattern
    gnutls_compat_mode
    header_line_maxsize
    header_maxsize
    headers_charset
    helo_accept_junk_hosts
    helo_allow_chars
    helo_lookup_domains
    helo_try_verify_hosts
    helo_verify_hosts
    hold_domains
    host_lookup
    host_lookup_order
    host_reject_connection
    hosts_connection_nolog
    hosts_treat_as_local
    ibase_servers
    ignore_bounce_errors_after
    ignore_fromline_hosts
    ignore_fromline_local
    keep_malformed
    ldap_ca_cert_dir
    ldap_ca_cert_file
    ldap_cert_file
    ldap_cert_key
    ldap_cipher_suite
    ldap_default_servers
    ldap_require_cert
    ldap_start_tls
    ldap_version
    local_from_check
    local_from_prefix
    local_from_suffix
    local_interfaces
    local_scan_timeout
    local_sender_retain
    localhost_number
    log_file_path
    log_selector
    log_timezone
    lookup_open_max
    max_username_length
    message_body_newlines
    message_body_visible
    message_id_header_domain
    message_id_header_text
    message_logs
    message_size_limit
    move_frozen_messages
    mua_wrapper
    mysql_servers
    never_users
    openssl_options
    oracle_servers
    percent_hack_domains
    perl_at_start
    perl_startup
    pgsql_servers
    pid_file_path
    pipelining_advertise_hosts
    prdr_enable
    preserve_message_logs
    primary_hostname
    print_topbitchars
    process_log_path
    prod_requires_admin
    qualify_domain
    qualify_recipient
    queue_domains
    queue_list_requires_admin
    queue_only
    queue_only_file
    queue_only_load
    queue_only_load_latch
    queue_only_override
    queue_run_in_order
    queue_run_max
    queue_smtp_domains
    receive_timeout
    received_header_text
    received_headers_max
    recipient_unqualified_hosts
    recipients_max
    recipients_max_reject
    remote_max_parallel
    remote_sort_domains
    retry_data_expire
    retry_interval_max
    return_path_remove
    return_size_limit
    rfc1413_hosts
    rfc1413_query_timeout
    sender_unqualified_hosts
    smtp_accept_keepalive
    smtp_accept_max
    smtp_accept_max_nonmail
    smtp_accept_max_nonmail_hosts
    smtp_accept_max_per_connection
    smtp_accept_max_per_host
    smtp_accept_queue
    smtp_accept_queue_per_connection
    smtp_accept_reserve
    smtp_active_hostname
    smtp_banner
    smtp_check_spool_space
    smtp_connect_backlog
    smtp_enforce_sync
    smtp_etrn_command
    smtp_etrn_serialize
    smtp_load_reserve
    smtp_max_synprot_errors
    smtp_max_unknown_commands
    smtp_ratelimit_hosts
    smtp_ratelimit_mail
    smtp_ratelimit_rcpt
    smtp_receive_timeout
    smtp_reserve_hosts
    smtp_return_error_details
    spamd_address
    split_spool_directory
    spool_directory
    sqlite_lock_timeout
    strict_acl_vars
    strip_excess_angle_brackets
    strip_trailing_dot
    syslog_duplication
    syslog_facility
    syslog_processname
    syslog_timestamp
    system_filter
    system_filter_directory_transport
    system_filter_file_transport
    system_filter_group
    system_filter_pipe_transport
    system_filter_reply_transport
    system_filter_user
    tcp_nodelay
    timeout_frozen_after
    timezone
    tls_advertise_hosts
    tls_certificate
    tls_crl
    tls_dh_max_bits
    tls_dhparam
    tls_ocsp_file
    tls_on_connect_ports
    tls_privatekey
    tls_remember_esmtp
    tls_require_ciphers
    tls_try_verify_hosts
    tls_verify_certificates
    tls_verify_hosts
    trusted_groups
    trusted_users
    unknown_login
    unknown_username
    untrusted_set_sender
    uucp_from_pattern
    uucp_from_sender
    warn_message_file
    write_rejectlog


    }}}

## Liste von Expansionsvariablen {{{

    $acl_narg
    $acl_verify_message
    $address_data
    $address_file
    $address_pipe
    $authenticated_fail_id
    $authenticated_id
    $authenticated_sender
    $authentication_failed
    $av_failed
    $body_linecount
    $body_zerocount
    $bounce_recipient
    $bounce_return_size_limit
    $caller_gid
    $caller_uid
    $compile_date
    $compile_number
    $demime_errorlevel
    $demime_errorlevel
    $demime_reason
    $demime_reason
    $dnslist_domain
    $domain
    $domain_data
    $exim_gid
    $exim_path
    $exim_uid
    $found_extension
    $found_extension
    $header_
    $headers_added
    $home
    $host
    $host_address
    $host_data
    $host_lookup_deferred
    $host_lookup_failed
    $host_port
    $inode
    $interface_address
    $interface_port
    $item
    $ldap_dn
    $load_average
    $local_part
    $local_part_data
    $local_part_prefix
    $local_part_suffix
    $local_scan_data
    $local_user_gid
    $local_user_uid
    $localhost_number
    $log_inodes
    $log_space
    $lookup_dnssec_authenticated
    $mailstore_basename
    $malware_name
    $max_received_linelength
    $message_age
    $message_body
    $message_body_end
    $message_body_size
    $message_exim_id
    $message_headers
    $message_headers_raw
    $message_id
    $message_linecount
    $message_size
    $mime_
    $mime_boundary
    $mime_charset
    $mime_content_description
    $mime_content_disposition
    $mime_content_id
    $mime_content_size
    $mime_content_transfer_encoding
    $mime_content_type
    $mime_decoded_filename
    $mime_filename
    $mime_is_coverletter
    $mime_is_multipart
    $mime_is_rfc822
    $mime_part_count
    $original_domain
    $original_local_part
    $originator_gid
    $originator_uid
    $parent_domain
    $parent_local_part
    $pid
    $pipe_addresses
    $primary_hostname
    $prvscheck_address
    $prvscheck_keynum
    $prvscheck_result
    $qualify_domain
    $qualify_recipient
    $rcpt_count
    $rcpt_defer_count
    $rcpt_fail_count
    $received_count
    $received_for
    $received_ip_address
    $received_port
    $received_protocol
    $received_time
    $recipient_data
    $recipient_verify_failure
    $recipients
    $recipients_count
    $regex_match_string
    $reply_address
    $return_path
    $return_size_limit
    $router_name
    $runrc
    $self_hostname
    $sender_address
    $sender_address_data
    $sender_address_domain
    $sender_address_local_part
    $sender_data
    $sender_fullhost
    $sender_helo_name
    $sender_host_address
    $sender_host_authenticated
    $sender_host_dnssec
    $sender_host_name
    $sender_host_port
    $sender_ident
    $sender_rate_
    $sender_rcvhost
    $sender_verify_failure
    $sending_ip_address
    $sending_port
    $smtp_active_hostname
    $smtp_command
    $smtp_command_argument
    $smtp_count_at_connection_start
    $spam_
    $spam_bar
    $spam_report
    $spam_score
    $spam_score_int
    $spool_directory
    $spool_inodes
    $spool_space
    $thisaddress
    $tls_in_bits
    $tls_in_certificate_verified
    $tls_in_cipher
    $tls_in_ocsp
    $tls_in_ourcert
    $tls_in_peercert
    $tls_in_peerdn
    $tls_in_sni
    $tls_out_bits
    $tls_out_certificate_verified
    $tls_out_cipher
    $tls_out_ocsp
    $tls_out_ourcert
    $tls_out_peercert
    $tls_out_peerdn
    $tls_out_sni
    $tod_bsdinbox
    $tod_epoch
    $tod_epoch_l
    $tod_full
    $tod_log
    $tod_logfile
    $tod_zone
    $tod_zulu
    $transport_name
    $value
    $verify_mode
    $version_number
    $warn_message_delay
    $warn_message_recipients

    }}}

## Liste von Operatoren {{{

    ${address:
    ${addresses:
    ${base62:
    ${base62d:
    ${domain:
    ${escape:
    ${eval:
    ${expand:
    ${from_utf8:
    ${hex2b64:
    ${hexquote:
    ${lc:
    ${listcount:
    ${listnamed:
    ${local_part:
    ${mask:
    ${md5:
    ${quote:
    ${quote_local_part:
    ${randint:
    ${reverse_ip:
    ${rfc2047:
    ${rfc2047d:
    ${rxquote:
    ${sha1:
    ${sha256:
    ${stat:
    ${str2b64:
    ${strlen:
    ${time_eval:
    ${time_interval:
    ${uc:
    ${utf8clean:

    }}}

## List of Conditions {{{

    acl
    and
    bool
    bool_lax
    crypteq
    eq
    exists
    ge
    gt
    inlist
    isip
    ldapauth
    le
    lt
    match
    match_address
    match_domain
    match_ip
    match_local_part
    or
    pam
    pwcheck
    radius

    }}}

## List of Functions {{{

    ${acl
    ${certextract
    ${dlfunc
    ${extract
    ${extract
    ${filter
    ${hash
    ${hmac
    ${length
    ${listextract
    ${lookup
    ${map
    ${nhash
    ${perl
    ${prvs
    ${prvscheck
    ${readfile
    ${readsocket
    ${reduce
    ${run
    ${sg
    ${sort
    ${substr
    ${tr

        }}}

## Routing Pre-Conditions {{{

    address_test
    check_local_user
    condition
    domains
    expn
    local_part_prefix
    local_part_suffix
    local_parts
    require_files
    senders
    verify
    verify_only
    verify_recipient
    verify_sender

    }}}


Cheat sheet: http://www.datadisk.co.uk/html_docs/exim/exim_cs.htm

# vim:tw=0:et:ts=4:sw=4:fdm=marker:

