From 9267da086dcbb39509eae05d1d60ba37596a3f89 Mon Sep 17 00:00:00 2001 From: Marius Tomaschewski Date: Wed, 29 Apr 2015 11:18:36 +0200 Subject: dhclient6: unsigned lifetimes for script (bsc#926159) Address/IA lifetimes are all unsigned, don't turn into signed (negative e.g. in infinite case) when passing them to scripts and format timestamps as long to not break them on 64bit archs. References: bsc#926159 --- client/dhc6.c.orig +++ client/dhc6.c @@ -4344,8 +4344,8 @@ dhc6_marshall_values(const char *prefix, client_envadd(client, prefix, "ip6_type", "temporary"); } - client_envadd(client, prefix, "life_starts", "%d", - (int)(addr->starts)); + client_envadd(client, prefix, "life_starts", "%ld", + (long)(addr->starts)); client_envadd(client, prefix, "preferred_life", "%u", addr->preferred_life); client_envadd(client, prefix, "max_life", "%u", @@ -4356,8 +4356,8 @@ dhc6_marshall_values(const char *prefix, if (ia != NULL) { client_envadd(client, prefix, "iaid", "%s", print_hex_1(4, ia->iaid, 12)); - client_envadd(client, prefix, "starts", "%d", - (int)(ia->starts)); + client_envadd(client, prefix, "starts", "%ld", + (long)(ia->starts)); client_envadd(client, prefix, "renew", "%u", ia->renew); client_envadd(client, prefix, "rebind", "%u", ia->rebind); } --- client/dhclient.c.orig +++ client/dhclient.c @@ -3708,13 +3708,13 @@ write_client6_lease(struct client_state return ISC_R_IOERROR; if (ia->ia_type != D6O_IA_TA) - stat = fprintf(leaseFile, " starts %d;\n" + stat = fprintf(leaseFile, " starts %ld;\n" " renew %u;\n" " rebind %u;\n", - (int)ia->starts, ia->renew, ia->rebind); + (long)ia->starts, ia->renew, ia->rebind); else - stat = fprintf(leaseFile, " starts %d;\n", - (int)ia->starts); + stat = fprintf(leaseFile, " starts %ld;\n", + (long)ia->starts); if (stat <= 0) return ISC_R_IOERROR; @@ -3731,10 +3731,10 @@ write_client6_lease(struct client_state if (stat <= 0) return ISC_R_IOERROR; - stat = fprintf(leaseFile, " starts %d;\n" + stat = fprintf(leaseFile, " starts %ld;\n" " preferred-life %u;\n" " max-life %u;\n", - (int)addr->starts, addr->preferred_life, + (long)addr->starts, addr->preferred_life, addr->max_life); if (stat <= 0) return ISC_R_IOERROR;