return (ztype);
}
-isc_result_t
-named_config_getiplist(const cfg_obj_t *config, const cfg_obj_t *list,
- in_port_t defport, isc_mem_t *mctx,
- isc_sockaddr_t **addrsp, isc_dscp_t **dscpsp,
- uint32_t *countp) {
- int count, i = 0;
- const cfg_obj_t *addrlist;
- const cfg_obj_t *portobj, *dscpobj;
- const cfg_listelt_t *element;
- isc_sockaddr_t *addrs;
- in_port_t port;
- isc_dscp_t dscp = -1, *dscps = NULL;
- isc_result_t result;
-
- INSIST(addrsp != NULL && *addrsp == NULL);
- INSIST(dscpsp == NULL || *dscpsp == NULL);
- INSIST(countp != NULL);
-
- addrlist = cfg_tuple_get(list, "addresses");
- count = named_config_listcount(addrlist);
-
- portobj = cfg_tuple_get(list, "port");
- if (cfg_obj_isuint32(portobj)) {
- uint32_t val = cfg_obj_asuint32(portobj);
- if (val > UINT16_MAX) {
- cfg_obj_log(portobj, named_g_lctx, ISC_LOG_ERROR,
- "port '%u' out of range", val);
- return (ISC_R_RANGE);
- }
- port = (in_port_t)val;
- } else if (defport != 0) {
- port = defport;
- } else {
- result = named_config_getport(config, "port", &port);
- if (result != ISC_R_SUCCESS) {
- return (result);
- }
- }
-
- if (dscpsp != NULL) {
- dscpobj = cfg_tuple_get(list, "dscp");
- if (dscpobj != NULL && cfg_obj_isuint32(dscpobj)) {
- if (cfg_obj_asuint32(dscpobj) > 63) {
- cfg_obj_log(dscpobj, named_g_lctx,
- ISC_LOG_ERROR,
- "dscp value '%u' is out of range",
- cfg_obj_asuint32(dscpobj));
- return (ISC_R_RANGE);
- }
- dscp = (isc_dscp_t)cfg_obj_asuint32(dscpobj);
- }
-
- dscps = isc_mem_get(mctx, count * sizeof(isc_dscp_t));
- }
-
- addrs = isc_mem_get(mctx, count * sizeof(isc_sockaddr_t));
-
- for (element = cfg_list_first(addrlist); element != NULL;
- element = cfg_list_next(element), i++)
- {
- const cfg_obj_t *addr;
- INSIST(i < count);
- addr = cfg_listelt_value(element);
- addrs[i] = *cfg_obj_assockaddr(addr);
- if (dscpsp != NULL) {
- isc_dscp_t innerdscp;
- innerdscp = cfg_obj_getdscp(addr);
- if (innerdscp == -1) {
- innerdscp = dscp;
- }
- dscps[i] = innerdscp;
- }
- if (isc_sockaddr_getport(&addrs[i]) == 0) {
- isc_sockaddr_setport(&addrs[i], port);
- }
- }
- INSIST(i == count);
-
- *addrsp = addrs;
- *countp = count;
-
- if (dscpsp != NULL) {
- *dscpsp = dscps;
- }
-
- return (ISC_R_SUCCESS);
-}
-
-void
-named_config_putiplist(isc_mem_t *mctx, isc_sockaddr_t **addrsp,
- isc_dscp_t **dscpsp, uint32_t count) {
- INSIST(addrsp != NULL && *addrsp != NULL);
- INSIST(dscpsp == NULL || *dscpsp != NULL);
-
- isc_mem_put(mctx, *addrsp, count * sizeof(isc_sockaddr_t));
- *addrsp = NULL;
-
- if (dscpsp != NULL) {
- isc_mem_put(mctx, *dscpsp, count * sizeof(isc_dscp_t));
- *dscpsp = NULL;
- }
-}
-
static isc_result_t
getremotesdef(const cfg_obj_t *cctx, const char *list, const char *name,
const cfg_obj_t **ret) {
dns_zonetype_t
named_config_getzonetype(const cfg_obj_t *zonetypeobj);
-isc_result_t
-named_config_getiplist(const cfg_obj_t *config, const cfg_obj_t *list,
- in_port_t defport, isc_mem_t *mctx,
- isc_sockaddr_t **addrsp, isc_dscp_t **dscpsp,
- uint32_t *countp);
-
-void
-named_config_putiplist(isc_mem_t *mctx, isc_sockaddr_t **addrsp,
- isc_dscp_t **dscpsp, uint32_t count);
-
isc_result_t
named_config_getremotesdef(const cfg_obj_t *cctx, const char *list,
const char *name, const cfg_obj_t **ret);