initial unveil(2) support + some code-cleanup and remove unused functions - 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 4c3c79f49125ef555fba1df7f6cbab2c7b26ea00
(DIR) parent ea2535f01b1fb73863f7104b0e21719b577620c1
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Sat, 27 Oct 2018 19:14:50 +0200
initial unveil(2) support + some code-cleanup and remove unused functions
Diffstat:
M bmf.c | 14 ++++++--------
M config.h | 3 ++-
M dbh.h | 2 --
M dbtext.c | 33 ++++++++++++++++++-------------
M dbtext.h | 4 ----
M filt.c | 3 +--
M vec.c | 11 +++++++----
7 files changed, 35 insertions(+), 35 deletions(-)
---
(DIR) diff --git a/bmf.c b/bmf.c
@@ -75,7 +75,6 @@ version(void)
int
main(int argc, char **argv)
{
- int ch;
dbfmt_t dbfmt = db_text;
char *dbname = NULL;
bool_t rdonly;
@@ -83,18 +82,17 @@ main(int argc, char **argv)
mbox_t mboxtype = detect;
bool_t do_passthru = false;
dbh_t *pdb;
- dbt_t *pblist;
- dbt_t *pglist;
- dbt_t *ptable;
+ dbt_t *pblist, *pglist, *ptable;
vec_t mlist;
stats_t stats;
lex_t lex;
tok_t tok;
bool_t is_spam = false;
+ int ch;
int fd = STDIN_FILENO;
- if (pledge("stdio rpath wpath cpath flock", NULL) == -1)
+ if (pledge("stdio rpath wpath cpath flock unveil", NULL) == -1)
err(1, "pledge");
srand(time(NULL));
@@ -110,14 +108,14 @@ main(int argc, char **argv)
break;
case 'V':
version();
- break; /* notreached */
+ break; /* NOTREACHED */
case 'd':
free(dbname);
dbname = strdup(optarg);
break;
case 'h':
usage();
- break; /* notreached */
+ break; /* NOTREACHED */
case 'k':
stats.keepers = atoi(optarg);
break;
@@ -141,7 +139,7 @@ main(int argc, char **argv)
break;
case 't':
mode = mode_test;
- if (pledge("stdio rpath cpath flock", NULL) == -1)
+ if (pledge("stdio rpath cpath flock unveil", NULL) == -1)
err(1, "pledge");
break;
case 'v':
(DIR) diff --git a/config.h b/config.h
@@ -29,9 +29,10 @@
#include <time.h>
#include <unistd.h>
-/* pledge(2) */
+/* pledge(2) and unveil(2) */
#ifndef __OpenBSD__
#define pledge(a,b) 0
+#define unveil(a,b) 0
#endif
#include <sys/file.h>
(DIR) diff --git a/dbh.h b/dbh.h
@@ -27,8 +27,6 @@ struct _dbt {
bool_t(*close) (dbt_t *);
bool_t(*mergeclose) (dbt_t *, vec_t *);
bool_t(*unmergeclose) (dbt_t *, vec_t *);
- bool_t(*import) (dbt_t *, cpchar);
- bool_t(*export) (dbt_t *, cpchar);
uint(*getmsgcount) (dbt_t *);
uint(*getcount) (dbt_t *, str_t *);
};
(DIR) diff --git a/dbtext.c b/dbtext.c
@@ -76,6 +76,7 @@ dbtext_db_open(cpchar dbhost, cpchar dbname, cpchar dbuser, cpchar dbpass)
if ((pthis->dir = malloc(dirlen)) == NULL)
goto bail;
+ /* NOTE: no truncation possible */
snprintf(pthis->dir, dirlen, "%s/.bmf", phome);
}
@@ -89,6 +90,24 @@ dbtext_db_open(cpchar dbhost, cpchar dbname, cpchar dbuser, cpchar dbpass)
goto bail;
}
+ /* unveil(2), TODO: rework later */
+ /* TODO: permission depending on mode */
+ char listpath[PATH_MAX];
+ snprintf(listpath, sizeof(listpath), "%s/%s", pthis->dir, "goodlist");
+ if (unveil(listpath, "rw") == -1) {
+ perror("unveil()");
+ exit(2);
+ }
+ snprintf(listpath, sizeof(listpath), "%s/%s", pthis->dir, "spamlist");
+ if (unveil(listpath, "rw") == -1) {
+ perror("unveil()");
+ exit(2);
+ }
+ if (unveil(NULL, NULL) == -1) {
+ perror("unveil()");
+ exit(2);
+ }
+
return (dbh_t *)pthis;
bail:
@@ -136,8 +155,6 @@ dbtext_db_opentable(dbhtext_t * pthis, cpchar table, bool_t rdonly)
ptable->close = dbtext_table_close;
ptable->mergeclose = dbtext_table_mergeclose;
ptable->unmergeclose = dbtext_table_unmergeclose;
- ptable->import = dbtext_table_import;
- ptable->export = dbtext_table_export;
ptable->getmsgcount = dbtext_table_getmsgcount;
ptable->getcount = dbtext_table_getcount;
ptable->fd = -1;
@@ -442,18 +459,6 @@ dbtext_table_unmergeclose(dbttext_t * pthis, vec_t * pmsg)
return dbtext_table_close(pthis);
}
-bool_t
-dbtext_table_import(dbttext_t * pthis, cpchar filename)
-{
- return false;
-}
-
-bool_t
-dbtext_table_export(dbttext_t * pthis, cpchar filename)
-{
- return false;
-}
-
uint
dbtext_table_getmsgcount(dbttext_t * pthis)
{
(DIR) diff --git a/dbtext.h b/dbtext.h
@@ -16,8 +16,6 @@ struct _dbttext
bool_t (*close)(dbttext_t*);
bool_t (*mergeclose)(dbttext_t*,vec_t*);
bool_t (*unmergeclose)(dbttext_t*,vec_t*);
- bool_t (*import)(dbttext_t*,cpchar);
- bool_t (*export)(dbttext_t*,cpchar);
uint (*getmsgcount)(dbttext_t*);
uint (*getcount)(dbttext_t*,str_t*);
@@ -45,8 +43,6 @@ dbt_t* dbtext_db_opentable( dbhtext_t* pthis, cpchar table, bool_t rdonly );
bool_t dbtext_table_close( dbttext_t* pthis );
bool_t dbtext_table_mergeclose( dbttext_t* pthis, vec_t* pmsg );
bool_t dbtext_table_unmergeclose( dbttext_t* pthis, vec_t* pmsg );
-bool_t dbtext_table_import( dbttext_t* pthis, cpchar filename );
-bool_t dbtext_table_export( dbttext_t* pthis, cpchar filename );
uint dbtext_table_getmsgcount( dbttext_t* pthis );
uint dbtext_table_getcount( dbttext_t* pthis, str_t* pword );
(DIR) diff --git a/filt.c b/filt.c
@@ -65,8 +65,7 @@ bayesfilt(dbt_t * pglist, dbt_t * pblist, vec_t * pmlist, stats_t * pstats)
#endif
- discrim_t *pp;
- discrim_t *hit;
+ discrim_t *pp, *hit;
for (pp = pstats->extrema; pp < pstats->extrema + pstats->keepers; pp++) {
pp->key.p = NULL;
(DIR) diff --git a/vec.c b/vec.c
@@ -34,22 +34,25 @@ vec_create(vec_t * pthis)
void
vec_destroy(vec_t * pthis)
{
+ pthis->nitems = 0;
free(pthis->pitems);
+ pthis->pitems = NULL;
}
static void
vec_setsize(vec_t * pthis, uint nsize)
{
- if (nsize > pthis->nalloc) {
- uint nnewalloc;
- str_t *pnewitems;
- uint n;
+ uint nnewalloc;
+ str_t *pnewitems;
+ uint n;
+ if (nsize > pthis->nalloc) {
nnewalloc = pthis->nalloc * 2;
if (nnewalloc < nsize)
nnewalloc = nsize;
pnewitems = (str_t *) realloc(pthis->pitems, nnewalloc * sizeof(str_t));
if (pnewitems == NULL) {
+ perror("realloc()");
exit(2);
}
for (n = pthis->nitems; n < nsize; n++) {