diff options
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 |