Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
PCRE_TABLE(5)		      File Formats Manual		 PCRE_TABLE(5)

NAME
       pcre_table - format of Postfix PCRE tables

SYNOPSIS
       postmap -q "string" pcre:$config_directory/filename

       postmap -q - pcre:$config_directory/filename <inputfile

       postmap -hmq - pcre:$config_directory/filename <inputfile

       postmap -bmq - pcre:$config_directory/filename <inputfile

DESCRIPTION
       The  Postfix  mail  system  uses	optional tables	for address rewriting,
       mail routing, or	access control.	These tables are usually in dbm	or  db
       format.

       Alternatively,  lookup tables can be specified in Perl Compatible Regu-
       lar Expression form. In this case, each input  is  compared  against  a
       list  of	 patterns.  When a match is found, the corresponding result is
       returned	and the	search is terminated.

       To find out what	types of lookup	tables your  Postfix  system  supports
       use the "postconf -m" command.

       To test lookup tables, use the "postmap -q" command as described	in the
       SYNOPSIS	 above.	 Use  "postmap -hmq - <file" for header_checks(5) pat-
       terns, and "postmap -bmq	- <file" for body_checks(5) (Postfix  2.6  and
       later).

       This  driver  can  be  built  with  the	pcre2 library (Postfix 3.7 and
       later), or with the legacy pcre library (all Postfix versions).

COMPATIBILITY
       With Postfix version 2.2	and earlier specify "postmap -fq" to  query  a
       table that contains case	sensitive patterns. Patterns are case insensi-
       tive by default.

TABLE FORMAT
       The general form	of a PCRE table	is:

       /pattern/flags result
	      When pattern matches the input string, use the corresponding re-
	      sult value.

       !/pattern/flags result
	      When  pattern  does  not	match the input	string,	use the	corre-
	      sponding result value.

       if /pattern/flags

       endif  If the input string matches /pattern/,  then  match  that	 input
	      string against the patterns between if and endif.	 The if..endif
	      can nest.

	      Note: do not prepend whitespace to patterns inside if..endif.

	      This feature is available	in Postfix 2.1 and later.

       if !/pattern/flags

       endif  If  the  input  string does not match /pattern/, then match that
	      input string against the patterns	 between  if  and  endif.  The
	      if..endif	can nest.

	      Note: do not prepend whitespace to patterns inside if..endif.

	      This feature is available	in Postfix 2.1 and later.

       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 logical line.

       Each  pattern  is a perl-like regular expression. The expression	delim-
       iter can	be any non-alphanumeric	character, except whitespace or	 char-
       acters  that  have  special meaning (traditionally the forward slash is
       used).  The regular expression can contain whitespace.

       By default, matching is case-insensitive, and newlines are not  treated
       as  special  characters.	The behavior is	controlled by flags, which are
       toggled by appending one	or more	of the following characters after  the
       pattern:

       i (default: on)
	      Toggles  the case	sensitivity flag. By default, matching is case
	      insensitive.

       m (default: off)
	      Toggles the pcre MULTILINE flag. When this flag is on, the ^ and
	      $	metacharacters match immediately after and immediately	before
	      a	 newline  character,  respectively, in addition	to matching at
	      the start	and end	of the subject string.

       s (default: on)
	      Toggles the pcre DOTALL flag.  When  this	 flag  is  on,	the  .
	      metacharacter  matches  the newline character. With Postfix ver-
	      sions prior to 2.0, the flag is off by default, which is	incon-
	      venient for multi-line message header matching.

       x (default: off)
	      Toggles the pcre extended	flag. When this	flag is	on, whitespace
	      characters  in the pattern (other	than in	a character class) are
	      ignored.	To include a whitespace	character as part of the  pat-
	      tern, escape it with backslash.

	      Note: do not use #comment	after patterns.

       A (default: off)
	      Toggles  the pcre	ANCHORED flag.	When this flag is on, the pat-
	      tern is forced to	be "anchored", that is,	it is  constrained  to
	      match  only  at  the start of the	string which is	being searched
	      (the "subject string"). This effect can also be achieved by  ap-
	      propriate	constructs in the pattern itself.

       E (default: off)
	      Toggles  the pcre	DOLLAR_ENDONLY flag. When this flag is on, a $
	      metacharacter in the pattern matches only	at the end of the sub-
	      ject string. Without this	flag, a	dollar	also  matches  immedi-
	      ately  before  the  final	character if it	is a newline character
	      (but not before any other	newline	characters). This flag is  ig-
	      nored if the pcre	MULTILINE flag is set.

       U (default: off)
	      Toggles  the pcre	UNGREEDY flag.	When this flag is on, the pat-
	      tern matching engine inverts the "greediness" of the quantifiers
	      so that they are not greedy by default,  but  become  greedy  if
	      followed	by  "?".   This	 flag  can also	set by a (?U) modifier
	      within the pattern.

       X (default: off)
	      Toggles the pcre EXTRA flag.  When this flag is  on,  any	 back-
	      slash in a pattern that is followed by a letter that has no spe-
	      cial  meaning causes an error, thus reserving these combinations
	      for future expansion.

	      This feature is not supported with PCRE2.

SEARCH ORDER
       Patterns	are applied in the order as specified in the  table,  until  a
       pattern is found	that matches the input string.

       Each  pattern  is applied to the	entire input string.  Depending	on the
       application, that string	is an entire client hostname, an entire	client
       IP address, or an entire	mail address.  Thus, no	parent domain or  par-
       ent network search is done, and user@domain mail	addresses are not bro-
       ken  up	into  their user and domain constituent	parts, nor is user+foo
       broken up into user and foo.

TEXT SUBSTITUTION
       Substitution of substrings (text	that  matches  patterns	 inside	 "()")
       from  the  matched  expression into the result string is	requested with
       $1, $2, etc.; specify $$	to produce  a  $  character  as	 output.   The
       macros  in  the result string may need to be written as ${n} or $(n) if
       they aren't followed by whitespace.   This  feature  does  not  support
       pcre2 substring names.

       Note: since negated patterns (those preceded by !) return a result when
       the  expression	does  not  match,  substitutions are not available for
       negated patterns.

INLINE SPECIFICATION
       The contents of a table may be specified	in the table name (Postfix 3.7
       and later).  The	basic syntax is:

       main.cf:
	   parameter = .. pcre:{ { rule-1 }, { rule-2 }	.. } ..

       master.cf:
	   .. -o { parameter = .. pcre:{ { rule-1 }, { rule-2 }	.. } ..	} ..

       Postfix recursively expands any $parametername instances	in  the	 above
       parameter  value,  ignores  whitespace  after  '{'  and before '}', and
       writes each rule	as one text line to an in-memory file:

       in-memory file:
	   rule-1
	   rule-2
	   ..

       Postfix parses the result as if it is a file in /usr/local/etc/postfix.

INLINE SPECIFICATION CAVEATS
             When using $parametername	inside an inlined pattern, use	\Q$pa-
	      rametername\E  to	disable	metacharacters such as '.' in the $pa-
	      rametername expansion. Otherwise,	the  pattern  may  have	 unex-
	      pected matches.

             When  an inlined rule must contain $, specify $$ to keep Postfix
	      from trying to do	$name expansion	as it  evaluates  a  parameter
	      value.  To  check	an inline configuration, use the "postconf -x"
	      option as	shown below:

	      	     When a main.cf "parametername =  value" setting  contains
		     an	inline pcre: table, use	the command "postconf -x para-
		     metername".  Verify  that there are no "undefined parame-
		     ter" warnings, and	that the output	has  the  syntax  that
		     one would use in a	non-inlined Postfix pcre: file.

	      	     When  a master.cf "-o { parametername = value }" override
		     contains an inline	pcre: table, use the command "postconf
		     -Px '*/*/parametername' ".	Verify that there are no  "un-
		     defined  parameter" warnings, and that the	output has the
		     syntax that one would use in a non-inlined	Postfix	 pcre:
		     file.

EXAMPLE	SMTPD ACCESS MAP
       # Protect your outgoing majordomo exploders
       /^(?!owner-)(.*)-outgoing@(.*)/ 550 Use ${1}@${2} instead

       # Bounce	friend@whatever, except	when whatever is our domain (you would
       # be better just	bouncing all friend@ mail - this is just an example).
       /^(friend@(?!my\.domain$).*)$/  550 Stick this in your pipe $1

       # A multi-line entry. The text is sent as one line.
       #
       /^noddy@my\.domain$/
	550 This user is a funny one. You really don't want to send mail to
	them as	it only	makes their head spin.

EXAMPLE	HEADER FILTER MAP
       /^Subject: make money fast/     REJECT
       /^To: friend@public\.com/       REJECT

EXAMPLE	BODY FILTER MAP
       # First skip over base 64 encoded text to save CPU cycles.
       # Requires PCRE version 3.
       ~^[[:alnum:]+/]{60,}$~	       OK

       # Put your own body patterns here.

SEE ALSO
       postmap(1), Postfix lookup table	manager
       postconf(5), configuration parameters
       regexp_table(5),	format of POSIX	regular	expression tables

README FILES
       Use  "postconf readme_directory"	or "postconf html_directory" to	locate
       this information.
       DATABASE_README,	Postfix	lookup table overview

AUTHOR(S)
       The PCRE	table lookup code was originally written by:
       Andrew McNamara
       andrewm@connect.com.au
       connect.com.au Pty. Ltd.
       Level 3,	213 Miller St
       North Sydney, NSW, Australia

       Adopted and adapted by:
       Wietse Venema
       IBM T.J.	Watson Research
       P.O. Box	704
       Yorktown	Heights, NY 10598, USA

       Wietse Venema
       Google, Inc.
       111 8th Avenue
       New York, NY 10011, USA

								 PCRE_TABLE(5)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=pcre_table&sektion=5&manpath=FreeBSD+Ports+14.3.quarterly>

home | help