From: Fam Zheng <famz@redhat.com>
To: Jeff Cody <jcody@redhat.com>
Cc: qemu-devel@nongnu.org, kwolf@redhat.com, pbonzini@redhat.com,
qemu-block@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v2 2/7] iscsi: Handle -iscsi user/password in bdrv_parse_filename()
Date: Tue, 7 Feb 2017 18:13:59 +0800 [thread overview]
Message-ID: <20170207101359.GD19280@lemon.lan> (raw)
In-Reply-To: <a252efad890c55d5d59e7fe77a9a9b994ee83074.1485365834.git.jcody@redhat.com>
On Wed, 01/25 12:42, Jeff Cody wrote:
> From: Kevin Wolf <kwolf@redhat.com>
>
> This splits the logic in the old parse_chap() function into a part that
> parses the -iscsi options into the new driver-specific options, and
> another part that actually applies those options (called apply_chap()
> now).
>
> Note that this means that username and password specified with -iscsi
> only take effect when a URL is provided. This is intentional, -iscsi is
> a legacy interface only supported for compatibility, new users should
> use the proper driver-specific options.
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> Signed-off-by: Jeff Cody <jcody@redhat.com>
> ---
> block/iscsi.c | 78 +++++++++++++++++++++++++++++++++--------------------------
> 1 file changed, 44 insertions(+), 34 deletions(-)
>
> diff --git a/block/iscsi.c b/block/iscsi.c
> index 97cff30..fc91d0f 100644
> --- a/block/iscsi.c
> +++ b/block/iscsi.c
> @@ -1236,29 +1236,14 @@ retry:
> return 0;
> }
>
> -static void parse_chap(struct iscsi_context *iscsi, const char *target,
> +static void apply_chap(struct iscsi_context *iscsi, QemuOpts *opts,
> Error **errp)
> {
> - QemuOptsList *list;
> - QemuOpts *opts;
> const char *user = NULL;
> const char *password = NULL;
> const char *secretid;
> char *secret = NULL;
>
> - list = qemu_find_opts("iscsi");
> - if (!list) {
> - return;
> - }
> -
> - opts = qemu_opts_find(list, target);
> - if (opts == NULL) {
> - opts = QTAILQ_FIRST(&list->head);
> - if (!opts) {
> - return;
> - }
> - }
> -
> user = qemu_opt_get(opts, "user");
> if (!user) {
> return;
> @@ -1587,6 +1572,41 @@ out:
> }
> }
>
> +static void iscsi_parse_iscsi_option(const char *target, QDict *options)
> +{
> + QemuOptsList *list;
> + QemuOpts *opts;
> + const char *user, *password, *password_secret;
> +
> + list = qemu_find_opts("iscsi");
> + if (!list) {
> + return;
> + }
> +
> + opts = qemu_opts_find(list, target);
> + if (opts == NULL) {
> + opts = QTAILQ_FIRST(&list->head);
> + if (!opts) {
> + return;
> + }
> + }
> +
> + user = qemu_opt_get(opts, "user");
> + if (user) {
> + qdict_set_default_str(options, "user", user);
> + }
> +
> + password = qemu_opt_get(opts, "password");
> + if (password) {
> + qdict_set_default_str(options, "password", password);
> + }
> +
> + password_secret = qemu_opt_get(opts, "password-secret");
> + if (password_secret) {
> + qdict_set_default_str(options, "password-secret", password_secret);
> + }
> +}
> +
> /*
> * We support iscsi url's on the form
> * iscsi://[<username>%<password>@]<host>[:<port>]/<targetname>/<lun>
> @@ -1625,6 +1645,9 @@ static void iscsi_parse_filename(const char *filename, QDict *options,
> qdict_set_default_str(options, "lun", lun_str);
> g_free(lun_str);
>
> + /* User/password from -iscsi take precedence over those from the URL */
> + iscsi_parse_iscsi_option(iscsi_url->target, options);
> +
Isn't more natural to let the local option take precedence over the global one?
> if (iscsi_url->user[0] != '\0') {
> qdict_set_default_str(options, "user", iscsi_url->user);
> qdict_set_default_str(options, "password", iscsi_url->passwd);
> @@ -1659,6 +1682,10 @@ static QemuOptsList runtime_opts = {
> .type = QEMU_OPT_STRING,
> },
> {
> + .name = "password-secret",
> + .type = QEMU_OPT_STRING,
> + },
> + {
I think this added password-secret is not the one looked up in
iscsi_parse_iscsi_option(), which is from -iscsi
(block/iscsi-opts.c:qemu_iscsi_opts). Is this intended? Or does it belong to a
different patch?
Fam
> .name = "lun",
> .type = QEMU_OPT_NUMBER,
> },
> @@ -1678,7 +1705,6 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags,
> QemuOpts *opts;
> Error *local_err = NULL;
> const char *transport_name, *portal, *target;
> - const char *user, *password;
> #if LIBISCSI_API_VERSION >= (20160603)
> enum iscsi_transport_type transport;
> #endif
> @@ -1695,8 +1721,6 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags,
> transport_name = qemu_opt_get(opts, "transport");
> portal = qemu_opt_get(opts, "portal");
> target = qemu_opt_get(opts, "target");
> - user = qemu_opt_get(opts, "user");
> - password = qemu_opt_get(opts, "password");
> lun = qemu_opt_get_number(opts, "lun", 0);
>
> if (!transport_name || !portal || !target) {
> @@ -1704,11 +1728,6 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags,
> ret = -EINVAL;
> goto out;
> }
> - if (user && !password) {
> - error_setg(errp, "If a user name is given, a password is required");
> - ret = -EINVAL;
> - goto out;
> - }
>
> if (!strcmp(transport_name, "tcp")) {
> #if LIBISCSI_API_VERSION >= (20160603)
> @@ -1747,17 +1766,8 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags,
> goto out;
> }
>
> - if (user) {
> - ret = iscsi_set_initiator_username_pwd(iscsi, user, password);
> - if (ret != 0) {
> - error_setg(errp, "Failed to set initiator username and password");
> - ret = -EINVAL;
> - goto out;
> - }
> - }
> -
> /* check if we got CHAP username/password via the options */
> - parse_chap(iscsi, target, &local_err);
> + apply_chap(iscsi, opts, &local_err);
> if (local_err != NULL) {
> error_propagate(errp, local_err);
> ret = -EINVAL;
> --
> 2.9.3
>
>
next prev parent reply other threads:[~2017-02-07 10:14 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-25 17:42 [Qemu-devel] [PATCH v2 0/7] iscsi: Add blockdev-add support Jeff Cody
2017-01-25 17:42 ` [Qemu-devel] [PATCH v2 1/7] iscsi: Split URL into individual options Jeff Cody
2017-02-07 10:06 ` Fam Zheng
2017-01-25 17:42 ` [Qemu-devel] [PATCH v2 2/7] iscsi: Handle -iscsi user/password in bdrv_parse_filename() Jeff Cody
2017-02-07 10:13 ` Fam Zheng [this message]
2017-02-17 13:26 ` Kevin Wolf
2017-02-17 14:09 ` Fam Zheng
2017-02-17 14:10 ` Fam Zheng
2017-01-25 17:42 ` [Qemu-devel] [PATCH v2 3/7] iscsi: Add initiator-name option Jeff Cody
2017-02-07 10:16 ` Fam Zheng
2017-01-25 17:42 ` [Qemu-devel] [PATCH v2 4/7] iscsi: Add header-digest option Jeff Cody
2017-02-07 10:18 ` Fam Zheng
2017-01-25 17:42 ` [Qemu-devel] [PATCH v2 5/7] iscsi: Add timeout option Jeff Cody
2017-02-07 10:21 ` Fam Zheng
2017-01-25 17:42 ` [Qemu-devel] [PATCH v2 6/7] iscsi: Add blockdev-add support Jeff Cody
2017-02-07 10:23 ` Fam Zheng
2017-02-17 21:40 ` Eric Blake
2017-02-17 21:47 ` Jeff Cody
2017-01-25 17:42 ` [Qemu-devel] [PATCH v2 7/7] QAPI: Fix blockdev-add example documentation Jeff Cody
2017-02-07 10:29 ` Fam Zheng
2017-01-25 17:57 ` [Qemu-devel] [PATCH v2 0/7] iscsi: Add blockdev-add support no-reply
2017-02-17 21:12 ` Jeff Cody
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170207101359.GD19280@lemon.lan \
--to=famz@redhat.com \
--cc=jcody@redhat.com \
--cc=kwolf@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.