Introduction
Introduction Statistics Contact Development Disclaimer Help
fix unveil(2) permissions and path name + misc code fixes - bmf - bmf (Bayesian…
git clone git://git.codemadness.org/bmf
Log
Files
Refs
README
LICENSE
---
commit da144ef21a75e5a1f78c1faf2d76d93c68f6180f
parent 8c0e2cad22ac8e72666e90b8069cb0b082e38429
Author: Hiltjo Posthuma <[email protected]>
Date: Sat, 27 Oct 2018 19:56:26 +0200
fix unveil(2) permissions and path name + misc code fixes
- check strdup call
- remove dbh_t abstraction
- remove unneccesary casts.
Diffstat:
M bmf.c | 12 ++++++++----
M dbg.c | 3 ++-
M dbh.c | 22 ++++++++++------------
M dbh.h | 9 +--------
M lex.c | 5 ++---
M vec.c | 3 ++-
6 files changed, 25 insertions(+), 29 deletions(-)
---
diff --git a/bmf.c b/bmf.c
@@ -75,12 +75,12 @@ version(void)
int
main(int argc, char **argv)
{
- char *dbname = NULL;
+ char *dbname = "";
bool_t rdonly;
runmode_t mode = mode_normal;
mbox_t mboxtype = detect;
bool_t do_passthru = false;
- dbh_t *pdb;
+ dbhtext_t *pdb;
dbt_t *pblist, *pglist, *ptable;
vec_t mlist;
stats_t stats;
@@ -110,7 +110,10 @@ main(int argc, char **argv)
break; /* NOTREACHED */
case 'd':
free(dbname);
- dbname = strdup(optarg);
+ if (!(dbname = strdup(optarg))) {
+ perror("strdup()");
+ exit(2);
+ }
break;
case 'h':
usage();
@@ -151,7 +154,8 @@ main(int argc, char **argv)
}
stats.extrema = (discrim_t *) malloc(stats.keepers * sizeof(discrim_t)…
- pdb = dbtext_db_open(dbname);
+ /* create directory if it doesn't exist yet, when dbname is NULL or em…
+ pdb = dbtext_db_open(dbname, rdonly);
if (pdb == NULL) {
fprintf(stderr, "%s: cannot open database\n", argv[0]);
exit(2);
diff --git a/dbg.c b/dbg.c
@@ -9,9 +9,10 @@
* dbg.c: debug functions for bmf.
*/
+#include <stdarg.h>
+
#include "config.h"
#include "dbg.h"
-#include <stdarg.h>
uint g_verbose = 0;
diff --git a/dbh.c b/dbh.c
@@ -48,8 +48,8 @@ db_getnewcount(veciter_t * piter)
return count;
}
-dbh_t *
-dbtext_db_open(cpchar dbname)
+dbhtext_t *
+dbtext_db_open(cpchar dbname, bool_t rdonly)
{
dbhtext_t *pthis = NULL;
uint dirlen;
@@ -64,7 +64,7 @@ dbtext_db_open(cpchar dbname)
pthis->close = dbtext_db_close;
pthis->opentable = dbtext_db_opentable;
- if (dbname != NULL && *dbname != '\0') {
+ if (dbname[0]) {
dirlen = strlen(dbname);
if ((pthis->dir = strdup(dbname)) == NULL) {
perror("strdup()");
@@ -77,7 +77,7 @@ dbtext_db_open(cpchar dbname)
if (phome == NULL || *phome == '\0') {
phome = ".";
}
- dirlen = strlen(phome) + 5 + 1;
+ dirlen = strlen(phome) + sizeof("/.bmf");
if ((pthis->dir = malloc(dirlen)) == NULL)
goto bail;
@@ -96,15 +96,14 @@ dbtext_db_open(cpchar dbname)
}
/* 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) {
+ snprintf(listpath, sizeof(listpath), "%s/%s", pthis->dir, "goodlist.tx…
+ if (unveil(listpath, rdonly ? "rc" : "rwc") == -1) {
perror("unveil()");
exit(2);
}
- snprintf(listpath, sizeof(listpath), "%s/%s", pthis->dir, "spamlist");
- if (unveil(listpath, "rw") == -1) {
+ snprintf(listpath, sizeof(listpath), "%s/%s", pthis->dir, "spamlist.tx…
+ if (unveil(listpath, rdonly ? "rc" : "rwc") == -1) {
perror("unveil()");
exit(2);
}
@@ -113,7 +112,7 @@ dbtext_db_open(cpchar dbname)
exit(2);
}
- return (dbh_t *)pthis;
+ return pthis;
bail:
if (pthis) {
@@ -222,8 +221,7 @@ dbtext_db_opentable(dbhtext_t * pthis, cpchar table, bool_t…
if (st.st_size == 0) {
return (dbt_t *) ptable;
}
- ptable->pbuf = (char *) malloc(st.st_size);
- if (ptable->pbuf == NULL) {
+ if ((ptable->pbuf = malloc(st.st_size)) == NULL) {
perror("malloc()");
goto bail_uc;
}
diff --git a/dbh.h b/dbh.h
@@ -29,13 +29,6 @@ struct _dbt {
uint(*getcount) (dbt_t *, str_t *);
};
-/* database instance */
-typedef struct _dbh dbh_t;
-struct _dbh {
- bool_t(*close) (dbh_t *);
- dbt_t *(*opentable) (dbh_t *, cpchar, bool_t);
-};
-
typedef struct _dbttext dbttext_t;
struct _dbttext
{
@@ -64,7 +57,7 @@ struct _dbhtext
uint db_getnewcount(veciter_t * piter);
-dbh_t* dbtext_db_open(cpchar dbname);
+dbhtext_t* dbtext_db_open(cpchar dbname, bool_t rdonly);
bool_t dbtext_db_close( dbhtext_t* pthis );
dbt_t* dbtext_db_opentable( dbhtext_t* pthis, cpchar table, bool_t rdonly );
diff --git a/lex.c b/lex.c
@@ -482,10 +482,9 @@ lex_load(lex_t * pthis, int fd)
ssize_t nread;
nalloc = IOBUFSIZE;
- pthis->pbuf = (char *) malloc(IOBUFSIZE);
- if (pthis->pbuf == NULL) {
+ if ((pthis->pbuf = malloc(IOBUFSIZE)) == NULL)
return false;
- }
+
while ((nread = read(fd, pthis->pbuf + pthis->buflen, nalloc - pthis->…
pthis->buflen += nread;
if (pthis->buflen == nalloc) {
diff --git a/vec.c b/vec.c
@@ -28,7 +28,8 @@ vec_create(vec_t * pthis)
{
pthis->nalloc = VEC_INITIAL_SIZE;
pthis->nitems = 0;
- pthis->pitems = (str_t *) malloc(VEC_INITIAL_SIZE * sizeof(str_t));
+ /* TODO: check malloc() */
+ pthis->pitems = malloc(VEC_INITIAL_SIZE * sizeof(str_t));
}
void
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.