From: Stefan Metzmacher Date: Thu, 14 Jul 2022 10:00:51 +0000 (+0200) Subject: s4:dns_server: defer calling werr_to_dns_err() in a central place X-Git-Tag: ldb-2.8.0~91 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=76b0530e6734afe989c0defb9aba8acf2800401e;p=thirdparty%2Fsamba.git s4:dns_server: defer calling werr_to_dns_err() in a central place The WERROR codes are much more verbose and it's better to keep them until we really need the mapping to DNS error codes. This will allow us to create much better debug messages in the next commit. Signed-off-by: Stefan Metzmacher Reviewed-by: Andreas Schneider Reviewed-by: Ralph Boehme --- diff --git a/source4/dns_server/dns_server.c b/source4/dns_server/dns_server.c index 7d0c0862725..e73c5415d01 100644 --- a/source4/dns_server/dns_server.c +++ b/source4/dns_server/dns_server.c @@ -107,7 +107,7 @@ struct dns_process_state { struct dns_server *dns; struct dns_name_packet in_packet; struct dns_request_state state; - uint16_t dns_err; + WERROR dns_err; struct dns_name_packet out_packet; DATA_BLOB out; }; @@ -146,7 +146,7 @@ static struct tevent_req *dns_process_send(TALLOC_CTX *mem_ctx, (ndr_pull_flags_fn_t)ndr_pull_dns_name_packet); if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { - state->dns_err = DNS_RCODE_FORMERR; + state->dns_err = DNS_ERR(FORMAT_ERROR); tevent_req_done(req); return tevent_req_post(req, ev); } @@ -175,7 +175,7 @@ static struct tevent_req *dns_process_send(TALLOC_CTX *mem_ctx, ret = dns_verify_tsig(dns, state, &state->state, &state->out_packet, in); if (!W_ERROR_IS_OK(ret)) { - state->dns_err = werr_to_dns_err(ret); + state->dns_err = ret; tevent_req_done(req); return tevent_req_post(req, ev); } @@ -201,9 +201,7 @@ static struct tevent_req *dns_process_send(TALLOC_CTX *mem_ctx, default: ret = WERR_DNS_ERROR_RCODE_NOT_IMPLEMENTED; } - if (!W_ERROR_IS_OK(ret)) { - state->dns_err = werr_to_dns_err(ret); - } + state->dns_err = ret; tevent_req_done(req); return tevent_req_post(req, ev); } @@ -223,9 +221,7 @@ static void dns_process_done(struct tevent_req *subreq) &state->out_packet.additional, &state->out_packet.arcount); TALLOC_FREE(subreq); - if (!W_ERROR_IS_OK(ret)) { - state->dns_err = werr_to_dns_err(ret); - } + state->dns_err = ret; tevent_req_done(req); } @@ -235,19 +231,21 @@ static WERROR dns_process_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, struct dns_process_state *state = tevent_req_data( req, struct dns_process_state); enum ndr_err_code ndr_err; + uint16_t dns_err; WERROR ret; if (tevent_req_is_werror(req, &ret)) { return ret; } - if ((state->dns_err != DNS_RCODE_OK) && - (state->dns_err != DNS_RCODE_NXDOMAIN) && - (state->dns_err != DNS_RCODE_NOTAUTH)) + dns_err = werr_to_dns_err(state->dns_err); + if ((dns_err != DNS_RCODE_OK) && + (dns_err != DNS_RCODE_NXDOMAIN) && + (dns_err != DNS_RCODE_NOTAUTH)) { goto drop; } - if (state->dns_err != DNS_RCODE_OK) { - state->out_packet.operation |= state->dns_err; + if (dns_err != DNS_RCODE_OK) { + state->out_packet.operation |= dns_err; } state->out_packet.operation |= state->state.flags; @@ -255,7 +253,7 @@ static WERROR dns_process_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, ret = dns_sign_tsig(state->dns, mem_ctx, &state->state, &state->out_packet, 0); if (!W_ERROR_IS_OK(ret)) { - state->dns_err = DNS_RCODE_SERVFAIL; + dns_err = DNS_RCODE_SERVFAIL; goto drop; } } @@ -270,7 +268,7 @@ static WERROR dns_process_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { DEBUG(1, ("Failed to push packet: %s!\n", ndr_errstr(ndr_err))); - state->dns_err = DNS_RCODE_SERVFAIL; + dns_err = DNS_RCODE_SERVFAIL; goto drop; } return WERR_OK; @@ -281,7 +279,7 @@ drop: return WERR_NOT_ENOUGH_MEMORY; } out->data[2] |= 0x80; /* Toggle DNS_FLAG_REPLY */ - out->data[3] |= state->dns_err; + out->data[3] |= dns_err; return WERR_OK; }