#define MAX_WORDS 2
-static void
+static int
load_keys(void)
{
char *dump_dir, line[1024], *words[MAX_WORDS];
dump_dir = CNF_GetNtsDumpDir();
if (!dump_dir)
- return;
+ return 0;
f = UTI_OpenFile(dump_dir, DUMP_FILENAME, NULL, 'r', 0);
if (!f)
- return;
+ return 0;
if (!fgets(line, sizeof (line), f) || strcmp(line, DUMP_IDENTIFIER) != 0 ||
!fgets(line, sizeof (line), f) || UTI_SplitString(line, words, MAX_WORDS) != 2 ||
fclose(f);
- return;
+ return 1;
error:
DEBUG_LOG("Could not %s server keys", "load");
fclose(f);
+
+ return 0;
}
/* ================================================== */
server_sock_fd4 = open_socket(IPADDR_INET4);
server_sock_fd6 = open_socket(IPADDR_INET6);
- load_keys();
-
key_rotation_interval = MAX(CNF_GetNtsRotate(), 0);
+ /* Reload saved keys, or save the new keys */
+ if (!load_keys())
+ save_keys();
+
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);