From: Eric Bollengier Date: Thu, 13 Oct 2022 16:15:43 +0000 (+0200) Subject: Fix #9594 Use a default date when the data has not timestamp X-Git-Tag: Beta-15.0.0~494 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f626f3f8d5aee897de3e4724f4801393be9f9240;p=thirdparty%2Fbacula.git Fix #9594 Use a default date when the data has not timestamp --- diff --git a/bacula/src/cats/cats.c b/bacula/src/cats/cats.c index 6ac780635..0d3bdeeed 100644 --- a/bacula/src/cats/cats.c +++ b/bacula/src/cats/cats.c @@ -476,7 +476,7 @@ static struct json_sql email_json_v1[] = { SAME_KW("EmailInternetMessageId", OT_STRING), SAME_KW("EmailIsRead", OT_BOOL), SAME_KW("EmailIsDraft", OT_BOOL), - SAME_KW("EmailTime", OT_STRING), + SAME_KW("EmailTime", OT_DATE), SAME_KW("EmailSubject", OT_STRING), SAME_KW("EmailTags", OT_STRING), SAME_KW("EmailTo", OT_STRING), @@ -539,6 +539,26 @@ bool META_JSON_SCANNER::parse(JCR *jcr, BDB *db, first?' ':',', val->valuedouble == 0 ? 0 : 1); break; + case OT_DATE: + { + const char *def = sql_now[db_get_type_index(db)]; + if (!cJSON_IsString(val) || (val->valuestring == NULL)) { + Mmsg(dest, "JSON Error: Unable to find %s", m_j2s[i].json_name); + goto bail_out; + } + // TODO: Need to check the date format + if (val->valuestring[0] != 0) { // not empty string + def = val->valuestring; + } + len = strlen(def); + esc.check_size(len*2+1); + db_escape_string(jcr, db, esc.c_str(), def, len); + + Mmsg(tmp, "%c'%s'", + first?' ':',', + esc.c_str()); + } + break; case OT_STRING: if (!cJSON_IsString(val) || (val->valuestring == NULL)) { Mmsg(dest, "JSON Error: Unable to find %s", m_j2s[i].json_name); diff --git a/bacula/src/cats/sql_cmds.c b/bacula/src/cats/sql_cmds.c index 82d5a54cb..80339a335 100644 --- a/bacula/src/cats/sql_cmds.c +++ b/bacula/src/cats/sql_cmds.c @@ -986,6 +986,15 @@ const char *update_counter_values[] = update_counter_values_default }; +const char *sql_now[] = { + /* MySQL */ + " NOW() ", + /* PostgreSQL */ + " NOW() ", + /* SQLite */ + " strftime('%s', datetime('now', 'localtime')) " +}; + const char *prune_cache[] = { /* MySQL */ " (Media.LastWritten + Media.CacheRetention) < NOW() ", diff --git a/bacula/src/cats/sql_cmds.h b/bacula/src/cats/sql_cmds.h index 3b589cc47..656f976dc 100644 --- a/bacula/src/cats/sql_cmds.h +++ b/bacula/src/cats/sql_cmds.h @@ -27,6 +27,7 @@ * Kern Sibbald, July MMII */ +extern const char CATS_IMP_EXP *sql_now[]; extern const char CATS_IMP_EXP *batch_fill_filename_query[]; extern const char CATS_IMP_EXP *batch_fill_path_query[]; extern const char CATS_IMP_EXP *batch_lock_filename_query[];