2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-31 06:25:31 +00:00

Added new listen-on-v6 config file statement.

Consider it a config file error if a listen-on statement has an IPv6
address in it, or a listen-on-v6 statement has an IPv4 address in it.
This commit is contained in:
James Brister
2000-06-05 22:08:50 +00:00
parent abf2e095fb
commit c78dc8b001
9 changed files with 455 additions and 137 deletions

View File

@@ -1,3 +1,9 @@
236. [func] Added new listen-on-v6 config file statement.
235. [func] Consider it a config file error if a listen-on
statement has an IPv6 address in it, or a
listen-on-v6 statement has an IPv4 address in it.
234. [bug] Allow a trusted-key's first field (domain-name) be
either a quoted or an unquoted string, instead of
requiring a quoted string.

View File

@@ -97,7 +97,7 @@ options {
listen-on {
10/24;
10.0.0.3; 1:2:3:4:5:6:7:8;
10.0.0.3;
};
listen-on port 53 { any; };
@@ -109,6 +109,15 @@ options {
1.2.3/24;
};
listen-on-v6 {
1:1:1:1:1:1:1:1;
10.0.0.1;
};
listen-on-v6 port 777 {
2:2:2:2:2:2:2:2;
};
query-source-v6 address 8:7:6:5:4:3:2:1 port *;
query-source port * address 10.0.0.54 ;

View File

@@ -15,7 +15,7 @@
* SOFTWARE.
*/
/* $Id: confctx.c,v 1.61 2000/06/05 09:17:05 brister Exp $ */
/* $Id: confctx.c,v 1.62 2000/06/05 22:08:43 brister Exp $ */
#include <config.h>
@@ -228,6 +228,7 @@ dns_c_checkconfig(dns_c_ctx_t *cfg)
isc_result_t result = ISC_R_SUCCESS;
isc_result_t tmpres;
dns_c_rrsolist_t *olist;
dns_c_lstnlist_t *listenlist;
if (dns_c_ctx_getnamedxfer(cfg, &cpval) != ISC_R_NOTFOUND) {
@@ -492,7 +493,21 @@ dns_c_checkconfig(dns_c_ctx_t *cfg)
result = tmpres;
}
}
if (dns_c_ctx_getlistenlist(cfg, &listenlist) != ISC_R_NOTFOUND) {
tmpres = dns_c_lstnlist_validate(listenlist);
if (tmpres != ISC_R_SUCCESS) {
result = tmpres;
}
}
if (dns_c_ctx_getv6listenlist(cfg, &listenlist) != ISC_R_NOTFOUND) {
tmpres = dns_c_lstnlistv6_validate(listenlist);
if (tmpres != ISC_R_SUCCESS) {
result = tmpres;
}
}
return (result);
}
@@ -1001,6 +1016,12 @@ dns_c_ctx_optionsprint(FILE *fp, int indent, dns_c_options_t *options)
defport);
}
if (options->v6listens != NULL) {
dns_c_lstnlistv6_print(fp, indent + 1,
options->v6listens,
defport);
}
dns_c_ctx_forwarderprint(fp, indent + 1, options);
if (options->ordering != NULL) {
@@ -1471,6 +1492,8 @@ dns_c_ctx_optionsnew(isc_mem_t *mem, dns_c_options_t **options)
opts->allowupdateforwarding = NULL;
opts->listens = NULL;
opts->v6listens = NULL;
opts->ordering = NULL;
opts->forwarders = NULL;
@@ -1611,6 +1634,12 @@ dns_c_ctx_optionsdelete(dns_c_options_t **opts)
result = r;
}
if (options->v6listens != NULL) {
r = dns_c_lstnlist_delete(&options->v6listens);
if (r != ISC_R_SUCCESS)
result = r;
}
if (options->ordering != NULL) {
r = dns_c_rrsolist_delete(&options->ordering);
if (r != ISC_R_SUCCESS)
@@ -2249,59 +2278,6 @@ dns_c_ctx_setrrsetorderlist(dns_c_ctx_t *cfg, isc_boolean_t copy,
}
isc_result_t
dns_c_ctx_addlisten_on(dns_c_ctx_t *cfg,int port, dns_c_ipmatchlist_t *ml,
isc_boolean_t copy)
{
dns_c_lstnon_t *lo;
isc_result_t res;
dns_c_options_t *opts;
REQUIRE(DNS_C_CONFCTX_VALID(cfg));
REQUIRE(port >= 0 && port <= 65535);
res = make_options(cfg);
if (res != ISC_R_SUCCESS) {
return (res);
}
opts = cfg->options;
if (opts->listens == NULL) {
res = dns_c_lstnlist_new(cfg->mem, &opts->listens);
if (res != ISC_R_SUCCESS) {
return (res);
}
}
#if 0
lo = ISC_LIST_HEAD(opts->listens->elements);
while (lo != NULL) {
/* XXX we should probably check that a listen on statement
* hasn't been done for the same post, ipmatch list
* combination
*/
if (lo->port == port) { /* XXX incomplete */
return (ISC_R_FAILURE);
}
lo = ISC_LIST_NEXT(lo, next);
}
#endif
res = dns_c_lstnon_new(cfg->mem, &lo);
if (res != ISC_R_SUCCESS) {
return (res);
}
lo->port = port;
res = dns_c_lstnon_setiml(lo, ml, copy);
ISC_LIST_APPEND(opts->listens->elements, lo, next);
return (res);
}
isc_result_t
dns_c_ctx_settrustedkeys(dns_c_ctx_t *cfg, dns_c_tkeylist_t *list,
isc_boolean_t copy)
@@ -2388,6 +2364,60 @@ dns_c_ctx_gettkeydhkey(dns_c_ctx_t *cfg,
isc_result_t
dns_c_ctx_addlisten_on(dns_c_ctx_t *cfg, in_port_t port,
dns_c_ipmatchlist_t *ml,
isc_boolean_t copy)
{
dns_c_lstnon_t *lo;
isc_result_t res;
dns_c_options_t *opts;
REQUIRE(DNS_C_CONFCTX_VALID(cfg));
res = make_options(cfg);
if (res != ISC_R_SUCCESS) {
return (res);
}
opts = cfg->options;
if (opts->listens == NULL) {
res = dns_c_lstnlist_new(cfg->mem, &opts->listens);
if (res != ISC_R_SUCCESS) {
return (res);
}
}
#if 0
lo = ISC_LIST_HEAD(opts->listens->elements);
while (lo != NULL) {
/* XXX we should probably check that a listen on statement
* hasn't been done for the same post, ipmatch list
* combination
*/
if (lo->port == port) { /* XXX incomplete */
return (ISC_R_FAILURE);
}
lo = ISC_LIST_NEXT(lo, next);
}
#endif
res = dns_c_lstnon_new(cfg->mem, &lo);
if (res != ISC_R_SUCCESS) {
return (res);
}
lo->port = port;
res = dns_c_lstnon_setiml(lo, ml, copy);
ISC_LIST_APPEND(opts->listens->elements, lo, next);
return (res);
}
isc_result_t
dns_c_ctx_getlistenlist(dns_c_ctx_t *cfg, dns_c_lstnlist_t **ll)
{
@@ -2410,6 +2440,85 @@ dns_c_ctx_getlistenlist(dns_c_ctx_t *cfg, dns_c_lstnlist_t **ll)
isc_result_t
dns_c_ctx_addv6listen_on(dns_c_ctx_t *cfg, in_port_t port,
dns_c_ipmatchlist_t *ml, isc_boolean_t copy)
{
dns_c_lstnon_t *lo;
isc_result_t res;
dns_c_options_t *opts;
REQUIRE(DNS_C_CONFCTX_VALID(cfg));
res = make_options(cfg);
if (res != ISC_R_SUCCESS) {
return (res);
}
opts = cfg->options;
if (opts->v6listens == NULL) {
res = dns_c_lstnlist_new(cfg->mem, &opts->v6listens);
if (res != ISC_R_SUCCESS) {
return (res);
}
}
#if 0
lo = ISC_LIST_HEAD(opts->v6listens->elements);
while (lo != NULL) {
/* XXX we should probably check that a listen on statement
* hasn't been done for the same post, ipmatch list
* combination
*/
if (lo->port == port) { /* XXX incomplete */
return (ISC_R_FAILURE);
}
lo = ISC_LIST_NEXT(lo, next);
}
#endif
res = dns_c_lstnon_new(cfg->mem, &lo);
if (res != ISC_R_SUCCESS) {
return (res);
}
lo->port = port;
res = dns_c_lstnon_setiml(lo, ml, copy);
ISC_LIST_APPEND(opts->v6listens->elements, lo, next);
return (res);
}
isc_result_t
dns_c_ctx_getv6listenlist(dns_c_ctx_t *cfg, dns_c_lstnlist_t **ll)
{
REQUIRE(DNS_C_CONFCTX_VALID(cfg));
if (cfg->options == NULL) {
return (ISC_R_NOTFOUND);
}
REQUIRE(ll != NULL);
*ll = NULL;
if (cfg->options->v6listens != NULL) {
*ll = cfg->options->v6listens;
}
return (*ll == NULL ? ISC_R_NOTFOUND : ISC_R_SUCCESS);
}
isc_result_t
dns_c_ctx_setforwarders(dns_c_ctx_t *cfg, isc_boolean_t copy,
dns_c_iplist_t *ipl)

View File

@@ -15,7 +15,7 @@
* SOFTWARE.
*/
/* $Id: confip.c,v 1.24 2000/05/08 14:35:27 tale Exp $ */
/* $Id: confip.c,v 1.25 2000/06/05 22:08:44 brister Exp $ */
#include <config.h>
@@ -730,6 +730,41 @@ dns_c_ipmatchlist_print(FILE *fp, int indent, dns_c_ipmatchlist_t *ml) {
return (ISC_R_SUCCESS);
}
isc_boolean_t
dns_c_ipmatchlist_walk(dns_c_ipmatchlist_t *list, dns_c_ipmlwalker func)
{
isc_boolean_t retval = ISC_TRUE;
dns_c_ipmatchelement_t *ipme ;
REQUIRE(DNS_C_IPMLIST_VALID(list));
ipme = ISC_LIST_HEAD(list->elements);
while (retval == ISC_TRUE && ipme != NULL) {
switch (ipme->type) {
case dns_c_ipmatch_pattern:
retval = retval && (*func)(&ipme->u.direct);
break;
case dns_c_ipmatch_indirect:
retval = retval &&
dns_c_ipmatchlist_walk(ipme->u.indirect.list,
func);
break;
default:
break;
}
ipme = ISC_LIST_NEXT(ipme, next);
}
return (retval);
}
isc_result_t
dns_c_iplist_new(isc_mem_t *mem, int length, dns_c_iplist_t **newlist) {
dns_c_iplist_t *list;

View File

@@ -15,7 +15,7 @@
* SOFTWARE.
*/
/* $Id: conflsn.c,v 1.14 2000/06/04 19:51:14 brister Exp $ */
/* $Id: conflsn.c,v 1.15 2000/06/05 22:08:45 brister Exp $ */
#include <config.h>
@@ -23,6 +23,7 @@
#include <isc/util.h>
#include <dns/conflsn.h>
#include <dns/log.h>
#include "confpvt.h"
@@ -179,6 +180,25 @@ dns_c_lstnlist_print(FILE *fp, int indent, dns_c_lstnlist_t *ll,
return (ISC_R_SUCCESS);
}
isc_result_t
dns_c_lstnlistv6_print(FILE *fp, int indent, dns_c_lstnlist_t *ll,
in_port_t default_port)
{
dns_c_lstnon_t *lo;
REQUIRE(DNS_C_LISTENLIST_VALID(ll));
lo = ISC_LIST_HEAD(ll->elements);
while (lo != NULL) {
dns_c_printtabs(fp, indent);
dns_c_lstnonv6_print(fp, indent, lo, default_port);
lo = ISC_LIST_NEXT(lo, next);
fprintf(fp, "\n");
}
return (ISC_R_SUCCESS);
}
isc_result_t
dns_c_lstnon_print(FILE *fp, int indent, dns_c_lstnon_t *lo,
in_port_t default_port) {
@@ -196,3 +216,94 @@ dns_c_lstnon_print(FILE *fp, int indent, dns_c_lstnon_t *lo,
return (ISC_R_SUCCESS);
}
isc_result_t
dns_c_lstnonv6_print(FILE *fp, int indent, dns_c_lstnon_t *lo,
in_port_t default_port) {
REQUIRE(lo != NULL);
REQUIRE(DNS_C_LISTEN_VALID(lo));
fprintf(fp, "listen-on-v6 ");
if (lo->port != default_port) {
fprintf(fp, "port %d ", lo->port);
}
dns_c_ipmatchlist_print(fp, indent + 1, lo->iml);
fprintf(fp, ";\n");
return (ISC_R_SUCCESS);
}
static isc_boolean_t
checklisten_element(dns_c_ipmatch_direct_t *element)
{
return (ISC_TF(isc_sockaddr_pf(&element->address) == AF_INET));
}
static isc_boolean_t
checkv6listen_element(dns_c_ipmatch_direct_t *element)
{
return (ISC_TF(isc_sockaddr_pf(&element->address) == AF_INET6));
}
/*
* Post confirguation load validation of list-on lists.
*/
isc_result_t
dns_c_lstnlist_validate(dns_c_lstnlist_t *ll)
{
dns_c_lstnon_t *lo;
isc_boolean_t checkval;
REQUIRE(DNS_C_LISTENLIST_VALID(ll));
lo = ISC_LIST_HEAD(ll->elements);
while (lo != NULL) {
checkval = dns_c_ipmatchlist_walk(lo->iml,
checklisten_element);
if (!checkval) {
isc_log_write(dns_lctx,DNS_LOGCATEGORY_CONFIG,
DNS_LOGMODULE_CONFIG, ISC_LOG_ERROR,
"listen-on must have IPv4 "
"addresses only.");
return (ISC_R_FAILURE);
}
lo = ISC_LIST_NEXT(lo, next);
}
return (ISC_R_SUCCESS);
}
isc_result_t
dns_c_lstnlistv6_validate(dns_c_lstnlist_t *ll)
{
dns_c_lstnon_t *lo;
isc_boolean_t checkval;
REQUIRE(DNS_C_LISTENLIST_VALID(ll));
lo = ISC_LIST_HEAD(ll->elements);
while (lo != NULL) {
checkval = dns_c_ipmatchlist_walk(lo->iml,
checkv6listen_element);
if (!checkval) {
isc_log_write(dns_lctx,DNS_LOGCATEGORY_CONFIG,
DNS_LOGMODULE_CONFIG, ISC_LOG_ERROR,
"listen-on-v6 must have IPv6 "
"addresses only.");
return (ISC_R_FAILURE);
}
lo = ISC_LIST_NEXT(lo, next);
}
return (ISC_R_SUCCESS);
}

View File

@@ -16,7 +16,7 @@
* SOFTWARE.
*/
/* $Id: confparser.y,v 1.90 2000/06/05 20:32:00 brister Exp $ */
/* $Id: confparser.y,v 1.91 2000/06/05 22:08:47 brister Exp $ */
#include <config.h>
@@ -291,6 +291,7 @@ static isc_boolean_t int_too_big(isc_uint32_t base, isc_uint32_t mult);
%token L_LAME_TTL
%token L_LBRACE
%token L_LISTEN_ON
%token L_LISTEN_ON_V6
%token L_LOGGING
%token L_MAINTAIN_IXFR_BASE
%token L_MANY_ANSWERS
@@ -845,6 +846,24 @@ option: /* Empty */
}
}
}
| L_LISTEN_ON_V6 maybe_port L_LBRACE address_match_list L_RBRACE
{
if ($4 == NULL) {
parser_warning(ISC_FALSE,
"address-match-list empty implies"
"listen statement ignored");
} else {
tmpres = dns_c_ctx_addv6listen_on(currcfg, $2, $4,
ISC_FALSE);
if (tmpres != ISC_R_SUCCESS) {
parser_error(ISC_FALSE,
"failed to add "
"v6listen statement");
YYABORT;
}
}
}
| L_FORWARD forward_opt
{
tmpres = dns_c_ctx_setforward(currcfg, $2);
@@ -5014,6 +5033,7 @@ static struct token keyword_tokens [] = {
{ "keys", L_KEYS },
{ "lame-ttl", L_LAME_TTL },
{ "listen-on", L_LISTEN_ON },
{ "listen-on-v6", L_LISTEN_ON_V6 },
{ "logging", L_LOGGING },
{ "maintain-ixfr-base", L_MAINTAIN_IXFR_BASE },
{ "many-answers", L_MANY_ANSWERS },

View File

@@ -192,6 +192,8 @@ struct dns_c_options {
dns_c_ipmatchlist_t *allowupdateforwarding;
dns_c_lstnlist_t *listens;
dns_c_lstnlist_t *v6listens;
dns_c_rrsolist_t *ordering;
dns_c_iplist_t *forwarders;
@@ -691,13 +693,20 @@ isc_result_t dns_c_ctx_getforwarders(dns_c_ctx_t *cfg, dns_c_iplist_t **list);
isc_result_t dns_c_ctx_unsetforwarders(dns_c_ctx_t *cfg);
isc_result_t dns_c_ctx_addlisten_on(dns_c_ctx_t *cfg, int port,
isc_result_t dns_c_ctx_addlisten_on(dns_c_ctx_t *cfg, in_port_t port,
dns_c_ipmatchlist_t *ml,
isc_boolean_t copy);
isc_result_t dns_c_ctx_getlistenlist(dns_c_ctx_t *cfg,
dns_c_lstnlist_t **ll);
isc_result_t dns_c_ctx_addv6listen_on(dns_c_ctx_t *cfg, in_port_t port,
dns_c_ipmatchlist_t *ml,
isc_boolean_t copy);
isc_result_t dns_c_ctx_getv6listenlist(dns_c_ctx_t *cfg,
dns_c_lstnlist_t **ll);
isc_result_t dns_c_ctx_setrrsetorderlist(dns_c_ctx_t *cfg, isc_boolean_t copy,
dns_c_rrsolist_t *olist);
isc_result_t dns_c_ctx_getrrsetorderlist(dns_c_ctx_t *cfg,

View File

@@ -99,7 +99,7 @@ struct dns_c_iplist {
struct dns_c_ipmatch_direct {
isc_uint32_t magic;
isc_sockaddr_t address; /* XXX IPv6??? */
isc_sockaddr_t address;
isc_uint32_t mask;
};
@@ -150,109 +150,108 @@ ISC_LANG_BEGINDECLS
*/
isc_result_t
dns_c_ipmatchelement_new(isc_mem_t *mem, dns_c_ipmatchelement_t **result);
isc_result_t dns_c_ipmatchelement_new(isc_mem_t *mem,
dns_c_ipmatchelement_t **result);
isc_result_t
dns_c_ipmatchelement_delete(isc_mem_t *mem, dns_c_ipmatchelement_t **ipme);
isc_result_t dns_c_ipmatchelement_delete(isc_mem_t *mem,
dns_c_ipmatchelement_t **ipme);
isc_result_t
dns_c_ipmatchelement_copy(isc_mem_t *mem, dns_c_ipmatchelement_t **dest,
dns_c_ipmatchelement_t *src);
isc_result_t dns_c_ipmatchelement_copy(isc_mem_t *mem,
dns_c_ipmatchelement_t **dest,
dns_c_ipmatchelement_t *src);
isc_result_t
dns_c_ipmatchelement_print(FILE *fp, int indent, dns_c_ipmatchelement_t *ime);
isc_result_t dns_c_ipmatchelement_print(FILE *fp, int indent,
dns_c_ipmatchelement_t *ime);
isc_boolean_t
dns_c_ipmatchelement_isneg(dns_c_ipmatchelement_t *elem);
isc_boolean_t dns_c_ipmatchelement_isneg(dns_c_ipmatchelement_t *elem);
isc_result_t
dns_c_ipmatch_negate(dns_c_ipmatchelement_t *ipe);
isc_result_t dns_c_ipmatch_negate(dns_c_ipmatchelement_t *ipe);
isc_result_t
dns_c_ipmatch_aclnew(isc_mem_t *mem, dns_c_ipmatchelement_t **result,
const char *aclname);
isc_result_t dns_c_ipmatch_aclnew(isc_mem_t *mem,
dns_c_ipmatchelement_t **result,
const char *aclname);
isc_result_t
dns_c_ipmatchkey_new(isc_mem_t *mem, dns_c_ipmatchelement_t **result,
const char *key);
isc_result_t dns_c_ipmatchkey_new(isc_mem_t *mem,
dns_c_ipmatchelement_t **result,
const char *key);
isc_result_t
dns_c_ipmatchany_new(isc_mem_t *mem, dns_c_ipmatchelement_t **result);
isc_result_t dns_c_ipmatchany_new(isc_mem_t *mem,
dns_c_ipmatchelement_t **result);
isc_result_t
dns_c_ipmatchlocalhost_new(isc_mem_t *mem, dns_c_ipmatchelement_t **result);
isc_result_t dns_c_ipmatchlocalhost_new(isc_mem_t *mem,
dns_c_ipmatchelement_t **result);
isc_result_t
dns_c_ipmatchlocalnets_new(isc_mem_t *mem, dns_c_ipmatchelement_t **result);
isc_result_t dns_c_ipmatchlocalnets_new(isc_mem_t *mem,
dns_c_ipmatchelement_t **result);
isc_result_t
dns_c_ipmatchpattern_new(isc_mem_t *mem, dns_c_ipmatchelement_t **result,
isc_sockaddr_t address, isc_uint32_t maskbits);
isc_result_t dns_c_ipmatchpattern_new(isc_mem_t *mem,
dns_c_ipmatchelement_t **result,
isc_sockaddr_t address,
isc_uint32_t maskbits);
isc_result_t
dns_c_ipmatchindirect_new(isc_mem_t *mem, dns_c_ipmatchelement_t **result,
dns_c_ipmatchlist_t *iml, const char *name);
isc_result_t dns_c_ipmatchindirect_new(isc_mem_t *mem,
dns_c_ipmatchelement_t **result,
dns_c_ipmatchlist_t *iml,
const char *name);
isc_result_t
dns_c_ipmatchlist_new(isc_mem_t *mem, dns_c_ipmatchlist_t **ptr);
isc_result_t dns_c_ipmatchlist_new(isc_mem_t *mem,
dns_c_ipmatchlist_t **ptr);
isc_result_t
dns_c_ipmatchlist_detach(dns_c_ipmatchlist_t **ml);
isc_result_t dns_c_ipmatchlist_detach(dns_c_ipmatchlist_t **ml);
void
dns_c_ipmatchlist_attach(dns_c_ipmatchlist_t *source,
dns_c_ipmatchlist_t **target);
void dns_c_ipmatchlist_attach(dns_c_ipmatchlist_t *source,
dns_c_ipmatchlist_t **target);
isc_result_t
dns_c_ipmatchlist_copy(isc_mem_t *mem, dns_c_ipmatchlist_t **dest,
dns_c_ipmatchlist_t *src);
isc_result_t dns_c_ipmatchlist_copy(isc_mem_t *mem,
dns_c_ipmatchlist_t **dest,
dns_c_ipmatchlist_t *src);
isc_result_t
dns_c_ipmatchlist_empty(dns_c_ipmatchlist_t *ipml);
isc_result_t dns_c_ipmatchlist_empty(dns_c_ipmatchlist_t *ipml);
isc_result_t
dns_c_ipmatchlist_append(dns_c_ipmatchlist_t *dest, dns_c_ipmatchlist_t *src,
isc_boolean_t negate);
isc_result_t dns_c_ipmatchlist_append(dns_c_ipmatchlist_t *dest,
dns_c_ipmatchlist_t *src,
isc_boolean_t negate);
isc_result_t
dns_c_ipmatchlist_print(FILE *fp, int indent, dns_c_ipmatchlist_t *iml);
isc_result_t dns_c_ipmatchlist_print(FILE *fp, int indent,
dns_c_ipmatchlist_t *iml);
isc_result_t
dns_c_iplist_new(isc_mem_t *mem, int length, dns_c_iplist_t **newlist);
isc_result_t dns_c_iplist_new(isc_mem_t *mem, int length,
dns_c_iplist_t **newlist);
isc_result_t
dns_c_iplist_detach(dns_c_iplist_t **list);
isc_result_t dns_c_iplist_detach(dns_c_iplist_t **list);
isc_result_t
dns_c_iplist_copy(isc_mem_t *mem, dns_c_iplist_t **dest, dns_c_iplist_t *src);
isc_result_t dns_c_iplist_copy(isc_mem_t *mem, dns_c_iplist_t **dest,
dns_c_iplist_t *src);
void
dns_c_iplist_attach(dns_c_iplist_t *source, dns_c_iplist_t **target);
void dns_c_iplist_attach(dns_c_iplist_t *source, dns_c_iplist_t **target);
isc_result_t
dns_c_iplist_append(dns_c_iplist_t *list, isc_sockaddr_t newaddr);
isc_result_t dns_c_iplist_append(dns_c_iplist_t *list, isc_sockaddr_t newaddr);
isc_result_t
dns_c_iplist_remove(dns_c_iplist_t *list, isc_sockaddr_t newaddr);
isc_result_t dns_c_iplist_remove(dns_c_iplist_t *list, isc_sockaddr_t newaddr);
void
dns_c_iplist_print(FILE *fp, int indent, dns_c_iplist_t *list);
void dns_c_iplist_print(FILE *fp, int indent, dns_c_iplist_t *list);
void
dns_c_iplist_printfully(FILE *fp, int indent, isc_boolean_t porttoo,
dns_c_iplist_t *list);
void dns_c_iplist_printfully(FILE *fp, int indent, isc_boolean_t porttoo,
dns_c_iplist_t *list);
isc_boolean_t
dns_c_iplist_equal(dns_c_iplist_t *list1, dns_c_iplist_t *list2);
isc_boolean_t dns_c_iplist_equal(dns_c_iplist_t *list1, dns_c_iplist_t *list2);
isc_boolean_t
dns_c_ipmatchelement_equal(dns_c_ipmatchelement_t *e1,
dns_c_ipmatchelement_t *e2);
isc_boolean_t dns_c_ipmatchelement_equal(dns_c_ipmatchelement_t *e1,
dns_c_ipmatchelement_t *e2);
isc_boolean_t
dns_c_ipmatchlist_equal(dns_c_ipmatchlist_t *l1, dns_c_ipmatchlist_t *l2);
isc_boolean_t dns_c_ipmatchlist_equal(dns_c_ipmatchlist_t *l1,
dns_c_ipmatchlist_t *l2);
ISC_LANG_ENDDECLS
typedef isc_boolean_t (*dns_c_ipmlwalker)(dns_c_ipmatch_direct_t *element);
/*
* Recursively decends the list and returns the boolean AND of the return
* values of func
*/
isc_boolean_t dns_c_ipmatchlist_walk(dns_c_ipmatchlist_t *list,
dns_c_ipmlwalker func);
ISC_LANG_ENDDECLS
#endif /* DNS_CONFIP_H */

View File

@@ -146,6 +146,20 @@ dns_c_lstnlist_print(FILE *fp, int indent, dns_c_lstnlist_t *ll,
*/
isc_result_t
dns_c_lstnlistv6_print(FILE *fp, int indent, dns_c_lstnlist_t *ll,
in_port_t default_port);
/*
* Prints the given the v6 list LL to the stream FP. INDENT number of tabs
* preceed each line of output.
*
* Requires:
*
* fp be a pointer to a valid FILE.
*
*/
isc_result_t
dns_c_lstnon_new(isc_mem_t *mem, dns_c_lstnon_t **listen);
/*
@@ -189,9 +203,15 @@ dns_c_lstnon_setiml(dns_c_lstnon_t *listen, dns_c_ipmatchlist_t *iml,
* ISC_R_NOMEMORY on allocation failure.
*/
isc_result_t
dns_c_lstnon_print(FILE *fp, int indent, dns_c_lstnon_t *lo,
in_port_t default_port);
isc_result_t dns_c_lstnon_print(FILE *fp, int indent, dns_c_lstnon_t *lo,
in_port_t default_port);
isc_result_t dns_c_lstnonv6_print(FILE *fp, int indent, dns_c_lstnon_t *lo,
in_port_t default_port);
isc_result_t dns_c_lstnlist_validate(dns_c_lstnlist_t *lo);
isc_result_t dns_c_lstnlistv6_validate(dns_c_lstnlist_t *lo);
ISC_LANG_ENDDECLS