Introduce new host_flags field
While we're at it with migration, might as well add a host_flags field so that if we have host-specific configuration flags we want to add later on, we only have to do a migration once.
This commit is contained in:
parent
af29d9cbf8
commit
bd5caae1ee
2
keydb.c
2
keydb.c
@ -298,8 +298,10 @@ static bool keydb_migrate_v2_to_v3(void **keydb_data, unsigned int *keydb_data_s
|
|||||||
.host_count = old_db->host_count,
|
.host_count = old_db->host_count,
|
||||||
};
|
};
|
||||||
for (unsigned int i = 0; i < new_db->host_count; i++) {
|
for (unsigned int i = 0; i < new_db->host_count; i++) {
|
||||||
|
/* Do not copy over host_flags or volumes */
|
||||||
memcpy(&new_db->hosts[i], &old_db->hosts[i], sizeof(old_db->hosts[i]) - sizeof(old_db->hosts[i].volumes));
|
memcpy(&new_db->hosts[i], &old_db->hosts[i], sizeof(old_db->hosts[i]) - sizeof(old_db->hosts[i].volumes));
|
||||||
for (unsigned int j = 0; j < new_db->hosts[i].volume_count; j++) {
|
for (unsigned int j = 0; j < new_db->hosts[i].volume_count; j++) {
|
||||||
|
/* Do not copy over volume_flags */
|
||||||
memcpy(&new_db->hosts[i].volumes[j], &old_db->hosts[i].volumes[j], sizeof(old_db->hosts[i].volumes[j]));
|
memcpy(&new_db->hosts[i].volumes[j], &old_db->hosts[i].volumes[j], sizeof(old_db->hosts[i].volumes[j]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
21
keydb.h
21
keydb.h
@ -30,20 +30,26 @@
|
|||||||
#include "file_encryption.h"
|
#include "file_encryption.h"
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
|
||||||
|
#define ALIGNED __attribute__ ((aligned(4)))
|
||||||
|
|
||||||
enum volume_flag_t {
|
enum volume_flag_t {
|
||||||
VOLUME_FLAG_ALLOW_DISCARD = (1 << 0),
|
VOLUME_FLAG_ALLOW_DISCARD = (1 << 0),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Unused so far */
|
||||||
|
enum host_flag_t {
|
||||||
|
HOST_FLAG_UNUSED = 0,
|
||||||
|
};
|
||||||
|
|
||||||
struct keydb_common_header_t {
|
struct keydb_common_header_t {
|
||||||
unsigned int keydb_version;
|
unsigned int keydb_version;
|
||||||
};
|
} ALIGNED;
|
||||||
|
|
||||||
struct volume_entry_v2_t {
|
struct volume_entry_v2_t {
|
||||||
uint8_t volume_uuid[16]; /* UUID of crypt_LUKS volume */
|
uint8_t volume_uuid[16]; /* UUID of crypt_LUKS volume */
|
||||||
char devmapper_name[MAX_DEVMAPPER_NAME_LENGTH]; /* dmsetup name when unlocked. Zero-terminated string. */
|
char devmapper_name[MAX_DEVMAPPER_NAME_LENGTH]; /* dmsetup name when unlocked. Zero-terminated string. */
|
||||||
uint8_t luks_passphrase_raw[LUKS_PASSPHRASE_RAW_SIZE_BYTES]; /* LUKS passphrase used to unlock volume; raw byte data */
|
uint8_t luks_passphrase_raw[LUKS_PASSPHRASE_RAW_SIZE_BYTES]; /* LUKS passphrase used to unlock volume; raw byte data */
|
||||||
};
|
} ALIGNED;
|
||||||
|
|
||||||
struct host_entry_v2_t {
|
struct host_entry_v2_t {
|
||||||
uint8_t host_uuid[16]; /* Host UUID */
|
uint8_t host_uuid[16]; /* Host UUID */
|
||||||
@ -51,36 +57,37 @@ struct host_entry_v2_t {
|
|||||||
uint8_t tls_psk[PSK_SIZE_BYTES]; /* Raw byte data of TLS-PSK that is used */
|
uint8_t tls_psk[PSK_SIZE_BYTES]; /* Raw byte data of TLS-PSK that is used */
|
||||||
unsigned int volume_count; /* Number of volumes of this host */
|
unsigned int volume_count; /* Number of volumes of this host */
|
||||||
struct volume_entry_v2_t volumes[MAX_VOLUMES_PER_HOST]; /* Volumes of this host */
|
struct volume_entry_v2_t volumes[MAX_VOLUMES_PER_HOST]; /* Volumes of this host */
|
||||||
};
|
} ALIGNED;
|
||||||
|
|
||||||
struct keydb_v2_t {
|
struct keydb_v2_t {
|
||||||
struct keydb_common_header_t common;
|
struct keydb_common_header_t common;
|
||||||
bool server_database;
|
bool server_database;
|
||||||
unsigned int host_count;
|
unsigned int host_count;
|
||||||
struct host_entry_v2_t hosts[];
|
struct host_entry_v2_t hosts[];
|
||||||
};
|
} ALIGNED;
|
||||||
|
|
||||||
struct volume_entry_v3_t {
|
struct volume_entry_v3_t {
|
||||||
uint8_t volume_uuid[16]; /* UUID of crypt_LUKS volume */
|
uint8_t volume_uuid[16]; /* UUID of crypt_LUKS volume */
|
||||||
char devmapper_name[MAX_DEVMAPPER_NAME_LENGTH]; /* dmsetup name when unlocked. Zero-terminated string. */
|
char devmapper_name[MAX_DEVMAPPER_NAME_LENGTH]; /* dmsetup name when unlocked. Zero-terminated string. */
|
||||||
uint8_t luks_passphrase_raw[LUKS_PASSPHRASE_RAW_SIZE_BYTES]; /* LUKS passphrase used to unlock volume; raw byte data */
|
uint8_t luks_passphrase_raw[LUKS_PASSPHRASE_RAW_SIZE_BYTES]; /* LUKS passphrase used to unlock volume; raw byte data */
|
||||||
unsigned int volume_flags; /* Bitset of enum volume_flag_t */
|
unsigned int volume_flags; /* Bitset of enum volume_flag_t */
|
||||||
};
|
} ALIGNED;
|
||||||
|
|
||||||
struct host_entry_v3_t {
|
struct host_entry_v3_t {
|
||||||
uint8_t host_uuid[16]; /* Host UUID */
|
uint8_t host_uuid[16]; /* Host UUID */
|
||||||
char host_name[MAX_HOST_NAME_LENGTH]; /* Descriptive name of host */
|
char host_name[MAX_HOST_NAME_LENGTH]; /* Descriptive name of host */
|
||||||
uint8_t tls_psk[PSK_SIZE_BYTES]; /* Raw byte data of TLS-PSK that is used */
|
uint8_t tls_psk[PSK_SIZE_BYTES]; /* Raw byte data of TLS-PSK that is used */
|
||||||
unsigned int volume_count; /* Number of volumes of this host */
|
unsigned int volume_count; /* Number of volumes of this host */
|
||||||
|
unsigned int host_flags; /* Bitset of enum host_flag_t */
|
||||||
struct volume_entry_v3_t volumes[MAX_VOLUMES_PER_HOST]; /* Volumes of this host */
|
struct volume_entry_v3_t volumes[MAX_VOLUMES_PER_HOST]; /* Volumes of this host */
|
||||||
};
|
} ALIGNED;
|
||||||
|
|
||||||
struct keydb_v3_t {
|
struct keydb_v3_t {
|
||||||
struct keydb_common_header_t common;
|
struct keydb_common_header_t common;
|
||||||
bool server_database;
|
bool server_database;
|
||||||
unsigned int host_count;
|
unsigned int host_count;
|
||||||
struct host_entry_v3_t hosts[];
|
struct host_entry_v3_t hosts[];
|
||||||
};
|
} ALIGNED;
|
||||||
|
|
||||||
|
|
||||||
#define KEYDB_CURRENT_VERSION 3
|
#define KEYDB_CURRENT_VERSION 3
|
||||||
|
Loading…
Reference in New Issue
Block a user