summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsr2013-01-04 21:21:24 +0100
committersr2013-01-04 21:21:24 +0100
commit7f47f93f692fd9cc4eef562f954413680bd8e56d (patch)
treeabe1e9e12b37d1d7ff656edfcda920d7f2c060b7
parent[SERVER] pthread_spin_lock != pthread_spin_unlock (diff)
downloaddnbd3-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.c16
-rw-r--r--src/server/saveload.c7
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;
}
}