s4 dns: unify error handling when bailing out
authorKai Blin <kai@samba.org>
Wed, 28 Mar 2012 10:19:51 +0000 (12:19 +0200)
committerKai Blin <kai@samba.org>
Tue, 8 May 2012 13:48:25 +0000 (15:48 +0200)
Autobuild-User: Kai Blin <kai@samba.org>
Autobuild-Date: Tue May  8 15:48:25 CEST 2012 on sn-devel-104

source4/dns_server/dns_server.c

index eed20d570723c0e501ada7133362f0cf4ceaaae6..f9db095e744965ae2d7c5b91b09d2505c8903e0e 100644 (file)
@@ -100,6 +100,7 @@ static NTSTATUS dns_process(struct dns_server *dns,
 {
        enum ndr_err_code ndr_err;
        WERROR ret;
+       uint16_t dns_err = DNS_RCODE_OK;
        struct dns_request_state *state;
        struct dns_name_packet *in_packet;
        struct dns_name_packet *out_packet;
@@ -126,12 +127,8 @@ static NTSTATUS dns_process(struct dns_server *dns,
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                TALLOC_FREE(in_packet);
                DEBUG(0, ("Failed to parse packet %d!\n", ndr_err));
-               *out = *in;
-
-               out->data[2] |= 0x80; /* Toggle DNS_FLAG_REPLY */
-               out->data[3] |= DNS_RCODE_FORMERR;
-
-               return NT_STATUS_OK;
+               dns_err = DNS_RCODE_FORMERR;
+               goto drop;
        }
        if (DEBUGLVL(8)) {
                NDR_PRINT_DEBUG(dns_name_packet, in_packet);
@@ -189,16 +186,18 @@ static NTSTATUS dns_process(struct dns_server *dns,
                TALLOC_FREE(in_packet);
                TALLOC_FREE(out_packet);
                DEBUG(0, ("Failed to push packet %d!\n", ndr_err));
-               *out = *in;
-
-               out->data[2] |= 0x80; /* Toggle DNS_FLAG_REPLY */
-               out->data[3] |= DNS_RCODE_SERVFAIL;
-
-               return NT_STATUS_OK;
+               dns_err = DNS_RCODE_SERVFAIL;
+               goto drop;
        }
 
        dump_data(8, out->data, out->length);
        return NT_STATUS_OK;
+
+drop:
+       *out = *in;
+       out->data[2] |= 0x80; /* Toggle DNS_FLAG_REPLY */
+       out->data[3] |= dns_err;
+       return NT_STATUS_OK;
 }
 
 struct dns_tcp_call {