components/bind/patches/001-reclimit-v96.patch
author Ben Chang <Benjamin.Chang@Oracle.COM>
Wed, 29 Jul 2015 10:15:50 -0700
branchs11u2-sru
changeset 4712 4f9411c432fd
parent 3548 components/bind/patches/reclimit-v96.patch@4fd4fb5d5c82
permissions -rw-r--r--
21482911 Upgrade Solaris to BIND 9.6-ESV-R11-P2 21482422 problem in SERVICE/DNS-SERVER
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3548
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     1
This patch was obtained from ISC for 9.6-ESV-R11-P1. The patch can
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     2
only be obtained from [email protected] on an as needed
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     3
basis.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     4
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     5
diff --git a/CHANGES b/CHANGES
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     6
index 178f73d..8ace4fb 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     7
--- a/CHANGES
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     8
+++ b/CHANGES
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     9
@@ -1,3 +1,17 @@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    10
+	--- 9.6-ESV-R11-P1 released ---
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    11
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    12
+4006.	[security]	A flaw in delegation handling could be exploited
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    13
+			to put named into an infinite loop.  This has
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    14
+			been addressed by placing limits on the number
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    15
+			of levels of recursion named will allow (default 7),
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    16
+			and the number of iterative queries that it will
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    17
+			send (default 50) before terminating a recursive
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    18
+			query (CVE-2014-8500).
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    19
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    20
+			The recursion depth limit is configured via the
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    21
+			"max-recursion-depth" option, and the query limit
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    22
+			via the "max-recursion-queries" option.  [RT #37580]
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    23
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    24
 	--- 9.6-ESV-R11 released ---
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    25
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    26
 	--- 9.6-ESV-R11rc2 released ---
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    27
diff --git a/bin/named/config.c b/bin/named/config.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    28
index d85afa7..823d101 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    29
--- a/bin/named/config.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    30
+++ b/bin/named/config.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    31
@@ -15,8 +15,6 @@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    32
  * PERFORMANCE OF THIS SOFTWARE.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    33
  */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    34
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    35
-/* $Id$ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    36
-
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    37
 /*! \file */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    38
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    39
 #include <config.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    40
@@ -145,6 +143,8 @@ options {\n\
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    41
 	dnssec-accept-expired no;\n\
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    42
 	clients-per-query 10;\n\
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    43
 	max-clients-per-query 100;\n\
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    44
+	max-recursion-depth 7;\n\
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    45
+	max-recursion-queries 50;\n\
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    46
 	zero-no-soa-ttl-cache no;\n\
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    47
 	nsec3-test-zone no;\n\
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    48
 "
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    49
diff --git a/bin/named/include/named/query.h b/bin/named/include/named/query.h
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    50
index 20aff40..771345e 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    51
--- a/bin/named/include/named/query.h
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    52
+++ b/bin/named/include/named/query.h
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    53
@@ -1,5 +1,5 @@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    54
 /*
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    55
- * Copyright (C) 2004, 2005, 2007, 2010, 2012  Internet Systems Consortium, Inc. ("ISC")
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    56
+ * Copyright (C) 2004, 2005, 2007, 2010, 2011, 2013, 2014  Internet Systems Consortium, Inc. ("ISC")
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    57
  * Copyright (C) 1999-2002  Internet Software Consortium.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    58
  *
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    59
  * Permission to use, copy, modify, and/or distribute this software for any
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    60
@@ -15,8 +15,6 @@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    61
  * PERFORMANCE OF THIS SOFTWARE.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    62
  */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    63
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    64
-/* $Id$ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    65
-
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    66
 #ifndef NAMED_QUERY_H
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    67
 #define NAMED_QUERY_H 1
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    68
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    69
diff --git a/bin/named/query.c b/bin/named/query.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    70
index 10a7d9a..48e4822 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    71
--- a/bin/named/query.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    72
+++ b/bin/named/query.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    73
@@ -3343,13 +3343,12 @@ query_recurse(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qdomain,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    74
 		peeraddr = &client->peeraddr;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    75
 	else
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    76
 		peeraddr = NULL;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    77
-	result = dns_resolver_createfetch2(client->view->resolver,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    78
+	result = dns_resolver_createfetch3(client->view->resolver,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    79
 					   client->query.qname,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    80
 					   qtype, qdomain, nameservers,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    81
 					   NULL, peeraddr, client->message->id,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    82
-					   client->query.fetchoptions,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    83
-					   client->task,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    84
-					   query_resume, client,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    85
+					   client->query.fetchoptions, 0, NULL,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    86
+					   client->task, query_resume, client,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    87
 					   rdataset, sigrdataset,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    88
 					   &client->query.fetch);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    89
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    90
diff --git a/bin/named/server.c b/bin/named/server.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    91
index af53b48..4d48074 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    92
--- a/bin/named/server.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    93
+++ b/bin/named/server.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    94
@@ -15,8 +15,6 @@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    95
  * PERFORMANCE OF THIS SOFTWARE.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    96
  */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    97
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    98
-/* $Id$ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    99
-
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   100
 /*! \file */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   101
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   102
 #include <config.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   103
@@ -2048,6 +2046,16 @@ configure_view(dns_view_t *view, const cfg_obj_t *config,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   104
 					max_clients_per_query);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   105
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   106
 	obj = NULL;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   107
+	result = ns_config_get(maps, "max-recursion-depth", &obj);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   108
+	INSIST(result == ISC_R_SUCCESS);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   109
+	dns_resolver_setmaxdepth(view->resolver, cfg_obj_asuint32(obj));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   110
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   111
+	obj = NULL;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   112
+	result = ns_config_get(maps, "max-recursion-queries", &obj);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   113
+	INSIST(result == ISC_R_SUCCESS);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   114
+	dns_resolver_setmaxqueries(view->resolver, cfg_obj_asuint32(obj));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   115
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   116
+	obj = NULL;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   117
 	result = ns_config_get(maps, "dnssec-enable", &obj);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   118
 	INSIST(result == ISC_R_SUCCESS);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   119
 	view->enablednssec = cfg_obj_asboolean(obj);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   120
diff --git a/doc/arm/Bv9ARM-book.xml b/doc/arm/Bv9ARM-book.xml
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   121
index f894aab..b823dc4 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   122
--- a/doc/arm/Bv9ARM-book.xml
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   123
+++ b/doc/arm/Bv9ARM-book.xml
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   124
@@ -4652,6 +4652,8 @@ category notify { null; };
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   125
     <optional> max-acache-size <replaceable>size_spec</replaceable> ; </optional>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   126
     <optional> clients-per-query <replaceable>number</replaceable> ; </optional>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   127
     <optional> max-clients-per-query <replaceable>number</replaceable> ; </optional>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   128
+    <optional> max-recursion-depth <replaceable>number</replaceable> ; </optional>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   129
+    <optional> max-recursion-queries <replaceable>number</replaceable> ; </optional>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   130
     <optional> masterfile-format (<constant>text</constant>|<constant>raw</constant>) ; </optional>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   131
     <optional> empty-server <replaceable>name</replaceable> ; </optional>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   132
     <optional> empty-contact <replaceable>name</replaceable> ; </optional>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   133
@@ -4729,6 +4731,35 @@ category notify { null; };
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   134
 	    </listitem>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   135
 	  </varlistentry>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   136
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   137
+	  <varlistentry id="max-recursion-depth">
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   138
+	    <term><command>max-recursion-depth</command></term>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   139
+	    <listitem>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   140
+	      <para>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   141
+		Sets the maximum number of levels of recursion
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   142
+		that are permitted at any one time while servicing
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   143
+		a recursive query. Resolving a name may require
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   144
+		looking up a name server address, which in turn
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   145
+		requires resolving another name, etc; if the number
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   146
+		of indirections exceeds this value, the recursive
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   147
+		query is terminated and returns SERVFAIL.  The
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   148
+		default is 7.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   149
+	      </para>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   150
+	    </listitem>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   151
+	  </varlistentry>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   152
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   153
+	  <varlistentry id="max-recursion-queries">
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   154
+	    <term><command>max-recursion-queries</command></term>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   155
+	    <listitem>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   156
+	      <para>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   157
+		Sets the maximum number of iterative queries that
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   158
+		may be sent while servicing a recursive query.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   159
+		If more queries are sent, the recursive query
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   160
+		is terminated and returns SERVFAIL. The default
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   161
+		is 50.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   162
+	      </para>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   163
+	    </listitem>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   164
+	  </varlistentry>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   165
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   166
 	  <varlistentry>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   167
 	    <term><command>tkey-gssapi-credential</command></term>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   168
 	    <listitem>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   169
diff --git a/lib/dns/adb.c b/lib/dns/adb.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   170
index 2d7b904..422e59c 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   171
--- a/lib/dns/adb.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   172
+++ b/lib/dns/adb.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   173
@@ -200,6 +200,7 @@ struct dns_adbfetch {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   174
 	unsigned int                    magic;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   175
 	dns_fetch_t                    *fetch;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   176
 	dns_rdataset_t                  rdataset;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   177
+	unsigned int			depth;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   178
 };
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   179
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   180
 /*%
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   181
@@ -298,8 +299,7 @@ static inline isc_boolean_t dec_entry_refcnt(dns_adb_t *, isc_boolean_t,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   182
 static inline void violate_locking_hierarchy(isc_mutex_t *, isc_mutex_t *);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   183
 static isc_boolean_t clean_namehooks(dns_adb_t *, dns_adbnamehooklist_t *);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   184
 static void clean_target(dns_adb_t *, dns_name_t *);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   185
-static void clean_finds_at_name(dns_adbname_t *, isc_eventtype_t,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   186
-				unsigned int);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   187
+static void clean_finds_at_name(dns_adbname_t *, isc_eventtype_t, unsigned int);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   188
 static isc_boolean_t check_expire_namehooks(dns_adbname_t *, isc_stdtime_t);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   189
 static isc_boolean_t check_expire_entry(dns_adb_t *, dns_adbentry_t **,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   190
 					isc_stdtime_t);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   191
@@ -307,6 +307,7 @@ static void cancel_fetches_at_name(dns_adbname_t *);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   192
 static isc_result_t dbfind_name(dns_adbname_t *, isc_stdtime_t,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   193
 				dns_rdatatype_t);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   194
 static isc_result_t fetch_name(dns_adbname_t *, isc_boolean_t,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   195
+			       unsigned int, isc_counter_t *qc,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   196
 			       dns_rdatatype_t);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   197
 static inline void check_exit(dns_adb_t *);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   198
 static void destroy(dns_adb_t *);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   199
@@ -2282,6 +2283,19 @@ dns_adb_createfind(dns_adb_t *adb, isc_task_t *task, isc_taskaction_t action,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   200
 		   isc_stdtime_t now, dns_name_t *target,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   201
 		   in_port_t port, dns_adbfind_t **findp)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   202
 {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   203
+	return (dns_adb_createfind2(adb, task, action, arg, name,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   204
+				    qname, qtype, options, now,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   205
+				    target, port, 0, NULL, findp));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   206
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   207
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   208
+isc_result_t
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   209
+dns_adb_createfind2(dns_adb_t *adb, isc_task_t *task, isc_taskaction_t action,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   210
+		    void *arg, dns_name_t *name, dns_name_t *qname,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   211
+		    dns_rdatatype_t qtype, unsigned int options,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   212
+		    isc_stdtime_t now, dns_name_t *target,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   213
+		    in_port_t port, unsigned int depth, isc_counter_t *qc,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   214
+		    dns_adbfind_t **findp)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   215
+{
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   216
 	dns_adbfind_t *find;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   217
 	dns_adbname_t *adbname;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   218
 	int bucket;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   219
@@ -2512,7 +2526,7 @@ dns_adb_createfind(dns_adb_t *adb, isc_task_t *task, isc_taskaction_t action,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   220
 		 * Start V4.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   221
 		 */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   222
 		if (WANT_INET(wanted_fetches) &&
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   223
-		    fetch_name(adbname, start_at_zone,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   224
+		    fetch_name(adbname, start_at_zone, depth, qc,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   225
 			       dns_rdatatype_a) == ISC_R_SUCCESS) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   226
 			DP(DEF_LEVEL,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   227
 			   "dns_adb_createfind: started A fetch for name %p",
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   228
@@ -2523,7 +2537,7 @@ dns_adb_createfind(dns_adb_t *adb, isc_task_t *task, isc_taskaction_t action,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   229
 		 * Start V6.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   230
 		 */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   231
 		if (WANT_INET6(wanted_fetches) &&
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   232
-		    fetch_name(adbname, start_at_zone,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   233
+		    fetch_name(adbname, start_at_zone, depth, qc,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   234
 			       dns_rdatatype_aaaa) == ISC_R_SUCCESS) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   235
 			DP(DEF_LEVEL,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   236
 			   "dns_adb_createfind: "
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   237
@@ -3256,6 +3270,12 @@ fetch_callback(isc_task_t *task, isc_event_t *ev) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   238
 		DP(DEF_LEVEL, "adb: fetch of '%s' %s failed: %s",
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   239
 		   buf, address_type == DNS_ADBFIND_INET ? "A" : "AAAA",
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   240
 		   dns_result_totext(dev->result));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   241
+		/*
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   242
+		 * Don't record a failure unless this is the initial
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   243
+		 * fetch of a chain.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   244
+		 */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   245
+		if (fetch->depth > 1)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   246
+			goto out;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   247
 		/* XXXMLG Don't pound on bad servers. */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   248
 		if (address_type == DNS_ADBFIND_INET) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   249
 			name->expire_v4 = ISC_MIN(name->expire_v4, now + 300);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   250
@@ -3293,9 +3313,8 @@ fetch_callback(isc_task_t *task, isc_event_t *ev) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   251
 }
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   252
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   253
 static isc_result_t
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   254
-fetch_name(dns_adbname_t *adbname,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   255
-	   isc_boolean_t start_at_zone,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   256
-	   dns_rdatatype_t type)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   257
+fetch_name(dns_adbname_t *adbname, isc_boolean_t start_at_zone,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   258
+	   unsigned int depth, isc_counter_t *qc, dns_rdatatype_t type)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   259
 {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   260
 	isc_result_t result;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   261
 	dns_adbfetch_t *fetch = NULL;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   262
@@ -3340,12 +3359,14 @@ fetch_name(dns_adbname_t *adbname,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   263
 		result = ISC_R_NOMEMORY;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   264
 		goto cleanup;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   265
 	}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   266
+	fetch->depth = depth;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   267
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   268
-	result = dns_resolver_createfetch(adb->view->resolver, &adbname->name,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   269
-					  type, name, nameservers, NULL,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   270
-					  options, adb->task, fetch_callback,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   271
-					  adbname, &fetch->rdataset, NULL,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   272
-					  &fetch->fetch);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   273
+	result = dns_resolver_createfetch3(adb->view->resolver, &adbname->name,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   274
+					   type, name, nameservers, NULL,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   275
+					   NULL, 0, options, depth, qc,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   276
+					   adb->task, fetch_callback, adbname,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   277
+					   &fetch->rdataset, NULL,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   278
+					   &fetch->fetch);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   279
 	if (result != ISC_R_SUCCESS)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   280
 		goto cleanup;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   281
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   282
diff --git a/lib/dns/include/dns/adb.h b/lib/dns/include/dns/adb.h
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   283
index d4d1b05..556fcc2 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   284
--- a/lib/dns/include/dns/adb.h
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   285
+++ b/lib/dns/include/dns/adb.h
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   286
@@ -334,6 +334,13 @@ dns_adb_createfind(dns_adb_t *adb, isc_task_t *task, isc_taskaction_t action,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   287
 		   dns_rdatatype_t qtype, unsigned int options,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   288
 		   isc_stdtime_t now, dns_name_t *target,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   289
 		   in_port_t port, dns_adbfind_t **find);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   290
+isc_result_t
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   291
+dns_adb_createfind2(dns_adb_t *adb, isc_task_t *task, isc_taskaction_t action,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   292
+		    void *arg, dns_name_t *name, dns_name_t *qname,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   293
+		    dns_rdatatype_t qtype, unsigned int options,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   294
+		    isc_stdtime_t now, dns_name_t *target, in_port_t port,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   295
+		    unsigned int depth, isc_counter_t *qc,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   296
+		    dns_adbfind_t **find);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   297
 /*%<
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   298
  * Main interface for clients. The adb will look up the name given in
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   299
  * "name" and will build up a list of found addresses, and perhaps start
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   300
diff --git a/lib/dns/include/dns/resolver.h b/lib/dns/include/dns/resolver.h
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   301
index d293daa..10c3a3a 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   302
--- a/lib/dns/include/dns/resolver.h
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   303
+++ b/lib/dns/include/dns/resolver.h
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   304
@@ -270,6 +270,18 @@ dns_resolver_createfetch2(dns_resolver_t *res, dns_name_t *name,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   305
 			  dns_rdataset_t *rdataset,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   306
 			  dns_rdataset_t *sigrdataset,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   307
 			  dns_fetch_t **fetchp);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   308
+isc_result_t
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   309
+dns_resolver_createfetch3(dns_resolver_t *res, dns_name_t *name,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   310
+			  dns_rdatatype_t type,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   311
+			  dns_name_t *domain, dns_rdataset_t *nameservers,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   312
+			  dns_forwarders_t *forwarders,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   313
+			  isc_sockaddr_t *client, isc_uint16_t id,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   314
+			  unsigned int options, unsigned int depth,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   315
+			  isc_counter_t *qc, isc_task_t *task,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   316
+			  isc_taskaction_t action, void *arg,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   317
+			  dns_rdataset_t *rdataset,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   318
+			  dns_rdataset_t *sigrdataset,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   319
+			  dns_fetch_t **fetchp);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   320
 /*%<
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   321
  * Recurse to answer a question.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   322
  *
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   323
@@ -550,6 +562,30 @@ dns_resolver_printbadcache(dns_resolver_t *resolver, FILE *fp);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   324
  * \li	resolver to be valid.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   325
  */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   326
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   327
+void
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   328
+dns_resolver_setmaxdepth(dns_resolver_t *resolver, unsigned int maxdepth);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   329
+unsigned int
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   330
+dns_resolver_getmaxdepth(dns_resolver_t *resolver);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   331
+/*%
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   332
+ * Get and set how many NS indirections will be followed when looking for
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   333
+ * nameserver addresses.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   334
+ *
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   335
+ * Requires:
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   336
+ * \li	resolver to be valid.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   337
+ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   338
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   339
+void
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   340
+dns_resolver_setmaxqueries(dns_resolver_t *resolver, unsigned int queries);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   341
+unsigned int
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   342
+dns_resolver_getmaxqueries(dns_resolver_t *resolver);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   343
+/*%
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   344
+ * Get and set how many iterative queries will be allowed before
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   345
+ * terminating a recursive query.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   346
+ *
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   347
+ * Requires:
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   348
+ * \li	resolver to be valid.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   349
+ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   350
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   351
 ISC_LANG_ENDDECLS
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   352
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   353
 #endif /* DNS_RESOLVER_H */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   354
diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   355
index 7dcea6d..bd3d9fd 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   356
--- a/lib/dns/resolver.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   357
+++ b/lib/dns/resolver.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   358
@@ -21,6 +21,7 @@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   359
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   360
 #include <config.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   361
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   362
+#include <isc/counter.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   363
 #include <isc/log.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   364
 #include <isc/platform.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   365
 #include <isc/print.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   366
@@ -109,6 +110,16 @@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   367
 #define QTRACE(m)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   368
 #endif
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   369
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   370
+/* The default maximum number of recursions to follow before giving up. */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   371
+#ifndef DEFAULT_RECURSION_DEPTH
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   372
+#define DEFAULT_RECURSION_DEPTH 7
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   373
+#endif
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   374
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   375
+/* The default maximum number of iterative queries to allow before giving up. */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   376
+#ifndef DEFAULT_MAX_QUERIES
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   377
+#define DEFAULT_MAX_QUERIES 50
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   378
+#endif
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   379
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   380
 /*%
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   381
  * Maximum EDNS0 input packet size.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   382
  */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   383
@@ -211,12 +222,13 @@ struct fetchctx {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   384
 	isc_sockaddrlist_t		edns;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   385
 	isc_sockaddrlist_t		edns512;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   386
 	isc_sockaddrlist_t		bad_edns;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   387
-	dns_validator_t			*validator;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   388
+	dns_validator_t *		validator;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   389
 	ISC_LIST(dns_validator_t)       validators;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   390
 	dns_db_t *			cache;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   391
 	dns_adb_t *			adb;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   392
 	isc_boolean_t			ns_ttl_ok;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   393
 	isc_uint32_t			ns_ttl;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   394
+	isc_counter_t *			qc;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   395
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   396
 	/*%
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   397
 	 * The number of events we're waiting for.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   398
@@ -283,6 +295,7 @@ struct fetchctx {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   399
 	unsigned int			valfail;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   400
 	isc_boolean_t			timeout;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   401
 	dns_adbaddrinfo_t 		*addrinfo;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   402
+	unsigned int			depth;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   403
 };
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   404
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   405
 #define FCTX_MAGIC			ISC_MAGIC('F', '!', '!', '!')
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   406
@@ -394,6 +407,8 @@ struct dns_resolver {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   407
 	unsigned int			spillatmin;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   408
 	isc_timer_t *			spillattimer;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   409
 	isc_boolean_t			zero_no_soa_ttl;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   410
+	unsigned int			maxdepth;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   411
+	unsigned int			maxqueries;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   412
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   413
 	/* Locked by lock. */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   414
 	unsigned int			references;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   415
@@ -1495,6 +1510,7 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   416
 		if (result != ISC_R_SUCCESS)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   417
 			goto cleanup_dispatch;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   418
 	}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   419
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   420
 	fctx->querysent++;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   421
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   422
 	ISC_LIST_APPEND(fctx->queries, query, link);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   423
@@ -2146,9 +2162,9 @@ fctx_finddone(isc_task_t *task, isc_event_t *event) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   424
 		 */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   425
 		INSIST(!SHUTTINGDOWN(fctx));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   426
 		fctx->attributes &= ~FCTX_ATTR_ADDRWAIT;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   427
-		if (event->ev_type == DNS_EVENT_ADBMOREADDRESSES)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   428
+		if (event->ev_type == DNS_EVENT_ADBMOREADDRESSES) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   429
 			want_try = ISC_TRUE;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   430
-		else {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   431
+		} else {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   432
 			fctx->findfail++;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   433
 			if (fctx->pending == 0) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   434
 				/*
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   435
@@ -2177,7 +2193,7 @@ fctx_finddone(isc_task_t *task, isc_event_t *event) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   436
 	else if (want_done)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   437
 		fctx_done(fctx, ISC_R_FAILURE, __LINE__);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   438
 	else if (destroy) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   439
-			fctx_destroy(fctx);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   440
+		fctx_destroy(fctx);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   441
 		if (bucket_empty)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   442
 			empty_bucket(res);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   443
 	}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   444
@@ -2499,12 +2515,13 @@ findname(fetchctx_t *fctx, dns_name_t *name, in_port_t port,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   445
 	 * See what we know about this address.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   446
 	 */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   447
 	find = NULL;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   448
-	result = dns_adb_createfind(fctx->adb,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   449
-				    res->buckets[fctx->bucketnum].task,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   450
-				    fctx_finddone, fctx, name,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   451
-				    &fctx->name, fctx->type,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   452
-				    options, now, NULL,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   453
-				    res->view->dstport, &find);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   454
+	result = dns_adb_createfind2(fctx->adb,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   455
+				     res->buckets[fctx->bucketnum].task,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   456
+				     fctx_finddone, fctx, name,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   457
+				     &fctx->name, fctx->type,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   458
+				     options, now, NULL,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   459
+				     res->view->dstport,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   460
+				     fctx->depth + 1, fctx->qc, &find);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   461
 	if (result != ISC_R_SUCCESS) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   462
 		if (result == DNS_R_ALIAS) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   463
 			/*
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   464
@@ -2612,6 +2629,14 @@ fctx_getaddresses(fetchctx_t *fctx, isc_boolean_t badcache) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   465
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   466
 	res = fctx->res;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   467
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   468
+	if (fctx->depth > res->maxdepth) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   469
+		isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   470
+			      DNS_LOGMODULE_RESOLVER, ISC_LOG_DEBUG(3),
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   471
+			      "too much NS indirection resolving '%s'",
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   472
+			      fctx->info);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   473
+		return (DNS_R_SERVFAIL);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   474
+	}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   475
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   476
 	/*
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   477
 	 * Forwarders.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   478
 	 */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   479
@@ -3087,6 +3112,16 @@ fctx_try(fetchctx_t *fctx, isc_boolean_t retrying, isc_boolean_t badcache) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   480
 		}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   481
 	}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   482
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   483
+	result = isc_counter_increment(fctx->qc);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   484
+	if (result != ISC_R_SUCCESS) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   485
+		isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   486
+			      DNS_LOGMODULE_RESOLVER, ISC_LOG_DEBUG(3),
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   487
+			      "exceeded max queries resolving '%s'",
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   488
+			      fctx->info);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   489
+		fctx_done(fctx, DNS_R_SERVFAIL, __LINE__);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   490
+		return;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   491
+	}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   492
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   493
 	result = fctx_query(fctx, addrinfo, fctx->options);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   494
 	if (result != ISC_R_SUCCESS)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   495
 		fctx_done(fctx, result, __LINE__);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   496
@@ -3185,6 +3220,7 @@ fctx_destroy(fetchctx_t *fctx) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   497
 		isc_mem_put(fctx->mctx, sa, sizeof(*sa));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   498
 	}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   499
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   500
+	isc_counter_detach(&fctx->qc);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   501
 	isc_timer_detach(&fctx->timer);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   502
 	dns_message_destroy(&fctx->rmessage);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   503
 	dns_message_destroy(&fctx->qmessage);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   504
@@ -3512,7 +3548,8 @@ log_ns_ttl(fetchctx_t *fctx, const char *where) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   505
 static isc_result_t
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   506
 fctx_create(dns_resolver_t *res, dns_name_t *name, dns_rdatatype_t type,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   507
 	    dns_name_t *domain, dns_rdataset_t *nameservers,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   508
-	    unsigned int options, unsigned int bucketnum, fetchctx_t **fctxp)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   509
+	    unsigned int options, unsigned int bucketnum, unsigned int depth,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   510
+	    isc_counter_t *qc, fetchctx_t **fctxp)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   511
 {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   512
 	fetchctx_t *fctx;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   513
 	isc_result_t result;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   514
@@ -3534,6 +3571,21 @@ fctx_create(dns_resolver_t *res, dns_name_t *name, dns_rdatatype_t type,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   515
 	fctx = isc_mem_get(mctx, sizeof(*fctx));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   516
 	if (fctx == NULL)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   517
 		return (ISC_R_NOMEMORY);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   518
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   519
+	fctx->qc = NULL;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   520
+	if (qc != NULL) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   521
+		isc_counter_attach(qc, &fctx->qc);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   522
+	} else {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   523
+		result = isc_counter_create(res->mctx,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   524
+					    res->maxqueries, &fctx->qc);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   525
+		if (result != ISC_R_SUCCESS)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   526
+			goto cleanup_fetch;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   527
+	}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   528
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   529
+	/*
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   530
+	 * Make fctx->info point to a copy of a formatted string
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   531
+	 * "name/type".
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   532
+	 */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   533
 	dns_name_format(name, buf, sizeof(buf));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   534
 	dns_rdatatype_format(type, typebuf, sizeof(typebuf));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   535
 	strcat(buf, "/");       /* checked */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   536
@@ -3541,7 +3593,7 @@ fctx_create(dns_resolver_t *res, dns_name_t *name, dns_rdatatype_t type,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   537
 	fctx->info = isc_mem_strdup(mctx, buf);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   538
 	if (fctx->info == NULL) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   539
 		result = ISC_R_NOMEMORY;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   540
-		goto cleanup_fetch;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   541
+		goto cleanup_counter;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   542
 	}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   543
 	FCTXTRACE("create");
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   544
 	dns_name_init(&fctx->name, NULL);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   545
@@ -3564,6 +3616,7 @@ fctx_create(dns_resolver_t *res, dns_name_t *name, dns_rdatatype_t type,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   546
 	fctx->state = fetchstate_init;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   547
 	fctx->want_shutdown = ISC_FALSE;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   548
 	fctx->cloned = ISC_FALSE;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   549
+	fctx->depth = depth;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   550
 	ISC_LIST_INIT(fctx->queries);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   551
 	ISC_LIST_INIT(fctx->finds);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   552
 	ISC_LIST_INIT(fctx->altfinds);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   553
@@ -3768,6 +3821,9 @@ fctx_create(dns_resolver_t *res, dns_name_t *name, dns_rdatatype_t type,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   554
  cleanup_info:
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   555
 	isc_mem_free(mctx, fctx->info);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   556
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   557
+ cleanup_counter:
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   558
+	isc_counter_detach(&fctx->qc);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   559
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   560
  cleanup_fetch:
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   561
 	isc_mem_put(mctx, fctx, sizeof(*fctx));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   562
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   563
@@ -7339,6 +7395,8 @@ dns_resolver_create(dns_view_t *view,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   564
 	res->zero_no_soa_ttl = ISC_FALSE;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   565
 	res->ndisps = 0;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   566
 	res->nextdisp = 0; /* meaningless at this point, but init it */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   567
+	res->maxdepth = DEFAULT_RECURSION_DEPTH;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   568
+	res->maxqueries = DEFAULT_MAX_QUERIES;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   569
 	res->nbuckets = ntasks;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   570
 	res->activebuckets = ntasks;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   571
 	res->buckets = isc_mem_get(view->mctx,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   572
@@ -7778,9 +7836,9 @@ dns_resolver_createfetch(dns_resolver_t *res, dns_name_t *name,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   573
 			 dns_rdataset_t *sigrdataset,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   574
 			 dns_fetch_t **fetchp)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   575
 {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   576
-	return (dns_resolver_createfetch2(res, name, type, domain,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   577
+	return (dns_resolver_createfetch3(res, name, type, domain,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   578
 					  nameservers, forwarders, NULL, 0,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   579
-					  options, task, action, arg,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   580
+					  options, 0, NULL, task, action, arg,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   581
 					  rdataset, sigrdataset, fetchp));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   582
 }
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   583
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   584
@@ -7796,6 +7854,25 @@ dns_resolver_createfetch2(dns_resolver_t *res, dns_name_t *name,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   585
 			  dns_rdataset_t *sigrdataset,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   586
 			  dns_fetch_t **fetchp)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   587
 {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   588
+	return (dns_resolver_createfetch3(res, name, type, domain,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   589
+					  nameservers, forwarders, client, id,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   590
+					  options, 0, NULL, task, action, arg,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   591
+					  rdataset, sigrdataset, fetchp));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   592
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   593
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   594
+isc_result_t
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   595
+dns_resolver_createfetch3(dns_resolver_t *res, dns_name_t *name,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   596
+			  dns_rdatatype_t type,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   597
+			  dns_name_t *domain, dns_rdataset_t *nameservers,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   598
+			  dns_forwarders_t *forwarders,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   599
+			  isc_sockaddr_t *client, dns_messageid_t id,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   600
+			  unsigned int options, unsigned int depth,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   601
+			  isc_counter_t *qc, isc_task_t *task,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   602
+			  isc_taskaction_t action, void *arg,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   603
+			  dns_rdataset_t *rdataset,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   604
+			  dns_rdataset_t *sigrdataset,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   605
+			  dns_fetch_t **fetchp)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   606
+{
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   607
 	dns_fetch_t *fetch;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   608
 	fetchctx_t *fctx = NULL;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   609
 	isc_result_t result = ISC_R_SUCCESS;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   610
@@ -7882,11 +7959,12 @@ dns_resolver_createfetch2(dns_resolver_t *res, dns_name_t *name,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   611
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   612
 	if (fctx == NULL) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   613
 		result = fctx_create(res, name, type, domain, nameservers,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   614
-				     options, bucketnum, &fctx);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   615
+				     options, bucketnum, depth, qc, &fctx);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   616
 		if (result != ISC_R_SUCCESS)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   617
 			goto unlock;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   618
 		new_fctx = ISC_TRUE;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   619
-	}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   620
+	} else if (fctx->depth > depth)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   621
+		fctx->depth = depth;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   622
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   623
 	result = fctx_join(fctx, task, client, id, action, arg,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   624
 			   rdataset, sigrdataset, fetch);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   625
@@ -8637,3 +8715,27 @@ dns_resolver_getoptions(dns_resolver_t *resolver) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   626
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   627
 	return (resolver->options);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   628
 }
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   629
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   630
+void
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   631
+dns_resolver_setmaxdepth(dns_resolver_t *resolver, unsigned int maxdepth) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   632
+	REQUIRE(VALID_RESOLVER(resolver));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   633
+	resolver->maxdepth = maxdepth;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   634
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   635
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   636
+unsigned int
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   637
+dns_resolver_getmaxdepth(dns_resolver_t *resolver) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   638
+	REQUIRE(VALID_RESOLVER(resolver));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   639
+	return (resolver->maxdepth);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   640
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   641
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   642
+void
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   643
+dns_resolver_setmaxqueries(dns_resolver_t *resolver, unsigned int queries) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   644
+	REQUIRE(VALID_RESOLVER(resolver));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   645
+	resolver->maxqueries = queries;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   646
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   647
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   648
+unsigned int
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   649
+dns_resolver_getmaxqueries(dns_resolver_t *resolver) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   650
+	REQUIRE(VALID_RESOLVER(resolver));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   651
+	return (resolver->maxqueries);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   652
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   653
diff --git a/lib/isc/Makefile.in b/lib/isc/Makefile.in
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   654
index 0b4020b..afc19ee 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   655
--- a/lib/isc/Makefile.in
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   656
+++ b/lib/isc/Makefile.in
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   657
@@ -13,8 +13,6 @@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   658
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   659
 # PERFORMANCE OF THIS SOFTWARE.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   660
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   661
-# $Id$
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   662
-
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   663
 srcdir =	@srcdir@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   664
 VPATH =		@srcdir@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   665
 top_srcdir =	@top_srcdir@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   666
@@ -53,7 +51,7 @@ WIN32OBJS = 	win32/condition.@O@ win32/dir.@O@ win32/file.@O@ \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   667
 # Alphabetically
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   668
 OBJS =		@ISC_EXTRA_OBJS@ \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   669
 		assertions.@O@ base32.@O@ base64.@O@ bitstring.@O@ buffer.@O@ \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   670
-		bufferlist.@O@ commandline.@O@ error.@O@ event.@O@ \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   671
+		bufferlist.@O@ commandline.@O@ counter.@O@ error.@O@ event.@O@ \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   672
 		hash.@O@ heap.@O@ hex.@O@ hmacmd5.@O@ hmacsha.@O@ \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   673
 		httpd.@O@ inet_aton.@O@ iterated_hash.@O@ \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   674
 		lex.@O@ lfsr.@O@ lib.@O@ log.@O@ \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   675
@@ -68,7 +66,7 @@ OBJS =		@ISC_EXTRA_OBJS@ \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   676
 # Alphabetically
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   677
 SRCS =		@ISC_EXTRA_SRCS@ \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   678
 		assertions.c base32.c base64.c bitstring.c buffer.c \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   679
-		bufferlist.c commandline.c error.c event.c \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   680
+		bufferlist.c commandline.c counter.c error.c event.c \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   681
 		heap.c hex.c hmacmd5.c hmacsha.c \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   682
 		httpd.c inet_aton.c iterated_hash.c \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   683
 		lex.c lfsr.c lib.c log.c \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   684
diff --git a/lib/isc/include/isc/Makefile.in b/lib/isc/include/isc/Makefile.in
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   685
index 9adca3e..1cfbbd1 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   686
--- a/lib/isc/include/isc/Makefile.in
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   687
+++ b/lib/isc/include/isc/Makefile.in
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   688
@@ -13,8 +13,6 @@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   689
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   690
 # PERFORMANCE OF THIS SOFTWARE.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   691
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   692
-# $Id$
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   693
-
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   694
 srcdir =	@srcdir@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   695
 VPATH =		@srcdir@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   696
 top_srcdir =	@top_srcdir@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   697
@@ -27,7 +25,7 @@ top_srcdir =	@top_srcdir@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   698
 # install target below.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   699
 #
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   700
 HEADERS =	app.h assertions.h base64.h bitstring.h boolean.h buffer.h \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   701
-		bufferlist.h commandline.h entropy.h error.h event.h \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   702
+		bufferlist.h commandline.h counter.h entropy.h error.h event.h \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   703
 		eventclass.h file.h formatcheck.h fsaccess.h \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   704
 		hash.h heap.h hex.h hmacmd5.h hmacsha.h \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   705
 		httpd.h \
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   706
diff --git a/lib/isc/include/isc/types.h b/lib/isc/include/isc/types.h
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   707
index 8e8b08f..a646b8b 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   708
--- a/lib/isc/include/isc/types.h
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   709
+++ b/lib/isc/include/isc/types.h
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   710
@@ -45,6 +45,7 @@ typedef struct isc_buffer		isc_buffer_t;		/*%< Buffer */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   711
 typedef ISC_LIST(isc_buffer_t)		isc_bufferlist_t;	/*%< Buffer List */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   712
 typedef struct isc_constregion		isc_constregion_t;	/*%< Const region */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   713
 typedef struct isc_consttextregion	isc_consttextregion_t;	/*%< Const Text Region */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   714
+typedef struct isc_counter		isc_counter_t;		/*%< Counter */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   715
 typedef struct isc_entropy		isc_entropy_t;		/*%< Entropy */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   716
 typedef struct isc_entropysource	isc_entropysource_t;	/*%< Entropy Source */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   717
 typedef struct isc_event		isc_event_t;		/*%< Event */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   718
diff --git a/lib/isccfg/namedconf.c b/lib/isccfg/namedconf.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   719
index fac2633..3023dcc 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   720
--- a/lib/isccfg/namedconf.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   721
+++ b/lib/isccfg/namedconf.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   722
@@ -15,8 +15,6 @@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   723
  * PERFORMANCE OF THIS SOFTWARE.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   724
  */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   725
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   726
-/* $Id$ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   727
-
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   728
 /*! \file */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   729
 
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   730
 #include <config.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   731
@@ -830,6 +828,8 @@ view_clauses[] = {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   732
 	{ "max-cache-ttl", &cfg_type_uint32, 0 },
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   733
 	{ "max-clients-per-query", &cfg_type_uint32, 0 },
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   734
 	{ "max-ncache-ttl", &cfg_type_uint32, 0 },
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   735
+	{ "max-recursion-depth", &cfg_type_uint32, 0 },
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   736
+	{ "max-recursion-queries", &cfg_type_uint32, 0 },
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   737
 	{ "max-udp-size", &cfg_type_uint32, 0 },
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   738
 	{ "min-roots", &cfg_type_uint32, CFG_CLAUSEFLAG_NOTIMP },
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   739
 	{ "minimal-responses", &cfg_type_boolean, 0 },
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   740
diff --git a/version b/version
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   741
index 1be3c16..2058444 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   742
--- a/version
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   743
+++ b/version
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   744
@@ -10,4 +10,4 @@ MINORVER=6
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   745
 PATCHVER=
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   746
 RELEASETYPE=-ESV
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   747
 RELEASEVER=-R11
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   748
-EXTENSIONS=
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   749
+EXTENSIONS=-P1
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   750
diff --git a/lib/isc/counter.c b/lib/isc/counter.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   751
new file mode 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   752
index 0000000..d7d187b
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   753
--- /dev/null
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   754
+++ b/lib/isc/counter.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   755
@@ -0,0 +1,138 @@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   756
+/*
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   757
+ * Copyright (C) 2014  Internet Systems Consortium, Inc. ("ISC")
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   758
+ *
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   759
+ * Permission to use, copy, modify, and/or distribute this software for any
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   760
+ * purpose with or without fee is hereby granted, provided that the above
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   761
+ * copyright notice and this permission notice appear in all copies.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   762
+ *
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   763
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   764
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   765
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   766
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   767
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   768
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   769
+ * PERFORMANCE OF THIS SOFTWARE.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   770
+ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   771
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   772
+/*! \file */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   773
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   774
+#include <config.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   775
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   776
+#include <stddef.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   777
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   778
+#include <isc/counter.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   779
+#include <isc/magic.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   780
+#include <isc/mem.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   781
+#include <isc/util.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   782
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   783
+#define COUNTER_MAGIC			ISC_MAGIC('C', 'n', 't', 'r')
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   784
+#define VALID_COUNTER(r)		ISC_MAGIC_VALID(r, COUNTER_MAGIC)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   785
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   786
+struct isc_counter {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   787
+	unsigned int	magic;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   788
+	isc_mem_t	*mctx;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   789
+	isc_mutex_t	lock;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   790
+	unsigned int	references;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   791
+	unsigned int	limit;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   792
+	unsigned int	used;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   793
+};
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   794
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   795
+isc_result_t
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   796
+isc_counter_create(isc_mem_t *mctx, int limit, isc_counter_t **counterp) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   797
+	isc_result_t result;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   798
+	isc_counter_t *counter;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   799
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   800
+	REQUIRE(counterp != NULL && *counterp == NULL);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   801
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   802
+	counter = isc_mem_get(mctx, sizeof(*counter));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   803
+	if (counter == NULL)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   804
+		return (ISC_R_NOMEMORY);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   805
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   806
+	result = isc_mutex_init(&counter->lock);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   807
+	if (result != ISC_R_SUCCESS) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   808
+		isc_mem_put(mctx, counter, sizeof(*counter));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   809
+		return (result);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   810
+	}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   811
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   812
+	counter->mctx = NULL;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   813
+	isc_mem_attach(mctx, &counter->mctx);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   814
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   815
+	counter->references = 1;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   816
+	counter->limit = limit;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   817
+	counter->used = 0;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   818
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   819
+	counter->magic = COUNTER_MAGIC;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   820
+	*counterp = counter;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   821
+	return (ISC_R_SUCCESS);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   822
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   823
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   824
+isc_result_t
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   825
+isc_counter_increment(isc_counter_t *counter) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   826
+	isc_result_t result = ISC_R_SUCCESS;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   827
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   828
+	LOCK(&counter->lock);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   829
+	counter->used++;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   830
+	if (counter->limit != 0 && counter->used >= counter->limit)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   831
+		result = ISC_R_QUOTA;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   832
+	UNLOCK(&counter->lock);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   833
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   834
+	return (result);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   835
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   836
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   837
+unsigned int
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   838
+isc_counter_used(isc_counter_t *counter) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   839
+	REQUIRE(VALID_COUNTER(counter));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   840
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   841
+	return (counter->used);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   842
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   843
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   844
+void
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   845
+isc_counter_setlimit(isc_counter_t *counter, int limit) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   846
+	REQUIRE(VALID_COUNTER(counter));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   847
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   848
+	LOCK(&counter->lock);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   849
+	counter->limit = limit;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   850
+	UNLOCK(&counter->lock);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   851
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   852
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   853
+void
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   854
+isc_counter_attach(isc_counter_t *source, isc_counter_t **targetp) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   855
+	REQUIRE(VALID_COUNTER(source));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   856
+	REQUIRE(targetp != NULL && *targetp == NULL);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   857
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   858
+	LOCK(&source->lock);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   859
+	source->references++;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   860
+	INSIST(source->references > 0);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   861
+	UNLOCK(&source->lock);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   862
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   863
+	*targetp = source;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   864
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   865
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   866
+static void
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   867
+destroy(isc_counter_t *counter) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   868
+	counter->magic = 0;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   869
+	isc_mutex_destroy(&counter->lock);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   870
+	isc_mem_putanddetach(&counter->mctx, counter, sizeof(*counter));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   871
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   872
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   873
+void
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   874
+isc_counter_detach(isc_counter_t **counterp) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   875
+	isc_counter_t *counter;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   876
+	isc_boolean_t want_destroy = ISC_FALSE;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   877
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   878
+	REQUIRE(counterp != NULL && *counterp != NULL);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   879
+	counter = *counterp;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   880
+	REQUIRE(VALID_COUNTER(counter));
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   881
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   882
+	*counterp = NULL;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   883
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   884
+	LOCK(&counter->lock);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   885
+	INSIST(counter->references > 0);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   886
+	counter->references--;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   887
+	if (counter->references == 0)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   888
+		want_destroy = ISC_TRUE;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   889
+	UNLOCK(&counter->lock);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   890
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   891
+	if (want_destroy)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   892
+		destroy(counter);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   893
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   894
diff --git a/lib/isc/include/isc/counter.h b/lib/isc/include/isc/counter.h
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   895
new file mode 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   896
index 0000000..e7ebd25
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   897
--- /dev/null
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   898
+++ b/lib/isc/include/isc/counter.h
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   899
@@ -0,0 +1,90 @@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   900
+/*
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   901
+ * Copyright (C) 2014  Internet Systems Consortium, Inc. ("ISC")
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   902
+ *
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   903
+ * Permission to use, copy, modify, and/or distribute this software for any
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   904
+ * purpose with or without fee is hereby granted, provided that the above
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   905
+ * copyright notice and this permission notice appear in all copies.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   906
+ *
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   907
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   908
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   909
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   910
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   911
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   912
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   913
+ * PERFORMANCE OF THIS SOFTWARE.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   914
+ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   915
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   916
+#ifndef ISC_COUNTER_H
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   917
+#define ISC_COUNTER_H 1
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   918
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   919
+/*****
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   920
+ ***** Module Info
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   921
+ *****/
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   922
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   923
+/*! \file isc/counter.h
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   924
+ *
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   925
+ * \brief The isc_counter_t object is a simplified version of the
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   926
+ * isc_quota_t object; it tracks the consumption of limited
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   927
+ * resources, returning an error condition when the quota is
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   928
+ * exceeded.  However, unlike isc_quota_t, attaching and detaching
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   929
+ * from a counter object does not increment or decrement the counter.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   930
+ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   931
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   932
+/***
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   933
+ *** Imports.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   934
+ ***/
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   935
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   936
+#include <isc/lang.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   937
+#include <isc/mutex.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   938
+#include <isc/types.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   939
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   940
+/*****
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   941
+ ***** Types.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   942
+ *****/
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   943
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   944
+ISC_LANG_BEGINDECLS
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   945
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   946
+isc_result_t
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   947
+isc_counter_create(isc_mem_t *mctx, int limit, isc_counter_t **counterp);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   948
+/*%<
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   949
+ * Allocate and initialize a counter object.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   950
+ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   951
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   952
+isc_result_t
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   953
+isc_counter_increment(isc_counter_t *counter);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   954
+/*%<
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   955
+ * Increment the counter.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   956
+ *
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   957
+ * If the counter limit is nonzero and has been reached, then
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   958
+ * return ISC_R_QUOTA, otherwise ISC_R_SUCCESS. (The counter is
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   959
+ * incremented regardless of return value.)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   960
+ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   961
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   962
+unsigned int
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   963
+isc_counter_used(isc_counter_t *counter);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   964
+/*%<
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   965
+ * Return the current counter value.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   966
+ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   967
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   968
+void
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   969
+isc_counter_setlimit(isc_counter_t *counter, int limit);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   970
+/*%<
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   971
+ * Set the counter limit.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   972
+ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   973
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   974
+void
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   975
+isc_counter_attach(isc_counter_t *source, isc_counter_t **targetp);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   976
+/*%<
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   977
+ * Attach to a counter object, increasing its reference counter.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   978
+ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   979
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   980
+void
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   981
+isc_counter_detach(isc_counter_t **counterp);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   982
+/*%<
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   983
+ * Detach (and destroy if reference counter has dropped to zero)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   984
+ * a counter object.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   985
+ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   986
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   987
+ISC_LANG_ENDDECLS
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   988
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   989
+#endif /* ISC_COUNTER_H */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   990
diff --git a/lib/isc/tests/counter_test.c b/lib/isc/tests/counter_test.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   991
new file mode 100644
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   992
index 0000000..a7a1997
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   993
--- /dev/null
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   994
+++ b/lib/isc/tests/counter_test.c
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   995
@@ -0,0 +1,69 @@
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   996
+/*
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   997
+ * Copyright (C) 2014  Internet Systems Consortium, Inc. ("ISC")
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   998
+ *
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
   999
+ * Permission to use, copy, modify, and/or distribute this software for any
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1000
+ * purpose with or without fee is hereby granted, provided that the above
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1001
+ * copyright notice and this permission notice appear in all copies.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1002
+ *
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1003
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1004
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1005
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1006
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1007
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1008
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1009
+ * PERFORMANCE OF THIS SOFTWARE.
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1010
+ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1011
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1012
+#include <config.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1013
+#include <stdlib.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1014
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1015
+#include <atf-c.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1016
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1017
+#include <isc/counter.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1018
+#include <isc/result.h>
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1019
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1020
+#include "isctest.h"
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1021
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1022
+ATF_TC(isc_counter);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1023
+ATF_TC_HEAD(isc_counter, tc) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1024
+	atf_tc_set_md_var(tc, "descr", "isc counter object");
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1025
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1026
+ATF_TC_BODY(isc_counter, tc) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1027
+	isc_result_t result;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1028
+	isc_counter_t *counter = NULL;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1029
+	int i;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1030
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1031
+	result = isc_test_begin(NULL, ISC_TRUE);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1032
+	ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1033
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1034
+	result = isc_counter_create(mctx, 0, &counter);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1035
+	ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1036
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1037
+	for (i = 0; i < 10; i++) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1038
+		result = isc_counter_increment(counter);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1039
+		ATF_CHECK_EQ(result, ISC_R_SUCCESS);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1040
+	}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1041
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1042
+	ATF_CHECK_EQ(isc_counter_used(counter), 10);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1043
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1044
+	isc_counter_setlimit(counter, 15);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1045
+	for (i = 0; i < 10; i++) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1046
+		result = isc_counter_increment(counter);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1047
+		if (result != ISC_R_SUCCESS)
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1048
+			break;
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1049
+	}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1050
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1051
+	ATF_CHECK_EQ(isc_counter_used(counter), 15);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1052
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1053
+	isc_counter_detach(&counter);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1054
+	isc_test_end();
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1055
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1056
+
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1057
+/*
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1058
+ * Main
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1059
+ */
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1060
+ATF_TP_ADD_TCS(tp) {
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1061
+	ATF_TP_ADD_TC(tp, isc_counter);
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1062
+	return (atf_no_error());
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1063
+}
4fd4fb5d5c82 20089043 Upgrade Solaris to BIND 9.6-ESV-R11-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
  1064
+