https://bugs.gentoo.org/559832 the get_client_id func is used outside of IPv6 code, so don't store it in the IPv6-specific dhcpv6.c file. otherwise, building w/out IPv6 & w/ldap yields: dhcpd-ldap.o: In function 'find_client_in_ldap': ldap.c:(.text+0x4774): undefined reference to 'get_client_id' --- a/server/dhcpleasequery.c +++ b/server/dhcpleasequery.c @@ -33,6 +33,34 @@ * DoS'ed by DHCPLEASEQUERY message. */ +/* + * Get the client identifier from the packet. + */ +isc_result_t +get_client_id(struct packet *packet, struct data_string *client_id) { + struct option_cache *oc; + + /* + * Verify our client_id structure is empty. + */ + if ((client_id->data != NULL) || (client_id->len != 0)) { + return DHCP_R_INVALIDARG; + } + + oc = lookup_option(&dhcpv6_universe, packet->options, D6O_CLIENTID); + if (oc == NULL) { + return ISC_R_NOTFOUND; + } + + if (!evaluate_option_cache(client_id, packet, NULL, NULL, + packet->options, NULL, + &global_scope, oc, MDL)) { + return ISC_R_FAILURE; + } + + return ISC_R_SUCCESS; +} + /* * If you query by hardware address or by client ID, then you may have * more than one IP address for your query argument. We need to do two --- a/server/dhcpv6.c +++ b/server/dhcpv6.c @@ -392,34 +392,6 @@ generate_new_server_duid(void) { } /* - * Get the client identifier from the packet. - */ -isc_result_t -get_client_id(struct packet *packet, struct data_string *client_id) { - struct option_cache *oc; - - /* - * Verify our client_id structure is empty. - */ - if ((client_id->data != NULL) || (client_id->len != 0)) { - return DHCP_R_INVALIDARG; - } - - oc = lookup_option(&dhcpv6_universe, packet->options, D6O_CLIENTID); - if (oc == NULL) { - return ISC_R_NOTFOUND; - } - - if (!evaluate_option_cache(client_id, packet, NULL, NULL, - packet->options, NULL, - &global_scope, oc, MDL)) { - return ISC_R_FAILURE; - } - - return ISC_R_SUCCESS; -} - -/* * Message validation, defined in RFC 3315, sections 15.2, 15.5, 15.7: * * Servers MUST discard any Solicit messages that do not include a