summaryrefslogtreecommitdiffstats
path: root/contrib/unbound/util
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/unbound/util')
-rw-r--r--contrib/unbound/util/alloc.c26
-rw-r--r--contrib/unbound/util/alloc.h38
-rw-r--r--contrib/unbound/util/config_file.c132
-rw-r--r--contrib/unbound/util/config_file.h33
-rw-r--r--contrib/unbound/util/configlexer.c3536
-rw-r--r--contrib/unbound/util/configlexer.lex136
-rw-r--r--contrib/unbound/util/configparser.c2330
-rw-r--r--contrib/unbound/util/configparser.h138
-rw-r--r--contrib/unbound/util/configparser.y68
-rw-r--r--contrib/unbound/util/data/dname.c95
-rw-r--r--contrib/unbound/util/data/dname.h37
-rw-r--r--contrib/unbound/util/data/msgencode.c294
-rw-r--r--contrib/unbound/util/data/msgencode.h31
-rw-r--r--contrib/unbound/util/data/msgparse.c271
-rw-r--r--contrib/unbound/util/data/msgparse.h40
-rw-r--r--contrib/unbound/util/data/msgreply.c128
-rw-r--r--contrib/unbound/util/data/msgreply.h41
-rw-r--r--contrib/unbound/util/data/packed_rrset.c229
-rw-r--r--contrib/unbound/util/data/packed_rrset.h80
-rw-r--r--contrib/unbound/util/fptr_wlist.c22
-rw-r--r--contrib/unbound/util/fptr_wlist.h20
-rw-r--r--contrib/unbound/util/iana_ports.inc26
-rw-r--r--contrib/unbound/util/locks.c20
-rw-r--r--contrib/unbound/util/locks.h20
-rw-r--r--contrib/unbound/util/log.c32
-rw-r--r--contrib/unbound/util/log.h28
-rw-r--r--contrib/unbound/util/mini_event.c24
-rw-r--r--contrib/unbound/util/mini_event.h24
-rw-r--r--contrib/unbound/util/module.c20
-rw-r--r--contrib/unbound/util/module.h139
-rw-r--r--contrib/unbound/util/net_help.c41
-rw-r--r--contrib/unbound/util/net_help.h20
-rw-r--r--contrib/unbound/util/netevent.c229
-rw-r--r--contrib/unbound/util/netevent.h47
-rw-r--r--contrib/unbound/util/random.c21
-rw-r--r--contrib/unbound/util/random.h20
-rw-r--r--contrib/unbound/util/rbtree.c20
-rw-r--r--contrib/unbound/util/rbtree.h20
-rw-r--r--contrib/unbound/util/regional.c20
-rw-r--r--contrib/unbound/util/regional.h20
-rw-r--r--contrib/unbound/util/rtt.c20
-rw-r--r--contrib/unbound/util/rtt.h20
-rw-r--r--contrib/unbound/util/storage/dnstree.c20
-rw-r--r--contrib/unbound/util/storage/dnstree.h20
-rw-r--r--contrib/unbound/util/storage/lookup3.c26
-rw-r--r--contrib/unbound/util/storage/lookup3.h20
-rw-r--r--contrib/unbound/util/storage/lruhash.c20
-rw-r--r--contrib/unbound/util/storage/lruhash.h20
-rw-r--r--contrib/unbound/util/storage/slabhash.c20
-rw-r--r--contrib/unbound/util/storage/slabhash.h20
-rw-r--r--contrib/unbound/util/timehist.c21
-rw-r--r--contrib/unbound/util/timehist.h20
-rw-r--r--contrib/unbound/util/tube.c22
-rw-r--r--contrib/unbound/util/tube.h20
-rw-r--r--contrib/unbound/util/winsock_event.c42
-rw-r--r--contrib/unbound/util/winsock_event.h24
56 files changed, 1534 insertions, 7337 deletions
diff --git a/contrib/unbound/util/alloc.c b/contrib/unbound/util/alloc.c
index b5ccd96..4b81beb 100644
--- a/contrib/unbound/util/alloc.c
+++ b/contrib/unbound/util/alloc.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -601,13 +601,13 @@ char* unbound_lite_wrapstr(char* s)
return n;
}
-#undef ldns_pkt2wire
-ldns_status unbound_lite_pkt2wire(uint8_t **dest, const ldns_pkt *p,
+#undef sldns_pkt2wire
+sldns_status unbound_lite_pkt2wire(uint8_t **dest, const sldns_pkt *p,
size_t *size)
{
uint8_t* md = NULL;
size_t ms = 0;
- ldns_status s = ldns_pkt2wire(&md, p, &ms);
+ sldns_status s = sldns_pkt2wire(&md, p, &ms);
if(md) {
*dest = unbound_stat_malloc_lite(ms, __FILE__, __LINE__,
__func__);
diff --git a/contrib/unbound/util/alloc.h b/contrib/unbound/util/alloc.h
index cb8d6b1..ffd605c 100644
--- a/contrib/unbound/util/alloc.h
+++ b/contrib/unbound/util/alloc.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -201,15 +201,15 @@ void *unbound_stat_realloc_lite(void *ptr, size_t size, const char* file,
char* unbound_strdup_lite(const char* s, const char* file, int line,
const char* func);
char* unbound_lite_wrapstr(char* s);
-# define ldns_rr2str(rr) unbound_lite_wrapstr(ldns_rr2str(rr))
-# define ldns_rdf2str(rdf) unbound_lite_wrapstr(ldns_rdf2str(rdf))
-# define ldns_rr_type2str(t) unbound_lite_wrapstr(ldns_rr_type2str(t))
-# define ldns_rr_class2str(c) unbound_lite_wrapstr(ldns_rr_class2str(c))
-# define ldns_rr_list2str(r) unbound_lite_wrapstr(ldns_rr_list2str(r))
-# define ldns_pkt2str(p) unbound_lite_wrapstr(ldns_pkt2str(p))
-# define ldns_pkt_rcode2str(r) unbound_lite_wrapstr(ldns_pkt_rcode2str(r))
-# define ldns_pkt2wire(a, r, s) unbound_lite_pkt2wire(a, r, s)
-ldns_status unbound_lite_pkt2wire(uint8_t **dest, const ldns_pkt *p, size_t *size);
+# define sldns_rr2str(rr) unbound_lite_wrapstr(sldns_rr2str(rr))
+# define sldns_rdf2str(rdf) unbound_lite_wrapstr(sldns_rdf2str(rdf))
+# define sldns_rr_type2str(t) unbound_lite_wrapstr(sldns_rr_type2str(t))
+# define sldns_rr_class2str(c) unbound_lite_wrapstr(sldns_rr_class2str(c))
+# define sldns_rr_list2str(r) unbound_lite_wrapstr(sldns_rr_list2str(r))
+# define sldns_pkt2str(p) unbound_lite_wrapstr(sldns_pkt2str(p))
+# define sldns_pkt_rcode2str(r) unbound_lite_wrapstr(sldns_pkt_rcode2str(r))
+# define sldns_pkt2wire(a, r, s) unbound_lite_pkt2wire(a, r, s)
+sldns_status unbound_lite_pkt2wire(uint8_t **dest, const sldns_pkt *p, size_t *size);
# define i2d_DSA_SIG(d, s) unbound_lite_i2d_DSA_SIG(d, s)
int unbound_lite_i2d_DSA_SIG(DSA_SIG* dsasig, unsigned char** sig);
#endif /* UNBOUND_ALLOC_LITE */
diff --git a/contrib/unbound/util/config_file.c b/contrib/unbound/util/config_file.c
index ebfb795..f8341cc 100644
--- a/contrib/unbound/util/config_file.c
+++ b/contrib/unbound/util/config_file.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -41,18 +41,22 @@
#include "config.h"
#include <ctype.h>
-#include <ldns/ldns.h>
+#include <stdarg.h>
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
#include "util/log.h"
-
#include "util/configyyrename.h"
#include "util/config_file.h"
-#include "util/configparser.h"
+#include "configparser.h"
#include "util/net_help.h"
#include "util/data/msgparse.h"
#include "util/module.h"
#include "util/regional.h"
#include "util/fptr_wlist.h"
#include "util/data/dname.h"
+#include "ldns/wire2str.h"
+#include "ldns/parseutil.h"
#ifdef HAVE_GLOB_H
# include <glob.h>
#endif
@@ -122,6 +126,7 @@ config_create(void)
cfg->prefetch_key = 0;
cfg->infra_cache_slabs = 4;
cfg->infra_cache_numhosts = 10000;
+ cfg->delay_close = 0;
if(!(cfg->outgoing_avail_ports = (int*)calloc(65536, sizeof(int))))
goto error_exit;
init_outgoing_availports(cfg->outgoing_avail_ports, 65536);
@@ -140,6 +145,7 @@ config_create(void)
cfg->if_automatic = 0;
cfg->so_rcvbuf = 0;
cfg->so_sndbuf = 0;
+ cfg->so_reuseport = 0;
cfg->num_ifs = 0;
cfg->ifs = NULL;
cfg->num_out_ifs = 0;
@@ -185,12 +191,14 @@ config_create(void)
cfg->local_zones = NULL;
cfg->local_zones_nodefault = NULL;
cfg->local_data = NULL;
+ cfg->unblock_lan_zones = 0;
cfg->python_script = NULL;
cfg->remote_control_enable = 0;
cfg->control_ifs = NULL;
cfg->control_port = UNBOUND_CONTROL_PORT;
cfg->minimal_responses = 0;
cfg->rrset_roundrobin = 0;
+ cfg->max_udp_size = 4096;
if(!(cfg->server_key_file = strdup(RUN_DIR"/unbound_server.key")))
goto error_exit;
if(!(cfg->server_cert_file = strdup(RUN_DIR"/unbound_server.pem")))
@@ -317,7 +325,11 @@ int config_set_option(struct config_file* cfg, const char* opt,
cfg->use_syslog = 0;
free(cfg->logfile);
return (cfg->logfile = strdup(val)) != NULL;
- }
+ }
+ else if(strcmp(opt, "log-time-ascii:") == 0)
+ { IS_YES_OR_NO; cfg->log_time_ascii = (strcmp(val, "yes") == 0);
+ log_set_time_asc(cfg->log_time_ascii); }
+ else S_SIZET_NONZERO("max-udp-size:", max_udp_size)
else S_YNO("use-syslog:", use_syslog)
else S_YNO("extended-statistics:", stat_extended)
else S_YNO("statistics-cumulative:", stat_cumulative)
@@ -344,14 +356,19 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_SIZET_OR_ZERO("jostle-timeout:", jostle_time)
else S_MEMSIZE("so-rcvbuf:", so_rcvbuf)
else S_MEMSIZE("so-sndbuf:", so_sndbuf)
+ else S_YNO("so-reuseport:", so_reuseport)
else S_MEMSIZE("rrset-cache-size:", rrset_cache_size)
else S_POW2("rrset-cache-slabs:", rrset_cache_slabs)
else S_YNO("prefetch:", prefetch)
else S_YNO("prefetch-key:", prefetch_key)
- else S_NUMBER_OR_ZERO("cache-max-ttl:", max_ttl)
+ else if(strcmp(opt, "cache-max-ttl:") == 0)
+ { IS_NUMBER_OR_ZERO; cfg->max_ttl = atoi(val); MAX_TTL=(time_t)cfg->max_ttl;}
+ else if(strcmp(opt, "cache-min-ttl:") == 0)
+ { IS_NUMBER_OR_ZERO; cfg->min_ttl = atoi(val); MIN_TTL=(time_t)cfg->min_ttl;}
else S_NUMBER_OR_ZERO("infra-host-ttl:", host_ttl)
else S_POW2("infra-cache-slabs:", infra_cache_slabs)
else S_SIZET_NONZERO("infra-cache-numhosts:", infra_cache_numhosts)
+ else S_NUMBER_OR_ZERO("delay-close:", delay_close)
else S_STR("chroot:", chrootdir)
else S_STR("username:", username)
else S_STR("directory:", directory)
@@ -398,6 +415,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_YNO("minimal-responses:", minimal_responses)
else S_YNO("rrset-roundrobin:", rrset_roundrobin)
else S_STRLIST("local-data:", local_data)
+ else S_YNO("unblock-lan-zones:", unblock_lan_zones)
else S_YNO("control-enable:", remote_control_enable)
else S_STRLIST("control-interface:", control_ifs)
else S_NUMBER_NONZERO("control-port:", control_port)
@@ -407,6 +425,12 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_STR("control-cert-file:", control_cert_file)
else S_STR("module-config:", module_conf)
else S_STR("python-script:", python_script)
+ /* val_sig_skew_min and max are copied into val_env during init,
+ * so this does not update val_env with set_option */
+ else if(strcmp(opt, "val-sig-skew-min:") == 0)
+ { IS_NUMBER_OR_ZERO; cfg->val_sig_skew_min = (int32_t)atoi(val); }
+ else if(strcmp(opt, "val-sig-skew-max:") == 0)
+ { IS_NUMBER_OR_ZERO; cfg->val_sig_skew_max = (int32_t)atoi(val); }
else if (strcmp(opt, "outgoing-interface:") == 0) {
char* d = strdup(val);
char** oi = (char**)malloc((cfg->num_out_ifs+1)*sizeof(char*));
@@ -506,8 +530,9 @@ config_collate_cat(struct config_strlist* list)
return NULL;
}
snprintf(w, left, "%s\n", s->str);
- w += this+1;
- left -= this+1;
+ this = strlen(w);
+ w += this;
+ left -= this;
}
return r;
}
@@ -562,6 +587,7 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_YNO(opt, "statistics-cumulative", stat_cumulative)
else O_YNO(opt, "extended-statistics", stat_extended)
else O_YNO(opt, "use-syslog", use_syslog)
+ else O_YNO(opt, "log-time-ascii", log_time_ascii)
else O_DEC(opt, "num-threads", num_threads)
else O_IFC(opt, "interface", num_ifs, ifs)
else O_IFC(opt, "outgoing-interface", num_out_ifs, out_ifs)
@@ -578,14 +604,17 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_UNS(opt, "jostle-timeout", jostle_time)
else O_MEM(opt, "so-rcvbuf", so_rcvbuf)
else O_MEM(opt, "so-sndbuf", so_sndbuf)
+ else O_YNO(opt, "so-reuseport", so_reuseport)
else O_MEM(opt, "rrset-cache-size", rrset_cache_size)
else O_DEC(opt, "rrset-cache-slabs", rrset_cache_slabs)
else O_YNO(opt, "prefetch-key", prefetch_key)
else O_YNO(opt, "prefetch", prefetch)
else O_DEC(opt, "cache-max-ttl", max_ttl)
+ else O_DEC(opt, "cache-min-ttl", min_ttl)
else O_DEC(opt, "infra-host-ttl", host_ttl)
else O_DEC(opt, "infra-cache-slabs", infra_cache_slabs)
else O_MEM(opt, "infra-cache-numhosts", infra_cache_numhosts)
+ else O_UNS(opt, "delay-close", delay_close)
else O_YNO(opt, "do-ip4", do_ip4)
else O_YNO(opt, "do-ip6", do_ip6)
else O_YNO(opt, "do-udp", do_udp)
@@ -651,6 +680,11 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_UNS(opt, "val-override-date", val_date_override)
else O_YNO(opt, "minimal-responses", minimal_responses)
else O_YNO(opt, "rrset-roundrobin", rrset_roundrobin)
+ else O_YNO(opt, "unblock-lan-zones", unblock_lan_zones)
+ else O_DEC(opt, "max-udp-size", max_udp_size)
+ else O_STR(opt, "python-script", python_script)
+ else O_DEC(opt, "val-sig-skew-min", val_sig_skew_min)
+ else O_DEC(opt, "val-sig-skew-max", val_sig_skew_max)
/* not here:
* outgoing-permit, outgoing-avoid - have list of ports
* local-zone - zones and nodefault variables
@@ -674,6 +708,7 @@ create_cfg_parser(struct config_file* cfg, char* filename, const char* chroot)
cfg_parser->errors = 0;
cfg_parser->cfg = cfg;
cfg_parser->chroot = chroot;
+ init_cfg_parse();
}
int
@@ -1030,10 +1065,10 @@ cfg_str2list_insert(struct config_str2list** head, char* item, char* i2)
return 1;
}
-uint32_t
+time_t
cfg_convert_timeval(const char* str)
{
- uint32_t t;
+ time_t t;
struct tm tm;
memset(&tm, 0, sizeof(tm));
if(strlen(str) < 14)
@@ -1051,7 +1086,7 @@ cfg_convert_timeval(const char* str)
if (tm.tm_min < 0 || tm.tm_min > 59) return 0;
if (tm.tm_sec < 0 || tm.tm_sec > 59) return 0;
/* call ldns conversion function */
- t = mktime_from_utc(&tm);
+ t = sldns_mktime_from_utc(&tm);
return t;
}
@@ -1137,8 +1172,8 @@ cfg_parse_memsize(const char* str, size_t* res)
void
config_apply(struct config_file* config)
{
- MAX_TTL = (uint32_t)config->max_ttl;
- MIN_TTL = (uint32_t)config->min_ttl;
+ MAX_TTL = (time_t)config->max_ttl;
+ MIN_TTL = (time_t)config->min_ttl;
EDNS_ADVERTISED_SIZE = (uint16_t)config->edns_buffer_size;
MINIMAL_RESPONSES = config->minimal_responses;
RRSET_ROUNDROBIN = config->rrset_roundrobin;
@@ -1199,9 +1234,9 @@ strlen_after_chroot(const char* fname, struct config_file* cfg, int use_chdir)
char*
fname_after_chroot(const char* fname, struct config_file* cfg, int use_chdir)
{
- size_t len = strlen_after_chroot(fname, cfg, use_chdir);
+ size_t len = strlen_after_chroot(fname, cfg, use_chdir)+1;
int slashit = 0;
- char* buf = (char*)malloc(len+1);
+ char* buf = (char*)malloc(len);
if(!buf)
return NULL;
buf[0] = 0;
@@ -1209,14 +1244,14 @@ fname_after_chroot(const char* fname, struct config_file* cfg, int use_chdir)
if(cfg->chrootdir && cfg->chrootdir[0] &&
strncmp(cfg->chrootdir, fname, strlen(cfg->chrootdir)) == 0) {
/* already full pathname, return it */
- strncpy(buf, fname, len);
- buf[len] = 0;
+ (void)strlcpy(buf, fname, len);
+ buf[len-1] = 0;
return buf;
}
/* chroot */
if(cfg->chrootdir && cfg->chrootdir[0]) {
/* start with chrootdir */
- strncpy(buf, cfg->chrootdir, len);
+ (void)strlcpy(buf, cfg->chrootdir, len);
slashit = 1;
}
#ifdef UB_ON_WINDOWS
@@ -1230,21 +1265,21 @@ fname_after_chroot(const char* fname, struct config_file* cfg, int use_chdir)
} else if(cfg->directory && cfg->directory[0]) {
/* prepend chdir */
if(slashit && cfg->directory[0] != '/')
- strncat(buf, "/", len-strlen(buf));
+ (void)strlcat(buf, "/", len);
/* is the directory already in the chroot? */
if(cfg->chrootdir && cfg->chrootdir[0] &&
strncmp(cfg->chrootdir, cfg->directory,
strlen(cfg->chrootdir)) == 0)
- strncat(buf, cfg->directory+strlen(cfg->chrootdir),
- len-strlen(buf));
- else strncat(buf, cfg->directory, len-strlen(buf));
+ (void)strlcat(buf, cfg->directory+strlen(cfg->chrootdir),
+ len);
+ else (void)strlcat(buf, cfg->directory, len);
slashit = 1;
}
/* fname */
if(slashit && fname[0] != '/')
- strncat(buf, "/", len-strlen(buf));
- strncat(buf, fname, len-strlen(buf));
- buf[len] = 0;
+ (void)strlcat(buf, "/", len);
+ (void)strlcat(buf, fname, len);
+ buf[len-1] = 0;
return buf;
}
@@ -1295,7 +1330,7 @@ cfg_parse_local_zone(struct config_file* cfg, const char* val)
log_err("syntax error: bad zone name: %s", val);
return 0;
}
- strncpy(buf, name, (size_t)(name_end-name));
+ (void)strlcpy(buf, name, sizeof(buf));
buf[name_end-name] = '\0';
type = last_space_pos(name_end);
@@ -1485,18 +1520,11 @@ char* errinf_to_str(struct module_qstate* qstate)
size_t left = sizeof(buf);
struct config_strlist* s;
char dname[LDNS_MAX_DOMAINLEN+1];
- char* t = ldns_rr_type2str(qstate->qinfo.qtype);
- char* c = ldns_rr_class2str(qstate->qinfo.qclass);
- if(!t || !c) {
- free(t);
- free(c);
- log_err("malloc failure in errinf_to_str");
- return NULL;
- }
+ char t[16], c[16];
+ sldns_wire2str_type_buf(qstate->qinfo.qtype, t, sizeof(t));
+ sldns_wire2str_class_buf(qstate->qinfo.qclass, c, sizeof(c));
dname_str(qstate->qinfo.qname, dname);
snprintf(p, left, "validation failure <%s %s %s>:", dname, t, c);
- free(t);
- free(c);
left -= strlen(p); p += strlen(p);
if(!qstate->errinf)
snprintf(p, left, " misc failure");
@@ -1514,21 +1542,13 @@ void errinf_rrset(struct module_qstate* qstate, struct ub_packed_rrset_key *rr)
{
char buf[1024];
char dname[LDNS_MAX_DOMAINLEN+1];
- char *t, *c;
+ char t[16], c[16];
if(qstate->env->cfg->val_log_level < 2 || !rr)
return;
- t = ldns_rr_type2str(ntohs(rr->rk.type));
- c = ldns_rr_class2str(ntohs(rr->rk.rrset_class));
- if(!t || !c) {
- free(t);
- free(c);
- log_err("malloc failure in errinf_rrset");
- return;
- }
+ sldns_wire2str_type_buf(ntohs(rr->rk.type), t, sizeof(t));
+ sldns_wire2str_class_buf(ntohs(rr->rk.rrset_class), c, sizeof(c));
dname_str(rr->rk.dname, dname);
snprintf(buf, sizeof(buf), "for <%s %s %s>", dname, t, c);
- free(t);
- free(c);
errinf(qstate, buf);
}
diff --git a/contrib/unbound/util/config_file.h b/contrib/unbound/util/config_file.h
index e790cec..f041df1 100644
--- a/contrib/unbound/util/config_file.h
+++ b/contrib/unbound/util/config_file.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -119,6 +119,8 @@ struct config_file {
size_t infra_cache_slabs;
/** max number of hosts in the infra cache */
size_t infra_cache_numhosts;
+ /** delay close of udp-timeouted ports, if 0 no delayclose. in msec */
+ int delay_close;
/** the target fetch policy for the iterator */
char* target_fetch_policy;
@@ -130,6 +132,8 @@ struct config_file {
size_t so_rcvbuf;
/** SO_SNDBUF size to set on port 53 UDP socket */
size_t so_sndbuf;
+ /** SO_REUSEPORT requested on port 53 sockets */
+ int so_reuseport;
/** number of interfaces to open. If 0 default all interfaces. */
int num_ifs;
@@ -269,6 +273,8 @@ struct config_file {
struct config_strlist* local_zones_nodefault;
/** local data RRs configged */
struct config_strlist* local_data;
+ /** unblock lan zones (reverse lookups for 10/8 and so on) */
+ int unblock_lan_zones;
/** remote control section. enable toggle. */
int remote_control_enable;
@@ -296,6 +302,9 @@ struct config_file {
/* RRSet roundrobin */
int rrset_roundrobin;
+
+ /* maximum UDP response size */
+ size_t max_udp_size;
};
/**
@@ -493,7 +502,7 @@ void config_delstubs(struct config_stub* list);
* @param str: string of 14 digits
* @return time value or 0 for error.
*/
-uint32_t cfg_convert_timeval(const char* str);
+time_t cfg_convert_timeval(const char* str);
/**
* Count number of values in the string.
@@ -632,6 +641,8 @@ struct config_parser_state {
/** global config parser object used during config parsing */
extern struct config_parser_state* cfg_parser;
+/** init lex state */
+void init_cfg_parse(void);
/** lex in file */
extern FILE* ub_c_in;
/** lex out file */
diff --git a/contrib/unbound/util/configlexer.c b/contrib/unbound/util/configlexer.c
deleted file mode 100644
index 505c787..0000000
--- a/contrib/unbound/util/configlexer.c
+++ /dev/null
@@ -1,3536 +0,0 @@
-#include "config.h"
-#include "util/configyyrename.h"
-
-#line 3 "<stdout>"
-
-#define YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 37
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
-
-/* First, we deal with platform-specific or compiler-specific issues. */
-
-#if defined(__FreeBSD__)
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS
-#endif
-#include <sys/cdefs.h>
-#include <stdint.h>
-#else
-#define __dead2
-#endif
-
-/* begin standard C headers. */
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-
-/* end standard C headers. */
-
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if defined(__FreeBSD__) || \
- (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L)
-
-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types.
- */
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS 1
-#endif
-
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t;
-typedef unsigned short int flex_uint16_t;
-typedef unsigned int flex_uint32_t;
-
-/* Limits of integral types. */
-#ifndef INT8_MIN
-#define INT8_MIN (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX (4294967295U)
-#endif
-
-#endif /* ! C99 */
-
-#endif /* ! FLEXINT_H */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else /* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif /* defined (__STDC__) */
-#endif /* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index. If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-/* Enter a start condition. This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN (yy_start) = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state. The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START (((yy_start) - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart(yyin )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
-#define YY_BUF_SIZE 16384
-#endif
-
-/* The state buf must be large enough to hold one state per character in the main buffer.
- */
-#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-extern yy_size_t yyleng;
-
-extern FILE *yyin, *yyout;
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
- #define YY_LESS_LINENO(n)
-
-/* Return all but the first "n" matched characters back to the input stream. */
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up yytext. */ \
- int yyless_macro_arg = (n); \
- YY_LESS_LINENO(yyless_macro_arg);\
- *yy_cp = (yy_hold_char); \
- YY_RESTORE_YY_MORE_OFFSET \
- (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
- YY_DO_BEFORE_ACTION; /* set up yytext again */ \
- } \
- while ( 0 )
-
-#define unput(c) yyunput( c, (yytext_ptr) )
-
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
-struct yy_buffer_state
- {
- FILE *yy_input_file;
-
- char *yy_ch_buf; /* input buffer */
- char *yy_buf_pos; /* current position in input buffer */
-
- /* Size of input buffer in bytes, not including room for EOB
- * characters.
- */
- yy_size_t yy_buf_size;
-
- /* Number of characters read into yy_ch_buf, not including EOB
- * characters.
- */
- yy_size_t yy_n_chars;
-
- /* Whether we "own" the buffer - i.e., we know we created it,
- * and can realloc() it to grow it, and should free() it to
- * delete it.
- */
- int yy_is_our_buffer;
-
- /* Whether this is an "interactive" input source; if so, and
- * if we're using stdio for input, then we want to use getc()
- * instead of fread(), to make sure we stop fetching input after
- * each newline.
- */
- int yy_is_interactive;
-
- /* Whether we're considered to be at the beginning of a line.
- * If so, '^' rules will be active on the next match, otherwise
- * not.
- */
- int yy_at_bol;
-
- int yy_bs_lineno; /**< The line count. */
- int yy_bs_column; /**< The column count. */
-
- /* Whether to try to fill the input buffer when we reach the
- * end of it.
- */
- int yy_fill_buffer;
-
- int yy_buffer_status;
-
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
- /* When an EOF's been seen but there's still some text to process
- * then we mark the buffer as YY_EOF_PENDING, to indicate that we
- * shouldn't try reading from the input source any more. We might
- * still have a bunch of tokens to match, though, because of
- * possible backing-up.
- *
- * When we actually see the EOF, we change the status to "new"
- * (via yyrestart()), so that the user can continue scanning by
- * just pointing yyin at a new input file.
- */
-#define YY_BUFFER_EOF_PENDING 2
-
- };
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-/* Stack of input buffers. */
-static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
-static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- *
- * Returns the top of the stack, or NULL.
- */
-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
- ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
- : NULL)
-#define yy_current_buffer YY_CURRENT_BUFFER
-
-/* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-
-/* yy_hold_char holds the character lost when yytext is formed. */
-static char yy_hold_char;
-static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
-yy_size_t yyleng;
-
-/* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 0; /* whether we need to initialize */
-static int yy_start = 0; /* start state number */
-
-/* Flag which is used to allow yywrap()'s to do buffer switches
- * instead of setting up a fresh yyin. A bit of a hack ...
- */
-static int yy_did_buffer_switch_on_eof;
-
-void yyrestart (FILE *input_file );
-void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
-YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
-void yy_delete_buffer (YY_BUFFER_STATE b );
-void yy_flush_buffer (YY_BUFFER_STATE b );
-void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
-void yypop_buffer_state (void );
-
-static void yyensure_buffer_stack (void );
-static void yy_load_buffer_state (void );
-static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
-
-#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
-
-YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
-YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
-YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len );
-
-void *yyalloc (yy_size_t );
-void *yyrealloc (void *,yy_size_t );
-void yyfree (void * );
-
-#define yy_new_buffer yy_create_buffer
-
-#define yy_set_interactive(is_interactive) \
- { \
- if ( ! YY_CURRENT_BUFFER ){ \
- yyensure_buffer_stack (); \
- YY_CURRENT_BUFFER_LVALUE = \
- yy_create_buffer(yyin,YY_BUF_SIZE ); \
- } \
- YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
- }
-
-#define yy_set_bol(at_bol) \
- { \
- if ( ! YY_CURRENT_BUFFER ){\
- yyensure_buffer_stack (); \
- YY_CURRENT_BUFFER_LVALUE = \
- yy_create_buffer(yyin,YY_BUF_SIZE ); \
- } \
- YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
- }
-
-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-
-/* Begin user sect3 */
-
-typedef unsigned char YY_CHAR;
-
-FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
-
-typedef int yy_state_type;
-
-extern int yylineno;
-
-int yylineno = 1;
-
-extern char *yytext;
-#define yytext_ptr yytext
-
-static yy_state_type yy_get_previous_state (void );
-static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
-static int yy_get_next_buffer (void );
-static void yy_fatal_error (yyconst char msg[] ) __dead2;
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
- */
-#define YY_DO_BEFORE_ACTION \
- (yytext_ptr) = yy_bp; \
- (yytext_ptr) -= (yy_more_len); \
- yyleng = (size_t) (yy_cp - (yytext_ptr)); \
- (yy_hold_char) = *yy_cp; \
- *yy_cp = '\0'; \
- (yy_c_buf_p) = yy_cp;
-
-#define YY_NUM_RULES 142
-#define YY_END_OF_BUFFER 143
-/* This struct is not used in this scanner,
- but its presence is necessary. */
-struct yy_trans_info
- {
- flex_int32_t yy_verify;
- flex_int32_t yy_nxt;
- };
-static yyconst flex_int16_t yy_accept[1343] =
- { 0,
- 1, 1, 124, 124, 128, 128, 132, 132, 136, 136,
- 1, 1, 143, 140, 1, 122, 122, 141, 2, 141,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 124,
- 125, 125, 126, 141, 128, 129, 129, 130, 141, 135,
- 132, 133, 133, 134, 141, 136, 137, 137, 138, 141,
- 139, 123, 2, 127, 141, 139, 140, 0, 1, 2,
- 2, 2, 2, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
-
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 124,
- 0, 128, 0, 135, 0, 132, 136, 0, 139, 0,
- 2, 2, 139, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 139, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
-
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 139,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 62, 140, 140,
- 140, 140, 140, 6, 140, 140, 140, 140, 140, 140,
-
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 139, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
-
- 140, 140, 140, 140, 139, 140, 140, 140, 140, 27,
- 140, 140, 140, 140, 140, 12, 13, 140, 15, 14,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 118, 140, 140, 140, 140,
- 140, 3, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 139, 140, 140, 140, 140, 140, 140, 140, 140, 140,
-
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 131, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 30,
- 140, 140, 140, 140, 140, 140, 140, 140, 31, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 77, 131, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
-
- 140, 140, 140, 140, 140, 140, 140, 76, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 60, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 20, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 28, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 29, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
-
- 140, 140, 140, 22, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 25, 26, 140, 140, 140, 63, 140, 64,
- 140, 61, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 5, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 79,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 104, 103, 140,
-
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 32, 140, 140,
- 140, 140, 140, 140, 140, 66, 65, 140, 140, 140,
- 140, 140, 140, 100, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 51, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 102, 140, 140, 140, 140, 140, 140, 140, 140,
- 4, 140, 140, 140, 140, 140, 140, 140, 140, 140,
-
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 97, 140, 140, 140, 140, 140, 140, 140,
- 112, 98, 140, 21, 140, 140, 140, 140, 68, 140,
- 69, 67, 140, 140, 140, 140, 140, 140, 75, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 99, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 59, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 17, 140, 140, 140, 16,
- 140, 84, 140, 140, 140, 140, 140, 140, 140, 140,
-
- 140, 140, 140, 140, 39, 40, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 70, 140, 140, 140,
- 140, 140, 74, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 78, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 117,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 88, 140, 92, 140, 140,
- 140, 140, 73, 140, 140, 110, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 91,
- 140, 140, 140, 140, 41, 42, 140, 47, 93, 140,
-
- 105, 101, 140, 140, 35, 140, 95, 140, 140, 140,
- 140, 140, 7, 140, 58, 109, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 80, 140, 140, 119, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 94, 140, 34, 36,
- 140, 140, 140, 140, 140, 57, 140, 140, 140, 140,
- 113, 18, 19, 140, 140, 140, 140, 140, 140, 55,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 115,
- 140, 140, 33, 140, 140, 140, 140, 140, 140, 11,
-
- 140, 140, 140, 140, 140, 140, 140, 10, 140, 140,
- 37, 140, 121, 114, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 87, 86, 140, 116, 111, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 43,
- 140, 120, 140, 140, 140, 140, 38, 140, 140, 140,
- 81, 83, 140, 140, 140, 85, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 23, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 108, 140, 140, 140, 140, 140, 140,
- 140, 24, 140, 9, 140, 140, 106, 48, 140, 140,
-
- 140, 90, 140, 71, 140, 140, 140, 50, 54, 49,
- 140, 44, 140, 8, 140, 140, 89, 140, 140, 140,
- 53, 140, 45, 140, 107, 140, 140, 82, 72, 52,
- 46, 140, 140, 140, 140, 56, 140, 140, 140, 140,
- 96, 0
- } ;
-
-static yyconst flex_int32_t yy_ec[256] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
- 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 1, 5, 6, 1, 1, 1, 7, 1,
- 1, 1, 1, 1, 8, 1, 1, 1, 1, 1,
- 9, 10, 1, 11, 1, 1, 1, 12, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 13, 1, 1, 1, 1, 14, 15, 16, 17,
-
- 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
- 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
- 38, 39, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1
- } ;
-
-static yyconst flex_int32_t yy_meta[40] =
- { 0,
- 1, 2, 3, 4, 5, 1, 6, 1, 1, 1,
- 1, 7, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1
- } ;
-
-static yyconst flex_int16_t yy_base[1357] =
- { 0,
- 0, 0, 37, 40, 44, 51, 63, 75, 56, 68,
- 87, 108, 2577, 2563, 50, 2683, 2683, 2683, 129, 94,
- 70, 104, 122, 90, 92, 115, 126, 95, 84, 132,
- 135, 138, 50, 142, 148, 156, 169, 164, 179, 2493,
- 2683, 2683, 2683, 70, 2371, 2683, 2683, 2683, 42, 2326,
- 1987, 2683, 2683, 2683, 197, 1681, 2683, 2683, 2683, 154,
- 1191, 2683, 201, 2683, 205, 111, 1082, 211, 120, 0,
- 222, 0, 0, 103, 158, 165, 149, 155, 168, 206,
- 207, 198, 217, 209, 204, 208, 215, 177, 136, 227,
- 228, 219, 232, 236, 235, 240, 245, 229, 246, 247,
-
- 250, 251, 254, 256, 258, 262, 259, 263, 266, 269,
- 267, 276, 268, 271, 273, 49, 280, 281, 283, 853,
- 297, 751, 301, 603, 311, 572, 360, 299, 298, 315,
- 319, 0, 296, 312, 320, 314, 316, 318, 321, 327,
- 323, 330, 342, 331, 326, 334, 335, 336, 338, 347,
- 337, 353, 348, 344, 350, 355, 359, 372, 369, 367,
- 357, 379, 377, 385, 386, 383, 387, 384, 388, 389,
- 391, 392, 395, 396, 397, 398, 405, 402, 406, 403,
- 414, 412, 420, 418, 428, 424, 425, 427, 430, 434,
- 435, 432, 433, 441, 439, 444, 452, 448, 450, 454,
-
- 455, 458, 461, 460, 462, 466, 473, 469, 470, 472,
- 477, 475, 478, 479, 485, 481, 482, 483, 486, 492,
- 487, 504, 498, 508, 501, 502, 510, 513, 509, 515,
- 520, 522, 528, 524, 525, 526, 527, 531, 534, 537,
- 533, 536, 539, 540, 545, 546, 565, 551, 549, 553,
- 556, 555, 562, 576, 563, 572, 573, 569, 578, 585,
- 596, 586, 591, 595, 598, 597, 600, 601, 602, 605,
- 608, 610, 609, 620, 623, 622, 621, 624, 630, 638,
- 625, 632, 635, 639, 643, 634, 644, 2683, 649, 636,
- 651, 652, 642, 2683, 653, 656, 658, 660, 662, 668,
-
- 664, 666, 667, 669, 674, 675, 677, 697, 680, 678,
- 690, 681, 686, 683, 692, 689, 699, 702, 706, 707,
- 709, 710, 712, 715, 716, 726, 722, 718, 724, 728,
- 732, 733, 735, 738, 739, 743, 747, 753, 755, 757,
- 763, 740, 759, 762, 765, 767, 768, 749, 775, 772,
- 774, 778, 779, 787, 776, 789, 791, 793, 783, 794,
- 797, 805, 801, 803, 808, 810, 784, 804, 814, 813,
- 820, 827, 828, 812, 829, 835, 831, 836, 824, 837,
- 839, 840, 841, 843, 844, 846, 848, 854, 850, 856,
- 861, 862, 866, 851, 868, 871, 872, 873, 874, 883,
-
- 875, 884, 876, 886, 887, 894, 895, 889, 902, 2683,
- 901, 904, 898, 905, 906, 2683, 2683, 890, 2683, 2683,
- 909, 914, 915, 917, 922, 923, 925, 927, 930, 932,
- 935, 936, 938, 944, 946, 939, 947, 948, 950, 954,
- 955, 957, 961, 963, 964, 965, 968, 970, 972, 974,
- 975, 981, 977, 988, 984, 2683, 986, 987, 991, 993,
- 994, 2683, 995, 996, 998, 999, 1000, 1002, 1006, 1004,
- 1007, 1014, 1013, 1009, 1012, 1019, 1029, 1030, 1025, 1028,
- 1031, 1035, 1037, 1046, 1039, 1043, 1045, 1052, 1048, 1050,
- 1054, 1051, 1055, 1057, 1060, 1063, 1085, 1065, 1062, 1064,
-
- 1067, 1070, 1072, 1074, 1078, 1092, 1097, 1075, 1071, 1103,
- 1105, 1099, 1095, 1106, 1112, 1113, 2683, 1119, 1120, 1108,
- 1115, 1116, 1122, 1124, 1129, 1126, 1130, 1132, 1138, 2683,
- 1135, 1136, 1137, 1140, 1147, 1139, 1149, 1159, 2683, 1161,
- 1162, 1155, 1157, 1164, 1165, 1167, 1169, 1170, 1171, 1173,
- 1181, 1176, 1178, 1183, 1182, 1187, 1189, 1190, 1192, 1193,
- 1194, 1199, 1204, 1210, 1213, 1201, 1218, 1195, 1207, 1211,
- 1224, 1219, 1222, 1225, 1226, 2683, 174, 1227, 1228, 1229,
- 1235, 1238, 1234, 1232, 1236, 1240, 1242, 1247, 1253, 1248,
- 1254, 1255, 1256, 1259, 1258, 1261, 1267, 1268, 1269, 1270,
-
- 1271, 1272, 1273, 1274, 1279, 1278, 1286, 2683, 1292, 1285,
- 1281, 1288, 1296, 1305, 1297, 1302, 1312, 1313, 1315, 1316,
- 1317, 1319, 1309, 1322, 1330, 1331, 1327, 1329, 1328, 1334,
- 2683, 1335, 1336, 1338, 1341, 1343, 1349, 1347, 1348, 1350,
- 1353, 1359, 2683, 1303, 1360, 1354, 1364, 1367, 1369, 1371,
- 1378, 1370, 1374, 1372, 1381, 1382, 1383, 1384, 2683, 1393,
- 1397, 1394, 1401, 1395, 1398, 1402, 1406, 1403, 1385, 1412,
- 1409, 1410, 1414, 1415, 1411, 1418, 1419, 1421, 2683, 1425,
- 1422, 1427, 1428, 1434, 1426, 1435, 1436, 1438, 1441, 1447,
- 1440, 1451, 1442, 1453, 1450, 1460, 1461, 1464, 1463, 1466,
-
- 1472, 1478, 1474, 2683, 1477, 1465, 1480, 1486, 1488, 1483,
- 1489, 1490, 1491, 1498, 1492, 1494, 1495, 1496, 1503, 1500,
- 1501, 1504, 1507, 1506, 1518, 1519, 1520, 1523, 1524, 1526,
- 1525, 1532, 2683, 2683, 1533, 1534, 1541, 2683, 1543, 2683,
- 1547, 2683, 1548, 1549, 1537, 1539, 1553, 1544, 1555, 1556,
- 1560, 1557, 1562, 1563, 1565, 1566, 2683, 1568, 1569, 1574,
- 1570, 1572, 1577, 1578, 1582, 1593, 1581, 1585, 1589, 2683,
- 1591, 1594, 1600, 1607, 1604, 1598, 1606, 1608, 1609, 1610,
- 1612, 1621, 1613, 1611, 1615, 1622, 1623, 1624, 1626, 1632,
- 1630, 1631, 1634, 1638, 1640, 1645, 1643, 2683, 2683, 1649,
-
- 1641, 1646, 1652, 1656, 1658, 1660, 1668, 1665, 1666, 1671,
- 1672, 1673, 1674, 1676, 1677, 1679, 1680, 2683, 1688, 1682,
- 1696, 1697, 1706, 1689, 1704, 2683, 2683, 1685, 1692, 1708,
- 1709, 1711, 1712, 2683, 1714, 1715, 1716, 1717, 1718, 1720,
- 1710, 1724, 1732, 1735, 1725, 1736, 1743, 1740, 1741, 1744,
- 1746, 1754, 1742, 1756, 1762, 1747, 1758, 1760, 1764, 1761,
- 1766, 1770, 1772, 1771, 2683, 1778, 1775, 1784, 1776, 1783,
- 1785, 1792, 1788, 1789, 1790, 1791, 1794, 1796, 1797, 1798,
- 1804, 2683, 1803, 1805, 1806, 1808, 1814, 1818, 1816, 1821,
- 2683, 1822, 1830, 1826, 1828, 1832, 1829, 1836, 1833, 1839,
-
- 1838, 1841, 1843, 1850, 1844, 1848, 1851, 1852, 1863, 1862,
- 1869, 1870, 1867, 1876, 1873, 1874, 1875, 1877, 1886, 1882,
- 1888, 1880, 2683, 1890, 1895, 1897, 1899, 1884, 1900, 1898,
- 2683, 2683, 1891, 2683, 1908, 1901, 1912, 1913, 2683, 1911,
- 2683, 2683, 1914, 1923, 1915, 1916, 1924, 1930, 2683, 1927,
- 1925, 1935, 1931, 1937, 1938, 1939, 1933, 1940, 2683, 1941,
- 1942, 1943, 1947, 1953, 1955, 1957, 1958, 1962, 1965, 1966,
- 1959, 1968, 1974, 1973, 2683, 1972, 1975, 1980, 1981, 1985,
- 1982, 1986, 1987, 1996, 1998, 2683, 1992, 1990, 2000, 2683,
- 2002, 2683, 2006, 2004, 2009, 2014, 2011, 2022, 2007, 2015,
-
- 2023, 2017, 2025, 2027, 2683, 2683, 2031, 2033, 2036, 2034,
- 2038, 2041, 2039, 2042, 2044, 2048, 2683, 2049, 2050, 2051,
- 2052, 2053, 2683, 2056, 2057, 2058, 2062, 2065, 2077, 2079,
- 2068, 2083, 2085, 2061, 2087, 2089, 2090, 2683, 2091, 2093,
- 2094, 2098, 2099, 2095, 2100, 2104, 2107, 2102, 2111, 2683,
- 2115, 2108, 2118, 2116, 2112, 2122, 2123, 2126, 2128, 2130,
- 2129, 2131, 2132, 2138, 2059, 2683, 2136, 2683, 2137, 2142,
- 2150, 2151, 2683, 2147, 2153, 2683, 2154, 2158, 2167, 2155,
- 2161, 2169, 2170, 2171, 2172, 2173, 2174, 2182, 2178, 2683,
- 2180, 2181, 2187, 2183, 2683, 2683, 2188, 2683, 2683, 2198,
-
- 2683, 2683, 2194, 2201, 2683, 2203, 2683, 2209, 2205, 2192,
- 2190, 2210, 2683, 2214, 2683, 2683, 2211, 2217, 2207, 2218,
- 2225, 2227, 2229, 2220, 2222, 2230, 2231, 2233, 2234, 2236,
- 2237, 2238, 2239, 2244, 2241, 2247, 2248, 2250, 2251, 2253,
- 2683, 2249, 2262, 2683, 2269, 2270, 2258, 2260, 2271, 2272,
- 2274, 2276, 2282, 2280, 2281, 2283, 2683, 2285, 2683, 2683,
- 2286, 2284, 2291, 2292, 2294, 2683, 2297, 2298, 2302, 2309,
- 2683, 2683, 2683, 2310, 2299, 2305, 2313, 2315, 2316, 2683,
- 2319, 2322, 2323, 2325, 2330, 2332, 2338, 2336, 2342, 2683,
- 2339, 2337, 2683, 2343, 2345, 2347, 2348, 2350, 2352, 2683,
-
- 2353, 2354, 2360, 2355, 2363, 2366, 2365, 2683, 2367, 2368,
- 2683, 2378, 2683, 2683, 2369, 2379, 2382, 2384, 2387, 2375,
- 2388, 2395, 2392, 2394, 2683, 2683, 2397, 2683, 2683, 2396,
- 2399, 2400, 2404, 2401, 2406, 2408, 2409, 2412, 2410, 2683,
- 2413, 2683, 2414, 2423, 2420, 2418, 2683, 2425, 2426, 2429,
- 2683, 2683, 2431, 2439, 2433, 2683, 2441, 2443, 2437, 2444,
- 2448, 2449, 2445, 2450, 2455, 2457, 2451, 2453, 2465, 2466,
- 2683, 2468, 2460, 2470, 2474, 2476, 2478, 2479, 2481, 2483,
- 2484, 2486, 2487, 2683, 2488, 2489, 2499, 2504, 2508, 2490,
- 2510, 2683, 2511, 2683, 2514, 2500, 2683, 2683, 2515, 2517,
-
- 2519, 2683, 2520, 2683, 2518, 2522, 2526, 2683, 2683, 2683,
- 2528, 2683, 2529, 2683, 2532, 2534, 2683, 2535, 2537, 2540,
- 2683, 2542, 2683, 2544, 2683, 2545, 2546, 2683, 2683, 2683,
- 2683, 2548, 2550, 2555, 2551, 2683, 2556, 2558, 2559, 2562,
- 2683, 2683, 2591, 2598, 2605, 2612, 2619, 94, 2626, 2633,
- 2640, 2647, 2654, 2661, 2668, 2675
- } ;
-
-static yyconst flex_int16_t yy_def[1357] =
- { 0,
- 1342, 1, 1343, 1343, 1344, 1344, 1345, 1345, 1346, 1346,
- 1347, 1347, 1342, 1348, 1342, 1342, 1342, 1342, 1349, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1350,
- 1342, 1342, 1342, 1350, 1351, 1342, 1342, 1342, 1351, 1352,
- 1342, 1342, 1342, 1342, 1352, 1353, 1342, 1342, 1342, 1353,
- 1354, 1342, 1355, 1342, 1354, 1354, 1348, 1348, 1342, 1356,
- 1349, 1356, 1349, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
-
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1350,
- 1350, 1351, 1351, 1352, 1352, 1342, 1353, 1353, 1354, 1354,
- 1355, 1355, 1354, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1354, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
-
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1354,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342, 1348, 1348,
- 1348, 1348, 1348, 1342, 1348, 1348, 1348, 1348, 1348, 1348,
-
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1354, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
-
- 1348, 1348, 1348, 1348, 1354, 1348, 1348, 1348, 1348, 1342,
- 1348, 1348, 1348, 1348, 1348, 1342, 1342, 1348, 1342, 1342,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1342, 1348, 1348, 1348, 1348,
- 1348, 1342, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1354, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
-
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1342, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1342, 1354, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
-
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1342, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1342, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
-
- 1348, 1348, 1348, 1342, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1342, 1342, 1348, 1348, 1348, 1342, 1348, 1342,
- 1348, 1342, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1342, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342, 1342, 1348,
-
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1342, 1342, 1348, 1348, 1348,
- 1348, 1348, 1348, 1342, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1342, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1342, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1342, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
-
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1342, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1342, 1342, 1348, 1342, 1348, 1348, 1348, 1348, 1342, 1348,
- 1342, 1342, 1348, 1348, 1348, 1348, 1348, 1348, 1342, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1342, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1342, 1348, 1348, 1348, 1342,
- 1348, 1342, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
-
- 1348, 1348, 1348, 1348, 1342, 1342, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1342, 1348, 1348, 1348,
- 1348, 1348, 1342, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1342, 1348, 1342, 1348, 1348,
- 1348, 1348, 1342, 1348, 1348, 1342, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342,
- 1348, 1348, 1348, 1348, 1342, 1342, 1348, 1342, 1342, 1348,
-
- 1342, 1342, 1348, 1348, 1342, 1348, 1342, 1348, 1348, 1348,
- 1348, 1348, 1342, 1348, 1342, 1342, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1342, 1348, 1348, 1342, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1342, 1348, 1342, 1342,
- 1348, 1348, 1348, 1348, 1348, 1342, 1348, 1348, 1348, 1348,
- 1342, 1342, 1342, 1348, 1348, 1348, 1348, 1348, 1348, 1342,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342,
- 1348, 1348, 1342, 1348, 1348, 1348, 1348, 1348, 1348, 1342,
-
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342, 1348, 1348,
- 1342, 1348, 1342, 1342, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1342, 1342, 1348, 1342, 1342, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1342,
- 1348, 1342, 1348, 1348, 1348, 1348, 1342, 1348, 1348, 1348,
- 1342, 1342, 1348, 1348, 1348, 1342, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1342, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1348, 1348, 1342, 1348, 1348, 1348, 1348, 1348, 1348,
- 1348, 1342, 1348, 1342, 1348, 1348, 1342, 1342, 1348, 1348,
-
- 1348, 1342, 1348, 1342, 1348, 1348, 1348, 1342, 1342, 1342,
- 1348, 1342, 1348, 1342, 1348, 1348, 1342, 1348, 1348, 1348,
- 1342, 1348, 1342, 1348, 1342, 1348, 1348, 1342, 1342, 1342,
- 1342, 1348, 1348, 1348, 1348, 1342, 1348, 1348, 1348, 1348,
- 1342, 0, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
- 1342, 1342, 1342, 1342, 1342, 1342
- } ;
-
-static yyconst flex_int16_t yy_nxt[2723] =
- { 0,
- 14, 15, 16, 17, 18, 19, 18, 14, 14, 14,
- 14, 18, 20, 21, 14, 22, 23, 24, 25, 14,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 14,
- 35, 36, 37, 38, 39, 14, 14, 14, 14, 41,
- 42, 43, 41, 42, 43, 122, 46, 47, 122, 44,
- 48, 69, 44, 46, 47, 70, 49, 48, 57, 58,
- 59, 68, 68, 49, 51, 52, 53, 54, 60, 18,
- 57, 58, 59, 120, 120, 55, 51, 52, 53, 54,
- 60, 18, 68, 101, 183, 74, 75, 55, 15, 16,
- 17, 62, 63, 64, 67, 67, 68, 67, 67, 65,
-
- 67, 93, 68, 76, 68, 67, 84, 68, 66, 15,
- 16, 17, 62, 63, 64, 68, 68, 77, 134, 86,
- 65, 69, 92, 130, 78, 70, 85, 68, 87, 66,
- 72, 79, 72, 72, 68, 72, 88, 133, 68, 80,
- 72, 73, 89, 81, 68, 90, 82, 68, 68, 83,
- 68, 98, 91, 150, 68, 99, 95, 127, 127, 94,
- 68, 68, 96, 102, 137, 106, 97, 68, 68, 103,
- 68, 100, 104, 109, 135, 107, 68, 68, 108, 105,
- 68, 68, 113, 110, 114, 138, 130, 111, 112, 68,
- 116, 68, 118, 149, 139, 117, 119, 136, 124, 115,
-
- 124, 124, 72, 124, 72, 72, 129, 72, 129, 129,
- 68, 129, 67, 132, 67, 67, 68, 67, 68, 68,
- 68, 68, 67, 72, 143, 72, 72, 68, 72, 68,
- 140, 68, 142, 72, 73, 145, 146, 141, 147, 68,
- 68, 68, 144, 152, 68, 148, 153, 68, 68, 156,
- 155, 158, 68, 151, 163, 159, 161, 68, 68, 68,
- 154, 160, 68, 68, 162, 164, 68, 167, 68, 157,
- 68, 68, 165, 169, 68, 68, 176, 170, 68, 68,
- 68, 68, 166, 68, 168, 68, 173, 172, 68, 178,
- 171, 177, 68, 68, 174, 68, 175, 184, 180, 181,
-
- 120, 120, 127, 127, 122, 185, 182, 122, 130, 179,
- 130, 187, 124, 186, 124, 124, 129, 124, 129, 129,
- 72, 129, 72, 72, 68, 72, 68, 189, 68, 188,
- 68, 132, 68, 68, 194, 68, 191, 196, 68, 68,
- 195, 190, 68, 68, 202, 192, 68, 68, 68, 68,
- 68, 204, 206, 193, 68, 207, 68, 203, 197, 68,
- 68, 213, 68, 198, 209, 68, 216, 68, 199, 68,
- 205, 68, 128, 208, 200, 201, 218, 210, 212, 68,
- 211, 68, 214, 215, 68, 217, 222, 219, 220, 68,
- 221, 68, 224, 225, 223, 68, 68, 68, 68, 68,
-
- 68, 68, 226, 68, 68, 227, 229, 68, 68, 68,
- 68, 231, 238, 234, 68, 68, 228, 68, 68, 232,
- 240, 242, 241, 230, 68, 245, 68, 233, 236, 237,
- 68, 235, 68, 244, 239, 247, 68, 130, 248, 68,
- 68, 253, 68, 243, 68, 68, 68, 68, 246, 250,
- 252, 68, 254, 68, 258, 249, 68, 259, 251, 255,
- 68, 257, 68, 256, 68, 260, 68, 68, 266, 263,
- 68, 264, 68, 68, 68, 268, 261, 262, 68, 265,
- 270, 68, 68, 269, 68, 68, 267, 68, 275, 68,
- 68, 68, 278, 68, 68, 68, 279, 68, 68, 68,
-
- 272, 271, 274, 277, 68, 273, 280, 283, 276, 288,
- 68, 285, 281, 68, 68, 282, 68, 284, 286, 287,
- 68, 68, 68, 289, 294, 68, 295, 68, 296, 292,
- 290, 293, 68, 291, 68, 299, 68, 68, 68, 68,
- 68, 302, 301, 68, 308, 68, 68, 297, 68, 68,
- 309, 68, 68, 303, 298, 307, 300, 68, 68, 304,
- 313, 68, 305, 68, 306, 130, 312, 68, 68, 310,
- 324, 311, 315, 126, 68, 68, 314, 68, 323, 316,
- 317, 68, 327, 329, 68, 68, 325, 326, 68, 318,
- 68, 319, 320, 321, 328, 330, 322, 68, 68, 331,
-
- 332, 333, 335, 68, 334, 336, 337, 68, 68, 68,
- 68, 342, 68, 68, 68, 125, 343, 68, 338, 339,
- 68, 68, 68, 340, 341, 350, 346, 349, 345, 348,
- 352, 344, 68, 68, 68, 68, 68, 68, 354, 347,
- 353, 351, 68, 356, 68, 357, 68, 68, 68, 355,
- 68, 68, 361, 359, 68, 68, 68, 364, 358, 360,
- 362, 68, 365, 68, 68, 68, 369, 363, 68, 366,
- 68, 367, 68, 368, 68, 375, 68, 373, 68, 68,
- 68, 68, 374, 378, 372, 370, 68, 68, 371, 68,
- 68, 380, 68, 68, 376, 68, 379, 390, 68, 393,
-
- 377, 68, 68, 381, 68, 395, 389, 391, 382, 68,
- 383, 68, 388, 392, 68, 384, 396, 385, 68, 68,
- 394, 68, 68, 397, 68, 386, 401, 68, 130, 398,
- 68, 402, 405, 406, 68, 387, 68, 399, 68, 410,
- 68, 400, 404, 403, 68, 68, 407, 68, 408, 409,
- 68, 68, 68, 414, 416, 68, 411, 412, 417, 68,
- 418, 68, 413, 123, 415, 68, 419, 68, 420, 68,
- 421, 68, 425, 422, 68, 68, 423, 68, 424, 68,
- 68, 428, 429, 426, 68, 427, 68, 68, 68, 430,
- 68, 68, 435, 432, 436, 68, 68, 437, 433, 68,
-
- 431, 68, 434, 68, 438, 68, 68, 439, 442, 68,
- 441, 443, 445, 68, 450, 68, 68, 68, 447, 446,
- 68, 444, 68, 448, 68, 68, 68, 449, 453, 440,
- 451, 452, 68, 458, 455, 457, 68, 454, 456, 68,
- 68, 68, 461, 68, 459, 463, 462, 68, 68, 68,
- 464, 68, 68, 68, 465, 68, 68, 469, 68, 460,
- 68, 474, 68, 68, 470, 121, 68, 466, 68, 476,
- 467, 471, 468, 68, 68, 473, 472, 477, 68, 478,
- 68, 475, 480, 68, 68, 68, 68, 68, 68, 483,
- 482, 485, 484, 481, 479, 68, 68, 489, 68, 130,
-
- 486, 68, 68, 488, 491, 487, 68, 68, 497, 492,
- 68, 493, 490, 68, 68, 495, 68, 68, 68, 502,
- 498, 68, 494, 496, 506, 500, 68, 68, 499, 68,
- 503, 505, 504, 501, 68, 68, 507, 68, 508, 68,
- 513, 509, 68, 517, 68, 516, 510, 68, 68, 519,
- 68, 68, 511, 512, 518, 514, 68, 521, 68, 68,
- 68, 522, 68, 526, 515, 520, 68, 68, 525, 68,
- 531, 523, 530, 68, 529, 68, 68, 68, 524, 532,
- 68, 527, 68, 533, 68, 528, 68, 68, 534, 68,
- 535, 537, 539, 68, 538, 541, 68, 540, 68, 68,
-
- 68, 543, 536, 68, 545, 68, 68, 68, 68, 547,
- 68, 68, 68, 544, 68, 542, 68, 548, 68, 68,
- 546, 68, 555, 554, 68, 68, 68, 560, 549, 550,
- 551, 68, 553, 552, 556, 558, 563, 68, 557, 559,
- 68, 68, 68, 68, 561, 562, 564, 68, 567, 68,
- 569, 68, 566, 570, 571, 68, 565, 68, 68, 574,
- 68, 576, 68, 68, 68, 577, 130, 68, 568, 68,
- 573, 579, 68, 572, 68, 68, 68, 68, 578, 68,
- 575, 588, 68, 68, 68, 595, 68, 68, 580, 582,
- 68, 590, 594, 591, 68, 602, 581, 68, 593, 589,
-
- 583, 601, 584, 592, 68, 596, 585, 68, 586, 68,
- 597, 68, 598, 587, 600, 68, 603, 68, 68, 605,
- 68, 606, 604, 608, 68, 68, 610, 68, 68, 609,
- 599, 68, 68, 614, 68, 611, 68, 607, 68, 612,
- 613, 68, 68, 615, 68, 621, 617, 68, 68, 68,
- 68, 68, 68, 620, 624, 616, 619, 625, 618, 68,
- 627, 68, 628, 623, 626, 622, 629, 68, 630, 68,
- 634, 68, 631, 68, 68, 632, 68, 68, 633, 68,
- 637, 68, 68, 68, 635, 68, 639, 640, 68, 641,
- 68, 642, 643, 68, 68, 68, 636, 644, 646, 68,
-
- 638, 68, 68, 130, 68, 68, 68, 68, 645, 651,
- 652, 68, 647, 68, 654, 650, 68, 656, 648, 68,
- 657, 649, 68, 68, 653, 68, 660, 655, 658, 659,
- 68, 68, 663, 661, 68, 662, 68, 68, 68, 68,
- 68, 68, 671, 665, 68, 672, 68, 68, 68, 664,
- 68, 673, 68, 668, 68, 669, 666, 676, 674, 68,
- 68, 670, 675, 667, 679, 68, 68, 68, 68, 677,
- 68, 68, 682, 68, 678, 681, 684, 686, 680, 68,
- 68, 68, 68, 68, 68, 68, 68, 683, 687, 685,
- 68, 68, 694, 68, 690, 688, 689, 68, 68, 698,
-
- 68, 700, 691, 693, 68, 692, 695, 697, 68, 68,
- 696, 699, 703, 702, 68, 68, 704, 68, 735, 707,
- 701, 68, 705, 706, 68, 68, 708, 68, 68, 68,
- 711, 68, 709, 710, 68, 713, 712, 715, 716, 68,
- 68, 68, 68, 68, 717, 718, 68, 68, 68, 719,
- 68, 724, 714, 68, 720, 68, 721, 723, 722, 68,
- 68, 68, 68, 725, 733, 68, 68, 727, 726, 729,
- 734, 68, 68, 730, 728, 738, 68, 736, 731, 68,
- 740, 68, 68, 68, 68, 737, 68, 732, 741, 742,
- 68, 744, 745, 68, 68, 68, 68, 68, 746, 739,
-
- 750, 748, 743, 749, 751, 68, 68, 68, 753, 68,
- 68, 752, 747, 68, 68, 68, 754, 757, 68, 760,
- 759, 68, 68, 68, 68, 756, 68, 68, 764, 755,
- 68, 68, 769, 68, 68, 758, 770, 68, 68, 68,
- 68, 761, 762, 765, 763, 773, 68, 68, 68, 767,
- 68, 776, 68, 68, 68, 766, 768, 772, 775, 68,
- 771, 783, 68, 68, 774, 68, 777, 779, 782, 778,
- 784, 781, 68, 68, 780, 68, 68, 68, 68, 791,
- 785, 786, 788, 790, 68, 792, 68, 793, 787, 68,
- 68, 795, 68, 797, 794, 68, 789, 798, 68, 799,
-
- 68, 68, 68, 68, 68, 804, 68, 68, 68, 803,
- 68, 796, 68, 68, 800, 68, 68, 812, 68, 68,
- 801, 802, 814, 805, 813, 806, 807, 808, 811, 809,
- 68, 68, 68, 810, 818, 68, 68, 68, 68, 822,
- 816, 819, 820, 815, 68, 68, 68, 824, 825, 68,
- 823, 68, 817, 68, 826, 68, 68, 821, 827, 68,
- 68, 68, 829, 828, 830, 68, 834, 68, 68, 68,
- 832, 833, 68, 836, 68, 68, 831, 68, 68, 839,
- 68, 68, 68, 841, 68, 838, 68, 844, 835, 68,
- 68, 837, 848, 68, 68, 843, 840, 68, 842, 849,
-
- 850, 68, 845, 68, 846, 68, 68, 853, 854, 847,
- 68, 852, 68, 851, 857, 856, 68, 858, 68, 68,
- 68, 68, 68, 68, 68, 68, 862, 68, 859, 864,
- 866, 855, 865, 68, 68, 68, 68, 860, 68, 873,
- 861, 867, 68, 68, 68, 863, 68, 868, 871, 870,
- 68, 872, 68, 68, 869, 68, 883, 68, 68, 878,
- 882, 68, 874, 875, 68, 877, 879, 876, 68, 880,
- 68, 881, 68, 885, 884, 890, 891, 68, 68, 887,
- 68, 889, 888, 68, 68, 68, 68, 886, 68, 68,
- 898, 68, 68, 128, 68, 901, 893, 68, 892, 895,
-
- 68, 68, 894, 903, 68, 909, 897, 899, 68, 68,
- 900, 896, 902, 905, 906, 904, 68, 910, 68, 907,
- 68, 68, 68, 68, 68, 908, 68, 68, 68, 68,
- 68, 916, 68, 917, 918, 919, 68, 68, 911, 913,
- 912, 920, 914, 923, 68, 921, 915, 68, 68, 925,
- 927, 922, 68, 68, 68, 68, 68, 931, 68, 68,
- 926, 924, 930, 933, 928, 932, 68, 934, 68, 935,
- 68, 929, 68, 68, 68, 939, 68, 941, 68, 943,
- 936, 942, 68, 68, 68, 945, 944, 68, 68, 937,
- 68, 947, 938, 940, 949, 68, 68, 68, 950, 951,
-
- 68, 68, 68, 68, 68, 946, 68, 959, 68, 68,
- 68, 961, 952, 948, 953, 68, 68, 68, 68, 954,
- 68, 955, 956, 957, 963, 965, 68, 958, 68, 966,
- 68, 968, 964, 68, 68, 960, 962, 972, 68, 971,
- 68, 68, 68, 975, 68, 68, 976, 974, 68, 970,
- 68, 68, 967, 68, 969, 68, 68, 977, 973, 986,
- 68, 982, 68, 68, 68, 978, 979, 984, 981, 980,
- 989, 983, 985, 990, 68, 68, 991, 993, 988, 68,
- 992, 68, 68, 995, 987, 68, 68, 68, 68, 68,
- 997, 994, 68, 1000, 68, 1002, 68, 996, 68, 998,
-
- 68, 1008, 68, 68, 1003, 1004, 1005, 68, 1006, 68,
- 68, 68, 68, 68, 999, 1011, 1001, 1007, 1009, 1010,
- 68, 1012, 1017, 68, 68, 68, 68, 68, 68, 1021,
- 1019, 1014, 1013, 1015, 1016, 68, 68, 68, 1022, 68,
- 1018, 1023, 68, 68, 1020, 68, 1024, 68, 1026, 68,
- 68, 68, 68, 68, 68, 68, 1034, 1025, 1033, 68,
- 1031, 1028, 1029, 1030, 1027, 68, 1038, 68, 1036, 68,
- 68, 68, 1032, 1035, 68, 1040, 1041, 68, 68, 1037,
- 68, 1046, 1042, 1043, 68, 68, 68, 68, 126, 1044,
- 1047, 1050, 68, 68, 68, 1039, 1054, 68, 68, 68,
-
- 1045, 1049, 68, 1048, 68, 1051, 1052, 1055, 68, 1053,
- 68, 1056, 68, 1057, 68, 1058, 68, 1059, 68, 68,
- 1062, 68, 1060, 68, 1063, 1066, 68, 68, 1061, 68,
- 1065, 1070, 1067, 1068, 68, 68, 1073, 68, 1069, 68,
- 1071, 1064, 1072, 68, 1076, 68, 68, 1074, 68, 1077,
- 68, 68, 1075, 68, 68, 1079, 68, 1080, 1078, 1082,
- 68, 68, 68, 68, 68, 68, 1081, 1090, 68, 68,
- 68, 68, 1091, 68, 68, 1130, 1088, 68, 1094, 1084,
- 68, 1086, 1083, 1092, 1087, 1085, 1089, 1093, 1095, 68,
- 1096, 68, 1100, 1097, 1098, 68, 1099, 68, 1101, 68,
-
- 1102, 68, 68, 68, 1105, 68, 68, 68, 1104, 1107,
- 68, 68, 68, 1109, 68, 1110, 68, 1111, 1113, 68,
- 68, 1103, 1115, 68, 68, 1106, 1116, 68, 68, 1108,
- 68, 1118, 1112, 1114, 68, 68, 1120, 1119, 68, 1121,
- 68, 68, 68, 68, 68, 1129, 1117, 1125, 68, 68,
- 68, 1123, 1127, 1128, 68, 1133, 1126, 1134, 1132, 68,
- 1122, 1124, 68, 68, 1135, 68, 68, 68, 1131, 1139,
- 68, 1142, 1136, 68, 1137, 1140, 1143, 1138, 1141, 68,
- 1144, 68, 68, 68, 68, 68, 68, 1145, 1147, 1150,
- 68, 1149, 68, 68, 68, 68, 1151, 1155, 1153, 68,
-
- 68, 1156, 68, 1146, 68, 1148, 68, 1154, 1152, 1157,
- 68, 1158, 1159, 68, 1160, 68, 1161, 68, 1162, 68,
- 1163, 68, 68, 68, 1164, 1166, 68, 1165, 1167, 68,
- 68, 1168, 68, 1169, 68, 1170, 1171, 68, 1172, 68,
- 1173, 68, 68, 68, 1174, 68, 68, 1180, 68, 68,
- 68, 68, 1175, 68, 1176, 1177, 68, 1178, 1181, 68,
- 68, 68, 68, 68, 1190, 68, 1179, 1188, 1189, 1184,
- 68, 1183, 68, 1186, 68, 1192, 1182, 1185, 1187, 1191,
- 1193, 68, 68, 68, 68, 1195, 68, 1200, 68, 1201,
- 1196, 1194, 68, 68, 68, 68, 68, 68, 68, 1207,
-
- 1198, 1197, 1208, 68, 68, 1199, 68, 1202, 1211, 68,
- 68, 68, 1203, 1213, 68, 1204, 1205, 68, 1206, 1209,
- 1214, 68, 68, 1215, 1210, 68, 1217, 68, 68, 1212,
- 1218, 68, 1219, 1216, 68, 68, 1220, 68, 125, 1222,
- 1223, 1225, 68, 1226, 68, 1227, 1221, 1228, 68, 68,
- 68, 68, 1224, 1229, 68, 68, 1230, 68, 1232, 68,
- 68, 1231, 68, 1236, 68, 68, 68, 68, 1234, 1235,
- 1233, 1240, 68, 1237, 1242, 68, 1241, 68, 68, 68,
- 68, 68, 1244, 123, 1238, 1239, 1243, 68, 1245, 1247,
- 68, 68, 1249, 1246, 68, 1251, 68, 1250, 1252, 68,
-
- 68, 1248, 1255, 1256, 68, 1253, 68, 68, 68, 68,
- 1257, 68, 68, 68, 1254, 1258, 68, 1262, 68, 1260,
- 68, 68, 68, 1264, 68, 68, 68, 1259, 1269, 1263,
- 68, 1261, 68, 1267, 1271, 68, 1272, 68, 68, 1273,
- 1265, 68, 1268, 68, 1270, 68, 1274, 1266, 1277, 68,
- 1275, 68, 1278, 68, 1279, 68, 68, 68, 1280, 1284,
- 68, 68, 68, 68, 1281, 68, 1276, 68, 1282, 68,
- 1285, 1283, 68, 1286, 1289, 1288, 1292, 68, 68, 1294,
- 68, 1287, 68, 1293, 1291, 1297, 68, 1298, 68, 1290,
- 68, 68, 1295, 68, 1302, 68, 68, 1304, 68, 68,
-
- 68, 68, 68, 1300, 1296, 121, 1307, 1311, 1303, 1299,
- 1308, 68, 68, 1301, 1306, 1309, 68, 1315, 1305, 1310,
- 68, 1312, 68, 68, 1313, 1314, 68, 68, 1317, 68,
- 68, 68, 68, 1321, 68, 1316, 1318, 1319, 68, 1323,
- 68, 68, 1322, 1325, 68, 1324, 68, 68, 1328, 68,
- 1320, 1329, 68, 1330, 68, 1331, 68, 68, 68, 1333,
- 68, 1326, 68, 68, 1334, 1327, 1336, 68, 68, 1332,
- 68, 68, 1337, 1341, 68, 68, 1342, 1342, 1342, 1342,
- 1342, 1342, 1335, 1338, 1339, 1342, 1342, 1342, 1342, 1342,
- 1340, 40, 40, 40, 40, 40, 40, 40, 45, 45,
-
- 45, 45, 45, 45, 45, 50, 50, 50, 50, 50,
- 50, 50, 56, 56, 56, 56, 56, 56, 56, 61,
- 61, 61, 61, 61, 61, 61, 71, 71, 1342, 71,
- 71, 71, 71, 120, 120, 1342, 1342, 1342, 120, 120,
- 122, 122, 1342, 1342, 122, 1342, 122, 124, 1342, 1342,
- 1342, 1342, 1342, 124, 127, 127, 1342, 1342, 1342, 127,
- 127, 129, 1342, 1342, 1342, 1342, 1342, 129, 131, 131,
- 1342, 131, 131, 131, 131, 72, 72, 1342, 72, 72,
- 72, 72, 13, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
- 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
-
- 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
- 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
- 1342, 1342
- } ;
-
-static yyconst flex_int16_t yy_chk[2723] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
- 3, 3, 4, 4, 4, 49, 5, 5, 49, 3,
- 5, 15, 4, 6, 6, 15, 5, 6, 9, 9,
- 9, 116, 33, 6, 7, 7, 7, 7, 9, 7,
- 10, 10, 10, 44, 44, 7, 8, 8, 8, 8,
- 10, 8, 21, 33, 116, 21, 21, 8, 11, 11,
- 11, 11, 11, 11, 1348, 20, 29, 20, 20, 11,
-
- 20, 29, 24, 21, 25, 20, 24, 28, 11, 12,
- 12, 12, 12, 12, 12, 74, 22, 22, 74, 25,
- 12, 69, 28, 66, 22, 69, 24, 26, 26, 12,
- 19, 22, 19, 19, 23, 19, 26, 66, 27, 23,
- 19, 19, 27, 23, 30, 27, 23, 31, 89, 23,
- 32, 32, 27, 89, 34, 32, 31, 60, 60, 30,
- 35, 77, 31, 34, 77, 35, 31, 78, 36, 34,
- 75, 32, 34, 36, 75, 35, 38, 76, 35, 34,
- 79, 37, 37, 36, 37, 78, 577, 36, 36, 88,
- 38, 39, 39, 88, 79, 38, 39, 76, 55, 37,
-
- 55, 55, 63, 55, 63, 63, 65, 63, 65, 65,
- 82, 65, 68, 63, 68, 68, 85, 68, 80, 81,
- 86, 84, 68, 71, 83, 71, 71, 87, 71, 83,
- 80, 92, 82, 71, 71, 84, 85, 81, 86, 90,
- 91, 98, 83, 91, 93, 87, 91, 95, 94, 93,
- 92, 94, 96, 90, 98, 94, 96, 97, 99, 100,
- 91, 95, 101, 102, 97, 99, 103, 102, 104, 93,
- 105, 107, 100, 104, 106, 108, 110, 104, 109, 111,
- 113, 110, 101, 114, 103, 115, 107, 106, 112, 112,
- 105, 111, 117, 118, 108, 119, 109, 117, 113, 114,
-
- 121, 121, 128, 128, 123, 118, 115, 123, 133, 112,
- 129, 133, 125, 119, 125, 125, 130, 125, 130, 130,
- 131, 130, 131, 131, 134, 131, 136, 135, 137, 134,
- 138, 131, 135, 139, 140, 141, 137, 142, 145, 140,
- 141, 136, 142, 144, 144, 138, 146, 147, 148, 151,
- 149, 146, 148, 139, 143, 149, 154, 145, 143, 150,
- 153, 154, 155, 143, 151, 152, 157, 156, 143, 161,
- 147, 157, 127, 150, 143, 143, 159, 152, 153, 160,
- 152, 159, 155, 156, 158, 158, 162, 159, 160, 163,
- 161, 162, 164, 165, 163, 166, 168, 164, 165, 167,
-
- 169, 170, 166, 171, 172, 167, 169, 173, 174, 175,
- 176, 171, 177, 174, 178, 180, 168, 177, 179, 172,
- 179, 181, 180, 170, 182, 184, 181, 173, 176, 176,
- 184, 175, 183, 183, 178, 185, 186, 187, 186, 188,
- 185, 190, 189, 182, 192, 193, 190, 191, 184, 187,
- 189, 195, 191, 194, 195, 186, 196, 196, 188, 192,
- 198, 194, 199, 193, 197, 197, 200, 201, 203, 200,
- 202, 201, 204, 203, 205, 205, 198, 199, 206, 202,
- 207, 208, 209, 206, 210, 207, 204, 212, 212, 211,
- 213, 214, 215, 216, 217, 218, 216, 215, 219, 221,
-
- 209, 208, 211, 214, 220, 210, 217, 219, 213, 223,
- 223, 221, 218, 225, 226, 218, 222, 220, 222, 222,
- 224, 229, 227, 224, 228, 228, 229, 230, 230, 226,
- 225, 227, 231, 225, 232, 233, 234, 235, 236, 237,
- 233, 236, 235, 238, 240, 241, 239, 231, 242, 240,
- 241, 243, 244, 237, 232, 239, 234, 245, 246, 238,
- 245, 249, 238, 248, 238, 250, 244, 252, 251, 242,
- 249, 243, 246, 126, 253, 255, 245, 247, 248, 247,
- 247, 258, 252, 254, 256, 257, 250, 251, 254, 247,
- 259, 247, 247, 247, 253, 255, 247, 260, 262, 256,
-
- 257, 258, 260, 263, 259, 261, 261, 264, 261, 266,
- 265, 266, 267, 268, 269, 124, 267, 270, 262, 263,
- 271, 273, 272, 264, 265, 273, 270, 272, 269, 271,
- 275, 268, 274, 277, 276, 275, 278, 281, 277, 270,
- 276, 274, 279, 279, 282, 280, 286, 283, 290, 278,
- 280, 284, 284, 282, 293, 285, 287, 287, 281, 283,
- 285, 289, 289, 291, 292, 295, 293, 286, 296, 290,
- 297, 291, 298, 292, 299, 300, 301, 298, 302, 303,
- 300, 304, 299, 303, 297, 295, 305, 306, 296, 307,
- 310, 305, 309, 312, 301, 314, 304, 311, 313, 313,
-
- 302, 316, 311, 306, 315, 315, 310, 311, 307, 308,
- 308, 317, 309, 312, 318, 308, 316, 308, 319, 320,
- 314, 321, 322, 317, 323, 308, 321, 324, 325, 318,
- 328, 322, 325, 326, 327, 308, 329, 319, 326, 330,
- 330, 320, 324, 323, 331, 332, 327, 333, 328, 329,
- 334, 335, 342, 334, 336, 336, 331, 332, 337, 337,
- 338, 348, 333, 122, 335, 338, 339, 339, 340, 340,
- 341, 343, 345, 342, 344, 341, 343, 345, 344, 346,
- 347, 348, 349, 346, 350, 347, 351, 349, 355, 350,
- 352, 353, 353, 352, 354, 359, 367, 355, 352, 354,
-
- 351, 356, 352, 357, 356, 358, 360, 357, 359, 361,
- 358, 360, 362, 363, 367, 364, 368, 362, 364, 363,
- 365, 361, 366, 365, 374, 370, 369, 366, 370, 357,
- 368, 369, 371, 374, 372, 373, 379, 371, 372, 372,
- 373, 375, 376, 377, 375, 377, 376, 376, 378, 380,
- 378, 381, 382, 383, 379, 384, 385, 383, 386, 375,
- 387, 388, 389, 394, 384, 120, 388, 380, 390, 390,
- 381, 385, 382, 391, 392, 387, 386, 391, 393, 392,
- 395, 389, 394, 396, 397, 398, 399, 401, 403, 397,
- 396, 399, 398, 395, 393, 400, 402, 403, 404, 405,
-
- 400, 408, 418, 402, 405, 401, 406, 407, 411, 406,
- 413, 407, 404, 411, 409, 409, 412, 414, 415, 418,
- 412, 421, 408, 409, 424, 414, 422, 423, 413, 424,
- 421, 423, 422, 415, 425, 426, 425, 427, 425, 428,
- 426, 425, 429, 430, 430, 429, 425, 431, 432, 432,
- 433, 436, 425, 425, 431, 427, 434, 434, 435, 437,
- 438, 435, 439, 439, 428, 433, 440, 441, 438, 442,
- 444, 436, 443, 443, 442, 444, 445, 446, 437, 445,
- 447, 440, 448, 446, 449, 441, 450, 451, 447, 453,
- 448, 450, 452, 452, 451, 454, 455, 453, 457, 458,
-
- 454, 457, 449, 459, 459, 460, 461, 463, 464, 461,
- 465, 466, 467, 458, 468, 455, 470, 461, 469, 471,
- 460, 474, 469, 468, 475, 473, 472, 474, 463, 464,
- 465, 476, 467, 466, 470, 472, 477, 479, 471, 473,
- 480, 477, 478, 481, 475, 476, 478, 482, 481, 483,
- 483, 485, 480, 484, 485, 486, 479, 487, 484, 488,
- 489, 490, 490, 492, 488, 491, 491, 493, 482, 494,
- 487, 493, 495, 486, 499, 496, 500, 498, 492, 501,
- 489, 498, 502, 509, 503, 505, 504, 508, 494, 496,
- 505, 500, 504, 501, 67, 509, 495, 497, 503, 499,
-
- 497, 508, 497, 502, 506, 506, 497, 513, 497, 507,
- 506, 512, 506, 497, 507, 510, 510, 511, 514, 512,
- 520, 513, 511, 515, 515, 516, 518, 521, 522, 516,
- 506, 518, 519, 522, 523, 519, 524, 514, 526, 520,
- 521, 525, 527, 523, 528, 529, 525, 531, 532, 533,
- 529, 536, 534, 528, 533, 524, 527, 534, 526, 535,
- 536, 537, 537, 532, 535, 531, 538, 542, 540, 543,
- 542, 538, 540, 540, 541, 541, 544, 545, 541, 546,
- 545, 547, 548, 549, 543, 550, 547, 548, 552, 549,
- 553, 550, 551, 551, 555, 554, 544, 552, 554, 556,
-
- 546, 557, 558, 61, 559, 560, 561, 568, 553, 559,
- 560, 562, 555, 566, 562, 558, 563, 564, 556, 569,
- 565, 557, 564, 570, 561, 565, 568, 563, 566, 567,
- 567, 572, 571, 569, 573, 570, 571, 574, 575, 578,
- 579, 580, 581, 573, 584, 582, 583, 581, 585, 572,
- 582, 583, 586, 578, 587, 579, 574, 586, 584, 588,
- 590, 580, 585, 575, 589, 589, 591, 592, 593, 587,
- 595, 594, 592, 596, 588, 591, 594, 596, 590, 597,
- 598, 599, 600, 601, 602, 603, 604, 593, 597, 595,
- 606, 605, 604, 611, 600, 598, 599, 610, 607, 609,
-
- 612, 611, 601, 603, 609, 602, 605, 607, 613, 615,
- 606, 610, 614, 613, 616, 644, 614, 614, 644, 617,
- 612, 623, 615, 616, 617, 618, 618, 619, 620, 621,
- 621, 622, 619, 620, 624, 623, 622, 625, 626, 627,
- 629, 628, 625, 626, 627, 628, 630, 632, 633, 629,
- 634, 632, 624, 635, 629, 636, 629, 630, 629, 638,
- 639, 637, 640, 633, 641, 641, 646, 635, 634, 637,
- 642, 642, 645, 638, 636, 647, 647, 645, 639, 648,
- 649, 649, 652, 650, 654, 646, 653, 640, 650, 651,
- 651, 653, 654, 655, 656, 657, 658, 669, 655, 648,
-
- 660, 657, 652, 658, 661, 660, 662, 664, 663, 661,
- 665, 662, 656, 663, 666, 668, 664, 667, 667, 670,
- 669, 671, 672, 675, 670, 666, 673, 674, 674, 665,
- 676, 677, 680, 678, 681, 668, 680, 680, 685, 682,
- 683, 671, 672, 675, 673, 683, 684, 686, 687, 677,
- 688, 686, 691, 689, 693, 676, 678, 682, 685, 690,
- 681, 693, 695, 692, 684, 694, 687, 689, 692, 688,
- 694, 691, 696, 697, 690, 699, 698, 706, 700, 701,
- 695, 696, 698, 700, 701, 702, 703, 703, 697, 705,
- 702, 706, 707, 708, 705, 710, 699, 708, 708, 709,
-
- 709, 711, 712, 713, 715, 714, 716, 717, 718, 713,
- 714, 707, 720, 721, 710, 719, 722, 722, 724, 723,
- 711, 712, 724, 715, 723, 716, 717, 718, 721, 719,
- 725, 726, 727, 720, 728, 728, 729, 731, 730, 732,
- 726, 729, 730, 725, 732, 735, 736, 736, 737, 745,
- 735, 746, 727, 737, 739, 739, 748, 731, 741, 741,
- 743, 744, 744, 743, 745, 747, 749, 749, 750, 752,
- 747, 748, 751, 751, 753, 754, 746, 755, 756, 754,
- 758, 759, 761, 756, 762, 753, 760, 760, 750, 763,
- 764, 752, 764, 767, 765, 759, 755, 768, 758, 765,
-
- 766, 769, 761, 771, 762, 766, 772, 769, 771, 763,
- 776, 768, 773, 767, 774, 773, 775, 775, 777, 774,
- 778, 779, 780, 784, 781, 783, 779, 785, 776, 781,
- 783, 772, 782, 782, 786, 787, 788, 777, 789, 790,
- 778, 784, 791, 792, 790, 780, 793, 785, 788, 787,
- 794, 789, 795, 801, 786, 797, 801, 796, 802, 795,
- 800, 800, 791, 792, 803, 794, 796, 793, 804, 796,
- 805, 797, 806, 803, 802, 807, 808, 808, 809, 805,
- 807, 806, 805, 810, 811, 812, 813, 804, 814, 815,
- 815, 816, 817, 56, 820, 819, 810, 828, 809, 812,
-
- 819, 824, 811, 821, 829, 828, 814, 816, 821, 822,
- 817, 813, 820, 823, 824, 822, 825, 829, 823, 825,
- 830, 831, 841, 832, 833, 825, 835, 836, 837, 838,
- 839, 836, 840, 837, 838, 839, 842, 845, 830, 832,
- 831, 840, 833, 843, 843, 841, 835, 844, 846, 845,
- 847, 842, 848, 849, 853, 847, 850, 851, 851, 856,
- 846, 844, 850, 853, 848, 852, 852, 854, 854, 855,
- 857, 849, 858, 860, 855, 859, 859, 861, 861, 863,
- 856, 862, 862, 864, 863, 866, 864, 867, 869, 857,
- 866, 868, 858, 860, 870, 870, 868, 871, 871, 872,
-
- 873, 874, 875, 876, 872, 867, 877, 878, 878, 879,
- 880, 880, 873, 869, 873, 883, 881, 884, 885, 873,
- 886, 874, 875, 876, 883, 885, 887, 877, 889, 886,
- 888, 888, 884, 890, 892, 879, 881, 893, 894, 892,
- 895, 897, 893, 896, 896, 899, 897, 895, 898, 890,
- 901, 900, 887, 902, 889, 903, 905, 898, 894, 906,
- 906, 903, 904, 907, 908, 899, 900, 905, 902, 901,
- 909, 904, 905, 910, 910, 909, 911, 912, 908, 913,
- 911, 911, 912, 914, 907, 915, 916, 917, 914, 918,
- 916, 913, 922, 919, 920, 921, 928, 915, 919, 917,
-
- 921, 928, 924, 933, 922, 924, 925, 925, 926, 926,
- 930, 927, 929, 936, 918, 933, 920, 927, 929, 930,
- 935, 935, 940, 940, 937, 938, 943, 945, 946, 946,
- 944, 936, 935, 937, 938, 944, 947, 951, 947, 950,
- 943, 948, 948, 953, 945, 957, 950, 952, 952, 954,
- 955, 956, 958, 960, 961, 962, 961, 951, 960, 963,
- 957, 954, 955, 956, 953, 964, 965, 965, 963, 966,
- 967, 971, 958, 962, 968, 967, 968, 969, 970, 964,
- 972, 973, 969, 970, 976, 974, 973, 977, 51, 971,
- 974, 978, 978, 979, 981, 966, 981, 980, 982, 983,
-
- 972, 977, 988, 976, 987, 979, 980, 982, 984, 980,
- 985, 983, 989, 984, 991, 985, 994, 987, 993, 999,
- 991, 995, 988, 997, 993, 996, 996, 1000, 989, 1002,
- 995, 1000, 997, 998, 998, 1001, 1003, 1003, 999, 1004,
- 1001, 994, 1002, 1007, 1008, 1008, 1010, 1004, 1009, 1009,
- 1011, 1013, 1007, 1012, 1014, 1011, 1015, 1012, 1010, 1014,
- 1016, 1018, 1019, 1020, 1021, 1022, 1013, 1024, 1024, 1025,
- 1026, 1065, 1025, 1034, 1027, 1065, 1021, 1028, 1028, 1016,
- 1031, 1019, 1015, 1026, 1020, 1018, 1022, 1027, 1029, 1029,
- 1030, 1030, 1034, 1031, 1032, 1032, 1033, 1033, 1035, 1035,
-
- 1036, 1036, 1037, 1039, 1040, 1040, 1041, 1044, 1039, 1042,
- 1042, 1043, 1045, 1044, 1048, 1045, 1046, 1046, 1047, 1047,
- 1052, 1037, 1049, 1049, 1055, 1041, 1051, 1051, 1054, 1043,
- 1053, 1053, 1046, 1048, 1056, 1057, 1055, 1054, 1058, 1056,
- 1059, 1061, 1060, 1062, 1063, 1064, 1052, 1060, 1067, 1069,
- 1064, 1058, 1062, 1063, 1070, 1070, 1061, 1071, 1069, 1074,
- 1057, 1059, 1071, 1072, 1072, 1075, 1077, 1080, 1067, 1077,
- 1078, 1080, 1072, 1081, 1074, 1078, 1081, 1075, 1079, 1079,
- 1082, 1082, 1083, 1084, 1085, 1086, 1087, 1083, 1085, 1088,
- 1089, 1087, 1091, 1092, 1088, 1094, 1089, 1094, 1092, 1093,
-
- 1097, 1097, 1111, 1084, 1110, 1086, 1103, 1093, 1091, 1100,
- 1100, 1103, 1104, 1104, 1106, 1106, 1108, 1109, 1109, 1119,
- 1110, 1108, 1112, 1117, 1111, 1114, 1114, 1112, 1117, 1118,
- 1120, 1118, 1124, 1119, 1125, 1120, 1121, 1121, 1122, 1122,
- 1123, 1123, 1126, 1127, 1124, 1128, 1129, 1130, 1130, 1131,
- 1132, 1133, 1125, 1135, 1126, 1127, 1134, 1128, 1131, 1136,
- 1137, 1142, 1138, 1139, 1140, 1140, 1129, 1138, 1139, 1134,
- 1147, 1133, 1148, 1136, 1143, 1143, 1132, 1135, 1137, 1142,
- 1145, 1145, 1146, 1149, 1150, 1147, 1151, 1152, 1152, 1153,
- 1148, 1146, 1154, 1155, 1153, 1156, 1162, 1158, 1161, 1162,
-
- 1150, 1149, 1163, 1163, 1164, 1151, 1165, 1154, 1167, 1167,
- 1168, 1175, 1155, 1169, 1169, 1156, 1158, 1176, 1161, 1164,
- 1170, 1170, 1174, 1174, 1165, 1177, 1176, 1178, 1179, 1168,
- 1177, 1181, 1178, 1175, 1182, 1183, 1179, 1184, 50, 1182,
- 1183, 1185, 1185, 1186, 1186, 1187, 1181, 1188, 1188, 1192,
- 1187, 1191, 1184, 1189, 1189, 1194, 1191, 1195, 1194, 1196,
- 1197, 1192, 1198, 1198, 1199, 1201, 1202, 1204, 1196, 1197,
- 1195, 1203, 1203, 1199, 1205, 1205, 1204, 1207, 1206, 1209,
- 1210, 1215, 1207, 45, 1201, 1202, 1206, 1220, 1209, 1212,
- 1212, 1216, 1216, 1210, 1217, 1218, 1218, 1217, 1219, 1219,
-
- 1221, 1215, 1222, 1223, 1223, 1220, 1224, 1222, 1230, 1227,
- 1224, 1231, 1232, 1234, 1221, 1227, 1233, 1233, 1235, 1231,
- 1236, 1237, 1239, 1235, 1238, 1241, 1243, 1230, 1241, 1234,
- 1246, 1232, 1245, 1238, 1244, 1244, 1245, 1248, 1249, 1246,
- 1236, 1250, 1239, 1253, 1243, 1255, 1248, 1237, 1253, 1259,
- 1249, 1254, 1254, 1257, 1255, 1258, 1260, 1263, 1257, 1261,
- 1261, 1262, 1264, 1267, 1258, 1268, 1250, 1265, 1259, 1266,
- 1262, 1260, 1273, 1263, 1266, 1265, 1269, 1269, 1270, 1272,
- 1272, 1264, 1274, 1270, 1268, 1275, 1275, 1276, 1276, 1267,
- 1277, 1278, 1273, 1279, 1280, 1280, 1281, 1282, 1282, 1283,
-
- 1285, 1286, 1290, 1278, 1274, 40, 1286, 1290, 1281, 1277,
- 1287, 1287, 1296, 1279, 1285, 1288, 1288, 1296, 1283, 1289,
- 1289, 1291, 1291, 1293, 1293, 1295, 1295, 1299, 1300, 1300,
- 1305, 1301, 1303, 1306, 1306, 1299, 1301, 1303, 1307, 1311,
- 1311, 1313, 1307, 1315, 1315, 1313, 1316, 1318, 1319, 1319,
- 1305, 1320, 1320, 1322, 1322, 1324, 1324, 1326, 1327, 1327,
- 1332, 1316, 1333, 1335, 1332, 1318, 1334, 1334, 1337, 1326,
- 1338, 1339, 1335, 1340, 1340, 14, 13, 0, 0, 0,
- 0, 0, 1333, 1337, 1338, 0, 0, 0, 0, 0,
- 1339, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1344, 1344,
-
- 1344, 1344, 1344, 1344, 1344, 1345, 1345, 1345, 1345, 1345,
- 1345, 1345, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1347,
- 1347, 1347, 1347, 1347, 1347, 1347, 1349, 1349, 0, 1349,
- 1349, 1349, 1349, 1350, 1350, 0, 0, 0, 1350, 1350,
- 1351, 1351, 0, 0, 1351, 0, 1351, 1352, 0, 0,
- 0, 0, 0, 1352, 1353, 1353, 0, 0, 0, 1353,
- 1353, 1354, 0, 0, 0, 0, 0, 1354, 1355, 1355,
- 0, 1355, 1355, 1355, 1355, 1356, 1356, 0, 1356, 1356,
- 1356, 1356, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
- 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
-
- 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
- 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
- 1342, 1342
- } ;
-
-static yy_state_type yy_last_accepting_state;
-static char *yy_last_accepting_cpos;
-
-extern int yy_flex_debug;
-int yy_flex_debug = 0;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-static int yy_more_flag = 0;
-static int yy_more_len = 0;
-#define yymore() ((yy_more_flag) = 1)
-#define YY_MORE_ADJ (yy_more_len)
-#define YY_RESTORE_YY_MORE_OFFSET
-char *yytext;
-/*
- * configlexer.lex - lexical analyzer for unbound config file
- *
- * Copyright (c) 2001-2006, NLnet Labs. All rights reserved
- *
- * See LICENSE for the license.
- *
- */
-
-#include <ctype.h>
-#include <string.h>
-#include <strings.h>
-#ifdef HAVE_GLOB_H
-# include <glob.h>
-#endif
-
-#include "util/config_file.h"
-#include "util/configparser.h"
-void ub_c_error(const char *message);
-
-#if 0
-#define LEXOUT(s) printf s /* used ONLY when debugging */
-#else
-#define LEXOUT(s)
-#endif
-
-/** avoid warning in about fwrite return value */
-#define ECHO ub_c_error_msg("syntax error at text: %s", yytext)
-
-/** A parser variable, this is a statement in the config file which is
- * of the form variable: value1 value2 ... nargs is the number of values. */
-#define YDVAR(nargs, var) \
- num_args=(nargs); \
- LEXOUT(("v(%s%d) ", yytext, num_args)); \
- if(num_args > 0) { BEGIN(val); } \
- return (var);
-
-struct inc_state {
- char* filename;
- int line;
-};
-static struct inc_state parse_stack[MAXINCLUDES];
-static YY_BUFFER_STATE include_stack[MAXINCLUDES];
-static int config_include_stack_ptr = 0;
-static int inc_prev = 0;
-static int num_args = 0;
-
-static void config_start_include(const char* filename)
-{
- FILE *input;
- if(strlen(filename) == 0) {
- ub_c_error_msg("empty include file name");
- return;
- }
- if(config_include_stack_ptr >= MAXINCLUDES) {
- ub_c_error_msg("includes nested too deeply, skipped (>%d)", MAXINCLUDES);
- return;
- }
- if(cfg_parser->chroot && strncmp(filename, cfg_parser->chroot,
- strlen(cfg_parser->chroot)) == 0) {
- filename += strlen(cfg_parser->chroot);
- }
- input = fopen(filename, "r");
- if(!input) {
- ub_c_error_msg("cannot open include file '%s': %s",
- filename, strerror(errno));
- return;
- }
- LEXOUT(("switch_to_include_file(%s) ", filename));
- parse_stack[config_include_stack_ptr].filename = cfg_parser->filename;
- parse_stack[config_include_stack_ptr].line = cfg_parser->line;
- include_stack[config_include_stack_ptr] = YY_CURRENT_BUFFER;
- cfg_parser->filename = strdup(filename);
- cfg_parser->line = 1;
- yy_switch_to_buffer(yy_create_buffer(input,YY_BUF_SIZE));
- ++config_include_stack_ptr;
-}
-
-static void config_start_include_glob(const char* filename)
-{
-
- /* check for wildcards */
-#ifdef HAVE_GLOB
- glob_t g;
- size_t i;
- int r, flags;
- if(!(!strchr(filename, '*') && !strchr(filename, '?') && !strchr(filename, '[') &&
- !strchr(filename, '{') && !strchr(filename, '~'))) {
- flags = 0
-#ifdef GLOB_ERR
- | GLOB_ERR
-#endif
-#ifdef GLOB_NOSORT
- | GLOB_NOSORT
-#endif
-#ifdef GLOB_BRACE
- | GLOB_BRACE
-#endif
-#ifdef GLOB_TILDE
- | GLOB_TILDE
-#endif
- ;
- memset(&g, 0, sizeof(g));
- r = glob(filename, flags, NULL, &g);
- if(r) {
- /* some error */
- globfree(&g);
- config_start_include(filename); /* let original deal with it */
- return;
- }
- /* process files found, if any */
- for(i=0; i<(size_t)g.gl_pathc; i++) {
- config_start_include(g.gl_pathv[i]);
- }
- globfree(&g);
- return;
- }
-#endif /* HAVE_GLOB */
-
- config_start_include(filename);
-}
-
-static void config_end_include(void)
-{
- --config_include_stack_ptr;
- free(cfg_parser->filename);
- cfg_parser->filename = parse_stack[config_include_stack_ptr].filename;
- cfg_parser->line = parse_stack[config_include_stack_ptr].line;
- yy_delete_buffer(YY_CURRENT_BUFFER);
- yy_switch_to_buffer(include_stack[config_include_stack_ptr]);
-}
-
-#ifndef yy_set_bol /* compat definition, for flex 2.4.6 */
-#define yy_set_bol(at_bol) \
- { \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer(yyin,YY_BUF_SIZE ); \
- yy_current_buffer->yy_ch_buf[0] = ((at_bol)?'\n':' '); \
- }
-#endif
-
-#define YY_NO_INPUT 1
-#ifndef YY_NO_UNPUT
-#define YY_NO_UNPUT 1
-#endif
-#ifndef YY_NO_INPUT
-#define YY_NO_INPUT 1
-#endif
-
-#define INITIAL 0
-#define quotedstring 1
-#define singlequotedstr 2
-#define include 3
-#define include_quoted 4
-#define val 5
-
-#ifndef YY_NO_UNISTD_H
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-#include <unistd.h>
-#endif
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-static int yy_init_globals (void );
-
-/* Accessor methods to globals.
- These are made visible to non-reentrant scanners for convenience. */
-
-int yylex_destroy (void );
-
-int yyget_debug (void );
-
-void yyset_debug (int debug_flag );
-
-YY_EXTRA_TYPE yyget_extra (void );
-
-void yyset_extra (YY_EXTRA_TYPE user_defined );
-
-FILE *yyget_in (void );
-
-void yyset_in (FILE * in_str );
-
-FILE *yyget_out (void );
-
-void yyset_out (FILE * out_str );
-
-yy_size_t yyget_leng (void );
-
-char *yyget_text (void );
-
-int yyget_lineno (void );
-
-void yyset_lineno (int line_number );
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
- */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int yywrap (void );
-#else
-extern int yywrap (void );
-#endif
-#endif
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
-#endif
-
-#ifndef YY_NO_INPUT
-
-#ifdef __cplusplus
-static int yyinput (void );
-#else
-static int input (void );
-#endif
-
-#endif
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-#ifndef ECHO
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
-#endif
-
-/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
- if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
- { \
- int c = '*'; \
- size_t n; \
- for ( n = 0; n < max_size && \
- (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
- buf[n] = (char) c; \
- if ( c == '\n' ) \
- buf[n++] = (char) c; \
- if ( c == EOF && ferror( yyin ) ) \
- YY_FATAL_ERROR( "input in flex scanner failed" ); \
- result = n; \
- } \
- else \
- { \
- errno=0; \
- while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
- { \
- if( errno != EINTR) \
- { \
- YY_FATAL_ERROR( "input in flex scanner failed" ); \
- break; \
- } \
- errno=0; \
- clearerr(yyin); \
- } \
- }\
-\
-
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-#endif
-
-/* end tables serialization structures and prototypes */
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
-
-extern int yylex (void);
-
-#define YY_DECL int yylex (void)
-#endif /* !YY_DECL */
-
-/* Code executed at the beginning of each rule, after yytext and yyleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-#define YY_RULE_SETUP \
- YY_USER_ACTION
-
-/** The main scanner function which does all the work.
- */
-YY_DECL
-{
- yy_state_type yy_current_state;
- char *yy_cp, *yy_bp;
- int yy_act;
-
- if ( !(yy_init) )
- {
- (yy_init) = 1;
-
-#ifdef YY_USER_INIT
- YY_USER_INIT;
-#endif
-
- if ( ! (yy_start) )
- (yy_start) = 1; /* first start state */
-
- if ( ! yyin )
- yyin = stdin;
-
- if ( ! yyout )
- yyout = stdout;
-
- if ( ! YY_CURRENT_BUFFER ) {
- yyensure_buffer_stack ();
- YY_CURRENT_BUFFER_LVALUE =
- yy_create_buffer(yyin,YY_BUF_SIZE );
- }
-
- yy_load_buffer_state( );
- }
-
- while ( 1 ) /* loops until end-of-file is reached */
- {
- (yy_more_len) = 0;
- if ( (yy_more_flag) )
- {
- (yy_more_len) = (yy_c_buf_p) - (yytext_ptr);
- (yy_more_flag) = 0;
- }
- yy_cp = (yy_c_buf_p);
-
- /* Support of yytext. */
- *yy_cp = (yy_hold_char);
-
- /* yy_bp points to the position in yy_ch_buf of the start of
- * the current run.
- */
- yy_bp = yy_cp;
-
- yy_current_state = (yy_start);
-yy_match:
- do
- {
- YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
- if ( yy_accept[yy_current_state] )
- {
- (yy_last_accepting_state) = yy_current_state;
- (yy_last_accepting_cpos) = yy_cp;
- }
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 1343 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- ++yy_cp;
- }
- while ( yy_base[yy_current_state] != 2683 );
-
-yy_find_action:
- yy_act = yy_accept[yy_current_state];
- if ( yy_act == 0 )
- { /* have to back up */
- yy_cp = (yy_last_accepting_cpos);
- yy_current_state = (yy_last_accepting_state);
- yy_act = yy_accept[yy_current_state];
- }
-
- YY_DO_BEFORE_ACTION;
-
-do_action: /* This label is used only to access EOF actions. */
-
- switch ( yy_act )
- { /* beginning of action switch */
- case 0: /* must back up */
- /* undo the effects of YY_DO_BEFORE_ACTION */
- *yy_cp = (yy_hold_char);
- yy_cp = (yy_last_accepting_cpos);
- yy_current_state = (yy_last_accepting_state);
- goto yy_find_action;
-
-case 1:
-YY_RULE_SETUP
-{
- LEXOUT(("SP ")); /* ignore */ }
- YY_BREAK
-case 2:
-YY_RULE_SETUP
-{
- /* note that flex makes the longest match and '.' is any but not nl */
- LEXOUT(("comment(%s) ", yytext)); /* ignore */ }
- YY_BREAK
-case 3:
-YY_RULE_SETUP
-{ YDVAR(0, VAR_SERVER) }
- YY_BREAK
-case 4:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_NUM_THREADS) }
- YY_BREAK
-case 5:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_VERBOSITY) }
- YY_BREAK
-case 6:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_PORT) }
- YY_BREAK
-case 7:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_OUTGOING_RANGE) }
- YY_BREAK
-case 8:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_OUTGOING_PORT_PERMIT) }
- YY_BREAK
-case 9:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_OUTGOING_PORT_AVOID) }
- YY_BREAK
-case 10:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_OUTGOING_NUM_TCP) }
- YY_BREAK
-case 11:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_INCOMING_NUM_TCP) }
- YY_BREAK
-case 12:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_DO_IP4) }
- YY_BREAK
-case 13:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_DO_IP6) }
- YY_BREAK
-case 14:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_DO_UDP) }
- YY_BREAK
-case 15:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_DO_TCP) }
- YY_BREAK
-case 16:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_TCP_UPSTREAM) }
- YY_BREAK
-case 17:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_SSL_UPSTREAM) }
- YY_BREAK
-case 18:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_SSL_SERVICE_KEY) }
- YY_BREAK
-case 19:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_SSL_SERVICE_PEM) }
- YY_BREAK
-case 20:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_SSL_PORT) }
- YY_BREAK
-case 21:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_DO_DAEMONIZE) }
- YY_BREAK
-case 22:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_INTERFACE) }
- YY_BREAK
-case 23:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_OUTGOING_INTERFACE) }
- YY_BREAK
-case 24:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
- YY_BREAK
-case 25:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_SO_RCVBUF) }
- YY_BREAK
-case 26:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_SO_SNDBUF) }
- YY_BREAK
-case 27:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_CHROOT) }
- YY_BREAK
-case 28:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_USERNAME) }
- YY_BREAK
-case 29:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_DIRECTORY) }
- YY_BREAK
-case 30:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_LOGFILE) }
- YY_BREAK
-case 31:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_PIDFILE) }
- YY_BREAK
-case 32:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_ROOT_HINTS) }
- YY_BREAK
-case 33:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
- YY_BREAK
-case 34:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_MSG_BUFFER_SIZE) }
- YY_BREAK
-case 35:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_MSG_CACHE_SIZE) }
- YY_BREAK
-case 36:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_MSG_CACHE_SLABS) }
- YY_BREAK
-case 37:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_RRSET_CACHE_SIZE) }
- YY_BREAK
-case 38:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_RRSET_CACHE_SLABS) }
- YY_BREAK
-case 39:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_CACHE_MAX_TTL) }
- YY_BREAK
-case 40:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_CACHE_MIN_TTL) }
- YY_BREAK
-case 41:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_INFRA_HOST_TTL) }
- YY_BREAK
-case 42:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_INFRA_LAME_TTL) }
- YY_BREAK
-case 43:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
- YY_BREAK
-case 44:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
- YY_BREAK
-case 45:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
- YY_BREAK
-case 46:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
- YY_BREAK
-case 47:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
- YY_BREAK
-case 48:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
- YY_BREAK
-case 49:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
- YY_BREAK
-case 50:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
- YY_BREAK
-case 51:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_HARDEN_GLUE) }
- YY_BREAK
-case 52:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
- YY_BREAK
-case 53:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
- YY_BREAK
-case 54:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
- YY_BREAK
-case 55:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
- YY_BREAK
-case 56:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
- YY_BREAK
-case 57:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
- YY_BREAK
-case 58:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
- YY_BREAK
-case 59:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_PREFETCH_KEY) }
- YY_BREAK
-case 60:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_PREFETCH) }
- YY_BREAK
-case 61:
-YY_RULE_SETUP
-{ YDVAR(0, VAR_STUB_ZONE) }
- YY_BREAK
-case 62:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_NAME) }
- YY_BREAK
-case 63:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_STUB_ADDR) }
- YY_BREAK
-case 64:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_STUB_HOST) }
- YY_BREAK
-case 65:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_STUB_PRIME) }
- YY_BREAK
-case 66:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_STUB_FIRST) }
- YY_BREAK
-case 67:
-YY_RULE_SETUP
-{ YDVAR(0, VAR_FORWARD_ZONE) }
- YY_BREAK
-case 68:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_FORWARD_ADDR) }
- YY_BREAK
-case 69:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_FORWARD_HOST) }
- YY_BREAK
-case 70:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_FORWARD_FIRST) }
- YY_BREAK
-case 71:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
- YY_BREAK
-case 72:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
- YY_BREAK
-case 73:
-YY_RULE_SETUP
-{ YDVAR(2, VAR_ACCESS_CONTROL) }
- YY_BREAK
-case 74:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_HIDE_IDENTITY) }
- YY_BREAK
-case 75:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_HIDE_VERSION) }
- YY_BREAK
-case 76:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_IDENTITY) }
- YY_BREAK
-case 77:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_VERSION) }
- YY_BREAK
-case 78:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_MODULE_CONF) }
- YY_BREAK
-case 79:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_DLV_ANCHOR) }
- YY_BREAK
-case 80:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
- YY_BREAK
-case 81:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
- YY_BREAK
-case 82:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
- YY_BREAK
-case 83:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
- YY_BREAK
-case 84:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_TRUST_ANCHOR) }
- YY_BREAK
-case 85:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
- YY_BREAK
-case 86:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
- YY_BREAK
-case 87:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
- YY_BREAK
-case 88:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_BOGUS_TTL) }
- YY_BREAK
-case 89:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
- YY_BREAK
-case 90:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
- YY_BREAK
-case 91:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
- YY_BREAK
-case 92:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
- YY_BREAK
-case 93:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
- YY_BREAK
-case 94:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
- YY_BREAK
-case 95:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
- YY_BREAK
-case 96:
-YY_RULE_SETUP
-{
- YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
- YY_BREAK
-case 97:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_ADD_HOLDDOWN) }
- YY_BREAK
-case 98:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_DEL_HOLDDOWN) }
- YY_BREAK
-case 99:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_KEEP_MISSING) }
- YY_BREAK
-case 100:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_USE_SYSLOG) }
- YY_BREAK
-case 101:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_LOG_TIME_ASCII) }
- YY_BREAK
-case 102:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_LOG_QUERIES) }
- YY_BREAK
-case 103:
-YY_RULE_SETUP
-{ YDVAR(2, VAR_LOCAL_ZONE) }
- YY_BREAK
-case 104:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_LOCAL_DATA) }
- YY_BREAK
-case 105:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
- YY_BREAK
-case 106:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
- YY_BREAK
-case 107:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
- YY_BREAK
-case 108:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
- YY_BREAK
-case 109:
-YY_RULE_SETUP
-{ YDVAR(0, VAR_REMOTE_CONTROL) }
- YY_BREAK
-case 110:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_CONTROL_ENABLE) }
- YY_BREAK
-case 111:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_CONTROL_INTERFACE) }
- YY_BREAK
-case 112:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_CONTROL_PORT) }
- YY_BREAK
-case 113:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_SERVER_KEY_FILE) }
- YY_BREAK
-case 114:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_SERVER_CERT_FILE) }
- YY_BREAK
-case 115:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
- YY_BREAK
-case 116:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
- YY_BREAK
-case 117:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_PYTHON_SCRIPT) }
- YY_BREAK
-case 118:
-YY_RULE_SETUP
-{ YDVAR(0, VAR_PYTHON) }
- YY_BREAK
-case 119:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_DOMAIN_INSECURE) }
- YY_BREAK
-case 120:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
- YY_BREAK
-case 121:
-YY_RULE_SETUP
-{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
- YY_BREAK
-case 122:
-/* rule 122 can match eol */
-YY_RULE_SETUP
-{ LEXOUT(("NL\n")); cfg_parser->line++; }
- YY_BREAK
-/* Quoted strings. Strip leading and ending quotes */
-case 123:
-YY_RULE_SETUP
-{ BEGIN(quotedstring); LEXOUT(("QS ")); }
- YY_BREAK
-case YY_STATE_EOF(quotedstring):
-{
- yyerror("EOF inside quoted string");
- if(--num_args == 0) { BEGIN(INITIAL); }
- else { BEGIN(val); }
-}
- YY_BREAK
-case 124:
-YY_RULE_SETUP
-{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
- YY_BREAK
-case 125:
-/* rule 125 can match eol */
-YY_RULE_SETUP
-{ yyerror("newline inside quoted string, no end \"");
- cfg_parser->line++; BEGIN(INITIAL); }
- YY_BREAK
-case 126:
-YY_RULE_SETUP
-{
- LEXOUT(("QE "));
- if(--num_args == 0) { BEGIN(INITIAL); }
- else { BEGIN(val); }
- yytext[yyleng - 1] = '\0';
- yylval.str = strdup(yytext);
- if(!yylval.str)
- yyerror("out of memory");
- return STRING_ARG;
-}
- YY_BREAK
-/* Single Quoted strings. Strip leading and ending quotes */
-case 127:
-YY_RULE_SETUP
-{ BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
- YY_BREAK
-case YY_STATE_EOF(singlequotedstr):
-{
- yyerror("EOF inside quoted string");
- if(--num_args == 0) { BEGIN(INITIAL); }
- else { BEGIN(val); }
-}
- YY_BREAK
-case 128:
-YY_RULE_SETUP
-{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
- YY_BREAK
-case 129:
-/* rule 129 can match eol */
-YY_RULE_SETUP
-{ yyerror("newline inside quoted string, no end '");
- cfg_parser->line++; BEGIN(INITIAL); }
- YY_BREAK
-case 130:
-YY_RULE_SETUP
-{
- LEXOUT(("SQE "));
- if(--num_args == 0) { BEGIN(INITIAL); }
- else { BEGIN(val); }
- yytext[yyleng - 1] = '\0';
- yylval.str = strdup(yytext);
- if(!yylval.str)
- yyerror("out of memory");
- return STRING_ARG;
-}
- YY_BREAK
-/* include: directive */
-case 131:
-YY_RULE_SETUP
-{
- LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
- YY_BREAK
-case YY_STATE_EOF(include):
-{
- yyerror("EOF inside include directive");
- BEGIN(inc_prev);
-}
- YY_BREAK
-case 132:
-YY_RULE_SETUP
-{ LEXOUT(("ISP ")); /* ignore */ }
- YY_BREAK
-case 133:
-/* rule 133 can match eol */
-YY_RULE_SETUP
-{ LEXOUT(("NL\n")); cfg_parser->line++;}
- YY_BREAK
-case 134:
-YY_RULE_SETUP
-{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
- YY_BREAK
-case 135:
-YY_RULE_SETUP
-{
- LEXOUT(("Iunquotedstr(%s) ", yytext));
- config_start_include_glob(yytext);
- BEGIN(inc_prev);
-}
- YY_BREAK
-case YY_STATE_EOF(include_quoted):
-{
- yyerror("EOF inside quoted string");
- BEGIN(inc_prev);
-}
- YY_BREAK
-case 136:
-YY_RULE_SETUP
-{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
- YY_BREAK
-case 137:
-/* rule 137 can match eol */
-YY_RULE_SETUP
-{ yyerror("newline before \" in include name");
- cfg_parser->line++; BEGIN(inc_prev); }
- YY_BREAK
-case 138:
-YY_RULE_SETUP
-{
- LEXOUT(("IQE "));
- yytext[yyleng - 1] = '\0';
- config_start_include_glob(yytext);
- BEGIN(inc_prev);
-}
- YY_BREAK
-case YY_STATE_EOF(INITIAL):
-case YY_STATE_EOF(val):
-{
- yy_set_bol(1); /* Set beginning of line, so "^" rules match. */
- if (config_include_stack_ptr == 0) {
- yyterminate();
- } else {
- fclose(yyin);
- config_end_include();
- }
-}
- YY_BREAK
-case 139:
-YY_RULE_SETUP
-{ LEXOUT(("unquotedstr(%s) ", yytext));
- if(--num_args == 0) { BEGIN(INITIAL); }
- yylval.str = strdup(yytext); return STRING_ARG; }
- YY_BREAK
-case 140:
-YY_RULE_SETUP
-{
- ub_c_error_msg("unknown keyword '%s'", yytext);
- }
- YY_BREAK
-case 141:
-YY_RULE_SETUP
-{
- ub_c_error_msg("stray '%s'", yytext);
- }
- YY_BREAK
-case 142:
-YY_RULE_SETUP
-ECHO;
- YY_BREAK
-
- case YY_END_OF_BUFFER:
- {
- /* Amount of text matched not including the EOB char. */
- int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
-
- /* Undo the effects of YY_DO_BEFORE_ACTION. */
- *yy_cp = (yy_hold_char);
- YY_RESTORE_YY_MORE_OFFSET
-
- if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
- {
- /* We're scanning a new file or input source. It's
- * possible that this happened because the user
- * just pointed yyin at a new source and called
- * yylex(). If so, then we have to assure
- * consistency between YY_CURRENT_BUFFER and our
- * globals. Here is the right place to do so, because
- * this is the first action (other than possibly a
- * back-up) that will match for the new input source.
- */
- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
- YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
- YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
- }
-
- /* Note that here we test for yy_c_buf_p "<=" to the position
- * of the first EOB in the buffer, since yy_c_buf_p will
- * already have been incremented past the NUL character
- * (since all states make transitions on EOB to the
- * end-of-buffer state). Contrast this with the test
- * in input().
- */
- if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
- { /* This was really a NUL. */
- yy_state_type yy_next_state;
-
- (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
-
- yy_current_state = yy_get_previous_state( );
-
- /* Okay, we're now positioned to make the NUL
- * transition. We couldn't have
- * yy_get_previous_state() go ahead and do it
- * for us because it doesn't know how to deal
- * with the possibility of jamming (and we don't
- * want to build jamming into it because then it
- * will run more slowly).
- */
-
- yy_next_state = yy_try_NUL_trans( yy_current_state );
-
- yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-
- if ( yy_next_state )
- {
- /* Consume the NUL. */
- yy_cp = ++(yy_c_buf_p);
- yy_current_state = yy_next_state;
- goto yy_match;
- }
-
- else
- {
- yy_cp = (yy_c_buf_p);
- goto yy_find_action;
- }
- }
-
- else switch ( yy_get_next_buffer( ) )
- {
- case EOB_ACT_END_OF_FILE:
- {
- (yy_did_buffer_switch_on_eof) = 0;
-
- if ( yywrap( ) )
- {
- /* Note: because we've taken care in
- * yy_get_next_buffer() to have set up
- * yytext, we can now set up
- * yy_c_buf_p so that if some total
- * hoser (like flex itself) wants to
- * call the scanner after we return the
- * YY_NULL, it'll still work - another
- * YY_NULL will get returned.
- */
- (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
-
- yy_act = YY_STATE_EOF(YY_START);
- goto do_action;
- }
-
- else
- {
- if ( ! (yy_did_buffer_switch_on_eof) )
- YY_NEW_FILE;
- }
- break;
- }
-
- case EOB_ACT_CONTINUE_SCAN:
- (yy_c_buf_p) =
- (yytext_ptr) + yy_amount_of_matched_text;
-
- yy_current_state = yy_get_previous_state( );
-
- yy_cp = (yy_c_buf_p);
- yy_bp = (yytext_ptr) + YY_MORE_ADJ;
- goto yy_match;
-
- case EOB_ACT_LAST_MATCH:
- (yy_c_buf_p) =
- &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
-
- yy_current_state = yy_get_previous_state( );
-
- yy_cp = (yy_c_buf_p);
- yy_bp = (yytext_ptr) + YY_MORE_ADJ;
- goto yy_find_action;
- }
- break;
- }
-
- default:
- YY_FATAL_ERROR(
- "fatal flex scanner internal error--no action found" );
- } /* end of action switch */
- } /* end of scanning one token */
-} /* end of yylex */
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- * EOB_ACT_LAST_MATCH -
- * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- * EOB_ACT_END_OF_FILE - end of file
- */
-static int yy_get_next_buffer (void)
-{
- char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
- char *source = (yytext_ptr);
- int number_to_move, i;
- int ret_val;
-
- if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
- YY_FATAL_ERROR(
- "fatal flex scanner internal error--end of buffer missed" );
-
- if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
- { /* Don't try to fill the buffer, so this is an EOF. */
- if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
- {
- /* We matched a single character, the EOB, so
- * treat this as a final EOF.
- */
- return EOB_ACT_END_OF_FILE;
- }
-
- else
- {
- /* We matched some text prior to the EOB, first
- * process it.
- */
- return EOB_ACT_LAST_MATCH;
- }
- }
-
- /* Try to read more data. */
-
- /* First move last chars to start of buffer. */
- number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
-
- for ( i = 0; i < number_to_move; ++i )
- *(dest++) = *(source++);
-
- if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
- /* don't do the read, it's not guaranteed to return an EOF,
- * just force an EOF
- */
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
-
- else
- {
- yy_size_t num_to_read =
- YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-
- while ( num_to_read <= 0 )
- { /* Not enough room in the buffer - grow it. */
-
- /* just a shorter name for the current buffer */
- YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
-
- int yy_c_buf_p_offset =
- (int) ((yy_c_buf_p) - b->yy_ch_buf);
-
- if ( b->yy_is_our_buffer )
- {
- yy_size_t new_size = b->yy_buf_size * 2;
-
- if ( new_size <= 0 )
- b->yy_buf_size += b->yy_buf_size / 8;
- else
- b->yy_buf_size *= 2;
-
- b->yy_ch_buf = (char *)
- /* Include room in for 2 EOB chars. */
- yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
- }
- else
- /* Can't grow it, we don't own it. */
- b->yy_ch_buf = 0;
-
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR(
- "fatal error - scanner input buffer overflow" );
-
- (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
-
- num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
- number_to_move - 1;
-
- }
-
- if ( num_to_read > YY_READ_BUF_SIZE )
- num_to_read = YY_READ_BUF_SIZE;
-
- /* Read in more data. */
- YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
- (yy_n_chars), num_to_read );
-
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
- }
-
- if ( (yy_n_chars) == 0 )
- {
- if ( number_to_move == YY_MORE_ADJ )
- {
- ret_val = EOB_ACT_END_OF_FILE;
- yyrestart(yyin );
- }
-
- else
- {
- ret_val = EOB_ACT_LAST_MATCH;
- YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
- YY_BUFFER_EOF_PENDING;
- }
- }
-
- else
- ret_val = EOB_ACT_CONTINUE_SCAN;
-
- if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
- /* Extend the array by 50%, plus the number we really need. */
- yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
- if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
- }
-
- (yy_n_chars) += number_to_move;
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
- (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-
- return ret_val;
-}
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
- static yy_state_type yy_get_previous_state (void)
-{
- yy_state_type yy_current_state;
- char *yy_cp;
-
- yy_current_state = (yy_start);
-
- for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
- {
- YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
- if ( yy_accept[yy_current_state] )
- {
- (yy_last_accepting_state) = yy_current_state;
- (yy_last_accepting_cpos) = yy_cp;
- }
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 1343 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- }
-
- return yy_current_state;
-}
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- * next_state = yy_try_NUL_trans( current_state );
- */
- static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
-{
- int yy_is_jam;
- char *yy_cp = (yy_c_buf_p);
-
- YY_CHAR yy_c = 1;
- if ( yy_accept[yy_current_state] )
- {
- (yy_last_accepting_state) = yy_current_state;
- (yy_last_accepting_cpos) = yy_cp;
- }
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 1343 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 1342);
-
- return yy_is_jam ? 0 : yy_current_state;
-}
-
-#ifndef YY_NO_INPUT
-#ifdef __cplusplus
- static int yyinput (void)
-#else
- static int input (void)
-#endif
-
-{
- int c;
-
- *(yy_c_buf_p) = (yy_hold_char);
-
- if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
- {
- /* yy_c_buf_p now points to the character we want to return.
- * If this occurs *before* the EOB characters, then it's a
- * valid NUL; if not, then we've hit the end of the buffer.
- */
- if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
- /* This was really a NUL. */
- *(yy_c_buf_p) = '\0';
-
- else
- { /* need more input */
- yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
- ++(yy_c_buf_p);
-
- switch ( yy_get_next_buffer( ) )
- {
- case EOB_ACT_LAST_MATCH:
- /* This happens because yy_g_n_b()
- * sees that we've accumulated a
- * token and flags that we need to
- * try matching the token before
- * proceeding. But for input(),
- * there's no matching to consider.
- * So convert the EOB_ACT_LAST_MATCH
- * to EOB_ACT_END_OF_FILE.
- */
-
- /* Reset buffer status. */
- yyrestart(yyin );
-
- /*FALLTHROUGH*/
-
- case EOB_ACT_END_OF_FILE:
- {
- if ( yywrap( ) )
- return EOF;
-
- if ( ! (yy_did_buffer_switch_on_eof) )
- YY_NEW_FILE;
-#ifdef __cplusplus
- return yyinput();
-#else
- return input();
-#endif
- }
-
- case EOB_ACT_CONTINUE_SCAN:
- (yy_c_buf_p) = (yytext_ptr) + offset;
- break;
- }
- }
- }
-
- c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
- *(yy_c_buf_p) = '\0'; /* preserve yytext */
- (yy_hold_char) = *++(yy_c_buf_p);
-
- return c;
-}
-#endif /* ifndef YY_NO_INPUT */
-
-/** Immediately switch to a different input stream.
- * @param input_file A readable stream.
- *
- * @note This function does not reset the start condition to @c INITIAL .
- */
- void yyrestart (FILE * input_file )
-{
-
- if ( ! YY_CURRENT_BUFFER ){
- yyensure_buffer_stack ();
- YY_CURRENT_BUFFER_LVALUE =
- yy_create_buffer(yyin,YY_BUF_SIZE );
- }
-
- yy_init_buffer(YY_CURRENT_BUFFER,input_file );
- yy_load_buffer_state( );
-}
-
-/** Switch to a different input buffer.
- * @param new_buffer The new input buffer.
- *
- */
- void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
-{
-
- /* TODO. We should be able to replace this entire function body
- * with
- * yypop_buffer_state();
- * yypush_buffer_state(new_buffer);
- */
- yyensure_buffer_stack ();
- if ( YY_CURRENT_BUFFER == new_buffer )
- return;
-
- if ( YY_CURRENT_BUFFER )
- {
- /* Flush out information for old buffer. */
- *(yy_c_buf_p) = (yy_hold_char);
- YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
- }
-
- YY_CURRENT_BUFFER_LVALUE = new_buffer;
- yy_load_buffer_state( );
-
- /* We don't actually know whether we did this switch during
- * EOF (yywrap()) processing, but the only time this flag
- * is looked at is after yywrap() is called, so it's safe
- * to go ahead and always set it.
- */
- (yy_did_buffer_switch_on_eof) = 1;
-}
-
-static void yy_load_buffer_state (void)
-{
- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
- (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
- yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
- (yy_hold_char) = *(yy_c_buf_p);
-}
-
-/** Allocate and initialize an input buffer state.
- * @param file A readable stream.
- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- *
- * @return the allocated buffer state.
- */
- YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
-{
- YY_BUFFER_STATE b;
-
- b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
- b->yy_buf_size = size;
-
- /* yy_ch_buf has to be 2 characters longer than the size given because
- * we need to put in 2 end-of-buffer characters.
- */
- b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 );
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
- b->yy_is_our_buffer = 1;
-
- yy_init_buffer(b,file );
-
- return b;
-}
-
-/** Destroy the buffer.
- * @param b a buffer created with yy_create_buffer()
- *
- */
- void yy_delete_buffer (YY_BUFFER_STATE b )
-{
-
- if ( ! b )
- return;
-
- if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
- YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
-
- if ( b->yy_is_our_buffer )
- yyfree((void *) b->yy_ch_buf );
-
- yyfree((void *) b );
-}
-
-/* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a yyrestart() or at EOF.
- */
- static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
-
-{
- int oerrno = errno;
-
- yy_flush_buffer(b );
-
- b->yy_input_file = file;
- b->yy_fill_buffer = 1;
-
- /* If b is the current buffer, then yy_init_buffer was _probably_
- * called from yyrestart() or through yy_get_next_buffer.
- * In that case, we don't want to reset the lineno or column.
- */
- if (b != YY_CURRENT_BUFFER){
- b->yy_bs_lineno = 1;
- b->yy_bs_column = 0;
- }
-
- b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-
- errno = oerrno;
-}
-
-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- *
- */
- void yy_flush_buffer (YY_BUFFER_STATE b )
-{
- if ( ! b )
- return;
-
- b->yy_n_chars = 0;
-
- /* We always need two end-of-buffer characters. The first causes
- * a transition to the end-of-buffer state. The second causes
- * a jam in that state.
- */
- b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
- b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
- b->yy_buf_pos = &b->yy_ch_buf[0];
-
- b->yy_at_bol = 1;
- b->yy_buffer_status = YY_BUFFER_NEW;
-
- if ( b == YY_CURRENT_BUFFER )
- yy_load_buffer_state( );
-}
-
-/** Pushes the new state onto the stack. The new state becomes
- * the current state. This function will allocate the stack
- * if necessary.
- * @param new_buffer The new state.
- *
- */
-void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
-{
- if (new_buffer == NULL)
- return;
-
- yyensure_buffer_stack();
-
- /* This block is copied from yy_switch_to_buffer. */
- if ( YY_CURRENT_BUFFER )
- {
- /* Flush out information for old buffer. */
- *(yy_c_buf_p) = (yy_hold_char);
- YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
- }
-
- /* Only push if top exists. Otherwise, replace top. */
- if (YY_CURRENT_BUFFER)
- (yy_buffer_stack_top)++;
- YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
- /* copied from yy_switch_to_buffer. */
- yy_load_buffer_state( );
- (yy_did_buffer_switch_on_eof) = 1;
-}
-
-/** Removes and deletes the top of the stack, if present.
- * The next element becomes the new top.
- *
- */
-void yypop_buffer_state (void)
-{
- if (!YY_CURRENT_BUFFER)
- return;
-
- yy_delete_buffer(YY_CURRENT_BUFFER );
- YY_CURRENT_BUFFER_LVALUE = NULL;
- if ((yy_buffer_stack_top) > 0)
- --(yy_buffer_stack_top);
-
- if (YY_CURRENT_BUFFER) {
- yy_load_buffer_state( );
- (yy_did_buffer_switch_on_eof) = 1;
- }
-}
-
-/* Allocates the stack if it does not exist.
- * Guarantees space for at least one push.
- */
-static void yyensure_buffer_stack (void)
-{
- yy_size_t num_to_alloc;
-
- if (!(yy_buffer_stack)) {
-
- /* First allocation is just for 2 elements, since we don't know if this
- * scanner will even need a stack. We use 2 instead of 1 to avoid an
- * immediate realloc on the next call.
- */
- num_to_alloc = 1;
- (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
- (num_to_alloc * sizeof(struct yy_buffer_state*)
- );
- if ( ! (yy_buffer_stack) )
- YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
- memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-
- (yy_buffer_stack_max) = num_to_alloc;
- (yy_buffer_stack_top) = 0;
- return;
- }
-
- if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
- /* Increase the buffer to prepare for a possible push. */
- int grow_size = 8 /* arbitrary grow size */;
-
- num_to_alloc = (yy_buffer_stack_max) + grow_size;
- (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
- ((yy_buffer_stack),
- num_to_alloc * sizeof(struct yy_buffer_state*)
- );
- if ( ! (yy_buffer_stack) )
- YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
- /* zero only the new slots.*/
- memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
- (yy_buffer_stack_max) = num_to_alloc;
- }
-}
-
-/** Setup the input buffer state to scan directly from a user-specified character buffer.
- * @param base the character buffer
- * @param size the size in bytes of the character buffer
- *
- * @return the newly allocated buffer state object.
- */
-YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
-{
- YY_BUFFER_STATE b;
-
- if ( size < 2 ||
- base[size-2] != YY_END_OF_BUFFER_CHAR ||
- base[size-1] != YY_END_OF_BUFFER_CHAR )
- /* They forgot to leave room for the EOB's. */
- return 0;
-
- b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
-
- b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
- b->yy_buf_pos = b->yy_ch_buf = base;
- b->yy_is_our_buffer = 0;
- b->yy_input_file = 0;
- b->yy_n_chars = b->yy_buf_size;
- b->yy_is_interactive = 0;
- b->yy_at_bol = 1;
- b->yy_fill_buffer = 0;
- b->yy_buffer_status = YY_BUFFER_NEW;
-
- yy_switch_to_buffer(b );
-
- return b;
-}
-
-/** Setup the input buffer state to scan a string. The next call to yylex() will
- * scan from a @e copy of @a str.
- * @param yystr a NUL-terminated string to scan
- *
- * @return the newly allocated buffer state object.
- * @note If you want to scan bytes that may contain NUL values, then use
- * yy_scan_bytes() instead.
- */
-YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
-{
-
- return yy_scan_bytes(yystr,strlen(yystr) );
-}
-
-/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
- * scan from a @e copy of @a bytes.
- * @param yybytes the byte buffer to scan
- * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
- *
- * @return the newly allocated buffer state object.
- */
-YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len )
-{
- YY_BUFFER_STATE b;
- char *buf;
- yy_size_t n;
- yy_size_t i;
-
- /* Get memory for full buffer, including space for trailing EOB's. */
- n = _yybytes_len + 2;
- buf = (char *) yyalloc(n );
- if ( ! buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
-
- for ( i = 0; i < _yybytes_len; ++i )
- buf[i] = yybytes[i];
-
- buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
-
- b = yy_scan_buffer(buf,n );
- if ( ! b )
- YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
-
- /* It's okay to grow etc. this buffer, and we should throw it
- * away when we're done.
- */
- b->yy_is_our_buffer = 1;
-
- return b;
-}
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-static void yy_fatal_error (yyconst char* msg )
-{
- (void) fprintf( stderr, "%s\n", msg );
- exit( YY_EXIT_FAILURE );
-}
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up yytext. */ \
- int yyless_macro_arg = (n); \
- YY_LESS_LINENO(yyless_macro_arg);\
- yytext[yyleng] = (yy_hold_char); \
- (yy_c_buf_p) = yytext + yyless_macro_arg; \
- (yy_hold_char) = *(yy_c_buf_p); \
- *(yy_c_buf_p) = '\0'; \
- yyleng = yyless_macro_arg; \
- } \
- while ( 0 )
-
-/* Accessor methods (get/set functions) to struct members. */
-
-/** Get the current line number.
- *
- */
-int yyget_lineno (void)
-{
-
- return yylineno;
-}
-
-/** Get the input stream.
- *
- */
-FILE *yyget_in (void)
-{
- return yyin;
-}
-
-/** Get the output stream.
- *
- */
-FILE *yyget_out (void)
-{
- return yyout;
-}
-
-/** Get the length of the current token.
- *
- */
-yy_size_t yyget_leng (void)
-{
- return yyleng;
-}
-
-/** Get the current token.
- *
- */
-
-char *yyget_text (void)
-{
- return yytext;
-}
-
-/** Set the current line number.
- * @param line_number
- *
- */
-void yyset_lineno (int line_number )
-{
-
- yylineno = line_number;
-}
-
-/** Set the input stream. This does not discard the current
- * input buffer.
- * @param in_str A readable stream.
- *
- * @see yy_switch_to_buffer
- */
-void yyset_in (FILE * in_str )
-{
- yyin = in_str ;
-}
-
-void yyset_out (FILE * out_str )
-{
- yyout = out_str ;
-}
-
-int yyget_debug (void)
-{
- return yy_flex_debug;
-}
-
-void yyset_debug (int bdebug )
-{
- yy_flex_debug = bdebug ;
-}
-
-static int yy_init_globals (void)
-{
- /* Initialization is the same as for the non-reentrant scanner.
- * This function is called from yylex_destroy(), so don't allocate here.
- */
-
- (yy_buffer_stack) = 0;
- (yy_buffer_stack_top) = 0;
- (yy_buffer_stack_max) = 0;
- (yy_c_buf_p) = (char *) 0;
- (yy_init) = 0;
- (yy_start) = 0;
-
-/* Defined in main.c */
-#ifdef YY_STDINIT
- yyin = stdin;
- yyout = stdout;
-#else
- yyin = (FILE *) 0;
- yyout = (FILE *) 0;
-#endif
-
- /* For future reference: Set errno on error, since we are called by
- * yylex_init()
- */
- return 0;
-}
-
-/* yylex_destroy is for both reentrant and non-reentrant scanners. */
-int yylex_destroy (void)
-{
-
- /* Pop the buffer stack, destroying each element. */
- while(YY_CURRENT_BUFFER){
- yy_delete_buffer(YY_CURRENT_BUFFER );
- YY_CURRENT_BUFFER_LVALUE = NULL;
- yypop_buffer_state();
- }
-
- /* Destroy the stack itself. */
- yyfree((yy_buffer_stack) );
- (yy_buffer_stack) = NULL;
-
- /* Reset the globals. This is important in a non-reentrant scanner so the next time
- * yylex() is called, initialization will occur. */
- yy_init_globals( );
-
- return 0;
-}
-
-/*
- * Internal utility routines.
- */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
-{
- int i;
- for ( i = 0; i < n; ++i )
- s1[i] = s2[i];
-}
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
-{
- int n;
- for ( n = 0; s[n]; ++n )
- ;
-
- return n;
-}
-#endif
-
-void *yyalloc (yy_size_t size )
-{
- return (void *) malloc( size );
-}
-
-void *yyrealloc (void * ptr, yy_size_t size )
-{
- /* The cast to (char *) in the following accommodates both
- * implementations that use char* generic pointers, and those
- * that use void* generic pointers. It works with the latter
- * because both ANSI C and C++ allow castless assignment from
- * any pointer type to void*, and deal with argument conversions
- * as though doing an assignment.
- */
- return (void *) realloc( (char *) ptr, size );
-}
-
-void yyfree (void * ptr )
-{
- free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
-}
-
-#define YYTABLES_NAME "yytables"
-
diff --git a/contrib/unbound/util/configlexer.lex b/contrib/unbound/util/configlexer.lex
index 4694cdd..6c22609 100644
--- a/contrib/unbound/util/configlexer.lex
+++ b/contrib/unbound/util/configlexer.lex
@@ -8,6 +8,8 @@
*
*/
+#include "config.h"
+
#include <ctype.h>
#include <string.h>
#include <strings.h>
@@ -16,7 +18,7 @@
#endif
#include "util/config_file.h"
-#include "util/configparser.h"
+#include "configparser.h"
void ub_c_error(const char *message);
#if 0
@@ -26,56 +28,80 @@ void ub_c_error(const char *message);
#endif
/** avoid warning in about fwrite return value */
-#define ECHO ub_c_error_msg("syntax error at text: %s", yytext)
+#define ECHO ub_c_error_msg("syntax error at text: %s", ub_c_text)
/** A parser variable, this is a statement in the config file which is
* of the form variable: value1 value2 ... nargs is the number of values. */
#define YDVAR(nargs, var) \
num_args=(nargs); \
- LEXOUT(("v(%s%d) ", yytext, num_args)); \
+ LEXOUT(("v(%s%d) ", ub_c_text, num_args)); \
if(num_args > 0) { BEGIN(val); } \
return (var);
struct inc_state {
char* filename;
int line;
+ YY_BUFFER_STATE buffer;
+ struct inc_state* next;
};
-static struct inc_state parse_stack[MAXINCLUDES];
-static YY_BUFFER_STATE include_stack[MAXINCLUDES];
-static int config_include_stack_ptr = 0;
+static struct inc_state* config_include_stack = NULL;
+static int inc_depth = 0;
static int inc_prev = 0;
static int num_args = 0;
+void init_cfg_parse(void)
+{
+ config_include_stack = NULL;
+ inc_depth = 0;
+ inc_prev = 0;
+ num_args = 0;
+}
static void config_start_include(const char* filename)
{
FILE *input;
+ struct inc_state* s;
+ char* nm;
+ if(inc_depth++ > 100000) {
+ ub_c_error_msg("too many include files");
+ return;
+ }
if(strlen(filename) == 0) {
ub_c_error_msg("empty include file name");
return;
}
- if(config_include_stack_ptr >= MAXINCLUDES) {
- ub_c_error_msg("includes nested too deeply, skipped (>%d)", MAXINCLUDES);
+ s = (struct inc_state*)malloc(sizeof(*s));
+ if(!s) {
+ ub_c_error_msg("include %s: malloc failure", filename);
return;
}
if(cfg_parser->chroot && strncmp(filename, cfg_parser->chroot,
strlen(cfg_parser->chroot)) == 0) {
filename += strlen(cfg_parser->chroot);
}
+ nm = strdup(filename);
+ if(!nm) {
+ ub_c_error_msg("include %s: strdup failure", filename);
+ free(s);
+ return;
+ }
input = fopen(filename, "r");
if(!input) {
ub_c_error_msg("cannot open include file '%s': %s",
filename, strerror(errno));
+ free(s);
+ free(nm);
return;
}
- LEXOUT(("switch_to_include_file(%s) ", filename));
- parse_stack[config_include_stack_ptr].filename = cfg_parser->filename;
- parse_stack[config_include_stack_ptr].line = cfg_parser->line;
- include_stack[config_include_stack_ptr] = YY_CURRENT_BUFFER;
- cfg_parser->filename = strdup(filename);
+ LEXOUT(("switch_to_include_file(%s)\n", filename));
+ s->filename = cfg_parser->filename;
+ s->line = cfg_parser->line;
+ s->buffer = YY_CURRENT_BUFFER;
+ s->next = config_include_stack;
+ config_include_stack = s;
+ cfg_parser->filename = nm;
cfg_parser->line = 1;
yy_switch_to_buffer(yy_create_buffer(input, YY_BUF_SIZE));
- ++config_include_stack_ptr;
}
static void config_start_include_glob(const char* filename)
@@ -107,6 +133,8 @@ static void config_start_include_glob(const char* filename)
if(r) {
/* some error */
globfree(&g);
+ if(r == GLOB_NOMATCH)
+ return; /* no matches for pattern */
config_start_include(filename); /* let original deal with it */
return;
}
@@ -124,19 +152,23 @@ static void config_start_include_glob(const char* filename)
static void config_end_include(void)
{
- --config_include_stack_ptr;
+ struct inc_state* s = config_include_stack;
+ --inc_depth;
+ if(!s) return;
free(cfg_parser->filename);
- cfg_parser->filename = parse_stack[config_include_stack_ptr].filename;
- cfg_parser->line = parse_stack[config_include_stack_ptr].line;
+ cfg_parser->filename = s->filename;
+ cfg_parser->line = s->line;
yy_delete_buffer(YY_CURRENT_BUFFER);
- yy_switch_to_buffer(include_stack[config_include_stack_ptr]);
+ yy_switch_to_buffer(s->buffer);
+ config_include_stack = s->next;
+ free(s);
}
#ifndef yy_set_bol /* compat definition, for flex 2.4.6 */
#define yy_set_bol(at_bol) \
{ \
if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ yy_current_buffer = yy_create_buffer( ub_c_in, YY_BUF_SIZE ); \
yy_current_buffer->yy_ch_buf[0] = ((at_bol)?'\n':' '); \
}
#endif
@@ -170,7 +202,7 @@ SQANY [^\'\n\r\\]|\\.
LEXOUT(("SP ")); /* ignore */ }
<INITIAL,val>{SPACE}*{COMMENT}.* {
/* note that flex makes the longest match and '.' is any but not nl */
- LEXOUT(("comment(%s) ", yytext)); /* ignore */ }
+ LEXOUT(("comment(%s) ", ub_c_text)); /* ignore */ }
server{COLON} { YDVAR(0, VAR_SERVER) }
num-threads{COLON} { YDVAR(1, VAR_NUM_THREADS) }
verbosity{COLON} { YDVAR(1, VAR_VERBOSITY) }
@@ -191,10 +223,12 @@ ssl-service-pem{COLON} { YDVAR(1, VAR_SSL_SERVICE_PEM) }
ssl-port{COLON} { YDVAR(1, VAR_SSL_PORT) }
do-daemonize{COLON} { YDVAR(1, VAR_DO_DAEMONIZE) }
interface{COLON} { YDVAR(1, VAR_INTERFACE) }
+ip-address{COLON} { YDVAR(1, VAR_INTERFACE) }
outgoing-interface{COLON} { YDVAR(1, VAR_OUTGOING_INTERFACE) }
interface-automatic{COLON} { YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
so-rcvbuf{COLON} { YDVAR(1, VAR_SO_RCVBUF) }
so-sndbuf{COLON} { YDVAR(1, VAR_SO_SNDBUF) }
+so-reuseport{COLON} { YDVAR(1, VAR_SO_REUSEPORT) }
chroot{COLON} { YDVAR(1, VAR_CHROOT) }
username{COLON} { YDVAR(1, VAR_USERNAME) }
directory{COLON} { YDVAR(1, VAR_DIRECTORY) }
@@ -216,6 +250,7 @@ infra-cache-numhosts{COLON} { YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
infra-cache-lame-size{COLON} { YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
num-queries-per-thread{COLON} { YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
jostle-timeout{COLON} { YDVAR(1, VAR_JOSTLE_TIMEOUT) }
+delay-close{COLON} { YDVAR(1, VAR_DELAY_CLOSE) }
target-fetch-policy{COLON} { YDVAR(1, VAR_TARGET_FETCH_POLICY) }
harden-short-bufsize{COLON} { YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
harden-large-queries{COLON} { YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
@@ -275,6 +310,7 @@ log-queries{COLON} { YDVAR(1, VAR_LOG_QUERIES) }
local-zone{COLON} { YDVAR(2, VAR_LOCAL_ZONE) }
local-data{COLON} { YDVAR(1, VAR_LOCAL_DATA) }
local-data-ptr{COLON} { YDVAR(1, VAR_LOCAL_DATA_PTR) }
+unblock-lan-zones{COLON} { YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
statistics-interval{COLON} { YDVAR(1, VAR_STATISTICS_INTERVAL) }
statistics-cumulative{COLON} { YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
extended-statistics{COLON} { YDVAR(1, VAR_EXTENDED_STATISTICS) }
@@ -291,98 +327,100 @@ python{COLON} { YDVAR(0, VAR_PYTHON) }
domain-insecure{COLON} { YDVAR(1, VAR_DOMAIN_INSECURE) }
minimal-responses{COLON} { YDVAR(1, VAR_MINIMAL_RESPONSES) }
rrset-roundrobin{COLON} { YDVAR(1, VAR_RRSET_ROUNDROBIN) }
+max-udp-size{COLON} { YDVAR(1, VAR_MAX_UDP_SIZE) }
<INITIAL,val>{NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; }
/* Quoted strings. Strip leading and ending quotes */
<val>\" { BEGIN(quotedstring); LEXOUT(("QS ")); }
<quotedstring><<EOF>> {
- yyerror("EOF inside quoted string");
+ ub_c_error("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
-<quotedstring>{DQANY}* { LEXOUT(("STR(%s) ", yytext)); yymore(); }
-<quotedstring>{NEWLINE} { yyerror("newline inside quoted string, no end \"");
+<quotedstring>{DQANY}* { LEXOUT(("STR(%s) ", ub_c_text)); yymore(); }
+<quotedstring>{NEWLINE} { ub_c_error("newline inside quoted string, no end \"");
cfg_parser->line++; BEGIN(INITIAL); }
<quotedstring>\" {
LEXOUT(("QE "));
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
- yytext[yyleng - 1] = '\0';
- yylval.str = strdup(yytext);
- if(!yylval.str)
- yyerror("out of memory");
+ ub_c_text[ub_c_leng - 1] = '\0';
+ ub_c_lval.str = strdup(ub_c_text);
+ if(!ub_c_lval.str)
+ ub_c_error("out of memory");
return STRING_ARG;
}
/* Single Quoted strings. Strip leading and ending quotes */
<val>\' { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
<singlequotedstr><<EOF>> {
- yyerror("EOF inside quoted string");
+ ub_c_error("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
-<singlequotedstr>{SQANY}* { LEXOUT(("STR(%s) ", yytext)); yymore(); }
-<singlequotedstr>{NEWLINE} { yyerror("newline inside quoted string, no end '");
+<singlequotedstr>{SQANY}* { LEXOUT(("STR(%s) ", ub_c_text)); yymore(); }
+<singlequotedstr>{NEWLINE} { ub_c_error("newline inside quoted string, no end '");
cfg_parser->line++; BEGIN(INITIAL); }
<singlequotedstr>\' {
LEXOUT(("SQE "));
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
- yytext[yyleng - 1] = '\0';
- yylval.str = strdup(yytext);
- if(!yylval.str)
- yyerror("out of memory");
+ ub_c_text[ub_c_leng - 1] = '\0';
+ ub_c_lval.str = strdup(ub_c_text);
+ if(!ub_c_lval.str)
+ ub_c_error("out of memory");
return STRING_ARG;
}
/* include: directive */
<INITIAL,val>include{COLON} {
- LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
+ LEXOUT(("v(%s) ", ub_c_text)); inc_prev = YYSTATE; BEGIN(include); }
<include><<EOF>> {
- yyerror("EOF inside include directive");
+ ub_c_error("EOF inside include directive");
BEGIN(inc_prev);
}
<include>{SPACE}* { LEXOUT(("ISP ")); /* ignore */ }
<include>{NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++;}
<include>\" { LEXOUT(("IQS ")); BEGIN(include_quoted); }
<include>{UNQUOTEDLETTER}* {
- LEXOUT(("Iunquotedstr(%s) ", yytext));
- config_start_include_glob(yytext);
+ LEXOUT(("Iunquotedstr(%s) ", ub_c_text));
+ config_start_include_glob(ub_c_text);
BEGIN(inc_prev);
}
<include_quoted><<EOF>> {
- yyerror("EOF inside quoted string");
+ ub_c_error("EOF inside quoted string");
BEGIN(inc_prev);
}
-<include_quoted>{DQANY}* { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
-<include_quoted>{NEWLINE} { yyerror("newline before \" in include name");
+<include_quoted>{DQANY}* { LEXOUT(("ISTR(%s) ", ub_c_text)); yymore(); }
+<include_quoted>{NEWLINE} { ub_c_error("newline before \" in include name");
cfg_parser->line++; BEGIN(inc_prev); }
<include_quoted>\" {
LEXOUT(("IQE "));
- yytext[yyleng - 1] = '\0';
- config_start_include_glob(yytext);
+ ub_c_text[ub_c_leng - 1] = '\0';
+ config_start_include_glob(ub_c_text);
BEGIN(inc_prev);
}
<INITIAL,val><<EOF>> {
+ LEXOUT(("LEXEOF "));
yy_set_bol(1); /* Set beginning of line, so "^" rules match. */
- if (config_include_stack_ptr == 0) {
+ if (!config_include_stack) {
yyterminate();
} else {
- fclose(yyin);
+ fclose(ub_c_in);
config_end_include();
}
}
-<val>{UNQUOTEDLETTER}* { LEXOUT(("unquotedstr(%s) ", yytext));
+<val>{UNQUOTEDLETTER}* { LEXOUT(("unquotedstr(%s) ", ub_c_text));
if(--num_args == 0) { BEGIN(INITIAL); }
- yylval.str = strdup(yytext); return STRING_ARG; }
+ ub_c_lval.str = strdup(ub_c_text); return STRING_ARG; }
{UNQUOTEDLETTER_NOCOLON}* {
- ub_c_error_msg("unknown keyword '%s'", yytext);
+ ub_c_error_msg("unknown keyword '%s'", ub_c_text);
}
<*>. {
- ub_c_error_msg("stray '%s'", yytext);
+ ub_c_error_msg("stray '%s'", ub_c_text);
}
%%
diff --git a/contrib/unbound/util/configparser.c b/contrib/unbound/util/configparser.c
deleted file mode 100644
index 1f89d57..0000000
--- a/contrib/unbound/util/configparser.c
+++ /dev/null
@@ -1,2330 +0,0 @@
-#ifndef lint
-static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
-#endif
-
-#define YYBYACC 1
-#define YYMAJOR 1
-#define YYMINOR 9
-
-#define YYEMPTY (-1)
-#define yyclearin (yychar = YYEMPTY)
-#define yyerrok (yyerrflag = 0)
-#define YYRECOVERING() (yyerrflag != 0)
-
-#define YYPREFIX "yy"
-
-#define YYPURE 0
-
-#line 39 "util/configparser.y"
-#include "config.h"
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#include "util/configyyrename.h"
-#include "util/config_file.h"
-#include "util/net_help.h"
-
-int ub_c_lex(void);
-void ub_c_error(const char *message);
-
-/* these need to be global, otherwise they cannot be used inside yacc */
-extern struct config_parser_state* cfg_parser;
-
-#if 0
-#define OUTYY(s) printf s /* used ONLY when debugging */
-#else
-#define OUTYY(s)
-#endif
-
-#line 64 "util/configparser.y"
-#ifdef YYSTYPE
-#undef YYSTYPE_IS_DECLARED
-#define YYSTYPE_IS_DECLARED 1
-#endif
-#ifndef YYSTYPE_IS_DECLARED
-#define YYSTYPE_IS_DECLARED 1
-typedef union {
- char* str;
-} YYSTYPE;
-#endif /* !YYSTYPE_IS_DECLARED */
-#line 54 "util/configparser.c"
-
-/* compatibility with bison */
-#ifdef YYPARSE_PARAM
-/* compatibility with FreeBSD */
-# ifdef YYPARSE_PARAM_TYPE
-# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
-# else
-# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
-# endif
-#else
-# define YYPARSE_DECL() yyparse(void)
-#endif
-
-/* Parameters sent to lex. */
-#ifdef YYLEX_PARAM
-# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
-# define YYLEX yylex(YYLEX_PARAM)
-#else
-# define YYLEX_DECL() yylex(void)
-# define YYLEX yylex()
-#endif
-
-/* Parameters sent to yyerror. */
-#ifndef YYERROR_DECL
-#define YYERROR_DECL() yyerror(const char *s)
-#endif
-#ifndef YYERROR_CALL
-#define YYERROR_CALL(msg) yyerror(msg)
-#endif
-
-extern int YYPARSE_DECL();
-
-#define SPACE 257
-#define LETTER 258
-#define NEWLINE 259
-#define COMMENT 260
-#define COLON 261
-#define ANY 262
-#define ZONESTR 263
-#define STRING_ARG 264
-#define VAR_SERVER 265
-#define VAR_VERBOSITY 266
-#define VAR_NUM_THREADS 267
-#define VAR_PORT 268
-#define VAR_OUTGOING_RANGE 269
-#define VAR_INTERFACE 270
-#define VAR_DO_IP4 271
-#define VAR_DO_IP6 272
-#define VAR_DO_UDP 273
-#define VAR_DO_TCP 274
-#define VAR_CHROOT 275
-#define VAR_USERNAME 276
-#define VAR_DIRECTORY 277
-#define VAR_LOGFILE 278
-#define VAR_PIDFILE 279
-#define VAR_MSG_CACHE_SIZE 280
-#define VAR_MSG_CACHE_SLABS 281
-#define VAR_NUM_QUERIES_PER_THREAD 282
-#define VAR_RRSET_CACHE_SIZE 283
-#define VAR_RRSET_CACHE_SLABS 284
-#define VAR_OUTGOING_NUM_TCP 285
-#define VAR_INFRA_HOST_TTL 286
-#define VAR_INFRA_LAME_TTL 287
-#define VAR_INFRA_CACHE_SLABS 288
-#define VAR_INFRA_CACHE_NUMHOSTS 289
-#define VAR_INFRA_CACHE_LAME_SIZE 290
-#define VAR_NAME 291
-#define VAR_STUB_ZONE 292
-#define VAR_STUB_HOST 293
-#define VAR_STUB_ADDR 294
-#define VAR_TARGET_FETCH_POLICY 295
-#define VAR_HARDEN_SHORT_BUFSIZE 296
-#define VAR_HARDEN_LARGE_QUERIES 297
-#define VAR_FORWARD_ZONE 298
-#define VAR_FORWARD_HOST 299
-#define VAR_FORWARD_ADDR 300
-#define VAR_DO_NOT_QUERY_ADDRESS 301
-#define VAR_HIDE_IDENTITY 302
-#define VAR_HIDE_VERSION 303
-#define VAR_IDENTITY 304
-#define VAR_VERSION 305
-#define VAR_HARDEN_GLUE 306
-#define VAR_MODULE_CONF 307
-#define VAR_TRUST_ANCHOR_FILE 308
-#define VAR_TRUST_ANCHOR 309
-#define VAR_VAL_OVERRIDE_DATE 310
-#define VAR_BOGUS_TTL 311
-#define VAR_VAL_CLEAN_ADDITIONAL 312
-#define VAR_VAL_PERMISSIVE_MODE 313
-#define VAR_INCOMING_NUM_TCP 314
-#define VAR_MSG_BUFFER_SIZE 315
-#define VAR_KEY_CACHE_SIZE 316
-#define VAR_KEY_CACHE_SLABS 317
-#define VAR_TRUSTED_KEYS_FILE 318
-#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 319
-#define VAR_USE_SYSLOG 320
-#define VAR_OUTGOING_INTERFACE 321
-#define VAR_ROOT_HINTS 322
-#define VAR_DO_NOT_QUERY_LOCALHOST 323
-#define VAR_CACHE_MAX_TTL 324
-#define VAR_HARDEN_DNSSEC_STRIPPED 325
-#define VAR_ACCESS_CONTROL 326
-#define VAR_LOCAL_ZONE 327
-#define VAR_LOCAL_DATA 328
-#define VAR_INTERFACE_AUTOMATIC 329
-#define VAR_STATISTICS_INTERVAL 330
-#define VAR_DO_DAEMONIZE 331
-#define VAR_USE_CAPS_FOR_ID 332
-#define VAR_STATISTICS_CUMULATIVE 333
-#define VAR_OUTGOING_PORT_PERMIT 334
-#define VAR_OUTGOING_PORT_AVOID 335
-#define VAR_DLV_ANCHOR_FILE 336
-#define VAR_DLV_ANCHOR 337
-#define VAR_NEG_CACHE_SIZE 338
-#define VAR_HARDEN_REFERRAL_PATH 339
-#define VAR_PRIVATE_ADDRESS 340
-#define VAR_PRIVATE_DOMAIN 341
-#define VAR_REMOTE_CONTROL 342
-#define VAR_CONTROL_ENABLE 343
-#define VAR_CONTROL_INTERFACE 344
-#define VAR_CONTROL_PORT 345
-#define VAR_SERVER_KEY_FILE 346
-#define VAR_SERVER_CERT_FILE 347
-#define VAR_CONTROL_KEY_FILE 348
-#define VAR_CONTROL_CERT_FILE 349
-#define VAR_EXTENDED_STATISTICS 350
-#define VAR_LOCAL_DATA_PTR 351
-#define VAR_JOSTLE_TIMEOUT 352
-#define VAR_STUB_PRIME 353
-#define VAR_UNWANTED_REPLY_THRESHOLD 354
-#define VAR_LOG_TIME_ASCII 355
-#define VAR_DOMAIN_INSECURE 356
-#define VAR_PYTHON 357
-#define VAR_PYTHON_SCRIPT 358
-#define VAR_VAL_SIG_SKEW_MIN 359
-#define VAR_VAL_SIG_SKEW_MAX 360
-#define VAR_CACHE_MIN_TTL 361
-#define VAR_VAL_LOG_LEVEL 362
-#define VAR_AUTO_TRUST_ANCHOR_FILE 363
-#define VAR_KEEP_MISSING 364
-#define VAR_ADD_HOLDDOWN 365
-#define VAR_DEL_HOLDDOWN 366
-#define VAR_SO_RCVBUF 367
-#define VAR_EDNS_BUFFER_SIZE 368
-#define VAR_PREFETCH 369
-#define VAR_PREFETCH_KEY 370
-#define VAR_SO_SNDBUF 371
-#define VAR_HARDEN_BELOW_NXDOMAIN 372
-#define VAR_IGNORE_CD_FLAG 373
-#define VAR_LOG_QUERIES 374
-#define VAR_TCP_UPSTREAM 375
-#define VAR_SSL_UPSTREAM 376
-#define VAR_SSL_SERVICE_KEY 377
-#define VAR_SSL_SERVICE_PEM 378
-#define VAR_SSL_PORT 379
-#define VAR_FORWARD_FIRST 380
-#define VAR_STUB_FIRST 381
-#define VAR_MINIMAL_RESPONSES 382
-#define VAR_RRSET_ROUNDROBIN 383
-#define YYERRCODE 256
-static const short yylhs[] = { -1,
- 0, 0, 1, 1, 1, 1, 1, 2, 3, 3,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 4, 5,
- 5, 111, 111, 111, 111, 111, 6, 7, 7, 117,
- 117, 117, 117, 13, 14, 70, 73, 82, 15, 21,
- 61, 16, 74, 75, 32, 54, 69, 17, 18, 19,
- 20, 104, 105, 106, 107, 108, 71, 60, 86, 103,
- 22, 23, 24, 25, 26, 62, 76, 77, 92, 48,
- 58, 49, 87, 42, 43, 44, 45, 96, 100, 97,
- 55, 27, 28, 29, 84, 30, 31, 33, 34, 36,
- 37, 35, 38, 39, 40, 46, 65, 101, 79, 72,
- 80, 81, 98, 99, 85, 41, 63, 66, 47, 50,
- 88, 89, 64, 90, 51, 52, 53, 102, 91, 59,
- 93, 94, 95, 56, 57, 78, 67, 68, 83, 109,
- 110, 112, 113, 114, 116, 115, 118, 119, 120, 121,
- 10, 11, 11, 122, 122, 122, 122, 122, 122, 122,
- 123, 125, 124, 126, 127, 128, 129, 8, 9, 9,
- 130, 131,
-};
-static const short yylen[] = { 2,
- 0, 2, 2, 2, 2, 2, 2, 1, 2, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 0, 1, 1, 1, 1, 1, 1, 2, 0, 1,
- 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 3, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 3, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 1, 2, 0, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 1, 2, 0,
- 1, 2,
-};
-static const short yydefred[] = { 1,
- 0, 8, 109, 117, 231, 248, 2, 10, 111, 119,
- 250, 233, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 9, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 0, 0, 0, 0, 0, 110,
- 112, 113, 114, 115, 116, 0, 0, 0, 0, 118,
- 120, 121, 122, 123, 0, 249, 251, 0, 0, 0,
- 0, 0, 0, 0, 232, 234, 235, 236, 237, 238,
- 239, 240, 125, 124, 129, 132, 130, 138, 139, 140,
- 141, 151, 152, 153, 154, 155, 172, 173, 174, 176,
- 177, 135, 178, 179, 182, 180, 181, 183, 184, 185,
- 196, 164, 165, 166, 167, 186, 199, 160, 162, 200,
- 205, 206, 207, 136, 171, 214, 215, 161, 210, 148,
- 131, 156, 197, 203, 187, 0, 0, 218, 137, 126,
- 147, 190, 127, 133, 134, 157, 158, 216, 189, 191,
- 192, 128, 219, 175, 195, 149, 163, 201, 202, 204,
- 209, 159, 213, 211, 212, 168, 170, 193, 194, 169,
- 188, 208, 150, 142, 143, 144, 145, 146, 220, 221,
- 222, 223, 224, 226, 225, 227, 228, 229, 230, 252,
- 241, 243, 242, 244, 245, 246, 247, 198, 217,
-};
-static const short yydgoto[] = { 1,
- 7, 8, 13, 9, 14, 10, 15, 11, 16, 12,
- 17, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
- 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
- 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
- 220, 221, 222, 223, 224, 225, 230, 231, 232, 233,
- 234, 245, 246, 247, 248, 249, 250, 251, 252, 236,
- 237,
-};
-static const short yysindex[] = { 0,
- -172, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -260, -209, -202, -358, -216, -233, -232, -231,
- -230, -226, -225, -224, -181, -178, -177, -176, -143, -140,
- -139, -130, -129, -128, -127, -126, -125, -124, -123, -122,
- -121, -119, -118, -117, -116, -115, -114, -113, -112, -111,
- -110, -109, -108, -107, -106, -105, -104, -103, -102, -101,
- -100, -99, -98, -97, -96, -95, -93, -91, -90, -89,
- -88, -87, -85, -84, -83, -82, -81, -80, -78, -77,
- -76, -75, -74, -73, -72, -71, -70, -69, -68, -67,
- -66, -65, -64, -63, -62, -61, -60, -59, -58, -57,
- -56, -55, -54, -53, -52, -51, -50, -49, -48, -47,
- -46, -45, -44, -43, -42, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -41, -40, -39, -38, -37, 0,
- 0, 0, 0, 0, 0, -36, -35, -34, -33, 0,
- 0, 0, 0, 0, -32, 0, 0, -31, -30, -29,
- -28, -27, -26, -25, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -24, -23, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-static const short yyrindex[] = { 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 2, 3, 4, 5, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-static const short yygindex[] = { 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-#define YYTABLESIZE 362
-static const short yytable[] = { 235,
- 3, 4, 5, 6, 7, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 253, 254, 255, 256, 43, 44, 45, 257, 258, 259,
- 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
- 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
- 86, 215, 260, 216, 217, 261, 262, 263, 226, 87,
- 88, 89, 2, 90, 91, 92, 227, 228, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 3,
- 264, 114, 115, 265, 266, 4, 238, 239, 240, 241,
- 242, 243, 244, 267, 268, 269, 270, 271, 272, 273,
- 274, 275, 276, 218, 277, 278, 279, 280, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 299, 300, 301, 5,
- 302, 219, 303, 304, 305, 306, 307, 229, 308, 309,
- 310, 311, 312, 313, 6, 314, 315, 316, 317, 318,
- 319, 320, 321, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
- 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,
- 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
- 359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
- 369, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 4, 5, 6, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 4, 5, 6, 7, 0, 3, 4,
- 5, 6, 7, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 4, 5, 6, 7, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 4, 5,
- 6, 7,
-};
-static const short yycheck[] = { 358,
- 0, 0, 0, 0, 0, 266, 267, 268, 269, 270,
- 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 264, 264, 264, 264, 295, 296, 297, 264, 264, 264,
- 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
- 321, 322, 323, 324, 325, 326, 327, 328, 329, 330,
- 331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
- 341, 291, 264, 293, 294, 264, 264, 264, 291, 350,
- 351, 352, 265, 354, 355, 356, 299, 300, 359, 360,
- 361, 362, 363, 364, 365, 366, 367, 368, 369, 370,
- 371, 372, 373, 374, 375, 376, 377, 378, 379, 292,
- 264, 382, 383, 264, 264, 298, 343, 344, 345, 346,
- 347, 348, 349, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 353, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 342,
- 264, 381, 264, 264, 264, 264, 264, 380, 264, 264,
- 264, 264, 264, 264, 357, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
- 264, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 265, 265, 265, 265, 265,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 292, 292, 292, 292, 292, -1, 298, 298,
- 298, 298, 298, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 342, 342, 342, 342, 342, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 357, 357, 357,
- 357, 357,
-};
-#define YYFINAL 1
-#ifndef YYDEBUG
-#define YYDEBUG 0
-#endif
-#define YYMAXTOKEN 383
-#if YYDEBUG
-static const char *yyname[] = {
-
-"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"SPACE","LETTER","NEWLINE",
-"COMMENT","COLON","ANY","ZONESTR","STRING_ARG","VAR_SERVER","VAR_VERBOSITY",
-"VAR_NUM_THREADS","VAR_PORT","VAR_OUTGOING_RANGE","VAR_INTERFACE","VAR_DO_IP4",
-"VAR_DO_IP6","VAR_DO_UDP","VAR_DO_TCP","VAR_CHROOT","VAR_USERNAME",
-"VAR_DIRECTORY","VAR_LOGFILE","VAR_PIDFILE","VAR_MSG_CACHE_SIZE",
-"VAR_MSG_CACHE_SLABS","VAR_NUM_QUERIES_PER_THREAD","VAR_RRSET_CACHE_SIZE",
-"VAR_RRSET_CACHE_SLABS","VAR_OUTGOING_NUM_TCP","VAR_INFRA_HOST_TTL",
-"VAR_INFRA_LAME_TTL","VAR_INFRA_CACHE_SLABS","VAR_INFRA_CACHE_NUMHOSTS",
-"VAR_INFRA_CACHE_LAME_SIZE","VAR_NAME","VAR_STUB_ZONE","VAR_STUB_HOST",
-"VAR_STUB_ADDR","VAR_TARGET_FETCH_POLICY","VAR_HARDEN_SHORT_BUFSIZE",
-"VAR_HARDEN_LARGE_QUERIES","VAR_FORWARD_ZONE","VAR_FORWARD_HOST",
-"VAR_FORWARD_ADDR","VAR_DO_NOT_QUERY_ADDRESS","VAR_HIDE_IDENTITY",
-"VAR_HIDE_VERSION","VAR_IDENTITY","VAR_VERSION","VAR_HARDEN_GLUE",
-"VAR_MODULE_CONF","VAR_TRUST_ANCHOR_FILE","VAR_TRUST_ANCHOR",
-"VAR_VAL_OVERRIDE_DATE","VAR_BOGUS_TTL","VAR_VAL_CLEAN_ADDITIONAL",
-"VAR_VAL_PERMISSIVE_MODE","VAR_INCOMING_NUM_TCP","VAR_MSG_BUFFER_SIZE",
-"VAR_KEY_CACHE_SIZE","VAR_KEY_CACHE_SLABS","VAR_TRUSTED_KEYS_FILE",
-"VAR_VAL_NSEC3_KEYSIZE_ITERATIONS","VAR_USE_SYSLOG","VAR_OUTGOING_INTERFACE",
-"VAR_ROOT_HINTS","VAR_DO_NOT_QUERY_LOCALHOST","VAR_CACHE_MAX_TTL",
-"VAR_HARDEN_DNSSEC_STRIPPED","VAR_ACCESS_CONTROL","VAR_LOCAL_ZONE",
-"VAR_LOCAL_DATA","VAR_INTERFACE_AUTOMATIC","VAR_STATISTICS_INTERVAL",
-"VAR_DO_DAEMONIZE","VAR_USE_CAPS_FOR_ID","VAR_STATISTICS_CUMULATIVE",
-"VAR_OUTGOING_PORT_PERMIT","VAR_OUTGOING_PORT_AVOID","VAR_DLV_ANCHOR_FILE",
-"VAR_DLV_ANCHOR","VAR_NEG_CACHE_SIZE","VAR_HARDEN_REFERRAL_PATH",
-"VAR_PRIVATE_ADDRESS","VAR_PRIVATE_DOMAIN","VAR_REMOTE_CONTROL",
-"VAR_CONTROL_ENABLE","VAR_CONTROL_INTERFACE","VAR_CONTROL_PORT",
-"VAR_SERVER_KEY_FILE","VAR_SERVER_CERT_FILE","VAR_CONTROL_KEY_FILE",
-"VAR_CONTROL_CERT_FILE","VAR_EXTENDED_STATISTICS","VAR_LOCAL_DATA_PTR",
-"VAR_JOSTLE_TIMEOUT","VAR_STUB_PRIME","VAR_UNWANTED_REPLY_THRESHOLD",
-"VAR_LOG_TIME_ASCII","VAR_DOMAIN_INSECURE","VAR_PYTHON","VAR_PYTHON_SCRIPT",
-"VAR_VAL_SIG_SKEW_MIN","VAR_VAL_SIG_SKEW_MAX","VAR_CACHE_MIN_TTL",
-"VAR_VAL_LOG_LEVEL","VAR_AUTO_TRUST_ANCHOR_FILE","VAR_KEEP_MISSING",
-"VAR_ADD_HOLDDOWN","VAR_DEL_HOLDDOWN","VAR_SO_RCVBUF","VAR_EDNS_BUFFER_SIZE",
-"VAR_PREFETCH","VAR_PREFETCH_KEY","VAR_SO_SNDBUF","VAR_HARDEN_BELOW_NXDOMAIN",
-"VAR_IGNORE_CD_FLAG","VAR_LOG_QUERIES","VAR_TCP_UPSTREAM","VAR_SSL_UPSTREAM",
-"VAR_SSL_SERVICE_KEY","VAR_SSL_SERVICE_PEM","VAR_SSL_PORT","VAR_FORWARD_FIRST",
-"VAR_STUB_FIRST","VAR_MINIMAL_RESPONSES","VAR_RRSET_ROUNDROBIN",
-};
-static const char *yyrule[] = {
-"$accept : toplevelvars",
-"toplevelvars :",
-"toplevelvars : toplevelvars toplevelvar",
-"toplevelvar : serverstart contents_server",
-"toplevelvar : stubstart contents_stub",
-"toplevelvar : forwardstart contents_forward",
-"toplevelvar : pythonstart contents_py",
-"toplevelvar : rcstart contents_rc",
-"serverstart : VAR_SERVER",
-"contents_server : contents_server content_server",
-"contents_server :",
-"content_server : server_num_threads",
-"content_server : server_verbosity",
-"content_server : server_port",
-"content_server : server_outgoing_range",
-"content_server : server_do_ip4",
-"content_server : server_do_ip6",
-"content_server : server_do_udp",
-"content_server : server_do_tcp",
-"content_server : server_interface",
-"content_server : server_chroot",
-"content_server : server_username",
-"content_server : server_directory",
-"content_server : server_logfile",
-"content_server : server_pidfile",
-"content_server : server_msg_cache_size",
-"content_server : server_msg_cache_slabs",
-"content_server : server_num_queries_per_thread",
-"content_server : server_rrset_cache_size",
-"content_server : server_rrset_cache_slabs",
-"content_server : server_outgoing_num_tcp",
-"content_server : server_infra_host_ttl",
-"content_server : server_infra_lame_ttl",
-"content_server : server_infra_cache_slabs",
-"content_server : server_infra_cache_numhosts",
-"content_server : server_infra_cache_lame_size",
-"content_server : server_target_fetch_policy",
-"content_server : server_harden_short_bufsize",
-"content_server : server_harden_large_queries",
-"content_server : server_do_not_query_address",
-"content_server : server_hide_identity",
-"content_server : server_hide_version",
-"content_server : server_identity",
-"content_server : server_version",
-"content_server : server_harden_glue",
-"content_server : server_module_conf",
-"content_server : server_trust_anchor_file",
-"content_server : server_trust_anchor",
-"content_server : server_val_override_date",
-"content_server : server_bogus_ttl",
-"content_server : server_val_clean_additional",
-"content_server : server_val_permissive_mode",
-"content_server : server_incoming_num_tcp",
-"content_server : server_msg_buffer_size",
-"content_server : server_key_cache_size",
-"content_server : server_key_cache_slabs",
-"content_server : server_trusted_keys_file",
-"content_server : server_val_nsec3_keysize_iterations",
-"content_server : server_use_syslog",
-"content_server : server_outgoing_interface",
-"content_server : server_root_hints",
-"content_server : server_do_not_query_localhost",
-"content_server : server_cache_max_ttl",
-"content_server : server_harden_dnssec_stripped",
-"content_server : server_access_control",
-"content_server : server_local_zone",
-"content_server : server_local_data",
-"content_server : server_interface_automatic",
-"content_server : server_statistics_interval",
-"content_server : server_do_daemonize",
-"content_server : server_use_caps_for_id",
-"content_server : server_statistics_cumulative",
-"content_server : server_outgoing_port_permit",
-"content_server : server_outgoing_port_avoid",
-"content_server : server_dlv_anchor_file",
-"content_server : server_dlv_anchor",
-"content_server : server_neg_cache_size",
-"content_server : server_harden_referral_path",
-"content_server : server_private_address",
-"content_server : server_private_domain",
-"content_server : server_extended_statistics",
-"content_server : server_local_data_ptr",
-"content_server : server_jostle_timeout",
-"content_server : server_unwanted_reply_threshold",
-"content_server : server_log_time_ascii",
-"content_server : server_domain_insecure",
-"content_server : server_val_sig_skew_min",
-"content_server : server_val_sig_skew_max",
-"content_server : server_cache_min_ttl",
-"content_server : server_val_log_level",
-"content_server : server_auto_trust_anchor_file",
-"content_server : server_add_holddown",
-"content_server : server_del_holddown",
-"content_server : server_keep_missing",
-"content_server : server_so_rcvbuf",
-"content_server : server_edns_buffer_size",
-"content_server : server_prefetch",
-"content_server : server_prefetch_key",
-"content_server : server_so_sndbuf",
-"content_server : server_harden_below_nxdomain",
-"content_server : server_ignore_cd_flag",
-"content_server : server_log_queries",
-"content_server : server_tcp_upstream",
-"content_server : server_ssl_upstream",
-"content_server : server_ssl_service_key",
-"content_server : server_ssl_service_pem",
-"content_server : server_ssl_port",
-"content_server : server_minimal_responses",
-"content_server : server_rrset_roundrobin",
-"stubstart : VAR_STUB_ZONE",
-"contents_stub : contents_stub content_stub",
-"contents_stub :",
-"content_stub : stub_name",
-"content_stub : stub_host",
-"content_stub : stub_addr",
-"content_stub : stub_prime",
-"content_stub : stub_first",
-"forwardstart : VAR_FORWARD_ZONE",
-"contents_forward : contents_forward content_forward",
-"contents_forward :",
-"content_forward : forward_name",
-"content_forward : forward_host",
-"content_forward : forward_addr",
-"content_forward : forward_first",
-"server_num_threads : VAR_NUM_THREADS STRING_ARG",
-"server_verbosity : VAR_VERBOSITY STRING_ARG",
-"server_statistics_interval : VAR_STATISTICS_INTERVAL STRING_ARG",
-"server_statistics_cumulative : VAR_STATISTICS_CUMULATIVE STRING_ARG",
-"server_extended_statistics : VAR_EXTENDED_STATISTICS STRING_ARG",
-"server_port : VAR_PORT STRING_ARG",
-"server_interface : VAR_INTERFACE STRING_ARG",
-"server_outgoing_interface : VAR_OUTGOING_INTERFACE STRING_ARG",
-"server_outgoing_range : VAR_OUTGOING_RANGE STRING_ARG",
-"server_outgoing_port_permit : VAR_OUTGOING_PORT_PERMIT STRING_ARG",
-"server_outgoing_port_avoid : VAR_OUTGOING_PORT_AVOID STRING_ARG",
-"server_outgoing_num_tcp : VAR_OUTGOING_NUM_TCP STRING_ARG",
-"server_incoming_num_tcp : VAR_INCOMING_NUM_TCP STRING_ARG",
-"server_interface_automatic : VAR_INTERFACE_AUTOMATIC STRING_ARG",
-"server_do_ip4 : VAR_DO_IP4 STRING_ARG",
-"server_do_ip6 : VAR_DO_IP6 STRING_ARG",
-"server_do_udp : VAR_DO_UDP STRING_ARG",
-"server_do_tcp : VAR_DO_TCP STRING_ARG",
-"server_tcp_upstream : VAR_TCP_UPSTREAM STRING_ARG",
-"server_ssl_upstream : VAR_SSL_UPSTREAM STRING_ARG",
-"server_ssl_service_key : VAR_SSL_SERVICE_KEY STRING_ARG",
-"server_ssl_service_pem : VAR_SSL_SERVICE_PEM STRING_ARG",
-"server_ssl_port : VAR_SSL_PORT STRING_ARG",
-"server_do_daemonize : VAR_DO_DAEMONIZE STRING_ARG",
-"server_use_syslog : VAR_USE_SYSLOG STRING_ARG",
-"server_log_time_ascii : VAR_LOG_TIME_ASCII STRING_ARG",
-"server_log_queries : VAR_LOG_QUERIES STRING_ARG",
-"server_chroot : VAR_CHROOT STRING_ARG",
-"server_username : VAR_USERNAME STRING_ARG",
-"server_directory : VAR_DIRECTORY STRING_ARG",
-"server_logfile : VAR_LOGFILE STRING_ARG",
-"server_pidfile : VAR_PIDFILE STRING_ARG",
-"server_root_hints : VAR_ROOT_HINTS STRING_ARG",
-"server_dlv_anchor_file : VAR_DLV_ANCHOR_FILE STRING_ARG",
-"server_dlv_anchor : VAR_DLV_ANCHOR STRING_ARG",
-"server_auto_trust_anchor_file : VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG",
-"server_trust_anchor_file : VAR_TRUST_ANCHOR_FILE STRING_ARG",
-"server_trusted_keys_file : VAR_TRUSTED_KEYS_FILE STRING_ARG",
-"server_trust_anchor : VAR_TRUST_ANCHOR STRING_ARG",
-"server_domain_insecure : VAR_DOMAIN_INSECURE STRING_ARG",
-"server_hide_identity : VAR_HIDE_IDENTITY STRING_ARG",
-"server_hide_version : VAR_HIDE_VERSION STRING_ARG",
-"server_identity : VAR_IDENTITY STRING_ARG",
-"server_version : VAR_VERSION STRING_ARG",
-"server_so_rcvbuf : VAR_SO_RCVBUF STRING_ARG",
-"server_so_sndbuf : VAR_SO_SNDBUF STRING_ARG",
-"server_edns_buffer_size : VAR_EDNS_BUFFER_SIZE STRING_ARG",
-"server_msg_buffer_size : VAR_MSG_BUFFER_SIZE STRING_ARG",
-"server_msg_cache_size : VAR_MSG_CACHE_SIZE STRING_ARG",
-"server_msg_cache_slabs : VAR_MSG_CACHE_SLABS STRING_ARG",
-"server_num_queries_per_thread : VAR_NUM_QUERIES_PER_THREAD STRING_ARG",
-"server_jostle_timeout : VAR_JOSTLE_TIMEOUT STRING_ARG",
-"server_rrset_cache_size : VAR_RRSET_CACHE_SIZE STRING_ARG",
-"server_rrset_cache_slabs : VAR_RRSET_CACHE_SLABS STRING_ARG",
-"server_infra_host_ttl : VAR_INFRA_HOST_TTL STRING_ARG",
-"server_infra_lame_ttl : VAR_INFRA_LAME_TTL STRING_ARG",
-"server_infra_cache_numhosts : VAR_INFRA_CACHE_NUMHOSTS STRING_ARG",
-"server_infra_cache_lame_size : VAR_INFRA_CACHE_LAME_SIZE STRING_ARG",
-"server_infra_cache_slabs : VAR_INFRA_CACHE_SLABS STRING_ARG",
-"server_target_fetch_policy : VAR_TARGET_FETCH_POLICY STRING_ARG",
-"server_harden_short_bufsize : VAR_HARDEN_SHORT_BUFSIZE STRING_ARG",
-"server_harden_large_queries : VAR_HARDEN_LARGE_QUERIES STRING_ARG",
-"server_harden_glue : VAR_HARDEN_GLUE STRING_ARG",
-"server_harden_dnssec_stripped : VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG",
-"server_harden_below_nxdomain : VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG",
-"server_harden_referral_path : VAR_HARDEN_REFERRAL_PATH STRING_ARG",
-"server_use_caps_for_id : VAR_USE_CAPS_FOR_ID STRING_ARG",
-"server_private_address : VAR_PRIVATE_ADDRESS STRING_ARG",
-"server_private_domain : VAR_PRIVATE_DOMAIN STRING_ARG",
-"server_prefetch : VAR_PREFETCH STRING_ARG",
-"server_prefetch_key : VAR_PREFETCH_KEY STRING_ARG",
-"server_unwanted_reply_threshold : VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG",
-"server_do_not_query_address : VAR_DO_NOT_QUERY_ADDRESS STRING_ARG",
-"server_do_not_query_localhost : VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG",
-"server_access_control : VAR_ACCESS_CONTROL STRING_ARG STRING_ARG",
-"server_module_conf : VAR_MODULE_CONF STRING_ARG",
-"server_val_override_date : VAR_VAL_OVERRIDE_DATE STRING_ARG",
-"server_val_sig_skew_min : VAR_VAL_SIG_SKEW_MIN STRING_ARG",
-"server_val_sig_skew_max : VAR_VAL_SIG_SKEW_MAX STRING_ARG",
-"server_cache_max_ttl : VAR_CACHE_MAX_TTL STRING_ARG",
-"server_cache_min_ttl : VAR_CACHE_MIN_TTL STRING_ARG",
-"server_bogus_ttl : VAR_BOGUS_TTL STRING_ARG",
-"server_val_clean_additional : VAR_VAL_CLEAN_ADDITIONAL STRING_ARG",
-"server_val_permissive_mode : VAR_VAL_PERMISSIVE_MODE STRING_ARG",
-"server_ignore_cd_flag : VAR_IGNORE_CD_FLAG STRING_ARG",
-"server_val_log_level : VAR_VAL_LOG_LEVEL STRING_ARG",
-"server_val_nsec3_keysize_iterations : VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG",
-"server_add_holddown : VAR_ADD_HOLDDOWN STRING_ARG",
-"server_del_holddown : VAR_DEL_HOLDDOWN STRING_ARG",
-"server_keep_missing : VAR_KEEP_MISSING STRING_ARG",
-"server_key_cache_size : VAR_KEY_CACHE_SIZE STRING_ARG",
-"server_key_cache_slabs : VAR_KEY_CACHE_SLABS STRING_ARG",
-"server_neg_cache_size : VAR_NEG_CACHE_SIZE STRING_ARG",
-"server_local_zone : VAR_LOCAL_ZONE STRING_ARG STRING_ARG",
-"server_local_data : VAR_LOCAL_DATA STRING_ARG",
-"server_local_data_ptr : VAR_LOCAL_DATA_PTR STRING_ARG",
-"server_minimal_responses : VAR_MINIMAL_RESPONSES STRING_ARG",
-"server_rrset_roundrobin : VAR_RRSET_ROUNDROBIN STRING_ARG",
-"stub_name : VAR_NAME STRING_ARG",
-"stub_host : VAR_STUB_HOST STRING_ARG",
-"stub_addr : VAR_STUB_ADDR STRING_ARG",
-"stub_first : VAR_STUB_FIRST STRING_ARG",
-"stub_prime : VAR_STUB_PRIME STRING_ARG",
-"forward_name : VAR_NAME STRING_ARG",
-"forward_host : VAR_FORWARD_HOST STRING_ARG",
-"forward_addr : VAR_FORWARD_ADDR STRING_ARG",
-"forward_first : VAR_FORWARD_FIRST STRING_ARG",
-"rcstart : VAR_REMOTE_CONTROL",
-"contents_rc : contents_rc content_rc",
-"contents_rc :",
-"content_rc : rc_control_enable",
-"content_rc : rc_control_interface",
-"content_rc : rc_control_port",
-"content_rc : rc_server_key_file",
-"content_rc : rc_server_cert_file",
-"content_rc : rc_control_key_file",
-"content_rc : rc_control_cert_file",
-"rc_control_enable : VAR_CONTROL_ENABLE STRING_ARG",
-"rc_control_port : VAR_CONTROL_PORT STRING_ARG",
-"rc_control_interface : VAR_CONTROL_INTERFACE STRING_ARG",
-"rc_server_key_file : VAR_SERVER_KEY_FILE STRING_ARG",
-"rc_server_cert_file : VAR_SERVER_CERT_FILE STRING_ARG",
-"rc_control_key_file : VAR_CONTROL_KEY_FILE STRING_ARG",
-"rc_control_cert_file : VAR_CONTROL_CERT_FILE STRING_ARG",
-"pythonstart : VAR_PYTHON",
-"contents_py : contents_py content_py",
-"contents_py :",
-"content_py : py_script",
-"py_script : VAR_PYTHON_SCRIPT STRING_ARG",
-
-};
-#endif
-
-int yydebug;
-int yynerrs;
-
-int yyerrflag;
-int yychar;
-YYSTYPE yyval;
-YYSTYPE yylval;
-
-/* define the initial stack-sizes */
-#ifdef YYSTACKSIZE
-#undef YYMAXDEPTH
-#define YYMAXDEPTH YYSTACKSIZE
-#else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
-#else
-#define YYSTACKSIZE 500
-#define YYMAXDEPTH 500
-#endif
-#endif
-
-#define YYINITSTACKSIZE 500
-
-typedef struct {
- unsigned stacksize;
- short *s_base;
- short *s_mark;
- short *s_last;
- YYSTYPE *l_base;
- YYSTYPE *l_mark;
-} YYSTACKDATA;
-/* variables for the parser stack */
-static YYSTACKDATA yystack;
-#line 1277 "util/configparser.y"
-
-/* parse helper routines could be here */
-#line 845 "util/configparser.c"
-
-#if YYDEBUG
-#include <stdio.h> /* needed for printf */
-#endif
-
-#include <stdlib.h> /* needed for malloc, etc */
-#include <string.h> /* needed for memset */
-
-/* allocate initial stack or double stack size, up to YYMAXDEPTH */
-static int yygrowstack(YYSTACKDATA *data)
-{
- int i;
- unsigned newsize;
- short *newss;
- YYSTYPE *newvs;
-
- if ((newsize = data->stacksize) == 0)
- newsize = YYINITSTACKSIZE;
- else if (newsize >= YYMAXDEPTH)
- return -1;
- else if ((newsize *= 2) > YYMAXDEPTH)
- newsize = YYMAXDEPTH;
-
- i = (int) (data->s_mark - data->s_base);
- newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
- if (newss == 0)
- return -1;
-
- data->s_base = newss;
- data->s_mark = newss + i;
-
- newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
- if (newvs == 0)
- return -1;
-
- data->l_base = newvs;
- data->l_mark = newvs + i;
-
- data->stacksize = newsize;
- data->s_last = data->s_base + newsize - 1;
- return 0;
-}
-
-#if YYPURE || defined(YY_NO_LEAKS)
-static void yyfreestack(YYSTACKDATA *data)
-{
- free(data->s_base);
- free(data->l_base);
- memset(data, 0, sizeof(*data));
-}
-#else
-#define yyfreestack(data) /* nothing */
-#endif
-
-#define YYABORT goto yyabort
-#define YYREJECT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR goto yyerrlab
-
-int
-YYPARSE_DECL()
-{
- int yym, yyn, yystate;
-#if YYDEBUG
- const char *yys;
-
- if ((yys = getenv("YYDEBUG")) != 0)
- {
- yyn = *yys;
- if (yyn >= '0' && yyn <= '9')
- yydebug = yyn - '0';
- }
-#endif
-
- yynerrs = 0;
- yyerrflag = 0;
- yychar = YYEMPTY;
- yystate = 0;
-
-#if YYPURE
- memset(&yystack, 0, sizeof(yystack));
-#endif
-
- if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
- yystack.s_mark = yystack.s_base;
- yystack.l_mark = yystack.l_base;
- yystate = 0;
- *yystack.s_mark = 0;
-
-yyloop:
- if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
- if (yychar < 0)
- {
- if ((yychar = YYLEX) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, reading %d (%s)\n",
- YYPREFIX, yystate, yychar, yys);
- }
-#endif
- }
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, shifting to state %d\n",
- YYPREFIX, yystate, yytable[yyn]);
-#endif
- if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
- {
- goto yyoverflow;
- }
- yystate = yytable[yyn];
- *++yystack.s_mark = yytable[yyn];
- *++yystack.l_mark = yylval;
- yychar = YYEMPTY;
- if (yyerrflag > 0) --yyerrflag;
- goto yyloop;
- }
- if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- yyn = yytable[yyn];
- goto yyreduce;
- }
- if (yyerrflag) goto yyinrecovery;
-
- yyerror("syntax error");
-
- goto yyerrlab;
-
-yyerrlab:
- ++yynerrs;
-
-yyinrecovery:
- if (yyerrflag < 3)
- {
- yyerrflag = 3;
- for (;;)
- {
- if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, error recovery shifting\
- to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
-#endif
- if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
- {
- goto yyoverflow;
- }
- yystate = yytable[yyn];
- *++yystack.s_mark = yytable[yyn];
- *++yystack.l_mark = yylval;
- goto yyloop;
- }
- else
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: error recovery discarding state %d\n",
- YYPREFIX, *yystack.s_mark);
-#endif
- if (yystack.s_mark <= yystack.s_base) goto yyabort;
- --yystack.s_mark;
- --yystack.l_mark;
- }
- }
- }
- else
- {
- if (yychar == 0) goto yyabort;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
- YYPREFIX, yystate, yychar, yys);
- }
-#endif
- yychar = YYEMPTY;
- goto yyloop;
- }
-
-yyreduce:
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, reducing by rule %d (%s)\n",
- YYPREFIX, yystate, yyn, yyrule[yyn]);
-#endif
- yym = yylen[yyn];
- if (yym)
- yyval = yystack.l_mark[1-yym];
- else
- memset(&yyval, 0, sizeof yyval);
- switch (yyn)
- {
-case 8:
-#line 118 "util/configparser.y"
- {
- OUTYY(("\nP(server:)\n"));
- }
-break;
-case 109:
-#line 167 "util/configparser.y"
- {
- struct config_stub* s;
- OUTYY(("\nP(stub_zone:)\n"));
- s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
- if(s) {
- s->next = cfg_parser->cfg->stubs;
- cfg_parser->cfg->stubs = s;
- } else
- yyerror("out of memory");
- }
-break;
-case 117:
-#line 183 "util/configparser.y"
- {
- struct config_stub* s;
- OUTYY(("\nP(forward_zone:)\n"));
- s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
- if(s) {
- s->next = cfg_parser->cfg->forwards;
- cfg_parser->cfg->forwards = s;
- } else
- yyerror("out of memory");
- }
-break;
-case 124:
-#line 199 "util/configparser.y"
- {
- OUTYY(("P(server_num_threads:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->num_threads = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 125:
-#line 208 "util/configparser.y"
- {
- OUTYY(("P(server_verbosity:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->verbosity = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 126:
-#line 217 "util/configparser.y"
- {
- OUTYY(("P(server_statistics_interval:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "") == 0 || strcmp(yystack.l_mark[0].str, "0") == 0)
- cfg_parser->cfg->stat_interval = 0;
- else if(atoi(yystack.l_mark[0].str) == 0)
- yyerror("number expected");
- else cfg_parser->cfg->stat_interval = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 127:
-#line 228 "util/configparser.y"
- {
- OUTYY(("P(server_statistics_cumulative:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->stat_cumulative = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 128:
-#line 237 "util/configparser.y"
- {
- OUTYY(("P(server_extended_statistics:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->stat_extended = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 129:
-#line 246 "util/configparser.y"
- {
- OUTYY(("P(server_port:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0)
- yyerror("port number expected");
- else cfg_parser->cfg->port = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 130:
-#line 255 "util/configparser.y"
- {
- OUTYY(("P(server_interface:%s)\n", yystack.l_mark[0].str));
- if(cfg_parser->cfg->num_ifs == 0)
- cfg_parser->cfg->ifs = calloc(1, sizeof(char*));
- else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs,
- (cfg_parser->cfg->num_ifs+1)*sizeof(char*));
- if(!cfg_parser->cfg->ifs)
- yyerror("out of memory");
- else
- cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = yystack.l_mark[0].str;
- }
-break;
-case 131:
-#line 268 "util/configparser.y"
- {
- OUTYY(("P(server_outgoing_interface:%s)\n", yystack.l_mark[0].str));
- if(cfg_parser->cfg->num_out_ifs == 0)
- cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*));
- else cfg_parser->cfg->out_ifs = realloc(
- cfg_parser->cfg->out_ifs,
- (cfg_parser->cfg->num_out_ifs+1)*sizeof(char*));
- if(!cfg_parser->cfg->out_ifs)
- yyerror("out of memory");
- else
- cfg_parser->cfg->out_ifs[
- cfg_parser->cfg->num_out_ifs++] = yystack.l_mark[0].str;
- }
-break;
-case 132:
-#line 283 "util/configparser.y"
- {
- OUTYY(("P(server_outgoing_range:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0)
- yyerror("number expected");
- else cfg_parser->cfg->outgoing_num_ports = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 133:
-#line 292 "util/configparser.y"
- {
- OUTYY(("P(server_outgoing_port_permit:%s)\n", yystack.l_mark[0].str));
- if(!cfg_mark_ports(yystack.l_mark[0].str, 1,
- cfg_parser->cfg->outgoing_avail_ports, 65536))
- yyerror("port number or range (\"low-high\") expected");
- free(yystack.l_mark[0].str);
- }
-break;
-case 134:
-#line 301 "util/configparser.y"
- {
- OUTYY(("P(server_outgoing_port_avoid:%s)\n", yystack.l_mark[0].str));
- if(!cfg_mark_ports(yystack.l_mark[0].str, 0,
- cfg_parser->cfg->outgoing_avail_ports, 65536))
- yyerror("port number or range (\"low-high\") expected");
- free(yystack.l_mark[0].str);
- }
-break;
-case 135:
-#line 310 "util/configparser.y"
- {
- OUTYY(("P(server_outgoing_num_tcp:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->outgoing_num_tcp = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 136:
-#line 319 "util/configparser.y"
- {
- OUTYY(("P(server_incoming_num_tcp:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->incoming_num_tcp = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 137:
-#line 328 "util/configparser.y"
- {
- OUTYY(("P(server_interface_automatic:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->if_automatic = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 138:
-#line 337 "util/configparser.y"
- {
- OUTYY(("P(server_do_ip4:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->do_ip4 = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 139:
-#line 346 "util/configparser.y"
- {
- OUTYY(("P(server_do_ip6:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->do_ip6 = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 140:
-#line 355 "util/configparser.y"
- {
- OUTYY(("P(server_do_udp:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->do_udp = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 141:
-#line 364 "util/configparser.y"
- {
- OUTYY(("P(server_do_tcp:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->do_tcp = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 142:
-#line 373 "util/configparser.y"
- {
- OUTYY(("P(server_tcp_upstream:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->tcp_upstream = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 143:
-#line 382 "util/configparser.y"
- {
- OUTYY(("P(server_ssl_upstream:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->ssl_upstream = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 144:
-#line 391 "util/configparser.y"
- {
- OUTYY(("P(server_ssl_service_key:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->ssl_service_key);
- cfg_parser->cfg->ssl_service_key = yystack.l_mark[0].str;
- }
-break;
-case 145:
-#line 398 "util/configparser.y"
- {
- OUTYY(("P(server_ssl_service_pem:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->ssl_service_pem);
- cfg_parser->cfg->ssl_service_pem = yystack.l_mark[0].str;
- }
-break;
-case 146:
-#line 405 "util/configparser.y"
- {
- OUTYY(("P(server_ssl_port:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0)
- yyerror("port number expected");
- else cfg_parser->cfg->ssl_port = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 147:
-#line 414 "util/configparser.y"
- {
- OUTYY(("P(server_do_daemonize:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->do_daemonize = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 148:
-#line 423 "util/configparser.y"
- {
- OUTYY(("P(server_use_syslog:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->use_syslog = (strcmp(yystack.l_mark[0].str, "yes")==0);
-#if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS)
- if(strcmp(yystack.l_mark[0].str, "yes") == 0)
- yyerror("no syslog services are available. "
- "(reconfigure and compile to add)");
-#endif
- free(yystack.l_mark[0].str);
- }
-break;
-case 149:
-#line 437 "util/configparser.y"
- {
- OUTYY(("P(server_log_time_ascii:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->log_time_ascii = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 150:
-#line 446 "util/configparser.y"
- {
- OUTYY(("P(server_log_queries:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->log_queries = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 151:
-#line 455 "util/configparser.y"
- {
- OUTYY(("P(server_chroot:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->chrootdir);
- cfg_parser->cfg->chrootdir = yystack.l_mark[0].str;
- }
-break;
-case 152:
-#line 462 "util/configparser.y"
- {
- OUTYY(("P(server_username:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->username);
- cfg_parser->cfg->username = yystack.l_mark[0].str;
- }
-break;
-case 153:
-#line 469 "util/configparser.y"
- {
- OUTYY(("P(server_directory:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->directory);
- cfg_parser->cfg->directory = yystack.l_mark[0].str;
- }
-break;
-case 154:
-#line 476 "util/configparser.y"
- {
- OUTYY(("P(server_logfile:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->logfile);
- cfg_parser->cfg->logfile = yystack.l_mark[0].str;
- cfg_parser->cfg->use_syslog = 0;
- }
-break;
-case 155:
-#line 484 "util/configparser.y"
- {
- OUTYY(("P(server_pidfile:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->pidfile);
- cfg_parser->cfg->pidfile = yystack.l_mark[0].str;
- }
-break;
-case 156:
-#line 491 "util/configparser.y"
- {
- OUTYY(("P(server_root_hints:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, yystack.l_mark[0].str))
- yyerror("out of memory");
- }
-break;
-case 157:
-#line 498 "util/configparser.y"
- {
- OUTYY(("P(server_dlv_anchor_file:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->dlv_anchor_file);
- cfg_parser->cfg->dlv_anchor_file = yystack.l_mark[0].str;
- }
-break;
-case 158:
-#line 505 "util/configparser.y"
- {
- OUTYY(("P(server_dlv_anchor:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, yystack.l_mark[0].str))
- yyerror("out of memory");
- }
-break;
-case 159:
-#line 512 "util/configparser.y"
- {
- OUTYY(("P(server_auto_trust_anchor_file:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->
- auto_trust_anchor_file_list, yystack.l_mark[0].str))
- yyerror("out of memory");
- }
-break;
-case 160:
-#line 520 "util/configparser.y"
- {
- OUTYY(("P(server_trust_anchor_file:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->
- trust_anchor_file_list, yystack.l_mark[0].str))
- yyerror("out of memory");
- }
-break;
-case 161:
-#line 528 "util/configparser.y"
- {
- OUTYY(("P(server_trusted_keys_file:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->
- trusted_keys_file_list, yystack.l_mark[0].str))
- yyerror("out of memory");
- }
-break;
-case 162:
-#line 536 "util/configparser.y"
- {
- OUTYY(("P(server_trust_anchor:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, yystack.l_mark[0].str))
- yyerror("out of memory");
- }
-break;
-case 163:
-#line 543 "util/configparser.y"
- {
- OUTYY(("P(server_domain_insecure:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, yystack.l_mark[0].str))
- yyerror("out of memory");
- }
-break;
-case 164:
-#line 550 "util/configparser.y"
- {
- OUTYY(("P(server_hide_identity:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->hide_identity = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 165:
-#line 559 "util/configparser.y"
- {
- OUTYY(("P(server_hide_version:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->hide_version = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 166:
-#line 568 "util/configparser.y"
- {
- OUTYY(("P(server_identity:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->identity);
- cfg_parser->cfg->identity = yystack.l_mark[0].str;
- }
-break;
-case 167:
-#line 575 "util/configparser.y"
- {
- OUTYY(("P(server_version:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->version);
- cfg_parser->cfg->version = yystack.l_mark[0].str;
- }
-break;
-case 168:
-#line 582 "util/configparser.y"
- {
- OUTYY(("P(server_so_rcvbuf:%s)\n", yystack.l_mark[0].str));
- if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->so_rcvbuf))
- yyerror("buffer size expected");
- free(yystack.l_mark[0].str);
- }
-break;
-case 169:
-#line 590 "util/configparser.y"
- {
- OUTYY(("P(server_so_sndbuf:%s)\n", yystack.l_mark[0].str));
- if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->so_sndbuf))
- yyerror("buffer size expected");
- free(yystack.l_mark[0].str);
- }
-break;
-case 170:
-#line 598 "util/configparser.y"
- {
- OUTYY(("P(server_edns_buffer_size:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0)
- yyerror("number expected");
- else if (atoi(yystack.l_mark[0].str) < 12)
- yyerror("edns buffer size too small");
- else if (atoi(yystack.l_mark[0].str) > 65535)
- cfg_parser->cfg->edns_buffer_size = 65535;
- else cfg_parser->cfg->edns_buffer_size = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 171:
-#line 611 "util/configparser.y"
- {
- OUTYY(("P(server_msg_buffer_size:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0)
- yyerror("number expected");
- else if (atoi(yystack.l_mark[0].str) < 4096)
- yyerror("message buffer size too small (use 4096)");
- else cfg_parser->cfg->msg_buffer_size = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 172:
-#line 622 "util/configparser.y"
- {
- OUTYY(("P(server_msg_cache_size:%s)\n", yystack.l_mark[0].str));
- if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->msg_cache_size))
- yyerror("memory size expected");
- free(yystack.l_mark[0].str);
- }
-break;
-case 173:
-#line 630 "util/configparser.y"
- {
- OUTYY(("P(server_msg_cache_slabs:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0)
- yyerror("number expected");
- else {
- cfg_parser->cfg->msg_cache_slabs = atoi(yystack.l_mark[0].str);
- if(!is_pow2(cfg_parser->cfg->msg_cache_slabs))
- yyerror("must be a power of 2");
- }
- free(yystack.l_mark[0].str);
- }
-break;
-case 174:
-#line 643 "util/configparser.y"
- {
- OUTYY(("P(server_num_queries_per_thread:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0)
- yyerror("number expected");
- else cfg_parser->cfg->num_queries_per_thread = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 175:
-#line 652 "util/configparser.y"
- {
- OUTYY(("P(server_jostle_timeout:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->jostle_time = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 176:
-#line 661 "util/configparser.y"
- {
- OUTYY(("P(server_rrset_cache_size:%s)\n", yystack.l_mark[0].str));
- if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->rrset_cache_size))
- yyerror("memory size expected");
- free(yystack.l_mark[0].str);
- }
-break;
-case 177:
-#line 669 "util/configparser.y"
- {
- OUTYY(("P(server_rrset_cache_slabs:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0)
- yyerror("number expected");
- else {
- cfg_parser->cfg->rrset_cache_slabs = atoi(yystack.l_mark[0].str);
- if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs))
- yyerror("must be a power of 2");
- }
- free(yystack.l_mark[0].str);
- }
-break;
-case 178:
-#line 682 "util/configparser.y"
- {
- OUTYY(("P(server_infra_host_ttl:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->host_ttl = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 179:
-#line 691 "util/configparser.y"
- {
- OUTYY(("P(server_infra_lame_ttl:%s)\n", yystack.l_mark[0].str));
- verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
- "removed, use infra-host-ttl)", yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 180:
-#line 699 "util/configparser.y"
- {
- OUTYY(("P(server_infra_cache_numhosts:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0)
- yyerror("number expected");
- else cfg_parser->cfg->infra_cache_numhosts = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 181:
-#line 708 "util/configparser.y"
- {
- OUTYY(("P(server_infra_cache_lame_size:%s)\n", yystack.l_mark[0].str));
- verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
- "(option removed, use infra-cache-numhosts)", yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 182:
-#line 716 "util/configparser.y"
- {
- OUTYY(("P(server_infra_cache_slabs:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0)
- yyerror("number expected");
- else {
- cfg_parser->cfg->infra_cache_slabs = atoi(yystack.l_mark[0].str);
- if(!is_pow2(cfg_parser->cfg->infra_cache_slabs))
- yyerror("must be a power of 2");
- }
- free(yystack.l_mark[0].str);
- }
-break;
-case 183:
-#line 729 "util/configparser.y"
- {
- OUTYY(("P(server_target_fetch_policy:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->target_fetch_policy);
- cfg_parser->cfg->target_fetch_policy = yystack.l_mark[0].str;
- }
-break;
-case 184:
-#line 736 "util/configparser.y"
- {
- OUTYY(("P(server_harden_short_bufsize:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_short_bufsize =
- (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 185:
-#line 746 "util/configparser.y"
- {
- OUTYY(("P(server_harden_large_queries:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_large_queries =
- (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 186:
-#line 756 "util/configparser.y"
- {
- OUTYY(("P(server_harden_glue:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_glue =
- (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 187:
-#line 766 "util/configparser.y"
- {
- OUTYY(("P(server_harden_dnssec_stripped:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_dnssec_stripped =
- (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 188:
-#line 776 "util/configparser.y"
- {
- OUTYY(("P(server_harden_below_nxdomain:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_below_nxdomain =
- (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 189:
-#line 786 "util/configparser.y"
- {
- OUTYY(("P(server_harden_referral_path:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_referral_path =
- (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 190:
-#line 796 "util/configparser.y"
- {
- OUTYY(("P(server_use_caps_for_id:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->use_caps_bits_for_id =
- (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 191:
-#line 806 "util/configparser.y"
- {
- OUTYY(("P(server_private_address:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, yystack.l_mark[0].str))
- yyerror("out of memory");
- }
-break;
-case 192:
-#line 813 "util/configparser.y"
- {
- OUTYY(("P(server_private_domain:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, yystack.l_mark[0].str))
- yyerror("out of memory");
- }
-break;
-case 193:
-#line 820 "util/configparser.y"
- {
- OUTYY(("P(server_prefetch:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->prefetch = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 194:
-#line 829 "util/configparser.y"
- {
- OUTYY(("P(server_prefetch_key:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->prefetch_key = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 195:
-#line 838 "util/configparser.y"
- {
- OUTYY(("P(server_unwanted_reply_threshold:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->unwanted_threshold = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 196:
-#line 847 "util/configparser.y"
- {
- OUTYY(("P(server_do_not_query_address:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, yystack.l_mark[0].str))
- yyerror("out of memory");
- }
-break;
-case 197:
-#line 854 "util/configparser.y"
- {
- OUTYY(("P(server_do_not_query_localhost:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->donotquery_localhost =
- (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 198:
-#line 864 "util/configparser.y"
- {
- OUTYY(("P(server_access_control:%s %s)\n", yystack.l_mark[-1].str, yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "deny")!=0 && strcmp(yystack.l_mark[0].str, "refuse")!=0 &&
- strcmp(yystack.l_mark[0].str, "allow")!=0 &&
- strcmp(yystack.l_mark[0].str, "allow_snoop")!=0) {
- yyerror("expected deny, refuse, allow or allow_snoop "
- "in access control action");
- } else {
- if(!cfg_str2list_insert(&cfg_parser->cfg->acls, yystack.l_mark[-1].str, yystack.l_mark[0].str))
- fatal_exit("out of memory adding acl");
- }
- }
-break;
-case 199:
-#line 878 "util/configparser.y"
- {
- OUTYY(("P(server_module_conf:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->module_conf);
- cfg_parser->cfg->module_conf = yystack.l_mark[0].str;
- }
-break;
-case 200:
-#line 885 "util/configparser.y"
- {
- OUTYY(("P(server_val_override_date:%s)\n", yystack.l_mark[0].str));
- if(strlen(yystack.l_mark[0].str) == 0 || strcmp(yystack.l_mark[0].str, "0") == 0) {
- cfg_parser->cfg->val_date_override = 0;
- } else if(strlen(yystack.l_mark[0].str) == 14) {
- cfg_parser->cfg->val_date_override =
- cfg_convert_timeval(yystack.l_mark[0].str);
- if(!cfg_parser->cfg->val_date_override)
- yyerror("bad date/time specification");
- } else {
- if(atoi(yystack.l_mark[0].str) == 0)
- yyerror("number expected");
- cfg_parser->cfg->val_date_override = atoi(yystack.l_mark[0].str);
- }
- free(yystack.l_mark[0].str);
- }
-break;
-case 201:
-#line 903 "util/configparser.y"
- {
- OUTYY(("P(server_val_sig_skew_min:%s)\n", yystack.l_mark[0].str));
- if(strlen(yystack.l_mark[0].str) == 0 || strcmp(yystack.l_mark[0].str, "0") == 0) {
- cfg_parser->cfg->val_sig_skew_min = 0;
- } else {
- cfg_parser->cfg->val_sig_skew_min = atoi(yystack.l_mark[0].str);
- if(!cfg_parser->cfg->val_sig_skew_min)
- yyerror("number expected");
- }
- free(yystack.l_mark[0].str);
- }
-break;
-case 202:
-#line 916 "util/configparser.y"
- {
- OUTYY(("P(server_val_sig_skew_max:%s)\n", yystack.l_mark[0].str));
- if(strlen(yystack.l_mark[0].str) == 0 || strcmp(yystack.l_mark[0].str, "0") == 0) {
- cfg_parser->cfg->val_sig_skew_max = 0;
- } else {
- cfg_parser->cfg->val_sig_skew_max = atoi(yystack.l_mark[0].str);
- if(!cfg_parser->cfg->val_sig_skew_max)
- yyerror("number expected");
- }
- free(yystack.l_mark[0].str);
- }
-break;
-case 203:
-#line 929 "util/configparser.y"
- {
- OUTYY(("P(server_cache_max_ttl:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->max_ttl = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 204:
-#line 938 "util/configparser.y"
- {
- OUTYY(("P(server_cache_min_ttl:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->min_ttl = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 205:
-#line 947 "util/configparser.y"
- {
- OUTYY(("P(server_bogus_ttl:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->bogus_ttl = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 206:
-#line 956 "util/configparser.y"
- {
- OUTYY(("P(server_val_clean_additional:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->val_clean_additional =
- (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 207:
-#line 966 "util/configparser.y"
- {
- OUTYY(("P(server_val_permissive_mode:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->val_permissive_mode =
- (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 208:
-#line 976 "util/configparser.y"
- {
- OUTYY(("P(server_ignore_cd_flag:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->ignore_cd = (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 209:
-#line 985 "util/configparser.y"
- {
- OUTYY(("P(server_val_log_level:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->val_log_level = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 210:
-#line 994 "util/configparser.y"
- {
- OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->val_nsec3_key_iterations);
- cfg_parser->cfg->val_nsec3_key_iterations = yystack.l_mark[0].str;
- }
-break;
-case 211:
-#line 1001 "util/configparser.y"
- {
- OUTYY(("P(server_add_holddown:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->add_holddown = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 212:
-#line 1010 "util/configparser.y"
- {
- OUTYY(("P(server_del_holddown:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->del_holddown = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 213:
-#line 1019 "util/configparser.y"
- {
- OUTYY(("P(server_keep_missing:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->keep_missing = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 214:
-#line 1028 "util/configparser.y"
- {
- OUTYY(("P(server_key_cache_size:%s)\n", yystack.l_mark[0].str));
- if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->key_cache_size))
- yyerror("memory size expected");
- free(yystack.l_mark[0].str);
- }
-break;
-case 215:
-#line 1036 "util/configparser.y"
- {
- OUTYY(("P(server_key_cache_slabs:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0)
- yyerror("number expected");
- else {
- cfg_parser->cfg->key_cache_slabs = atoi(yystack.l_mark[0].str);
- if(!is_pow2(cfg_parser->cfg->key_cache_slabs))
- yyerror("must be a power of 2");
- }
- free(yystack.l_mark[0].str);
- }
-break;
-case 216:
-#line 1049 "util/configparser.y"
- {
- OUTYY(("P(server_neg_cache_size:%s)\n", yystack.l_mark[0].str));
- if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->neg_cache_size))
- yyerror("memory size expected");
- free(yystack.l_mark[0].str);
- }
-break;
-case 217:
-#line 1057 "util/configparser.y"
- {
- OUTYY(("P(server_local_zone:%s %s)\n", yystack.l_mark[-1].str, yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "static")!=0 && strcmp(yystack.l_mark[0].str, "deny")!=0 &&
- strcmp(yystack.l_mark[0].str, "refuse")!=0 && strcmp(yystack.l_mark[0].str, "redirect")!=0 &&
- strcmp(yystack.l_mark[0].str, "transparent")!=0 && strcmp(yystack.l_mark[0].str, "nodefault")!=0
- && strcmp(yystack.l_mark[0].str, "typetransparent")!=0)
- yyerror("local-zone type: expected static, deny, "
- "refuse, redirect, transparent, "
- "typetransparent or nodefault");
- else if(strcmp(yystack.l_mark[0].str, "nodefault")==0) {
- if(!cfg_strlist_insert(&cfg_parser->cfg->
- local_zones_nodefault, yystack.l_mark[-1].str))
- fatal_exit("out of memory adding local-zone");
- free(yystack.l_mark[0].str);
- } else {
- if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones,
- yystack.l_mark[-1].str, yystack.l_mark[0].str))
- fatal_exit("out of memory adding local-zone");
- }
- }
-break;
-case 218:
-#line 1079 "util/configparser.y"
- {
- OUTYY(("P(server_local_data:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, yystack.l_mark[0].str))
- fatal_exit("out of memory adding local-data");
- }
-break;
-case 219:
-#line 1086 "util/configparser.y"
- {
- char* ptr;
- OUTYY(("P(server_local_data_ptr:%s)\n", yystack.l_mark[0].str));
- ptr = cfg_ptr_reverse(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- if(ptr) {
- if(!cfg_strlist_insert(&cfg_parser->cfg->
- local_data, ptr))
- fatal_exit("out of memory adding local-data");
- } else {
- yyerror("local-data-ptr could not be reversed");
- }
- }
-break;
-case 220:
-#line 1101 "util/configparser.y"
- {
- OUTYY(("P(server_minimal_responses:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->minimal_responses =
- (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 221:
-#line 1111 "util/configparser.y"
- {
- OUTYY(("P(server_rrset_roundrobin:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->rrset_roundrobin =
- (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 222:
-#line 1121 "util/configparser.y"
- {
- OUTYY(("P(name:%s)\n", yystack.l_mark[0].str));
- if(cfg_parser->cfg->stubs->name)
- yyerror("stub name override, there must be one name "
- "for one stub-zone");
- free(cfg_parser->cfg->stubs->name);
- cfg_parser->cfg->stubs->name = yystack.l_mark[0].str;
- }
-break;
-case 223:
-#line 1131 "util/configparser.y"
- {
- OUTYY(("P(stub-host:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, yystack.l_mark[0].str))
- yyerror("out of memory");
- }
-break;
-case 224:
-#line 1138 "util/configparser.y"
- {
- OUTYY(("P(stub-addr:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, yystack.l_mark[0].str))
- yyerror("out of memory");
- }
-break;
-case 225:
-#line 1145 "util/configparser.y"
- {
- OUTYY(("P(stub-first:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->stubs->isfirst=(strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 226:
-#line 1154 "util/configparser.y"
- {
- OUTYY(("P(stub-prime:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->stubs->isprime =
- (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 227:
-#line 1164 "util/configparser.y"
- {
- OUTYY(("P(name:%s)\n", yystack.l_mark[0].str));
- if(cfg_parser->cfg->forwards->name)
- yyerror("forward name override, there must be one "
- "name for one forward-zone");
- free(cfg_parser->cfg->forwards->name);
- cfg_parser->cfg->forwards->name = yystack.l_mark[0].str;
- }
-break;
-case 228:
-#line 1174 "util/configparser.y"
- {
- OUTYY(("P(forward-host:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, yystack.l_mark[0].str))
- yyerror("out of memory");
- }
-break;
-case 229:
-#line 1181 "util/configparser.y"
- {
- OUTYY(("P(forward-addr:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, yystack.l_mark[0].str))
- yyerror("out of memory");
- }
-break;
-case 230:
-#line 1188 "util/configparser.y"
- {
- OUTYY(("P(forward-first:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->forwards->isfirst=(strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 231:
-#line 1197 "util/configparser.y"
- {
- OUTYY(("\nP(remote-control:)\n"));
- }
-break;
-case 241:
-#line 1208 "util/configparser.y"
- {
- OUTYY(("P(control_enable:%s)\n", yystack.l_mark[0].str));
- if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->remote_control_enable =
- (strcmp(yystack.l_mark[0].str, "yes")==0);
- free(yystack.l_mark[0].str);
- }
-break;
-case 242:
-#line 1218 "util/configparser.y"
- {
- OUTYY(("P(control_port:%s)\n", yystack.l_mark[0].str));
- if(atoi(yystack.l_mark[0].str) == 0)
- yyerror("control port number expected");
- else cfg_parser->cfg->control_port = atoi(yystack.l_mark[0].str);
- free(yystack.l_mark[0].str);
- }
-break;
-case 243:
-#line 1227 "util/configparser.y"
- {
- OUTYY(("P(control_interface:%s)\n", yystack.l_mark[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, yystack.l_mark[0].str))
- yyerror("out of memory");
- }
-break;
-case 244:
-#line 1234 "util/configparser.y"
- {
- OUTYY(("P(rc_server_key_file:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->server_key_file);
- cfg_parser->cfg->server_key_file = yystack.l_mark[0].str;
- }
-break;
-case 245:
-#line 1241 "util/configparser.y"
- {
- OUTYY(("P(rc_server_cert_file:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->server_cert_file);
- cfg_parser->cfg->server_cert_file = yystack.l_mark[0].str;
- }
-break;
-case 246:
-#line 1248 "util/configparser.y"
- {
- OUTYY(("P(rc_control_key_file:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->control_key_file);
- cfg_parser->cfg->control_key_file = yystack.l_mark[0].str;
- }
-break;
-case 247:
-#line 1255 "util/configparser.y"
- {
- OUTYY(("P(rc_control_cert_file:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->control_cert_file);
- cfg_parser->cfg->control_cert_file = yystack.l_mark[0].str;
- }
-break;
-case 248:
-#line 1262 "util/configparser.y"
- {
- OUTYY(("\nP(python:)\n"));
- }
-break;
-case 252:
-#line 1271 "util/configparser.y"
- {
- OUTYY(("P(python-script:%s)\n", yystack.l_mark[0].str));
- free(cfg_parser->cfg->python_script);
- cfg_parser->cfg->python_script = yystack.l_mark[0].str;
- }
-break;
-#line 2269 "util/configparser.c"
- }
- yystack.s_mark -= yym;
- yystate = *yystack.s_mark;
- yystack.l_mark -= yym;
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: after reduction, shifting from state 0 to\
- state %d\n", YYPREFIX, YYFINAL);
-#endif
- yystate = YYFINAL;
- *++yystack.s_mark = YYFINAL;
- *++yystack.l_mark = yyval;
- if (yychar < 0)
- {
- if ((yychar = YYLEX) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, reading %d (%s)\n",
- YYPREFIX, YYFINAL, yychar, yys);
- }
-#endif
- }
- if (yychar == 0) goto yyaccept;
- goto yyloop;
- }
- if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
- yystate = yytable[yyn];
- else
- yystate = yydgoto[yym];
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: after reduction, shifting from state %d \
-to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
-#endif
- if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
- {
- goto yyoverflow;
- }
- *++yystack.s_mark = (short) yystate;
- *++yystack.l_mark = yyval;
- goto yyloop;
-
-yyoverflow:
- yyerror("yacc stack overflow");
-
-yyabort:
- yyfreestack(&yystack);
- return (1);
-
-yyaccept:
- yyfreestack(&yystack);
- return (0);
-}
diff --git a/contrib/unbound/util/configparser.h b/contrib/unbound/util/configparser.h
deleted file mode 100644
index 7bf4235..0000000
--- a/contrib/unbound/util/configparser.h
+++ /dev/null
@@ -1,138 +0,0 @@
-#define SPACE 257
-#define LETTER 258
-#define NEWLINE 259
-#define COMMENT 260
-#define COLON 261
-#define ANY 262
-#define ZONESTR 263
-#define STRING_ARG 264
-#define VAR_SERVER 265
-#define VAR_VERBOSITY 266
-#define VAR_NUM_THREADS 267
-#define VAR_PORT 268
-#define VAR_OUTGOING_RANGE 269
-#define VAR_INTERFACE 270
-#define VAR_DO_IP4 271
-#define VAR_DO_IP6 272
-#define VAR_DO_UDP 273
-#define VAR_DO_TCP 274
-#define VAR_CHROOT 275
-#define VAR_USERNAME 276
-#define VAR_DIRECTORY 277
-#define VAR_LOGFILE 278
-#define VAR_PIDFILE 279
-#define VAR_MSG_CACHE_SIZE 280
-#define VAR_MSG_CACHE_SLABS 281
-#define VAR_NUM_QUERIES_PER_THREAD 282
-#define VAR_RRSET_CACHE_SIZE 283
-#define VAR_RRSET_CACHE_SLABS 284
-#define VAR_OUTGOING_NUM_TCP 285
-#define VAR_INFRA_HOST_TTL 286
-#define VAR_INFRA_LAME_TTL 287
-#define VAR_INFRA_CACHE_SLABS 288
-#define VAR_INFRA_CACHE_NUMHOSTS 289
-#define VAR_INFRA_CACHE_LAME_SIZE 290
-#define VAR_NAME 291
-#define VAR_STUB_ZONE 292
-#define VAR_STUB_HOST 293
-#define VAR_STUB_ADDR 294
-#define VAR_TARGET_FETCH_POLICY 295
-#define VAR_HARDEN_SHORT_BUFSIZE 296
-#define VAR_HARDEN_LARGE_QUERIES 297
-#define VAR_FORWARD_ZONE 298
-#define VAR_FORWARD_HOST 299
-#define VAR_FORWARD_ADDR 300
-#define VAR_DO_NOT_QUERY_ADDRESS 301
-#define VAR_HIDE_IDENTITY 302
-#define VAR_HIDE_VERSION 303
-#define VAR_IDENTITY 304
-#define VAR_VERSION 305
-#define VAR_HARDEN_GLUE 306
-#define VAR_MODULE_CONF 307
-#define VAR_TRUST_ANCHOR_FILE 308
-#define VAR_TRUST_ANCHOR 309
-#define VAR_VAL_OVERRIDE_DATE 310
-#define VAR_BOGUS_TTL 311
-#define VAR_VAL_CLEAN_ADDITIONAL 312
-#define VAR_VAL_PERMISSIVE_MODE 313
-#define VAR_INCOMING_NUM_TCP 314
-#define VAR_MSG_BUFFER_SIZE 315
-#define VAR_KEY_CACHE_SIZE 316
-#define VAR_KEY_CACHE_SLABS 317
-#define VAR_TRUSTED_KEYS_FILE 318
-#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 319
-#define VAR_USE_SYSLOG 320
-#define VAR_OUTGOING_INTERFACE 321
-#define VAR_ROOT_HINTS 322
-#define VAR_DO_NOT_QUERY_LOCALHOST 323
-#define VAR_CACHE_MAX_TTL 324
-#define VAR_HARDEN_DNSSEC_STRIPPED 325
-#define VAR_ACCESS_CONTROL 326
-#define VAR_LOCAL_ZONE 327
-#define VAR_LOCAL_DATA 328
-#define VAR_INTERFACE_AUTOMATIC 329
-#define VAR_STATISTICS_INTERVAL 330
-#define VAR_DO_DAEMONIZE 331
-#define VAR_USE_CAPS_FOR_ID 332
-#define VAR_STATISTICS_CUMULATIVE 333
-#define VAR_OUTGOING_PORT_PERMIT 334
-#define VAR_OUTGOING_PORT_AVOID 335
-#define VAR_DLV_ANCHOR_FILE 336
-#define VAR_DLV_ANCHOR 337
-#define VAR_NEG_CACHE_SIZE 338
-#define VAR_HARDEN_REFERRAL_PATH 339
-#define VAR_PRIVATE_ADDRESS 340
-#define VAR_PRIVATE_DOMAIN 341
-#define VAR_REMOTE_CONTROL 342
-#define VAR_CONTROL_ENABLE 343
-#define VAR_CONTROL_INTERFACE 344
-#define VAR_CONTROL_PORT 345
-#define VAR_SERVER_KEY_FILE 346
-#define VAR_SERVER_CERT_FILE 347
-#define VAR_CONTROL_KEY_FILE 348
-#define VAR_CONTROL_CERT_FILE 349
-#define VAR_EXTENDED_STATISTICS 350
-#define VAR_LOCAL_DATA_PTR 351
-#define VAR_JOSTLE_TIMEOUT 352
-#define VAR_STUB_PRIME 353
-#define VAR_UNWANTED_REPLY_THRESHOLD 354
-#define VAR_LOG_TIME_ASCII 355
-#define VAR_DOMAIN_INSECURE 356
-#define VAR_PYTHON 357
-#define VAR_PYTHON_SCRIPT 358
-#define VAR_VAL_SIG_SKEW_MIN 359
-#define VAR_VAL_SIG_SKEW_MAX 360
-#define VAR_CACHE_MIN_TTL 361
-#define VAR_VAL_LOG_LEVEL 362
-#define VAR_AUTO_TRUST_ANCHOR_FILE 363
-#define VAR_KEEP_MISSING 364
-#define VAR_ADD_HOLDDOWN 365
-#define VAR_DEL_HOLDDOWN 366
-#define VAR_SO_RCVBUF 367
-#define VAR_EDNS_BUFFER_SIZE 368
-#define VAR_PREFETCH 369
-#define VAR_PREFETCH_KEY 370
-#define VAR_SO_SNDBUF 371
-#define VAR_HARDEN_BELOW_NXDOMAIN 372
-#define VAR_IGNORE_CD_FLAG 373
-#define VAR_LOG_QUERIES 374
-#define VAR_TCP_UPSTREAM 375
-#define VAR_SSL_UPSTREAM 376
-#define VAR_SSL_SERVICE_KEY 377
-#define VAR_SSL_SERVICE_PEM 378
-#define VAR_SSL_PORT 379
-#define VAR_FORWARD_FIRST 380
-#define VAR_STUB_FIRST 381
-#define VAR_MINIMAL_RESPONSES 382
-#define VAR_RRSET_ROUNDROBIN 383
-#ifdef YYSTYPE
-#undef YYSTYPE_IS_DECLARED
-#define YYSTYPE_IS_DECLARED 1
-#endif
-#ifndef YYSTYPE_IS_DECLARED
-#define YYSTYPE_IS_DECLARED 1
-typedef union {
- char* str;
-} YYSTYPE;
-#endif /* !YYSTYPE_IS_DECLARED */
-extern YYSTYPE yylval;
diff --git a/contrib/unbound/util/configparser.y b/contrib/unbound/util/configparser.y
index 0dbee2b..f119507 100644
--- a/contrib/unbound/util/configparser.y
+++ b/contrib/unbound/util/configparser.y
@@ -23,16 +23,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
%{
@@ -44,7 +44,6 @@
#include <stdlib.h>
#include <assert.h>
-#include "util/configyyrename.h"
#include "util/config_file.h"
#include "util/net_help.h"
@@ -101,10 +100,11 @@ extern struct config_parser_state* cfg_parser;
%token VAR_VAL_SIG_SKEW_MAX VAR_CACHE_MIN_TTL VAR_VAL_LOG_LEVEL
%token VAR_AUTO_TRUST_ANCHOR_FILE VAR_KEEP_MISSING VAR_ADD_HOLDDOWN
%token VAR_DEL_HOLDDOWN VAR_SO_RCVBUF VAR_EDNS_BUFFER_SIZE VAR_PREFETCH
-%token VAR_PREFETCH_KEY VAR_SO_SNDBUF VAR_HARDEN_BELOW_NXDOMAIN
+%token VAR_PREFETCH_KEY VAR_SO_SNDBUF VAR_SO_REUSEPORT VAR_HARDEN_BELOW_NXDOMAIN
%token VAR_IGNORE_CD_FLAG VAR_LOG_QUERIES VAR_TCP_UPSTREAM VAR_SSL_UPSTREAM
%token VAR_SSL_SERVICE_KEY VAR_SSL_SERVICE_PEM VAR_SSL_PORT VAR_FORWARD_FIRST
%token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN
+%token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE VAR_UNBLOCK_LAN_ZONES
%%
toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -161,7 +161,8 @@ content_server: server_num_threads | server_verbosity | server_port |
server_so_sndbuf | server_harden_below_nxdomain | server_ignore_cd_flag |
server_log_queries | server_tcp_upstream | server_ssl_upstream |
server_ssl_service_key | server_ssl_service_pem | server_ssl_port |
- server_minimal_responses | server_rrset_roundrobin
+ server_minimal_responses | server_rrset_roundrobin | server_max_udp_size |
+ server_so_reuseport | server_delay_close | server_unblock_lan_zones
;
stubstart: VAR_STUB_ZONE
{
@@ -594,6 +595,16 @@ server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG
free($2);
}
;
+server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG
+ {
+ OUTYY(("P(server_so_reuseport:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->so_reuseport =
+ (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG
{
OUTYY(("P(server_edns_buffer_size:%s)\n", $2));
@@ -657,6 +668,25 @@ server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG
free($2);
}
;
+server_delay_close: VAR_DELAY_CLOSE STRING_ARG
+ {
+ OUTYY(("P(server_delay_close:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->delay_close = atoi($2);
+ free($2);
+ }
+ ;
+server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG
+ {
+ OUTYY(("P(server_unblock_lan_zones:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->unblock_lan_zones =
+ (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG
{
OUTYY(("P(server_rrset_cache_size:%s)\n", $2));
@@ -864,9 +894,12 @@ server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG
{
OUTYY(("P(server_access_control:%s %s)\n", $2, $3));
if(strcmp($3, "deny")!=0 && strcmp($3, "refuse")!=0 &&
+ strcmp($3, "deny_non_local")!=0 &&
+ strcmp($3, "refuse_non_local")!=0 &&
strcmp($3, "allow")!=0 &&
strcmp($3, "allow_snoop")!=0) {
- yyerror("expected deny, refuse, allow or allow_snoop "
+ yyerror("expected deny, refuse, deny_non_local, "
+ "refuse_non_local, allow or allow_snoop "
"in access control action");
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->acls, $2, $3))
@@ -1117,6 +1150,13 @@ server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG
free($2);
}
;
+server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG
+ {
+ OUTYY(("P(server_max_udp_size:%s)\n", $2));
+ cfg_parser->cfg->max_udp_size = atoi($2);
+ free($2);
+ }
+ ;
stub_name: VAR_NAME STRING_ARG
{
OUTYY(("P(name:%s)\n", $2));
diff --git a/contrib/unbound/util/data/dname.c b/contrib/unbound/util/data/dname.c
index d2b2997..76f2e64 100644
--- a/contrib/unbound/util/data/dname.c
+++ b/contrib/unbound/util/data/dname.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -45,17 +45,18 @@
#include "util/data/msgparse.h"
#include "util/log.h"
#include "util/storage/lookup3.h"
+#include "ldns/sbuffer.h"
/* determine length of a dname in buffer, no compression pointers allowed */
size_t
-query_dname_len(ldns_buffer* query)
+query_dname_len(sldns_buffer* query)
{
size_t len = 0;
size_t labellen;
while(1) {
- if(ldns_buffer_remaining(query) < 1)
+ if(sldns_buffer_remaining(query) < 1)
return 0; /* parse error, need label len */
- labellen = ldns_buffer_read_u8(query);
+ labellen = sldns_buffer_read_u8(query);
if(labellen&0xc0)
return 0; /* no compression allowed in queries */
len += labellen + 1;
@@ -63,9 +64,9 @@ query_dname_len(ldns_buffer* query)
return 0; /* too long */
if(labellen == 0)
return len;
- if(ldns_buffer_remaining(query) < labellen)
+ if(sldns_buffer_remaining(query) < labellen)
return 0; /* parse error, need content */
- ldns_buffer_skip(query, (ssize_t)labellen);
+ sldns_buffer_skip(query, (ssize_t)labellen);
}
}
@@ -145,31 +146,31 @@ query_dname_tolower(uint8_t* dname)
}
void
-pkt_dname_tolower(ldns_buffer* pkt, uint8_t* dname)
+pkt_dname_tolower(sldns_buffer* pkt, uint8_t* dname)
{
uint8_t lablen;
int count = 0;
- if(dname >= ldns_buffer_end(pkt))
+ if(dname >= sldns_buffer_end(pkt))
return;
lablen = *dname++;
while(lablen) {
if(LABEL_IS_PTR(lablen)) {
if((size_t)PTR_OFFSET(lablen, *dname)
- >= ldns_buffer_limit(pkt))
+ >= sldns_buffer_limit(pkt))
return;
- dname = ldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname));
+ dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname));
lablen = *dname++;
if(count++ > MAX_COMPRESS_PTRS)
return;
continue;
}
- if(dname+lablen >= ldns_buffer_end(pkt))
+ if(dname+lablen >= sldns_buffer_end(pkt))
return;
while(lablen--) {
*dname = (uint8_t)tolower((int)*dname);
dname++;
}
- if(dname >= ldns_buffer_end(pkt))
+ if(dname >= sldns_buffer_end(pkt))
return;
lablen = *dname++;
}
@@ -177,7 +178,7 @@ pkt_dname_tolower(ldns_buffer* pkt, uint8_t* dname)
size_t
-pkt_dname_len(ldns_buffer* pkt)
+pkt_dname_len(sldns_buffer* pkt)
{
size_t len = 0;
int ptrcount = 0;
@@ -188,22 +189,22 @@ pkt_dname_len(ldns_buffer* pkt)
/* check compression pointers, loops, out of bounds */
while(1) {
/* read next label */
- if(ldns_buffer_remaining(pkt) < 1)
+ if(sldns_buffer_remaining(pkt) < 1)
return 0;
- labellen = ldns_buffer_read_u8(pkt);
+ labellen = sldns_buffer_read_u8(pkt);
if(LABEL_IS_PTR(labellen)) {
/* compression ptr */
uint16_t ptr;
- if(ldns_buffer_remaining(pkt) < 1)
+ if(sldns_buffer_remaining(pkt) < 1)
return 0;
- ptr = PTR_OFFSET(labellen, ldns_buffer_read_u8(pkt));
+ ptr = PTR_OFFSET(labellen, sldns_buffer_read_u8(pkt));
if(ptrcount++ > MAX_COMPRESS_PTRS)
return 0; /* loop! */
- if(ldns_buffer_limit(pkt) <= ptr)
+ if(sldns_buffer_limit(pkt) <= ptr)
return 0; /* out of bounds! */
if(!endpos)
- endpos = ldns_buffer_position(pkt);
- ldns_buffer_set_position(pkt, ptr);
+ endpos = sldns_buffer_position(pkt);
+ sldns_buffer_set_position(pkt, ptr);
} else {
/* label contents */
if(labellen > 0x3f)
@@ -215,19 +216,19 @@ pkt_dname_len(ldns_buffer* pkt)
/* end of dname */
break;
}
- if(ldns_buffer_remaining(pkt) < labellen)
+ if(sldns_buffer_remaining(pkt) < labellen)
return 0;
- ldns_buffer_skip(pkt, (ssize_t)labellen);
+ sldns_buffer_skip(pkt, (ssize_t)labellen);
}
}
if(endpos)
- ldns_buffer_set_position(pkt, endpos);
+ sldns_buffer_set_position(pkt, endpos);
return len;
}
int
-dname_pkt_compare(ldns_buffer* pkt, uint8_t* d1, uint8_t* d2)
+dname_pkt_compare(sldns_buffer* pkt, uint8_t* d1, uint8_t* d2)
{
uint8_t len1, len2;
log_assert(pkt && d1 && d2);
@@ -236,12 +237,12 @@ dname_pkt_compare(ldns_buffer* pkt, uint8_t* d1, uint8_t* d2)
while( len1 != 0 || len2 != 0 ) {
/* resolve ptrs */
if(LABEL_IS_PTR(len1)) {
- d1 = ldns_buffer_at(pkt, PTR_OFFSET(len1, *d1));
+ d1 = sldns_buffer_at(pkt, PTR_OFFSET(len1, *d1));
len1 = *d1++;
continue;
}
if(LABEL_IS_PTR(len2)) {
- d2 = ldns_buffer_at(pkt, PTR_OFFSET(len2, *d2));
+ d2 = sldns_buffer_at(pkt, PTR_OFFSET(len2, *d2));
len2 = *d2++;
continue;
}
@@ -290,7 +291,7 @@ dname_query_hash(uint8_t* dname, hashvalue_t h)
}
hashvalue_t
-dname_pkt_hash(ldns_buffer* pkt, uint8_t* dname, hashvalue_t h)
+dname_pkt_hash(sldns_buffer* pkt, uint8_t* dname, hashvalue_t h)
{
uint8_t labuf[LDNS_MAX_LABELLEN+1];
uint8_t lablen;
@@ -301,7 +302,7 @@ dname_pkt_hash(ldns_buffer* pkt, uint8_t* dname, hashvalue_t h)
while(lablen) {
if(LABEL_IS_PTR(lablen)) {
/* follow pointer */
- dname = ldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname));
+ dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname));
lablen = *dname++;
continue;
}
@@ -317,7 +318,7 @@ dname_pkt_hash(ldns_buffer* pkt, uint8_t* dname, hashvalue_t h)
return h;
}
-void dname_pkt_copy(ldns_buffer* pkt, uint8_t* to, uint8_t* dname)
+void dname_pkt_copy(sldns_buffer* pkt, uint8_t* to, uint8_t* dname)
{
/* copy over the dname and decompress it at the same time */
size_t len = 0;
@@ -326,7 +327,7 @@ void dname_pkt_copy(ldns_buffer* pkt, uint8_t* to, uint8_t* dname)
while(lablen) {
if(LABEL_IS_PTR(lablen)) {
/* follow pointer */
- dname = ldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname));
+ dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname));
lablen = *dname++;
continue;
}
@@ -347,7 +348,7 @@ void dname_pkt_copy(ldns_buffer* pkt, uint8_t* to, uint8_t* dname)
*to = 0;
}
-void dname_print(FILE* out, ldns_buffer* pkt, uint8_t* dname)
+void dname_print(FILE* out, struct sldns_buffer* pkt, uint8_t* dname)
{
uint8_t lablen;
if(!out) out = stdout;
@@ -363,7 +364,7 @@ void dname_print(FILE* out, ldns_buffer* pkt, uint8_t* dname)
fputs("??compressionptr??", out);
return;
}
- dname = ldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname));
+ dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname));
lablen = *dname++;
continue;
}
@@ -517,21 +518,21 @@ dname_lab_cmp(uint8_t* d1, int labs1, uint8_t* d2, int labs2, int* mlabs)
}
int
-dname_buffer_write(ldns_buffer* pkt, uint8_t* dname)
+dname_buffer_write(sldns_buffer* pkt, uint8_t* dname)
{
uint8_t lablen;
- if(ldns_buffer_remaining(pkt) < 1)
+ if(sldns_buffer_remaining(pkt) < 1)
return 0;
lablen = *dname++;
- ldns_buffer_write_u8(pkt, lablen);
+ sldns_buffer_write_u8(pkt, lablen);
while(lablen) {
- if(ldns_buffer_remaining(pkt) < (size_t)lablen+1)
+ if(sldns_buffer_remaining(pkt) < (size_t)lablen+1)
return 0;
- ldns_buffer_write(pkt, dname, lablen);
+ sldns_buffer_write(pkt, dname, lablen);
dname += lablen;
lablen = *dname++;
- ldns_buffer_write_u8(pkt, lablen);
+ sldns_buffer_write_u8(pkt, lablen);
}
return 1;
}
diff --git a/contrib/unbound/util/data/dname.h b/contrib/unbound/util/data/dname.h
index b942848..ae2fbad 100644
--- a/contrib/unbound/util/data/dname.h
+++ b/contrib/unbound/util/data/dname.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -45,6 +45,7 @@
#ifndef UTIL_DATA_DNAME_H
#define UTIL_DATA_DNAME_H
#include "util/storage/lruhash.h"
+struct sldns_buffer;
/** max number of compression ptrs to follow */
#define MAX_COMPRESS_PTRS 256
@@ -55,7 +56,7 @@
* at end, position is at end of the dname.
* @return: 0 on parse failure, or length including ending 0 of dname.
*/
-size_t query_dname_len(ldns_buffer* query);
+size_t query_dname_len(struct sldns_buffer* query);
/**
* Determine if dname in memory is correct. no compression ptrs allowed.
@@ -74,7 +75,7 @@ void query_dname_tolower(uint8_t* dname);
* is unchanged.
* @param dname: start of dname in packet.
*/
-void pkt_dname_tolower(ldns_buffer* pkt, uint8_t* dname);
+void pkt_dname_tolower(struct sldns_buffer* pkt, uint8_t* dname);
/**
* Compare query dnames (uncompressed storage). The Dnames passed do not
@@ -106,7 +107,7 @@ int query_dname_compare(uint8_t* d1, uint8_t* d2);
* Compression pointers are followed and checked for loops.
* The uncompressed wireformat length is returned.
*/
-size_t pkt_dname_len(ldns_buffer* pkt);
+size_t pkt_dname_len(struct sldns_buffer* pkt);
/**
* Compare dnames in packet (compressed). Dnames must be valid.
@@ -117,7 +118,7 @@ size_t pkt_dname_len(ldns_buffer* pkt);
* @return: -1, 0, or +1 depending on comparison results.
* Sort order is first difference found. not the canonical ordering.
*/
-int dname_pkt_compare(ldns_buffer* pkt, uint8_t* d1, uint8_t* d2);
+int dname_pkt_compare(struct sldns_buffer* pkt, uint8_t* d1, uint8_t* d2);
/**
* Hash dname, label by label, lowercasing, into hashvalue.
@@ -138,7 +139,7 @@ hashvalue_t dname_query_hash(uint8_t* dname, hashvalue_t h);
* @return: result hash value.
* Result is the same as dname_query_hash, even if compression is used.
*/
-hashvalue_t dname_pkt_hash(ldns_buffer* pkt, uint8_t* dname, hashvalue_t h);
+hashvalue_t dname_pkt_hash(struct sldns_buffer* pkt, uint8_t* dname, hashvalue_t h);
/**
* Copy over a valid dname and decompress it.
@@ -146,7 +147,7 @@ hashvalue_t dname_pkt_hash(ldns_buffer* pkt, uint8_t* dname, hashvalue_t h);
* @param to: buffer of size from pkt_len function to hold result.
* @param dname: pointer into packet where dname starts.
*/
-void dname_pkt_copy(ldns_buffer* pkt, uint8_t* to, uint8_t* dname);
+void dname_pkt_copy(struct sldns_buffer* pkt, uint8_t* to, uint8_t* dname);
/**
* Copy over a valid dname to a packet.
@@ -154,7 +155,7 @@ void dname_pkt_copy(ldns_buffer* pkt, uint8_t* to, uint8_t* dname);
* @param dname: dname to copy.
* @return: 0 if not enough space in buffer.
*/
-int dname_buffer_write(ldns_buffer* pkt, uint8_t* dname);
+int dname_buffer_write(struct sldns_buffer* pkt, uint8_t* dname);
/**
* Count the number of labels in an uncompressed dname in memory.
@@ -216,7 +217,7 @@ int dname_subdomain_c(uint8_t* d1, uint8_t* d2);
* @param pkt: if not NULL, the packet for resolving compression ptrs.
* @param dname: pointer to (start of) dname.
*/
-void dname_print(FILE* out, ldns_buffer* pkt, uint8_t* dname);
+void dname_print(FILE* out, struct sldns_buffer* pkt, uint8_t* dname);
/**
* Debug helper. Print dname to given string buffer (string buffer must
diff --git a/contrib/unbound/util/data/msgencode.c b/contrib/unbound/util/data/msgencode.c
index 157796d..26b5dea 100644
--- a/contrib/unbound/util/data/msgencode.c
+++ b/contrib/unbound/util/data/msgencode.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -40,7 +40,6 @@
*/
#include "config.h"
-#include <ldns/wire2host.h>
#include "util/data/msgencode.h"
#include "util/data/msgreply.h"
#include "util/data/msgparse.h"
@@ -48,6 +47,7 @@
#include "util/log.h"
#include "util/regional.h"
#include "util/net_help.h"
+#include "ldns/sbuffer.h"
/** return code that means the function ran out of memory. negative so it does
* not conflict with DNS rcodes. */
@@ -243,7 +243,7 @@ compress_tree_store(uint8_t* dname, int labs, size_t offset,
/** compress a domain name */
static int
-write_compressed_dname(ldns_buffer* pkt, uint8_t* dname, int labs,
+write_compressed_dname(sldns_buffer* pkt, uint8_t* dname, int labs,
struct compress_tree_node* p)
{
/* compress it */
@@ -253,32 +253,32 @@ write_compressed_dname(ldns_buffer* pkt, uint8_t* dname, int labs,
if(labs == 1) {
/* write root label */
- if(ldns_buffer_remaining(pkt) < 1)
+ if(sldns_buffer_remaining(pkt) < 1)
return 0;
- ldns_buffer_write_u8(pkt, 0);
+ sldns_buffer_write_u8(pkt, 0);
return 1;
}
/* copy the first couple of labels */
while(labcopy--) {
lablen = *dname++;
- if(ldns_buffer_remaining(pkt) < (size_t)lablen+1)
+ if(sldns_buffer_remaining(pkt) < (size_t)lablen+1)
return 0;
- ldns_buffer_write_u8(pkt, lablen);
- ldns_buffer_write(pkt, dname, lablen);
+ sldns_buffer_write_u8(pkt, lablen);
+ sldns_buffer_write(pkt, dname, lablen);
dname += lablen;
}
/* insert compression ptr */
- if(ldns_buffer_remaining(pkt) < 2)
+ if(sldns_buffer_remaining(pkt) < 2)
return 0;
ptr = PTR_CREATE(p->offset);
- ldns_buffer_write_u16(pkt, ptr);
+ sldns_buffer_write_u16(pkt, ptr);
return 1;
}
/** compress owner name of RR, return RETVAL_OUTMEM RETVAL_TRUNC */
static int
-compress_owner(struct ub_packed_rrset_key* key, ldns_buffer* pkt,
+compress_owner(struct ub_packed_rrset_key* key, sldns_buffer* pkt,
struct regional* region, struct compress_tree_node** tree,
size_t owner_pos, uint16_t* owner_ptr, int owner_labs)
{
@@ -296,13 +296,13 @@ compress_owner(struct ub_packed_rrset_key* key, ldns_buffer* pkt,
owner_labs, p))
return RETVAL_TRUNC;
/* check if typeclass+4 ttl + rdatalen is available */
- if(ldns_buffer_remaining(pkt) < 4+4+2)
+ if(sldns_buffer_remaining(pkt) < 4+4+2)
return RETVAL_TRUNC;
} else {
/* no compress */
- if(ldns_buffer_remaining(pkt) < key->rk.dname_len+4+4+2)
+ if(sldns_buffer_remaining(pkt) < key->rk.dname_len+4+4+2)
return RETVAL_TRUNC;
- ldns_buffer_write(pkt, key->rk.dname,
+ sldns_buffer_write(pkt, key->rk.dname,
key->rk.dname_len);
if(owner_pos <= PTR_MAX_OFFSET)
*owner_ptr = htons(PTR_CREATE(owner_pos));
@@ -313,13 +313,13 @@ compress_owner(struct ub_packed_rrset_key* key, ldns_buffer* pkt,
} else {
/* always compress 2nd-further RRs in RRset */
if(owner_labs == 1) {
- if(ldns_buffer_remaining(pkt) < 1+4+4+2)
+ if(sldns_buffer_remaining(pkt) < 1+4+4+2)
return RETVAL_TRUNC;
- ldns_buffer_write_u8(pkt, 0);
+ sldns_buffer_write_u8(pkt, 0);
} else {
- if(ldns_buffer_remaining(pkt) < 2+4+4+2)
+ if(sldns_buffer_remaining(pkt) < 2+4+4+2)
return RETVAL_TRUNC;
- ldns_buffer_write(pkt, owner_ptr, 2);
+ sldns_buffer_write(pkt, owner_ptr, 2);
}
}
return RETVAL_OK;
@@ -327,12 +327,12 @@ compress_owner(struct ub_packed_rrset_key* key, ldns_buffer* pkt,
/** compress any domain name to the packet, return RETVAL_* */
static int
-compress_any_dname(uint8_t* dname, ldns_buffer* pkt, int labs,
+compress_any_dname(uint8_t* dname, sldns_buffer* pkt, int labs,
struct regional* region, struct compress_tree_node** tree)
{
struct compress_tree_node* p;
struct compress_tree_node** insertpt = NULL;
- size_t pos = ldns_buffer_position(pkt);
+ size_t pos = sldns_buffer_position(pkt);
if((p = compress_tree_lookup(tree, dname, labs, &insertpt))) {
if(!write_compressed_dname(pkt, dname, labs, p))
return RETVAL_TRUNC;
@@ -346,27 +346,27 @@ compress_any_dname(uint8_t* dname, ldns_buffer* pkt, int labs,
}
/** return true if type needs domain name compression in rdata */
-static const ldns_rr_descriptor*
+static const sldns_rr_descriptor*
type_rdata_compressable(struct ub_packed_rrset_key* key)
{
uint16_t t = ntohs(key->rk.type);
- if(ldns_rr_descript(t) &&
- ldns_rr_descript(t)->_compress == LDNS_RR_COMPRESS)
- return ldns_rr_descript(t);
+ if(sldns_rr_descript(t) &&
+ sldns_rr_descript(t)->_compress == LDNS_RR_COMPRESS)
+ return sldns_rr_descript(t);
return 0;
}
/** compress domain names in rdata, return RETVAL_* */
static int
-compress_rdata(ldns_buffer* pkt, uint8_t* rdata, size_t todolen,
+compress_rdata(sldns_buffer* pkt, uint8_t* rdata, size_t todolen,
struct regional* region, struct compress_tree_node** tree,
- const ldns_rr_descriptor* desc)
+ const sldns_rr_descriptor* desc)
{
int labs, r, rdf = 0;
- size_t dname_len, len, pos = ldns_buffer_position(pkt);
+ size_t dname_len, len, pos = sldns_buffer_position(pkt);
uint8_t count = desc->_dname_count;
- ldns_buffer_skip(pkt, 2); /* rdata len fill in later */
+ sldns_buffer_skip(pkt, 2); /* rdata len fill in later */
/* space for rdatalen checked for already */
rdata += 2;
todolen -= 2;
@@ -390,9 +390,9 @@ compress_rdata(ldns_buffer* pkt, uint8_t* rdata, size_t todolen,
}
if(len) {
/* copy over */
- if(ldns_buffer_remaining(pkt) < len)
+ if(sldns_buffer_remaining(pkt) < len)
return RETVAL_TRUNC;
- ldns_buffer_write(pkt, rdata, len);
+ sldns_buffer_write(pkt, rdata, len);
todolen -= len;
rdata += len;
}
@@ -400,19 +400,19 @@ compress_rdata(ldns_buffer* pkt, uint8_t* rdata, size_t todolen,
}
/* copy remainder */
if(todolen > 0) {
- if(ldns_buffer_remaining(pkt) < todolen)
+ if(sldns_buffer_remaining(pkt) < todolen)
return RETVAL_TRUNC;
- ldns_buffer_write(pkt, rdata, todolen);
+ sldns_buffer_write(pkt, rdata, todolen);
}
/* set rdata len */
- ldns_buffer_write_u16_at(pkt, pos, ldns_buffer_position(pkt)-pos-2);
+ sldns_buffer_write_u16_at(pkt, pos, sldns_buffer_position(pkt)-pos-2);
return RETVAL_OK;
}
/** Returns true if RR type should be included */
static int
-rrset_belongs_in_reply(ldns_pkt_section s, uint16_t rrtype, uint16_t qtype,
+rrset_belongs_in_reply(sldns_pkt_section s, uint16_t rrtype, uint16_t qtype,
int dnssec)
{
if(dnssec)
@@ -440,10 +440,10 @@ rrset_belongs_in_reply(ldns_pkt_section s, uint16_t rrtype, uint16_t qtype,
/** store rrset in buffer in wireformat, return RETVAL_* */
static int
-packed_rrset_encode(struct ub_packed_rrset_key* key, ldns_buffer* pkt,
- uint16_t* num_rrs, uint32_t timenow, struct regional* region,
+packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt,
+ uint16_t* num_rrs, time_t timenow, struct regional* region,
int do_data, int do_sig, struct compress_tree_node** tree,
- ldns_pkt_section s, uint16_t qtype, int dnssec, size_t rr_offset)
+ sldns_pkt_section s, uint16_t qtype, int dnssec, size_t rr_offset)
{
size_t i, j, owner_pos;
int r, owner_labs;
@@ -456,10 +456,10 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, ldns_buffer* pkt,
return RETVAL_OK;
owner_labs = dname_count_labels(key->rk.dname);
- owner_pos = ldns_buffer_position(pkt);
+ owner_pos = sldns_buffer_position(pkt);
if(do_data) {
- const ldns_rr_descriptor* c = type_rdata_compressable(key);
+ const sldns_rr_descriptor* c = type_rdata_compressable(key);
for(i=0; i<data->count; i++) {
/* rrset roundrobin */
j = (i + rr_offset) % data->count;
@@ -467,11 +467,11 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, ldns_buffer* pkt,
owner_pos, &owner_ptr, owner_labs))
!= RETVAL_OK)
return r;
- ldns_buffer_write(pkt, &key->rk.type, 2);
- ldns_buffer_write(pkt, &key->rk.rrset_class, 2);
+ sldns_buffer_write(pkt, &key->rk.type, 2);
+ sldns_buffer_write(pkt, &key->rk.rrset_class, 2);
if(data->rr_ttl[j] < timenow)
- ldns_buffer_write_u32(pkt, 0);
- else ldns_buffer_write_u32(pkt,
+ sldns_buffer_write_u32(pkt, 0);
+ else sldns_buffer_write_u32(pkt,
data->rr_ttl[j]-timenow);
if(c) {
if((r=compress_rdata(pkt, data->rr_data[j],
@@ -479,9 +479,9 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, ldns_buffer* pkt,
!= RETVAL_OK)
return r;
} else {
- if(ldns_buffer_remaining(pkt) < data->rr_len[j])
+ if(sldns_buffer_remaining(pkt) < data->rr_len[j])
return RETVAL_TRUNC;
- ldns_buffer_write(pkt, data->rr_data[j],
+ sldns_buffer_write(pkt, data->rr_data[j],
data->rr_len[j]);
}
}
@@ -491,28 +491,28 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, ldns_buffer* pkt,
size_t total = data->count+data->rrsig_count;
for(i=data->count; i<total; i++) {
if(owner_ptr && owner_labs != 1) {
- if(ldns_buffer_remaining(pkt) <
+ if(sldns_buffer_remaining(pkt) <
2+4+4+data->rr_len[i])
return RETVAL_TRUNC;
- ldns_buffer_write(pkt, &owner_ptr, 2);
+ sldns_buffer_write(pkt, &owner_ptr, 2);
} else {
if((r=compress_any_dname(key->rk.dname,
pkt, owner_labs, region, tree))
!= RETVAL_OK)
return r;
- if(ldns_buffer_remaining(pkt) <
+ if(sldns_buffer_remaining(pkt) <
4+4+data->rr_len[i])
return RETVAL_TRUNC;
}
- ldns_buffer_write_u16(pkt, LDNS_RR_TYPE_RRSIG);
- ldns_buffer_write(pkt, &key->rk.rrset_class, 2);
+ sldns_buffer_write_u16(pkt, LDNS_RR_TYPE_RRSIG);
+ sldns_buffer_write(pkt, &key->rk.rrset_class, 2);
if(data->rr_ttl[i] < timenow)
- ldns_buffer_write_u32(pkt, 0);
- else ldns_buffer_write_u32(pkt,
+ sldns_buffer_write_u32(pkt, 0);
+ else sldns_buffer_write_u32(pkt,
data->rr_ttl[i]-timenow);
/* rrsig rdata cannot be compressed, perform 100+ byte
* memcopy. */
- ldns_buffer_write(pkt, data->rr_data[i],
+ sldns_buffer_write(pkt, data->rr_data[i],
data->rr_len[i]);
}
}
@@ -528,9 +528,9 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, ldns_buffer* pkt,
/** store msg section in wireformat buffer, return RETVAL_* */
static int
insert_section(struct reply_info* rep, size_t num_rrsets, uint16_t* num_rrs,
- ldns_buffer* pkt, size_t rrsets_before, uint32_t timenow,
+ sldns_buffer* pkt, size_t rrsets_before, time_t timenow,
struct regional* region, struct compress_tree_node** tree,
- ldns_pkt_section s, uint16_t qtype, int dnssec, size_t rr_offset)
+ sldns_pkt_section s, uint16_t qtype, int dnssec, size_t rr_offset)
{
int r;
size_t i, setstart;
@@ -539,36 +539,36 @@ insert_section(struct reply_info* rep, size_t num_rrsets, uint16_t* num_rrs,
if(s == LDNS_SECTION_ANSWER && qtype == LDNS_RR_TYPE_ANY)
dnssec = 1; /* include all types in ANY answer */
for(i=0; i<num_rrsets; i++) {
- setstart = ldns_buffer_position(pkt);
+ setstart = sldns_buffer_position(pkt);
if((r=packed_rrset_encode(rep->rrsets[rrsets_before+i],
pkt, num_rrs, timenow, region, 1, 1, tree,
s, qtype, dnssec, rr_offset))
!= RETVAL_OK) {
/* Bad, but if due to size must set TC bit */
/* trim off the rrset neatly. */
- ldns_buffer_set_position(pkt, setstart);
+ sldns_buffer_set_position(pkt, setstart);
return r;
}
}
} else {
for(i=0; i<num_rrsets; i++) {
- setstart = ldns_buffer_position(pkt);
+ setstart = sldns_buffer_position(pkt);
if((r=packed_rrset_encode(rep->rrsets[rrsets_before+i],
pkt, num_rrs, timenow, region, 1, 0, tree,
s, qtype, dnssec, rr_offset))
!= RETVAL_OK) {
- ldns_buffer_set_position(pkt, setstart);
+ sldns_buffer_set_position(pkt, setstart);
return r;
}
}
if(dnssec)
for(i=0; i<num_rrsets; i++) {
- setstart = ldns_buffer_position(pkt);
+ setstart = sldns_buffer_position(pkt);
if((r=packed_rrset_encode(rep->rrsets[rrsets_before+i],
pkt, num_rrs, timenow, region, 0, 1, tree,
s, qtype, dnssec, rr_offset))
!= RETVAL_OK) {
- ldns_buffer_set_position(pkt, setstart);
+ sldns_buffer_set_position(pkt, setstart);
return r;
}
}
@@ -579,21 +579,21 @@ insert_section(struct reply_info* rep, size_t num_rrsets, uint16_t* num_rrs,
/** store query section in wireformat buffer, return RETVAL */
static int
insert_query(struct query_info* qinfo, struct compress_tree_node** tree,
- ldns_buffer* buffer, struct regional* region)
+ sldns_buffer* buffer, struct regional* region)
{
- if(ldns_buffer_remaining(buffer) <
+ if(sldns_buffer_remaining(buffer) <
qinfo->qname_len+sizeof(uint16_t)*2)
return RETVAL_TRUNC; /* buffer too small */
/* the query is the first name inserted into the tree */
if(!compress_tree_store(qinfo->qname,
dname_count_labels(qinfo->qname),
- ldns_buffer_position(buffer), region, NULL, tree))
+ sldns_buffer_position(buffer), region, NULL, tree))
return RETVAL_OUTMEM;
- if(ldns_buffer_current(buffer) == qinfo->qname)
- ldns_buffer_skip(buffer, (ssize_t)qinfo->qname_len);
- else ldns_buffer_write(buffer, qinfo->qname, qinfo->qname_len);
- ldns_buffer_write_u16(buffer, qinfo->qtype);
- ldns_buffer_write_u16(buffer, qinfo->qclass);
+ if(sldns_buffer_current(buffer) == qinfo->qname)
+ sldns_buffer_skip(buffer, (ssize_t)qinfo->qname_len);
+ else sldns_buffer_write(buffer, qinfo->qname, qinfo->qname_len);
+ sldns_buffer_write_u16(buffer, qinfo->qtype);
+ sldns_buffer_write_u16(buffer, qinfo->qclass);
return RETVAL_OK;
}
@@ -624,7 +624,7 @@ positive_answer(struct reply_info* rep, uint16_t qtype) {
int
reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
- uint16_t id, uint16_t flags, ldns_buffer* buffer, uint32_t timenow,
+ uint16_t id, uint16_t flags, sldns_buffer* buffer, time_t timenow,
struct regional* region, uint16_t udpsize, int dnssec)
{
uint16_t ancount=0, nscount=0, arcount=0;
@@ -632,17 +632,17 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
int r;
size_t rr_offset;
- ldns_buffer_clear(buffer);
- if(udpsize < ldns_buffer_limit(buffer))
- ldns_buffer_set_limit(buffer, udpsize);
- if(ldns_buffer_remaining(buffer) < LDNS_HEADER_SIZE)
+ sldns_buffer_clear(buffer);
+ if(udpsize < sldns_buffer_limit(buffer))
+ sldns_buffer_set_limit(buffer, udpsize);
+ if(sldns_buffer_remaining(buffer) < LDNS_HEADER_SIZE)
return 0;
- ldns_buffer_write(buffer, &id, sizeof(uint16_t));
- ldns_buffer_write_u16(buffer, flags);
- ldns_buffer_write_u16(buffer, rep->qdcount);
+ sldns_buffer_write(buffer, &id, sizeof(uint16_t));
+ sldns_buffer_write_u16(buffer, flags);
+ sldns_buffer_write_u16(buffer, rep->qdcount);
/* set an, ns, ar counts to zero in case of small packets */
- ldns_buffer_write(buffer, "\000\000\000\000\000\000", 6);
+ sldns_buffer_write(buffer, "\000\000\000\000\000\000", 6);
/* insert query section */
if(rep->qdcount) {
@@ -650,16 +650,17 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
RETVAL_OK) {
if(r == RETVAL_TRUNC) {
/* create truncated message */
- ldns_buffer_write_u16_at(buffer, 4, 0);
- LDNS_TC_SET(ldns_buffer_begin(buffer));
- ldns_buffer_flip(buffer);
+ sldns_buffer_write_u16_at(buffer, 4, 0);
+ LDNS_TC_SET(sldns_buffer_begin(buffer));
+ sldns_buffer_flip(buffer);
return 1;
}
return 0;
}
}
- /* roundrobin offset. using query id for random number */
- rr_offset = RRSET_ROUNDROBIN?id:0;
+ /* roundrobin offset. using query id for random number. With ntohs
+ * for different roundrobins for sequential id client senders. */
+ rr_offset = RRSET_ROUNDROBIN?ntohs(id):0;
/* insert answer section */
if((r=insert_section(rep, rep->an_numrrsets, &ancount, buffer,
@@ -667,14 +668,14 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
dnssec, rr_offset)) != RETVAL_OK) {
if(r == RETVAL_TRUNC) {
/* create truncated message */
- ldns_buffer_write_u16_at(buffer, 6, ancount);
- LDNS_TC_SET(ldns_buffer_begin(buffer));
- ldns_buffer_flip(buffer);
+ sldns_buffer_write_u16_at(buffer, 6, ancount);
+ LDNS_TC_SET(sldns_buffer_begin(buffer));
+ sldns_buffer_flip(buffer);
return 1;
}
return 0;
}
- ldns_buffer_write_u16_at(buffer, 6, ancount);
+ sldns_buffer_write_u16_at(buffer, 6, ancount);
/* if response is positive answer, auth/add sections are not required */
if( ! (MINIMAL_RESPONSES && positive_answer(rep, qinfo->qtype)) ) {
@@ -685,14 +686,14 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
dnssec, rr_offset)) != RETVAL_OK) {
if(r == RETVAL_TRUNC) {
/* create truncated message */
- ldns_buffer_write_u16_at(buffer, 8, nscount);
- LDNS_TC_SET(ldns_buffer_begin(buffer));
- ldns_buffer_flip(buffer);
+ sldns_buffer_write_u16_at(buffer, 8, nscount);
+ LDNS_TC_SET(sldns_buffer_begin(buffer));
+ sldns_buffer_flip(buffer);
return 1;
}
return 0;
}
- ldns_buffer_write_u16_at(buffer, 8, nscount);
+ sldns_buffer_write_u16_at(buffer, 8, nscount);
/* insert add section */
if((r=insert_section(rep, rep->ar_numrrsets, &arcount, buffer,
@@ -701,18 +702,15 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
dnssec, rr_offset)) != RETVAL_OK) {
if(r == RETVAL_TRUNC) {
/* no need to set TC bit, this is the additional */
- ldns_buffer_write_u16_at(buffer, 10, arcount);
- ldns_buffer_flip(buffer);
+ sldns_buffer_write_u16_at(buffer, 10, arcount);
+ sldns_buffer_flip(buffer);
return 1;
}
return 0;
}
- ldns_buffer_write_u16_at(buffer, 10, arcount);
- } else {
- ldns_buffer_write_u16_at(buffer, 8, nscount);
- ldns_buffer_write_u16_at(buffer, 10, arcount);
+ sldns_buffer_write_u16_at(buffer, 10, arcount);
}
- ldns_buffer_flip(buffer);
+ sldns_buffer_flip(buffer);
return 1;
}
@@ -726,31 +724,31 @@ calc_edns_field_size(struct edns_data* edns)
}
void
-attach_edns_record(ldns_buffer* pkt, struct edns_data* edns)
+attach_edns_record(sldns_buffer* pkt, struct edns_data* edns)
{
size_t len;
if(!edns || !edns->edns_present)
return;
/* inc additional count */
- ldns_buffer_write_u16_at(pkt, 10,
- ldns_buffer_read_u16_at(pkt, 10) + 1);
- len = ldns_buffer_limit(pkt);
- ldns_buffer_clear(pkt);
- ldns_buffer_set_position(pkt, len);
+ sldns_buffer_write_u16_at(pkt, 10,
+ sldns_buffer_read_u16_at(pkt, 10) + 1);
+ len = sldns_buffer_limit(pkt);
+ sldns_buffer_clear(pkt);
+ sldns_buffer_set_position(pkt, len);
/* write EDNS record */
- ldns_buffer_write_u8(pkt, 0); /* '.' label */
- ldns_buffer_write_u16(pkt, LDNS_RR_TYPE_OPT); /* type */
- ldns_buffer_write_u16(pkt, edns->udp_size); /* class */
- ldns_buffer_write_u8(pkt, edns->ext_rcode); /* ttl */
- ldns_buffer_write_u8(pkt, edns->edns_version);
- ldns_buffer_write_u16(pkt, edns->bits);
- ldns_buffer_write_u16(pkt, 0); /* rdatalen */
- ldns_buffer_flip(pkt);
+ sldns_buffer_write_u8(pkt, 0); /* '.' label */
+ sldns_buffer_write_u16(pkt, LDNS_RR_TYPE_OPT); /* type */
+ sldns_buffer_write_u16(pkt, edns->udp_size); /* class */
+ sldns_buffer_write_u8(pkt, edns->ext_rcode); /* ttl */
+ sldns_buffer_write_u8(pkt, edns->edns_version);
+ sldns_buffer_write_u16(pkt, edns->bits);
+ sldns_buffer_write_u16(pkt, 0); /* rdatalen */
+ sldns_buffer_flip(pkt);
}
int
reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep,
- uint16_t id, uint16_t qflags, ldns_buffer* pkt, uint32_t timenow,
+ uint16_t id, uint16_t qflags, sldns_buffer* pkt, time_t timenow,
int cached, struct regional* region, uint16_t udpsize,
struct edns_data* edns, int dnssec, int secure)
{
@@ -788,54 +786,54 @@ reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep,
}
void
-qinfo_query_encode(ldns_buffer* pkt, struct query_info* qinfo)
+qinfo_query_encode(sldns_buffer* pkt, struct query_info* qinfo)
{
uint16_t flags = 0; /* QUERY, NOERROR */
- ldns_buffer_clear(pkt);
- log_assert(ldns_buffer_remaining(pkt) >= 12+255+4/*max query*/);
- ldns_buffer_skip(pkt, 2); /* id done later */
- ldns_buffer_write_u16(pkt, flags);
- ldns_buffer_write_u16(pkt, 1); /* query count */
- ldns_buffer_write(pkt, "\000\000\000\000\000\000", 6); /* counts */
- ldns_buffer_write(pkt, qinfo->qname, qinfo->qname_len);
- ldns_buffer_write_u16(pkt, qinfo->qtype);
- ldns_buffer_write_u16(pkt, qinfo->qclass);
- ldns_buffer_flip(pkt);
+ sldns_buffer_clear(pkt);
+ log_assert(sldns_buffer_remaining(pkt) >= 12+255+4/*max query*/);
+ sldns_buffer_skip(pkt, 2); /* id done later */
+ sldns_buffer_write_u16(pkt, flags);
+ sldns_buffer_write_u16(pkt, 1); /* query count */
+ sldns_buffer_write(pkt, "\000\000\000\000\000\000", 6); /* counts */
+ sldns_buffer_write(pkt, qinfo->qname, qinfo->qname_len);
+ sldns_buffer_write_u16(pkt, qinfo->qtype);
+ sldns_buffer_write_u16(pkt, qinfo->qclass);
+ sldns_buffer_flip(pkt);
}
void
-error_encode(ldns_buffer* buf, int r, struct query_info* qinfo,
+error_encode(sldns_buffer* buf, int r, struct query_info* qinfo,
uint16_t qid, uint16_t qflags, struct edns_data* edns)
{
uint16_t flags;
- ldns_buffer_clear(buf);
- ldns_buffer_write(buf, &qid, sizeof(uint16_t));
+ sldns_buffer_clear(buf);
+ sldns_buffer_write(buf, &qid, sizeof(uint16_t));
flags = (uint16_t)(BIT_QR | BIT_RA | r); /* QR and retcode*/
flags |= (qflags & (BIT_RD|BIT_CD)); /* copy RD and CD bit */
- ldns_buffer_write_u16(buf, flags);
+ sldns_buffer_write_u16(buf, flags);
if(qinfo) flags = 1;
else flags = 0;
- ldns_buffer_write_u16(buf, flags);
+ sldns_buffer_write_u16(buf, flags);
flags = 0;
- ldns_buffer_write(buf, &flags, sizeof(uint16_t));
- ldns_buffer_write(buf, &flags, sizeof(uint16_t));
- ldns_buffer_write(buf, &flags, sizeof(uint16_t));
+ sldns_buffer_write(buf, &flags, sizeof(uint16_t));
+ sldns_buffer_write(buf, &flags, sizeof(uint16_t));
+ sldns_buffer_write(buf, &flags, sizeof(uint16_t));
if(qinfo) {
- if(ldns_buffer_current(buf) == qinfo->qname)
- ldns_buffer_skip(buf, (ssize_t)qinfo->qname_len);
- else ldns_buffer_write(buf, qinfo->qname, qinfo->qname_len);
- ldns_buffer_write_u16(buf, qinfo->qtype);
- ldns_buffer_write_u16(buf, qinfo->qclass);
+ if(sldns_buffer_current(buf) == qinfo->qname)
+ sldns_buffer_skip(buf, (ssize_t)qinfo->qname_len);
+ else sldns_buffer_write(buf, qinfo->qname, qinfo->qname_len);
+ sldns_buffer_write_u16(buf, qinfo->qtype);
+ sldns_buffer_write_u16(buf, qinfo->qclass);
}
- ldns_buffer_flip(buf);
+ sldns_buffer_flip(buf);
if(edns) {
struct edns_data es = *edns;
es.edns_version = EDNS_ADVERTISED_VERSION;
es.udp_size = EDNS_ADVERTISED_SIZE;
es.ext_rcode = 0;
es.bits &= EDNS_DO;
- if(ldns_buffer_limit(buf) + calc_edns_field_size(&es) >
+ if(sldns_buffer_limit(buf) + calc_edns_field_size(&es) >
edns->udp_size)
return;
attach_edns_record(buf, &es);
diff --git a/contrib/unbound/util/data/msgencode.h b/contrib/unbound/util/data/msgencode.h
index 74d6c1f..eea129d 100644
--- a/contrib/unbound/util/data/msgencode.h
+++ b/contrib/unbound/util/data/msgencode.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -42,6 +42,7 @@
#ifndef UTIL_DATA_MSGENCODE_H
#define UTIL_DATA_MSGENCODE_H
+struct sldns_buffer;
struct query_info;
struct reply_info;
struct regional;
@@ -66,7 +67,7 @@ struct edns_data;
* @return: 0 on error (server failure).
*/
int reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep,
- uint16_t id, uint16_t qflags, ldns_buffer* dest, uint32_t timenow,
+ uint16_t id, uint16_t qflags, struct sldns_buffer* dest, time_t timenow,
int cached, struct regional* region, uint16_t udpsize,
struct edns_data* edns, int dnssec, int secure);
@@ -88,7 +89,7 @@ int reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep,
* 0 on error: malloc failure (no log_err has been done).
*/
int reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
- uint16_t id, uint16_t flags, ldns_buffer* buffer, uint32_t timenow,
+ uint16_t id, uint16_t flags, struct sldns_buffer* buffer, time_t timenow,
struct regional* region, uint16_t udpsize, int dnssec);
/**
@@ -96,7 +97,7 @@ int reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
* @param pkt: where to store the packet.
* @param qinfo: query info.
*/
-void qinfo_query_encode(ldns_buffer* pkt, struct query_info* qinfo);
+void qinfo_query_encode(struct sldns_buffer* pkt, struct query_info* qinfo);
/**
* Estimate size of EDNS record in packet. EDNS record will be no larger.
@@ -111,7 +112,7 @@ uint16_t calc_edns_field_size(struct edns_data* edns);
* @param pkt: packet added to.
* @param edns: if NULL or present=0, nothing is added to the packet.
*/
-void attach_edns_record(ldns_buffer* pkt, struct edns_data* edns);
+void attach_edns_record(struct sldns_buffer* pkt, struct edns_data* edns);
/**
* Encode an error. With QR and RA set.
@@ -124,7 +125,7 @@ void attach_edns_record(ldns_buffer* pkt, struct edns_data* edns);
* @param edns: if not NULL, this is the query edns info,
* and an edns reply is attached. Only attached if EDNS record fits reply.
*/
-void error_encode(ldns_buffer* pkt, int r, struct query_info* qinfo,
+void error_encode(struct sldns_buffer* pkt, int r, struct query_info* qinfo,
uint16_t qid, uint16_t qflags, struct edns_data* edns);
#endif /* UTIL_DATA_MSGENCODE_H */
diff --git a/contrib/unbound/util/data/msgparse.c b/contrib/unbound/util/data/msgparse.c
index 2791ae5..abe778a 100644
--- a/contrib/unbound/util/data/msgparse.c
+++ b/contrib/unbound/util/data/msgparse.c
@@ -21,37 +21,40 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* \file
* Routines for message parsing a packet buffer to a descriptive structure.
*/
#include "config.h"
-#include <ldns/ldns.h>
#include "util/data/msgparse.h"
#include "util/data/dname.h"
#include "util/data/packed_rrset.h"
#include "util/storage/lookup3.h"
#include "util/regional.h"
+#include "ldns/rrdef.h"
+#include "ldns/sbuffer.h"
+#include "ldns/parseutil.h"
+#include "ldns/wire2str.h"
/** smart comparison of (compressed, valid) dnames from packet */
static int
-smart_compare(ldns_buffer* pkt, uint8_t* dnow,
+smart_compare(sldns_buffer* pkt, uint8_t* dnow,
uint8_t* dprfirst, uint8_t* dprlast)
{
if(LABEL_IS_PTR(*dnow)) {
/* ptr points to a previous dname */
- uint8_t* p = ldns_buffer_at(pkt, PTR_OFFSET(dnow[0], dnow[1]));
+ uint8_t* p = sldns_buffer_at(pkt, PTR_OFFSET(dnow[0], dnow[1]));
if( p == dprfirst || p == dprlast )
return 0;
/* prev dname is also a ptr, both ptrs are the same. */
@@ -68,7 +71,7 @@ smart_compare(ldns_buffer* pkt, uint8_t* dnow,
static struct rrset_parse*
new_rrset(struct msg_parse* msg, uint8_t* dname, size_t dnamelen,
uint16_t type, uint16_t dclass, hashvalue_t hash,
- uint32_t rrset_flags, ldns_pkt_section section,
+ uint32_t rrset_flags, sldns_pkt_section section,
struct regional* region)
{
struct rrset_parse* p = regional_alloc(region, sizeof(*p));
@@ -99,52 +102,52 @@ new_rrset(struct msg_parse* msg, uint8_t* dname, size_t dnamelen,
/** See if next rrset is nsec at zone apex */
static int
-nsec_at_apex(ldns_buffer* pkt)
+nsec_at_apex(sldns_buffer* pkt)
{
/* we are at ttl position in packet. */
- size_t pos = ldns_buffer_position(pkt);
+ size_t pos = sldns_buffer_position(pkt);
uint16_t rdatalen;
- if(ldns_buffer_remaining(pkt) < 7) /* ttl+len+root */
+ if(sldns_buffer_remaining(pkt) < 7) /* ttl+len+root */
return 0; /* eek! */
- ldns_buffer_skip(pkt, 4); /* ttl */;
- rdatalen = ldns_buffer_read_u16(pkt);
- if(ldns_buffer_remaining(pkt) < rdatalen) {
- ldns_buffer_set_position(pkt, pos);
+ sldns_buffer_skip(pkt, 4); /* ttl */;
+ rdatalen = sldns_buffer_read_u16(pkt);
+ if(sldns_buffer_remaining(pkt) < rdatalen) {
+ sldns_buffer_set_position(pkt, pos);
return 0; /* parse error happens later */
}
/* must validate the nsec next domain name format */
if(pkt_dname_len(pkt) == 0) {
- ldns_buffer_set_position(pkt, pos);
+ sldns_buffer_set_position(pkt, pos);
return 0; /* parse error */
}
/* see if SOA bit is set. */
- if(ldns_buffer_position(pkt) < pos+4+rdatalen) {
+ if(sldns_buffer_position(pkt) < pos+4+rdatalen) {
/* nsec type bitmap contains items */
uint8_t win, blen, bits;
/* need: windownum, bitmap len, firstbyte */
- if(ldns_buffer_position(pkt)+3 > pos+4+rdatalen) {
- ldns_buffer_set_position(pkt, pos);
+ if(sldns_buffer_position(pkt)+3 > pos+4+rdatalen) {
+ sldns_buffer_set_position(pkt, pos);
return 0; /* malformed nsec */
}
- win = ldns_buffer_read_u8(pkt);
- blen = ldns_buffer_read_u8(pkt);
- bits = ldns_buffer_read_u8(pkt);
+ win = sldns_buffer_read_u8(pkt);
+ blen = sldns_buffer_read_u8(pkt);
+ bits = sldns_buffer_read_u8(pkt);
/* 0window always first window. bitlen >=1 or parse
error really. bit 0x2 is SOA. */
if(win == 0 && blen >= 1 && (bits & 0x02)) {
- ldns_buffer_set_position(pkt, pos);
+ sldns_buffer_set_position(pkt, pos);
return 1;
}
}
- ldns_buffer_set_position(pkt, pos);
+ sldns_buffer_set_position(pkt, pos);
return 0;
}
/** Calculate rrset flags */
static uint32_t
-pkt_rrset_flags(ldns_buffer* pkt, uint16_t type, ldns_pkt_section sec)
+pkt_rrset_flags(sldns_buffer* pkt, uint16_t type, sldns_pkt_section sec)
{
uint32_t f = 0;
if(type == LDNS_RR_TYPE_NSEC && nsec_at_apex(pkt)) {
@@ -156,7 +159,7 @@ pkt_rrset_flags(ldns_buffer* pkt, uint16_t type, ldns_pkt_section sec)
}
hashvalue_t
-pkt_hash_rrset(ldns_buffer* pkt, uint8_t* dname, uint16_t type,
+pkt_hash_rrset(sldns_buffer* pkt, uint8_t* dname, uint16_t type,
uint16_t dclass, uint32_t rrset_flags)
{
/* note this MUST be identical to rrset_key_hash in packed_rrset.c */
@@ -171,7 +174,7 @@ pkt_hash_rrset(ldns_buffer* pkt, uint8_t* dname, uint16_t type,
/** create partial dname hash for rrset hash */
static hashvalue_t
-pkt_hash_rrset_first(ldns_buffer* pkt, uint8_t* dname)
+pkt_hash_rrset_first(sldns_buffer* pkt, uint8_t* dname)
{
/* works together with pkt_hash_rrset_rest */
/* note this MUST be identical to rrset_key_hash in packed_rrset.c */
@@ -197,7 +200,7 @@ pkt_hash_rrset_rest(hashvalue_t dname_h, uint16_t type, uint16_t dclass,
/** compare rrset_parse with data */
static int
-rrset_parse_equals(struct rrset_parse* p, ldns_buffer* pkt, hashvalue_t h,
+rrset_parse_equals(struct rrset_parse* p, sldns_buffer* pkt, hashvalue_t h,
uint32_t rrset_flags, uint8_t* dname, size_t dnamelen,
uint16_t type, uint16_t dclass)
{
@@ -210,7 +213,7 @@ rrset_parse_equals(struct rrset_parse* p, ldns_buffer* pkt, hashvalue_t h,
struct rrset_parse*
-msgparse_hashtable_lookup(struct msg_parse* msg, ldns_buffer* pkt,
+msgparse_hashtable_lookup(struct msg_parse* msg, sldns_buffer* pkt,
hashvalue_t h, uint32_t rrset_flags, uint8_t* dname, size_t dnamelen,
uint16_t type, uint16_t dclass)
{
@@ -226,26 +229,26 @@ msgparse_hashtable_lookup(struct msg_parse* msg, ldns_buffer* pkt,
/** return type networkformat that rrsig in packet covers */
static int
-pkt_rrsig_covered(ldns_buffer* pkt, uint8_t* here, uint16_t* type)
+pkt_rrsig_covered(sldns_buffer* pkt, uint8_t* here, uint16_t* type)
{
- size_t pos = ldns_buffer_position(pkt);
- ldns_buffer_set_position(pkt, (size_t)(here-ldns_buffer_begin(pkt)));
+ size_t pos = sldns_buffer_position(pkt);
+ sldns_buffer_set_position(pkt, (size_t)(here-sldns_buffer_begin(pkt)));
/* ttl + len + size of small rrsig(rootlabel, no signature) */
- if(ldns_buffer_remaining(pkt) < 4+2+19)
+ if(sldns_buffer_remaining(pkt) < 4+2+19)
return 0;
- ldns_buffer_skip(pkt, 4); /* ttl */
- if(ldns_buffer_read_u16(pkt) < 19) /* too short */ {
- ldns_buffer_set_position(pkt, pos);
+ sldns_buffer_skip(pkt, 4); /* ttl */
+ if(sldns_buffer_read_u16(pkt) < 19) /* too short */ {
+ sldns_buffer_set_position(pkt, pos);
return 0;
}
- *type = ldns_buffer_read_u16(pkt);
- ldns_buffer_set_position(pkt, pos);
+ *type = sldns_buffer_read_u16(pkt);
+ sldns_buffer_set_position(pkt, pos);
return 1;
}
/** true if covered type equals prevtype */
static int
-pkt_rrsig_covered_equals(ldns_buffer* pkt, uint8_t* here, uint16_t type)
+pkt_rrsig_covered_equals(sldns_buffer* pkt, uint8_t* here, uint16_t type)
{
uint16_t t;
if(pkt_rrsig_covered(pkt, here, &t) && t == type)
@@ -270,7 +273,7 @@ msgparse_bucket_remove(struct msg_parse* msg, struct rrset_parse* rrset)
/** change section of rrset from previous to current section */
static void
change_section(struct msg_parse* msg, struct rrset_parse* rrset,
- ldns_pkt_section section)
+ sldns_pkt_section section)
{
struct rrset_parse *p, *prev;
/* remove from list */
@@ -313,7 +316,7 @@ change_section(struct msg_parse* msg, struct rrset_parse* rrset,
/** see if rrset of type RRSIG contains sig over given type */
static int
-rrset_has_sigover(ldns_buffer* pkt, struct rrset_parse* rrset, uint16_t type,
+rrset_has_sigover(sldns_buffer* pkt, struct rrset_parse* rrset, uint16_t type,
int* hasother)
{
int res = 0;
@@ -330,7 +333,7 @@ rrset_has_sigover(ldns_buffer* pkt, struct rrset_parse* rrset, uint16_t type,
/** move rrsigs from sigset to dataset */
static int
-moveover_rrsigs(ldns_buffer* pkt, struct regional* region,
+moveover_rrsigs(sldns_buffer* pkt, struct regional* region,
struct rrset_parse* sigset, struct rrset_parse* dataset, int duplicate)
{
struct rr_parse* sig = sigset->rr_first;
@@ -380,8 +383,8 @@ moveover_rrsigs(ldns_buffer* pkt, struct regional* region,
/** change an rrsig rrset for use as data rrset */
static struct rrset_parse*
change_rrsig_rrset(struct rrset_parse* sigset, struct msg_parse* msg,
- ldns_buffer* pkt, uint16_t datatype, uint32_t rrset_flags,
- int hasother, ldns_pkt_section section, struct regional* region)
+ sldns_buffer* pkt, uint16_t datatype, uint32_t rrset_flags,
+ int hasother, sldns_pkt_section section, struct regional* region)
{
struct rrset_parse* dataset = sigset;
hashvalue_t hash = pkt_hash_rrset(pkt, sigset->dname, datatype,
@@ -450,13 +453,13 @@ change_rrsig_rrset(struct rrset_parse* sigset, struct msg_parse* msg,
* @return 0 on out of memory.
*/
static int
-find_rrset(struct msg_parse* msg, ldns_buffer* pkt, uint8_t* dname,
+find_rrset(struct msg_parse* msg, sldns_buffer* pkt, uint8_t* dname,
size_t dnamelen, uint16_t type, uint16_t dclass, hashvalue_t* hash,
uint32_t* rrset_flags,
uint8_t** prev_dname_first, uint8_t** prev_dname_last,
size_t* prev_dnamelen, uint16_t* prev_type,
uint16_t* prev_dclass, struct rrset_parse** rrset_prev,
- ldns_pkt_section section, struct regional* region)
+ sldns_pkt_section section, struct regional* region)
{
hashvalue_t dname_h = pkt_hash_rrset_first(pkt, dname);
uint16_t covtype;
@@ -473,7 +476,7 @@ find_rrset(struct msg_parse* msg, ldns_buffer* pkt, uint8_t* dname,
}
/* check if rrsig over previous item */
if(type == LDNS_RR_TYPE_RRSIG && dclass == *prev_dclass &&
- pkt_rrsig_covered_equals(pkt, ldns_buffer_current(pkt),
+ pkt_rrsig_covered_equals(pkt, sldns_buffer_current(pkt),
*prev_type) &&
smart_compare(pkt, dname, *prev_dname_first,
*prev_dname_last) == 0) {
@@ -487,7 +490,7 @@ find_rrset(struct msg_parse* msg, ldns_buffer* pkt, uint8_t* dname,
/* if rrsig - try to lookup matching data set first */
if(type == LDNS_RR_TYPE_RRSIG && pkt_rrsig_covered(pkt,
- ldns_buffer_current(pkt), &covtype)) {
+ sldns_buffer_current(pkt), &covtype)) {
*hash = pkt_hash_rrset_rest(dname_h, covtype, dclass,
*rrset_flags);
*rrset_prev = msgparse_hashtable_lookup(msg, pkt, *hash,
@@ -568,27 +571,27 @@ find_rrset(struct msg_parse* msg, ldns_buffer* pkt, uint8_t* dname,
* @return: 0 if OK, or rcode on error.
*/
static int
-parse_query_section(ldns_buffer* pkt, struct msg_parse* msg)
+parse_query_section(sldns_buffer* pkt, struct msg_parse* msg)
{
if(msg->qdcount == 0)
return 0;
if(msg->qdcount > 1)
return LDNS_RCODE_FORMERR;
log_assert(msg->qdcount == 1);
- if(ldns_buffer_remaining(pkt) <= 0)
+ if(sldns_buffer_remaining(pkt) <= 0)
return LDNS_RCODE_FORMERR;
- msg->qname = ldns_buffer_current(pkt);
+ msg->qname = sldns_buffer_current(pkt);
if((msg->qname_len = pkt_dname_len(pkt)) == 0)
return LDNS_RCODE_FORMERR;
- if(ldns_buffer_remaining(pkt) < sizeof(uint16_t)*2)
+ if(sldns_buffer_remaining(pkt) < sizeof(uint16_t)*2)
return LDNS_RCODE_FORMERR;
- msg->qtype = ldns_buffer_read_u16(pkt);
- msg->qclass = ldns_buffer_read_u16(pkt);
+ msg->qtype = sldns_buffer_read_u16(pkt);
+ msg->qclass = sldns_buffer_read_u16(pkt);
return 0;
}
size_t
-get_rdf_size(ldns_rdf_type rdf)
+get_rdf_size(sldns_rdf_type rdf)
{
switch(rdf) {
case LDNS_RDF_TYPE_CLASS:
@@ -614,7 +617,7 @@ get_rdf_size(ldns_rdf_type rdf)
return 16;
break;
default:
- log_assert(false); /* add type above */
+ log_assert(0); /* add type above */
/* only types that appear before a domain *
* name are needed. rest is simply copied. */
}
@@ -623,16 +626,16 @@ get_rdf_size(ldns_rdf_type rdf)
/** calculate the size of one rr */
static int
-calc_size(ldns_buffer* pkt, uint16_t type, struct rr_parse* rr)
+calc_size(sldns_buffer* pkt, uint16_t type, struct rr_parse* rr)
{
- const ldns_rr_descriptor* desc;
+ const sldns_rr_descriptor* desc;
uint16_t pkt_len; /* length of rr inside the packet */
rr->size = sizeof(uint16_t); /* the rdatalen */
- ldns_buffer_skip(pkt, 4); /* skip ttl */
- pkt_len = ldns_buffer_read_u16(pkt);
- if(ldns_buffer_remaining(pkt) < pkt_len)
+ sldns_buffer_skip(pkt, 4); /* skip ttl */
+ pkt_len = sldns_buffer_read_u16(pkt);
+ if(sldns_buffer_remaining(pkt) < pkt_len)
return 0;
- desc = ldns_rr_descript(type);
+ desc = sldns_rr_descript(type);
if(pkt_len > 0 && desc && desc->_dname_count > 0) {
int count = (int)desc->_dname_count;
int rdf = 0;
@@ -643,12 +646,12 @@ calc_size(ldns_buffer* pkt, uint16_t type, struct rr_parse* rr)
switch(desc->_wireformat[rdf]) {
case LDNS_RDF_TYPE_DNAME:
/* decompress every domain name */
- oldpos = ldns_buffer_position(pkt);
+ oldpos = sldns_buffer_position(pkt);
if((len = pkt_dname_len(pkt)) == 0)
return 0; /* malformed dname */
- if(ldns_buffer_position(pkt)-oldpos > pkt_len)
+ if(sldns_buffer_position(pkt)-oldpos > pkt_len)
return 0; /* dname exceeds rdata */
- pkt_len -= ldns_buffer_position(pkt)-oldpos;
+ pkt_len -= sldns_buffer_position(pkt)-oldpos;
rr->size += len;
count--;
len = 0;
@@ -658,7 +661,7 @@ calc_size(ldns_buffer* pkt, uint16_t type, struct rr_parse* rr)
/* NOTREACHED, due to 'while(>0)' */
return 0; /* len byte exceeds rdata */
}
- len = ldns_buffer_current(pkt)[0] + 1;
+ len = sldns_buffer_current(pkt)[0] + 1;
break;
default:
len = get_rdf_size(desc->_wireformat[rdf]);
@@ -667,7 +670,7 @@ calc_size(ldns_buffer* pkt, uint16_t type, struct rr_parse* rr)
if(pkt_len < len)
return 0; /* exceeds rdata */
pkt_len -= len;
- ldns_buffer_skip(pkt, (ssize_t)len);
+ sldns_buffer_skip(pkt, (ssize_t)len);
rr->size += len;
}
rdf++;
@@ -675,41 +678,41 @@ calc_size(ldns_buffer* pkt, uint16_t type, struct rr_parse* rr)
}
/* remaining rdata */
rr->size += pkt_len;
- ldns_buffer_skip(pkt, (ssize_t)pkt_len);
+ sldns_buffer_skip(pkt, (ssize_t)pkt_len);
return 1;
}
/** skip rr ttl and rdata */
static int
-skip_ttl_rdata(ldns_buffer* pkt)
+skip_ttl_rdata(sldns_buffer* pkt)
{
uint16_t rdatalen;
- if(ldns_buffer_remaining(pkt) < 6) /* ttl + rdatalen */
+ if(sldns_buffer_remaining(pkt) < 6) /* ttl + rdatalen */
return 0;
- ldns_buffer_skip(pkt, 4); /* ttl */
- rdatalen = ldns_buffer_read_u16(pkt);
- if(ldns_buffer_remaining(pkt) < rdatalen)
+ sldns_buffer_skip(pkt, 4); /* ttl */
+ rdatalen = sldns_buffer_read_u16(pkt);
+ if(sldns_buffer_remaining(pkt) < rdatalen)
return 0;
- ldns_buffer_skip(pkt, (ssize_t)rdatalen);
+ sldns_buffer_skip(pkt, (ssize_t)rdatalen);
return 1;
}
/** see if RRSIG is a duplicate of another */
static int
-sig_is_double(ldns_buffer* pkt, struct rrset_parse* rrset, uint8_t* ttldata)
+sig_is_double(sldns_buffer* pkt, struct rrset_parse* rrset, uint8_t* ttldata)
{
uint16_t rlen, siglen;
- size_t pos = ldns_buffer_position(pkt);
+ size_t pos = sldns_buffer_position(pkt);
struct rr_parse* sig;
- if(ldns_buffer_remaining(pkt) < 6)
+ if(sldns_buffer_remaining(pkt) < 6)
return 0;
- ldns_buffer_skip(pkt, 4); /* ttl */
- rlen = ldns_buffer_read_u16(pkt);
- if(ldns_buffer_remaining(pkt) < rlen) {
- ldns_buffer_set_position(pkt, pos);
+ sldns_buffer_skip(pkt, 4); /* ttl */
+ rlen = sldns_buffer_read_u16(pkt);
+ if(sldns_buffer_remaining(pkt) < rlen) {
+ sldns_buffer_set_position(pkt, pos);
return 0;
}
- ldns_buffer_set_position(pkt, pos);
+ sldns_buffer_set_position(pkt, pos);
sig = rrset->rrsig_first;
while(sig) {
@@ -738,9 +741,9 @@ sig_is_double(ldns_buffer* pkt, struct rrset_parse* rrset, uint8_t* ttldata)
/** Add rr (from packet here) to rrset, skips rr */
static int
-add_rr_to_rrset(struct rrset_parse* rrset, ldns_buffer* pkt,
+add_rr_to_rrset(struct rrset_parse* rrset, sldns_buffer* pkt,
struct msg_parse* msg, struct regional* region,
- ldns_pkt_section section, uint16_t type)
+ sldns_pkt_section section, uint16_t type)
{
struct rr_parse* rr;
/* check section of rrset. */
@@ -764,7 +767,7 @@ add_rr_to_rrset(struct rrset_parse* rrset, ldns_buffer* pkt,
if( (msg->qtype == LDNS_RR_TYPE_RRSIG ||
msg->qtype == LDNS_RR_TYPE_ANY)
- && sig_is_double(pkt, rrset, ldns_buffer_current(pkt))) {
+ && sig_is_double(pkt, rrset, sldns_buffer_current(pkt))) {
if(!skip_ttl_rdata(pkt))
return LDNS_RCODE_FORMERR;
return 0;
@@ -774,7 +777,7 @@ add_rr_to_rrset(struct rrset_parse* rrset, ldns_buffer* pkt,
if(!(rr = (struct rr_parse*)regional_alloc(region, sizeof(*rr))))
return LDNS_RCODE_SERVFAIL;
rr->outside_packet = 0;
- rr->ttl_data = ldns_buffer_current(pkt);
+ rr->ttl_data = sldns_buffer_current(pkt);
rr->next = 0;
if(type == LDNS_RR_TYPE_RRSIG && rrset->type != LDNS_RR_TYPE_RRSIG) {
if(rrset->rrsig_last)
@@ -810,8 +813,8 @@ add_rr_to_rrset(struct rrset_parse* rrset, ldns_buffer* pkt,
* @return: 0 if OK, or rcode on error.
*/
static int
-parse_section(ldns_buffer* pkt, struct msg_parse* msg,
- struct regional* region, ldns_pkt_section section,
+parse_section(sldns_buffer* pkt, struct msg_parse* msg,
+ struct regional* region, sldns_pkt_section section,
uint16_t num_rrs, size_t* num_rrsets)
{
uint16_t i;
@@ -826,39 +829,39 @@ parse_section(ldns_buffer* pkt, struct msg_parse* msg,
if(num_rrs == 0)
return 0;
- if(ldns_buffer_remaining(pkt) <= 0)
+ if(sldns_buffer_remaining(pkt) <= 0)
return LDNS_RCODE_FORMERR;
for(i=0; i<num_rrs; i++) {
/* parse this RR. */
- dname = ldns_buffer_current(pkt);
+ dname = sldns_buffer_current(pkt);
if((dnamelen = pkt_dname_len(pkt)) == 0)
return LDNS_RCODE_FORMERR;
- if(ldns_buffer_remaining(pkt) < 10) /* type, class, ttl, len */
+ if(sldns_buffer_remaining(pkt) < 10) /* type, class, ttl, len */
return LDNS_RCODE_FORMERR;
- type = ldns_buffer_read_u16(pkt);
- ldns_buffer_read(pkt, &dclass, sizeof(dclass));
+ type = sldns_buffer_read_u16(pkt);
+ sldns_buffer_read(pkt, &dclass, sizeof(dclass));
if(0) { /* debug show what is being parsed. */
if(type == LDNS_RR_TYPE_RRSIG) {
uint16_t t;
if(pkt_rrsig_covered(pkt,
- ldns_buffer_current(pkt), &t))
+ sldns_buffer_current(pkt), &t))
fprintf(stderr, "parse of %s(%d) [%s(%d)]",
- ldns_rr_descript(type)?
- ldns_rr_descript(type)->_name: "??",
+ sldns_rr_descript(type)?
+ sldns_rr_descript(type)->_name: "??",
(int)type,
- ldns_rr_descript(t)?
- ldns_rr_descript(t)->_name: "??",
+ sldns_rr_descript(t)?
+ sldns_rr_descript(t)->_name: "??",
(int)t);
} else
fprintf(stderr, "parse of %s(%d)",
- ldns_rr_descript(type)?
- ldns_rr_descript(type)->_name: "??",
+ sldns_rr_descript(type)?
+ sldns_rr_descript(type)->_name: "??",
(int)type);
fprintf(stderr, " %s(%d) ",
- ldns_lookup_by_id(ldns_rr_classes,
- (int)ntohs(dclass))?ldns_lookup_by_id(
- ldns_rr_classes, (int)ntohs(dclass))->name:
+ sldns_lookup_by_id(sldns_rr_classes,
+ (int)ntohs(dclass))?sldns_lookup_by_id(
+ sldns_rr_classes, (int)ntohs(dclass))->name:
"??", (int)ntohs(dclass));
dname_print(stderr, pkt, dname);
fprintf(stderr, "\n");
@@ -882,8 +885,8 @@ parse_section(ldns_buffer* pkt, struct msg_parse* msg,
fprintf(stderr, "is part of existing: ");
dname_print(stderr, pkt, rrset->dname);
fprintf(stderr, " type %s(%d)\n",
- ldns_rr_descript(rrset->type)?
- ldns_rr_descript(rrset->type)->_name: "??",
+ sldns_rr_descript(rrset->type)?
+ sldns_rr_descript(rrset->type)->_name: "??",
(int)rrset->type);
}
/* add to rrset. */
@@ -895,18 +898,18 @@ parse_section(ldns_buffer* pkt, struct msg_parse* msg,
}
int
-parse_packet(ldns_buffer* pkt, struct msg_parse* msg, struct regional* region)
+parse_packet(sldns_buffer* pkt, struct msg_parse* msg, struct regional* region)
{
int ret;
- if(ldns_buffer_remaining(pkt) < LDNS_HEADER_SIZE)
+ if(sldns_buffer_remaining(pkt) < LDNS_HEADER_SIZE)
return LDNS_RCODE_FORMERR;
/* read the header */
- ldns_buffer_read(pkt, &msg->id, sizeof(uint16_t));
- msg->flags = ldns_buffer_read_u16(pkt);
- msg->qdcount = ldns_buffer_read_u16(pkt);
- msg->ancount = ldns_buffer_read_u16(pkt);
- msg->nscount = ldns_buffer_read_u16(pkt);
- msg->arcount = ldns_buffer_read_u16(pkt);
+ sldns_buffer_read(pkt, &msg->id, sizeof(uint16_t));
+ msg->flags = sldns_buffer_read_u16(pkt);
+ msg->qdcount = sldns_buffer_read_u16(pkt);
+ msg->ancount = sldns_buffer_read_u16(pkt);
+ msg->nscount = sldns_buffer_read_u16(pkt);
+ msg->arcount = sldns_buffer_read_u16(pkt);
if(msg->qdcount > 1)
return LDNS_RCODE_FORMERR;
if((ret = parse_query_section(pkt, msg)) != 0)
@@ -917,13 +920,13 @@ parse_packet(ldns_buffer* pkt, struct msg_parse* msg, struct regional* region)
if((ret = parse_section(pkt, msg, region, LDNS_SECTION_AUTHORITY,
msg->nscount, &msg->ns_rrsets)) != 0)
return ret;
- if(ldns_buffer_remaining(pkt) == 0 && msg->arcount == 1) {
+ if(sldns_buffer_remaining(pkt) == 0 && msg->arcount == 1) {
/* BIND accepts leniently that an EDNS record is missing.
* so, we do too. */
} else if((ret = parse_section(pkt, msg, region,
LDNS_SECTION_ADDITIONAL, msg->arcount, &msg->ar_rrsets)) != 0)
return ret;
- /* if(ldns_buffer_remaining(pkt) > 0) { */
+ /* if(sldns_buffer_remaining(pkt) > 0) { */
/* there is spurious data at end of packet. ignore */
/* } */
msg->rrset_count = msg->an_rrsets + msg->ns_rrsets + msg->ar_rrsets;
@@ -981,23 +984,23 @@ parse_extract_edns(struct msg_parse* msg, struct edns_data* edns)
edns->edns_present = 1;
edns->ext_rcode = found->rr_last->ttl_data[0];
edns->edns_version = found->rr_last->ttl_data[1];
- edns->bits = ldns_read_uint16(&found->rr_last->ttl_data[2]);
+ edns->bits = sldns_read_uint16(&found->rr_last->ttl_data[2]);
edns->udp_size = ntohs(found->rrset_class);
/* ignore rdata and rrsigs */
return 0;
}
int
-parse_edns_from_pkt(ldns_buffer* pkt, struct edns_data* edns)
+parse_edns_from_pkt(sldns_buffer* pkt, struct edns_data* edns)
{
- log_assert(LDNS_QDCOUNT(ldns_buffer_begin(pkt)) == 1);
- log_assert(LDNS_ANCOUNT(ldns_buffer_begin(pkt)) == 0);
- log_assert(LDNS_NSCOUNT(ldns_buffer_begin(pkt)) == 0);
+ log_assert(LDNS_QDCOUNT(sldns_buffer_begin(pkt)) == 1);
+ log_assert(LDNS_ANCOUNT(sldns_buffer_begin(pkt)) == 0);
+ log_assert(LDNS_NSCOUNT(sldns_buffer_begin(pkt)) == 0);
/* check edns section is present */
- if(LDNS_ARCOUNT(ldns_buffer_begin(pkt)) > 1) {
+ if(LDNS_ARCOUNT(sldns_buffer_begin(pkt)) > 1) {
return LDNS_RCODE_FORMERR;
}
- if(LDNS_ARCOUNT(ldns_buffer_begin(pkt)) == 0) {
+ if(LDNS_ARCOUNT(sldns_buffer_begin(pkt)) == 0) {
memset(edns, 0, sizeof(*edns));
edns->udp_size = 512;
return 0;
@@ -1005,15 +1008,15 @@ parse_edns_from_pkt(ldns_buffer* pkt, struct edns_data* edns)
/* domain name must be the root of length 1. */
if(pkt_dname_len(pkt) != 1)
return LDNS_RCODE_FORMERR;
- if(ldns_buffer_remaining(pkt) < 10) /* type, class, ttl, rdatalen */
+ if(sldns_buffer_remaining(pkt) < 10) /* type, class, ttl, rdatalen */
return LDNS_RCODE_FORMERR;
- if(ldns_buffer_read_u16(pkt) != LDNS_RR_TYPE_OPT)
+ if(sldns_buffer_read_u16(pkt) != LDNS_RR_TYPE_OPT)
return LDNS_RCODE_FORMERR;
edns->edns_present = 1;
- edns->udp_size = ldns_buffer_read_u16(pkt); /* class is udp size */
- edns->ext_rcode = ldns_buffer_read_u8(pkt); /* ttl used for bits */
- edns->edns_version = ldns_buffer_read_u8(pkt);
- edns->bits = ldns_buffer_read_u16(pkt);
+ edns->udp_size = sldns_buffer_read_u16(pkt); /* class is udp size */
+ edns->ext_rcode = sldns_buffer_read_u8(pkt); /* ttl used for bits */
+ edns->edns_version = sldns_buffer_read_u8(pkt);
+ edns->bits = sldns_buffer_read_u16(pkt);
/* ignore rdata and rrsigs */
return 0;
}
diff --git a/contrib/unbound/util/data/msgparse.h b/contrib/unbound/util/data/msgparse.h
index 830d68e..221a45a 100644
--- a/contrib/unbound/util/data/msgparse.h
+++ b/contrib/unbound/util/data/msgparse.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* \file
@@ -63,7 +63,9 @@
#ifndef UTIL_DATA_MSGPARSE_H
#define UTIL_DATA_MSGPARSE_H
#include "util/storage/lruhash.h"
-#include <ldns/packet.h>
+#include "ldns/pkthdr.h"
+#include "ldns/rrdef.h"
+struct sldns_buffer;
struct rrset_parse;
struct rr_parse;
struct regional;
@@ -71,9 +73,9 @@ struct regional;
/** number of buckets in parse rrset hash table. Must be power of 2. */
#define PARSE_TABLE_SIZE 32
/** Maximum TTL that is allowed. */
-extern uint32_t MAX_TTL;
+extern time_t MAX_TTL;
/** Minimum TTL that is allowed. */
-extern uint32_t MIN_TTL;
+extern time_t MIN_TTL;
/** Negative cache time (for entries without any RRs.) */
#define NORR_TTL 5 /* seconds */
@@ -137,7 +139,7 @@ struct rrset_parse {
/** which section was it found in: one of
* LDNS_SECTION_ANSWER, LDNS_SECTION_AUTHORITY, LDNS_SECTION_ADDITIONAL
*/
- ldns_pkt_section section;
+ sldns_pkt_section section;
/** start of (possibly compressed) dname in packet */
uint8_t* dname;
/** length of the dname uncompressed wireformat */
@@ -219,7 +221,7 @@ struct edns_data {
* @param rdf: the rdf type from the descriptor.
* @return: size in octets. 0 on failure.
*/
-size_t get_rdf_size(ldns_rdf_type rdf);
+size_t get_rdf_size(sldns_rdf_type rdf);
/**
* Parse the packet.
@@ -229,7 +231,7 @@ size_t get_rdf_size(ldns_rdf_type rdf);
* @param region: how to alloc results.
* @return: 0 if OK, or rcode on error.
*/
-int parse_packet(ldns_buffer* pkt, struct msg_parse* msg,
+int parse_packet(struct sldns_buffer* pkt, struct msg_parse* msg,
struct regional* region);
/**
@@ -259,7 +261,7 @@ int parse_extract_edns(struct msg_parse* msg, struct edns_data* edns);
* @return: 0 on success, or an RCODE on error.
* RCODE formerr if OPT is badly formatted and so on.
*/
-int parse_edns_from_pkt(ldns_buffer* pkt, struct edns_data* edns);
+int parse_edns_from_pkt(struct sldns_buffer* pkt, struct edns_data* edns);
/**
* Calculate hash value for rrset in packet.
@@ -270,7 +272,7 @@ int parse_edns_from_pkt(ldns_buffer* pkt, struct edns_data* edns);
* @param rrset_flags: rrset flags (same as packed_rrset flags).
* @return hash value
*/
-hashvalue_t pkt_hash_rrset(ldns_buffer* pkt, uint8_t* dname, uint16_t type,
+hashvalue_t pkt_hash_rrset(struct sldns_buffer* pkt, uint8_t* dname, uint16_t type,
uint16_t dclass, uint32_t rrset_flags);
/**
@@ -286,7 +288,7 @@ hashvalue_t pkt_hash_rrset(ldns_buffer* pkt, uint8_t* dname, uint16_t type,
* @return NULL or the rrset_parse if found.
*/
struct rrset_parse* msgparse_hashtable_lookup(struct msg_parse* msg,
- ldns_buffer* pkt, hashvalue_t h, uint32_t rrset_flags,
+ struct sldns_buffer* pkt, hashvalue_t h, uint32_t rrset_flags,
uint8_t* dname, size_t dnamelen, uint16_t type, uint16_t dclass);
/**
diff --git a/contrib/unbound/util/data/msgreply.c b/contrib/unbound/util/data/msgreply.c
index 6d711ff..cfdf3fe 100644
--- a/contrib/unbound/util/data/msgreply.c
+++ b/contrib/unbound/util/data/msgreply.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -40,7 +40,6 @@
*/
#include "config.h"
-#include <ldns/ldns.h>
#include "util/data/msgreply.h"
#include "util/storage/lookup3.h"
#include "util/log.h"
@@ -51,15 +50,17 @@
#include "util/regional.h"
#include "util/data/msgparse.h"
#include "util/data/msgencode.h"
+#include "ldns/sbuffer.h"
+#include "ldns/wire2str.h"
/** MAX TTL default for messages and rrsets */
-uint32_t MAX_TTL = 3600 * 24 * 10; /* ten days */
+time_t MAX_TTL = 3600 * 24 * 10; /* ten days */
/** MIN TTL default for messages and rrsets */
-uint32_t MIN_TTL = 0;
+time_t MIN_TTL = 0;
/** allocate qinfo, return 0 on error */
static int
-parse_create_qinfo(ldns_buffer* pkt, struct msg_parse* msg,
+parse_create_qinfo(sldns_buffer* pkt, struct msg_parse* msg,
struct query_info* qinf, struct regional* region)
{
if(msg->qname) {
@@ -79,7 +80,7 @@ parse_create_qinfo(ldns_buffer* pkt, struct msg_parse* msg,
/** constructor for replyinfo */
static struct reply_info*
construct_reply_info_base(struct regional* region, uint16_t flags, size_t qd,
- uint32_t ttl, uint32_t prettl, size_t an, size_t ns, size_t ar,
+ time_t ttl, time_t prettl, size_t an, size_t ns, size_t ar,
size_t total, enum sec_status sec)
{
struct reply_info* rep;
@@ -153,13 +154,13 @@ repinfo_alloc_rrset_keys(struct reply_info* rep, struct alloc_cache* alloc,
/** do the rdata copy */
static int
-rdata_copy(ldns_buffer* pkt, struct packed_rrset_data* data, uint8_t* to,
- struct rr_parse* rr, uint32_t* rr_ttl, uint16_t type)
+rdata_copy(sldns_buffer* pkt, struct packed_rrset_data* data, uint8_t* to,
+ struct rr_parse* rr, time_t* rr_ttl, uint16_t type)
{
uint16_t pkt_len;
- const ldns_rr_descriptor* desc;
+ const sldns_rr_descriptor* desc;
- *rr_ttl = ldns_read_uint32(rr->ttl_data);
+ *rr_ttl = sldns_read_uint32(rr->ttl_data);
/* RFC 2181 Section 8. if msb of ttl is set treat as if zero. */
if(*rr_ttl & 0x80000000U)
*rr_ttl = 0;
@@ -174,18 +175,18 @@ rdata_copy(ldns_buffer* pkt, struct packed_rrset_data* data, uint8_t* to,
return 1;
}
- ldns_buffer_set_position(pkt, (size_t)
- (rr->ttl_data - ldns_buffer_begin(pkt) + sizeof(uint32_t)));
+ sldns_buffer_set_position(pkt, (size_t)
+ (rr->ttl_data - sldns_buffer_begin(pkt) + sizeof(uint32_t)));
/* insert decompressed size into rdata len stored in memory */
/* -2 because rdatalen bytes are not included. */
pkt_len = htons(rr->size - 2);
memmove(to, &pkt_len, sizeof(uint16_t));
to += 2;
/* read packet rdata len */
- pkt_len = ldns_buffer_read_u16(pkt);
- if(ldns_buffer_remaining(pkt) < pkt_len)
+ pkt_len = sldns_buffer_read_u16(pkt);
+ if(sldns_buffer_remaining(pkt) < pkt_len)
return 0;
- desc = ldns_rr_descript(type);
+ desc = sldns_rr_descript(type);
if(pkt_len > 0 && desc && desc->_dname_count > 0) {
int count = (int)desc->_dname_count;
int rdf = 0;
@@ -195,25 +196,25 @@ rdata_copy(ldns_buffer* pkt, struct packed_rrset_data* data, uint8_t* to,
while(pkt_len > 0 && count) {
switch(desc->_wireformat[rdf]) {
case LDNS_RDF_TYPE_DNAME:
- oldpos = ldns_buffer_position(pkt);
+ oldpos = sldns_buffer_position(pkt);
dname_pkt_copy(pkt, to,
- ldns_buffer_current(pkt));
+ sldns_buffer_current(pkt));
to += pkt_dname_len(pkt);
- pkt_len -= ldns_buffer_position(pkt)-oldpos;
+ pkt_len -= sldns_buffer_position(pkt)-oldpos;
count--;
len = 0;
break;
case LDNS_RDF_TYPE_STR:
- len = ldns_buffer_current(pkt)[0] + 1;
+ len = sldns_buffer_current(pkt)[0] + 1;
break;
default:
len = get_rdf_size(desc->_wireformat[rdf]);
break;
}
if(len) {
- memmove(to, ldns_buffer_current(pkt), len);
+ memmove(to, sldns_buffer_current(pkt), len);
to += len;
- ldns_buffer_skip(pkt, (ssize_t)len);
+ sldns_buffer_skip(pkt, (ssize_t)len);
log_assert(len <= pkt_len);
pkt_len -= len;
}
@@ -222,14 +223,14 @@ rdata_copy(ldns_buffer* pkt, struct packed_rrset_data* data, uint8_t* to,
}
/* copy remaining rdata */
if(pkt_len > 0)
- memmove(to, ldns_buffer_current(pkt), pkt_len);
+ memmove(to, sldns_buffer_current(pkt), pkt_len);
return 1;
}
/** copy over the data into packed rrset */
static int
-parse_rr_copy(ldns_buffer* pkt, struct rrset_parse* pset,
+parse_rr_copy(sldns_buffer* pkt, struct rrset_parse* pset,
struct packed_rrset_data* data)
{
size_t i;
@@ -245,7 +246,7 @@ parse_rr_copy(ldns_buffer* pkt, struct rrset_parse* pset,
data->rr_len = (size_t*)((uint8_t*)data +
sizeof(struct packed_rrset_data));
data->rr_data = (uint8_t**)&(data->rr_len[total]);
- data->rr_ttl = (uint32_t*)&(data->rr_data[total]);
+ data->rr_ttl = (time_t*)&(data->rr_data[total]);
nextrdata = (uint8_t*)&(data->rr_ttl[total]);
for(i=0; i<data->count; i++) {
data->rr_len[i] = rr->size;
@@ -272,13 +273,13 @@ parse_rr_copy(ldns_buffer* pkt, struct rrset_parse* pset,
/** create rrset return 0 on failure */
static int
-parse_create_rrset(ldns_buffer* pkt, struct rrset_parse* pset,
+parse_create_rrset(sldns_buffer* pkt, struct rrset_parse* pset,
struct packed_rrset_data** data, struct regional* region)
{
/* allocate */
size_t s = sizeof(struct packed_rrset_data) +
(pset->rr_count + pset->rrsig_count) *
- (sizeof(size_t)+sizeof(uint8_t*)+sizeof(uint32_t)) +
+ (sizeof(size_t)+sizeof(uint8_t*)+sizeof(time_t)) +
pset->size;
if(region)
*data = regional_alloc(region, s);
@@ -332,7 +333,7 @@ get_rrset_trust(struct msg_parse* msg, struct rrset_parse* rrset)
}
int
-parse_copy_decompress_rrset(ldns_buffer* pkt, struct msg_parse* msg,
+parse_copy_decompress_rrset(sldns_buffer* pkt, struct msg_parse* msg,
struct rrset_parse *pset, struct regional* region,
struct ub_packed_rrset_key* pk)
{
@@ -370,7 +371,7 @@ parse_copy_decompress_rrset(ldns_buffer* pkt, struct msg_parse* msg,
* @return 0 on failure.
*/
static int
-parse_copy_decompress(ldns_buffer* pkt, struct msg_parse* msg,
+parse_copy_decompress(sldns_buffer* pkt, struct msg_parse* msg,
struct reply_info* rep, struct regional* region)
{
size_t i;
@@ -397,7 +398,7 @@ parse_copy_decompress(ldns_buffer* pkt, struct msg_parse* msg,
}
int
-parse_create_msg(ldns_buffer* pkt, struct msg_parse* msg,
+parse_create_msg(sldns_buffer* pkt, struct msg_parse* msg,
struct alloc_cache* alloc, struct query_info* qinf,
struct reply_info** rep, struct regional* region)
{
@@ -413,7 +414,7 @@ parse_create_msg(ldns_buffer* pkt, struct msg_parse* msg,
return 1;
}
-int reply_info_parse(ldns_buffer* pkt, struct alloc_cache* alloc,
+int reply_info_parse(sldns_buffer* pkt, struct alloc_cache* alloc,
struct query_info* qinf, struct reply_info** rep,
struct regional* region, struct edns_data* edns)
{
@@ -428,7 +429,7 @@ int reply_info_parse(ldns_buffer* pkt, struct alloc_cache* alloc,
}
memset(msg, 0, sizeof(*msg));
- ldns_buffer_set_position(pkt, 0);
+ sldns_buffer_set_position(pkt, 0);
if((ret = parse_packet(pkt, msg, region)) != 0) {
return ret;
}
@@ -465,7 +466,7 @@ reply_info_sortref(struct reply_info* rep)
}
void
-reply_info_set_ttls(struct reply_info* rep, uint32_t timenow)
+reply_info_set_ttls(struct reply_info* rep, time_t timenow)
{
size_t i, j;
rep->ttl += timenow;
@@ -496,23 +497,23 @@ reply_info_parsedelete(struct reply_info* rep, struct alloc_cache* alloc)
}
int
-query_info_parse(struct query_info* m, ldns_buffer* query)
+query_info_parse(struct query_info* m, sldns_buffer* query)
{
- uint8_t* q = ldns_buffer_begin(query);
+ uint8_t* q = sldns_buffer_begin(query);
/* minimum size: header + \0 + qtype + qclass */
- if(ldns_buffer_limit(query) < LDNS_HEADER_SIZE + 5)
+ if(sldns_buffer_limit(query) < LDNS_HEADER_SIZE + 5)
return 0;
if(LDNS_OPCODE_WIRE(q) != LDNS_PACKET_QUERY ||
- LDNS_QDCOUNT(q) != 1 || ldns_buffer_position(query) != 0)
+ LDNS_QDCOUNT(q) != 1 || sldns_buffer_position(query) != 0)
return 0;
- ldns_buffer_skip(query, LDNS_HEADER_SIZE);
- m->qname = ldns_buffer_current(query);
+ sldns_buffer_skip(query, LDNS_HEADER_SIZE);
+ m->qname = sldns_buffer_current(query);
if((m->qname_len = query_dname_len(query)) == 0)
return 0; /* parse error */
- if(ldns_buffer_remaining(query) < 4)
+ if(sldns_buffer_remaining(query) < 4)
return 0; /* need qtype, qclass */
- m->qtype = ldns_buffer_read_u16(query);
- m->qclass = ldns_buffer_read_u16(query);
+ m->qtype = sldns_buffer_read_u16(query);
+ m->qclass = sldns_buffer_read_u16(query);
return 1;
}
@@ -764,32 +765,23 @@ void
log_dns_msg(const char* str, struct query_info* qinfo, struct reply_info* rep)
{
/* not particularly fast but flexible, make wireformat and print */
- ldns_buffer* buf = ldns_buffer_new(65535);
+ sldns_buffer* buf = sldns_buffer_new(65535);
struct regional* region = regional_create();
if(!reply_info_encode(qinfo, rep, 0, rep->flags, buf, 0,
region, 65535, 1)) {
log_info("%s: log_dns_msg: out of memory", str);
} else {
- ldns_status s;
- ldns_pkt* pkt = NULL;
- s = ldns_buffer2pkt_wire(&pkt, buf);
- if(s != LDNS_STATUS_OK) {
- log_info("%s: log_dns_msg: ldns parse gave: %s",
- str, ldns_get_errorstr_by_id(s));
+ char* str = sldns_wire2str_pkt(sldns_buffer_begin(buf),
+ sldns_buffer_limit(buf));
+ if(!str) {
+ log_info("%s: log_dns_msg: ldns tostr failed", str);
} else {
- ldns_buffer_clear(buf);
- s = ldns_pkt2buffer_str(buf, pkt);
- if(s != LDNS_STATUS_OK) {
- log_info("%s: log_dns_msg: ldns tostr gave: %s",
- str, ldns_get_errorstr_by_id(s));
- } else {
- log_info("%s %s",
- str, (char*)ldns_buffer_begin(buf));
- }
+ log_info("%s %s",
+ str, (char*)sldns_buffer_begin(buf));
}
- ldns_pkt_free(pkt);
+ free(str);
}
- ldns_buffer_free(buf);
+ sldns_buffer_free(buf);
regional_destroy(region);
}
diff --git a/contrib/unbound/util/data/msgreply.h b/contrib/unbound/util/data/msgreply.h
index a32f2b1..f920108 100644
--- a/contrib/unbound/util/data/msgreply.h
+++ b/contrib/unbound/util/data/msgreply.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -43,6 +43,7 @@
#define UTIL_DATA_MSGREPLY_H
#include "util/storage/lruhash.h"
#include "util/data/packed_rrset.h"
+struct sldns_buffer;
struct comm_reply;
struct alloc_cache;
struct iovec;
@@ -116,21 +117,21 @@ struct reply_info {
*/
uint8_t qdcount;
+ /** 32 bit padding to pad struct member alignment to 64 bits. */
+ uint32_t padding;
+
/**
* TTL of the entire reply (for negative caching).
* only for use when there are 0 RRsets in this message.
* if there are RRsets, check those instead.
*/
- uint32_t ttl;
+ time_t ttl;
/**
* TTL for prefetch. After it has expired, a prefetch is suitable.
* Smaller than the TTL, otherwise the prefetch would not happen.
*/
- uint32_t prefetch_ttl;
-
- /** 32 bit padding to pad struct member alignment to 64 bits. */
- uint32_t padding;
+ time_t prefetch_ttl;
/**
* The security status from DNSSEC validation of this message.
@@ -201,7 +202,7 @@ struct msgreply_entry {
* @param query: the wireformat packet query. starts with ID.
* @return: 0 on format error.
*/
-int query_info_parse(struct query_info* m, ldns_buffer* query);
+int query_info_parse(struct query_info* m, struct sldns_buffer* query);
/**
* Parse query reply.
@@ -218,7 +219,7 @@ int query_info_parse(struct query_info* m, ldns_buffer* query);
* o FORMERR for parse errors.
* o SERVFAIL for memory allocation errors.
*/
-int reply_info_parse(ldns_buffer* pkt, struct alloc_cache* alloc,
+int reply_info_parse(struct sldns_buffer* pkt, struct alloc_cache* alloc,
struct query_info* qinf, struct reply_info** rep,
struct regional* region, struct edns_data* edns);
@@ -237,7 +238,7 @@ int reply_info_parse(ldns_buffer* pkt, struct alloc_cache* alloc,
* and no rrset_ref array in the reply is built up.
* @return 0 if allocation failed.
*/
-int parse_create_msg(ldns_buffer* pkt, struct msg_parse* msg,
+int parse_create_msg(struct sldns_buffer* pkt, struct msg_parse* msg,
struct alloc_cache* alloc, struct query_info* qinf,
struct reply_info** rep, struct regional* region);
@@ -253,7 +254,7 @@ void reply_info_sortref(struct reply_info* rep);
* Also refs must be filled in.
* @param timenow: the current time.
*/
-void reply_info_set_ttls(struct reply_info* rep, uint32_t timenow);
+void reply_info_set_ttls(struct reply_info* rep, time_t timenow);
/**
* Delete reply_info and packed_rrsets (while they are not yet added to the
@@ -322,7 +323,7 @@ struct reply_info* reply_info_copy(struct reply_info* rep,
* Note that TTL will still be relative on return.
* @return false on alloc failure.
*/
-int parse_copy_decompress_rrset(ldns_buffer* pkt, struct msg_parse* msg,
+int parse_copy_decompress_rrset(struct sldns_buffer* pkt, struct msg_parse* msg,
struct rrset_parse *pset, struct regional* region,
struct ub_packed_rrset_key* pk);
diff --git a/contrib/unbound/util/data/packed_rrset.c b/contrib/unbound/util/data/packed_rrset.c
index e1fc2e5..8074685 100644
--- a/contrib/unbound/util/data/packed_rrset.c
+++ b/contrib/unbound/util/data/packed_rrset.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -40,7 +40,6 @@
*/
#include "config.h"
-#include <ldns/wire2host.h>
#include "util/data/packed_rrset.h"
#include "util/data/dname.h"
#include "util/storage/lookup3.h"
@@ -48,6 +47,9 @@
#include "util/alloc.h"
#include "util/regional.h"
#include "util/net_help.h"
+#include "ldns/rrdef.h"
+#include "ldns/sbuffer.h"
+#include "ldns/wire2str.h"
void
ub_packed_rrset_parsedelete(struct ub_packed_rrset_key* pkey,
@@ -183,7 +185,7 @@ packed_rrset_ptr_fixup(struct packed_rrset_data* data)
data->rr_len = (size_t*)((uint8_t*)data +
sizeof(struct packed_rrset_data));
data->rr_data = (uint8_t**)&(data->rr_len[total]);
- data->rr_ttl = (uint32_t*)&(data->rr_data[total]);
+ data->rr_ttl = (time_t*)&(data->rr_data[total]);
nextrdata = (uint8_t*)&(data->rr_ttl[total]);
for(i=0; i<total; i++) {
data->rr_data[i] = nextrdata;
@@ -205,7 +207,7 @@ get_cname_target(struct ub_packed_rrset_key* rrset, uint8_t** dname,
return;
if(d->rr_len[0] < 3) /* at least rdatalen + 0byte root label */
return;
- len = ldns_read_uint16(d->rr_data[0]);
+ len = sldns_read_uint16(d->rr_data[0]);
if(len != d->rr_len[0] - sizeof(uint16_t))
return;
if(dname_valid(d->rr_data[0]+sizeof(uint16_t), len) != len)
@@ -215,7 +217,7 @@ get_cname_target(struct ub_packed_rrset_key* rrset, uint8_t** dname,
}
void
-packed_rrset_ttl_add(struct packed_rrset_data* data, uint32_t add)
+packed_rrset_ttl_add(struct packed_rrset_data* data, time_t add)
{
size_t i;
size_t total = data->count + data->rrsig_count;
@@ -266,7 +268,53 @@ void log_rrset_key(enum verbosity_value v, const char* str,
ntohs(rrset->rk.type), ntohs(rrset->rk.rrset_class));
}
-uint32_t
+int packed_rr_to_string(struct ub_packed_rrset_key* rrset, size_t i,
+ time_t now, char* dest, size_t dest_len)
+{
+ struct packed_rrset_data* d = (struct packed_rrset_data*)rrset->
+ entry.data;
+ uint8_t rr[65535];
+ size_t rlen = rrset->rk.dname_len + 2 + 2 + 4 + d->rr_len[i];
+ log_assert(dest_len > 0 && dest);
+ if(rlen > dest_len) {
+ dest[0] = 0;
+ return 0;
+ }
+ memmove(rr, rrset->rk.dname, rrset->rk.dname_len);
+ if(i < d->count)
+ memmove(rr+rrset->rk.dname_len, &rrset->rk.type, 2);
+ else sldns_write_uint16(rr+rrset->rk.dname_len, LDNS_RR_TYPE_RRSIG);
+ memmove(rr+rrset->rk.dname_len+2, &rrset->rk.rrset_class, 2);
+ sldns_write_uint32(rr+rrset->rk.dname_len+4,
+ (uint32_t)(d->rr_ttl[i]-now));
+ memmove(rr+rrset->rk.dname_len+8, d->rr_data[i], d->rr_len[i]);
+ if(sldns_wire2str_rr_buf(rr, rlen, dest, dest_len) == -1) {
+ log_info("rrbuf failure %d %s", (int)d->rr_len[i], dest);
+ dest[0] = 0;
+ return 0;
+ }
+ return 1;
+}
+
+void log_packed_rrset(enum verbosity_value v, const char* str,
+ struct ub_packed_rrset_key* rrset)
+{
+ struct packed_rrset_data* d = (struct packed_rrset_data*)rrset->
+ entry.data;
+ char buf[65535];
+ size_t i;
+ if(verbosity < v)
+ return;
+ for(i=0; i<d->count+d->rrsig_count; i++) {
+ if(!packed_rr_to_string(rrset, i, 0, buf, sizeof(buf))) {
+ log_info("%s: rr %d wire2str-error", str, (int)i);
+ } else {
+ log_info("%s: %s", str, buf);
+ }
+ }
+}
+
+time_t
ub_packed_rrset_ttl(struct ub_packed_rrset_key* key)
{
struct packed_rrset_data* d = (struct packed_rrset_data*)key->
@@ -276,7 +324,7 @@ ub_packed_rrset_ttl(struct ub_packed_rrset_key* key)
struct ub_packed_rrset_key*
packed_rrset_copy_region(struct ub_packed_rrset_key* key,
- struct regional* region, uint32_t now)
+ struct regional* region, time_t now)
{
struct ub_packed_rrset_key* ck = regional_alloc(region,
sizeof(struct ub_packed_rrset_key));
@@ -315,7 +363,7 @@ packed_rrset_copy_region(struct ub_packed_rrset_key* key,
struct ub_packed_rrset_key*
packed_rrset_copy_alloc(struct ub_packed_rrset_key* key,
- struct alloc_cache* alloc, uint32_t now)
+ struct alloc_cache* alloc, time_t now)
{
struct packed_rrset_data* fd, *dd;
struct ub_packed_rrset_key* dk = alloc_special_obtain(alloc);
@@ -339,150 +387,3 @@ packed_rrset_copy_alloc(struct ub_packed_rrset_key* key,
packed_rrset_ttl_add(dd, now);
return dk;
}
-
-struct ub_packed_rrset_key*
-ub_packed_rrset_heap_key(ldns_rr_list* rrset)
-{
- struct ub_packed_rrset_key* k;
- ldns_rr* rr;
- if(!rrset)
- return NULL;
- rr = ldns_rr_list_rr(rrset, 0);
- if(!rr)
- return NULL;
- k = (struct ub_packed_rrset_key*)calloc(1, sizeof(*k));
- if(!k)
- return NULL;
- k->rk.type = htons(ldns_rr_get_type(rr));
- k->rk.rrset_class = htons(ldns_rr_get_class(rr));
- k->rk.dname_len = ldns_rdf_size(ldns_rr_owner(rr));
- k->rk.dname = memdup(ldns_rdf_data(ldns_rr_owner(rr)),
- ldns_rdf_size(ldns_rr_owner(rr)));
- if(!k->rk.dname) {
- free(k);
- return NULL;
- }
- return k;
-}
-
-struct packed_rrset_data*
-packed_rrset_heap_data(ldns_rr_list* rrset)
-{
- struct packed_rrset_data* data;
- size_t count=0, rrsig_count=0, len=0, i, j, total;
- uint8_t* nextrdata;
- if(!rrset || ldns_rr_list_rr_count(rrset)==0)
- return NULL;
- /* count sizes */
- for(i=0; i<ldns_rr_list_rr_count(rrset); i++) {
- ldns_rr* rr = ldns_rr_list_rr(rrset, i);
- if(ldns_rr_get_type(rr) == LDNS_RR_TYPE_RRSIG)
- rrsig_count++;
- else count++;
- for(j=0; j<ldns_rr_rd_count(rr); j++)
- len += ldns_rdf_size(ldns_rr_rdf(rr, j));
- len += 2; /* sizeof the rdlength */
- }
-
- /* allocate */
- total = count + rrsig_count;
- len += sizeof(*data) + total*(sizeof(size_t) + sizeof(uint32_t) +
- sizeof(uint8_t*));
- data = (struct packed_rrset_data*)calloc(1, len);
- if(!data)
- return NULL;
-
- /* fill it */
- data->ttl = ldns_rr_ttl(ldns_rr_list_rr(rrset, 0));
- data->count = count;
- data->rrsig_count = rrsig_count;
- data->rr_len = (size_t*)((uint8_t*)data +
- sizeof(struct packed_rrset_data));
- data->rr_data = (uint8_t**)&(data->rr_len[total]);
- data->rr_ttl = (uint32_t*)&(data->rr_data[total]);
- nextrdata = (uint8_t*)&(data->rr_ttl[total]);
-
- /* fill out len, ttl, fields */
- for(i=0; i<total; i++) {
- ldns_rr* rr = ldns_rr_list_rr(rrset, i);
- data->rr_ttl[i] = ldns_rr_ttl(rr);
- if(data->rr_ttl[i] < data->ttl)
- data->ttl = data->rr_ttl[i];
- data->rr_len[i] = 2; /* the rdlength */
- for(j=0; j<ldns_rr_rd_count(rr); j++)
- data->rr_len[i] += ldns_rdf_size(ldns_rr_rdf(rr, j));
- }
-
- /* fixup rest of ptrs */
- for(i=0; i<total; i++) {
- data->rr_data[i] = nextrdata;
- nextrdata += data->rr_len[i];
- }
-
- /* copy data in there */
- for(i=0; i<total; i++) {
- ldns_rr* rr = ldns_rr_list_rr(rrset, i);
- uint16_t rdlen = htons(data->rr_len[i]-2);
- size_t p = sizeof(rdlen);
- memmove(data->rr_data[i], &rdlen, p);
- for(j=0; j<ldns_rr_rd_count(rr); j++) {
- ldns_rdf* rd = ldns_rr_rdf(rr, j);
- memmove(data->rr_data[i]+p, ldns_rdf_data(rd),
- ldns_rdf_size(rd));
- p += ldns_rdf_size(rd);
- }
- }
-
- if(data->rrsig_count && data->count == 0) {
- data->count = data->rrsig_count; /* rrset type is RRSIG */
- data->rrsig_count = 0;
- }
- return data;
-}
-
-/** convert i'th rr to ldns_rr */
-static ldns_rr*
-torr(struct ub_packed_rrset_key* k, ldns_buffer* buf, size_t i)
-{
- struct packed_rrset_data* d = (struct packed_rrset_data*)k->entry.data;
- ldns_rr* rr = NULL;
- size_t pos = 0;
- ldns_status s;
- ldns_buffer_clear(buf);
- ldns_buffer_write(buf, k->rk.dname, k->rk.dname_len);
- if(i < d->count)
- ldns_buffer_write(buf, &k->rk.type, sizeof(uint16_t));
- else ldns_buffer_write_u16(buf, LDNS_RR_TYPE_RRSIG);
- ldns_buffer_write(buf, &k->rk.rrset_class, sizeof(uint16_t));
- ldns_buffer_write_u32(buf, d->rr_ttl[i]);
- ldns_buffer_write(buf, d->rr_data[i], d->rr_len[i]);
- ldns_buffer_flip(buf);
- s = ldns_wire2rr(&rr, ldns_buffer_begin(buf), ldns_buffer_limit(buf),
- &pos, LDNS_SECTION_ANSWER);
- if(s == LDNS_STATUS_OK)
- return rr;
- return NULL;
-}
-
-ldns_rr_list*
-packed_rrset_to_rr_list(struct ub_packed_rrset_key* k, ldns_buffer* buf)
-{
- struct packed_rrset_data* d = (struct packed_rrset_data*)k->entry.data;
- ldns_rr_list* r = ldns_rr_list_new();
- size_t i;
- if(!r)
- return NULL;
- for(i=0; i<d->count+d->rrsig_count; i++) {
- ldns_rr* rr = torr(k, buf, i);
- if(!rr) {
- ldns_rr_list_deep_free(r);
- return NULL;
- }
- if(!ldns_rr_list_push_rr(r, rr)) {
- ldns_rr_free(rr);
- ldns_rr_list_deep_free(r);
- return NULL;
- }
- }
- return r;
-}
diff --git a/contrib/unbound/util/data/packed_rrset.h b/contrib/unbound/util/data/packed_rrset.h
index ad11a80..4b0ef80 100644
--- a/contrib/unbound/util/data/packed_rrset.h
+++ b/contrib/unbound/util/data/packed_rrset.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -42,7 +42,6 @@
#ifndef UTIL_DATA_PACKED_RRSET_H
#define UTIL_DATA_PACKED_RRSET_H
#include "util/storage/lruhash.h"
-#include <ldns/rr.h>
struct alloc_cache;
struct regional;
@@ -215,7 +214,7 @@ enum sec_status {
struct packed_rrset_data {
/** TTL (in seconds like time()) of the rrset.
* Same for all RRs see rfc2181(5.2). */
- uint32_t ttl;
+ time_t ttl;
/** number of rrs. */
size_t count;
/** number of rrsigs, if 0 no rrsigs */
@@ -227,7 +226,7 @@ struct packed_rrset_data {
/** length of every rr's rdata, rr_len[i] is size of rr_data[i]. */
size_t* rr_len;
/** ttl of every rr. rr_ttl[i] ttl of rr i. */
- uint32_t *rr_ttl;
+ time_t *rr_ttl;
/**
* Array of pointers to every rr's rdata.
* The rr_data[i] rdata is stored in uncompressed wireformat.
@@ -281,7 +280,7 @@ size_t packed_rrset_sizeof(struct packed_rrset_data* data);
* @param key: rrset key, with data to examine.
* @return ttl value.
*/
-uint32_t ub_packed_rrset_ttl(struct ub_packed_rrset_key* key);
+time_t ub_packed_rrset_ttl(struct ub_packed_rrset_key* key);
/**
* Calculate memory size of rrset entry. For hash table usage.
@@ -343,7 +342,7 @@ void packed_rrset_ptr_fixup(struct packed_rrset_data* data);
* @param data: rrset data structure. Otherwise correctly filled in.
* @param add: how many seconds to add, pass time(0) for example.
*/
-void packed_rrset_ttl_add(struct packed_rrset_data* data, uint32_t add);
+void packed_rrset_ttl_add(struct packed_rrset_data* data, time_t add);
/**
* Utility procedure to extract CNAME target name from its rdata.
@@ -382,6 +381,27 @@ const char* sec_status_to_string(enum sec_status s);
void log_rrset_key(enum verbosity_value v, const char* str,
struct ub_packed_rrset_key* rrset);
+/**
+ * Convert RR from RRset to string.
+ * @param rrset: structure with data.
+ * @param i: index of rr or RRSIG.
+ * @param now: time that is subtracted from ttl before printout. Can be 0.
+ * @param dest: destination string buffer. Must be nonNULL.
+ * @param dest_len: length of dest buffer (>0).
+ * @return false on failure.
+ */
+int packed_rr_to_string(struct ub_packed_rrset_key* rrset, size_t i,
+ time_t now, char* dest, size_t dest_len);
+
+/**
+ * Print the string with prefix, one rr per line.
+ * @param v: at what verbosity level to print this.
+ * @param str: string of message.
+ * @param rrset: with name, and rdata, and rrsigs.
+ */
+void log_packed_rrset(enum verbosity_value v, const char* str,
+ struct ub_packed_rrset_key* rrset);
+
/**
* Allocate rrset in region - no more locks needed
* @param key: a (just from rrset cache looked up) rrset key + valid,
@@ -392,7 +412,7 @@ void log_rrset_key(enum verbosity_value v, const char* str,
*/
struct ub_packed_rrset_key* packed_rrset_copy_region(
struct ub_packed_rrset_key* key, struct regional* region,
- uint32_t now);
+ time_t now);
/**
* Allocate rrset with malloc (from region or you are holding the lock).
@@ -403,32 +423,6 @@ struct ub_packed_rrset_key* packed_rrset_copy_region(
*/
struct ub_packed_rrset_key* packed_rrset_copy_alloc(
struct ub_packed_rrset_key* key, struct alloc_cache* alloc,
- uint32_t now);
-
-/**
- * Create a ub_packed_rrset_key allocated on the heap.
- * It therefore does not have the correct ID value, and cannot be used
- * inside the cache. It can be used in storage outside of the cache.
- * Keys for the cache have to be obtained from alloc.h .
- * @param rrset: the ldns rr set.
- * @return key allocated or NULL on failure.
- */
-struct ub_packed_rrset_key* ub_packed_rrset_heap_key(ldns_rr_list* rrset);
-
-/**
- * Create packed_rrset data on the heap.
- * @param rrset: the ldns rr set with the data to copy.
- * @return data allocated or NULL on failure.
- */
-struct packed_rrset_data* packed_rrset_heap_data(ldns_rr_list* rrset);
-
-/**
- * Convert packed rrset to ldns rr list.
- * @param rrset: packed rrset.
- * @param buf: scratch buffer.
- * @return rr list or NULL on failure.
- */
-ldns_rr_list* packed_rrset_to_rr_list(struct ub_packed_rrset_key* rrset,
- ldns_buffer* buf);
+ time_t now);
#endif /* UTIL_DATA_PACKED_RRSET_H */
diff --git a/contrib/unbound/util/fptr_wlist.c b/contrib/unbound/util/fptr_wlist.c
index 2d5ba5c..7aa7736 100644
--- a/contrib/unbound/util/fptr_wlist.c
+++ b/contrib/unbound/util/fptr_wlist.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -103,6 +103,7 @@ fptr_whitelist_comm_timer(void (*fptr)(void*))
{
if(fptr == &pending_udp_timer_cb) return 1;
else if(fptr == &outnet_tcptimer) return 1;
+ else if(fptr == &pending_udp_timer_delay_cb) return 1;
else if(fptr == &worker_stat_timer_cb) return 1;
else if(fptr == &worker_probe_timer_cb) return 1;
#ifdef UB_ON_WINDOWS
@@ -387,6 +388,7 @@ int fptr_whitelist_mesh_cb(mesh_cb_func_t fptr)
{
if(fptr == &libworker_fg_done_cb) return 1;
else if(fptr == &libworker_bg_done_cb) return 1;
+ else if(fptr == &libworker_event_done_cb) return 1;
else if(fptr == &probe_answer_cb) return 1;
return 0;
}
diff --git a/contrib/unbound/util/fptr_wlist.h b/contrib/unbound/util/fptr_wlist.h
index d204e92..b2925d6 100644
--- a/contrib/unbound/util/fptr_wlist.h
+++ b/contrib/unbound/util/fptr_wlist.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/iana_ports.inc b/contrib/unbound/util/iana_ports.inc
index c2c7a21..2522030 100644
--- a/contrib/unbound/util/iana_ports.inc
+++ b/contrib/unbound/util/iana_ports.inc
@@ -33,7 +33,6 @@
48,
49,
50,
-51,
52,
53,
54,
@@ -694,9 +693,6 @@
1026,
1027,
1029,
-1030,
-1031,
-1032,
1033,
1034,
1035,
@@ -3968,6 +3964,7 @@
4753,
4784,
4785,
+4789,
4800,
4801,
4802,
@@ -4095,6 +4092,7 @@
5111,
5112,
5116,
+5120,
5133,
5136,
5137,
@@ -4173,6 +4171,7 @@
5361,
5362,
5363,
+5364,
5397,
5398,
5399,
@@ -4276,6 +4275,7 @@
5681,
5682,
5683,
+5684,
5688,
5689,
5713,
@@ -4418,6 +4418,7 @@
6350,
6355,
6360,
+6363,
6370,
6382,
6389,
@@ -4479,6 +4480,8 @@
6627,
6628,
6633,
+6634,
+6653,
6657,
6670,
6671,
@@ -4573,9 +4576,11 @@
7170,
7171,
7174,
+7181,
7200,
7201,
7227,
+7235,
7262,
7272,
7273,
@@ -4599,6 +4604,7 @@
7401,
7402,
7410,
+7411,
7421,
7426,
7427,
@@ -4794,7 +4800,6 @@
8614,
8675,
8686,
-8699,
8732,
8733,
8763,
@@ -4985,6 +4990,7 @@
10007,
10008,
10009,
+10023,
10050,
10051,
10080,
@@ -5025,7 +5031,9 @@
10990,
11000,
11001,
+11095,
11106,
+11108,
11111,
11112,
11161,
@@ -5044,6 +5052,7 @@
11371,
11600,
11720,
+11723,
11751,
11796,
11876,
@@ -5285,7 +5294,10 @@
29167,
30001,
30002,
+30003,
+30004,
30260,
+30832,
30999,
31029,
31416,
@@ -5324,6 +5336,8 @@
34963,
34964,
34980,
+35001,
+35004,
35355,
36001,
36865,
@@ -5371,6 +5385,7 @@
47624,
47806,
47808,
+47809,
48000,
48001,
48002,
@@ -5379,3 +5394,4 @@
48129,
48556,
48619,
+48653,
diff --git a/contrib/unbound/util/locks.c b/contrib/unbound/util/locks.c
index 425f9b9..509895d 100644
--- a/contrib/unbound/util/locks.c
+++ b/contrib/unbound/util/locks.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/locks.h b/contrib/unbound/util/locks.h
index 91be5c3..d63e5f0 100644
--- a/contrib/unbound/util/locks.h
+++ b/contrib/unbound/util/locks.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef UTIL_LOCKS_H
diff --git a/contrib/unbound/util/log.c b/contrib/unbound/util/log.c
index 8c09c7c..39d3118 100644
--- a/contrib/unbound/util/log.c
+++ b/contrib/unbound/util/log.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* \file
@@ -40,6 +40,8 @@
#include "config.h"
#include "util/log.h"
#include "util/locks.h"
+#include "ldns/sbuffer.h"
+#include <stdarg.h>
#ifdef HAVE_TIME_H
#include <time.h>
#endif
@@ -73,7 +75,7 @@ static const char* ident="unbound";
static int logging_to_syslog = 0;
#endif /* HAVE_SYSLOG_H */
/** time to print in log, if NULL, use time(2) */
-static uint32_t* log_now = NULL;
+static time_t* log_now = NULL;
/** print time in UTC or in secondsfrom1970 */
static int log_time_asc = 0;
@@ -151,7 +153,7 @@ void log_ident_set(const char* id)
ident = id;
}
-void log_set_time(uint32_t* t)
+void log_set_time(time_t* t)
{
log_now = t;
}
@@ -228,7 +230,7 @@ log_vmsg(int pri, const char* type,
ident, (int)getpid(), tid?*tid:0, type, message);
} else
#endif
- fprintf(logfile, "[%u] %s[%d:%x] %s: %s\n", (unsigned)now,
+ fprintf(logfile, "[" ARG_LL "d] %s[%d:%x] %s: %s\n", (long long)now,
ident, (int)getpid(), tid?*tid:0, type, message);
#ifdef UB_ON_WINDOWS
/* line buffering does not work on windows */
@@ -345,11 +347,11 @@ log_hex(const char* msg, void* data, size_t length)
log_hex_f(verbosity, msg, data, length);
}
-void log_buf(enum verbosity_value level, const char* msg, ldns_buffer* buf)
+void log_buf(enum verbosity_value level, const char* msg, sldns_buffer* buf)
{
if(verbosity < level)
return;
- log_hex_f(level, msg, ldns_buffer_begin(buf), ldns_buffer_limit(buf));
+ log_hex_f(level, msg, sldns_buffer_begin(buf), sldns_buffer_limit(buf));
}
#ifdef USE_WINSOCK
diff --git a/contrib/unbound/util/log.h b/contrib/unbound/util/log.h
index 270ffc5..ea283da 100644
--- a/contrib/unbound/util/log.h
+++ b/contrib/unbound/util/log.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -41,7 +41,7 @@
#ifndef UTIL_LOG_H
#define UTIL_LOG_H
-#include <ldns/buffer.h>
+struct sldns_buffer;
/**
* verbosity value:
@@ -108,7 +108,7 @@ void log_ident_set(const char* id);
* @param t: the point is copied and used to find the time.
* if NULL, time(2) is used.
*/
-void log_set_time(uint32_t* t);
+void log_set_time(time_t* t);
/**
* Set if the time value is printed ascii or decimal in log entries.
@@ -149,13 +149,13 @@ void log_warn(const char* format, ...) ATTR_FORMAT(printf, 1, 2);
void log_hex(const char* msg, void* data, size_t length);
/**
- * Easy alternative for log_hex, takes a ldns_buffer.
+ * Easy alternative for log_hex, takes a sldns_buffer.
* @param level: verbosity level for this message, compared to global
* verbosity setting.
* @param msg: string desc to print
* @param buf: the buffer.
*/
-void log_buf(enum verbosity_value level, const char* msg, ldns_buffer* buf);
+void log_buf(enum verbosity_value level, const char* msg, struct sldns_buffer* buf);
/**
* Log fatal error message, and exit the current process.
diff --git a/contrib/unbound/util/mini_event.c b/contrib/unbound/util/mini_event.c
index f66214d..40dca37 100644
--- a/contrib/unbound/util/mini_event.c
+++ b/contrib/unbound/util/mini_event.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
@@ -79,13 +79,13 @@ settime(struct event_base* base)
return -1;
}
#ifndef S_SPLINT_S
- *base->time_secs = (uint32_t)base->time_tv->tv_sec;
+ *base->time_secs = (time_t)base->time_tv->tv_sec;
#endif
return 0;
}
/** create event base */
-void *event_init(uint32_t* time_secs, struct timeval* time_tv)
+void *event_init(time_t* time_secs, struct timeval* time_tv)
{
struct event_base* base = (struct event_base*)malloc(
sizeof(struct event_base));
diff --git a/contrib/unbound/util/mini_event.h b/contrib/unbound/util/mini_event.h
index 248468a..58bbc80 100644
--- a/contrib/unbound/util/mini_event.h
+++ b/contrib/unbound/util/mini_event.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -103,7 +103,7 @@ struct event_base
/** if we need to exit */
int need_to_exit;
/** where to store time in seconds */
- uint32_t* time_secs;
+ time_t* time_secs;
/** where to store time in microseconds */
struct timeval* time_tv;
};
@@ -134,7 +134,7 @@ struct event {
/* function prototypes (some are as they appear in event.h) */
/** create event base */
-void *event_init(uint32_t* time_secs, struct timeval* time_tv);
+void *event_init(time_t* time_secs, struct timeval* time_tv);
/** get version */
const char *event_get_version(void);
/** get polling method, select */
diff --git a/contrib/unbound/util/module.c b/contrib/unbound/util/module.c
index b45ec6f..09e276c 100644
--- a/contrib/unbound/util/module.c
+++ b/contrib/unbound/util/module.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* \file
diff --git a/contrib/unbound/util/module.h b/contrib/unbound/util/module.h
index 8fa4ec2..dace1cf 100644
--- a/contrib/unbound/util/module.h
+++ b/contrib/unbound/util/module.h
@@ -21,22 +21,134 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* \file
*
* This file contains the interface for DNS handling modules.
+ *
+ * The module interface uses the DNS modules as state machines. The
+ * state machines are activated in sequence to operate on queries. Once
+ * they are done, the reply is passed back. In the usual setup the mesh
+ * is the caller of the state machines and once things are done sends replies
+ * and invokes result callbacks.
+ *
+ * The module provides a number of functions, listed in the module_func_block.
+ * The module is inited and destroyed and memory usage queries, for the
+ * module as a whole, for entire-module state (such as a cache). And per-query
+ * functions are called, operate to move the state machine and cleanup of
+ * the per-query state.
+ *
+ * Most per-query state should simply be allocated in the query region.
+ * This is destroyed at the end of the query.
+ *
+ * The module environment contains services and information and caches
+ * shared by the modules and the rest of the system. It also contains
+ * function pointers for module-specific tasks (like sending queries).
+ *
+ * *** Example module calls for a normal query
+ *
+ * In this example, the query does not need recursion, all the other data
+ * can be found in the cache. This makes the example shorter.
+ *
+ * At the start of the program the iterator module is initialised.
+ * The iterator module sets up its global state, such as donotquery lists
+ * and private address trees.
+ *
+ * A query comes in, and a mesh entry is created for it. The mesh
+ * starts the resolution process. The validator module is the first
+ * in the list of modules, and it is started on this new query. The
+ * operate() function is called. The validator decides it needs not do
+ * anything yet until there is a result and returns wait_module, that
+ * causes the next module in the list to be started.
+ *
+ * The next module is the iterator. It is started on the passed query and
+ * decides to perform a lookup. For this simple example, the delegation
+ * point information is available, and all the iterator wants to do is
+ * send a UDP query. The iterator uses env.send_query() to send the
+ * query. Then the iterator suspends (returns from the operate call).
+ *
+ * When the UDP reply comes back (and on errors and timeouts), the
+ * operate function is called for the query, on the iterator module,
+ * with the event that there is a reply. The iterator decides that this
+ * is enough, the work is done. It returns the value finished from the
+ * operate call, which causes the previous module to be started.
+ *
+ * The previous module, the validator module, is started with the event
+ * that the iterator module is done. The validator decides to validate
+ * the query. Once it is done (which could take recursive lookups, but
+ * in this example no recursive lookups are needed), it returns from the
+ * operate function with finished.
+ *
+ * There is no previous module from the validator module, and the mesh
+ * takes this to mean that the query is finally done. The mesh invokes
+ * callbacks and sends packets to queriers.
+ *
+ * If other modules had been waiting (recursively) on the answer to this
+ * query, then the mesh will tell them about it. It calls the inform_super
+ * routine on all the waiting modules, and once that is done it calls all of
+ * them with the operate() call. During inform_super the query that is done
+ * still exists and information can be copied from it (but the module should
+ * not really re-entry codepoints and services). During the operate call
+ * the modules can use stored state to continue operation with the results.
+ * (network buffers are used to contain the answer packet during the
+ * inform_super phase, but after that the network buffers will be cleared
+ * of their contents so that other tasks can be performed).
+ *
+ * *** Example module calls for recursion
+ *
+ * A module is called in operate, and it decides that it wants to perform
+ * recursion. That is, it wants the full state-machine-list to operate on
+ * a different query. It calls env.attach_sub() to create a new query state.
+ * The routine returns the newly created state, and potentially the module
+ * can edit the module-states for the newly created query (i.e. pass along
+ * some information, like delegation points). The module then suspends,
+ * returns from the operate routine.
+ *
+ * The mesh meanwhile will have the newly created query (or queries) on
+ * a waiting list, and will call operate() on this query (or queries).
+ * It starts again at the start of the module list for them. The query
+ * (or queries) continue to operate their state machines, until they are
+ * done. When they are done the mesh calls inform_super on the module that
+ * wanted the recursion. After that the mesh calls operate() on the module
+ * that wanted to do the recursion, and during this phase the module could,
+ * for example, decide to create more recursions.
+ *
+ * If the module decides it no longer wants the recursive information
+ * it can call detach_subs. Those queries will still run to completion,
+ * potentially filling the cache with information. Inform_super is not
+ * called any more.
+ *
+ * The iterator module will fetch items from the cache, so a recursion
+ * attempt may complete very quickly if the item is in cache. The calling
+ * module has to wait for completion or eventual timeout. A recursive query
+ * that times out returns a servfail rcode (servfail is also returned for
+ * other errors during the lookup).
+ *
+ * Results are passed in the qstate, the rcode member is used to pass
+ * errors without requiring memory allocation, so that the code can continue
+ * in out-of-memory conditions. If the rcode member is 0 (NOERROR) then
+ * the dns_msg entry contains a filled out message. This message may
+ * also contain an rcode that is nonzero, but in this case additional
+ * information (query, additional) can be passed along.
+ *
+ * The rcode and dns_msg are used to pass the result from the the rightmost
+ * module towards the leftmost modules and then towards the user.
+ *
+ * If you want to avoid recursion-cycles where queries need other queries
+ * that need the first one, use detect_cycle() to see if that will happen.
+ *
*/
#ifndef UTIL_MODULE_H
@@ -44,6 +156,7 @@
#include "util/storage/lruhash.h"
#include "util/data/msgreply.h"
#include "util/data/msgparse.h"
+struct sldns_buffer;
struct alloc_cache;
struct rrset_cache;
struct key_cache;
@@ -176,7 +289,7 @@ struct module_env {
/** region for temporary usage. May be cleared after operate() call. */
struct regional* scratch;
/** buffer for temporary usage. May be cleared after operate() call. */
- ldns_buffer* scratch_buffer;
+ struct sldns_buffer* scratch_buffer;
/** internal data for daemon - worker thread. */
struct worker* worker;
/** mesh area with query state dependencies */
@@ -186,7 +299,7 @@ struct module_env {
/** random table to generate random numbers */
struct ub_randstate* rnd;
/** time in seconds, converted to integer */
- uint32_t* now;
+ time_t* now;
/** time in microseconds. Relatively recent. */
struct timeval* now_tv;
/** is validation required for messages, controls client-facing
@@ -309,7 +422,7 @@ struct module_qstate {
/** mesh related information for this query */
struct mesh_state* mesh_info;
/** how many seconds before expiry is this prefetched (0 if not) */
- uint32_t prefetch_leeway;
+ time_t prefetch_leeway;
};
/**
diff --git a/contrib/unbound/util/net_help.c b/contrib/unbound/util/net_help.c
index 64bd876..7f6daab 100644
--- a/contrib/unbound/util/net_help.c
+++ b/contrib/unbound/util/net_help.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* \file
@@ -38,12 +38,13 @@
*/
#include "config.h"
-#include <ldns/ldns.h>
#include "util/net_help.h"
#include "util/log.h"
#include "util/data/dname.h"
#include "util/module.h"
#include "util/regional.h"
+#include "ldns/parseutil.h"
+#include "ldns/wire2str.h"
#include <fcntl.h>
#ifdef HAVE_OPENSSL_SSL_H
#include <openssl/ssl.h>
@@ -159,7 +160,7 @@ log_addr(enum verbosity_value v, const char* str,
default: break;
}
if(inet_ntop(af, sinaddr, dest, (socklen_t)sizeof(dest)) == 0) {
- strncpy(dest, "(inet_ntop error)", sizeof(dest));
+ (void)strlcpy(dest, "(inet_ntop error)", sizeof(dest));
}
dest[sizeof(dest)-1] = 0;
port = ntohs(((struct sockaddr_in*)addr)->sin_port);
@@ -180,7 +181,7 @@ extstrtoaddr(const char* str, struct sockaddr_storage* addr,
if(s-str >= MAX_ADDR_STRLEN) {
return 0;
}
- strncpy(buf, str, MAX_ADDR_STRLEN);
+ (void)strlcpy(buf, str, sizeof(buf));
buf[s-str] = 0;
port = atoi(s+1);
if(port == 0 && strcmp(s+1,"0")!=0) {
@@ -210,7 +211,7 @@ ipstrtoaddr(const char* ip, int port, struct sockaddr_storage* addr,
if((s=strchr(ip, '%'))) { /* ip6%interface, rfc 4007 */
if(s-ip >= MAX_ADDR_STRLEN)
return 0;
- strncpy(buf, ip, MAX_ADDR_STRLEN);
+ (void)strlcpy(buf, ip, sizeof(buf));
buf[s-ip]=0;
sa->sin6_scope_id = (uint32_t)atoi(s+1);
ip = buf;
@@ -280,15 +281,15 @@ log_nametypeclass(enum verbosity_value v, const char* str, uint8_t* name,
else if(type == LDNS_RR_TYPE_MAILB) ts = "MAILB";
else if(type == LDNS_RR_TYPE_MAILA) ts = "MAILA";
else if(type == LDNS_RR_TYPE_ANY) ts = "ANY";
- else if(ldns_rr_descript(type) && ldns_rr_descript(type)->_name)
- ts = ldns_rr_descript(type)->_name;
+ else if(sldns_rr_descript(type) && sldns_rr_descript(type)->_name)
+ ts = sldns_rr_descript(type)->_name;
else {
snprintf(t, sizeof(t), "TYPE%d", (int)type);
ts = t;
}
- if(ldns_lookup_by_id(ldns_rr_classes, (int)dclass) &&
- ldns_lookup_by_id(ldns_rr_classes, (int)dclass)->name)
- cs = ldns_lookup_by_id(ldns_rr_classes, (int)dclass)->name;
+ if(sldns_lookup_by_id(sldns_rr_classes, (int)dclass) &&
+ sldns_lookup_by_id(sldns_rr_classes, (int)dclass)->name)
+ cs = sldns_lookup_by_id(sldns_rr_classes, (int)dclass)->name;
else {
snprintf(c, sizeof(c), "CLASS%d", (int)dclass);
cs = c;
@@ -316,7 +317,7 @@ void log_name_addr(enum verbosity_value v, const char* str, uint8_t* zone,
default: break;
}
if(inet_ntop(af, sinaddr, dest, (socklen_t)sizeof(dest)) == 0) {
- strncpy(dest, "(inet_ntop error)", sizeof(dest));
+ (void)strlcpy(dest, "(inet_ntop error)", sizeof(dest));
}
dest[sizeof(dest)-1] = 0;
port = ntohs(((struct sockaddr_in*)addr)->sin_port);
diff --git a/contrib/unbound/util/net_help.h b/contrib/unbound/util/net_help.h
index 05b5087..b92dd40 100644
--- a/contrib/unbound/util/net_help.h
+++ b/contrib/unbound/util/net_help.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/netevent.c b/contrib/unbound/util/netevent.c
index c5a7d80..189aaa4 100644
--- a/contrib/unbound/util/netevent.c
+++ b/contrib/unbound/util/netevent.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -39,11 +39,12 @@
* This file contains event notification functions.
*/
#include "config.h"
-#include <ldns/wire2host.h>
#include "util/netevent.h"
#include "util/log.h"
#include "util/net_help.h"
#include "util/fptr_wlist.h"
+#include "ldns/pkthdr.h"
+#include "ldns/sbuffer.h"
#ifdef HAVE_OPENSSL_SSL_H
#include <openssl/ssl.h>
#endif
@@ -122,7 +123,7 @@ struct internal_base {
/** libevent event_base type. */
struct event_base* base;
/** seconds time pointer points here */
- uint32_t secs;
+ time_t secs;
/** timeval with current time */
struct timeval now;
/** the event used for slow_accept timeouts */
@@ -171,7 +172,7 @@ comm_base_now(struct comm_base* b)
if(gettimeofday(&b->eb->now, NULL) < 0) {
log_err("gettimeofday: %s", strerror(errno));
}
- b->eb->secs = (uint32_t)b->eb->now.tv_sec;
+ b->eb->secs = (time_t)b->eb->now.tv_sec;
}
#endif /* USE_MINI_EVENT */
@@ -234,6 +235,23 @@ comm_base_create(int sigs)
return b;
}
+struct comm_base*
+comm_base_create_event(struct event_base* base)
+{
+ struct comm_base* b = (struct comm_base*)calloc(1,
+ sizeof(struct comm_base));
+ if(!b)
+ return NULL;
+ b->eb = (struct internal_base*)calloc(1, sizeof(struct internal_base));
+ if(!b->eb) {
+ free(b);
+ return NULL;
+ }
+ b->eb->base = base;
+ comm_base_now(b);
+ return b;
+}
+
void
comm_base_delete(struct comm_base* b)
{
@@ -258,7 +276,22 @@ comm_base_delete(struct comm_base* b)
}
void
-comm_base_timept(struct comm_base* b, uint32_t** tt, struct timeval** tv)
+comm_base_delete_no_base(struct comm_base* b)
+{
+ if(!b)
+ return;
+ if(b->eb->slow_accept_enabled) {
+ if(event_del(&b->eb->slow_accept) != 0) {
+ log_err("could not event_del slow_accept");
+ }
+ }
+ b->eb->base = NULL;
+ free(b->eb);
+ free(b);
+}
+
+void
+comm_base_timept(struct comm_base* b, time_t** tt, struct timeval** tv)
{
*tt = &b->eb->secs;
*tv = &b->eb->now;
@@ -320,6 +353,10 @@ udp_send_errno_needs_log(struct sockaddr* addr, socklen_t addrlen)
break;
}
#endif
+ /* permission denied is gotten for every send if the
+ * network is disconnected (on some OS), squelch it */
+ if(errno == EPERM && verbosity < VERB_DETAIL)
+ return 0;
/* squelch errors where people deploy AAAA ::ffff:bla for
* authority servers, which we try for intranets. */
if(errno == EINVAL && addr_is_ip4mapped(
@@ -342,18 +379,18 @@ int tcp_connect_errno_needs_log(struct sockaddr* addr, socklen_t addrlen)
/* send a UDP reply */
int
-comm_point_send_udp_msg(struct comm_point *c, ldns_buffer* packet,
+comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet,
struct sockaddr* addr, socklen_t addrlen)
{
ssize_t sent;
log_assert(c->fd != -1);
#ifdef UNBOUND_DEBUG
- if(ldns_buffer_remaining(packet) == 0)
+ if(sldns_buffer_remaining(packet) == 0)
log_err("error: send empty UDP packet");
#endif
log_assert(addr && addrlen > 0);
- sent = sendto(c->fd, (void*)ldns_buffer_begin(packet),
- ldns_buffer_remaining(packet), 0,
+ sent = sendto(c->fd, (void*)sldns_buffer_begin(packet),
+ sldns_buffer_remaining(packet), 0,
addr, addrlen);
if(sent == -1) {
if(!udp_send_errno_needs_log(addr, addrlen))
@@ -367,9 +404,9 @@ comm_point_send_udp_msg(struct comm_point *c, ldns_buffer* packet,
log_addr(VERB_OPS, "remote address is",
(struct sockaddr_storage*)addr, addrlen);
return 0;
- } else if((size_t)sent != ldns_buffer_remaining(packet)) {
+ } else if((size_t)sent != sldns_buffer_remaining(packet)) {
log_err("sent %d in place of %d bytes",
- (int)sent, (int)ldns_buffer_remaining(packet));
+ (int)sent, (int)sldns_buffer_remaining(packet));
return 0;
}
return 1;
@@ -387,7 +424,7 @@ static void p_ancil(const char* str, struct comm_reply* r)
char buf[1024];
if(inet_ntop(AF_INET6, &r->pktinfo.v6info.ipi6_addr,
buf, (socklen_t)sizeof(buf)) == 0) {
- strncpy(buf, "(inet_ntop error)", sizeof(buf));
+ (void)strlcpy(buf, "(inet_ntop error)", sizeof(buf));
}
buf[sizeof(buf)-1]=0;
log_info("%s: %s %d", str, buf, r->pktinfo.v6info.ipi6_ifindex);
@@ -396,13 +433,13 @@ static void p_ancil(const char* str, struct comm_reply* r)
char buf1[1024], buf2[1024];
if(inet_ntop(AF_INET, &r->pktinfo.v4info.ipi_addr,
buf1, (socklen_t)sizeof(buf1)) == 0) {
- strncpy(buf1, "(inet_ntop error)", sizeof(buf1));
+ (void)strlcpy(buf1, "(inet_ntop error)", sizeof(buf1));
}
buf1[sizeof(buf1)-1]=0;
#ifdef HAVE_STRUCT_IN_PKTINFO_IPI_SPEC_DST
if(inet_ntop(AF_INET, &r->pktinfo.v4info.ipi_spec_dst,
buf2, (socklen_t)sizeof(buf2)) == 0) {
- strncpy(buf2, "(inet_ntop error)", sizeof(buf2));
+ (void)strlcpy(buf2, "(inet_ntop error)", sizeof(buf2));
}
buf2[sizeof(buf2)-1]=0;
#else
@@ -414,7 +451,7 @@ static void p_ancil(const char* str, struct comm_reply* r)
char buf1[1024];
if(inet_ntop(AF_INET, &r->pktinfo.v4addr,
buf1, (socklen_t)sizeof(buf1)) == 0) {
- strncpy(buf1, "(inet_ntop error)", sizeof(buf1));
+ (void)strlcpy(buf1, "(inet_ntop error)", sizeof(buf1));
}
buf1[sizeof(buf1)-1]=0;
log_info("%s: %s", str, buf1);
@@ -425,7 +462,7 @@ static void p_ancil(const char* str, struct comm_reply* r)
/** send a UDP reply over specified interface*/
static int
-comm_point_send_udp_msg_if(struct comm_point *c, ldns_buffer* packet,
+comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet,
struct sockaddr* addr, socklen_t addrlen, struct comm_reply* r)
{
#if defined(AF_INET6) && defined(IPV6_PKTINFO) && defined(HAVE_SENDMSG)
@@ -439,15 +476,15 @@ comm_point_send_udp_msg_if(struct comm_point *c, ldns_buffer* packet,
log_assert(c->fd != -1);
#ifdef UNBOUND_DEBUG
- if(ldns_buffer_remaining(packet) == 0)
+ if(sldns_buffer_remaining(packet) == 0)
log_err("error: send empty UDP packet");
#endif
log_assert(addr && addrlen > 0);
msg.msg_name = addr;
msg.msg_namelen = addrlen;
- iov[0].iov_base = ldns_buffer_begin(packet);
- iov[0].iov_len = ldns_buffer_remaining(packet);
+ iov[0].iov_base = sldns_buffer_begin(packet);
+ iov[0].iov_len = sldns_buffer_remaining(packet);
msg.msg_iov = iov;
msg.msg_iovlen = 1;
msg.msg_control = control;
@@ -507,9 +544,9 @@ comm_point_send_udp_msg_if(struct comm_point *c, ldns_buffer* packet,
log_addr(VERB_OPS, "remote address is",
(struct sockaddr_storage*)addr, addrlen);
return 0;
- } else if((size_t)sent != ldns_buffer_remaining(packet)) {
+ } else if((size_t)sent != sldns_buffer_remaining(packet)) {
log_err("sent %d in place of %d bytes",
- (int)sent, (int)ldns_buffer_remaining(packet));
+ (int)sent, (int)sldns_buffer_remaining(packet));
return 0;
}
return 1;
@@ -546,14 +583,14 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg)
log_assert(rep.c && rep.c->buffer && rep.c->fd == fd);
comm_base_now(rep.c->ev->base);
for(i=0; i<NUM_UDP_PER_SELECT; i++) {
- ldns_buffer_clear(rep.c->buffer);
+ sldns_buffer_clear(rep.c->buffer);
rep.addrlen = (socklen_t)sizeof(rep.addr);
log_assert(fd != -1);
- log_assert(ldns_buffer_remaining(rep.c->buffer) > 0);
+ log_assert(sldns_buffer_remaining(rep.c->buffer) > 0);
msg.msg_name = &rep.addr;
msg.msg_namelen = (socklen_t)sizeof(rep.addr);
- iov[0].iov_base = ldns_buffer_begin(rep.c->buffer);
- iov[0].iov_len = ldns_buffer_remaining(rep.c->buffer);
+ iov[0].iov_base = sldns_buffer_begin(rep.c->buffer);
+ iov[0].iov_len = sldns_buffer_remaining(rep.c->buffer);
msg.msg_iov = iov;
msg.msg_iovlen = 1;
msg.msg_control = ancil;
@@ -569,8 +606,8 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg)
return;
}
rep.addrlen = msg.msg_namelen;
- ldns_buffer_skip(rep.c->buffer, rcv);
- ldns_buffer_flip(rep.c->buffer);
+ sldns_buffer_skip(rep.c->buffer, rcv);
+ sldns_buffer_flip(rep.c->buffer);
rep.srctype = 0;
#ifndef S_SPLINT_S
for(cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL;
@@ -634,12 +671,12 @@ comm_point_udp_callback(int fd, short event, void* arg)
log_assert(rep.c && rep.c->buffer && rep.c->fd == fd);
comm_base_now(rep.c->ev->base);
for(i=0; i<NUM_UDP_PER_SELECT; i++) {
- ldns_buffer_clear(rep.c->buffer);
+ sldns_buffer_clear(rep.c->buffer);
rep.addrlen = (socklen_t)sizeof(rep.addr);
log_assert(fd != -1);
- log_assert(ldns_buffer_remaining(rep.c->buffer) > 0);
- rcv = recvfrom(fd, (void*)ldns_buffer_begin(rep.c->buffer),
- ldns_buffer_remaining(rep.c->buffer), 0,
+ log_assert(sldns_buffer_remaining(rep.c->buffer) > 0);
+ rcv = recvfrom(fd, (void*)sldns_buffer_begin(rep.c->buffer),
+ sldns_buffer_remaining(rep.c->buffer), 0,
(struct sockaddr*)&rep.addr, &rep.addrlen);
if(rcv == -1) {
#ifndef USE_WINSOCK
@@ -655,8 +692,8 @@ comm_point_udp_callback(int fd, short event, void* arg)
#endif
return;
}
- ldns_buffer_skip(rep.c->buffer, rcv);
- ldns_buffer_flip(rep.c->buffer);
+ sldns_buffer_skip(rep.c->buffer, rcv);
+ sldns_buffer_flip(rep.c->buffer);
rep.srctype = 0;
fptr_ok(fptr_whitelist_comm_point(rep.c->callback));
if((*rep.c->callback)(rep.c, rep.c->cb_arg, NETEVENT_NOERROR, &rep)) {
@@ -676,7 +713,7 @@ setup_tcp_handler(struct comm_point* c, int fd)
{
log_assert(c->type == comm_tcp);
log_assert(c->fd == -1);
- ldns_buffer_clear(c->buffer);
+ sldns_buffer_clear(c->buffer);
c->tcp_is_reading = 1;
c->tcp_byte_count = 0;
comm_point_start_listening(c, fd, TCP_QUERY_TIMEOUT);
@@ -878,7 +915,7 @@ static void
tcp_callback_writer(struct comm_point* c)
{
log_assert(c->type == comm_tcp);
- ldns_buffer_clear(c->buffer);
+ sldns_buffer_clear(c->buffer);
if(c->tcp_do_toggle_rw)
c->tcp_is_reading = 1;
c->tcp_byte_count = 0;
@@ -892,7 +929,7 @@ static void
tcp_callback_reader(struct comm_point* c)
{
log_assert(c->type == comm_tcp || c->type == comm_local);
- ldns_buffer_flip(c->buffer);
+ sldns_buffer_flip(c->buffer);
if(c->tcp_do_toggle_rw)
c->tcp_is_reading = 0;
c->tcp_byte_count = 0;
@@ -985,7 +1022,7 @@ ssl_handle_read(struct comm_point* c)
if(c->tcp_byte_count < sizeof(uint16_t)) {
/* read length bytes */
ERR_clear_error();
- if((r=SSL_read(c->ssl, (void*)ldns_buffer_at(c->buffer,
+ if((r=SSL_read(c->ssl, (void*)sldns_buffer_at(c->buffer,
c->tcp_byte_count), (int)(sizeof(uint16_t) -
c->tcp_byte_count))) <= 0) {
int want = SSL_get_error(c->ssl, r);
@@ -1009,24 +1046,24 @@ ssl_handle_read(struct comm_point* c)
c->tcp_byte_count += r;
if(c->tcp_byte_count != sizeof(uint16_t))
return 1;
- if(ldns_buffer_read_u16_at(c->buffer, 0) >
- ldns_buffer_capacity(c->buffer)) {
+ if(sldns_buffer_read_u16_at(c->buffer, 0) >
+ sldns_buffer_capacity(c->buffer)) {
verbose(VERB_QUERY, "ssl: dropped larger than buffer");
return 0;
}
- ldns_buffer_set_limit(c->buffer,
- ldns_buffer_read_u16_at(c->buffer, 0));
- if(ldns_buffer_limit(c->buffer) < LDNS_HEADER_SIZE) {
+ sldns_buffer_set_limit(c->buffer,
+ sldns_buffer_read_u16_at(c->buffer, 0));
+ if(sldns_buffer_limit(c->buffer) < LDNS_HEADER_SIZE) {
verbose(VERB_QUERY, "ssl: dropped bogus too short.");
return 0;
}
verbose(VERB_ALGO, "Reading ssl tcp query of length %d",
- (int)ldns_buffer_limit(c->buffer));
+ (int)sldns_buffer_limit(c->buffer));
}
- log_assert(ldns_buffer_remaining(c->buffer) > 0);
+ log_assert(sldns_buffer_remaining(c->buffer) > 0);
ERR_clear_error();
- r = SSL_read(c->ssl, (void*)ldns_buffer_current(c->buffer),
- (int)ldns_buffer_remaining(c->buffer));
+ r = SSL_read(c->ssl, (void*)sldns_buffer_current(c->buffer),
+ (int)sldns_buffer_remaining(c->buffer));
if(r <= 0) {
int want = SSL_get_error(c->ssl, r);
if(want == SSL_ERROR_ZERO_RETURN) {
@@ -1046,8 +1083,8 @@ ssl_handle_read(struct comm_point* c)
log_crypto_err("could not SSL_read");
return 0;
}
- ldns_buffer_skip(c->buffer, (ssize_t)r);
- if(ldns_buffer_remaining(c->buffer) <= 0) {
+ sldns_buffer_skip(c->buffer, (ssize_t)r);
+ if(sldns_buffer_remaining(c->buffer) <= 0) {
tcp_callback_reader(c);
}
return 1;
@@ -1072,7 +1109,7 @@ ssl_handle_write(struct comm_point* c)
/* ignore return, if fails we may simply block */
(void)SSL_set_mode(c->ssl, SSL_MODE_ENABLE_PARTIAL_WRITE);
if(c->tcp_byte_count < sizeof(uint16_t)) {
- uint16_t len = htons(ldns_buffer_limit(c->buffer));
+ uint16_t len = htons(sldns_buffer_limit(c->buffer));
ERR_clear_error();
r = SSL_write(c->ssl,
(void*)(((uint8_t*)&len)+c->tcp_byte_count),
@@ -1099,17 +1136,17 @@ ssl_handle_write(struct comm_point* c)
c->tcp_byte_count += r;
if(c->tcp_byte_count < sizeof(uint16_t))
return 1;
- ldns_buffer_set_position(c->buffer, c->tcp_byte_count -
+ sldns_buffer_set_position(c->buffer, c->tcp_byte_count -
sizeof(uint16_t));
- if(ldns_buffer_remaining(c->buffer) == 0) {
+ if(sldns_buffer_remaining(c->buffer) == 0) {
tcp_callback_writer(c);
return 1;
}
}
- log_assert(ldns_buffer_remaining(c->buffer) > 0);
+ log_assert(sldns_buffer_remaining(c->buffer) > 0);
ERR_clear_error();
- r = SSL_write(c->ssl, (void*)ldns_buffer_current(c->buffer),
- (int)ldns_buffer_remaining(c->buffer));
+ r = SSL_write(c->ssl, (void*)sldns_buffer_current(c->buffer),
+ (int)sldns_buffer_remaining(c->buffer));
if(r <= 0) {
int want = SSL_get_error(c->ssl, r);
if(want == SSL_ERROR_ZERO_RETURN) {
@@ -1129,9 +1166,9 @@ ssl_handle_write(struct comm_point* c)
log_crypto_err("could not SSL_write");
return 0;
}
- ldns_buffer_skip(c->buffer, (ssize_t)r);
+ sldns_buffer_skip(c->buffer, (ssize_t)r);
- if(ldns_buffer_remaining(c->buffer) == 0) {
+ if(sldns_buffer_remaining(c->buffer) == 0) {
tcp_callback_writer(c);
}
return 1;
@@ -1169,7 +1206,7 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok)
log_assert(fd != -1);
if(c->tcp_byte_count < sizeof(uint16_t)) {
/* read length bytes */
- r = recv(fd,(void*)ldns_buffer_at(c->buffer,c->tcp_byte_count),
+ r = recv(fd,(void*)sldns_buffer_at(c->buffer,c->tcp_byte_count),
sizeof(uint16_t)-c->tcp_byte_count, 0);
if(r == 0)
return 0;
@@ -1201,25 +1238,25 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok)
c->tcp_byte_count += r;
if(c->tcp_byte_count != sizeof(uint16_t))
return 1;
- if(ldns_buffer_read_u16_at(c->buffer, 0) >
- ldns_buffer_capacity(c->buffer)) {
+ if(sldns_buffer_read_u16_at(c->buffer, 0) >
+ sldns_buffer_capacity(c->buffer)) {
verbose(VERB_QUERY, "tcp: dropped larger than buffer");
return 0;
}
- ldns_buffer_set_limit(c->buffer,
- ldns_buffer_read_u16_at(c->buffer, 0));
+ sldns_buffer_set_limit(c->buffer,
+ sldns_buffer_read_u16_at(c->buffer, 0));
if(!short_ok &&
- ldns_buffer_limit(c->buffer) < LDNS_HEADER_SIZE) {
+ sldns_buffer_limit(c->buffer) < LDNS_HEADER_SIZE) {
verbose(VERB_QUERY, "tcp: dropped bogus too short.");
return 0;
}
verbose(VERB_ALGO, "Reading tcp query of length %d",
- (int)ldns_buffer_limit(c->buffer));
+ (int)sldns_buffer_limit(c->buffer));
}
- log_assert(ldns_buffer_remaining(c->buffer) > 0);
- r = recv(fd, (void*)ldns_buffer_current(c->buffer),
- ldns_buffer_remaining(c->buffer), 0);
+ log_assert(sldns_buffer_remaining(c->buffer) > 0);
+ r = recv(fd, (void*)sldns_buffer_current(c->buffer),
+ sldns_buffer_remaining(c->buffer), 0);
if(r == 0) {
return 0;
} else if(r == -1) {
@@ -1243,8 +1280,8 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok)
c->repinfo.addrlen);
return 0;
}
- ldns_buffer_skip(c->buffer, r);
- if(ldns_buffer_remaining(c->buffer) <= 0) {
+ sldns_buffer_skip(c->buffer, r);
+ if(sldns_buffer_remaining(c->buffer) <= 0) {
tcp_callback_reader(c);
}
return 1;
@@ -1308,13 +1345,13 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c)
return ssl_handle_it(c);
if(c->tcp_byte_count < sizeof(uint16_t)) {
- uint16_t len = htons(ldns_buffer_limit(c->buffer));
+ uint16_t len = htons(sldns_buffer_limit(c->buffer));
#ifdef HAVE_WRITEV
struct iovec iov[2];
iov[0].iov_base = (uint8_t*)&len + c->tcp_byte_count;
iov[0].iov_len = sizeof(uint16_t) - c->tcp_byte_count;
- iov[1].iov_base = ldns_buffer_begin(c->buffer);
- iov[1].iov_len = ldns_buffer_limit(c->buffer);
+ iov[1].iov_base = sldns_buffer_begin(c->buffer);
+ iov[1].iov_len = sldns_buffer_limit(c->buffer);
log_assert(iov[0].iov_len > 0);
log_assert(iov[1].iov_len > 0);
r = writev(fd, iov, 2);
@@ -1350,16 +1387,16 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c)
c->tcp_byte_count += r;
if(c->tcp_byte_count < sizeof(uint16_t))
return 1;
- ldns_buffer_set_position(c->buffer, c->tcp_byte_count -
+ sldns_buffer_set_position(c->buffer, c->tcp_byte_count -
sizeof(uint16_t));
- if(ldns_buffer_remaining(c->buffer) == 0) {
+ if(sldns_buffer_remaining(c->buffer) == 0) {
tcp_callback_writer(c);
return 1;
}
}
- log_assert(ldns_buffer_remaining(c->buffer) > 0);
- r = send(fd, (void*)ldns_buffer_current(c->buffer),
- ldns_buffer_remaining(c->buffer), 0);
+ log_assert(sldns_buffer_remaining(c->buffer) > 0);
+ r = send(fd, (void*)sldns_buffer_current(c->buffer),
+ sldns_buffer_remaining(c->buffer), 0);
if(r == -1) {
#ifndef USE_WINSOCK
if(errno == EINTR || errno == EAGAIN)
@@ -1379,9 +1416,9 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c)
c->repinfo.addrlen);
return 0;
}
- ldns_buffer_skip(c->buffer, r);
+ sldns_buffer_skip(c->buffer, r);
- if(ldns_buffer_remaining(c->buffer) == 0) {
+ if(sldns_buffer_remaining(c->buffer) == 0) {
tcp_callback_writer(c);
}
@@ -1464,7 +1501,7 @@ void comm_point_raw_handle_callback(int ATTR_UNUSED(fd),
}
struct comm_point*
-comm_point_create_udp(struct comm_base *base, int fd, ldns_buffer* buffer,
+comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer,
comm_point_callback_t* callback, void* callback_arg)
{
struct comm_point* c = (struct comm_point*)calloc(1,
@@ -1514,7 +1551,7 @@ comm_point_create_udp(struct comm_base *base, int fd, ldns_buffer* buffer,
struct comm_point*
comm_point_create_udp_ancil(struct comm_base *base, int fd,
- ldns_buffer* buffer,
+ sldns_buffer* buffer,
comm_point_callback_t* callback, void* callback_arg)
{
struct comm_point* c = (struct comm_point*)calloc(1,
@@ -1580,7 +1617,7 @@ comm_point_create_tcp_handler(struct comm_base *base,
}
c->ev->base = base;
c->fd = -1;
- c->buffer = ldns_buffer_new(bufsize);
+ c->buffer = sldns_buffer_new(bufsize);
if(!c->buffer) {
free(c->ev);
free(c);
@@ -1588,7 +1625,7 @@ comm_point_create_tcp_handler(struct comm_base *base,
}
c->timeout = (struct timeval*)malloc(sizeof(struct timeval));
if(!c->timeout) {
- ldns_buffer_free(c->buffer);
+ sldns_buffer_free(c->buffer);
free(c->ev);
free(c);
return NULL;
@@ -1705,7 +1742,7 @@ comm_point_create_tcp_out(struct comm_base *base, size_t bufsize,
}
c->ev->base = base;
c->fd = -1;
- c->buffer = ldns_buffer_new(bufsize);
+ c->buffer = sldns_buffer_new(bufsize);
if(!c->buffer) {
free(c->ev);
free(c);
@@ -1731,7 +1768,7 @@ comm_point_create_tcp_out(struct comm_base *base, size_t bufsize,
if(event_base_set(base->eb->base, &c->ev->ev) != 0)
{
log_err("could not basetset tcpout event");
- ldns_buffer_free(c->buffer);
+ sldns_buffer_free(c->buffer);
free(c->ev);
free(c);
return NULL;
@@ -1757,7 +1794,7 @@ comm_point_create_local(struct comm_base *base, int fd, size_t bufsize,
}
c->ev->base = base;
c->fd = fd;
- c->buffer = ldns_buffer_new(bufsize);
+ c->buffer = sldns_buffer_new(bufsize);
if(!c->buffer) {
free(c->ev);
free(c);
@@ -1882,7 +1919,7 @@ comm_point_delete(struct comm_point* c)
}
free(c->timeout);
if(c->type == comm_tcp || c->type == comm_local)
- ldns_buffer_free(c->buffer);
+ sldns_buffer_free(c->buffer);
free(c->ev);
free(c);
}
@@ -1994,7 +2031,7 @@ size_t comm_point_get_mem(struct comm_point* c)
if(c->timeout)
s += sizeof(*c->timeout);
if(c->type == comm_tcp || c->type == comm_local)
- s += sizeof(*c->buffer) + ldns_buffer_capacity(c->buffer);
+ s += sizeof(*c->buffer) + sldns_buffer_capacity(c->buffer);
if(c->type == comm_tcp_accept) {
int i;
for(i=0; i<c->max_tcp_count; i++)
diff --git a/contrib/unbound/util/netevent.h b/contrib/unbound/util/netevent.h
index 0ea4cf0..fe28ca5 100644
--- a/contrib/unbound/util/netevent.h
+++ b/contrib/unbound/util/netevent.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -60,7 +60,7 @@
#ifndef NET_EVENT_H
#define NET_EVENT_H
-#include <ldns/buffer.h>
+struct sldns_buffer;
struct comm_point;
struct comm_reply;
struct event_base;
@@ -149,7 +149,7 @@ struct comm_point {
struct timeval* timeout;
/** buffer pointer. Either to perthread, or own buffer or NULL */
- ldns_buffer* buffer;
+ struct sldns_buffer* buffer;
/* -------- TCP Handler -------- */
/** Read/Write state for TCP */
@@ -295,6 +295,21 @@ struct comm_signal {
struct comm_base* comm_base_create(int sigs);
/**
+ * Create comm base that uses the given event_base (underlying event
+ * mechanism pointer).
+ * @param base: underlying lib event base.
+ * @return: the new comm base. NULL on error.
+ */
+struct comm_base* comm_base_create_event(struct event_base* base);
+
+/**
+ * Delete comm base structure but not the underlying lib event base.
+ * All comm points must have been deleted.
+ * @param b: the base to delete.
+ */
+void comm_base_delete_no_base(struct comm_base* b);
+
+/**
* Destroy a comm base.
* All comm points must have been deleted.
* @param b: the base to delete.
@@ -308,7 +323,7 @@ void comm_base_delete(struct comm_base* b);
* @param tt: pointer to time in seconds is returned.
* @param tv: pointer to time in microseconds is returned.
*/
-void comm_base_timept(struct comm_base* b, uint32_t** tt, struct timeval** tv);
+void comm_base_timept(struct comm_base* b, time_t** tt, struct timeval** tv);
/**
* Dispatch the comm base events.
@@ -352,7 +367,7 @@ struct event_base* comm_base_internal(struct comm_base* b);
* Sets timeout to NULL. Turns off TCP options.
*/
struct comm_point* comm_point_create_udp(struct comm_base* base,
- int fd, ldns_buffer* buffer,
+ int fd, struct sldns_buffer* buffer,
comm_point_callback_t* callback, void* callback_arg);
/**
@@ -368,7 +383,7 @@ struct comm_point* comm_point_create_udp(struct comm_base* base,
* Sets timeout to NULL. Turns off TCP options.
*/
struct comm_point* comm_point_create_udp_ancil(struct comm_base* base,
- int fd, ldns_buffer* buffer,
+ int fd, struct sldns_buffer* buffer,
comm_point_callback_t* callback, void* callback_arg);
/**
@@ -462,7 +477,7 @@ void comm_point_drop_reply(struct comm_reply* repinfo);
* @param addrlen: length of addr.
* @return: false on a failure.
*/
-int comm_point_send_udp_msg(struct comm_point* c, ldns_buffer* packet,
+int comm_point_send_udp_msg(struct comm_point* c, struct sldns_buffer* packet,
struct sockaddr* addr, socklen_t addrlen);
/**
diff --git a/contrib/unbound/util/random.c b/contrib/unbound/util/random.c
index 5d71fcf..8a24ff0 100644
--- a/contrib/unbound/util/random.c
+++ b/contrib/unbound/util/random.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -60,6 +60,7 @@
#include "config.h"
#include "util/random.h"
#include "util/log.h"
+#include <time.h>
#ifdef HAVE_SSL
#include <openssl/rand.h>
#include <openssl/rc4.h>
diff --git a/contrib/unbound/util/random.h b/contrib/unbound/util/random.h
index 99879dc..a05a994 100644
--- a/contrib/unbound/util/random.h
+++ b/contrib/unbound/util/random.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef UTIL_RANDOM_H
diff --git a/contrib/unbound/util/rbtree.c b/contrib/unbound/util/rbtree.c
index d31afd9..a898f13 100644
--- a/contrib/unbound/util/rbtree.c
+++ b/contrib/unbound/util/rbtree.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
diff --git a/contrib/unbound/util/rbtree.h b/contrib/unbound/util/rbtree.h
index 879804d..50c84bb 100644
--- a/contrib/unbound/util/rbtree.h
+++ b/contrib/unbound/util/rbtree.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
diff --git a/contrib/unbound/util/regional.c b/contrib/unbound/util/regional.c
index 8b1fcdb..899a54e 100644
--- a/contrib/unbound/util/regional.c
+++ b/contrib/unbound/util/regional.c
@@ -23,16 +23,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/regional.h b/contrib/unbound/util/regional.h
index 250523a..e8b2cb8 100644
--- a/contrib/unbound/util/regional.h
+++ b/contrib/unbound/util/regional.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/rtt.c b/contrib/unbound/util/rtt.c
index c888b08..4b44fca 100644
--- a/contrib/unbound/util/rtt.c
+++ b/contrib/unbound/util/rtt.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/rtt.h b/contrib/unbound/util/rtt.h
index 1af5484..57e904d 100644
--- a/contrib/unbound/util/rtt.h
+++ b/contrib/unbound/util/rtt.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/storage/dnstree.c b/contrib/unbound/util/storage/dnstree.c
index 003e8af..0df490e 100644
--- a/contrib/unbound/util/storage/dnstree.c
+++ b/contrib/unbound/util/storage/dnstree.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/storage/dnstree.h b/contrib/unbound/util/storage/dnstree.h
index 3ecbd12..ec81891 100644
--- a/contrib/unbound/util/storage/dnstree.h
+++ b/contrib/unbound/util/storage/dnstree.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/storage/lookup3.c b/contrib/unbound/util/storage/lookup3.c
index 845cc38..7596033 100644
--- a/contrib/unbound/util/storage/lookup3.c
+++ b/contrib/unbound/util/storage/lookup3.c
@@ -50,6 +50,9 @@ on 1 byte), but shoehorning those bytes into integers efficiently is messy.
#include <time.h> /* defines time_t for timings in the test */
/*#include <stdint.h> defines uint32_t etc (from config.h) */
#include <sys/param.h> /* attempt to define endianness */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h> /* attempt to define endianness (solaris) */
+#endif
#ifdef linux
# include <endian.h> /* attempt to define endianness */
#endif
@@ -61,7 +64,7 @@ on 1 byte), but shoehorning those bytes into integers efficiently is messy.
#endif
/* random initial value */
-static uint32_t raninit = 0xdeadbeef;
+static uint32_t raninit = (uint32_t)0xdeadbeef;
void
hash_set_raninit(uint32_t v)
@@ -75,22 +78,25 @@ hash_set_raninit(uint32_t v)
*/
#if (defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && \
__BYTE_ORDER == __LITTLE_ENDIAN) || \
- (defined(_BYTE_ORDER) && defined(_LITTLE_ENDIAN) && \
- _BYTE_ORDER == _LITTLE_ENDIAN) || \
(defined(i386) || defined(__i386__) || defined(__i486__) || \
- defined(__i586__) || defined(__i686__) || defined(vax) || defined(MIPSEL))
+ defined(__i586__) || defined(__i686__) || defined(vax) || defined(MIPSEL) || defined(__x86))
# define HASH_LITTLE_ENDIAN 1
# define HASH_BIG_ENDIAN 0
-#elif (!defined(_BYTE_ORDER) && !defined(__BYTE_ORDER) && defined(_BIG_ENDIAN))
-# define HASH_LITTLE_ENDIAN 0
-# define HASH_BIG_ENDIAN 1
#elif (defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && \
__BYTE_ORDER == __BIG_ENDIAN) || \
- (defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && \
- _BYTE_ORDER == _BIG_ENDIAN) || \
- (defined(sparc) || defined(POWERPC) || defined(mc68000) || defined(sel))
+ (defined(sparc) || defined(__sparc) || defined(__sparc__) || defined(POWERPC) || defined(mc68000) || defined(sel))
# define HASH_LITTLE_ENDIAN 0
# define HASH_BIG_ENDIAN 1
+#elif defined(_MACHINE_ENDIAN_H_)
+/* test for machine_endian_h protects failure if some are empty strings */
+# if defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && _BYTE_ORDER == _BIG_ENDIAN
+# define HASH_LITTLE_ENDIAN 0
+# define HASH_BIG_ENDIAN 1
+# endif
+# if defined(_BYTE_ORDER) && defined(_LITTLE_ENDIAN) && _BYTE_ORDER == _LITTLE_ENDIAN
+# define HASH_LITTLE_ENDIAN 1
+# define HASH_BIG_ENDIAN 0
+# endif /* _MACHINE_ENDIAN_H_ */
#else
# define HASH_LITTLE_ENDIAN 0
# define HASH_BIG_ENDIAN 0
diff --git a/contrib/unbound/util/storage/lookup3.h b/contrib/unbound/util/storage/lookup3.h
index 06211fd..59dad7c 100644
--- a/contrib/unbound/util/storage/lookup3.h
+++ b/contrib/unbound/util/storage/lookup3.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/storage/lruhash.c b/contrib/unbound/util/storage/lruhash.c
index c22278d..2c987a2 100644
--- a/contrib/unbound/util/storage/lruhash.c
+++ b/contrib/unbound/util/storage/lruhash.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/storage/lruhash.h b/contrib/unbound/util/storage/lruhash.h
index d0efe2d..30377d8 100644
--- a/contrib/unbound/util/storage/lruhash.h
+++ b/contrib/unbound/util/storage/lruhash.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/storage/slabhash.c b/contrib/unbound/util/storage/slabhash.c
index 9c0c507..128edd8 100644
--- a/contrib/unbound/util/storage/slabhash.c
+++ b/contrib/unbound/util/storage/slabhash.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/storage/slabhash.h b/contrib/unbound/util/storage/slabhash.h
index 93228fe..cf968f9 100644
--- a/contrib/unbound/util/storage/slabhash.h
+++ b/contrib/unbound/util/storage/slabhash.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/timehist.c b/contrib/unbound/util/timehist.c
index 98d8db1..dbf5b98 100644
--- a/contrib/unbound/util/timehist.c
+++ b/contrib/unbound/util/timehist.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -43,6 +43,7 @@
#include <time.h>
#endif
#include <sys/time.h>
+#include <sys/types.h>
#include "util/timehist.h"
#include "util/log.h"
diff --git a/contrib/unbound/util/timehist.h b/contrib/unbound/util/timehist.h
index d594483..5c65048 100644
--- a/contrib/unbound/util/timehist.h
+++ b/contrib/unbound/util/timehist.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/tube.c b/contrib/unbound/util/tube.c
index 28c51d7..2106a078 100644
--- a/contrib/unbound/util/tube.c
+++ b/contrib/unbound/util/tube.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -368,7 +368,7 @@ int tube_read_msg(struct tube* tube, uint8_t** buf, uint32_t* len,
return 0;
}
d = 0;
- while(d != (ssize_t)*len) {
+ while(d < (ssize_t)*len) {
if((r=read(fd, (*buf)+d, (size_t)((ssize_t)*len)-d)) == -1) {
log_err("tube msg read failed: %s", strerror(errno));
(void)fd_set_nonblock(fd);
diff --git a/contrib/unbound/util/tube.h b/contrib/unbound/util/tube.h
index 2e70411..9ec50af 100644
--- a/contrib/unbound/util/tube.h
+++ b/contrib/unbound/util/tube.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
diff --git a/contrib/unbound/util/winsock_event.c b/contrib/unbound/util/winsock_event.c
index ff5c9b0..38661a5e 100644
--- a/contrib/unbound/util/winsock_event.c
+++ b/contrib/unbound/util/winsock_event.c
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* \file
@@ -41,6 +41,10 @@
#include "config.h"
#ifdef USE_WINSOCK
#include <signal.h>
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#include <sys/time.h>
#include "util/winsock_event.h"
#include "util/fptr_wlist.h"
@@ -71,7 +75,7 @@ settime(struct event_base* base)
return -1;
}
#ifndef S_SPLINT_S
- *base->time_secs = (uint32_t)base->time_tv->tv_sec;
+ *base->time_secs = (time_t)base->time_tv->tv_sec;
#endif
return 0;
}
@@ -108,7 +112,7 @@ zero_waitfor(WSAEVENT waitfor[], WSAEVENT x)
}
}
-void *event_init(uint32_t* time_secs, struct timeval* time_tv)
+void *event_init(time_t* time_secs, struct timeval* time_tv)
{
struct event_base* base = (struct event_base*)malloc(
sizeof(struct event_base));
@@ -181,8 +185,8 @@ static void handle_timeouts(struct event_base* base, struct timeval* now,
wait->tv_usec = p->ev_timeout.tv_usec
- now->tv_usec;
}
- verbose(VERB_CLIENT, "winsock_event wait=%d.%6.6d",
- (int)wait->tv_sec, (int)wait->tv_usec);
+ verbose(VERB_CLIENT, "winsock_event wait=" ARG_LL "d.%6.6d",
+ (long long)wait->tv_sec, (int)wait->tv_usec);
return;
}
#endif
@@ -488,9 +492,9 @@ int event_base_set(struct event_base *base, struct event *ev)
int event_add(struct event *ev, struct timeval *tv)
{
- verbose(VERB_ALGO, "event_add %p added=%d fd=%d tv=%d %s%s%s",
+ verbose(VERB_ALGO, "event_add %p added=%d fd=%d tv=" ARG_LL "d %s%s%s",
ev, ev->added, ev->ev_fd,
- (tv?(int)tv->tv_sec*1000+(int)tv->tv_usec/1000:-1),
+ (tv?(long long)tv->tv_sec*1000+(long long)tv->tv_usec/1000:-1),
(ev->ev_events&EV_READ)?" EV_READ":"",
(ev->ev_events&EV_WRITE)?" EV_WRITE":"",
(ev->ev_events&EV_TIMEOUT)?" EV_TIMEOUT":"");
@@ -569,10 +573,10 @@ int event_add(struct event *ev, struct timeval *tv)
int event_del(struct event *ev)
{
- verbose(VERB_ALGO, "event_del %p added=%d fd=%d tv=%d %s%s%s",
+ verbose(VERB_ALGO, "event_del %p added=%d fd=%d tv=" ARG_LL "d %s%s%s",
ev, ev->added, ev->ev_fd,
- (ev->ev_events&EV_TIMEOUT)?(int)ev->ev_timeout.tv_sec*1000+
- (int)ev->ev_timeout.tv_usec/1000:-1,
+ (ev->ev_events&EV_TIMEOUT)?(long long)ev->ev_timeout.tv_sec*1000+
+ (long long)ev->ev_timeout.tv_usec/1000:-1,
(ev->ev_events&EV_READ)?" EV_READ":"",
(ev->ev_events&EV_WRITE)?" EV_WRITE":"",
(ev->ev_events&EV_TIMEOUT)?" EV_TIMEOUT":"");
diff --git a/contrib/unbound/util/winsock_event.h b/contrib/unbound/util/winsock_event.h
index 088283e..40892c1 100644
--- a/contrib/unbound/util/winsock_event.h
+++ b/contrib/unbound/util/winsock_event.h
@@ -21,16 +21,16 @@
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
@@ -129,7 +129,7 @@ struct event_base
/** if we need to exit */
int need_to_exit;
/** where to store time in seconds */
- uint32_t* time_secs;
+ time_t* time_secs;
/** where to store time in microseconds */
struct timeval* time_tv;
/**
@@ -194,7 +194,7 @@ struct event {
};
/** create event base */
-void *event_init(uint32_t* time_secs, struct timeval* time_tv);
+void *event_init(time_t* time_secs, struct timeval* time_tv);
/** get version */
const char *event_get_version(void);
/** get polling method (select,epoll) */
OpenPOWER on IntegriCloud