From: Aki Tuomi Date: Thu, 16 Sep 2021 07:39:54 +0000 (+0300) Subject: lib-sql: driver-sqlite - Support options X-Git-Tag: 2.4.0~4732 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4b06dde653113e855cdc0939f7667136ae92920d;p=thirdparty%2Fdovecot%2Fcore.git lib-sql: driver-sqlite - Support options No spaces or '=' are permitted in filename after this. --- diff --git a/src/lib-sql/driver-sqlite.c b/src/lib-sql/driver-sqlite.c index 4249a53058..da8ab9456b 100644 --- a/src/lib-sql/driver-sqlite.c +++ b/src/lib-sql/driver-sqlite.c @@ -6,6 +6,7 @@ #include "str.h" #include "hex-binary.h" #include "sql-api-private.h" +#include "strfuncs.h" #ifdef BUILD_SQLITE #include @@ -76,9 +77,29 @@ static void driver_sqlite_disconnect(struct sql_db *_db) static int driver_sqlite_parse_connect_string(struct sqlite_db *db, const char *connect_string, - const char **error_r ATTR_UNUSED) + const char **error_r) { - db->dbfile = p_strdup(db->pool, connect_string); + const char *const *params = t_strsplit_spaces(connect_string, " "); + const char *file = NULL; + + if (str_array_length(params) < 1) { + *error_r = "Empty connect_string"; + return -1; + } + + for (; *params != NULL; params++) { + if (strchr(*params, '=') != NULL) { + *error_r = t_strdup_printf("Unsupported parameter '%s'", *params); + return -1; + } else if (file == NULL) { + file = *params; + } else { + *error_r = "Multiple filenames provided"; + return -1; + } + } + + db->dbfile = p_strdup(db->pool, file); return 0; }