
On Thu, Jun 25, 2015 at 01:27:29PM +0200, Eren Yagdiran wrote:
Similar to the existing mounts.cfg, the mapping between the device and the tag is passed by a new disks.cfg file. Common-init reads disks.cfg and maps the tags to corresponding devices --- libvirt-sandbox/libvirt-sandbox-init-common.c | 51 +++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-)
diff --git a/libvirt-sandbox/libvirt-sandbox-init-common.c b/libvirt-sandbox/libvirt-sandbox-init-common.c index 68f96ba..f8b2ea5 100644 --- a/libvirt-sandbox/libvirt-sandbox-init-common.c +++ b/libvirt-sandbox/libvirt-sandbox-init-common.c @@ -46,6 +46,7 @@ #include <grp.h>
#include "libvirt-sandbox-rpcpacket.h" +#include "libvirt-sandbox-init-util.h"
static gboolean debug = FALSE; static gboolean verbose = FALSE; @@ -60,6 +61,51 @@ static void sig_child(int sig ATTR_UNUSED) abort(); }
+static gboolean setup_disk_tags(void) { + FILE *fp; + gboolean ret = FALSE; + static char line[1024]; + if (debug) + fprintf(stderr, "libvirt-sandbox-init-common: %s: populate /dev/disk/by-tag/\n", + __func__); + fp = fopen(SANDBOXCONFIGDIR "/disks.cfg", "r"); + if (fp == NULL) { + fprintf(stderr, "libvirt-sandbox-init-common: %s: cannot open " SANDBOXCONFIGDIR "/disks.cfg: %s\n", + __func__, strerror(errno)); + + goto cleanup; + } + gvir_sandbox_init_util_mkdir("/dev/disk/by-tag", 0755, debug == TRUE ? 1 : 0); + while (fgets(line, sizeof line, fp)) { + char path[1024]; + char *tag = line; + char *device = strchr(tag, '\t'); + *device = '\0'; + device++; + char *tmp = strchr(device, '\n'); + *tmp = '\0'; + + if (sprintf(path, "/dev/disk/by-tag/%s", tag) < 0) {
It is preferrable to use g_strdup_printf() from glib instead of sprintf into a fixed buffer with no overflow checks. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|