]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
2696. [bug] named failed to successfully process some valid
authorMark Andrews <marka@isc.org>
Thu, 1 Oct 2009 04:20:37 +0000 (04:20 +0000)
committerMark Andrews <marka@isc.org>
Thu, 1 Oct 2009 04:20:37 +0000 (04:20 +0000)
                        acl constructs. [RT #20308]

CHANGES
lib/isccfg/aclconf.c

diff --git a/CHANGES b/CHANGES
index 4e13f056254b14d2e8b059c86a318be9b70fa4be..a76bdc9d004cd044b9ebd9b89834d1355cd27f90 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
+2696.  [bug]           named failed to successfully process some valid
+                       acl constructs. [RT #20308]
+
 2692.  [port]          win32: 32/64 bit cleanups. [RT #20335]
 
-2690.  [bug]           win32: fix isc_thread_key_getspecific() prototype.
+2690.  [bug]           win32: fix isc_thread_key_getspecific() prototype.
                        [RT #20315]
 
 2689.  [bug]           Correctly handle snprintf result. [RT #20306]
                        removed_orphaned_ds(). [RT #19507]
 
 2589.  [bug]           dns_db_unregister() failed to clear '*dbimp'.
-                       [RT #19626]
+                       [RT #19626]
 
 2586.  [bug]           Missing cleanup of SIG rdataset in searching a DLZ DB
                        or SDB. [RT #19577]
                        date to the version string, -DNO_VERSION_DATE.
 
 2582.  [bug]           Don't emit warning log message when we attempt to
-                       remove non-existant journal. [RT #19516]
+                       remove non-existent journal. [RT #19516]
 
 2581.  [contrib]       dlz/mysql set MYSQL_OPT_RECONNECT option on connection.
                        Requires MySQL 5.0.19 or later. [RT #19084]
 2511.  [cleanup]       dns_rdata_tofmttext() add const to linebreak.
                        [RT #18885]
 
-2506.  [port]          solaris: Check at configure time if 
+2506.  [port]          solaris: Check at configure time if
                        hack_shutup_pthreadonceinit is needed. [RT #19037]
 
 2505.  [port]          Treat amd64 similarly to x86_64 when determining
 
 2478.  [bug]           'addresses' could be used uninitalized in
                        configure_forward(). [RT #18800]
-       
+
 2476.  [doc]           ARM: improve documentation for max-journal-size and
                        ixfr-from-differences. [RT #15909] [RT #18541]
 
 
 2473.  [port]          linux: raise the limit on open files to the possible
                        maximum value before spawning threads; 'files'
-                       specified in named.conf doesn't seem to work with
+                       specified in named.conf doesn't seem to work with
                        threads as expected. [RT #18784]
 
 2472.  [port]          linux: check the number of available cpu's before
 2456.  [bug]           In ACLs, ::/0 and 0.0.0.0/0 would both match any
                        address, regardless of family.  They now correctly
                        distinguish IPv4 from IPv6.  [RT #18559]
-                        
+
 2455.  [bug]           Stop metadata being transferred via axfr/ixfr.
                        [RT #18639]
 
 
 2439.   [bug]           Potential NULL dereference in dns_acl_isanyornone().
                         [RT #18559]
-        
+
 2438.  [bug]           Timeouts could be logged incorrectly under win32.
                        [RT #18617]
 
                        implementation.  Allow the use of kqueue,
                        epoll and /dev/poll to be selected at compile
                        time. [RT #18277]
-                       
+
 2422.  [bug]           Handle the special return value of a empty node as
                        if it was a NXRRSET in the validator. [RT #18447]
 
 2380.  [bug]           dns_view_find() was not returning NXDOMAIN/NXRRSET
                        proofs which, in turn, caused validation failures
                        for insecure zones immediately below a secure zone
-                       the server was authoritative for. [RT #18112] 
+                       the server was authoritative for. [RT #18112]
 
 2379.  [contrib]       queryperf/gen-data-queryperf.py: removed redundant
                        TLDs and supported RRs with TTLs [RT #17972]
 1966.  [bug]           Don't set CD when we have fallen back to plain DNS.
                        [RT #15727]
 
-1965.  [func]          Suppress spurious "recusion requested but not
+1965.  [func]          Suppress spurious "recursion requested but not
                        available" warning with 'dig +qr'. [RT #15780].
 
 1964.  [func]          Separate out MX and SRV to CNAME checks. [RT #15723]
  963.  [bug]           Bad ISC_LANG_ENDDECLS. [RT #1645]
 
  962.  [bug]           libbind: bad "#undef", don't attempt to install
-                       non-existant nlist.h. [RT #1640]
+                       non-existent nlist.h. [RT #1640]
 
  961.  [bug]           Tried to use a IPV6 feature when ISC_PLATFORM_HAVEIPV6
                        was not defined. [RT #1482]
  188.  [func]          Log a warning message when an incoming zone transfer
                        contains out-of-zone data.
 
- 187.  [func]          isc_ratelimter_enqueue() has an additional argument
+ 187.  [func]          isc_ratelimiter_enqueue() has an additional argument
                        'task'.
 
  186.  [func]          dns_request_getresponse() has an additional argument
 
                                masters [ port xxx ] { y.y.y.y [ port zzz ] ; }
 
- 149.  [cleanup]       Removed usused argument 'olist' from
+ 149.  [cleanup]       Removed unused argument 'olist' from
                        dns_c_view_unsetordering().
 
  148.  [cleanup]       Stop issuing some warnings about some configuration
  128.  [cleanup]       <isc/dir.h> had ISC_LANG_BEGINDECLS instead of
                        ISC_LANG_ENDDECLS at end of header.
 
- 127.  [cleanup]       The contracts for the comparision routines
+ 127.  [cleanup]       The contracts for the comparison routines
                        dns_name_fullcompare(), dns_name_compare(),
                        dns_name_rdatacompare(), and dns_rdata_compare() now
                        specify that the order value returned is < 0, 0, or > 0
index 1bdb4e8f55087f74252bdf6307c06bbfca029bcd..d51e171322e19a4481c507b88439451c24815f65 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: aclconf.c,v 1.17.2.7 2009/01/19 23:47:03 tbox Exp $ */
+/* $Id: aclconf.c,v 1.17.2.8 2009/10/01 04:20:37 marka Exp $ */
 
 #include <config.h>
 
@@ -168,26 +168,36 @@ convert_keyname(const cfg_obj_t *keyobj, isc_log_t *lctx, isc_mem_t *mctx,
  * parent.
  */
 static int
-count_acl_elements(const cfg_obj_t *caml, const cfg_obj_t *cctx)
+count_acl_elements(const cfg_obj_t *caml, const cfg_obj_t *cctx,
+                  isc_boolean_t *has_negative)
 {
        const cfg_listelt_t *elt;
        const cfg_obj_t *cacl = NULL;
        isc_result_t result;
        int n = 0;
 
+       if (has_negative != NULL)
+               *has_negative = ISC_FALSE;
+
        for (elt = cfg_list_first(caml);
             elt != NULL;
             elt = cfg_list_next(elt)) {
                const cfg_obj_t *ce = cfg_listelt_value(elt);
 
                /* negated element; just get the value. */
-               if (cfg_obj_istuple(ce))
+               if (cfg_obj_istuple(ce)) {
                        ce = cfg_tuple_get(ce, "value");
+                       if (has_negative != NULL)
+                               *has_negative = ISC_TRUE;
+               }
 
                if (cfg_obj_istype(ce, &cfg_type_keyref)) {
                        n++;
                } else if (cfg_obj_islist(ce)) {
-                       n += count_acl_elements(ce, cctx);
+                       isc_boolean_t negative;
+                       n += count_acl_elements(ce, cctx, &negative);
+                       if (negative)
+                               n++;
                } else if (cfg_obj_isstring(ce)) {
                        const char *name = cfg_obj_asstring(ce);
                        if (strcasecmp(name, "localhost") == 0 ||
@@ -197,7 +207,8 @@ count_acl_elements(const cfg_obj_t *caml, const cfg_obj_t *cctx)
                                   strcasecmp(name, "none") != 0) {
                                result = get_acl_def(cctx, name, &cacl);
                                if (result == ISC_R_SUCCESS)
-                                       n += count_acl_elements(cacl, cctx) + 1;
+                                       n += count_acl_elements(cacl, cctx,
+                                                               NULL) + 1;
                        }
                }
        }
@@ -246,7 +257,7 @@ cfg_acl_fromconfig(const cfg_obj_t *caml,
                int nelem;
 
                if (nest_level == 0)
-                       nelem = count_acl_elements(caml, cctx);
+                       nelem = count_acl_elements(caml, cctx, NULL);
                else
                        nelem = cfg_list_length(caml, ISC_FALSE);