[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 16/35] rbd: allow client id to be specified in confi
From: |
Kevin Wolf |
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 |
From: Sage Weil <address@hidden>
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 <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
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
- [Qemu-devel] [PATCH 03/35] ide: Use a table to declare which drive kinds accept each command, (continued)
- [Qemu-devel] [PATCH 03/35] ide: Use a table to declare which drive kinds accept each command, Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 05/35] ide/atapi: Clean up misleading name in cmd_start_stop_unit(), Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 02/35] ide: Fix ATA command READ to set ATAPI signature for CD-ROM, Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 07/35] scsi-disk: Factor out scsi_disk_emulate_start_stop(), Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 08/35] scsi-disk: Track tray open/close state, Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 11/35] ide/atapi: Track tray locked state, Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 10/35] block: Drop tray status tracking, no longer used, Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 09/35] block: Revert entanglement of bdrv_is_inserted() with tray status, Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 13/35] block: Leave enforcing tray lock to device models, Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 14/35] block: Drop medium lock tracking, ask device models instead, Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 16/35] rbd: allow client id to be specified in config string,
Kevin Wolf <=
- [Qemu-devel] [PATCH 21/35] ide/atapi: Preserve tray state on migration, Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 12/35] scsi-disk: Track tray locked state, Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 15/35] block: Rename bdrv_set_locked() to bdrv_lock_medium(), Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 22/35] block: Clean up remaining users of "removable", Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 20/35] scsi-disk: Fix START_STOP to fail when it can't eject, Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 28/35] block: Reset buffer alignment on detach, Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 24/35] block: Show whether the virtual tray is open in info block, Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 31/35] ide/atapi scsi-disk: Make monitor eject -f, then change work, Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 35/35] qcow2: fix range check, Kevin Wolf, 2011/09/12
- [Qemu-devel] [PATCH 34/35] qcow2: align cluster_data to block to improve performance using O_DIRECT, Kevin Wolf, 2011/09/12