From: Wouter Wijngaards Date: Tue, 21 Aug 2018 14:25:07 +0000 (+0000) Subject: edns-subnet retain rcode when no return_msg, for log-servfail. X-Git-Tag: release-1.8.0rc1~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8893735a2d9b6fe7ac7b0cef22cba64543aa436f;p=thirdparty%2Funbound.git edns-subnet retain rcode when no return_msg, for log-servfail. git-svn-id: file:///svn/unbound/trunk@4868 be551aaa-1e26-0410-a405-d3ace91eadb9 --- diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c index 7793f0a4e..1a5044e42 100644 --- a/edns-subnet/subnetmod.c +++ b/edns-subnet/subnetmod.c @@ -464,7 +464,12 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq) memset(c_out, 0, sizeof(*c_out)); - if (!qstate->return_msg) return module_error; + if (!qstate->return_msg) { + /* already an answer and its not a message, but retain + * the actual rcode, instead of module_error, so send + * module_finished */ + return module_finished; + } /* We have not asked for subnet data */ if (!sq->subnet_sent) { @@ -743,7 +748,8 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, /* Query handed back by next module, we have a 'final' answer */ if(sq && event == module_event_moddone) { qstate->ext_state[id] = eval_response(qstate, id, sq); - if(qstate->ext_state[id] == module_finished) { + if(qstate->ext_state[id] == module_finished && + qstate->return_msg) { ecs_opt_list_append(&sq->ecs_client_out, &qstate->edns_opts_front_out, qstate); }