5fc13c8704e9f6b71cb409d9de677d6c16dd95f3
[mat/samba.git] / source4 / rpc_server / dnsserver / dnsserver.h
1 /*
2    Unix SMB/CIFS implementation.
3
4    DNS Server
5
6    Copyright (C) Amitay Isaacs 2011
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_H__
23 #define __DNSSERVER_H__
24
25 #include "librpc/gen_ndr/dnsp.h"
26 #include "librpc/gen_ndr/dnsserver.h"
27 #include "param/param.h"
28 #include "ldb.h"
29
30 struct dnsserver_serverinfo {
31         uint32_t        dwVersion;
32         uint8_t         fBootMethod;
33         uint8_t         fAdminConfigured;
34         uint8_t         fAllowUpdate;
35         uint8_t         fDsAvailable;
36
37         char *          pszServerName;
38         char *          pszDsContainer;
39
40         uint32_t        dwDsForestVersion;
41         uint32_t        dwDsDomainVersion;
42         uint32_t        dwDsDsaVersion;
43         uint32_t        fReadOnlyDC;
44         char *          pszDomainName;
45         char *          pszForestName;
46         char *          pszDomainDirectoryPartition;
47         char *          pszForestDirectoryPartition;
48
49         struct IP4_ARRAY * aipServerAddrs;
50         struct IP4_ARRAY * aipListenAddrs;
51         struct IP4_ARRAY * aipForwarders;
52
53         struct IP4_ARRAY * aipLogFilter;
54         char *          pwszLogFilePath;
55
56         uint32_t        dwLogLevel;
57         uint32_t        dwDebugLevel;
58         uint32_t        dwEventLogLevel;
59         uint32_t        dwLogFileMaxSize;
60
61         uint32_t        dwForwardTimeout;
62         uint32_t        dwRpcProtocol;
63         uint32_t        dwNameCheckFlag;
64         uint32_t        cAddressAnswerLimit;
65         uint32_t        dwRecursionRetry;
66         uint32_t        dwRecursionTimeout;
67         uint32_t        dwMaxCacheTtl;
68         uint32_t        dwDsPollingInterval;
69         uint32_t        dwLocalNetPriorityNetMask;
70
71         uint32_t        dwScavengingInterval;
72         uint32_t        dwDefaultRefreshInterval;
73         uint32_t        dwDefaultNoRefreshInterval;
74         uint32_t        dwLastScavengeTime;
75
76         uint8_t         fAutoReverseZones;
77         uint8_t         fAutoCacheUpdate;
78
79         uint8_t         fRecurseAfterForwarding;
80         uint8_t         fForwardDelegations;
81         uint8_t         fNoRecursion;
82         uint8_t         fSecureResponses;
83
84         uint8_t         fRoundRobin;
85         uint8_t         fLocalNetPriority;
86
87         uint8_t         fBindSecondaries;
88         uint8_t         fWriteAuthorityNs;
89
90         uint8_t         fStrictFileParsing;
91         uint8_t         fLooseWildcarding;
92         uint8_t         fDefaultAgingState;
93 };
94
95 struct dnsserver_zoneinfo {
96         uint8_t         Version;
97         uint32_t        Flags;
98         uint8_t         dwZoneType;
99         uint8_t         fReverse;
100         uint8_t         fAllowUpdate;
101         uint8_t         fPaused;
102         uint8_t         fShutdown;
103         uint8_t         fAutoCreated;
104
105         uint8_t         fUseDatabase;
106         char *          pszDataFile;
107
108         struct IP4_ARRAY * aipMasters;
109
110         uint32_t        fSecureSecondaries;
111         uint32_t        fNotifyLevel;
112         struct IP4_ARRAY * aipSecondaries;
113         struct IP4_ARRAY * aipNotify;
114
115         uint32_t        fUseWins;
116         uint32_t        fUseNbstat;
117
118         uint32_t        fAging;
119         uint32_t        dwNoRefreshInterval;
120         uint32_t        dwRefreshInterval;
121         uint32_t        dwAvailForScavengeTime;
122         struct IP4_ARRAY * aipScavengeServers;
123
124         uint32_t        dwForwarderTimeout;
125         uint32_t        fForwarderSlave;
126
127         struct IP4_ARRAY * aipLocalMasters;
128
129         uint32_t        dwDpFlags;
130         char *          pszDpFqdn;
131         char *          pwszZoneDn;
132
133         uint32_t        dwLastSuccessfulSoaCheck;
134         uint32_t        dwLastSuccessfulXfr;
135
136         uint32_t        fQueuedForBackgroundLoad;
137         uint32_t        fBackgroundLoadInProgress;
138         uint8_t         fReadOnlyZone;
139
140         uint32_t        dwLastXfrAttempt;
141         uint32_t        dwLastXfrResult;
142 };
143
144
145 struct dnsserver_zone {
146         struct dnsserver_zone *prev, *next;
147         const char *name;
148         struct ldb_dn *partition_dn;
149         struct ldb_dn *zone_dn;
150         struct dnsserver_zoneinfo *zoneinfo;
151 };
152
153
154 /* Data structure manipulation functions from dnsdata.c */
155
156 struct IP4_ARRAY *ip4_array_copy(TALLOC_CTX *mem_ctx, struct IP4_ARRAY *ip4);
157 struct DNS_ADDR_ARRAY *ip4_array_to_dns_addr_array(TALLOC_CTX *mem_ctx, struct IP4_ARRAY *ip4);
158 struct DNS_ADDR_ARRAY *dns_addr_array_copy(TALLOC_CTX *mem_ctx, struct DNS_ADDR_ARRAY *addr);
159
160 int dns_split_name_components(TALLOC_CTX *mem_ctx, const char *name, char ***components);
161 char *dns_split_node_name(TALLOC_CTX *mem_ctx, const char *node_name, const char *zone_name);
162
163 int dns_name_compare(const struct ldb_message **m1, const struct ldb_message **m2,
164                         char *search_name);
165 bool dns_name_equal(const char *name1, const char *name2);
166 bool dns_record_match(struct dnsp_DnssrvRpcRecord *rec1, struct dnsp_DnssrvRpcRecord *rec2);
167
168 void dnsp_to_dns_copy(TALLOC_CTX *mem_ctx, struct dnsp_DnssrvRpcRecord *dnsp,
169                         struct DNS_RPC_RECORD *dns);
170 struct dnsp_DnssrvRpcRecord *dns_to_dnsp_copy(TALLOC_CTX *mem_ctx, struct DNS_RPC_RECORD *dns);
171
172 WERROR dns_fill_records_array(TALLOC_CTX *mem_ctx, struct dnsserver_zone *z,
173                         enum dns_record_type record_type,
174                         unsigned int select_flag, const char *zone_name,
175                         struct ldb_message *msg, struct DNS_RPC_RECORDS_ARRAY *recs,
176                         char ***add_names, int *add_count);
177
178
179 /* Utility functions from dnsutils.c */
180
181 struct dnsserver_serverinfo *dnsserver_init_serverinfo(TALLOC_CTX *mem_ctx,
182                                         struct loadparm_context *lp_ctx,
183                                         struct ldb_context *samdb);
184 struct dnsserver_zoneinfo *dnsserver_init_zoneinfo(struct dnsserver_zone *zone,
185                                         struct dnsserver_serverinfo *serverinfo,
186                                         bool is_forest);
187 struct dnsserver_zone *dnsserver_find_zone(struct dnsserver_zone *zones,
188                                         const char *zone_name);
189 struct ldb_dn *dnsserver_name_to_dn(TALLOC_CTX *mem_ctx, struct dnsserver_zone *z,
190                                         const char *name);
191 uint32_t dnsserver_zone_to_request_filter(const char *zone);
192
193
194 /* Database functions from dnsdb.c */
195
196 struct dnsserver_zone *dnsserver_db_enumerate_zones(TALLOC_CTX *mem_ctx,
197                                         struct ldb_context *samdb,
198                                         bool is_forest);
199 WERROR dnsserver_db_add_empty_node(TALLOC_CTX *mem_ctx,
200                                         struct ldb_context *samdb,
201                                         struct dnsserver_zone *z,
202                                         const char *node_name);
203 WERROR dnsserver_db_add_record(TALLOC_CTX *mem_ctx,
204                                         struct ldb_context *samdb,
205                                         struct dnsserver_zone *z,
206                                         const char *node_name,
207                                         struct DNS_RPC_RECORD *add_record);
208 WERROR dnsserver_db_update_record(TALLOC_CTX *mem_ctx,
209                                         struct ldb_context *samdb,
210                                         struct dnsserver_zone *z,
211                                         const char *node_name,
212                                         struct DNS_RPC_RECORD *add_record,
213                                         struct DNS_RPC_RECORD *del_record);
214 WERROR dnsserver_db_delete_record(TALLOC_CTX *mem_ctx,
215                                         struct ldb_context *samdb,
216                                         struct dnsserver_zone *z,
217                                         const char *node_name,
218                                         struct DNS_RPC_RECORD *del_record);
219
220 #endif /* __DNSSERVER_H__ */