return count ? 1 : 0;
}
+static long get_utc_offset() {
+ time_t t = time(NULL);
+ struct tm* time_struct = localtime(&t);
+
+ return time_struct->tm_gmtoff;
+}
+
static time_t parse_lease_time(const char* token_date, const char* token_time) {
time_t time = (time_t)(-1);
struct tm lease_time;
- static const int months[11] = {31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
-
if (sscanf(token_date, "%d/%d/%d", &lease_time.tm_year, &lease_time.tm_mon, &lease_time.tm_mday) == 3) {
+ lease_time.tm_year -= 1900;
+ lease_time.tm_mon -= 1;
+
if (sscanf(token_time, "%d:%d:%d", &lease_time.tm_hour, &lease_time.tm_min, &lease_time.tm_sec) == 3) {
- /* There doesn't seem to be a universally available library function
- which converts broken-down _GMT_ time to seconds-in-epoch.
- The following was borrowed from ISC dhcpd sources, where
- it is noted that it might not be entirely accurate for odd seconds.
- Since we're trying to get the same answer as dhcpd, that's just
- fine here. */
- time = ((((((365 * (lease_time.tm_year - 1970) +
- (lease_time.tm_year - 1969) / 4 +
- (lease_time.tm_mon > 1 ? months[lease_time.tm_mon - 2] : 0) +
- (lease_time.tm_mon > 2 && !((lease_time.tm_year - 1972) & 3 )) +
- (lease_time.tm_mday - 1)) * 24) +
- lease_time.tm_hour) * 60) +
- lease_time.tm_mon) * 60) +
- lease_time.tm_sec;
+ time = mktime(&lease_time) + get_utc_offset();
}
}
asprintf(&lease->fqdn, "%s.%s", hostname, daemon->domain_suffix);
}
- if (!leases)
- leases = lease;
- else
- leases->next = lease;
+ if (leases)
+ lease->next = leases;
+
+ leases = lease;
}
}
}