mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-09-04 08:15:14 +00:00
Modify the routine that constructs DNS names to convert relative names to
absolute names (add trailing dot) to keep the dns library happy. Ticket 21054
This commit is contained in:
6
RELNOTES
6
RELNOTES
@@ -39,12 +39,16 @@ The system has only been tested on Linux, FreeBSD, and Solaris, and may not
|
|||||||
work on other platforms. Please report any problems and suggested fixes to
|
work on other platforms. Please report any problems and suggested fixes to
|
||||||
<dhcp-users@isc.org>.
|
<dhcp-users@isc.org>.
|
||||||
|
|
||||||
|
|
||||||
Changes since 4.2.0a2
|
Changes since 4.2.0a2
|
||||||
|
|
||||||
- Update the fsync code to work with the changes to the DDNS code. It now
|
- Update the fsync code to work with the changes to the DDNS code. It now
|
||||||
uses a timer instead of noticing if there are no more packets to process.
|
uses a timer instead of noticing if there are no more packets to process.
|
||||||
|
|
||||||
|
- When constructing the DNS name structure from a text string append
|
||||||
|
the root to relative names. This satisfies a requirement in the DNS
|
||||||
|
library that names be absolute instead of relative and prevents DHCP
|
||||||
|
from crashing. Bug ticket 21054.
|
||||||
|
|
||||||
Changes since 4.2.0a1
|
Changes since 4.2.0a1
|
||||||
|
|
||||||
- When using 'ignore client-updates;', the FQDN returned to the client
|
- When using 'ignore client-updates;', the FQDN returned to the client
|
||||||
|
@@ -157,7 +157,15 @@ dhcp_context_create(void) {
|
|||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert a string name into the proper structure for the isc routines */
|
/*
|
||||||
|
* Convert a string name into the proper structure for the isc routines
|
||||||
|
*
|
||||||
|
* Previously we allowed names without a trailing '.' however the current
|
||||||
|
* dns and dst code requires the names to end in a period. If the
|
||||||
|
* name doesn't have a trailing period add one as part of creating
|
||||||
|
* the dns name.
|
||||||
|
*/
|
||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
dhcp_isc_name(unsigned char *namestr,
|
dhcp_isc_name(unsigned char *namestr,
|
||||||
dns_fixedname_t *namefix,
|
dns_fixedname_t *namefix,
|
||||||
@@ -172,7 +180,7 @@ dhcp_isc_name(unsigned char *namestr,
|
|||||||
isc_buffer_add(&b, namelen);
|
isc_buffer_add(&b, namelen);
|
||||||
dns_fixedname_init(namefix);
|
dns_fixedname_init(namefix);
|
||||||
*name = dns_fixedname_name(namefix);
|
*name = dns_fixedname_name(namefix);
|
||||||
result = dns_name_fromtext(*name, &b, NULL, 0, NULL);
|
result = dns_name_fromtext(*name, &b, dns_rootname, 0, NULL);
|
||||||
isc_buffer_invalidate(&b);
|
isc_buffer_invalidate(&b);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
@@ -188,7 +196,6 @@ isclib_make_dst_key(char *inname,
|
|||||||
dns_name_t *name;
|
dns_name_t *name;
|
||||||
dns_fixedname_t name0;
|
dns_fixedname_t name0;
|
||||||
isc_buffer_t b;
|
isc_buffer_t b;
|
||||||
int namelen;
|
|
||||||
|
|
||||||
isc_buffer_init(&b, secret, length);
|
isc_buffer_init(&b, secret, length);
|
||||||
isc_buffer_add(&b, length);
|
isc_buffer_add(&b, length);
|
||||||
@@ -198,29 +205,7 @@ isclib_make_dst_key(char *inname,
|
|||||||
return(DHCP_R_INVALIDARG);
|
return(DHCP_R_INVALIDARG);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
result = dhcp_isc_name((unsigned char *)inname, &name0, &name);
|
||||||
* Previously we allowed key names without a trailing '.'
|
|
||||||
* however the current dst code requires the names to end
|
|
||||||
* in a period. If the name doesn't have a trailing period
|
|
||||||
* add one before sending it to the dst code.
|
|
||||||
*/
|
|
||||||
namelen = strlen(inname);
|
|
||||||
if (inname[namelen-1] != '.') {
|
|
||||||
char *newname = NULL;
|
|
||||||
newname = (char *)dmalloc(namelen + 2, MDL);
|
|
||||||
if (newname == NULL) {
|
|
||||||
log_error("unable to allocate memory for key name");
|
|
||||||
return(ISC_R_NOMEMORY);
|
|
||||||
}
|
|
||||||
strcpy(newname, inname);
|
|
||||||
newname[namelen] = '.';
|
|
||||||
newname[namelen+1] = 0;
|
|
||||||
result = dhcp_isc_name((unsigned char *)newname, &name0, &name);
|
|
||||||
dfree(newname, MDL);
|
|
||||||
} else {
|
|
||||||
result = dhcp_isc_name((unsigned char *)inname, &name0, &name);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user