diff options
author | Kai Blin <kai@samba.org> | 2012-09-05 08:34:04 +0200 |
---|---|---|
committer | Kai Blin <kai@samba.org> | 2012-09-05 19:02:17 +0200 |
commit | 7fe5e2cdcb17cee06ebde2717439c0aa964ac026 (patch) | |
tree | 36fbe3b91afb6542769472e38e5dd7275a5ecb6b /source4/dns_server/dns_server.c | |
parent | 956f41bddf946d5e1e35f06632f40e7ac71b6588 (diff) | |
download | samba-7fe5e2cdcb17cee06ebde2717439c0aa964ac026.tar.gz samba-7fe5e2cdcb17cee06ebde2717439c0aa964ac026.tar.bz2 samba-7fe5e2cdcb17cee06ebde2717439c0aa964ac026.zip |
s4 dns: Handle GSS-TSIG signature creation
Diffstat (limited to 'source4/dns_server/dns_server.c')
-rw-r--r-- | source4/dns_server/dns_server.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/source4/dns_server/dns_server.c b/source4/dns_server/dns_server.c index 887fc8ee1d..795b7198aa 100644 --- a/source4/dns_server/dns_server.c +++ b/source4/dns_server/dns_server.c @@ -98,6 +98,7 @@ static void dns_tcp_send(struct stream_connection *conn, uint16_t flags) struct dns_process_state { DATA_BLOB *in; + struct dns_server *dns; struct dns_name_packet in_packet; struct dns_request_state state; uint16_t dns_err; @@ -123,6 +124,8 @@ static struct tevent_req *dns_process_send(TALLOC_CTX *mem_ctx, } state->in = in; + state->dns = dns; + if (in->length < 12) { tevent_req_werror(req, WERR_INVALID_PARAM); return tevent_req_post(req, ev); @@ -215,6 +218,15 @@ static WERROR dns_process_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, } state->out_packet.operation |= state->state.flags; + if (state->state.sign) { + 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; + goto drop; + } + } + ndr_err = ndr_push_struct_blob( out, mem_ctx, &state->out_packet, (ndr_push_flags_fn_t)ndr_push_dns_name_packet); |