From 4a2159f128ec9004ae12528c4a876158248bf944 Mon Sep 17 00:00:00 2001 From: sr Date: Wed, 5 Sep 2012 19:11:40 +0200 Subject: [SERVER] Fix saving of trusted server data --- src/server/job.c | 10 +++++++--- src/server/saveload.c | 14 +++++++++++++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/server/job.c b/src/server/job.c index 799e69e..3c9bdc9 100644 --- a/src/server/job.c +++ b/src/server/job.c @@ -361,10 +361,14 @@ static void add_alt_server(dnbd3_image_t *image, dnbd3_host_t *host) if (image->servers[i].host.type == 0) { image->servers[i].host = *host; + image->servers[i].failures = 0; break; } } - // Broadcast to connected clients + if (i >= NUMBER_SERVERS) // To many known alt servers already + return; + // Broadcast to connected clients. Note that i now points to the new server + printf("[DEBUG] Adding alt server to %s\n", image->low_name); GSList *itc; dnbd3_reply_t header; header.cmd = CMD_GET_SERVERS; @@ -377,9 +381,9 @@ static void add_alt_server(dnbd3_image_t *image, dnbd3_host_t *host) if (client->image == image) { // Don't send message directly as the lock is being held; instead, enqueue it - NEW_BINSTRING(message, sizeof(header) + sizeof(*host)); + NEW_BINSTRING(message, sizeof(header) + sizeof(image->servers[i])); memcpy(message->data, &header, sizeof(header)); - memcpy(message->data + sizeof(header), host, sizeof(*host)); + memcpy(message->data + sizeof(header), &image->servers[i], sizeof(image->servers[i])); client->sendqueue = g_slist_append(client->sendqueue, message); } } diff --git a/src/server/saveload.c b/src/server/saveload.c index 2aaa1f3..e56c5d1 100644 --- a/src/server/saveload.c +++ b/src/server/saveload.c @@ -613,10 +613,11 @@ dnbd3_trusted_server_t *dnbd3_get_trusted_server(char *address, char create_if_n char addrbuffer[50]; host_to_string(&server.host, addrbuffer, 50); g_key_file_set_string(_config_handle, groupname, "address", addrbuffer); - free(groupname); dnbd3_trusted_server_t *copy = malloc(sizeof(server)); memcpy(copy, &server, sizeof(*copy)); + copy->comment = strdup(groupname+6); _trusted_servers = g_slist_prepend(_trusted_servers, copy); + free(groupname); return copy; } @@ -650,6 +651,17 @@ int dnbd3_add_trusted_namespace(dnbd3_trusted_server_t *server, char *namespace, } ns->auto_replicate = (flags && strstr(flags, "replicate")); ns->recursive = (flags && strstr(flags, "recursive")); + size_t len = strlen(server->comment) + 7; + char groupname[len]; + snprintf(groupname, len, "trust:%s", server->comment); + if (ns->auto_replicate && ns->recursive) + g_key_file_set_string(_config_handle, groupname, ns->name, "replicate,recursive"); + else if (ns->auto_replicate) + g_key_file_set_string(_config_handle, groupname, ns->name, "replicate"); + else if (ns->recursive) + g_key_file_set_string(_config_handle, groupname, ns->name, "recursive"); + else + g_key_file_set_string(_config_handle, groupname, ns->name, "-"); return TRUE; } -- cgit v1.2.3-55-g7522