[Pkg-libvirt-commits] [SCM] Libguestfs Debian packaging branch, experimental, updated. debian/1%1.21.40-1
Richard W.M. Jones
rjones at redhat.com
Sat Jun 1 11:04:39 UTC 2013
The following commit has been merged in the experimental branch:
commit 0a065c45748ec5efe86f4d02f4864a58ed7dae36
Author: Richard W.M. Jones <rjones at redhat.com>
Date: Sat May 11 13:33:36 2013 +0100
drives: ceph/gluster/iscsi/sheepdog/ssh: Force the disk name to begin with a '/'.
This avoids confusion when using URIs in guestfish, since the path
will always start with a '/', and we don't otherwise know if we should
remove it or not. By forcing the '/' to always be there, we deal with
this problem in the API instead.
diff --git a/fish/guestfish.pod b/fish/guestfish.pod
index c3b43c9..d32e747 100644
--- a/fish/guestfish.pod
+++ b/fish/guestfish.pod
@@ -1133,7 +1133,7 @@ Add a disk located on an iSCSI server.
The equivalent API command would be:
- ><fs> add target-iqn-name/lun protocol:iscsi server:tcp:example.com
+ ><fs> add /target-iqn-name/lun protocol:iscsi server:tcp:example.com
=head2 B<-a nbd://example.com[:port]>
diff --git a/src/drives.c b/src/drives.c
index b52d8df..5deeb7a 100644
--- a/src/drives.c
+++ b/src/drives.c
@@ -261,6 +261,11 @@ create_drive_rbd (guestfs_h *g,
return NULL;
}
+ if (exportname[0] != '/') {
+ error (g, _("rbd: image name must begin with a '/'"));
+ return NULL;
+ }
+
return create_drive_non_file (g, drive_protocol_rbd,
servers, nr_servers, exportname,
username, secret,
@@ -306,6 +311,11 @@ create_drive_sheepdog (guestfs_h *g,
return NULL;
}
+ if (exportname[0] != '/') {
+ error (g, _("sheepdog: volume parameter must begin with a '/'"));
+ return NULL;
+ }
+
return create_drive_non_file (g, drive_protocol_sheepdog,
servers, nr_servers, exportname,
username, secret,
@@ -344,6 +354,11 @@ create_drive_ssh (guestfs_h *g,
return NULL;
}
+ if (exportname[0] != '/') {
+ error (g, _("sheepdog: pathname must begin with a '/'"));
+ return NULL;
+ }
+
if (username && STREQ (username, "")) {
error (g, _("ssh: username should not be an empty string"));
return NULL;
@@ -387,15 +402,16 @@ create_drive_iscsi (guestfs_h *g,
return NULL;
}
- /* If the exportname begins with a '/', skip it. */
- if (exportname[0] == '/')
- exportname++;
-
if (STREQ (exportname, "")) {
error (g, _("iscsi: target name should not be an empty string"));
return NULL;
}
+ if (exportname[0] != '/') {
+ error (g, _("iscsi: target string must begin with a '/'"));
+ return NULL;
+ }
+
return create_drive_non_file (g, drive_protocol_iscsi,
servers, nr_servers, exportname,
username, secret,
@@ -1194,7 +1210,8 @@ guestfs___drive_source_qemu_param (guestfs_h *g, const struct drive_source *src)
if (STREQ (src->u.exportname, ""))
ret = safe_strdup (g, p);
else
- ret = safe_asprintf (g, "%s:exportname=%s", p, src->u.exportname);
+ /* Skip the mandatory leading '/' character. */
+ ret = safe_asprintf (g, "%s:exportname=%s", p, &src->u.exportname[1]);
return ret;
}
@@ -1241,8 +1258,9 @@ guestfs___drive_source_qemu_param (guestfs_h *g, const struct drive_source *src)
else
auth = ":auth_supported=none";
+ /* Skip the mandatory leading '/' character on exportname. */
return safe_asprintf (g, "rbd:%s:mon_host=%s%s%s%s",
- src->u.exportname,
+ &src->u.exportname[1],
mon_host,
username ? username : "",
auth,
@@ -1250,12 +1268,13 @@ guestfs___drive_source_qemu_param (guestfs_h *g, const struct drive_source *src)
}
case drive_protocol_sheepdog:
+ /* Skip the mandatory leading '/' character on exportname. */
if (src->nr_servers == 0)
- return safe_asprintf (g, "sheepdog:%s", src->u.exportname);
+ return safe_asprintf (g, "sheepdog:%s", &src->u.exportname[1]);
else /* XXX How to pass multiple hosts? */
return safe_asprintf (g, "sheepdog:%s:%d:%s",
src->servers[0].u.hostname, src->servers[0].port,
- src->u.exportname);
+ &src->u.exportname[1]);
case drive_protocol_ssh:
return make_uri (g, "ssh", src->username,
diff --git a/src/guestfs.pod b/src/guestfs.pod
index e749a9d..1477015 100644
--- a/src/guestfs.pod
+++ b/src/guestfs.pod
@@ -648,7 +648,7 @@ To do this, set the optional C<protocol> and C<server> parameters of
L</guestfs_add_drive_opts> like this:
char **servers = { "ceph1.example.org:3000", /* ... */, NULL };
- guestfs_add_drive_opts (g, "pool/image",
+ guestfs_add_drive_opts (g, "/pool/image",
GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "rbd",
GUESTFS_ADD_DRIVE_OPTS_SERVER, servers,
@@ -669,7 +669,7 @@ To do this, set the optional C<protocol> and C<server> parameters of
L</guestfs_add_drive_opts> like this:
char **servers = { "gluster.example.org:3000", NULL };
- guestfs_add_drive_opts (g, "volname/image",
+ guestfs_add_drive_opts (g, "/volname/image",
GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "gluster",
GUESTFS_ADD_DRIVE_OPTS_SERVER, servers,
@@ -688,7 +688,7 @@ To do this, set the optional C<protocol> and C<server> parameters like
this:
char **server = { "iscsi.example.org:3000", NULL };
- guestfs_add_drive_opts (g, "target-iqn-name/lun",
+ guestfs_add_drive_opts (g, "/target-iqn-name/lun",
GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "iscsi",
GUESTFS_ADD_DRIVE_OPTS_SERVER, server,
@@ -768,7 +768,7 @@ To do this, set the optional C<protocol> and C<server> parameters of
L</guestfs_add_drive_opts> like this:
char **servers = { /* optional servers ... */ NULL };
- guestfs_add_drive_opts (g, "volume",
+ guestfs_add_drive_opts (g, "/volume",
GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "sheepdog",
GUESTFS_ADD_DRIVE_OPTS_SERVER, servers,
--
Libguestfs Debian packaging
More information about the Pkg-libvirt-commits
mailing list