X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsrc%2Fdbfn.c;h=452e2ade6a0330fc96256188dbaf7086768806f6;hb=6acb441b40bbcded2e85819c71a068db713e7ca6;hp=a37271f36f00a5f9f1c0e99e4f9d94e9bf17e385;hpb=ca22cc0abe93c28f3d296d99c239413bb0d079c4;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/dbfn.c b/src/src/dbfn.c index a37271f36..452e2ade6 100644 --- a/src/src/dbfn.c +++ b/src/src/dbfn.c @@ -333,6 +333,34 @@ return yield; } +/* Read a record. If the length is not as expected then delete it, write +an error log line and return NULL. +Use this for fixed-size records (so not retry or wait records). + +Arguments: + dbblock a pointer to an open database block + key the key of the record to be read + length the expected record length + +Returns: a pointer to the retrieved record, or + NULL if the record is not found/bad +*/ + +void * +dbfn_read_enforce_length(open_db * dbblock, const uschar * key, size_t length) +{ +int rlen; +void * yield = dbfn_read_with_length(dbblock, key, &rlen); + +if (yield) + { + if (rlen == length) return yield; + log_write(0, LOG_MAIN|LOG_PANIC, "Bad db record size for '%s'", key); + dbfn_delete(dbblock, key); + } +return NULL; +} + /************************************************* * Write to database file *