diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2007-11-22 12:23:06 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2007-11-22 12:23:06 +0000 |
commit | 080cc8f1c899f91f143694f3a3399a159239496b (patch) | |
tree | 8cd38a0e3c0c376a614a60312a9c2e80bae2b845 | |
parent | 861696aa40909d5c11ab4876b716d48fef73a49d (diff) | |
download | mailfromd-080cc8f1c899f91f143694f3a3399a159239496b.tar.gz mailfromd-080cc8f1c899f91f143694f3a3399a159239496b.tar.bz2 |
* src/main.c: Implement MU configuration statements.
* tests/atlocal.in (MFOPTS): Ignore site-wide and per-user
configuration files.
* doc/mailfromd.texi: Document sieve interface.
git-svn-id: file:///svnroot/mailfromd/trunk@1533 7a8a7f39-df28-0410-adc6-e0d955640f24
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | doc/mailfromd.texi | 98 | ||||
-rw-r--r-- | src/main.c | 398 | ||||
-rw-r--r-- | tests/atlocal.in | 2 |
4 files changed, 439 insertions, 66 deletions
@@ -1,8 +1,15 @@ | |||
1 | 2007-11-22 Sergey Poznyakoff <gray@gnu.org.ua> | 1 | 2007-11-22 Sergey Poznyakoff <gray@gnu.org.ua> |
2 | 2 | ||
3 | * src/main.c: Implement MU configuration statements. | ||
4 | * tests/atlocal.in (MFOPTS): Ignore site-wide and per-user | ||
5 | configuration files. | ||
6 | * doc/mailfromd.texi: Document sieve interface. | ||
7 | |||
8 | 2007-11-22 Sergey Poznyakoff <gray@gnu.org.ua> | ||
9 | |||
3 | * doc/mailfromd.texi: Update | 10 | * doc/mailfromd.texi: Update |
4 | 11 | ||
5 | 2007-11-21 Sergey Poznyakoff <gray@gnu.org.ua> | 12 | 2007-11-21 Sergey Poznyakoff <gray@gnu.org.ua> |
6 | 13 | ||
7 | * src/bi_io.m4 (write): Implement optional third argument. | 14 | * src/bi_io.m4 (write): Implement optional third argument. |
8 | * src/bi_sieve.m4: New file. | 15 | * src/bi_sieve.m4: New file. |
diff --git a/doc/mailfromd.texi b/doc/mailfromd.texi index 731c4ae1..95c6741f 100644 --- a/doc/mailfromd.texi +++ b/doc/mailfromd.texi | |||
@@ -218,12 +218,13 @@ Built-in and Library Functions | |||
218 | * Polling functions:: | 218 | * Polling functions:: |
219 | * Internet address manipulation functions:: | 219 | * Internet address manipulation functions:: |
220 | * DNS functions:: | 220 | * DNS functions:: |
221 | * Database functions:: | 221 | * Database functions:: |
222 | * I/O functions:: | 222 | * I/O functions:: |
223 | * System functions:: | 223 | * System functions:: |
224 | * Sieve Interface:: | ||
224 | * Interfaces to Third-Party Programs:: | 225 | * Interfaces to Third-Party Programs:: |
225 | * Special test functions:: | 226 | * Special test functions:: |
226 | * Mail Sending Functions:: | 227 | * Mail Sending Functions:: |
227 | * NLS Functions:: | 228 | * NLS Functions:: |
228 | * Debugging Functions:: | 229 | * Debugging Functions:: |
229 | * Blacklisting Functions:: | 230 | * Blacklisting Functions:: |
@@ -982,13 +983,12 @@ the corresponding section below. | |||
982 | * 1x-2x:: Upgrading from 1.x to 2.x | 983 | * 1x-2x:: Upgrading from 1.x to 2.x |
983 | @end menu | 984 | @end menu |
984 | 985 | ||
985 | @node 410-420 | 986 | @node 410-420 |
986 | @section Upgrading from 4.1 to 4.2 | 987 | @section Upgrading from 4.1 to 4.2 |
987 | @cindex Upgrading from 4.1 to 4.2 | 988 | @cindex Upgrading from 4.1 to 4.2 |
988 | @UNREVISED{} | ||
989 | Upgrading to this version does not require any special efforts. You | 989 | Upgrading to this version does not require any special efforts. You |
990 | can use your configuration files and filter scripts without any | 990 | can use your configuration files and filter scripts without any |
991 | changes. The only difference worth noticing is that starting from this | 991 | changes. The only difference worth noticing is that starting from this |
992 | version @command{mailfromd} is always compiled with asynchronous | 992 | version @command{mailfromd} is always compiled with asynchronous |
993 | syslog implementation. The @option{--enable-syslog-async} | 993 | syslog implementation. The @option{--enable-syslog-async} |
994 | configuration file option is still available, but its meaning has | 994 | configuration file option is still available, but its meaning has |
@@ -5255,12 +5255,13 @@ in version @value{VERSION}. | |||
5255 | * Polling functions:: | 5255 | * Polling functions:: |
5256 | * Internet address manipulation functions:: | 5256 | * Internet address manipulation functions:: |
5257 | * DNS functions:: | 5257 | * DNS functions:: |
5258 | * Database functions:: | 5258 | * Database functions:: |
5259 | * I/O functions:: | 5259 | * I/O functions:: |
5260 | * System functions:: | 5260 | * System functions:: |
5261 | * Sieve Interface:: | ||
5261 | * Interfaces to Third-Party Programs:: | 5262 | * Interfaces to Third-Party Programs:: |
5262 | * Special test functions:: | 5263 | * Special test functions:: |
5263 | * Mail Sending Functions:: | 5264 | * Mail Sending Functions:: |
5264 | * NLS Functions:: | 5265 | * NLS Functions:: |
5265 | * Debugging Functions:: | 5266 | * Debugging Functions:: |
5266 | * Blacklisting Functions:: | 5267 | * Blacklisting Functions:: |
@@ -6474,14 +6475,107 @@ strftime('%Y-%m-%d %H:%M:%S %Z', 1164477564, 1) | |||
6474 | 6475 | ||
6475 | @deftypefn {Built-in Function} number system (string @var{str}) | 6476 | @deftypefn {Built-in Function} number system (string @var{str}) |
6476 | The function @code{system} executes a command specified in @var{str} | 6477 | The function @code{system} executes a command specified in @var{str} |
6477 | by calling @command{/bin/sh -c string}, and returns -1 on error or | 6478 | by calling @command{/bin/sh -c string}, and returns -1 on error or |
6478 | the return status of the command otherwise. | 6479 | the return status of the command otherwise. |
6479 | @end deftypefn | 6480 | @end deftypefn |
6480 | |||
6481 | 6481 | ||
6482 | @node Sieve Interface | ||
6483 | @subsubsection Sieve Interface | ||
6484 | @cindex Sieve | ||
6485 | @UNREVISED{} | ||
6486 | @samp{Sieve} is a powerful mail filtering language, defined in | ||
6487 | @acronym{RFC} 3028. @command{Mailfromd} supports an extended form | ||
6488 | of this language. For description of the language and available | ||
6489 | extensions, @xref{Sieve Language, Sieve Language, Sieve Language, | ||
6490 | mailutils, GNU Mailutils Manual}. | ||
6491 | |||
6492 | @deftypefn {Built-in Function} boolean sieve (string @var{script} @ | ||
6493 | [, number @var{flags}]) | ||
6494 | Compile the Sieve source file @var{script} and execute it over the | ||
6495 | collected message. This function can be used only in @code{eom} | ||
6496 | handler. | ||
6497 | |||
6498 | @findex sieve.mfh | ||
6499 | Optional @var{flags} define additional debugging and verbosity | ||
6500 | settings. It is a bit-mask field, consisting of a bitwise @code{or} | ||
6501 | of one or more of the following flags, defined in @file{sieve.mfh}: | ||
6502 | |||
6503 | @table @code | ||
6504 | @item MF_SIEVE_LOG | ||
6505 | Log every executed @samp{Sieve} action. | ||
6506 | |||
6507 | @item MF_SIEVE_DEBUG_TRACE | ||
6508 | Trace execution of @samp{Sieve} tests. | ||
6509 | |||
6510 | @item MF_SIEVE_DEBUG_INSTR | ||
6511 | Log every instruction, executed in the compiled @samp{Sieve} code. | ||
6512 | This produces huge amounts of output and is rarely useful, unless you | ||
6513 | suspect some bug in @samp{Sieve} implementation and wish to trace it. | ||
6514 | |||
6515 | @item MF_SIEVE_DEBUG_MAILUTILS | ||
6516 | Log debugging information about the underlying Mailutils calls. | ||
6517 | |||
6518 | @item MF_SIEVE_DEBUG_PROT | ||
6519 | Trace networking protocols. | ||
6520 | @end table | ||
6521 | |||
6522 | For example, @code{MF_SIEVE_LOG|MF_SIEVE_DEBUG_TRACE} enables logging | ||
6523 | @samp{Sieve} actions and tests. | ||
6524 | |||
6525 | The @code{sieve} function returns @code{true} if the message was | ||
6526 | accepted by the @var{script} program, and @code{false} otherwise. | ||
6527 | Here, the word @dfn{accepted} means that some form of @samp{KEEP} | ||
6528 | action (@pxref{Actions, keep, Actions, mailutils, GNU Mailutils | ||
6529 | Manual}) was executed over the message. | ||
6530 | @end deftypefn | ||
6531 | |||
6532 | The following example discards each message not accepted by the | ||
6533 | @samp{Sieve} program @file{/etc/mail/filter.siv}: | ||
6534 | |||
6535 | @smallexample | ||
6536 | #include_once <sieve.mfh> | ||
6537 | group eom | ||
6538 | do | ||
6539 | if not sieve("/etc/mail/filter.siv", MF_SIEVE_LOG) | ||
6540 | discard | ||
6541 | fi | ||
6542 | done | ||
6543 | @end smallexample | ||
6544 | |||
6545 | The example below illustrates how one can adjust logging flags | ||
6546 | depending on the current debugging level: | ||
6547 | |||
6548 | @smallexample | ||
6549 | #include_once <sieve.mfh> | ||
6550 | prog eom | ||
6551 | do | ||
6552 | number flags 0 | ||
6553 | number level debug_level("bi_sieve") | ||
6554 | if %level >= 1 | ||
6555 | set flags %flags | MF_SIEVE_LOG | ||
6556 | fi | ||
6557 | if %level >= 2 | ||
6558 | set flags %flags | MF_SIEVE_DEBUG_TRACE | ||
6559 | fi | ||
6560 | if %level > 9 | ||
6561 | set flags %flags | MF_SIEVE_DEBUG_INSTR | ||
6562 | fi | ||
6563 | if %level > 19 | ||
6564 | set flags %flags | MF_SIEVE_DEBUG_MAILUTILS | ||
6565 | fi | ||
6566 | if %level > 20 | ||
6567 | set flags %flags | MF_SIEVE_DEBUG_PROT | ||
6568 | fi | ||
6569 | |||
6570 | if not sieve("/etc/mail/filter.siv", %flags) | ||
6571 | discard | ||
6572 | fi | ||
6573 | done | ||
6574 | @end smallexample | ||
6575 | |||
6482 | @node Interfaces to Third-Party Programs | 6576 | @node Interfaces to Third-Party Programs |
6483 | @subsubsection Interfaces to Third-Party Programs | 6577 | @subsubsection Interfaces to Third-Party Programs |
6484 | 6578 | ||
6485 | A set of functions is defined for interfacing with other filters via | 6579 | A set of functions is defined for interfacing with other filters via |
6486 | @acronym{TCP}. Currently implemented are interfaces with | 6580 | @acronym{TCP}. Currently implemented are interfaces with |
6487 | @command{SpamAssassin} @command{spamd} daemon and with | 6581 | @command{SpamAssassin} @command{spamd} daemon and with |
@@ -34,12 +34,16 @@ | |||
34 | #include <arpa/inet.h> | 34 | #include <arpa/inet.h> |
35 | #include <netdb.h> | 35 | #include <netdb.h> |
36 | 36 | ||
37 | #include <mailutils/mailutils.h> | 37 | #include <mailutils/mailutils.h> |
38 | #if MAILUTILS_VERSION_NUMBER < 1290 | 38 | #if MAILUTILS_VERSION_NUMBER < 1290 |
39 | # include <mailutils/argp.h> | 39 | # include <mailutils/argp.h> |
40 | typedef struct { | ||
41 | char *file; | ||
42 | int line; | ||
43 | } mu_cfg_locus_t; | ||
40 | #else | 44 | #else |
41 | # include <mailutils/libargp.h> | 45 | # include <mailutils/libargp.h> |
42 | #endif | 46 | #endif |
43 | #include "mailfromd.h" | 47 | #include "mailfromd.h" |
44 | 48 | ||
45 | #include "syslog_async.h"< |