
                         Flow chart: Local_check_rcpt
                                       
   This is a simplified flow chart of The Local_check_rcpt ruleset in
   check_local. The only side effect is switching the headerchecking
   ON/OFF (option _HC_SWITCH_). ERROR rejects the message, exept
   _X_SPAM_ENVELOPE_ is defined. END terminates the ruleset and the
   message is accepted.

                   /---------\
                   |  START  |
                   \---------/
                        |
~~~~~~~~~~~~~~~~        |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~
_HC_SWITCH_             |
                *---------------*
                | hc_switch OFF |
                *---------------*
                        |
~~~~~~~~~~~~~~~~        |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~
_CHECK_RCPT_HOOK_       |
                       / \
            $#OK     /     \          $#error
    END    ERROR
(Basic_check_rcpt    \     /
 is terminated also)   \ /
                        | else
~~~~~~~~~~~~~~~~        |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~
BASIC                  / \
                     /     \          Yes
                deferred delivery ?  ----------------->  END
                     \     /
                       \ /
                        | No
                        |
                       / \
                     /     \
       REJECT    client_addr in        OK
    +-- END
    |                \     /
    |                  \ /
    |                   | Not found
    |                   |
    |                  / \
    |                /     \
    |  REJECT    client_name in        OK
    +-- END
    |                \     /
    |                  \ /
    |                   | Not found
    +-------->----------+
                        |
~~~~~~~~~~~~~~~~        |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~
FEATURE(rbl) and        |
_RBL_ALL_               |
                       / \
                     /     \
                client_addr in       Yes
               ealTimeBlacklist ?  ----------------->  ERROR
                     \     /
                       \ /
                        | No
~~~~~~~~~~~~~~~~        |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~
_MD5_MAGIC_KEY_         |
                       / \
                     /     \          Yes
             Has RCPT md5_magic_key ?  ----------------->  END
                     \     /
                       \ /
                        | No
~~~~~~~~~~~~~~~~        |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~
_SPAM_FRIENDS_          |
                       / \
                     /     \        Yes
             Has RCPT valid +key ?  ----------------->  END
                     \     /
                       \ /
                        | No
                        |
                       / \
                     /     \           Yes
             Is RCPT a spam_friend ?  ----------------->  END
                     \     /
                       \ /
                        | No
~~~~~~~~~~~~~~~~        |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~
_SPAM_HATERS_           |
                       / \
                     /     \        Yes
             Has RCPT valid +key ?  ----------------->  END
                     \     /
                       \ /
                        | No
                        |
                       / \
                     /     \          No
             Is RCPT a spam_hater ?  ----------------->  END
                     \     /
                       \ /
                        | Yes
~~~~~~~~~~~~~~~~        |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~
_HC_SWITCH_             |
                  *--------------*
                  | hc_switch ON |
                  *--------------*
                        |
                        |
~~~~~~~~~~~~~~~~        |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~
_CHECK_MAIL_HOOK_       |
                       / \
                 /     \          $#error
         +-  ERROR
         |           \     /
         |             \ /
         |              | else
~~~~~~~  |  ~~~~        |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~
BASIC    |              |
         |             / \
         |   OK      /     \          ERROR
         +-  ERROR
         |           \     /
         |             \ /
*---------------*       | Not found
| hc_switch OFF |       |
*---------------*       |
         |              |
        END             |
                        |
                       / \
                     /     \
                check_reverse_path   error
                     syntax ?      ----------------->  ERROR
                     \     /
                       \ /
                        | ok
                        |
                       / \
                     /     \
                   check FROM
                  no_num_domains,
               no_num_start_domains,     error
                    checkregex          ---------------> ERROR
                     \     /
                       \ /
                        | ok
                        |
                       / \
                     /     \
          OK     client_addr in       REJECT
    +-- ERROR
    |                \     /
    |                  \ /
    |                   | Not found
    |                   |
    |                  / \
    |                /     \
    |     OK     client_name in       REJECT
    +-- ERROR
    |                \     /
    |                  \ /
    |                   | Not found
    +-------->----------+
                        |
~~~~~~~~~~~~~~~~        |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~
FEATURE(rbl) and        |
not _RBL_ALL_          / \
                     /     \
                 client_addr in        Yes
                RealTimeBlacklist ?  ------------------> ERROR
                     \     /
                       \ /
                        |
~~~~~~~~~~~~~~~~        |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~
_CLIENT_MUST_RESOLVE_   |
                       / \
                     /     \
                Is client_name a     Yes
                    Hostname ?   ---------------------> END
                     \     /
                       \ /
                        | No
                        |
                       / \
                     /     \
           Temporary DomainNameService     Yes
                    failure ?      ---------------------> TEMP_ERROR
                     \     /
                       \ /
                        | No
                        |
                      ERROR
