nts: enable external management of server keys
If ntsrotate is set to 0, don't generate new server keys and don't save them to ntsdumpdir. This allows the keys to be managed externally and shared with other servers.
This commit is contained in:
parent
0344b9a9c9
commit
85fa29c43d
1 changed files with 13 additions and 7 deletions
|
@ -52,8 +52,6 @@
|
||||||
#define MAX_SERVER_KEYS (1U << KEY_ID_INDEX_BITS)
|
#define MAX_SERVER_KEYS (1U << KEY_ID_INDEX_BITS)
|
||||||
#define FUTURE_KEYS 1
|
#define FUTURE_KEYS 1
|
||||||
|
|
||||||
#define MIN_KEY_ROTATE_INTERVAL 1.0
|
|
||||||
|
|
||||||
#define DUMP_FILENAME "ntskeys"
|
#define DUMP_FILENAME "ntskeys"
|
||||||
#define DUMP_IDENTIFIER "NKS0\n"
|
#define DUMP_IDENTIFIER "NKS0\n"
|
||||||
|
|
||||||
|
@ -83,6 +81,7 @@ typedef struct {
|
||||||
static ServerKey server_keys[MAX_SERVER_KEYS];
|
static ServerKey server_keys[MAX_SERVER_KEYS];
|
||||||
static int current_server_key;
|
static int current_server_key;
|
||||||
static double last_server_key_ts;
|
static double last_server_key_ts;
|
||||||
|
static int key_rotation_interval;
|
||||||
|
|
||||||
static int server_sock_fd4;
|
static int server_sock_fd4;
|
||||||
static int server_sock_fd6;
|
static int server_sock_fd6;
|
||||||
|
@ -457,6 +456,11 @@ save_keys(void)
|
||||||
double last_key_age;
|
double last_key_age;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
|
||||||
|
/* Don't save the keys if rotation is disabled to enable an external
|
||||||
|
management of the keys (e.g. share them with another server) */
|
||||||
|
if (key_rotation_interval == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
dump_dir = CNF_GetNtsDumpDir();
|
dump_dir = CNF_GetNtsDumpDir();
|
||||||
if (!dump_dir)
|
if (!dump_dir)
|
||||||
return;
|
return;
|
||||||
|
@ -565,8 +569,7 @@ key_timeout(void *arg)
|
||||||
generate_key((current_server_key + FUTURE_KEYS) % MAX_SERVER_KEYS);
|
generate_key((current_server_key + FUTURE_KEYS) % MAX_SERVER_KEYS);
|
||||||
save_keys();
|
save_keys();
|
||||||
|
|
||||||
SCH_AddTimeoutByDelay(MAX(CNF_GetNtsRotate(), MIN_KEY_ROTATE_INTERVAL),
|
SCH_AddTimeoutByDelay(key_rotation_interval, key_timeout, NULL);
|
||||||
key_timeout, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
|
@ -647,9 +650,12 @@ NKS_Initialise(int scfilter_level)
|
||||||
|
|
||||||
load_keys();
|
load_keys();
|
||||||
|
|
||||||
key_delay = MAX(CNF_GetNtsRotate(), MIN_KEY_ROTATE_INTERVAL) -
|
key_rotation_interval = MAX(CNF_GetNtsRotate(), 0);
|
||||||
(SCH_GetLastEventMonoTime() - last_server_key_ts);
|
|
||||||
SCH_AddTimeoutByDelay(MAX(key_delay, 0.0), key_timeout, NULL);
|
if (key_rotation_interval > 0) {
|
||||||
|
key_delay = key_rotation_interval - (SCH_GetLastEventMonoTime() - last_server_key_ts);
|
||||||
|
SCH_AddTimeoutByDelay(MAX(key_delay, 0.0), key_timeout, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
processes = CNF_GetNtsServerProcesses();
|
processes = CNF_GetNtsServerProcesses();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue