diff options
author | sr | 2013-01-04 21:21:24 +0100 |
---|---|---|
committer | sr | 2013-01-04 21:21:24 +0100 |
commit | 7f47f93f692fd9cc4eef562f954413680bd8e56d (patch) | |
tree | abe1e9e12b37d1d7ff656edfcda920d7f2c060b7 | |
parent | [SERVER] pthread_spin_lock != pthread_spin_unlock (diff) | |
download | dnbd3-7f47f93f692fd9cc4eef562f954413680bd8e56d.tar.gz dnbd3-7f47f93f692fd9cc4eef562f954413680bd8e56d.tar.xz dnbd3-7f47f93f692fd9cc4eef562f954413680bd8e56d.zip |
[SERVER] RPC: Fix return code when adding and removing trusted name spaces
-rw-r--r-- | src/server/rpc.c | 16 | ||||
-rw-r--r-- | src/server/saveload.c | 7 |
2 files changed, 17 insertions, 6 deletions
diff --git a/src/server/rpc.c b/src/server/rpc.c index 3bd4a07..2cc688b 100644 --- a/src/server/rpc.c +++ b/src/server/rpc.c @@ -557,20 +557,24 @@ static int rpc_receive(int client_sock) if (cmd == RPC_ADD_NS) { dnbd3_trusted_server_t *server = dnbd3_get_trusted_server(host, TRUE, comment); - if (server) - dnbd3_add_trusted_namespace(server, ns, flags); + if (server && dnbd3_add_trusted_namespace(server, ns, flags)) + rpc_error = ERROR_OK; + else + rpc_error = ERROR_UNSPECIFIED_ERROR; } else { dnbd3_trusted_server_t *server = dnbd3_get_trusted_server(host, FALSE, comment); - if (server) - dnbd3_del_trusted_namespace(server, ns); + if (server && dnbd3_del_trusted_namespace(server, ns)) + rpc_error = ERROR_OK; + else + rpc_error = ERROR_FILE_NOT_FOUND; } } pthread_spin_unlock(&_spinlock); FREE_POINTERLIST; } END_FOR_EACH; - + if (rpc_error == ERROR_OK) dnbd3_save_config(); } else rpc_error = ERROR_INVALID_XML; @@ -579,7 +583,7 @@ static int rpc_receive(int client_sock) default: memlogf("[ERROR] Unknown RPC command: %u", (unsigned int)header.cmd); - rpc_error = htonl(ERROR_UNKNOWN_COMMAND); + rpc_error = ERROR_UNKNOWN_COMMAND; break; } diff --git a/src/server/saveload.c b/src/server/saveload.c index 75ee554..5a6291e 100644 --- a/src/server/saveload.c +++ b/src/server/saveload.c @@ -676,8 +676,15 @@ int dnbd3_del_trusted_namespace(dnbd3_trusted_server_t *server, char *namespace) dnbd3_namespace_t *cmp = iterator->data; if (strcmp(nslow, cmp->name) == 0) { + // TODO: Remove from config file free(cmp->name); + free(cmp); server->namespaces = g_slist_remove(server->namespaces, cmp); + if (server->namespaces == NULL) + { + g_free(server->comment); + free(server); + } return TRUE; } } |