diff --git a/enforcer/src/db/db_schema_mysql.c b/enforcer/src/db/db_schema_mysql.c index 404d1d3..f926a26 100644 --- a/enforcer/src/db/db_schema_mysql.c +++ b/enforcer/src/db/db_schema_mysql.c @@ -53,7 +53,7 @@ const char* db_schema_mysql_create[] = { 0, "CREATE INDEX keyDependencyToKeyDataId ON keyDependency ( toKeyDataId )", 0, - "CREATE TABLE hsmKey ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL, rev INT UNSIGNED NOT NULL DEFAULT 1, policyId BIGINT UNSIGNED NOT NULL, locator TEXT NOT NULL, state INT NOT NULL, bits INT UNSIGNED NOT NULL, algorithm INT UNSIGNED NOT NULL, role INT NOT NULL, inception INT UNSIGNED NOT NULL, isRevoked INT UNSIGNED NOT NULL, keyType INT NOT NULL, repository TEXT NOT NULL, backup INT NOT NULL)", + "CREATE TABLE hsmKey ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL, rev INT UNSIGNED NOT NULL DEFAULT 1, policyId BIGINT UNSIGNED NOT NULL, locator TEXT NOT NULL, state INT NOT NULL, bits INT UNSIGNED NOT NULL, algorithm INT UNSIGNED NOT NULL, role INT NOT NULL, inception INT UNSIGNED NOT NULL, isRevoked INT UNSIGNED NOT NULL, keyType INT NOT NULL, repository TEXT NOT NULL, backup INT NOT NULL, prebackupTime INT UNSIGNED NOT NULL, backupTime INT UNSIGNED NOT NULL )", 0, "CREATE INDEX hsmKeyPolicyId ON hsmKey ( policyId )", 0, diff --git a/enforcer/src/db/db_schema_sqlite.c b/enforcer/src/db/db_schema_sqlite.c index f72d1d1..3d4c86a 100644 --- a/enforcer/src/db/db_schema_sqlite.c +++ b/enforcer/src/db/db_schema_sqlite.c @@ -53,7 +53,7 @@ const char* db_schema_sqlite_create[] = { 0, "CREATE INDEX keyDependencyToKeyDataId ON keyDependency ( toKeyDataId )", 0, - "CREATE TABLE hsmKey ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, rev INTEGER NOT NULL DEFAULT 1, policyId INTEGER NOT NULL, locator TEXT NOT NULL, state INT NOT NULL, bits UNSIGNED INT NOT NULL, algorithm UNSIGNED INT NOT NULL, role INT NOT NULL, inception UNSIGNED INT NOT NULL, isRevoked UNSIGNED INT NOT NULL, keyType INT NOT NULL, repository TEXT NOT NULL, backup INT NOT NULL)", + "CREATE TABLE hsmKey ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, rev INTEGER NOT NULL DEFAULT 1, policyId INTEGER NOT NULL, locator TEXT NOT NULL, state INT NOT NULL, bits UNSIGNED INT NOT NULL, algorithm UNSIGNED INT NOT NULL, role INT NOT NULL, inception UNSIGNED INT NOT NULL, isRevoked UNSIGNED INT NOT NULL, keyType INT NOT NULL, repository TEXT NOT NULL, backup INT NOT NULL, prebackupTime INT UNSIGNED NOT NULL, backupTime INT UNSIGNED NOT NULL )", 0, "CREATE INDEX hsmKeyPolicyId ON hsmKey ( policyId )", 0, diff --git a/enforcer/src/db/hsm_key.c b/enforcer/src/db/hsm_key.c index 5af3b89..b3a30ce 100644 --- a/enforcer/src/db/hsm_key.c +++ b/enforcer/src/db/hsm_key.c @@ -228,6 +228,28 @@ static db_object_t* __hsm_key_new_object(const db_connection_t* connection) { return NULL; } + if (!(object_field = db_object_field_new()) + || db_object_field_set_name(object_field, "prebackupTime") + || db_object_field_set_type(object_field, DB_TYPE_UINT32) + || db_object_field_list_add(object_field_list, object_field)) + { + db_object_field_free(object_field); + db_object_field_list_free(object_field_list); + db_object_free(object); + return NULL; + } + + if (!(object_field = db_object_field_new()) + || db_object_field_set_name(object_field, "backupTime") + || db_object_field_set_type(object_field, DB_TYPE_UINT32) + || db_object_field_list_add(object_field_list, object_field)) + { + db_object_field_free(object_field); + db_object_field_list_free(object_field_list); + db_object_free(object); + return NULL; + } + if (db_object_set_object_field_list(object, object_field_list)) { db_object_field_list_free(object_field_list); db_object_free(object); @@ -428,7 +452,7 @@ int hsm_key_from_result(hsm_key_t* hsm_key, const db_result_t* result) { } hsm_key->repository = NULL; if (!(value_set = db_result_value_set(result)) - || db_value_set_size(value_set) != 13 + || db_value_set_size(value_set) != 15 || db_value_copy(&(hsm_key->id), db_value_set_at(value_set, 0)) || db_value_copy(&(hsm_key->rev), db_value_set_at(value_set, 1)) || db_value_copy(&(hsm_key->policy_id), db_value_set_at(value_set, 2)) @@ -441,7 +465,9 @@ int hsm_key_from_result(hsm_key_t* hsm_key, const db_result_t* result) { || db_value_to_uint32(db_value_set_at(value_set, 9), &(hsm_key->is_revoked)) || db_value_to_enum_value(db_value_set_at(value_set, 10), &key_type, hsm_key_enum_set_key_type) || db_value_to_text(db_value_set_at(value_set, 11), &(hsm_key->repository)) - || db_value_to_enum_value(db_value_set_at(value_set, 12), &backup, hsm_key_enum_set_backup)) + || db_value_to_enum_value(db_value_set_at(value_set, 12), &backup, hsm_key_enum_set_backup) + || db_value_to_uint32(db_value_set_at(value_set, 13), &(hsm_key->prebackup_time)) + || db_value_to_uint32(db_value_set_at(value_set, 14), &(hsm_key->backup_time))) { return DB_ERROR_UNKNOWN; } @@ -581,6 +607,22 @@ hsm_key_backup_t hsm_key_backup(const hsm_key_t* hsm_key) { return hsm_key->backup; } +unsigned int hsm_key_prebackup_time(const hsm_key_t* hsm_key) { + if (!hsm_key) { + return 0; + } + + return hsm_key->prebackup_time; +} + +int hsm_key_set_backup_time(hsm_key_t* hsm_key, unsigned int time) { + if (!hsm_key) { + return DB_ERROR_UNKNOWN; + } + + hsm_key->backup_time = time; + + return DB_OK; +} + db_clause_t* hsm_key_policy_id_clause(db_clause_list_t* clause_list, const db_value_t* policy_id) { db_clause_t* clause; @@ -1071,7 +1133,27 @@ int hsm_key_create(hsm_key_t* hsm_key) { return DB_ERROR_UNKNOWN; } - if (!(value_set = db_value_set_new(11))) { + if (!(object_field = db_object_field_new()) + || db_object_field_set_name(object_field, "prebackupTime") + || db_object_field_set_type(object_field, DB_TYPE_UINT32) + || db_object_field_list_add(object_field_list, object_field)) + { + db_object_field_free(object_field); + db_object_field_list_free(object_field_list); + return DB_ERROR_UNKNOWN; + } + + if (!(object_field = db_object_field_new()) + || db_object_field_set_name(object_field, "backupTime") + || db_object_field_set_type(object_field, DB_TYPE_UINT32) + || db_object_field_list_add(object_field_list, object_field)) + { + db_object_field_free(object_field); + db_object_field_list_free(object_field_list); + return DB_ERROR_UNKNOWN; + } + + if (!(value_set = db_value_set_new(13))) { db_object_field_list_free(object_field_list); return DB_ERROR_UNKNOWN; } @@ -1086,7 +1168,9 @@ int hsm_key_create(hsm_key_t* hsm_key) { || db_value_from_uint32(db_value_set_get(value_set, 7), hsm_key->is_revoked) || db_value_from_enum_value(db_value_set_get(value_set, 8), hsm_key->key_type, hsm_key_enum_set_key_type) || db_value_from_text(db_value_set_get(value_set, 9), hsm_key->repository) - || db_value_from_enum_value(db_value_set_get(value_set, 10), hsm_key->backup, hsm_key_enum_set_backup)) + || db_value_from_enum_value(db_value_set_get(value_set, 10), hsm_key->backup, hsm_key_enum_set_backup) + || db_value_from_uint32(db_value_set_get(value_set, 11), hsm_key->prebackup_time) + || db_value_from_uint32(db_value_set_get(value_set, 12), hsm_key->backup_time)) { db_value_set_free(value_set); db_object_field_list_free(object_field_list); @@ -1386,7 +1490,9 @@ int hsm_key_update(hsm_key_t* hsm_key) { || db_value_from_uint32(db_value_set_get(value_set, 7), hsm_key->is_revoked) || db_value_from_enum_value(db_value_set_get(value_set, 8), hsm_key->key_type, hsm_key_enum_set_key_type) || db_value_from_text(db_value_set_get(value_set, 9), hsm_key->repository) - || db_value_from_enum_value(db_value_set_get(value_set, 10), hsm_key->backup, hsm_key_enum_set_backup)) + || db_value_from_enum_value(db_value_set_get(value_set, 10), hsm_key->backup, hsm_key_enum_set_backup) + || db_value_from_uint32(db_value_set_get(value_set, 11), hsm_key->prebackup_time) + || db_value_from_uint32(db_value_set_get(value_set, 12), hsm_key->backup_time)) { db_value_set_free(value_set); db_object_field_list_free(object_field_list); diff --git a/enforcer/src/db/hsm_key.h b/enforcer/src/db/hsm_key.h index 55cfea4..c7c7848 100644 --- a/enforcer/src/db/hsm_key.h +++ b/enforcer/src/db/hsm_key.h @@ -91,6 +91,8 @@ struct hsm_key { hsm_key_key_type_t key_type; char* repository; hsm_key_backup_t backup; + unsigned int prebackup_time; + unsigned int backup_time; }; /** @@ -199,6 +201,9 @@ const char* hsm_key_repository(const hsm_key_t* hsm_key); */ hsm_key_backup_t hsm_key_backup(const hsm_key_t* hsm_key); +unsigned int hsm_key_prebackup_time(const hsm_key_t* hsm_key); + +unsigned int hsm_key_backup_time(const hsm_key_t* hsm_key); /** * Set the policy_id of a hsm key object. If this fails the original value may have been lost. * \param[in] hsm_key a hsm_key_t pointer. @@ -279,6 +284,10 @@ int hsm_key_set_repository(hsm_key_t* hsm_key, const char* repository_text); */ int hsm_key_set_backup(hsm_key_t* hsm_key, hsm_key_backup_t backup); +int hsm_key_set_prebackup_time(hsm_key_t* hsm_key, unsigned int time); + +int hsm_key_set_backup_time(hsm_key_t* hsm_key, unsigned int time); + /** * Create a clause for policy_id of a hsm key object and add it to a database clause list. * The clause operator is set to DB_CLAUSE_OPERATOR_AND and the clause type is diff --git a/enforcer/src/db/schema.mysql b/enforcer/src/db/schema.mysql index bcccddc..349a274 100644 --- a/enforcer/src/db/schema.mysql +++ b/enforcer/src/db/schema.mysql @@ -107,7 +107,9 @@ CREATE TABLE hsmKey ( isRevoked INT UNSIGNED NOT NULL, keyType INT NOT NULL, repository TEXT NOT NULL, - backup INT NOT NULL + backup INT NOT NULL, + prebackupTime INT UNSIGNED NOT NULL, + backupTime INT UNSIGNED NOT NULL ); CREATE INDEX hsmKeyPolicyId ON hsmKey ( policyId );