Codebase list unbound / 6a13b51
- Fix contrib/fastrpz.patch to apply cleanly. W.C.A. Wijngaards 3 years ago
1 changed file(s) with 59 addition(s) and 59 deletion(s). Raw diff Collapse all Expand all
11 Author: fastrpz@farsightsecurity.com
22 ---
33 diff --git a/Makefile.in b/Makefile.in
4 index a20058cc..495779cc 100644
4 index bac212df..4824927f 100644
55 --- a/Makefile.in
66 +++ b/Makefile.in
77 @@ -23,6 +23,8 @@ CHECKLOCK_SRC=testcode/checklocks.c
1212 +FASTRPZ_OBJ=@FASTRPZ_OBJ@
1313 DNSCRYPT_SRC=@DNSCRYPT_SRC@
1414 DNSCRYPT_OBJ=@DNSCRYPT_OBJ@
15 WITH_PYTHONMODULE=@WITH_PYTHONMODULE@
16 @@ -127,7 +129,7 @@ validator/val_sigcrypt.c validator/val_utils.c dns64/dns64.c \
15 WITH_DYNLIBMODULE=@WITH_DYNLIBMODULE@
16 @@ -134,7 +136,7 @@ validator/val_sigcrypt.c validator/val_utils.c dns64/dns64.c \
1717 edns-subnet/edns-subnet.c edns-subnet/subnetmod.c \
1818 edns-subnet/addrtree.c edns-subnet/subnet-whitelist.c \
1919 cachedb/cachedb.c cachedb/redis.c respip/respip.c $(CHECKLOCK_SRC) \
2222 COMMON_OBJ_WITHOUT_NETCALL=dns.lo infra.lo rrset.lo dname.lo msgencode.lo \
2323 as112.lo msgparse.lo msgreply.lo packed_rrset.lo iterator.lo iter_delegpt.lo \
2424 iter_donotq.lo iter_fwd.lo iter_hints.lo iter_priv.lo iter_resptype.lo \
25 @@ -140,7 +142,7 @@ autotrust.lo val_anchor.lo rpz.lo \
25 @@ -147,7 +149,7 @@ autotrust.lo val_anchor.lo rpz.lo \
2626 validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \
2727 val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo redis.lo authzone.lo \
2828 $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \
3131 COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \
3232 outside_network.lo
3333 COMMON_OBJ=$(COMMON_OBJ_WITHOUT_UB_EVENT) ub_event.lo
34 @@ -410,6 +412,11 @@ dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h \
34 @@ -428,6 +430,11 @@ dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h \
3535 $(srcdir)/util/config_file.h $(srcdir)/util/log.h \
3636 $(srcdir)/util/netevent.h
3737
4444 pythonmod.lo pythonmod.o: $(srcdir)/pythonmod/pythonmod.c config.h \
4545 pythonmod/interface.h \
4646 diff --git a/config.h.in b/config.h.in
47 index 78d47fed..e33073e4 100644
47 index f7a4095e..d5a4fa01 100644
4848 --- a/config.h.in
4949 +++ b/config.h.in
50 @@ -1345,4 +1345,11 @@ void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
50 @@ -1364,4 +1364,11 @@ void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
5151 /** the version of unbound-control that this software implements */
5252 #define UNBOUND_CONTROL_VERSION 1
5353
6161 +/** turn on fastrpz response policy zones */
6262 +#undef ENABLE_FASTRPZ
6363 diff --git a/configure.ac b/configure.ac
64 index 2b91dd3c..e6063d17 100644
64 index 5c373d9d..e45abd89 100644
6565 --- a/configure.ac
6666 +++ b/configure.ac
6767 @@ -6,6 +6,7 @@ sinclude(ax_pthread.m4)
7272 sinclude(dnscrypt/dnscrypt.m4)
7373
7474 # must be numbers. ac_defun because of later processing
75 @@ -1778,6 +1779,9 @@ case "$enable_ipset" in
76 ;;
75 @@ -1819,6 +1820,9 @@ case "$enable_explicit_port_randomisation" in
7776 esac
77
7878
7979 +# check for Fastrpz with fastrpz/rpz.m4
8080 +ck_FASTRPZ
8383 # on openBSD, the implicit rule make $< work.
8484 # on Solaris, it does not work ($? is changed sources, $^ lists dependencies).
8585 diff --git a/daemon/daemon.c b/daemon/daemon.c
86 index 8b0fc348..7ffb9221 100644
86 index 5d427925..f89f1437 100644
8787 --- a/daemon/daemon.c
8888 +++ b/daemon/daemon.c
8989 @@ -91,6 +91,9 @@
9696
9797 #ifdef HAVE_SYSTEMD
9898 #include <systemd/sd-daemon.h>
99 @@ -458,6 +461,14 @@ daemon_create_workers(struct daemon* daemon)
100 dt_apply_cfg(daemon->dtenv, daemon->cfg);
99 @@ -456,6 +459,14 @@ daemon_create_workers(struct daemon* daemon)
100 fatal_exit("dt_create failed");
101101 #else
102102 fatal_exit("dnstap enabled in config but not built with dnstap support");
103103 +#endif
111111 #endif
112112 }
113113 for(i=0; i<daemon->num; i++) {
114 @@ -731,6 +742,9 @@ daemon_cleanup(struct daemon* daemon)
114 @@ -729,6 +740,9 @@ daemon_cleanup(struct daemon* daemon)
115115 #ifdef USE_DNSCRYPT
116116 dnsc_delete(daemon->dnscenv);
117117 daemon->dnscenv = NULL;
138138
139139 /**
140140 diff --git a/daemon/worker.c b/daemon/worker.c
141 index eb7fdf2f..1982228d 100644
141 index 23e3244c..b63d49b7 100644
142142 --- a/daemon/worker.c
143143 +++ b/daemon/worker.c
144144 @@ -76,6 +76,9 @@
151151 #include "sldns/wire2str.h"
152152 #include "util/shm_side/shm_main.h"
153153 #include "dnscrypt/dnscrypt.h"
154 @@ -534,8 +537,27 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
154 @@ -535,8 +538,27 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
155155 /* not secure */
156156 secure = 0;
157157 break;
179179 /* return this delegation from the cache */
180180 edns_bak = *edns;
181181 edns->edns_version = EDNS_ADVERTISED_VERSION;
182 @@ -710,6 +732,23 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo,
182 @@ -711,6 +733,23 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo,
183183 *is_secure_answer = 0;
184184 }
185185 } else *is_secure_answer = 0;
203203
204204 edns_bak = *edns;
205205 edns->edns_version = EDNS_ADVERTISED_VERSION;
206 @@ -1435,6 +1474,15 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
206 @@ -1436,6 +1475,15 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
207207 log_addr(VERB_ALGO, "refused nonrec (cache snoop) query from",
208208 &repinfo->addr, repinfo->addrlen);
209209 goto send_reply;
219219 }
220220
221221 /* If we've found a local alias, replace the qname with the alias
222 @@ -1485,12 +1533,21 @@ lookup_cache:
222 @@ -1486,12 +1534,21 @@ lookup_cache:
223223 h = query_info_hash(lookup_qinfo, sldns_buffer_read_u16_at(c->buffer, 2));
224224 if((e=slabhash_lookup(worker->env.msg_cache, h, lookup_qinfo, 0))) {
225225 /* answer from cache - we have acquired a readlock on it */
243243 /* prefetch it if the prefetch TTL expired.
244244 * Note that if there is more than one pass
245245 * its qname must be that used for cache
246 @@ -1547,11 +1604,19 @@ lookup_cache:
246 @@ -1548,11 +1605,19 @@ lookup_cache:
247247 lock_rw_unlock(&e->lock);
248248 }
249249 if(!LDNS_RD_WIRE(sldns_buffer_begin(c->buffer))) {
266266 }
267267 verbose(VERB_ALGO, "answer norec from cache -- "
268268 diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in
269 index 38c2d298..3b07f392 100644
269 index cd43f04e..b92a1af8 100644
270270 --- a/doc/unbound.conf.5.in
271271 +++ b/doc/unbound.conf.5.in
272 @@ -1828,6 +1828,81 @@ List domain for which the AAAA records are ignored and the A record is
272 @@ -1878,6 +1878,81 @@ List domain for which the AAAA records are ignored and the A record is
273273 used by dns64 processing instead. Can be entered multiple times, list a
274274 new domain for which it applies, one per line. Applies also to names
275275 underneath the name given.
28872887 + fi
28882888 +])
28892889 diff --git a/iterator/iterator.c b/iterator/iterator.c
2890 index 1e0113a8..2fcbf547 100644
2890 index 23b07ea9..c3d31a33 100644
28912891 --- a/iterator/iterator.c
28922892 +++ b/iterator/iterator.c
28932893 @@ -68,6 +68,9 @@
29002900
29012901 /* in msec */
29022902 int UNKNOWN_SERVER_NICENESS = 376;
2903 @@ -555,6 +558,23 @@ handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq,
2903 @@ -563,6 +566,23 @@ handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq,
29042904 if(ntohs(r->rk.type) == LDNS_RR_TYPE_CNAME &&
29052905 query_dname_compare(*mname, r->rk.dname) == 0 &&
29062906 !iter_find_rrset_in_prepend_answer(iq, r)) {
29242924 /* Add this relevant CNAME rrset to the prepend list.*/
29252925 if(!iter_add_prepend_answer(qstate, iq, r))
29262926 return 0;
2927 @@ -563,6 +583,9 @@ handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq,
2927 @@ -571,6 +591,9 @@ handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq,
29282928
29292929 /* Other rrsets in the section are ignored. */
29302930 }
29342934 /* add authority rrsets to authority prepend, for wildcarded CNAMEs */
29352935 for(i=msg->rep->an_numrrsets; i<msg->rep->an_numrrsets +
29362936 msg->rep->ns_numrrsets; i++) {
2937 @@ -1199,6 +1222,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
2937 @@ -1231,6 +1254,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
29382938 uint8_t* delname;
29392939 size_t delnamelen;
29402940 struct dns_msg* msg = NULL;
29422942
29432943 log_query_info(VERB_DETAIL, "resolving", &qstate->qinfo);
29442944 /* check effort */
2945 @@ -1285,8 +1309,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
2945 @@ -1317,8 +1341,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
29462946 }
29472947 if(msg) {
29482948 /* handle positive cache response */
29522952 if(verbosity >= VERB_ALGO) {
29532953 log_dns_msg("msg from cache lookup", &msg->qinfo,
29542954 msg->rep);
2955 @@ -1294,7 +1317,22 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
2955 @@ -1326,7 +1349,22 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
29562956 (int)msg->rep->ttl,
29572957 (int)msg->rep->prefetch_ttl);
29582958 }
29752975 if(type == RESPONSE_TYPE_CNAME) {
29762976 uint8_t* sname = 0;
29772977 size_t slen = 0;
2978 @@ -2718,6 +2756,62 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
2978 @@ -2801,6 +2839,62 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
29792979 sock_list_insert(&qstate->reply_origin,
29802980 &qstate->reply->addr, qstate->reply->addrlen,
29812981 qstate->region);
30383038 if(iq->minimisation_state != DONOT_MINIMISE_STATE
30393039 && !(iq->chase_flags & BIT_RD)) {
30403040 if(FLAGS_GET_RCODE(iq->response->rep->flags) !=
3041 @@ -3471,12 +3565,44 @@ processFinished(struct module_qstate* qstate, struct iter_qstate* iq,
3041 @@ -3563,12 +3657,44 @@ processFinished(struct module_qstate* qstate, struct iter_qstate* iq,
30423042 * but only if we did recursion. The nonrecursion referral
30433043 * from cache does not need to be stored in the msg cache. */
30443044 if(!qstate->no_cache_store && qstate->query_flags&BIT_RD) {
30843084 qstate->return_msg = iq->response;
30853085 return 0;
30863086 diff --git a/iterator/iterator.h b/iterator/iterator.h
3087 index a2f1b570..e1e4a738 100644
3087 index 342ac207..49b0ecdd 100644
30883088 --- a/iterator/iterator.h
30893089 +++ b/iterator/iterator.h
3090 @@ -386,6 +386,16 @@ struct iter_qstate {
3090 @@ -396,6 +396,16 @@ struct iter_qstate {
30913091 */
30923092 int minimise_count;
30933093
31033103 +
31043104 /**
31053105 * Count number of time-outs. Used to prevent resolving failures when
3106 * the QNAME minimisation QTYPE is blocked. */
3106 * the QNAME minimisation QTYPE is blocked. Used to determine if
31073107 diff --git a/services/cache/dns.c b/services/cache/dns.c
3108 index 2a5bca4a..6de8863a 100644
3108 index 7b6e142c..6d7449f5 100644
31093109 --- a/services/cache/dns.c
31103110 +++ b/services/cache/dns.c
3111 @@ -967,6 +967,14 @@ dns_cache_store(struct module_env* env, struct query_info* msgqinf,
3111 @@ -969,6 +969,14 @@ dns_cache_store(struct module_env* env, struct query_info* msgqinf,
31123112 struct regional* region, uint32_t flags)
31133113 {
31143114 struct reply_info* rep = NULL;
31243124 rep = reply_info_copy(msgrep, env->alloc, NULL);
31253125 if(!rep)
31263126 diff --git a/services/mesh.c b/services/mesh.c
3127 index 9114ef4c..3dc518e5 100644
3127 index 4b0c5db4..eb9cfa5b 100644
31283128 --- a/services/mesh.c
31293129 +++ b/services/mesh.c
31303130 @@ -61,6 +61,9 @@
31373137 #include "respip/respip.h"
31383138 #include "services/listen_dnsport.h"
31393139
3140 @@ -1195,6 +1198,13 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
3140 @@ -1207,6 +1210,13 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
31413141 else secure = 0;
31423142 if(!rep && rcode == LDNS_RCODE_NOERROR)
31433143 rcode = LDNS_RCODE_SERVFAIL;
31513151 /* send the reply */
31523152 /* We don't reuse the encoded answer if either the previous or current
31533153 * response has a local alias. We could compare the alias records
3154 @@ -1415,6 +1425,7 @@ struct mesh_state* mesh_area_find(struct mesh_area* mesh,
3154 @@ -1434,6 +1444,7 @@ struct mesh_state* mesh_area_find(struct mesh_area* mesh,
31553155 key.s.is_valrec = valrec;
31563156 key.s.qinfo = *qinfo;
31573157 key.s.query_flags = qflags;
31593159 /* We are searching for a similar mesh state when we DO want to
31603160 * aggregate the state. Thus unique is set to NULL. (default when we
31613161 * desire aggregation).*/
3162 @@ -1461,6 +1472,10 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
3162 @@ -1480,6 +1491,10 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
31633163 if(!r)
31643164 return 0;
31653165 r->query_reply = *rep;
31713171 if(edns->opt_list) {
31723172 r->edns.opt_list = edns_opt_copy_region(edns->opt_list,
31733173 diff --git a/util/config_file.c b/util/config_file.c
3174 index 52ca5a18..0660248f 100644
3174 index 0e9ee471..a5fd72e0 100644
31753175 --- a/util/config_file.c
31763176 +++ b/util/config_file.c
3177 @@ -1460,6 +1460,8 @@ config_delete(struct config_file* cfg)
3178 free(cfg->dnstap_socket_path);
3177 @@ -1495,6 +1495,8 @@ config_delete(struct config_file* cfg)
3178 free(cfg->dnstap_tls_client_cert_file);
31793179 free(cfg->dnstap_identity);
31803180 free(cfg->dnstap_version);
31813181 + if (cfg->rpz_cstr)
31843184 config_deldblstrlist(cfg->ratelimit_below_domain);
31853185 config_delstrlist(cfg->python_script);
31863186 diff --git a/util/config_file.h b/util/config_file.h
3187 index 8739ca2a..a2dcf215 100644
3187 index 66e5025d..504f4f92 100644
31883188 --- a/util/config_file.h
31893189 +++ b/util/config_file.h
3190 @@ -499,6 +499,11 @@ struct config_file {
3190 @@ -522,6 +522,11 @@ struct config_file {
31913191 /** true to disable DNSSEC lameness check in iterator */
31923192 int disable_dnssec_lame_check;
31933193
32003200 int ip_ratelimit;
32013201 /** number of slabs for ip_ratelimit cache */
32023202 diff --git a/util/configlexer.lex b/util/configlexer.lex
3203 index deedffa5..301458a3 100644
3203 index 83cea4b9..9a7feea4 100644
32043204 --- a/util/configlexer.lex
32053205 +++ b/util/configlexer.lex
3206 @@ -446,6 +446,10 @@ dnstap-log-forwarder-query-messages{COLON} {
3206 @@ -467,6 +467,10 @@ dnstap-log-forwarder-query-messages{COLON} {
32073207 YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
32083208 dnstap-log-forwarder-response-messages{COLON} {
32093209 YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
32153215 ip-ratelimit{COLON} { YDVAR(1, VAR_IP_RATELIMIT) }
32163216 ratelimit{COLON} { YDVAR(1, VAR_RATELIMIT) }
32173217 diff --git a/util/configparser.y b/util/configparser.y
3218 index d471babe..cb6b1d63 100644
3218 index fe600a99..ce43390f 100644
32193219 --- a/util/configparser.y
32203220 +++ b/util/configparser.y
3221 @@ -125,6 +125,7 @@ extern struct config_parser_state* cfg_parser;
3221 @@ -128,6 +128,7 @@ extern struct config_parser_state* cfg_parser;
32223222 %token VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES
32233223 %token VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES
32243224 %token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES
32253225 +%token VAR_RPZ VAR_RPZ_ENABLE VAR_RPZ_ZONE VAR_RPZ_OPTION
32263226 %token VAR_RESPONSE_IP_TAG VAR_RESPONSE_IP VAR_RESPONSE_IP_DATA
32273227 %token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT
3228 %token VAR_DISABLE_DNSSEC_LAME_CHECK
3229 @@ -173,7 +174,7 @@ extern struct config_parser_state* cfg_parser;
3228 %token VAR_IP_DSCP
3229 @@ -179,7 +180,7 @@ extern struct config_parser_state* cfg_parser;
32303230
32313231 %%
32323232 toplevelvars: /* empty */ | toplevelvars toplevelvar ;
32353235 forwardstart contents_forward | pythonstart contents_py |
32363236 rcstart contents_rc | dtstart contents_dt | viewstart contents_view |
32373237 dnscstart contents_dnsc | cachedbstart contents_cachedb |
3238 @@ -2837,6 +2838,50 @@ dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MES
3238 @@ -2939,6 +2940,50 @@ dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MES
32393239 free($2);
32403240 }
32413241 ;
33833383
33843384 /**
33853385 diff --git a/util/netevent.c b/util/netevent.c
3386 index 9fe5da2d..037e70d1 100644
3386 index 3e7a433e..f20d806f 100644
33873387 --- a/util/netevent.c
33883388 +++ b/util/netevent.c
33893389 @@ -57,6 +57,9 @@
33963396
33973397 /* -------- Start of local definitions -------- */
33983398 /** if CMSG_ALIGN is not defined on this platform, a workaround */
3399 @@ -590,6 +593,9 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg)
3399 @@ -596,6 +599,9 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg)
34003400 struct cmsghdr* cmsg;
34013401 #endif /* S_SPLINT_S */
34023402
34063406 rep.c = (struct comm_point*)arg;
34073407 log_assert(rep.c->type == comm_udp);
34083408
3409 @@ -679,6 +685,9 @@ comm_point_udp_callback(int fd, short event, void* arg)
3409 @@ -685,6 +691,9 @@ comm_point_udp_callback(int fd, short event, void* arg)
34103410 int i;
34113411 struct sldns_buffer *buffer;
34123412
34163416 rep.c = (struct comm_point*)arg;
34173417 log_assert(rep.c->type == comm_udp);
34183418
3419 @@ -722,6 +731,9 @@ comm_point_udp_callback(int fd, short event, void* arg)
3419 @@ -728,6 +737,9 @@ comm_point_udp_callback(int fd, short event, void* arg)
34203420 (void)comm_point_send_udp_msg(rep.c, buffer,
34213421 (struct sockaddr*)&rep.addr, rep.addrlen);
34223422 }
34263426 if(!rep.c || rep.c->fd != fd) /* commpoint closed to -1 or reused for
34273427 another UDP port. Note rep.c cannot be reused with TCP fd. */
34283428 break;
3429 @@ -3192,6 +3204,9 @@ comm_point_send_reply(struct comm_reply *repinfo)
3429 @@ -3175,6 +3187,9 @@ comm_point_send_reply(struct comm_reply *repinfo)
34303430 repinfo->c->tcp_timeout_msec);
34313431 }
34323432 }
34363436 }
34373437
34383438 void
3439 @@ -3201,6 +3216,9 @@ comm_point_drop_reply(struct comm_reply* repinfo)
3439 @@ -3184,6 +3199,9 @@ comm_point_drop_reply(struct comm_reply* repinfo)
34403440 return;
34413441 log_assert(repinfo->c);
34423442 log_assert(repinfo->c->type != comm_tcp_accept);
34463446 if(repinfo->c->type == comm_udp)
34473447 return;
34483448 if(repinfo->c->tcp_req_info)
3449 @@ -3222,6 +3240,9 @@ comm_point_start_listening(struct comm_point* c, int newfd, int msec)
3449 @@ -3205,6 +3223,9 @@ comm_point_start_listening(struct comm_point* c, int newfd, int msec)
34503450 {
34513451 verbose(VERB_ALGO, "comm point start listening %d (%d msec)",
34523452 c->fd==-1?newfd:c->fd, msec);
34573457 /* no use to start listening no free slots. */
34583458 return;
34593459 diff --git a/util/netevent.h b/util/netevent.h
3460 index d80c72b3..0233292f 100644
3460 index bb2cd1e5..666067e8 100644
34613461 --- a/util/netevent.h
34623462 +++ b/util/netevent.h
34633463 @@ -120,6 +120,10 @@ struct comm_reply {