diff --git a/opendkim/opendkim-db.c b/opendkim/opendkim-db.c index 3e1a17b..ddf5969 100644 --- a/opendkim/opendkim-db.c +++ b/opendkim/opendkim-db.c @@ -2687,6 +2687,30 @@ dkimf_db_get(DKIMF_DB db, void *buf, size_t buflen, assert(buf != NULL); assert(req != NULL || reqnum == 0); + /* + ** Indicate "not found" if we require ASCII-only and there was + ** non-ASCII in the query. + */ + + if ((db->db_flags & DKIMF_DB_FLAG_ASCIIONLY) != 0) + { + char *p; + char *end; + + end = (char *) buf + buflen; + + for (p = (char *) buf; p <= end; p++) + { + if (!isascii(*p)) + { + if (*exists) + *exists = FALSE; + + return 0; + } + } + } + switch (db->db_type) { case DKIMF_DB_TYPE_FILE: diff --git a/opendkim/opendkim-db.h b/opendkim/opendkim-db.h index 93e7652..16513ef 100644 --- a/opendkim/opendkim-db.h +++ b/opendkim/opendkim-db.h @@ -25,6 +25,7 @@ static char opendkim_db_h_id[] = "@(#)$Id: opendkim-db.h,v 1.15 2010/09/16 04:47 #define DKIMF_DB_FLAG_VALLIST 0x08 #define DKIMF_DB_FLAG_USETLS 0x10 #define DKIMF_DB_FLAG_MAKELOCK 0x20 +#define DKIMF_DB_FLAG_ASCIIONLY 0x40 #define DKIMF_DB_TYPE_UNKNOWN (-1) #define DKIMF_DB_TYPE_FILE 0 diff --git a/opendkim/opendkim.c b/opendkim/opendkim.c index 2d89c9c..910a206 100644 --- a/opendkim/opendkim.c +++ b/opendkim/opendkim.c @@ -7178,6 +7178,7 @@ dkimf_config_load(struct config *data, struct dkimf_config *conf, status = dkimf_db_open(&conf->conf_signtabledb, conf->conf_signtable, (DKIMF_DB_FLAG_ICASE | + DKIMF_DB_FLAG_ASCIIONLY | DKIMF_DB_FLAG_READONLY), NULL, &dberr); if (status != 0) @@ -15598,7 +15599,9 @@ main(int argc, char **argv) *p = '\0'; p = NULL; - status = dkimf_db_open(&dbtest, dbname, DKIMF_DB_FLAG_READONLY, + status = dkimf_db_open(&dbtest, dbname, + (DKIMF_DB_FLAG_READONLY | + DKIMF_DB_FLAG_ASCIIONLY), NULL, &p); if (status != 0) {