[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 08/10] nbd: allow an ACL to be set with nbd-serve
From: |
Daniel P. Berrange |
Subject: |
[Qemu-devel] [PATCH v2 08/10] nbd: allow an ACL to be set with nbd-server-start QMP command |
Date: |
Mon, 7 Mar 2016 15:43:27 +0000 |
As with the previous patch to qemu-nbd, the nbd-server-start
QMP command also needs to be able to specify an ACL when
enabling TLS encryption.
First the client must create a QAuthZ object instance using
the 'object-add' command:
{
'execute': 'object-add',
'arguments': {
'qom-type': 'authz-simple',
'id': 'tls0',
'parameters': {
'policy': 'deny',
'rules': [
{
'match': '*CN=fred',
'policy': 'allow'
}
]
}
}
}
They can then reference this in the new 'tls-acl' parameter
when executing the 'nbd-server-start' command.
{
'execute': 'nbd-server-start',
'arguments': {
'addr': {
'type': 'inet',
'host': '127.0.0.1',
'port': '9000'
},
'tls-creds': 'tls0',
'tls-acl': 'tlsacl0'
}
}
Signed-off-by: Daniel P. Berrange <address@hidden>
---
blockdev-nbd.c | 10 +++++++++-
hmp.c | 2 +-
qapi/block.json | 4 +++-
qmp-commands.hx | 2 +-
4 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/blockdev-nbd.c b/blockdev-nbd.c
index 12cae0e..ae5335e 100644
--- a/blockdev-nbd.c
+++ b/blockdev-nbd.c
@@ -24,6 +24,7 @@ typedef struct NBDServerData {
QIOChannelSocket *listen_ioc;
int watch;
QCryptoTLSCreds *tlscreds;
+ char *tlsacl;
} NBDServerData;
static NBDServerData *nbd_server;
@@ -45,7 +46,8 @@ static gboolean nbd_accept(QIOChannel *ioc, GIOCondition
condition,
}
nbd_client_new(NULL, cioc,
- nbd_server->tlscreds, NULL,
+ nbd_server->tlscreds,
+ nbd_server->tlsacl,
nbd_client_put);
object_unref(OBJECT(cioc));
return TRUE;
@@ -65,6 +67,7 @@ static void nbd_server_free(NBDServerData *server)
if (server->tlscreds) {
object_unref(OBJECT(server->tlscreds));
}
+ g_free(server->tlsacl);
g_free(server);
}
@@ -101,6 +104,7 @@ static QCryptoTLSCreds *nbd_get_tls_creds(const char *id,
Error **errp)
void qmp_nbd_server_start(SocketAddress *addr,
bool has_tls_creds, const char *tls_creds,
+ bool has_tls_acl, const char *tls_acl,
Error **errp)
{
if (nbd_server) {
@@ -128,6 +132,10 @@ void qmp_nbd_server_start(SocketAddress *addr,
}
}
+ if (has_tls_acl) {
+ nbd_server->tlsacl = g_strdup(tls_acl);
+ }
+
nbd_server->watch = qio_channel_add_watch(
QIO_CHANNEL(nbd_server->listen_ioc),
G_IO_IN,
diff --git a/hmp.c b/hmp.c
index 7a98726..20703fd 100644
--- a/hmp.c
+++ b/hmp.c
@@ -1802,7 +1802,7 @@ void hmp_nbd_server_start(Monitor *mon, const QDict
*qdict)
goto exit;
}
- qmp_nbd_server_start(addr, false, NULL, &local_err);
+ qmp_nbd_server_start(addr, false, NULL, false, NULL, &local_err);
qapi_free_SocketAddress(addr);
if (local_err != NULL) {
goto exit;
diff --git a/qapi/block.json b/qapi/block.json
index 58e6b30..6b209e1 100644
--- a/qapi/block.json
+++ b/qapi/block.json
@@ -147,6 +147,7 @@
#
# @addr: Address on which to listen.
# @tls-creds: (optional) ID of the TLS credentials object. Since 2.6
+# @tls-acl: (optional) ID of the QAuthZ authorization object. Since 2.6
#
# Returns: error if the server is already running.
#
@@ -154,7 +155,8 @@
##
{ 'command': 'nbd-server-start',
'data': { 'addr': 'SocketAddress',
- '*tls-creds': 'str'} }
+ '*tls-creds': 'str',
+ '*tls-acl': 'str'} }
##
# @nbd-server-add:
diff --git a/qmp-commands.hx b/qmp-commands.hx
index b629673..7a3fa26 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -3859,7 +3859,7 @@ EQMP
{
.name = "nbd-server-start",
- .args_type = "addr:q,tls-creds:s?",
+ .args_type = "addr:q,tls-creds:s?,tls-acl:s?",
.mhandler.cmd_new = qmp_marshal_nbd_server_start,
},
{
--
2.5.0
- [Qemu-devel] [PATCH v2 01/10] qdict: implement a qdict_crumple method for un-flattening a dict, (continued)
- [Qemu-devel] [PATCH v2 03/10] qom: support arbitrary non-scalar properties with -object, Daniel P. Berrange, 2016/03/07
- [Qemu-devel] [PATCH v2 04/10] util: add QAuthZ object as an authorization base class, Daniel P. Berrange, 2016/03/07
- [Qemu-devel] [PATCH v2 02/10] qapi: allow QmpInputVisitor to auto-cast types, Daniel P. Berrange, 2016/03/07
- [Qemu-devel] [PATCH v2 05/10] util: add QAuthZSimple object type for a simple access control list, Daniel P. Berrange, 2016/03/07
- [Qemu-devel] [PATCH v2 06/10] acl: delete existing ACL implementation, Daniel P. Berrange, 2016/03/07
- [Qemu-devel] [PATCH v2 07/10] qemu-nbd: add support for ACLs for TLS clients, Daniel P. Berrange, 2016/03/07
- [Qemu-devel] [PATCH v2 08/10] nbd: allow an ACL to be set with nbd-server-start QMP command,
Daniel P. Berrange <=
- [Qemu-devel] [PATCH v2 09/10] chardev: add support for ACLs for TLS clients, Daniel P. Berrange, 2016/03/07
- [Qemu-devel] [PATCH v2 10/10] vnc: allow specifying a custom ACL object name, Daniel P. Berrange, 2016/03/07