mirror of
https://github.com/systemd/systemd.git
synced 2025-03-31 14:50:15 +03:00
sd-dhcp-server: use hashmap_ensure_put()
This commit is contained in:
parent
bbd239f67a
commit
cedf6a8da5
@ -96,6 +96,8 @@ typedef struct DHCPRequest {
|
||||
const uint8_t *agent_info_option;
|
||||
} DHCPRequest;
|
||||
|
||||
extern const struct hash_ops dhcp_lease_hash_ops;
|
||||
|
||||
int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
|
||||
size_t length);
|
||||
int dhcp_server_send_packet(sd_dhcp_server *server,
|
||||
|
@ -48,7 +48,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
memcpy(lease->chaddr, chaddr, 16);
|
||||
pool_offset = get_pool_offset(server, lease->address);
|
||||
server->bound_leases[pool_offset] = lease;
|
||||
assert_se(hashmap_put(server->leases_by_client_id, &lease->client_id, lease) >= 0);
|
||||
assert_se(hashmap_ensure_put(&server->leases_by_client_id, &dhcp_lease_hash_ops, &lease->client_id, lease) >= 0);
|
||||
|
||||
(void) dhcp_server_handle_message(server, (DHCPMessage*)data, size);
|
||||
|
||||
|
@ -144,8 +144,13 @@ int client_id_compare_func(const DHCPClientId *a, const DHCPClientId *b) {
|
||||
return memcmp(a->data, b->data, a->length);
|
||||
}
|
||||
|
||||
DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(dhcp_lease_hash_ops, DHCPClientId, client_id_hash_func, client_id_compare_func,
|
||||
DHCPLease, dhcp_lease_free);
|
||||
DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
|
||||
dhcp_lease_hash_ops,
|
||||
DHCPClientId,
|
||||
client_id_hash_func,
|
||||
client_id_compare_func,
|
||||
DHCPLease,
|
||||
dhcp_lease_free);
|
||||
|
||||
static sd_dhcp_server *dhcp_server_free(sd_dhcp_server *server) {
|
||||
assert(server);
|
||||
@ -201,13 +206,6 @@ int sd_dhcp_server_new(sd_dhcp_server **ret, int ifindex) {
|
||||
.max_lease_time = DIV_ROUND_UP(DHCP_MAX_LEASE_TIME_USEC, USEC_PER_SEC),
|
||||
};
|
||||
|
||||
server->leases_by_client_id = hashmap_new(&dhcp_lease_hash_ops);
|
||||
if (!server->leases_by_client_id)
|
||||
return -ENOMEM;
|
||||
server->static_leases_by_client_id = hashmap_new(&dhcp_lease_hash_ops);
|
||||
if (!server->static_leases_by_client_id)
|
||||
return -ENOMEM;
|
||||
|
||||
*ret = TAKE_PTR(server);
|
||||
|
||||
return 0;
|
||||
@ -1025,7 +1023,7 @@ int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message, siz
|
||||
server->bound_leases[pool_offset] = lease;
|
||||
|
||||
old_lease = hashmap_remove(server->leases_by_client_id, &lease->client_id);
|
||||
r = hashmap_put(server->leases_by_client_id, &lease->client_id, lease);
|
||||
r = hashmap_ensure_put(&server->leases_by_client_id, &dhcp_lease_hash_ops, &lease->client_id, lease);
|
||||
if (r < 0)
|
||||
return log_dhcp_server_errno(server, r, "Could not save lease: %m");
|
||||
TAKE_PTR(lease);
|
||||
@ -1066,7 +1064,7 @@ int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message, siz
|
||||
log_dhcp_server(server, "ACK (0x%x)", be32toh(req->message->xid));
|
||||
|
||||
server->bound_leases[pool_offset] = lease;
|
||||
r = hashmap_put(server->leases_by_client_id, &lease->client_id, lease);
|
||||
r = hashmap_ensure_put(&server->leases_by_client_id, &dhcp_lease_hash_ops, &lease->client_id, lease);
|
||||
if (r < 0)
|
||||
return log_dhcp_server_errno(server, r, "Could not save lease: %m");
|
||||
TAKE_PTR(new_lease);
|
||||
|
Loading…
x
Reference in New Issue
Block a user