diff options
| author | sr | 2012-09-19 21:22:13 +0200 |
|---|---|---|
| committer | sr | 2012-09-19 21:22:13 +0200 |
| commit | 024bfec03ca1cba93f2dfe57982be4908df1e52f (patch) | |
| tree | 937e3e5f4a978346ff2f46bd3fa3ed5c764eb690 /src/server/saveload.c | |
| parent | [SERVER] Check trust settings before replicating image or adding alt server (diff) | |
| download | dnbd3-024bfec03ca1cba93f2dfe57982be4908df1e52f.tar.gz dnbd3-024bfec03ca1cba93f2dfe57982be4908df1e52f.tar.xz dnbd3-024bfec03ca1cba93f2dfe57982be4908df1e52f.zip | |
[SERVER] IPC: Add calls to add/remove trusted namespaces and servers
Diffstat (limited to 'src/server/saveload.c')
| -rw-r--r-- | src/server/saveload.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/server/saveload.c b/src/server/saveload.c index 7dc5455..18dbae9 100644 --- a/src/server/saveload.c +++ b/src/server/saveload.c @@ -144,6 +144,15 @@ void dnbd3_load_config() int dnbd3_add_image(dnbd3_image_t *image) { + if (image->file) + { + if (strncmp(image->file, "/dev/dnbd", 9) == 0) + return ERROR_IMAGE_NOT_FOUND; + int fh = open(image->file, O_RDONLY); + if (fh < 0) + return ERROR_IMAGE_NOT_FOUND; + close(fh); + } // Lock here to prevent concurrent add calls to mess rids up. Cannot happen currently // as IPC clients are not threaded and they're the only place where this is called, // but better be safe for the future... @@ -679,6 +688,31 @@ int dnbd3_add_trusted_namespace(dnbd3_trusted_server_t *server, char *namespace, } /** + * Remove trusted namespace from given trusted server. + * !! Lock before calling this function !! + */ +int dnbd3_del_trusted_namespace(dnbd3_trusted_server_t *server, char *namespace) +{ + int nslen = strlen(namespace) + 1; + char nslow[nslen]; + memcpy(nslow, namespace, nslen); + remove_trailing_slash(nslow); + strtolower(nslow); + GSList *iterator; + for (iterator = server->namespaces; iterator; iterator = iterator->next) + { + dnbd3_namespace_t *cmp = iterator->data; + if (strcmp(nslow, cmp->name) == 0) + { + free(cmp->name); + server->namespaces = g_slist_remove(server->namespaces, cmp); + return TRUE; + } + } + return FALSE; +} + +/** * Gives the closest match of a namespace rule that can be applied to * the given namespace * Returns NULL if none |
