X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/f9ba5e2255cf18092750fffacb6a9603571a2be5..3327394394a45c79cd48b2091536f6a6b8ba32a3:/src/src/dbstuff.h diff --git a/src/src/dbstuff.h b/src/src/dbstuff.h index 7adbd4501..8a8a5fb67 100644 --- a/src/src/dbstuff.h +++ b/src/src/dbstuff.h @@ -3,6 +3,7 @@ *************************************************/ /* Copyright (c) University of Cambridge 1995 - 2018 */ +/* Copyright (c) The Exim Maintainers 2020 */ /* See the file NOTICE for conditions of use and distribution. */ /* This header file contains macro definitions so that a variety of DBM @@ -74,7 +75,7 @@ free() must not die when passed NULL */ key.dptr != NULL) /* EXIM_DBDELETE_CURSOR - terminate scanning operation. */ -#define EXIM_DBDELETE_CURSOR(cursor) free(cursor) +#define EXIM_DBDELETE_CURSOR(cursor) store_free(cursor) /* EXIM_DBCLOSE */ #define EXIM_DBCLOSE__(db) tdb_close(db) @@ -435,9 +436,8 @@ before been able to pass successfully. */ #define EXIM_DBSCAN(db, key, data, first, cursor) \ ((db)->seq(db, &key, &data, (first? R_FIRST : R_NEXT)) == 0) -/* EXIM_DBDELETE_CURSOR - terminate scanning operation (null). Make it -refer to cursor, to keep picky compilers happy. */ -#define EXIM_DBDELETE_CURSOR(cursor) { cursor = cursor; } +/* EXIM_DBDELETE_CURSOR - terminate scanning operation (null). */ +#define EXIM_DBDELETE_CURSOR(cursor) { } /* EXIM_DBCLOSE */ #define EXIM_DBCLOSE__(db) (db)->close(db) @@ -523,9 +523,8 @@ typedef struct { (((db)->lkey.dptr != NULL)? (free((db)->lkey.dptr),1) : 1),\ db->lkey = key, key.dptr != NULL) -/* EXIM_DBDELETE_CURSOR - terminate scanning operation (null). Make it -refer to cursor, to keep picky compilers happy. */ -#define EXIM_DBDELETE_CURSOR(cursor) { cursor = cursor; } +/* EXIM_DBDELETE_CURSOR - terminate scanning operation (null). */ +#define EXIM_DBDELETE_CURSOR(cursor) { } /* EXIM_DBCLOSE */ #define EXIM_DBCLOSE__(db) \ @@ -601,9 +600,8 @@ interface */ #define EXIM_DBSCAN(db, key, data, first, cursor) \ (key = (first? dbm_firstkey(db) : dbm_nextkey(db)), key.dptr != NULL) -/* EXIM_DBDELETE_CURSOR - terminate scanning operation (null). Make it -refer to cursor, to keep picky compilers happy. */ -#define EXIM_DBDELETE_CURSOR(cursor) { cursor = cursor; } +/* EXIM_DBDELETE_CURSOR - terminate scanning operation (null). */ +#define EXIM_DBDELETE_CURSOR(cursor) { } /* EXIM_DBCLOSE */ #define EXIM_DBCLOSE__(db) dbm_close(db) @@ -636,18 +634,24 @@ after reading data. */ # define EXIM_DBOPEN(name, dirname, flags, mode, dbpp) \ do { \ DEBUG(D_hints_lookup) \ - debug_printf("EXIM_DBOPEN: file <%s> dir <%s> flags=%s\n", \ + debug_printf_indent("EXIM_DBOPEN: file <%s> dir <%s> flags=%s\n", \ (name), (dirname), \ (flags) == O_RDONLY ? "O_RDONLY" \ : (flags) == O_RDWR ? "O_RDWR" \ : (flags) == (O_RDWR|O_CREAT) ? "O_RDWR|O_CREAT" \ : "??"); \ - EXIM_DBOPEN__(name, dirname, flags, mode, dbpp); \ - DEBUG(D_hints_lookup) debug_printf("returned from EXIM_DBOPEN: %p\n", *dbpp); \ + if (is_tainted(name) || is_tainted(dirname)) \ + { \ + log_write(0, LOG_MAIN|LOG_PANIC, "Tainted name for DB file not permitted"); \ + *dbpp = NULL; \ + } \ + else \ + { EXIM_DBOPEN__(name, dirname, flags, mode, dbpp); } \ + DEBUG(D_hints_lookup) debug_printf_indent("returned from EXIM_DBOPEN: %p\n", *dbpp); \ } while(0) # define EXIM_DBCLOSE(db) \ do { \ - DEBUG(D_hints_lookup) debug_printf("EXIM_DBCLOSE(%p)\n", db); \ + DEBUG(D_hints_lookup) debug_printf_indent("EXIM_DBCLOSE(%p)\n", db); \ EXIM_DBCLOSE__(db); \ } while(0) @@ -786,5 +790,39 @@ typedef struct { uschar bloom[40]; /* Bloom filter which may be larger than this */ } dbdata_ratelimit_unique; +#ifndef DISABLE_PIPE_CONNECT +/* This structure records the EHLO responses, cleartext and crypted, +for an IP, as bitmasks (cf. OPTION_TLS). For LIMITS, also values +advertised for MAILMAX, RCPTMAX and RCPTDOMAINMAX; zero meaning no +value advertised. */ + +typedef struct { + unsigned short cleartext_features; + unsigned short crypted_features; + unsigned short cleartext_auths; + unsigned short crypted_auths; + +# ifdef EXPERIMENTAL_ESMTP_LIMITS + unsigned int limit_mail; + unsigned int limit_rcpt; + unsigned int limit_rcptdom; +# endif +} ehlo_resp_precis; + +typedef struct { + time_t time_stamp; + /*************/ + ehlo_resp_precis data; +} dbdata_ehlo_resp; +#endif + +typedef struct { + time_t time_stamp; + /*************/ + uschar verify_override:1; + uschar ocsp:3; + uschar session[1]; +} dbdata_tls_session; + /* End of dbstuff.h */