util: add helper API for getting UNIX path from socket address

Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2019-06-24 11:25:48 +01:00
parent cfd955b03a
commit a767af1a7c
3 changed files with 44 additions and 0 deletions

View File

@ -2887,6 +2887,7 @@ virSocketAddrFormat;
virSocketAddrFormatFull;
virSocketAddrGetIPPrefix;
virSocketAddrGetNumNetmaskBits;
virSocketAddrGetPath;
virSocketAddrGetPort;
virSocketAddrGetRange;
virSocketAddrIsNetmask;

View File

@ -522,6 +522,47 @@ virSocketAddrGetPort(virSocketAddrPtr addr)
return -1;
}
/*
* virSocketGetPath:
* @addr: an initialized virSocketAddrPtr
*
* Returns the UNIX socket path of the given virtSocketAddr
*
* Returns -1 if @addr is invalid or does not refer to an
* address of type AF_UNIX;
*/
char *
virSocketAddrGetPath(virSocketAddrPtr addr ATTRIBUTE_UNUSED)
{
#ifndef WIN32
char *path = NULL;
if (addr == NULL) {
virReportError(VIR_ERR_INVALID_ARG, "%s",
_("No socket address provided"));
return NULL;
}
if (addr->data.sa.sa_family != AF_UNIX) {
virReportError(VIR_ERR_INVALID_ARG, "%s",
_("UNIX socket address is required"));
return NULL;
}
if (VIR_STRNDUP(path,
addr->data.un.sun_path,
sizeof(addr->data.un.sun_path)) < 0)
return NULL;
return path;
#else
virReportError(VIR_ERR_NO_SUPPORT, "%s",
_("UNIX sockets not supported on this platform"));
return NULL;
#endif
}
/**
* virSocketAddrIsNetmask:
* @netmask: the netmask address

View File

@ -108,6 +108,8 @@ char *virSocketAddrFormatFull(const virSocketAddr *addr,
bool withService,
const char *separator);
char *virSocketAddrGetPath(virSocketAddrPtr addr);
int virSocketAddrSetPort(virSocketAddrPtr addr, int port);
int virSocketAddrGetPort(virSocketAddrPtr addr);