pledge test mode, no need to reopen goodlist and spamlist for each message in test mode - bmf - bmf (Bayesian Mail Filter) 0.9.4 fork + patches
(HTM) git clone git://git.codemadness.org/bmf
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 41e1e6b8e9d49a1300c070f03070db4ce2d0bbbd
(DIR) parent bd5dd52e982fcb2c07eddb303e585a6e9b738508
(HTM) 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:
M TODO | 7 +++++++
M bmf.c | 61 +++++++++++++++++++++++--------
2 files changed, 52 insertions(+), 16 deletions(-)
---
(DIR) 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.
(DIR) 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 );
}