From 8420a53edfc87bd104acffeb17eed3656e8f68ef Mon Sep 17 00:00:00 2001 From: Erik Skultety Date: Fri, 22 Apr 2016 13:08:10 +0200 Subject: [PATCH] virnetserverclient: Add an internal method to retrieve client's identity This method just aggregates various client object attributes, like socket address, connection type (RO/RW), and some TCP/TLS/UNIX identity in an atomic manner. Signed-off-by: Erik Skultety --- src/libvirt_remote.syms | 1 + src/rpc/virnetserverclient.c | 30 ++++++++++++++++++++++++++++++ src/rpc/virnetserverclient.h | 3 +++ 3 files changed, 34 insertions(+) diff --git a/src/libvirt_remote.syms b/src/libvirt_remote.syms index 963683d5c7..afcb2b7556 100644 --- a/src/libvirt_remote.syms +++ b/src/libvirt_remote.syms @@ -122,6 +122,7 @@ virNetServerClientDelayedClose; virNetServerClientGetAuth; virNetServerClientGetFD; virNetServerClientGetIdentity; +virNetServerClientGetInfo; virNetServerClientGetPrivateData; virNetServerClientGetReadonly; virNetServerClientGetSELinuxContext; diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c index 396b0cc274..d38f42140d 100644 --- a/src/rpc/virnetserverclient.c +++ b/src/rpc/virnetserverclient.c @@ -1612,3 +1612,33 @@ virNetServerClientGetTransport(virNetServerClientPtr client) return ret; } + +int +virNetServerClientGetInfo(virNetServerClientPtr client, + bool *readonly, const char **sock_addr, + virIdentityPtr *identity) +{ + int ret = -1; + + virObjectLock(client); + *readonly = client->readonly; + + if (!(*sock_addr = virNetServerClientRemoteAddrString(client))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("No network socket associated with client")); + goto cleanup; + } + + if (!client->identity) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("No identity information available for client")); + goto cleanup; + } + + *identity = virObjectRef(client->identity); + + ret = 0; + cleanup: + virObjectUnlock(client); + return ret; +} diff --git a/src/rpc/virnetserverclient.h b/src/rpc/virnetserverclient.h index 22daf50249..594803b4e4 100644 --- a/src/rpc/virnetserverclient.h +++ b/src/rpc/virnetserverclient.h @@ -149,5 +149,8 @@ int virNetServerClientSendMessage(virNetServerClientPtr client, bool virNetServerClientNeedAuth(virNetServerClientPtr client); int virNetServerClientGetTransport(virNetServerClientPtr client); +int virNetServerClientGetInfo(virNetServerClientPtr client, + bool *readonly, const char **sock_addr, + virIdentityPtr *identity); #endif /* __VIR_NET_SERVER_CLIENT_H__ */