dns_server: clobber MNAME in the SOA
[sfrench/samba-autobuild/.git] / source4 / dns_server / dnsserver_common.h
1 /*
2    Unix SMB/CIFS implementation.
3
4    DNS server utils
5
6    Copyright (C) 2014 Stefan Metzmacher
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 __DNSSERVER_COMMON_H__
23 #define __DNSSERVER_COMMON_H__
24
25 uint8_t werr_to_dns_err(WERROR werr);
26 #define DNS_ERR(err_str) WERR_DNS_ERROR_RCODE_##err_str
27
28 struct ldb_message_element;
29 struct ldb_context;
30 struct dnsp_DnssrvRpcRecord;
31
32 struct dns_server_zone {
33         struct dns_server_zone *prev, *next;
34         const char *name;
35         struct ldb_dn *dn;
36 };
37
38 WERROR dns_common_extract(struct ldb_context *samdb,
39                           const struct ldb_message_element *el,
40                           TALLOC_CTX *mem_ctx,
41                           struct dnsp_DnssrvRpcRecord **records,
42                           uint16_t *num_records);
43
44 WERROR dns_common_lookup(struct ldb_context *samdb,
45                          TALLOC_CTX *mem_ctx,
46                          struct ldb_dn *dn,
47                          struct dnsp_DnssrvRpcRecord **records,
48                          uint16_t *num_records,
49                          bool *tombstoned);
50 WERROR dns_name_check(TALLOC_CTX *mem_ctx,
51                       size_t len,
52                       const char *name);
53 WERROR dns_common_replace(struct ldb_context *samdb,
54                           TALLOC_CTX *mem_ctx,
55                           struct ldb_dn *dn,
56                           bool needs_add,
57                           uint32_t serial,
58                           struct dnsp_DnssrvRpcRecord *records,
59                           uint16_t rec_count);
60 bool dns_name_match(const char *zone, const char *name, size_t *host_part_len);
61 WERROR dns_common_name2dn(struct ldb_context *samdb,
62                           struct dns_server_zone *zones,
63                           TALLOC_CTX *mem_ctx,
64                           const char *name,
65                           struct ldb_dn **_dn);
66
67 /*
68  * For this routine, base_dn is generally NULL.  The exception comes
69  * from the python bindings to support setting ACLs on DNS objects
70  * when joining Windows
71  */
72 NTSTATUS dns_common_zones(struct ldb_context *samdb,
73                           TALLOC_CTX *mem_ctx,
74                           struct ldb_dn *base_dn,
75                           struct dns_server_zone **zones_ret);
76 #endif /* __DNSSERVER_COMMON_H__ */