Lines Matching refs:ddns_cb

160 typedef isc_result_t (*builder_func_t)(dhcp_ddns_cb_t *ddns_cb,
339 trace_ddns_input_write(dhcp_ddns_cb_t *ddns_cb, isc_result_t result)
347 memcpy(old_pointer, &ddns_cb, sizeof(ddns_cb));
567 dhcp_ddns_cb_t *ddns_cb;
570 ddns_cb = dmalloc(sizeof(*ddns_cb), file, line);
571 if (ddns_cb != NULL) {
572 ISC_LIST_INIT(ddns_cb->zone_server_list);
574 ISC_LINK_INIT(&ddns_cb->zone_addrs[i], link);
579 log_info("%s(%d): Allocating ddns_cb=%p", file, line, ddns_cb);
582 return(ddns_cb);
586 ddns_cb_free(dhcp_ddns_cb_t *ddns_cb, const char *file, int line)
589 log_info("%s(%d): freeing ddns_cb=%p", file, line, ddns_cb);
592 data_string_forget(&ddns_cb->fwd_name, file, line);
593 data_string_forget(&ddns_cb->rev_name, file, line);
594 data_string_forget(&ddns_cb->dhcid, file, line);
596 if (ddns_cb->zone != NULL) {
597 forget_zone((struct dns_zone **)&ddns_cb->zone);
601 if (ddns_cb->transaction != NULL) {
607 if (ddns_cb->fixed6_ia) {
612 dfree(ddns_cb, file, line);
616 ddns_cb_forget_zone(dhcp_ddns_cb_t *ddns_cb)
620 forget_zone(&ddns_cb->zone);
621 ddns_cb->zone_name[0] = 0;
622 ISC_LIST_INIT(ddns_cb->zone_server_list);
624 ISC_LINK_INIT(&ddns_cb->zone_addrs[i], link);
798 * find_zone_start(ddns_cb, direction)
802 * is in the ddns_cb as specified by the direction (forward or reverse).
1135 find_zone_start(dhcp_ddns_cb_t *ddns_cb, int direction)
1156 data_string_copy(&ns_cb->oname, &ddns_cb->fwd_name, MDL);
1158 data_string_copy(&ns_cb->oname, &ddns_cb->rev_name, MDL);
1205 find_cached_zone(dhcp_ddns_cb_t *ddns_cb, int direction)
1216 np = (const char *)ddns_cb->fwd_name.data;
1218 np = (const char *)ddns_cb->rev_name.data;
1253 if (strlen(zone->name) >= sizeof(ddns_cb->zone_name)) {
1257 strcpy((char *)&ddns_cb->zone_name[0], zone->name);
1271 isc_sockaddr_fromin(&ddns_cb->zone_addrs[ix],
1274 ISC_LIST_APPEND(ddns_cb->zone_server_list,
1275 &ddns_cb->zone_addrs[ix],
1293 isc_sockaddr_fromin6(&ddns_cb->zone_addrs[ix],
1296 ISC_LIST_APPEND(ddns_cb->zone_server_list,
1297 &ddns_cb->zone_addrs[ix],
1315 isc_sockaddr_fromin(&ddns_cb->zone_addrs[ix],
1318 ISC_LIST_APPEND(ddns_cb->zone_server_list,
1319 &ddns_cb->zone_addrs[ix],
1337 isc_sockaddr_fromin6(&ddns_cb->zone_addrs[ix],
1340 ISC_LIST_APPEND(ddns_cb->zone_server_list,
1341 &ddns_cb->zone_addrs[ix],
1350 dns_zone_reference(&ddns_cb->zone, zone, MDL);
1462 * mangles it into a dhcid string which it places in ddns_cb. It also
1463 * sets a field in ddns_cb to specify the class that should be used
1479 static int get_std_dhcid(dhcp_ddns_cb_t *ddns_cb,
1484 struct data_string *id = &ddns_cb->dhcid;
1501 if (MRns_name_pton((char *)ddns_cb->fwd_name.data, fwd_buf, 256) == -1)
1568 * mangles it into a dhcid string which it places in ddns_cb. It also
1569 * sets a field in ddns_cb to specify the class that should be used
1578 static int get_int_dhcid (dhcp_ddns_cb_t *ddns_cb,
1583 struct data_string *id = &ddns_cb->dhcid;
1661 int get_dhcid(dhcp_ddns_cb_t *ddns_cb,
1666 if (ddns_cb->dhcid_class == dns_rdatatype_dhcid)
1667 return get_std_dhcid(ddns_cb, type, identifier, id_len);
1669 return get_int_dhcid(ddns_cb, type, identifier, id_len);
1821 build_fwd_add1(dhcp_ddns_cb_t *ddns_cb,
1833 if ((ddns_cb->flags & DDNS_INCLUDE_RRSET) != 0) {
1836 ddns_cb->address_type,
1852 result = make_dns_dataset(dns_rdataclass_in, ddns_cb->address_type,
1854 (unsigned char *)ddns_cb->address.iabuf,
1855 ddns_cb->address.len, ddns_cb->ttl);
1863 result = make_dns_dataset(dns_rdataclass_in, ddns_cb->dhcid_class,
1865 (unsigned char *)ddns_cb->dhcid.data,
1866 ddns_cb->dhcid.len, ddns_cb->ttl);
1914 build_fwd_add2(dhcp_ddns_cb_t *ddns_cb,
1929 if (ddns_cb->flags & DDNS_CONFLICT_DETECTION) {
1940 if (ddns_cb->flags & DDNS_GUARD_ID_MUST_MATCH) {
1941 match_id = (unsigned char*)(ddns_cb->dhcid.data);
1942 match_id_len = ddns_cb->dhcid.len;
1947 ddns_cb->dhcid_class,
1959 ddns_cb->dhcid_class,
1969 ddns_cb->dhcid_class,
1971 (unsigned char *)ddns_cb->dhcid.data,
1972 ddns_cb->dhcid.len, ddns_cb->ttl);
1982 result = make_dns_dataset(dns_rdataclass_any, ddns_cb->address_type,
1991 result = make_dns_dataset(dns_rdataclass_in, ddns_cb->address_type,
1993 (unsigned char *)ddns_cb->address.iabuf,
1994 ddns_cb->address.len, ddns_cb->ttl);
2031 build_dsmm_fwd_add3(dhcp_ddns_cb_t *ddns_cb,
2044 ddns_cb->address_type,
2054 ddns_cb->dhcid_class,
2064 ddns_cb->other_dhcid_class,
2074 result = make_dns_dataset(dns_rdataclass_in, ddns_cb->address_type,
2076 (unsigned char *)ddns_cb->address.iabuf,
2077 ddns_cb->address.len, ddns_cb->ttl);
2085 result = make_dns_dataset(dns_rdataclass_in, ddns_cb->dhcid_class,
2087 (unsigned char *)ddns_cb->dhcid.data,
2088 ddns_cb->dhcid.len, ddns_cb->ttl);
2125 build_dsmm_fwd_add3_other(dhcp_ddns_cb_t *ddns_cb,
2142 if (ddns_cb->flags & DDNS_GUARD_ID_MUST_MATCH) {
2145 ddns_cb->dhcid_class,
2157 ddns_cb->other_dhcid_class,
2168 ddns_cb->address_type,
2177 result = make_dns_dataset(dns_rdataclass_in, ddns_cb->address_type,
2179 (unsigned char *)ddns_cb->address.iabuf,
2180 ddns_cb->address.len, ddns_cb->ttl);
2188 result = make_dns_dataset(dns_rdataclass_in, ddns_cb->dhcid_class,
2190 (unsigned char *)ddns_cb->dhcid.data,
2191 ddns_cb->dhcid.len, ddns_cb->ttl);
2218 build_fwd_rem1(dhcp_ddns_cb_t *ddns_cb,
2230 if (ddns_cb->flags & DDNS_CONFLICT_DETECTION) {
2241 if (ddns_cb->flags & DDNS_GUARD_ID_MUST_MATCH) {
2242 match_id = (unsigned char*)(ddns_cb->dhcid.data);
2243 match_id_len = ddns_cb->dhcid.len;
2248 ddns_cb->dhcid_class,
2260 result = make_dns_dataset(dns_rdataclass_none, ddns_cb->address_type,
2262 (unsigned char *)ddns_cb->address.iabuf,
2263 ddns_cb->address.len, 0);
2285 build_fwd_rem2(dhcp_ddns_cb_t *ddns_cb,
2323 if (ddns_cb->flags & DDNS_GUARD_ID_MUST_MATCH) {
2324 match_id = (unsigned char*)(ddns_cb->dhcid.data);
2325 match_id_len = ddns_cb->dhcid.len;
2329 result = make_dns_dataset(match_class, ddns_cb->dhcid_class,
2357 build_fwd_rem2_dsmm (dhcp_ddns_cb_t *ddns_cb,
2374 ddns_cb->address_type,
2387 if (ddns_cb->flags & DDNS_GUARD_ID_MUST_MATCH) {
2388 match_id = (unsigned char*)(ddns_cb->dhcid.data);
2389 match_id_len = ddns_cb->dhcid.len;
2393 result = make_dns_dataset(match_class, ddns_cb->dhcid_class,
2420 build_fwd_rem2_dsmm_other(dhcp_ddns_cb_t *ddns_cb,
2433 result = make_dns_dataset(dns_rdataclass_none, ddns_cb->dhcid_class,
2443 ddns_cb->other_dhcid_class,
2453 result = make_dns_dataset(dns_rdataclass_none, ddns_cb->address_type,
2455 (unsigned char *)ddns_cb->address.iabuf,
2456 ddns_cb->address.len, 0);
2473 dhcp_ddns_cb_t *ddns_cb = (dhcp_ddns_cb_t *)eventp->ev_arg;
2484 trace_ddns_input_write(ddns_cb, eresult);
2489 print_dns_status(DDNS_PRINT_INBOUND, ddns_cb, eresult);
2493 dns_client_destroyupdatetrans(&ddns_cb->transaction);
2498 ((ddns_cb->flags & DDNS_ABORT) != 0)) {
2502 ddns_cb, ddns_cb->flags, isc_result_totext(eresult));
2504 if ((ddns_cb->flags & DDNS_ABORT) == 0) {
2506 "cb=%p", ddns_cb);
2513 ddns_cb->cur_func(ddns_cb, eresult);
2517 if (ddns_cb->next_op != NULL) {
2519 ddns_cb_free(ddns_cb->next_op, MDL);
2521 ddns_cb_free(ddns_cb, MDL);
2532 ddns_cb->zone_name);
2533 repudiate_zone(&ddns_cb->zone);
2534 ddns_cb->zone_name[0] = 0;
2535 ISC_LIST_INIT(ddns_cb->zone_server_list);
2537 ISC_LINK_INIT(&ddns_cb->zone_addrs[i], link);
2540 if ((ddns_cb->state == DDNS_STATE_ADD_PTR) ||
2541 (ddns_cb->state == DDNS_STATE_REM_PTR)) {
2542 result = ddns_modify_ptr(ddns_cb, MDL);
2544 result = ddns_modify_fwd(ddns_cb, MDL);
2551 ddns_cb->cur_func(ddns_cb, result);
2556 ddns_cb->cur_func(ddns_cb, eresult);
2569 ddns_modify_fwd(dhcp_ddns_cb_t *ddns_cb, const char *file, int line)
2593 clientname = (unsigned char *)ddns_cb->fwd_name.data;
2596 if (ddns_cb->address.len == 4) {
2597 ddns_cb->address_type = dns_rdatatype_a;
2598 } else if (ddns_cb->address.len == 16) {
2599 ddns_cb->address_type = dns_rdatatype_aaaa;
2612 if (ddns_cb->zone == NULL) {
2613 result = find_cached_zone(ddns_cb, FIND_FORWARD);
2620 if (find_zone_start(ddns_cb, FIND_FORWARD)
2624 * queue the ddns_cb for processing after we
2643 if (ddns_cb->zone) {
2645 result = dhcp_isc_name(ddns_cb->zone_name, &zname0, &zname);
2649 ddns_cb->zone_name,
2654 if (!(ISC_LIST_EMPTY(ddns_cb->zone_server_list))) {
2656 zlist = &ddns_cb->zone_server_list;
2660 if (ddns_cb->zone->key != NULL) {
2667 tsec_key = ddns_cb->zone->key->tsec_key;
2670 ddns_cb->zone->key->name);
2696 switch(ddns_cb->state) {
2698 result = build_fwd_add1(ddns_cb, dataspace, pname, uname);
2706 result = build_fwd_add2(ddns_cb, dataspace, pname, uname);
2715 if (ddns_cb->flags & DDNS_CONFLICT_DETECTION) {
2724 if (ddns_cb->flags & DDNS_OTHER_GUARD_IS_DYNAMIC) {
2730 result = (*builder)(ddns_cb, dataspace, pname, uname);
2740 result = build_fwd_rem1(ddns_cb, dataspace, pname, uname);
2750 if (ddns_cb->flags & DDNS_DUAL_STACK_MIXED_MODE) {
2756 result = (*builder)(ddns_cb, dataspace, pname, uname);
2764 result = build_fwd_rem2_dsmm_other(ddns_cb, dataspace,
2773 log_error("ddns_modify_fwd: Invalid state: %d", ddns_cb->state);
2793 (void *)ddns_cb,
2794 &ddns_cb->transaction);
2801 print_dns_status(DDNS_PRINT_OUTBOUND, ddns_cb, result);
2808 file, line, isc_result_totext(result), ddns_cb);
2821 ddns_modify_ptr(dhcp_ddns_cb_t *ddns_cb, const char *file, int line)
2851 result = find_cached_zone(ddns_cb, FIND_REVERSE);
2859 if (find_zone_start(ddns_cb, FIND_REVERSE) == ISC_R_SUCCESS) {
2862 * queue the ddns_cb for processing after we
2877 !(ISC_LIST_EMPTY(ddns_cb->zone_server_list))) {
2879 result = dhcp_isc_name(ddns_cb->zone_name, &zname0, &zname);
2883 ddns_cb->zone_name,
2888 if (!(ISC_LIST_EMPTY(ddns_cb->zone_server_list))) {
2889 zlist = &ddns_cb->zone_server_list;
2898 if ((ddns_cb->zone != NULL) && (ddns_cb->zone->key != NULL)) {
2899 tsec_key = ddns_cb->zone->key->tsec_key;
2902 ddns_cb->zone->key->name);
2909 ptrname = (unsigned char *)ddns_cb->rev_name.data;
2948 if (ddns_cb->state == DDNS_STATE_ADD_PTR) {
2952 if (MRns_name_pton((char *)ddns_cb->fwd_name.data,
2965 buf, buflen, ddns_cb->ttl);
2987 ddns_interlude, (void *)ddns_cb,
2988 &ddns_cb->transaction);
2995 print_dns_status(DDNS_PRINT_OUTBOUND, ddns_cb, result);
3002 file, line, isc_result_totext(result), ddns_cb);
3014 ddns_cancel(dhcp_ddns_cb_t *ddns_cb, const char *file, int line) {
3015 ddns_cb->flags |= DDNS_ABORT;
3016 if (ddns_cb->transaction != NULL) {
3018 ddns_cb->transaction);
3020 ddns_cb->lease = NULL;
3024 file, line, ddns_cb);
3083 * ddns_cb is the control block associated with the message
3099 struct dhcp_ddns_cb *ddns_cb,
3111 ddns_cb->transaction, isc_result_totext(result));
3123 sprintf(s, "%s%p", en, ddns_cb->transaction);
3129 en = ddns_state_name(ddns_cb->state);
3131 switch (ddns_cb->state) {
3137 strcpy(ddns_address, piaddr(ddns_cb->address));
3139 ddns_cb->fwd_name.len + 7 < end) {
3141 ddns_cb->fwd_name.len,
3142 ddns_cb->fwd_name.data);
3151 if (s + strlen(en) + ddns_cb->fwd_name.len +
3152 ddns_cb->rev_name.len + 7 < end) {
3154 ddns_cb->fwd_name.len,
3155 ddns_cb->fwd_name.data,
3156 ddns_cb->rev_name.len,
3157 ddns_cb->rev_name.data);
3176 if (s + strlen(en) + strlen((char *)ddns_cb->zone_name) < end) {
3177 sprintf(s, "%s%s", en, ddns_cb->zone_name);
3184 if (ddns_cb->dhcid_class == dns_rdatatype_dhcid) {
3190 idbuf = buf_to_hex(ddns_cb->dhcid.data,
3191 ddns_cb->dhcid.len, MDL);
3206 int skip_length_byte = (ddns_cb->dhcid.len > 0 ? 1 : 0);
3209 (char *)ddns_cb->dhcid.data + skip_length_byte,
3210 ddns_cb->dhcid.len - skip_length_byte) ||
3218 sprintf(s, "%s%ld", en, ddns_cb->ttl);