Use the plain libc APIs to avoid a dependancy on the main libvirt
code from the nss module.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
tools/nss/libvirt_nss.c | 16 +++++++++++-----
tools/nss/libvirt_nss.h | 5 +++--
tools/nss/libvirt_nss_leases.c | 6 ++++--
3 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/tools/nss/libvirt_nss.c b/tools/nss/libvirt_nss.c
index 2719e19cda..a9814cf0dc 100644
--- a/tools/nss/libvirt_nss.c
+++ b/tools/nss/libvirt_nss.c
@@ -31,13 +31,15 @@
#include <sys/types.h>
#include <dirent.h>
#include <arpa/inet.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
#if defined(HAVE_BSD_NSS)
# include <nsswitch.h>
#endif
-#include "viralloc.h"
-#include "virtime.h"
#include "configmake.h"
#include "libvirt_nss_leases.h"
@@ -146,10 +148,10 @@ findLease(const char *name,
DEBUG("Processing %s", path);
if (findMACs(path, name, &macs, &nmacs) < 0) {
- VIR_FREE(path);
+ free(path);
goto cleanup;
}
- VIR_FREE(path);
+ free(path);
#endif /* LIBVIRT_NSS_GUEST */
}
@@ -243,7 +245,7 @@ NSS_NAME(gethostbyname3)(const char *name, int af, struct hostent
*result,
{
enum nss_status ret = NSS_STATUS_UNAVAIL;
char *r_name, **r_aliases, *r_addr, *r_addr_next, **r_addr_list;
- VIR_AUTOFREE(leaseAddress *) addr = NULL;
+ leaseAddress *addr = NULL;
size_t naddr, i;
bool found = false;
size_t nameLen, need, idx = 0;
@@ -259,6 +261,7 @@ NSS_NAME(gethostbyname3)(const char *name, int af, struct hostent
*result,
af = AF_INET;
if ((r = findLease(name, af, &addr, &naddr, &found, errnop)) < 0) {
+ free(addr);
/* Error occurred. Return immediately. */
if (*errnop == EAGAIN) {
*herrnop = TRY_AGAIN;
@@ -273,11 +276,13 @@ NSS_NAME(gethostbyname3)(const char *name, int af, struct hostent
*result,
/* NOT found */
*errnop = ESRCH;
*herrnop = HOST_NOT_FOUND;
+ free(addr);
return NSS_STATUS_NOTFOUND;
} else if (!naddr) {
/* Found, but no data */
*errnop = ENXIO;
*herrnop = NO_DATA;
+ free(addr);
return NSS_STATUS_UNAVAIL;
}
@@ -349,6 +354,7 @@ NSS_NAME(gethostbyname3)(const char *name, int af, struct hostent
*result,
ret = NSS_STATUS_SUCCESS;
cleanup:
+ free(addr);
return ret;
}
diff --git a/tools/nss/libvirt_nss.h b/tools/nss/libvirt_nss.h
index 6e4be125d2..fa4ff892c6 100644
--- a/tools/nss/libvirt_nss.h
+++ b/tools/nss/libvirt_nss.h
@@ -30,13 +30,14 @@
#if 0
-# include "virerror.h"
+# include <errno.h>
# define ERROR(...) \
do { \
char ebuf[1024]; \
+ strerror_r(errno, ebuf, sizeof(ebuf)); \
fprintf(stderr, "ERROR %s:%d : ", __FUNCTION__, __LINE__); \
fprintf(stderr, __VA_ARGS__); \
- fprintf(stderr, " : %s\n", virStrerror(errno, ebuf, sizeof(ebuf))); \
+ fprintf(stderr, " : %s\n", ebuf); \
fprintf(stderr, "\n"); \
} while (0)
diff --git a/tools/nss/libvirt_nss_leases.c b/tools/nss/libvirt_nss_leases.c
index 803b14cc55..ddd50288d2 100644
--- a/tools/nss/libvirt_nss_leases.c
+++ b/tools/nss/libvirt_nss_leases.c
@@ -30,7 +30,6 @@
#include "libvirt_nss_leases.h"
#include "libvirt_nss.h"
-#include "viralloc.h"
enum {
FIND_LEASES_STATE_START,
@@ -79,6 +78,7 @@ appendAddr(const char *name ATTRIBUTE_UNUSED,
} sa;
unsigned char addr[16];
int err;
+ leaseAddress *newAddr;
DEBUG("IP address: %s", ipAddr);
@@ -131,10 +131,12 @@ appendAddr(const char *name ATTRIBUTE_UNUSED,
}
}
- if (VIR_REALLOC_N_QUIET(*tmpAddress, *ntmpAddress + 1) < 0) {
+ newAddr = realloc(*tmpAddress, sizeof(*newAddr) * (*ntmpAddress + 1));
+ if (!newAddr) {
ERROR("Out of memory");
return -1;
}
+ *tmpAddress = newAddr;
(*tmpAddress)[*ntmpAddress].expirytime = expirytime;
(*tmpAddress)[*ntmpAddress].af = family;
--
2.21.0