From: Kevin Wolf <kwolf@redhat.com>
To: anthony@codemonkey.ws
Cc: kwolf@redhat.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 16/35] rbd: allow client id to be specified in config string
Date: Mon, 12 Sep 2011 16:19:15 +0200 [thread overview]
Message-ID: <1315837174-15327-17-git-send-email-kwolf@redhat.com> (raw)
In-Reply-To: <1315837174-15327-1-git-send-email-kwolf@redhat.com>
From: Sage Weil <sage@newdream.net>
Allow the client id to be specified in the config string via 'id=' so that
users can control who they authenticate as. Currently they are stuck with
the default ('admin'). This is necessary for anyone using authentication
in their environment.
Signed-off-by: Sage Weil <sage@newdream.net>
Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/rbd.c | 52 ++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 44 insertions(+), 8 deletions(-)
diff --git a/block/rbd.c b/block/rbd.c
index ce0f6ef..6135fc1 100644
--- a/block/rbd.c
+++ b/block/rbd.c
@@ -169,6 +169,34 @@ done:
return ret;
}
+static char *qemu_rbd_parse_clientname(const char *conf, char *clientname)
+{
+ const char *p = conf;
+
+ while (*p) {
+ int len;
+ const char *end = strchr(p, ':');
+
+ if (end) {
+ len = end - p;
+ } else {
+ len = strlen(p);
+ }
+
+ if (strncmp(p, "id=", 3) == 0) {
+ len -= 3;
+ strncpy(clientname, p + 3, len);
+ clientname[len] = '\0';
+ return clientname;
+ }
+ if (end == NULL) {
+ break;
+ }
+ p = end + 1;
+ }
+ return NULL;
+}
+
static int qemu_rbd_set_conf(rados_t cluster, const char *conf)
{
char *p, *buf;
@@ -198,17 +226,19 @@ static int qemu_rbd_set_conf(rados_t cluster, const char *conf)
break;
}
- if (strcmp(name, "conf")) {
- ret = rados_conf_set(cluster, name, value);
+ if (strcmp(name, "conf") == 0) {
+ ret = rados_conf_read_file(cluster, value);
if (ret < 0) {
- error_report("invalid conf option %s", name);
- ret = -EINVAL;
+ error_report("error reading conf file %s", value);
break;
}
+ } else if (strcmp(name, "id") == 0) {
+ /* ignore, this is parsed by qemu_rbd_parse_clientname() */
} else {
- ret = rados_conf_read_file(cluster, value);
+ ret = rados_conf_set(cluster, name, value);
if (ret < 0) {
- error_report("error reading conf file %s", value);
+ error_report("invalid conf option %s", name);
+ ret = -EINVAL;
break;
}
}
@@ -227,6 +257,8 @@ static int qemu_rbd_create(const char *filename, QEMUOptionParameter *options)
char name[RBD_MAX_IMAGE_NAME_SIZE];
char snap_buf[RBD_MAX_SNAP_NAME_SIZE];
char conf[RBD_MAX_CONF_SIZE];
+ char clientname_buf[RBD_MAX_CONF_SIZE];
+ char *clientname;
rados_t cluster;
rados_ioctx_t io_ctx;
int ret;
@@ -259,7 +291,8 @@ static int qemu_rbd_create(const char *filename, QEMUOptionParameter *options)
options++;
}
- if (rados_create(&cluster, NULL) < 0) {
+ clientname = qemu_rbd_parse_clientname(conf, clientname_buf);
+ if (rados_create(&cluster, clientname) < 0) {
error_report("error initializing");
return -EIO;
}
@@ -385,6 +418,8 @@ static int qemu_rbd_open(BlockDriverState *bs, const char *filename, int flags)
char pool[RBD_MAX_POOL_NAME_SIZE];
char snap_buf[RBD_MAX_SNAP_NAME_SIZE];
char conf[RBD_MAX_CONF_SIZE];
+ char clientname_buf[RBD_MAX_CONF_SIZE];
+ char *clientname;
int r;
if (qemu_rbd_parsename(filename, pool, sizeof(pool),
@@ -398,7 +433,8 @@ static int qemu_rbd_open(BlockDriverState *bs, const char *filename, int flags)
s->snap = g_strdup(snap_buf);
}
- r = rados_create(&s->cluster, NULL);
+ clientname = qemu_rbd_parse_clientname(conf, clientname_buf);
+ r = rados_create(&s->cluster, clientname);
if (r < 0) {
error_report("error initializing");
return r;
--
1.7.6
next prev parent reply other threads:[~2011-09-12 14:17 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-12 14:18 [Qemu-devel] [PULL 00/35] Block patches Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 01/35] qcow2: removed unused depends_on field Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 02/35] ide: Fix ATA command READ to set ATAPI signature for CD-ROM Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 03/35] ide: Use a table to declare which drive kinds accept each command Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 04/35] ide: Reject ATA commands specific to drive kinds Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 05/35] ide/atapi: Clean up misleading name in cmd_start_stop_unit() Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 06/35] ide/atapi: Track tray open/close state Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 07/35] scsi-disk: Factor out scsi_disk_emulate_start_stop() Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 08/35] scsi-disk: Track tray open/close state Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 09/35] block: Revert entanglement of bdrv_is_inserted() with tray status Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 10/35] block: Drop tray status tracking, no longer used Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 11/35] ide/atapi: Track tray locked state Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 12/35] scsi-disk: " Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 13/35] block: Leave enforcing tray lock to device models Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 14/35] block: Drop medium lock tracking, ask device models instead Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 15/35] block: Rename bdrv_set_locked() to bdrv_lock_medium() Kevin Wolf
2011-09-12 14:19 ` Kevin Wolf [this message]
2011-09-12 14:19 ` [Qemu-devel] [PATCH 17/35] rbd: clean up, fix style Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 18/35] rbd: fix leak in qemu_rbd_open failure paths Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 19/35] ide/atapi: Don't fail eject when tray is already open Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 20/35] scsi-disk: Fix START_STOP to fail when it can't eject Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 21/35] ide/atapi: Preserve tray state on migration Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 22/35] block: Clean up remaining users of "removable" Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 23/35] block: Drop BlockDriverState member removable Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 24/35] block: Show whether the virtual tray is open in info block Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 25/35] block: Move BlockConf & friends from block_int.h to block.h Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 26/35] hw: Trim superfluous #include "block_int.h" Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 27/35] block: New bdrv_set_buffer_alignment() Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 28/35] block: Reset buffer alignment on detach Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 29/35] nbd: Clean up use of block_int.h Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 30/35] block: New change_media_cb() parameter load Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 31/35] ide/atapi scsi-disk: Make monitor eject -f, then change work Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 32/35] qcow2: initialize metadata before inserting in cluster_allocs Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 33/35] ahci: Remove unused struct member Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 34/35] qcow2: align cluster_data to block to improve performance using O_DIRECT Kevin Wolf
2011-09-12 14:19 ` [Qemu-devel] [PATCH 35/35] qcow2: fix range check Kevin Wolf
2011-09-15 19:09 ` [Qemu-devel] [PULL 00/35] Block patches Anthony Liguori
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=1315837174-15327-17-git-send-email-kwolf@redhat.com \
--to=kwolf@redhat.com \
--cc=anthony@codemonkey.ws \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).