You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.0 KiB
82 lines
2.0 KiB
9 years ago
|
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
|