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.
70 lines
2.1 KiB
70 lines
2.1 KiB
--- a/common/dns.c |
|
+++ a/common/dns.c |
|
@@ -1381,6 +1381,24 @@ void ddns_interlude(isc_task_t *taskp, |
|
} |
|
|
|
/* |
|
+ * Moved here from omapip/isclib.c, function dhcp_context_create. |
|
+ * Create dnsclient only before the first use. |
|
+ */ |
|
+static isc_result_t |
|
+dns_client_lazy() { |
|
+ if (dhcp_gbl_ctx.dnsclient == NULL) |
|
+ return dns_client_createx(dhcp_gbl_ctx.mctx, |
|
+ dhcp_gbl_ctx.actx, |
|
+ dhcp_gbl_ctx.taskmgr, |
|
+ dhcp_gbl_ctx.socketmgr, |
|
+ dhcp_gbl_ctx.timermgr, |
|
+ 0, |
|
+ &dhcp_gbl_ctx.dnsclient); |
|
+ else |
|
+ return ISC_R_SUCCESS; |
|
+} |
|
+ |
|
+/* |
|
* This routine does the generic work for sending a ddns message to |
|
* modify the forward record (A or AAAA) and calls one of a set of |
|
* routines to build the specific message. |
|
@@ -1403,6 +1421,10 @@ ddns_modify_fwd(dhcp_ddns_cb_t *ddns_cb, const char *file, int line) |
|
/* Get a pointer to the clientname to make things easier. */ |
|
clientname = (unsigned char *)ddns_cb->fwd_name.data; |
|
|
|
+ result = dns_client_lazy(); |
|
+ if (result != ISC_R_SUCCESS) |
|
+ return result; |
|
+ |
|
/* Extract and validate the type of the address. */ |
|
if (ddns_cb->address.len == 4) { |
|
ddns_cb->address_type = dns_rdatatype_a; |
|
@@ -1586,6 +1608,10 @@ ddns_modify_ptr(dhcp_ddns_cb_t *ddns_cb, const char *file, int line) |
|
unsigned char buf[256]; |
|
int buflen; |
|
|
|
+ result = dns_client_lazy(); |
|
+ if (result != ISC_R_SUCCESS) |
|
+ return result; |
|
+ |
|
/* |
|
* Try to lookup the zone in the zone cache. As with the forward |
|
* case it's okay if we don't have one, the DNS code will try to |
|
--- a/omapip/isclib.c |
|
+++ a/omapip/isclib.c |
|
@@ -130,17 +130,7 @@ dhcp_context_create(void) { |
|
if (result != ISC_R_SUCCESS) |
|
goto cleanup; |
|
|
|
-#if defined (NSUPDATE) |
|
- result = dns_client_createx(dhcp_gbl_ctx.mctx, |
|
- dhcp_gbl_ctx.actx, |
|
- dhcp_gbl_ctx.taskmgr, |
|
- dhcp_gbl_ctx.socketmgr, |
|
- dhcp_gbl_ctx.timermgr, |
|
- 0, |
|
- &dhcp_gbl_ctx.dnsclient); |
|
- if (result != ISC_R_SUCCESS) |
|
- goto cleanup; |
|
-#else |
|
+#if !defined (NSUPDATE) |
|
/* The dst library is inited as part of dns_lib_init, we don't |
|
* need it if NSUPDATE is enabled */ |
|
result = dst_lib_init(dhcp_gbl_ctx.mctx, NULL, 0);
|
|
|