1 /* 2 Unix SMB/CIFS implementation. 3 4 DNS structures 5 6 Copyright (C) 2010 Kai Blin <kai@samba.org> 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 3 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program. If not, see <http://www.gnu.org/licenses/>. 20 */ 21 22 #ifndef __DNS_SERVER_H__ 23 #define __DNS_SERVER_H__ 24 25 #include "librpc/gen_ndr/dns.h" 26 #include "librpc/gen_ndr/ndr_dnsp.h" 27 #include "dnsserver_common.h" 28 29 struct tsocket_address; 30 struct dns_server_tkey { 31 const char *name; 32 enum dns_tkey_mode mode; 33 const char *algorithm; 34 struct auth_session_info *session_info; 35 struct gensec_security *gensec; 36 bool complete; 37 }; 38 39 #define TKEY_BUFFER_SIZE 128 40 41 struct dns_server_tkey_store { 42 struct dns_server_tkey **tkeys; 43 uint16_t next_idx; 44 uint16_t size; 45 }; 46 47 struct dns_server { 48 struct task_server *task; 49 struct ldb_context *samdb; 50 struct dns_server_zone *zones; 51 struct dns_server_tkey_store *tkeys; 52 struct cli_credentials *server_credentials; 53 }; 54 55 struct dns_request_state { 56 TALLOC_CTX *mem_ctx; 57 uint16_t flags; 58 bool authenticated; 59 bool sign; 60 char *key_name; 61 struct dns_res_rec *tsig; 62 uint16_t tsig_error; 63 const struct tsocket_address *local_address; 64 const struct tsocket_address *remote_address; 65 }; 66 67 struct tevent_req *dns_server_process_query_send( 68 TALLOC_CTX *mem_ctx, struct tevent_context *ev, 69 struct dns_server *dns, struct dns_request_state *req_state, 70 const struct dns_name_packet *in); 71 WERROR dns_server_process_query_recv( 72 struct tevent_req *req, TALLOC_CTX *mem_ctx, 73 struct dns_res_rec **answers, uint16_t *ancount, 74 struct dns_res_rec **nsrecs, uint16_t *nscount, 75 struct dns_res_rec **additional, uint16_t *arcount); 76 77 WERROR dns_server_process_update(struct dns_server *dns, 78 const struct dns_request_state *state, 79 TALLOC_CTX *mem_ctx, 80 const struct dns_name_packet *in, 81 struct dns_res_rec **prereqs, uint16_t *prereq_count, 82 struct dns_res_rec **updates, uint16_t *update_count, 83 struct dns_res_rec **additional, uint16_t *arcount); 84 85 bool dns_records_match(struct dnsp_DnssrvRpcRecord *rec1, 86 struct dnsp_DnssrvRpcRecord *rec2); 87 bool dns_authoritative_for_zone(struct dns_server *dns, 88 const char *name); 89 const char *dns_get_authoritative_zone(struct dns_server *dns, 90 const char *name); 91 WERROR dns_lookup_records(struct dns_server *dns, 92 TALLOC_CTX *mem_ctx, 93 struct ldb_dn *dn, 94 struct dnsp_DnssrvRpcRecord **records, 95 uint16_t *rec_count); 96 WERROR dns_lookup_records_wildcard(struct dns_server *dns, 97 TALLOC_CTX *mem_ctx, 98 struct ldb_dn *dn, 99 struct dnsp_DnssrvRpcRecord **records, 100 uint16_t *rec_count); 101 WERROR dns_replace_records(struct dns_server *dns, 102 TALLOC_CTX *mem_ctx, 103 struct ldb_dn *dn, 104 bool needs_add, 105 struct dnsp_DnssrvRpcRecord *records, 106 uint16_t rec_count); 107 WERROR dns_name2dn(struct dns_server *dns, 108 TALLOC_CTX *mem_ctx, 109 const char *name, 110 struct ldb_dn **_dn); 111 struct dns_server_tkey *dns_find_tkey(struct dns_server_tkey_store *store, 112 const char *name); 113 WERROR dns_verify_tsig(struct dns_server *dns, 114 TALLOC_CTX *mem_ctx, 115 struct dns_request_state *state, 116 struct dns_name_packet *packet, 117 DATA_BLOB *in); 118 WERROR dns_sign_tsig(struct dns_server *dns, 119 TALLOC_CTX *mem_ctx, 120 struct dns_request_state *state, 121 struct dns_name_packet *packet, 122 uint16_t error); 123 124 #include "source4/dns_server/dnsserver_common.h" 125 126 #endif /* __DNS_SERVER_H__ */ 127