bmf

bmf (Bayesian Mail Filter) 0.9.4 fork + patches
git clone git://git.codemadness.org/bmf
Log | Files | Refs | README | LICENSE

commit 41e1e6b8e9d49a1300c070f03070db4ce2d0bbbd
parent bd5dd52e982fcb2c07eddb303e585a6e9b738508
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Sat, 22 Sep 2018 18:49:54 +0200

pledge test mode, no need to reopen goodlist and spamlist for each message in test mode

Diffstat:
TODO | 7+++++++
bmf.c | 61+++++++++++++++++++++++++++++++++++++++++++++----------------
2 files changed, 52 insertions(+), 16 deletions(-)

diff --git a/TODO b/TODO @@ -1,3 +1,10 @@ +? optimize: reduce loading/writing of goodlist, spamlist table? + +- optimize: preload goodlist spamlist somehow. +- in test mode (-t) reduce privileges (only stdio). + +=== + * Make extrema size configurable, and default to ~5% of tokens. * Teach lexer about multiline MIME headers and case (in)sensitivity. * Teach lexer about MIME quoted-printable and base64 encodings. diff --git a/bmf.c b/bmf.c @@ -180,30 +180,50 @@ int main( int argc, char** argv ) exit( 2 ); } - while( tok.tt != eof ) - { - if( mboxtype == mbox && tok.tt != from ) - { - fprintf( stderr, "%s: input does not look like an mbox message\n", argv[0] ); - exit( 2 ); - } - - rdonly = (mode == mode_test || mode == mode_reg_n); + if (mode == mode_test) { + rdonly = 1; pblist = pdb->opentable( pdb, "spamlist", rdonly ); if( pblist == NULL ) - { + { fprintf( stderr, "%s: cannot open spamlist\n", argv[0] ); - exit( 2 ); + exit( 2 ); } - rdonly = (mode == mode_test || mode == mode_reg_s); - pglist = pdb->opentable( pdb, "goodlist", rdonly ); + pglist = pdb->opentable( pdb, "goodlist", rdonly ); if( pglist == NULL ) - { + { fprintf( stderr, "%s: cannot open goodlist\n", argv[0] ); + exit( 2 ); + } + + if (pledge("stdio", NULL) == -1) + err(1, "pledge"); + } + + while( tok.tt != eof ) + { + if( mboxtype == mbox && tok.tt != from ) + { + fprintf( stderr, "%s: input does not look like an mbox message\n", argv[0] ); exit( 2 ); } + if (mode != mode_test) { + rdonly = 0; + pblist = pdb->opentable( pdb, "spamlist", rdonly ); + if( pblist == NULL ) { + fprintf( stderr, "%s: cannot open spamlist\n", argv[0] ); + exit( 2 ); + } + + pglist = pdb->opentable( pdb, "goodlist", rdonly ); + if( pglist == NULL ) + { + fprintf( stderr, "%s: cannot open goodlist\n", argv[0] ); + exit( 2 ); + } + } + vec_create( &mlist ); bvec_loadmsg( &mlist, &lex, &tok ); @@ -282,9 +302,18 @@ int main( int argc, char** argv ) vec_destroy( &mlist ); - pglist->close( pglist ); + if (mode != mode_test) { + pglist->close( pglist ); + free( pglist ); + pblist->close( pblist ); + free( pblist ); + } + } + + if (mode == mode_test) { + pglist->close( pglist ); free( pglist ); - pblist->close( pblist ); + pblist->close( pblist ); free( pblist ); }