diff --git a/src/libvirt_remote.syms b/src/libvirt_remote.syms index 1a88fff9db..f3cf65d8bb 100644 --- a/src/libvirt_remote.syms +++ b/src/libvirt_remote.syms @@ -227,6 +227,7 @@ virNetSocketPreExecRestart; virNetSocketRead; virNetSocketRecvFD; virNetSocketRemoteAddrString; +virNetSocketRemoteAddrStringURI; virNetSocketRemoveIOCallback; virNetSocketSendFD; virNetSocketSetBlocking; diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c index d909b94d0f..f10b62b25f 100644 --- a/src/rpc/virnetsocket.c +++ b/src/rpc/virnetsocket.c @@ -87,6 +87,7 @@ struct _virNetSocket { virSocketAddr remoteAddr; char *localAddrStr; char *remoteAddrStr; + char *remoteAddrStrURI; #if WITH_GNUTLS virNetTLSSessionPtr tlsSession; @@ -269,6 +270,10 @@ static virNetSocketPtr virNetSocketNew(virSocketAddrPtr localAddr, !(sock->remoteAddrStr = virSocketAddrFormatFull(remoteAddr, true, ";"))) goto error; + if (remoteAddr && + !(sock->remoteAddrStrURI = virSocketAddrFormatFull(remoteAddr, true, NULL))) + goto error; + sock->client = isClient; PROBE(RPC_SOCKET_NEW, @@ -1204,6 +1209,7 @@ void virNetSocketDispose(void *obj) VIR_FREE(sock->localAddrStr); VIR_FREE(sock->remoteAddrStr); + VIR_FREE(sock->remoteAddrStrURI); } @@ -1465,6 +1471,10 @@ const char *virNetSocketRemoteAddrString(virNetSocketPtr sock) return sock->remoteAddrStr; } +const char *virNetSocketRemoteAddrStringURI(virNetSocketPtr sock) +{ + return sock->remoteAddrStrURI; +} #if WITH_GNUTLS static ssize_t virNetSocketTLSSessionWrite(const char *buf, diff --git a/src/rpc/virnetsocket.h b/src/rpc/virnetsocket.h index 5de3d92631..25ca14eb3f 100644 --- a/src/rpc/virnetsocket.h +++ b/src/rpc/virnetsocket.h @@ -150,6 +150,7 @@ bool virNetSocketHasPendingData(virNetSocketPtr sock); const char *virNetSocketLocalAddrString(virNetSocketPtr sock); const char *virNetSocketRemoteAddrString(virNetSocketPtr sock); +const char *virNetSocketRemoteAddrStringURI(virNetSocketPtr sock); int virNetSocketListen(virNetSocketPtr sock, int backlog); int virNetSocketAccept(virNetSocketPtr sock, diff --git a/tests/virnetsockettest.c b/tests/virnetsockettest.c index 9df90a9e60..8cd8edecaf 100644 --- a/tests/virnetsockettest.c +++ b/tests/virnetsockettest.c @@ -275,6 +275,11 @@ static int testSocketUNIXAddrs(const void *data ATTRIBUTE_UNUSED) goto cleanup; } + if (STRNEQ(virNetSocketRemoteAddrStringURI(csock), "127.0.0.1:0")) { + VIR_DEBUG("Unexpected remote address"); + goto cleanup; + } + if (virNetSocketAccept(lsock, &ssock) < 0) { VIR_DEBUG("Unexpected client socket missing"); @@ -292,6 +297,11 @@ static int testSocketUNIXAddrs(const void *data ATTRIBUTE_UNUSED) goto cleanup; } + if (STRNEQ(virNetSocketRemoteAddrStringURI(ssock), "127.0.0.1:0")) { + VIR_DEBUG("Unexpected remote address"); + goto cleanup; + } + ret = 0;