aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2007-11-22 12:23:06 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2007-11-22 12:23:06 +0000
commit080cc8f1c899f91f143694f3a3399a159239496b (patch)
tree8cd38a0e3c0c376a614a60312a9c2e80bae2b845
parent861696aa40909d5c11ab4876b716d48fef73a49d (diff)
downloadmailfromd-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--ChangeLog7
-rw-r--r--doc/mailfromd.texi98
-rw-r--r--src/main.c398
-rw-r--r--tests/atlocal.in2
4 files changed, 439 insertions, 66 deletions
diff --git a/ChangeLog b/ChangeLog
index 2fe622e9..08f55f73 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,15 @@
12007-11-22 Sergey Poznyakoff <gray@gnu.org.ua> 12007-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
82007-11-22 Sergey Poznyakoff <gray@gnu.org.ua>
9
3 * doc/mailfromd.texi: Update 10 * doc/mailfromd.texi: Update
4 11
52007-11-21 Sergey Poznyakoff <gray@gnu.org.ua> 122007-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
990can use your configuration files and filter scripts without any 990can use your configuration files and filter scripts without any
991changes. The only difference worth noticing is that starting from this 991changes. The only difference worth noticing is that starting from this
992version @command{mailfromd} is always compiled with asynchronous 992version @command{mailfromd} is always compiled with asynchronous
993syslog implementation. The @option{--enable-syslog-async} 993syslog implementation. The @option{--enable-syslog-async}
994configuration file option is still available, but its meaning has 994configuration 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}
6477by calling @command{/bin/sh -c string}, and returns -1 on error or 6478by calling @command{/bin/sh -c string}, and returns -1 on error or
6478the return status of the command otherwise. 6479the 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
6488of this language. For description of the language and available
6489extensions, @xref{Sieve Language, Sieve Language, Sieve Language,
6490mailutils, GNU Mailutils Manual}.
6491
6492@deftypefn {Built-in Function} boolean sieve (string @var{script} @
6493 [, number @var{flags}])
6494Compile the Sieve source file @var{script} and execute it over the
6495collected message. This function can be used only in @code{eom}
6496handler.
6497
6498@findex sieve.mfh
6499Optional @var{flags} define additional debugging and verbosity
6500settings. It is a bit-mask field, consisting of a bitwise @code{or}
6501of one or more of the following flags, defined in @file{sieve.mfh}:
6502
6503@table @code
6504@item MF_SIEVE_LOG
6505Log every executed @samp{Sieve} action.
6506
6507@item MF_SIEVE_DEBUG_TRACE
6508Trace execution of @samp{Sieve} tests.
6509
6510@item MF_SIEVE_DEBUG_INSTR
6511Log every instruction, executed in the compiled @samp{Sieve} code.
6512This produces huge amounts of output and is rarely useful, unless you
6513suspect some bug in @samp{Sieve} implementation and wish to trace it.
6514
6515@item MF_SIEVE_DEBUG_MAILUTILS
6516Log debugging information about the underlying Mailutils calls.
6517
6518@item MF_SIEVE_DEBUG_PROT
6519Trace networking protocols.
6520@end table
6521
6522For example, @code{MF_SIEVE_LOG|MF_SIEVE_DEBUG_TRACE} enables logging
6523@samp{Sieve} actions and tests.
6524
6525The @code{sieve} function returns @code{true} if the message was
6526accepted by the @var{script} program, and @code{false} otherwise.
6527Here, the word @dfn{accepted} means that some form of @samp{KEEP}
6528action (@pxref{Actions, keep, Actions, mailutils, GNU Mailutils
6529Manual}) was executed over the message.
6530@end deftypefn
6531
6532The 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>
6537group eom
6538do
6539 if not sieve("/etc/mail/filter.siv", MF_SIEVE_LOG)
6540 discard
6541 fi
6542done
6543@end smallexample
6544
6545The example below illustrates how one can adjust logging flags
6546depending on the current debugging level:
6547
6548@smallexample
6549#include_once <sieve.mfh>
6550prog eom
6551do
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
6573done
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
diff --git a/src/main.c b/src/main.c
index 80c81226..3798ca3f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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>
40typedef 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"<