X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/d4c9963ace2b653f657c74abecfecb7546c722b1..a85c067ba6c6940512cf57ec213277a370d87e70:/src/src/lookups/cdb.c diff --git a/src/src/lookups/cdb.c b/src/src/lookups/cdb.c index e0faa905d..696e52019 100644 --- a/src/src/lookups/cdb.c +++ b/src/src/lookups/cdb.c @@ -6,8 +6,9 @@ * Exim - CDB database lookup module * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + * Copyright (c) The Exim Maintainers 2020 - 2022 * Copyright (c) 1998 Nigel Metheringham, Planet Online Ltd - * Copyright (c) The Exim Maintainers 2020 + * SPDX-License-Identifier: GPL-2.0-or-later * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -157,19 +158,14 @@ void * mapbuf; if ((fileno = Uopen(filename, O_RDONLY, 0)) < 0) { - int save_errno = errno; - *errmsg = string_open_failed(errno, "%s for cdb lookup", filename); - errno = save_errno; + *errmsg = string_open_failed("%s for cdb lookup", filename); return NULL; } if (fstat(fileno, &statbuf) != 0) { - int save_errno = errno; - *errmsg = string_open_failed(errno, - "fstat(%s) failed - cannot do cdb lookup", + *errmsg = string_open_failed("fstat(%s) failed - cannot do cdb lookup", filename); - errno = save_errno; return NULL; } @@ -178,16 +174,12 @@ CDB_HASH_TABLE bytes long */ if (statbuf.st_size < CDB_HASH_TABLE) { - int save_errno = errno; - *errmsg = string_open_failed(errno, - "%s too short for cdb lookup", - filename); - errno = save_errno; + *errmsg = string_open_failed("%s too short for cdb lookup", filename); return NULL; } /* Having got a file open we need the structure to put things in */ -cdbp = store_get(sizeof(struct cdb_state), FALSE); +cdbp = store_get(sizeof(struct cdb_state), GET_UNTAINTED); /* store_get() does not return if memory was not available... */ /* preload the structure.... */ cdbp->fileno = fileno; @@ -222,7 +214,7 @@ DEBUG(D_lookup) debug_printf_indent("cdb mmap failed - %d\n", errno); /* get a buffer to stash the basic offsets in - this should speed things up a lot - especially on multiple lookups */ -cdbp->cdb_offsets = store_get(CDB_HASH_TABLE, FALSE); +cdbp->cdb_offsets = store_get(CDB_HASH_TABLE, GET_UNTAINTED); /* now fill the buffer up... */ @@ -231,8 +223,7 @@ if (cdb_bread(fileno, cdbp->cdb_offsets, CDB_HASH_TABLE) == -1) /* read of hash table failed, oh dear, oh..... time to give up I think.... call the close routine (deallocs the memory), and return NULL */ - *errmsg = string_open_failed(errno, - "cannot read header from %s for cdb lookup", + *errmsg = string_open_failed("cannot read header from %s for cdb lookup", filename); cdb_close(cdbp); return NULL; @@ -353,7 +344,7 @@ if (cdbp->cdb_map != NULL) /* ... and the returned result. Assume it is not tainted, lacking any way of telling. */ - *result = store_get(item_dat_len + 1, FALSE); + *result = store_get(item_dat_len + 1, GET_UNTAINTED); memcpy(*result, item_ptr, item_dat_len); (*result)[item_dat_len] = 0; return OK; @@ -397,7 +388,7 @@ for (int loop = 0; (loop < hash_offlen); ++loop) if (item_key_len == key_len) { /* finally check if key matches */ rmark reset_point = store_mark(); - uschar * item_key = store_get(key_len, TRUE); /* keys liable to be tainted */ + uschar * item_key = store_get(key_len, GET_TAINTED); /* keys liable to be tainted */ if (cdb_bread(cdbp->fileno, item_key, key_len) == -1) return DEFER; if (Ustrncmp(keystring, item_key, key_len) == 0) @@ -411,7 +402,7 @@ for (int loop = 0; (loop < hash_offlen); ++loop) /* then we build a new result string. We know we have enough memory so disable Coverity errors about the tainted item_dat_ken */ - *result = store_get(item_dat_len + 1, FALSE); + *result = store_get(item_dat_len + 1, GET_UNTAINTED); /* coverity[tainted_data] */ if (cdb_bread(cdbp->fileno, *result, item_dat_len) == -1) return DEFER; @@ -468,12 +459,13 @@ if (cdbp->cdb_map) #include "../version.h" -void -cdb_version_report(FILE *f) +gstring * +cdb_version_report(gstring * g) { #ifdef DYNLOOKUP -fprintf(f, "Library version: CDB: Exim version %s\n", EXIM_VERSION_STR); +g = string_fmt_append(g, "Library version: CDB: Exim version %s\n", EXIM_VERSION_STR); #endif +return g; }