1
0
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:
Yu Watanabe 2021-08-11 15:25:20 +09:00
parent bbd239f67a
commit cedf6a8da5
3 changed files with 12 additions and 12 deletions

View File

@ -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,

View File

@ -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);

View File

@ -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);