Pino Toscano
2015-Dec-01 14:35 UTC
[Libguestfs] [PATCH 1/2] launch: direct: manually compose iscsi:// URIs
Move the creation of iscsi URIs away from make_uri, composing them
manually: this is needed because libxml assumes colons (':') to separate
user and password for the authority part, while with iscsi URIs the
separator is percentage ('%'), which would be percent-encoded by libxml.
---
src/launch-direct.c | 31 ++++++++++++++++++++++++++++---
1 file changed, 28 insertions(+), 3 deletions(-)
diff --git a/src/launch-direct.c b/src/launch-direct.c
index 559a032..a26b9c4 100644
--- a/src/launch-direct.c
+++ b/src/launch-direct.c
@@ -1274,9 +1274,34 @@ guestfs_int_drive_source_qemu_param (guestfs_h *g, const
struct drive_source *sr
return make_uri (g, "https", src->username, src->secret,
&src->servers[0], src->u.exportname);
- case drive_protocol_iscsi:
- return make_uri (g, "iscsi", NULL, NULL,
- &src->servers[0], src->u.exportname);
+ case drive_protocol_iscsi: {
+ CLEANUP_FREE char *escaped_hostname = NULL;
+ CLEANUP_FREE char *escaped_target = NULL;
+ CLEANUP_FREE char *userauth = NULL;
+ char port_str[16];
+ char *ret;
+
+ escaped_hostname + (char *) xmlURIEscapeStr(BAD_CAST
src->servers[0].u.hostname,
+ BAD_CAST "");
+ /* The target string must keep slash as it is, as exportname contains
+ * "iqn/lun".
+ */
+ escaped_target + (char *) xmlURIEscapeStr(BAD_CAST
src->u.exportname, BAD_CAST "/");
+ if (src->username != NULL && src->secret != NULL)
+ userauth = safe_asprintf (g, "%s%%%s@", src->username,
src->secret);
+ if (src->servers[0].port != 0)
+ snprintf (port_str, sizeof port_str, ":%d",
src->servers[0].port);
+
+ ret = safe_asprintf (g, "iscsi://%s%s%s/%s",
+ userauth != NULL ? userauth : "",
+ escaped_hostname,
+ src->servers[0].port != 0 ? port_str :
"",
+ escaped_target);
+
+ return ret;
+ }
case drive_protocol_nbd: {
CLEANUP_FREE char *p = NULL;
--
2.1.0
Pino Toscano
2015-Dec-01 14:35 UTC
[Libguestfs] [PATCH 2/2] drives: allow authentication for iSCSI
Now that both the direct and libvirt backends handle authentication with
iSCSI correctly, we can allow this in the library.
---
generator/actions.ml | 2 ++
src/drives.c | 10 ----------
2 files changed, 2 insertions(+), 10 deletions(-)
diff --git a/generator/actions.ml b/generator/actions.ml
index 7ab8ee4..db08de0 100644
--- a/generator/actions.ml
+++ b/generator/actions.ml
@@ -1453,6 +1453,8 @@ See also: L<guestfs(3)/GLUSTER>
Connect to the iSCSI server.
The C<server> parameter must also be supplied - see below.
+The C<username> parameter may be supplied. See below.
+The C<secret> parameter may be supplied. See below.
See also: L<guestfs(3)/ISCSI>.
diff --git a/src/drives.c b/src/drives.c
index dc88495..385cf04 100644
--- a/src/drives.c
+++ b/src/drives.c
@@ -364,16 +364,6 @@ static struct drive *
create_drive_iscsi (guestfs_h *g,
const struct drive_create_data *data)
{
- if (data->username != NULL) {
- error (g, _("iscsi: you cannot specify a username with this
protocol"));
- return NULL;
- }
-
- if (data->secret != NULL) {
- error (g, _("iscsi: you cannot specify a secret with this
protocol"));
- return NULL;
- }
-
if (data->nr_servers != 1) {
error (g, _("iscsi: you must specify exactly one server"));
return NULL;
--
2.1.0
Richard W.M. Jones
2015-Dec-18 15:17 UTC
Re: [Libguestfs] [PATCH 1/2] launch: direct: manually compose iscsi:// URIs
ACK series. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 100 libraries supported. http://fedoraproject.org/wiki/MinGW
Maybe Matching Threads
- [PATCH v2 0/2] lib: qemu: Memoize qemu feature detection.
- [PATCH 0/4] lib: qemu: Memoize qemu feature detection.
- [PATCH 2/2] Fix handling of passwords in URLs
- RFC: Handle query strings for http and https (RHBZ#1092583)
- [PATCH] p2v: check results of strndup and sscanf