
On 28.09.2016 21:38, Nehal J Wani wrote:
The NSS module shouldn't rely on custom leases database to not have entries for leases which have expired. --- tools/nss/libvirt_nss.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
diff --git a/tools/nss/libvirt_nss.c b/tools/nss/libvirt_nss.c index 54c4a2a..57ba473 100644 --- a/tools/nss/libvirt_nss.c +++ b/tools/nss/libvirt_nss.c @@ -42,6 +42,7 @@ #include "virlease.h" #include "viralloc.h" #include "virfile.h" +#include "virtime.h"
Well, technically you just need <time.h>, but luckily we are including virtime module in our libvirt-nss archive, and virtime.h includes time.h, so I think this is just okay.
#include "virerror.h" #include "virstring.h" #include "virsocketaddr.h" @@ -114,6 +115,8 @@ findLease(const char *name, ssize_t i, nleases; leaseAddress *tmpAddress = NULL; size_t ntmpAddress = 0; + long long currtime = 0; + long long expirytime = -1;
These initializations make no sense. @currtime is rewritten right away, and @expirytime a bit later (or a an error is reported if failed to do so).
*address = NULL; *naddress = 0; @@ -161,6 +164,8 @@ findLease(const char *name, nleases = virJSONValueArraySize(leases_array); DEBUG("Read %zd leases", nleases);
+ currtime = (long long) time(NULL);
I think that we should check for an error here. And if so, properly report it.
+ for (i = 0; i < nleases; i++) { virJSONValuePtr lease; const char *lease_name; @@ -181,6 +186,16 @@ findLease(const char *name, if (STRNEQ_NULLABLE(name, lease_name)) continue;
+ if (virJSONValueObjectGetNumberLong(lease, "expiry-time", &expirytime) < 0) { + /* A lease cannot be present without expiry-time */ + ERROR("expiry-time field missing for %s", name); + goto cleanup; + } + + /* Do not report expired lease */ + if (expirytime < currtime) + continue; + DEBUG("Found record for %s", lease_name); *found = true;
Otherwise looking good. Michal