sd-dhcp-server: add api to get address from hostname, based on lease data

This commit is contained in:
Lennart Poettering
2025-10-13 11:25:50 +02:00
parent 3cd929f837
commit 4408db6908
2 changed files with 37 additions and 0 deletions

View File

@@ -1711,3 +1711,38 @@ int sd_dhcp_server_set_lease_file(sd_dhcp_server *server, int dir_fd, const char
return 0;
}
static int find_lease_address(Hashmap *h, const char *name, struct in_addr *ret) {
int r;
assert(name);
sd_dhcp_server_lease *lease;
HASHMAP_FOREACH(lease, h) {
if (!lease->hostname)
continue;
r = dns_name_equal(lease->hostname, name);
if (r <= 0)
continue;
if (ret)
ret->s_addr = lease->address;
return 1;
}
return -ENOENT;
}
int sd_dhcp_server_get_lease_address_by_name(sd_dhcp_server *server, const char *name, struct in_addr *ret) {
int r;
assert_return(server, -EINVAL);
assert_return(dns_name_is_valid(name), -EINVAL);
r = find_lease_address(server->static_leases_by_address, name, ret);
if (r != -ENOENT)
return r;
return find_lease_address(server->bound_leases_by_address, name, ret);
}

View File

@@ -98,6 +98,8 @@ int sd_dhcp_server_is_in_relay_mode(sd_dhcp_server *server);
int sd_dhcp_server_set_relay_target(sd_dhcp_server *server, const struct in_addr* address);
int sd_dhcp_server_set_relay_agent_information(sd_dhcp_server *server, const char* circuit_id, const char* remote_id);
int sd_dhcp_server_get_lease_address_by_name(sd_dhcp_server *server, const char *name, struct in_addr *ret);
_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_dhcp_server, sd_dhcp_server_unref);
_SD_END_DECLARATIONS;