2014-02-05 02:13:52 +04:00
/***
This file is part of systemd .
Copyright ( C ) 2013 Intel Corporation . All rights reserved .
Copyright ( C ) 2014 Tom Gundersen
systemd is free software ; you can redistribute it and / or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation ; either version 2.1 of the License , or
( at your option ) any later version .
systemd is distributed in the hope that it will be useful , but
WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
Lesser General Public License for more details .
You should have received a copy of the GNU Lesser General Public License
along with systemd ; If not , see < http : //www.gnu.org/licenses/>.
* * */
2015-10-24 23:58:24 +03:00
# include <arpa/inet.h>
2014-02-05 02:13:52 +04:00
# include <errno.h>
# include <stdio.h>
2015-10-24 23:58:24 +03:00
# include <stdlib.h>
# include <string.h>
# include "sd-dhcp-lease.h"
2014-02-05 02:13:52 +04:00
2015-10-27 05:01:06 +03:00
# include "alloc-util.h"
2015-10-24 23:58:24 +03:00
# include "dhcp-lease-internal.h"
# include "dhcp-protocol.h"
# include "dns-domain.h"
2015-10-25 15:14:12 +03:00
# include "fd-util.h"
2014-02-27 04:24:05 +04:00
# include "fileio.h"
2015-11-03 14:25:29 +03:00
# include "hexdecoct.h"
2015-05-18 18:10:07 +03:00
# include "hostname-util.h"
2015-10-24 23:58:24 +03:00
# include "in-addr-util.h"
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
# include "network-internal.h"
2015-10-26 18:18:16 +03:00
# include "parse-util.h"
2015-11-03 14:25:29 +03:00
# include "string-util.h"
2015-10-24 23:58:24 +03:00
# include "unaligned.h"
2014-02-05 02:13:52 +04:00
int sd_dhcp_lease_get_address ( sd_dhcp_lease * lease , struct in_addr * addr ) {
assert_return ( lease , - EINVAL ) ;
assert_return ( addr , - EINVAL ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( lease - > address = = 0 )
return - ENODATA ;
2014-02-05 02:13:52 +04:00
addr - > s_addr = lease - > address ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
return 0 ;
}
2014-02-05 02:13:52 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
int sd_dhcp_lease_get_broadcast ( sd_dhcp_lease * lease , struct in_addr * addr ) {
assert_return ( lease , - EINVAL ) ;
assert_return ( addr , - EINVAL ) ;
if ( ! lease - > have_broadcast )
return - ENODATA ;
addr - > s_addr = lease - > broadcast ;
2014-02-05 02:13:52 +04:00
return 0 ;
}
2014-06-26 17:18:43 +04:00
int sd_dhcp_lease_get_lifetime ( sd_dhcp_lease * lease , uint32_t * lifetime ) {
assert_return ( lease , - EINVAL ) ;
2014-11-19 15:57:08 +03:00
assert_return ( lifetime , - EINVAL ) ;
2014-06-26 17:18:43 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( lease - > lifetime < = 0 )
return - ENODATA ;
2014-06-26 17:18:43 +04:00
* lifetime = lease - > lifetime ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
return 0 ;
}
2014-06-26 17:18:43 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
int sd_dhcp_lease_get_t1 ( sd_dhcp_lease * lease , uint32_t * t1 ) {
assert_return ( lease , - EINVAL ) ;
assert_return ( t1 , - EINVAL ) ;
if ( lease - > t1 < = 0 )
return - ENODATA ;
* t1 = lease - > t1 ;
return 0 ;
}
int sd_dhcp_lease_get_t2 ( sd_dhcp_lease * lease , uint32_t * t2 ) {
assert_return ( lease , - EINVAL ) ;
assert_return ( t2 , - EINVAL ) ;
if ( lease - > t2 < = 0 )
return - ENODATA ;
* t2 = lease - > t2 ;
2014-06-26 17:18:43 +04:00
return 0 ;
}
2014-02-05 02:13:52 +04:00
int sd_dhcp_lease_get_mtu ( sd_dhcp_lease * lease , uint16_t * mtu ) {
assert_return ( lease , - EINVAL ) ;
assert_return ( mtu , - EINVAL ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( lease - > mtu < = 0 )
return - ENODATA ;
2014-02-05 02:13:52 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
* mtu = lease - > mtu ;
2014-02-05 02:13:52 +04:00
return 0 ;
}
2014-07-17 03:39:46 +04:00
int sd_dhcp_lease_get_dns ( sd_dhcp_lease * lease , const struct in_addr * * addr ) {
2014-02-05 02:13:52 +04:00
assert_return ( lease , - EINVAL ) ;
assert_return ( addr , - EINVAL ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( lease - > dns_size < = 0 )
return - ENODATA ;
2014-02-05 02:13:52 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
* addr = lease - > dns ;
return ( int ) lease - > dns_size ;
2014-02-05 02:13:52 +04:00
}
2014-07-17 03:39:46 +04:00
int sd_dhcp_lease_get_ntp ( sd_dhcp_lease * lease , const struct in_addr * * addr ) {
2014-04-29 14:17:27 +04:00
assert_return ( lease , - EINVAL ) ;
assert_return ( addr , - EINVAL ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( lease - > ntp_size < = 0 )
return - ENODATA ;
2014-04-29 14:17:27 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
* addr = lease - > ntp ;
return ( int ) lease - > ntp_size ;
2014-04-29 14:17:27 +04:00
}
2014-02-05 02:13:52 +04:00
int sd_dhcp_lease_get_domainname ( sd_dhcp_lease * lease , const char * * domainname ) {
assert_return ( lease , - EINVAL ) ;
assert_return ( domainname , - EINVAL ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( ! lease - > domainname )
return - ENODATA ;
2014-02-05 02:13:52 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
* domainname = lease - > domainname ;
2014-02-05 02:13:52 +04:00
return 0 ;
}
int sd_dhcp_lease_get_hostname ( sd_dhcp_lease * lease , const char * * hostname ) {
assert_return ( lease , - EINVAL ) ;
assert_return ( hostname , - EINVAL ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( ! lease - > hostname )
return - ENODATA ;
2014-02-05 02:13:52 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
* hostname = lease - > hostname ;
2014-02-05 02:13:52 +04:00
return 0 ;
}
2014-03-03 18:43:02 +04:00
int sd_dhcp_lease_get_root_path ( sd_dhcp_lease * lease , const char * * root_path ) {
assert_return ( lease , - EINVAL ) ;
assert_return ( root_path , - EINVAL ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( ! lease - > root_path )
return - ENODATA ;
2014-03-03 18:43:02 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
* root_path = lease - > root_path ;
2014-03-03 18:43:02 +04:00
return 0 ;
}
2014-02-05 02:13:52 +04:00
int sd_dhcp_lease_get_router ( sd_dhcp_lease * lease , struct in_addr * addr ) {
assert_return ( lease , - EINVAL ) ;
assert_return ( addr , - EINVAL ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( lease - > router = = 0 )
return - ENODATA ;
2014-02-05 02:13:52 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
addr - > s_addr = lease - > router ;
2014-02-05 02:13:52 +04:00
return 0 ;
}
int sd_dhcp_lease_get_netmask ( sd_dhcp_lease * lease , struct in_addr * addr ) {
assert_return ( lease , - EINVAL ) ;
assert_return ( addr , - EINVAL ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( ! lease - > have_subnet_mask )
return - ENODATA ;
2014-02-05 02:13:52 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
addr - > s_addr = lease - > subnet_mask ;
2014-02-05 02:13:52 +04:00
return 0 ;
}
2014-03-03 19:46:10 +04:00
int sd_dhcp_lease_get_server_identifier ( sd_dhcp_lease * lease , struct in_addr * addr ) {
assert_return ( lease , - EINVAL ) ;
assert_return ( addr , - EINVAL ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( lease - > server_address = = 0 )
return - ENODATA ;
2014-03-03 19:46:10 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
addr - > s_addr = lease - > server_address ;
2014-03-03 19:46:10 +04:00
return 0 ;
}
2014-03-03 20:13:59 +04:00
int sd_dhcp_lease_get_next_server ( sd_dhcp_lease * lease , struct in_addr * addr ) {
assert_return ( lease , - EINVAL ) ;
assert_return ( addr , - EINVAL ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( lease - > next_server = = 0 )
return - ENODATA ;
2014-03-03 20:13:59 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
addr - > s_addr = lease - > next_server ;
2014-03-03 20:13:59 +04:00
return 0 ;
}
2014-07-17 03:39:46 +04:00
int sd_dhcp_lease_get_routes ( sd_dhcp_lease * lease , struct sd_dhcp_route * * routes ) {
2014-06-28 02:00:06 +04:00
assert_return ( lease , - EINVAL ) ;
assert_return ( routes , - EINVAL ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( lease - > static_route_size < = 0 )
return - ENODATA ;
2014-06-28 02:00:06 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
* routes = lease - > static_route ;
return ( int ) lease - > static_route_size ;
2014-06-28 02:00:06 +04:00
}
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
int sd_dhcp_lease_get_vendor_specific ( sd_dhcp_lease * lease , const void * * data , size_t * data_len ) {
2015-07-09 19:04:01 +03:00
assert_return ( lease , - EINVAL ) ;
assert_return ( data , - EINVAL ) ;
assert_return ( data_len , - EINVAL ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( lease - > vendor_specific_len < = 0 )
return - ENODATA ;
2015-07-09 19:04:01 +03:00
* data = lease - > vendor_specific ;
* data_len = lease - > vendor_specific_len ;
return 0 ;
}
2014-02-05 02:13:52 +04:00
sd_dhcp_lease * sd_dhcp_lease_ref ( sd_dhcp_lease * lease ) {
2015-08-26 22:05:53 +03:00
if ( ! lease )
return NULL ;
assert ( lease - > n_ref > = 1 ) ;
lease - > n_ref + + ;
2014-02-05 02:13:52 +04:00
return lease ;
}
sd_dhcp_lease * sd_dhcp_lease_unref ( sd_dhcp_lease * lease ) {
2015-08-01 06:02:22 +03:00
2015-08-26 22:05:53 +03:00
if ( ! lease )
return NULL ;
2015-08-01 06:02:22 +03:00
2015-08-26 22:05:53 +03:00
assert ( lease - > n_ref > = 1 ) ;
lease - > n_ref - - ;
if ( lease - > n_ref > 0 )
return NULL ;
while ( lease - > private_options ) {
struct sd_dhcp_raw_option * option = lease - > private_options ;
LIST_REMOVE ( options , lease - > private_options , option ) ;
free ( option - > data ) ;
free ( option ) ;
2014-02-05 02:13:52 +04:00
}
2015-08-26 22:05:53 +03:00
free ( lease - > hostname ) ;
free ( lease - > domainname ) ;
free ( lease - > dns ) ;
free ( lease - > ntp ) ;
free ( lease - > static_route ) ;
free ( lease - > client_id ) ;
free ( lease - > vendor_specific ) ;
free ( lease ) ;
2014-02-05 02:13:52 +04:00
return NULL ;
}
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
static int lease_parse_u32 ( const uint8_t * option , size_t len , uint32_t * ret , uint32_t min ) {
2014-05-20 18:40:59 +04:00
assert ( option ) ;
assert ( ret ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( len ! = 4 )
return - EINVAL ;
2014-05-20 18:40:59 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
* ret = unaligned_read_be32 ( ( be32_t * ) option ) ;
if ( * ret < min )
* ret = min ;
2014-05-20 18:40:59 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
return 0 ;
2014-05-20 18:40:59 +04:00
}
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
static int lease_parse_u16 ( const uint8_t * option , size_t len , uint16_t * ret , uint16_t min ) {
2014-05-20 18:40:59 +04:00
assert ( option ) ;
assert ( ret ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( len ! = 2 )
return - EINVAL ;
2014-05-20 18:40:59 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
* ret = unaligned_read_be16 ( ( be16_t * ) option ) ;
if ( * ret < min )
* ret = min ;
2014-05-21 00:02:49 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
return 0 ;
2014-05-21 00:02:49 +04:00
}
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
static int lease_parse_be32 ( const uint8_t * option , size_t len , be32_t * ret ) {
2014-05-21 00:02:49 +04:00
assert ( option ) ;
assert ( ret ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( len ! = 4 )
return - EINVAL ;
2014-05-21 00:02:49 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
memcpy ( ret , option , 4 ) ;
return 0 ;
2014-05-21 00:02:49 +04:00
}
2014-05-20 18:40:59 +04:00
static int lease_parse_string ( const uint8_t * option , size_t len , char * * ret ) {
assert ( option ) ;
assert ( ret ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( len < = 0 )
* ret = mfree ( * ret ) ;
else {
2014-05-20 18:40:59 +04:00
char * string ;
2015-10-01 00:35:18 +03:00
/*
* One trailing NUL byte is OK , we don ' t mind . See :
* https : //github.com/systemd/systemd/issues/1337
*/
if ( memchr ( option , 0 , len - 1 ) )
2015-08-26 20:18:11 +03:00
return - EINVAL ;
2015-10-01 00:35:18 +03:00
string = strndup ( ( const char * ) option , len ) ;
2014-05-20 18:40:59 +04:00
if ( ! string )
2015-08-26 20:18:11 +03:00
return - ENOMEM ;
2014-05-20 18:40:59 +04:00
free ( * ret ) ;
* ret = string ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
}
2014-05-20 18:40:59 +04:00
return 0 ;
}
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
static int lease_parse_in_addrs ( const uint8_t * option , size_t len , struct in_addr * * ret , size_t * n_ret ) {
2014-05-20 18:40:59 +04:00
assert ( option ) ;
assert ( ret ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
assert ( n_ret ) ;
2014-05-20 18:40:59 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( len < = 0 ) {
* ret = mfree ( * ret ) ;
* n_ret = 0 ;
} else {
size_t n_addresses ;
2014-05-20 18:40:59 +04:00
struct in_addr * addresses ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( len % 4 ! = 0 )
return - EINVAL ;
2014-05-20 18:40:59 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
n_addresses = len / 4 ;
addresses = newdup ( struct in_addr , option , n_addresses ) ;
2014-05-20 18:40:59 +04:00
if ( ! addresses )
return - ENOMEM ;
free ( * ret ) ;
* ret = addresses ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
* n_ret = n_addresses ;
2014-05-20 18:40:59 +04:00
}
return 0 ;
}
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
static int lease_parse_routes (
const uint8_t * option , size_t len ,
struct sd_dhcp_route * * routes , size_t * routes_size , size_t * routes_allocated ) {
2014-06-28 02:00:06 +04:00
struct in_addr addr ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
assert ( option | | len < = 0 ) ;
2014-06-28 02:00:06 +04:00
assert ( routes ) ;
assert ( routes_size ) ;
assert ( routes_allocated ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( len < = 0 )
2014-06-28 02:00:06 +04:00
return 0 ;
if ( len % 8 ! = 0 )
return - EINVAL ;
if ( ! GREEDY_REALLOC ( * routes , * routes_allocated , * routes_size + ( len / 8 ) ) )
return - ENOMEM ;
while ( len > = 8 ) {
struct sd_dhcp_route * route = * routes + * routes_size ;
2014-11-01 21:02:44 +03:00
int r ;
2014-06-28 02:00:06 +04:00
2014-11-01 21:02:44 +03:00
r = in_addr_default_prefixlen ( ( struct in_addr * ) option , & route - > dst_prefixlen ) ;
if ( r < 0 ) {
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
log_debug ( " Failed to determine destination prefix length from class based IP, ignoring " ) ;
2014-06-28 02:00:06 +04:00
continue ;
}
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
assert_se ( lease_parse_be32 ( option , 4 , & addr . s_addr ) > = 0 ) ;
2014-06-28 02:00:06 +04:00
route - > dst_addr = inet_makeaddr ( inet_netof ( addr ) , 0 ) ;
option + = 4 ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
assert_se ( lease_parse_be32 ( option , 4 , & route - > gw_addr . s_addr ) > = 0 ) ;
2014-06-28 02:00:06 +04:00
option + = 4 ;
len - = 8 ;
( * routes_size ) + + ;
}
return 0 ;
}
/* parses RFC3442 Classless Static Route Option */
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
static int lease_parse_classless_routes (
const uint8_t * option , size_t len ,
struct sd_dhcp_route * * routes , size_t * routes_size , size_t * routes_allocated ) {
2014-06-28 02:00:06 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
assert ( option | | len < = 0 ) ;
2014-06-28 02:00:06 +04:00
assert ( routes ) ;
assert ( routes_size ) ;
assert ( routes_allocated ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( len < = 0 )
return 0 ;
2014-06-28 02:00:06 +04:00
/* option format: (subnet-mask-width significant-subnet-octets gateway-ip)* */
while ( len > 0 ) {
uint8_t dst_octets ;
struct sd_dhcp_route * route ;
if ( ! GREEDY_REALLOC ( * routes , * routes_allocated , * routes_size + 1 ) )
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
return - ENOMEM ;
2014-06-28 02:00:06 +04:00
route = * routes + * routes_size ;
dst_octets = ( * option = = 0 ? 0 : ( ( * option - 1 ) / 8 ) + 1 ) ;
route - > dst_prefixlen = * option ;
option + + ;
len - - ;
/* can't have more than 4 octets in IPv4 */
if ( dst_octets > 4 | | len < dst_octets )
return - EINVAL ;
route - > dst_addr . s_addr = 0 ;
memcpy ( & route - > dst_addr . s_addr , option , dst_octets ) ;
option + = dst_octets ;
len - = dst_octets ;
if ( len < 4 )
return - EINVAL ;
lease_parse_be32 ( option , 4 , & route - > gw_addr . s_addr ) ;
option + = 4 ;
len - = 4 ;
( * routes_size ) + + ;
}
return 0 ;
}
2015-08-27 00:05:34 +03:00
int dhcp_lease_parse_options ( uint8_t code , uint8_t len , const void * option , void * userdata ) {
2015-08-26 21:11:35 +03:00
sd_dhcp_lease * lease = userdata ;
2014-05-20 18:40:59 +04:00
int r ;
assert ( lease ) ;
2014-02-05 02:13:52 +04:00
switch ( code ) {
case DHCP_OPTION_IP_ADDRESS_LEASE_TIME :
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = lease_parse_u32 ( option , len , & lease - > lifetime , 1 ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse lease time, ignoring: %m " ) ;
2014-02-05 02:13:52 +04:00
break ;
case DHCP_OPTION_SERVER_IDENTIFIER :
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = lease_parse_be32 ( option , len , & lease - > server_address ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse server identifier, ignoring: %m " ) ;
2014-02-05 02:13:52 +04:00
break ;
case DHCP_OPTION_SUBNET_MASK :
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = lease_parse_be32 ( option , len , & lease - > subnet_mask ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse subnet mask, ignoring: %m " ) ;
else
lease - > have_subnet_mask = true ;
2014-02-05 02:13:52 +04:00
break ;
2014-05-21 00:02:49 +04:00
case DHCP_OPTION_BROADCAST :
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = lease_parse_be32 ( option , len , & lease - > broadcast ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse broadcast address, ignoring: %m " ) ;
else
lease - > have_broadcast = true ;
2014-05-21 00:02:49 +04:00
break ;
2014-02-05 02:13:52 +04:00
case DHCP_OPTION_ROUTER :
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( len > = 4 ) {
r = lease_parse_be32 ( option , 4 , & lease - > router ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse router address, ignoring: %m " ) ;
}
2014-02-05 02:13:52 +04:00
break ;
case DHCP_OPTION_DOMAIN_NAME_SERVER :
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = lease_parse_in_addrs ( option , len , & lease - > dns , & lease - > dns_size ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse DNS server, ignoring: %m " ) ;
2014-02-05 02:13:52 +04:00
break ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
case DHCP_OPTION_NTP_SERVER :
r = lease_parse_in_addrs ( option , len , & lease - > ntp , & lease - > ntp_size ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse NTP server, ignoring: %m " ) ;
2014-05-21 00:02:49 +04:00
break ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
case DHCP_OPTION_STATIC_ROUTE :
r = lease_parse_routes ( option , len , & lease - > static_route , & lease - > static_route_size , & lease - > static_route_allocated ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse static routes, ignoring: %m " ) ;
2014-05-21 00:02:49 +04:00
break ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
case DHCP_OPTION_INTERFACE_MTU :
r = lease_parse_u16 ( option , len , & lease - > mtu , 68 ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse MTU, ignoring: %m " ) ;
2014-05-21 00:02:49 +04:00
break ;
2015-08-26 21:12:17 +03:00
case DHCP_OPTION_DOMAIN_NAME : {
_cleanup_free_ char * domainname = NULL , * normalized = NULL ;
2014-08-15 03:04:53 +04:00
r = lease_parse_string ( option , len , & domainname ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( r < 0 ) {
log_debug_errno ( r , " Failed to parse domain name, ignoring: %m " ) ;
return 0 ;
}
2014-02-05 02:13:52 +04:00
2015-08-26 21:12:17 +03:00
r = dns_name_normalize ( domainname , & normalized ) ;
if ( r < 0 ) {
log_debug_errno ( r , " Failed to normalize domain name '%s': %m " , domainname ) ;
return 0 ;
}
2014-08-15 03:04:53 +04:00
2015-08-26 21:12:17 +03:00
if ( is_localhost ( normalized ) ) {
2015-08-27 20:57:11 +03:00
log_debug_errno ( r , " Detected 'localhost' as suggested domain name, ignoring. " ) ;
2015-06-03 02:30:42 +03:00
break ;
}
2014-08-15 03:04:53 +04:00
free ( lease - > domainname ) ;
2015-08-26 21:12:17 +03:00
lease - > domainname = normalized ;
normalized = NULL ;
2014-02-05 02:13:52 +04:00
2014-08-15 03:04:53 +04:00
break ;
}
2015-08-26 21:12:17 +03:00
case DHCP_OPTION_HOST_NAME : {
_cleanup_free_ char * hostname = NULL , * normalized = NULL ;
2014-08-15 03:04:53 +04:00
r = lease_parse_string ( option , len , & hostname ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( r < 0 ) {
log_debug_errno ( r , " Failed to parse host name, ignoring: %m " ) ;
return 0 ;
}
2014-02-05 02:13:52 +04:00
2015-08-26 21:12:17 +03:00
r = dns_name_normalize ( hostname , & normalized ) ;
if ( r < 0 ) {
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
log_debug_errno ( r , " Failed to normalize host name '%s', ignoring: %m " , hostname ) ;
2015-08-26 21:12:17 +03:00
return 0 ;
}
2015-01-28 19:47:37 +03:00
2015-08-26 21:12:17 +03:00
if ( is_localhost ( normalized ) ) {
2015-08-27 20:57:11 +03:00
log_debug_errno ( r , " Detected 'localhost' as suggested host name, ignoring. " ) ;
2015-08-26 21:12:17 +03:00
return 0 ;
}
2014-08-15 03:04:53 +04:00
2015-08-26 21:12:17 +03:00
free ( lease - > hostname ) ;
lease - > hostname = normalized ;
normalized = NULL ;
2014-02-05 02:13:52 +04:00
2014-08-15 03:04:53 +04:00
break ;
}
2014-03-03 18:43:02 +04:00
2015-08-26 21:11:35 +03:00
case DHCP_OPTION_ROOT_PATH :
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = lease_parse_string ( option , len , & lease - > root_path ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse root path, ignoring: %m " ) ;
break ;
2014-03-03 18:43:02 +04:00
2014-02-05 02:13:52 +04:00
case DHCP_OPTION_RENEWAL_T1_TIME :
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = lease_parse_u32 ( option , len , & lease - > t1 , 1 ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse T1 time, ignoring: %m " ) ;
2014-02-05 02:13:52 +04:00
break ;
case DHCP_OPTION_REBINDING_T2_TIME :
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = lease_parse_u32 ( option , len , & lease - > t2 , 1 ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse T2 time, ignoring: %m " ) ;
2014-02-05 02:13:52 +04:00
break ;
2014-06-28 02:00:06 +04:00
case DHCP_OPTION_CLASSLESS_STATIC_ROUTE :
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = lease_parse_classless_routes (
2015-08-26 21:11:35 +03:00
option , len ,
& lease - > static_route ,
& lease - > static_route_size ,
& lease - > static_route_allocated ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( r < 0 )
log_debug_errno ( r , " Failed to parse classless routes, ignoring: %m " ) ;
break ;
2015-07-09 19:04:01 +03:00
2015-08-26 20:19:32 +03:00
case DHCP_OPTION_NEW_TZDB_TIMEZONE : {
_cleanup_free_ char * tz = NULL ;
r = lease_parse_string ( option , len , & tz ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( r < 0 ) {
log_debug_errno ( r , " Failed to parse timezone option, ignoring: %m " ) ;
return 0 ;
}
2015-08-26 20:19:32 +03:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( ! timezone_is_valid ( tz ) ) {
log_debug_errno ( r , " Timezone is not valid, ignoring: %m " ) ;
return 0 ;
}
2015-08-26 20:19:32 +03:00
free ( lease - > timezone ) ;
lease - > timezone = tz ;
tz = NULL ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
2015-08-26 20:19:32 +03:00
break ;
}
2015-07-09 19:04:01 +03:00
case DHCP_OPTION_VENDOR_SPECIFIC :
2015-08-26 21:11:35 +03:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( len < = 0 )
lease - > vendor_specific = mfree ( lease - > vendor_specific ) ;
else {
void * p ;
p = memdup ( option , len ) ;
if ( ! p )
2015-07-09 19:04:01 +03:00
return - ENOMEM ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
free ( lease - > vendor_specific ) ;
lease - > vendor_specific = p ;
}
2015-08-01 06:02:22 +03:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
lease - > vendor_specific_len = len ;
break ;
2015-08-01 06:02:22 +03:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
case DHCP_OPTION_PRIVATE_BASE . . . DHCP_OPTION_PRIVATE_LAST :
2015-08-01 06:02:22 +03:00
r = dhcp_lease_insert_private_option ( lease , code , option , len ) ;
if ( r < 0 )
return r ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
break ;
default :
2015-11-25 19:29:30 +03:00
log_debug ( " Ignoring option DHCP option % " PRIu8 " while parsing. " , code ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
break ;
2014-02-05 02:13:52 +04:00
}
return 0 ;
}
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
int dhcp_lease_insert_private_option ( sd_dhcp_lease * lease , uint8_t tag , const void * data , uint8_t len ) {
2015-08-01 06:02:22 +03:00
struct sd_dhcp_raw_option * cur , * option ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
assert ( lease ) ;
2015-08-01 06:02:22 +03:00
LIST_FOREACH ( options , cur , lease - > private_options ) {
if ( tag < cur - > tag )
break ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( tag = = cur - > tag ) {
log_debug ( " Ignoring duplicate option, tagged %i. " , tag ) ;
2015-08-01 06:02:22 +03:00
return 0 ;
}
}
option = new ( struct sd_dhcp_raw_option , 1 ) ;
if ( ! option )
return - ENOMEM ;
option - > tag = tag ;
option - > length = len ;
option - > data = memdup ( data , len ) ;
if ( ! option - > data ) {
free ( option ) ;
return - ENOMEM ;
}
LIST_INSERT_BEFORE ( options , lease - > private_options , cur , option ) ;
return 0 ;
}
2014-02-05 02:13:52 +04:00
int dhcp_lease_new ( sd_dhcp_lease * * ret ) {
2014-04-11 07:45:46 +04:00
sd_dhcp_lease * lease ;
2014-02-05 02:13:52 +04:00
lease = new0 ( sd_dhcp_lease , 1 ) ;
if ( ! lease )
return - ENOMEM ;
2014-04-30 00:40:38 +04:00
lease - > router = INADDR_ANY ;
2015-08-26 22:05:53 +03:00
lease - > n_ref = 1 ;
2014-02-05 02:13:52 +04:00
* ret = lease ;
return 0 ;
}
2014-02-27 04:24:05 +04:00
2015-08-26 21:48:21 +03:00
int dhcp_lease_save ( sd_dhcp_lease * lease , const char * lease_file ) {
2014-02-27 04:24:05 +04:00
_cleanup_free_ char * temp_path = NULL ;
_cleanup_fclose_ FILE * f = NULL ;
2015-08-01 06:18:51 +03:00
struct sd_dhcp_raw_option * option ;
2014-02-27 04:24:05 +04:00
struct in_addr address ;
2014-07-17 03:39:46 +04:00
const struct in_addr * addresses ;
2015-08-27 00:05:34 +03:00
const void * client_id , * data ;
2015-07-09 19:04:01 +03:00
size_t client_id_len , data_len ;
2014-02-27 04:24:05 +04:00
const char * string ;
uint16_t mtu ;
2014-06-28 02:00:06 +04:00
struct sd_dhcp_route * routes ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
uint32_t t1 , t2 , lifetime ;
2014-02-27 04:24:05 +04:00
int r ;
assert ( lease ) ;
assert ( lease_file ) ;
r = fopen_temporary ( lease_file , & f , & temp_path ) ;
if ( r < 0 )
2015-07-29 21:31:07 +03:00
goto fail ;
2014-02-27 04:24:05 +04:00
fchmod ( fileno ( f ) , 0644 ) ;
fprintf ( f ,
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
" # This is private data. Do not parse. \n " ) ;
2014-02-27 04:24:05 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = sd_dhcp_lease_get_address ( lease , & address ) ;
if ( r > = 0 )
fprintf ( f , " ADDRESS=%s \n " , inet_ntoa ( address ) ) ;
2014-02-27 04:24:05 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = sd_dhcp_lease_get_netmask ( lease , & address ) ;
if ( r > = 0 )
fprintf ( f , " NETMASK=%s \n " , inet_ntoa ( address ) ) ;
2014-02-27 04:24:05 +04:00
2014-04-30 00:40:38 +04:00
r = sd_dhcp_lease_get_router ( lease , & address ) ;
if ( r > = 0 )
fprintf ( f , " ROUTER=%s \n " , inet_ntoa ( address ) ) ;
2014-03-03 19:46:10 +04:00
r = sd_dhcp_lease_get_server_identifier ( lease , & address ) ;
2014-04-29 15:29:12 +04:00
if ( r > = 0 )
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
fprintf ( f , " SERVER_ADDRESS=%s \n " , inet_ntoa ( address ) ) ;
2014-03-03 19:46:10 +04:00
2014-03-03 20:13:59 +04:00
r = sd_dhcp_lease_get_next_server ( lease , & address ) ;
2014-04-29 15:29:12 +04:00
if ( r > = 0 )
fprintf ( f , " NEXT_SERVER=%s \n " , inet_ntoa ( address ) ) ;
2014-03-03 20:13:59 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = sd_dhcp_lease_get_broadcast ( lease , & address ) ;
if ( r > = 0 )
fprintf ( f , " BROADCAST=%s \n " , inet_ntoa ( address ) ) ;
2014-02-27 04:24:05 +04:00
r = sd_dhcp_lease_get_mtu ( lease , & mtu ) ;
if ( r > = 0 )
fprintf ( f , " MTU=% " PRIu16 " \n " , mtu ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = sd_dhcp_lease_get_t1 ( lease , & t1 ) ;
if ( r > = 0 )
fprintf ( f , " T1=% " PRIu32 " \n " , t1 ) ;
r = sd_dhcp_lease_get_t2 ( lease , & t2 ) ;
2014-04-29 15:29:12 +04:00
if ( r > = 0 )
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
fprintf ( f , " T2=% " PRIu32 " \n " , t2 ) ;
r = sd_dhcp_lease_get_lifetime ( lease , & lifetime ) ;
if ( r > = 0 )
fprintf ( f , " LIFETIME=% " PRIu32 " \n " , lifetime ) ;
r = sd_dhcp_lease_get_dns ( lease , & addresses ) ;
if ( r > 0 ) {
fputs ( " DNS= " , f ) ;
2014-07-23 15:48:18 +04:00
serialize_in_addrs ( f , addresses , r ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
fputs ( " \n " , f ) ;
}
2014-04-29 15:29:12 +04:00
2014-07-17 03:39:46 +04:00
r = sd_dhcp_lease_get_ntp ( lease , & addresses ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( r > 0 ) {
fputs ( " NTP= " , f ) ;
2014-07-23 15:48:18 +04:00
serialize_in_addrs ( f , addresses , r ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
fputs ( " \n " , f ) ;
}
2014-02-27 04:24:05 +04:00
r = sd_dhcp_lease_get_domainname ( lease , & string ) ;
if ( r > = 0 )
fprintf ( f , " DOMAINNAME=%s \n " , string ) ;
r = sd_dhcp_lease_get_hostname ( lease , & string ) ;
if ( r > = 0 )
fprintf ( f , " HOSTNAME=%s \n " , string ) ;
2014-03-03 18:43:02 +04:00
r = sd_dhcp_lease_get_root_path ( lease , & string ) ;
if ( r > = 0 )
fprintf ( f , " ROOT_PATH=%s \n " , string ) ;
2014-07-17 03:39:46 +04:00
r = sd_dhcp_lease_get_routes ( lease , & routes ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( r > 0 )
2014-07-17 03:39:46 +04:00
serialize_dhcp_routes ( f , " ROUTES " , routes , r ) ;
2014-06-28 02:00:06 +04:00
2015-08-26 20:19:32 +03:00
r = sd_dhcp_lease_get_timezone ( lease , & string ) ;
if ( r > = 0 )
fprintf ( f , " TIMEZONE=%s \n " , string ) ;
2014-11-19 02:13:12 +03:00
r = sd_dhcp_lease_get_client_id ( lease , & client_id , & client_id_len ) ;
if ( r > = 0 ) {
_cleanup_free_ char * client_id_hex ;
2015-05-22 00:30:37 +03:00
client_id_hex = hexmem ( client_id , client_id_len ) ;
2014-11-19 02:13:12 +03:00
if ( ! client_id_hex ) {
r = - ENOMEM ;
2015-07-29 21:31:07 +03:00
goto fail ;
2014-11-19 02:13:12 +03:00
}
fprintf ( f , " CLIENTID=%s \n " , client_id_hex ) ;
}
2015-07-09 19:04:01 +03:00
r = sd_dhcp_lease_get_vendor_specific ( lease , & data , & data_len ) ;
if ( r > = 0 ) {
_cleanup_free_ char * option_hex = NULL ;
option_hex = hexmem ( data , data_len ) ;
if ( ! option_hex ) {
r = - ENOMEM ;
2015-07-29 21:31:07 +03:00
goto fail ;
2015-07-09 19:04:01 +03:00
}
fprintf ( f , " VENDOR_SPECIFIC=%s \n " , option_hex ) ;
}
2015-08-01 06:18:51 +03:00
LIST_FOREACH ( options , option , lease - > private_options ) {
2015-08-05 22:25:12 +03:00
char key [ strlen ( " OPTION_000 " ) + 1 ] ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
2015-08-01 06:18:51 +03:00
snprintf ( key , sizeof ( key ) , " OPTION_% " PRIu8 , option - > tag ) ;
r = serialize_dhcp_option ( f , key , option - > data , option - > length ) ;
if ( r < 0 )
goto fail ;
}
2015-07-29 21:31:07 +03:00
r = fflush_and_check ( f ) ;
if ( r < 0 )
goto fail ;
2014-02-27 04:24:05 +04:00
2015-07-29 21:31:07 +03:00
if ( rename ( temp_path , lease_file ) < 0 ) {
2014-02-27 04:24:05 +04:00
r = - errno ;
2015-07-29 21:31:07 +03:00
goto fail ;
2014-02-27 04:24:05 +04:00
}
2015-07-29 21:31:07 +03:00
return 0 ;
fail :
if ( temp_path )
( void ) unlink ( temp_path ) ;
2014-02-27 04:24:05 +04:00
2015-07-29 21:31:07 +03:00
return log_error_errno ( r , " Failed to save lease data %s: %m " , lease_file ) ;
2014-02-27 04:24:05 +04:00
}
2015-08-26 21:48:21 +03:00
int dhcp_lease_load ( sd_dhcp_lease * * ret , const char * lease_file ) {
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
2014-02-27 04:24:05 +04:00
_cleanup_dhcp_lease_unref_ sd_dhcp_lease * lease = NULL ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
_cleanup_free_ char
* address = NULL ,
* router = NULL ,
* netmask = NULL ,
* server_address = NULL ,
* next_server = NULL ,
* broadcast = NULL ,
* dns = NULL ,
* ntp = NULL ,
* mtu = NULL ,
* routes = NULL ,
* client_id_hex = NULL ,
* vendor_specific_hex = NULL ,
* lifetime = NULL ,
* t1 = NULL ,
* t2 = NULL ,
* options [ DHCP_OPTION_PRIVATE_LAST - DHCP_OPTION_PRIVATE_BASE + 1 ] = { } ;
2015-08-01 06:18:51 +03:00
int r , i ;
2014-02-27 04:24:05 +04:00
assert ( lease_file ) ;
assert ( ret ) ;
r = dhcp_lease_new ( & lease ) ;
if ( r < 0 )
return r ;
r = parse_env_file ( lease_file , NEWLINE ,
" ADDRESS " , & address ,
" ROUTER " , & router ,
" NETMASK " , & netmask ,
2014-03-03 19:46:10 +04:00
" SERVER_IDENTIFIER " , & server_address ,
2014-03-03 20:13:59 +04:00
" NEXT_SERVER " , & next_server ,
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
" BROADCAST " , & broadcast ,
2014-04-29 15:29:12 +04:00
" DNS " , & dns ,
" NTP " , & ntp ,
2014-02-27 04:24:05 +04:00
" MTU " , & mtu ,
" DOMAINNAME " , & lease - > domainname ,
" HOSTNAME " , & lease - > hostname ,
2014-03-03 18:43:02 +04:00
" ROOT_PATH " , & lease - > root_path ,
2014-06-28 02:00:06 +04:00
" ROUTES " , & routes ,
2014-11-19 02:13:12 +03:00
" CLIENTID " , & client_id_hex ,
2015-08-26 20:19:32 +03:00
" TIMEZONE " , & lease - > timezone ,
2015-07-09 19:04:01 +03:00
" VENDOR_SPECIFIC " , & vendor_specific_hex ,
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
" LIFETIME " , & lifetime ,
" T1 " , & t1 ,
" T2 " , & t2 ,
2015-08-01 06:18:51 +03:00
" OPTION_224 " , & options [ 0 ] ,
" OPTION_225 " , & options [ 1 ] ,
" OPTION_226 " , & options [ 2 ] ,
" OPTION_227 " , & options [ 3 ] ,
" OPTION_228 " , & options [ 4 ] ,
" OPTION_229 " , & options [ 5 ] ,
" OPTION_230 " , & options [ 6 ] ,
" OPTION_231 " , & options [ 7 ] ,
" OPTION_232 " , & options [ 8 ] ,
" OPTION_233 " , & options [ 9 ] ,
" OPTION_234 " , & options [ 10 ] ,
" OPTION_235 " , & options [ 11 ] ,
" OPTION_236 " , & options [ 12 ] ,
" OPTION_237 " , & options [ 13 ] ,
" OPTION_238 " , & options [ 14 ] ,
" OPTION_239 " , & options [ 15 ] ,
" OPTION_240 " , & options [ 16 ] ,
" OPTION_241 " , & options [ 17 ] ,
" OPTION_242 " , & options [ 18 ] ,
" OPTION_243 " , & options [ 19 ] ,
" OPTION_244 " , & options [ 20 ] ,
" OPTION_245 " , & options [ 21 ] ,
" OPTION_246 " , & options [ 22 ] ,
" OPTION_247 " , & options [ 23 ] ,
" OPTION_248 " , & options [ 24 ] ,
" OPTION_249 " , & options [ 25 ] ,
" OPTION_250 " , & options [ 26 ] ,
" OPTION_251 " , & options [ 27 ] ,
" OPTION_252 " , & options [ 28 ] ,
" OPTION_253 " , & options [ 29 ] ,
" OPTION_254 " , & options [ 30 ] ,
2014-02-27 04:24:05 +04:00
NULL ) ;
if ( r < 0 )
return r ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( address ) {
r = inet_pton ( AF_INET , address , & lease - > address ) ;
if ( r < = 0 )
2015-11-05 15:44:10 +03:00
log_debug ( " Failed to parse address %s, ignoring. " , address ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
}
2014-02-27 04:24:05 +04:00
2014-04-30 00:40:38 +04:00
if ( router ) {
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = inet_pton ( AF_INET , router , & lease - > router ) ;
if ( r < = 0 )
2015-11-05 15:44:10 +03:00
log_debug ( " Failed to parse router %s, ignoring. " , router ) ;
2014-04-30 00:40:38 +04:00
}
2014-02-27 04:24:05 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( netmask ) {
r = inet_pton ( AF_INET , netmask , & lease - > subnet_mask ) ;
if ( r < = 0 )
2015-11-05 15:44:10 +03:00
log_debug ( " Failed to parse netmask %s, ignoring. " , netmask ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
else
lease - > have_subnet_mask = true ;
}
2014-02-27 04:24:05 +04:00
2014-03-03 19:46:10 +04:00
if ( server_address ) {
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = inet_pton ( AF_INET , server_address , & lease - > server_address ) ;
if ( r < = 0 )
2015-11-05 15:44:10 +03:00
log_debug ( " Failed to parse server address %s, ignoring. " , server_address ) ;
2014-03-03 19:46:10 +04:00
}
2014-03-03 20:13:59 +04:00
if ( next_server ) {
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = inet_pton ( AF_INET , next_server , & lease - > next_server ) ;
if ( r < = 0 )
2015-11-05 15:44:10 +03:00
log_debug ( " Failed to parse next server %s, ignoring. " , next_server ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
}
2014-03-03 20:13:59 +04:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( broadcast ) {
r = inet_pton ( AF_INET , broadcast , & lease - > broadcast ) ;
if ( r < = 0 )
2015-11-05 15:44:10 +03:00
log_debug ( " Failed to parse broadcast address %s, ignoring. " , broadcast ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
else
lease - > have_broadcast = true ;
2014-03-03 20:13:59 +04:00
}
2014-04-29 15:29:12 +04:00
if ( dns ) {
2014-07-17 03:39:46 +04:00
r = deserialize_in_addrs ( & lease - > dns , dns ) ;
2014-04-29 15:29:12 +04:00
if ( r < 0 )
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
log_debug_errno ( r , " Failed to deserialize DNS servers %s, ignoring: %m " , dns ) ;
else
lease - > dns_size = r ;
2014-04-29 15:29:12 +04:00
}
if ( ntp ) {
2014-07-17 03:39:46 +04:00
r = deserialize_in_addrs ( & lease - > ntp , ntp ) ;
2014-04-29 15:29:12 +04:00
if ( r < 0 )
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
log_debug_errno ( r , " Failed to deserialize NTP servers %s, ignoring: %m " , ntp ) ;
else
lease - > ntp_size = r ;
2014-04-29 15:29:12 +04:00
}
2014-02-27 04:24:05 +04:00
if ( mtu ) {
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = safe_atou16 ( mtu , & lease - > mtu ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse MTU %s, ignoring: %m " , mtu ) ;
2014-02-27 04:24:05 +04:00
}
2014-06-28 02:00:06 +04:00
if ( routes ) {
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
r = deserialize_dhcp_routes (
& lease - > static_route ,
& lease - > static_route_size ,
& lease - > static_route_allocated ,
routes ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse DHCP routes %s, ignoring: %m " , routes ) ;
}
if ( lifetime ) {
r = safe_atou32 ( lifetime , & lease - > lifetime ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse lifetime %s, ignoring: %m " , lifetime ) ;
}
if ( t1 ) {
r = safe_atou32 ( t1 , & lease - > t1 ) ;
if ( r < 0 )
log_debug_errno ( r , " Failed to parse T1 %s, ignoring: %m " , t1 ) ;
}
if ( t2 ) {
r = safe_atou32 ( t2 , & lease - > t2 ) ;
2014-06-28 02:00:06 +04:00
if ( r < 0 )
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
log_debug_errno ( r , " Failed to parse T2 %s, ignoring: %m " , t2 ) ;
2014-06-28 02:00:06 +04:00
}
2014-11-19 02:13:12 +03:00
if ( client_id_hex ) {
2015-08-01 07:48:47 +03:00
r = deserialize_dhcp_option ( & lease - > client_id , & lease - > client_id_len , client_id_hex ) ;
2015-07-11 20:14:52 +03:00
if ( r < 0 )
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
log_debug_errno ( r , " Failed to parse client ID %s, ignoring: %m " , client_id_hex ) ;
2014-11-19 02:13:12 +03:00
}
2015-07-09 19:04:01 +03:00
if ( vendor_specific_hex ) {
2015-08-01 07:48:47 +03:00
r = deserialize_dhcp_option ( & lease - > vendor_specific , & lease - > vendor_specific_len , vendor_specific_hex ) ;
2015-07-09 19:04:01 +03:00
if ( r < 0 )
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
log_debug_errno ( r , " Failed to parse vendor specific data %s, ignoring: %m " , vendor_specific_hex ) ;
2015-07-09 19:04:01 +03:00
}
2015-08-01 06:18:51 +03:00
for ( i = 0 ; i < = DHCP_OPTION_PRIVATE_LAST - DHCP_OPTION_PRIVATE_BASE ; i + + ) {
2015-08-27 00:05:34 +03:00
_cleanup_free_ void * data = NULL ;
2015-08-01 06:18:51 +03:00
size_t len ;
if ( ! options [ i ] )
continue ;
r = deserialize_dhcp_option ( & data , & len , options [ i ] ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( r < 0 ) {
log_debug_errno ( r , " Failed to parse private DHCP option %s, ignoring: %m " , options [ i ] ) ;
continue ;
}
2015-08-01 06:18:51 +03:00
r = dhcp_lease_insert_private_option ( lease , DHCP_OPTION_PRIVATE_BASE + i , data , len ) ;
2015-08-08 14:24:11 +03:00
if ( r < 0 )
2015-08-01 06:18:51 +03:00
return r ;
}
2014-02-27 04:24:05 +04:00
* ret = lease ;
lease = NULL ;
return 0 ;
}
2014-03-19 19:05:44 +04:00
int dhcp_lease_set_default_subnet_mask ( sd_dhcp_lease * lease ) {
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
struct in_addr address , mask ;
2014-10-27 19:38:03 +03:00
int r ;
2014-03-19 19:05:44 +04:00
assert ( lease ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( lease - > address = = 0 )
return - ENODATA ;
2014-10-27 19:38:03 +03:00
address . s_addr = lease - > address ;
2014-03-19 19:05:44 +04:00
/* fall back to the default subnet masks based on address class */
2014-10-27 19:38:03 +03:00
r = in_addr_default_subnet_mask ( & address , & mask ) ;
if ( r < 0 )
return r ;
2014-03-19 19:05:44 +04:00
2014-10-27 19:38:03 +03:00
lease - > subnet_mask = mask . s_addr ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
lease - > have_subnet_mask = true ;
2014-03-19 19:05:44 +04:00
return 0 ;
}
2014-11-19 02:13:12 +03:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
int sd_dhcp_lease_get_client_id ( sd_dhcp_lease * lease , const void * * client_id , size_t * client_id_len ) {
2014-11-19 02:13:12 +03:00
assert_return ( lease , - EINVAL ) ;
assert_return ( client_id , - EINVAL ) ;
assert_return ( client_id_len , - EINVAL ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
if ( ! lease - > client_id )
return - ENODATA ;
2014-11-19 02:13:12 +03:00
* client_id = lease - > client_id ;
* client_id_len = lease - > client_id_len ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
2014-11-19 02:13:12 +03:00
return 0 ;
}
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
int dhcp_lease_set_client_id ( sd_dhcp_lease * lease , const void * client_id , size_t client_id_len ) {
2014-11-19 02:13:12 +03:00
assert_return ( lease , - EINVAL ) ;
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
assert_return ( client_id | | client_id_len < = 0 , - EINVAL ) ;
if ( client_id_len < = 0 )
lease - > client_id = mfree ( lease - > client_id ) ;
else {
void * p ;
2014-11-19 02:13:12 +03:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
p = memdup ( client_id , client_id_len ) ;
if ( ! p )
return - ENOMEM ;
2014-11-19 02:13:12 +03:00
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
free ( lease - > client_id ) ;
lease - > client_id = p ;
2014-11-19 02:13:12 +03:00
lease - > client_id_len = client_id_len ;
}
return 0 ;
}
2015-08-26 20:19:32 +03:00
2015-08-30 04:18:33 +03:00
int sd_dhcp_lease_get_timezone ( sd_dhcp_lease * lease , const char * * tz ) {
2015-08-26 20:19:32 +03:00
assert_return ( lease , - EINVAL ) ;
2015-08-30 04:18:33 +03:00
assert_return ( tz , - EINVAL ) ;
2015-08-26 20:19:32 +03:00
if ( ! lease - > timezone )
dhcp: clean up dhcp4 lease object
a) drop handling of obsolete or unused DHCP options time_offset,
mtu_aging_timeout, policy filter, mdr, ttl, ip forwarding settings.
Should this become useful one day we can readd support for this.
b) For subnet mask and broadcast it is not always clear whether 0 or
255.255.255.255 might be valid, hence maintain a boolean indicating
validity next to it.
c) serialize/deserialize broadcast address, lifetime, T1 and T2 together
with the rest of the fields in dhcp_lease_save() and
dhcp_lease_load().
d) consistently return ENODATA from getter functions for data that is
missing in the lease.
e) add missing getter calls for broadcast, lifetime, T1, T2.
f) when decoding DHCP options, generate debug messages on parse
failures, but try to proceed if possible.
g) Similar, when deserializing a lease in dhcp_lease_load(), make sure
we deal nicely with unparsable fields, to provide upgrade compat.
h) fix some memory allocations
2015-08-27 02:05:13 +03:00
return - ENODATA ;
2015-08-26 20:19:32 +03:00
2015-08-30 04:18:33 +03:00
* tz = lease - > timezone ;
2015-08-26 20:19:32 +03:00
return 0 ;
}