sd-dhcp-lease: use sd_dhcp_client_id
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
#include "sd-dhcp-client.h"
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "dhcp-client-id-internal.h"
|
||||
#include "dhcp-option.h"
|
||||
#include "list.h"
|
||||
#include "time-util.h"
|
||||
@@ -67,8 +68,7 @@ struct sd_dhcp_lease {
|
||||
char *root_path;
|
||||
char *captive_portal;
|
||||
|
||||
void *client_id;
|
||||
size_t client_id_len;
|
||||
sd_dhcp_client_id client_id;
|
||||
|
||||
void *vendor_specific;
|
||||
size_t vendor_specific_len;
|
||||
@@ -92,7 +92,7 @@ int dhcp_lease_insert_private_option(sd_dhcp_lease *lease, uint8_t tag, const vo
|
||||
|
||||
void dhcp_lease_set_timestamp(sd_dhcp_lease *lease, const triple_timestamp *timestamp);
|
||||
int dhcp_lease_set_default_subnet_mask(sd_dhcp_lease *lease);
|
||||
int dhcp_lease_set_client_id(sd_dhcp_lease *lease, const void *client_id, size_t client_id_len);
|
||||
int dhcp_lease_set_client_id(sd_dhcp_lease *lease, const sd_dhcp_client_id *client_id);
|
||||
|
||||
#define dhcp_lease_unref_and_replace(a, b) \
|
||||
unref_and_replace_full(a, b, sd_dhcp_lease_ref, sd_dhcp_lease_unref)
|
||||
|
||||
@@ -1436,9 +1436,7 @@ static int client_parse_message(
|
||||
return r;
|
||||
|
||||
if (sd_dhcp_client_id_is_set(&client->client_id)) {
|
||||
r = dhcp_lease_set_client_id(lease,
|
||||
client->client_id.raw,
|
||||
client->client_id.size);
|
||||
r = dhcp_lease_set_client_id(lease, &client->client_id);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -420,7 +420,6 @@ static sd_dhcp_lease *dhcp_lease_free(sd_dhcp_lease *lease) {
|
||||
|
||||
free(lease->static_routes);
|
||||
free(lease->classless_routes);
|
||||
free(lease->client_id);
|
||||
free(lease->vendor_specific);
|
||||
strv_free(lease->search_domains);
|
||||
free(lease->sixrd_br_addresses);
|
||||
@@ -1066,8 +1065,8 @@ int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) {
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
struct in_addr address;
|
||||
const struct in_addr *addresses;
|
||||
const void *client_id, *data;
|
||||
size_t client_id_len, data_len;
|
||||
const void *data;
|
||||
size_t data_len;
|
||||
const char *string;
|
||||
uint16_t mtu;
|
||||
_cleanup_free_ sd_dhcp_route **routes = NULL;
|
||||
@@ -1183,11 +1182,10 @@ int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) {
|
||||
if (r >= 0)
|
||||
fprintf(f, "TIMEZONE=%s\n", string);
|
||||
|
||||
r = sd_dhcp_lease_get_client_id(lease, &client_id, &client_id_len);
|
||||
if (r >= 0) {
|
||||
if (sd_dhcp_client_id_is_set(&lease->client_id)) {
|
||||
_cleanup_free_ char *client_id_hex = NULL;
|
||||
|
||||
client_id_hex = hexmem(client_id, client_id_len);
|
||||
client_id_hex = hexmem(lease->client_id.raw, lease->client_id.size);
|
||||
if (!client_id_hex)
|
||||
return -ENOMEM;
|
||||
fprintf(f, "CLIENTID=%s\n", client_id_hex);
|
||||
@@ -1478,9 +1476,16 @@ int dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file) {
|
||||
}
|
||||
|
||||
if (client_id_hex) {
|
||||
r = unhexmem(client_id_hex, SIZE_MAX, &lease->client_id, &lease->client_id_len);
|
||||
_cleanup_free_ void *data = NULL;
|
||||
size_t data_size;
|
||||
|
||||
r = unhexmem(client_id_hex, SIZE_MAX, &data, &data_size);
|
||||
if (r < 0)
|
||||
log_debug_errno(r, "Failed to parse client ID %s, ignoring: %m", client_id_hex);
|
||||
|
||||
r = sd_dhcp_client_id_set_raw(&lease->client_id, data, data_size);
|
||||
if (r < 0)
|
||||
log_debug_errno(r, "Failed to assign client ID, ignoring: %m");
|
||||
}
|
||||
|
||||
if (vendor_specific_hex) {
|
||||
@@ -1537,36 +1542,25 @@ int dhcp_lease_set_default_subnet_mask(sd_dhcp_lease *lease) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sd_dhcp_lease_get_client_id(sd_dhcp_lease *lease, const void **client_id, size_t *client_id_len) {
|
||||
int sd_dhcp_lease_get_client_id(sd_dhcp_lease *lease, const sd_dhcp_client_id **ret) {
|
||||
assert_return(lease, -EINVAL);
|
||||
assert_return(client_id, -EINVAL);
|
||||
assert_return(client_id_len, -EINVAL);
|
||||
assert_return(ret, -EINVAL);
|
||||
|
||||
if (!lease->client_id)
|
||||
if (!sd_dhcp_client_id_is_set(&lease->client_id))
|
||||
return -ENODATA;
|
||||
|
||||
*client_id = lease->client_id;
|
||||
*client_id_len = lease->client_id_len;
|
||||
*ret = &lease->client_id;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dhcp_lease_set_client_id(sd_dhcp_lease *lease, const void *client_id, size_t client_id_len) {
|
||||
int dhcp_lease_set_client_id(sd_dhcp_lease *lease, const sd_dhcp_client_id *client_id) {
|
||||
assert_return(lease, -EINVAL);
|
||||
assert_return(client_id || client_id_len <= 0, -EINVAL);
|
||||
|
||||
if (client_id_len <= 0)
|
||||
lease->client_id = mfree(lease->client_id);
|
||||
else {
|
||||
void *p;
|
||||
if (!sd_dhcp_client_id_is_set(client_id))
|
||||
return sd_dhcp_client_id_clear(&lease->client_id);
|
||||
|
||||
p = memdup(client_id, client_id_len);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
|
||||
free_and_replace(lease->client_id, p);
|
||||
lease->client_id_len = client_id_len;
|
||||
}
|
||||
lease->client_id = *client_id;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2271,8 +2271,7 @@ static int link_status_one(
|
||||
}
|
||||
|
||||
if (lease) {
|
||||
const void *client_id;
|
||||
size_t client_id_len;
|
||||
const sd_dhcp_client_id *client_id;
|
||||
const char *tz;
|
||||
|
||||
r = sd_dhcp_lease_get_timezone(lease, &tz);
|
||||
@@ -2284,11 +2283,11 @@ static int link_status_one(
|
||||
return table_log_add_error(r);
|
||||
}
|
||||
|
||||
r = sd_dhcp_lease_get_client_id(lease, &client_id, &client_id_len);
|
||||
r = sd_dhcp_lease_get_client_id(lease, &client_id);
|
||||
if (r >= 0) {
|
||||
_cleanup_free_ char *id = NULL;
|
||||
|
||||
r = sd_dhcp_client_id_to_string_from_raw(client_id, client_id_len, &id);
|
||||
r = sd_dhcp_client_id_to_string(client_id, &id);
|
||||
if (r >= 0) {
|
||||
r = table_add_many(table,
|
||||
TABLE_FIELD, "DHCP4 Client ID",
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
#include <netinet/in.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "sd-dhcp-client-id.h"
|
||||
|
||||
#include "_sd-common.h"
|
||||
|
||||
_SD_BEGIN_DECLARATIONS;
|
||||
@@ -76,7 +78,7 @@ int sd_dhcp_lease_get_captive_portal(sd_dhcp_lease *lease, const char **captive_
|
||||
int sd_dhcp_lease_get_static_routes(sd_dhcp_lease *lease, sd_dhcp_route ***ret);
|
||||
int sd_dhcp_lease_get_classless_routes(sd_dhcp_lease *lease, sd_dhcp_route ***ret);
|
||||
int sd_dhcp_lease_get_vendor_specific(sd_dhcp_lease *lease, const void **data, size_t *data_len);
|
||||
int sd_dhcp_lease_get_client_id(sd_dhcp_lease *lease, const void **client_id, size_t *client_id_len);
|
||||
int sd_dhcp_lease_get_client_id(sd_dhcp_lease *lease, const sd_dhcp_client_id **ret);
|
||||
int sd_dhcp_lease_get_timezone(sd_dhcp_lease *lease, const char **timezone);
|
||||
int sd_dhcp_lease_get_6rd(
|
||||
sd_dhcp_lease *lease,
|
||||
|
||||
Reference in New Issue
Block a user