summaryrefslogtreecommitdiffstats
path: root/source4/rpc_server/dnsserver/dnsserver.h
diff options
context:
space:
mode:
Diffstat (limited to 'source4/rpc_server/dnsserver/dnsserver.h')
-rw-r--r--source4/rpc_server/dnsserver/dnsserver.h264
1 files changed, 264 insertions, 0 deletions
diff --git a/source4/rpc_server/dnsserver/dnsserver.h b/source4/rpc_server/dnsserver/dnsserver.h
new file mode 100644
index 0000000..2e46e7c
--- /dev/null
+++ b/source4/rpc_server/dnsserver/dnsserver.h
@@ -0,0 +1,264 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ DNS Server
+
+ Copyright (C) Amitay Isaacs 2011
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __DNSSERVER_H__
+#define __DNSSERVER_H__
+
+#include "librpc/gen_ndr/dnsp.h"
+#include "librpc/gen_ndr/dnsserver.h"
+#include "param/param.h"
+#include "ldb.h"
+
+struct dnsserver_serverinfo {
+ uint32_t dwVersion;
+ uint8_t fBootMethod;
+ uint8_t fAdminConfigured;
+ uint8_t fAllowUpdate;
+ uint8_t fDsAvailable;
+
+ char * pszServerName;
+ char * pszDsContainer;
+
+ uint32_t dwDsForestVersion;
+ uint32_t dwDsDomainVersion;
+ uint32_t dwDsDsaVersion;
+ uint32_t fReadOnlyDC;
+ char * pszDomainName;
+ char * pszForestName;
+ char * pszDomainDirectoryPartition;
+ char * pszForestDirectoryPartition;
+
+ struct DNS_ADDR_ARRAY * aipServerAddrs;
+ struct DNS_ADDR_ARRAY * aipListenAddrs;
+ struct IP4_ARRAY * aipForwarders;
+
+ struct IP4_ARRAY * aipLogFilter;
+ char * pwszLogFilePath;
+
+ uint32_t dwLogLevel;
+ uint32_t dwDebugLevel;
+ uint32_t dwEventLogLevel;
+ uint32_t dwLogFileMaxSize;
+
+ uint32_t dwForwardTimeout;
+ uint32_t dwRpcProtocol;
+ uint32_t dwNameCheckFlag;
+ uint32_t cAddressAnswerLimit;
+ uint32_t dwRecursionRetry;
+ uint32_t dwRecursionTimeout;
+ uint32_t dwMaxCacheTtl;
+ uint32_t dwDsPollingInterval;
+ uint32_t dwLocalNetPriorityNetMask;
+
+ uint32_t dwScavengingInterval;
+ uint32_t dwDefaultRefreshInterval;
+ uint32_t dwDefaultNoRefreshInterval;
+ uint32_t dwLastScavengeTime;
+
+ uint8_t fAutoReverseZones;
+ uint8_t fAutoCacheUpdate;
+
+ uint8_t fRecurseAfterForwarding;
+ uint8_t fForwardDelegations;
+ uint8_t fNoRecursion;
+ uint8_t fSecureResponses;
+
+ uint8_t fRoundRobin;
+ uint8_t fLocalNetPriority;
+
+ uint8_t fBindSecondaries;
+ uint8_t fWriteAuthorityNs;
+
+ uint8_t fStrictFileParsing;
+ uint8_t fLooseWildcarding;
+ uint8_t fDefaultAgingState;
+};
+
+struct dnsserver_zoneinfo {
+ uint8_t Version;
+ uint32_t Flags;
+ uint8_t dwZoneType;
+ uint8_t fReverse;
+ uint8_t fAllowUpdate;
+ uint8_t fPaused;
+ uint8_t fShutdown;
+ uint8_t fAutoCreated;
+
+ uint8_t fUseDatabase;
+ char * pszDataFile;
+
+ struct IP4_ARRAY * aipMasters;
+
+ uint32_t fSecureSecondaries;
+ uint32_t fNotifyLevel;
+ struct IP4_ARRAY * aipSecondaries;
+ struct IP4_ARRAY * aipNotify;
+
+ uint32_t fUseWins;
+ uint32_t fUseNbstat;
+
+ uint32_t fAging;
+ uint32_t dwNoRefreshInterval;
+ uint32_t dwRefreshInterval;
+ uint32_t dwAvailForScavengeTime;
+ struct IP4_ARRAY * aipScavengeServers;
+
+ uint32_t dwForwarderTimeout;
+ uint32_t fForwarderSlave;
+
+ struct IP4_ARRAY * aipLocalMasters;
+
+ char * pwszZoneDn;
+
+ uint32_t dwLastSuccessfulSoaCheck;
+ uint32_t dwLastSuccessfulXfr;
+
+ uint32_t fQueuedForBackgroundLoad;
+ uint32_t fBackgroundLoadInProgress;
+ uint8_t fReadOnlyZone;
+
+ uint32_t dwLastXfrAttempt;
+ uint32_t dwLastXfrResult;
+};
+
+
+struct dnsserver_partition {
+ struct dnsserver_partition *prev, *next;
+ struct ldb_dn *partition_dn;
+ const char *pszDpFqdn;
+ uint32_t dwDpFlags;
+ bool is_forest;
+ int zones_count;
+};
+
+
+struct dnsserver_partition_info {
+ const char *pszCrDn;
+ uint32_t dwState;
+ uint32_t dwReplicaCount;
+ struct DNS_RPC_DP_REPLICA **ReplicaArray;
+};
+
+
+struct dnsserver_zone {
+ struct dnsserver_zone *prev, *next;
+ struct dnsserver_partition *partition;
+ const char *name;
+ struct ldb_dn *zone_dn;
+ struct dnsserver_zoneinfo *zoneinfo;
+ struct dnsp_DnsProperty *tmp_props;
+ int32_t num_props;
+};
+
+
+struct dns_tree {
+ const char *name;
+ int level;
+ unsigned int num_children;
+ struct dns_tree **children;
+ void *data;
+};
+
+/* Data structure manipulation functions from dnsdata.c */
+
+struct IP4_ARRAY *ip4_array_copy(TALLOC_CTX *mem_ctx, struct IP4_ARRAY *ip4);
+struct DNS_ADDR_ARRAY *ip4_array_to_dns_addr_array(TALLOC_CTX *mem_ctx, struct IP4_ARRAY *ip4);
+struct IP4_ARRAY *dns_addr_array_to_ip4_array(TALLOC_CTX *mem_ctx,
+ struct DNS_ADDR_ARRAY *ip);
+struct DNS_ADDR_ARRAY *dns_addr_array_copy(TALLOC_CTX *mem_ctx, struct DNS_ADDR_ARRAY *addr);
+
+int dns_split_name_components(TALLOC_CTX *mem_ctx, const char *name, char ***components);
+char *dns_split_node_name(TALLOC_CTX *mem_ctx, const char *node_name, const char *zone_name);
+
+int dns_name_compare(struct ldb_message * const *m1, struct ldb_message * const *m2,
+ const char *search_name);
+bool dns_record_match(struct dnsp_DnssrvRpcRecord *rec1, struct dnsp_DnssrvRpcRecord *rec2);
+
+void dnsp_to_dns_copy(TALLOC_CTX *mem_ctx, struct dnsp_DnssrvRpcRecord *dnsp,
+ struct DNS_RPC_RECORD *dns);
+WERROR dns_to_dnsp_convert(TALLOC_CTX *mem_ctx, struct DNS_RPC_RECORD *dns,
+ struct dnsp_DnssrvRpcRecord **out_dnsp,
+ bool check_name);
+
+struct dns_tree *dns_build_tree(TALLOC_CTX *mem_ctx, const char *name, struct ldb_result *res);
+WERROR dns_fill_records_array(TALLOC_CTX *mem_ctx, struct dnsserver_zone *z,
+ enum dns_record_type record_type,
+ unsigned int select_flag, const char *zone_name,
+ struct ldb_message *msg, int num_children,
+ struct DNS_RPC_RECORDS_ARRAY *recs,
+ char ***add_names, int *add_count);
+
+
+/* Utility functions from dnsutils.c */
+
+struct dnsserver_serverinfo *dnsserver_init_serverinfo(TALLOC_CTX *mem_ctx,
+ struct loadparm_context *lp_ctx,
+ struct ldb_context *samdb);
+struct dnsserver_zoneinfo *dnsserver_init_zoneinfo(struct dnsserver_zone *zone,
+ struct dnsserver_serverinfo *serverinfo);
+struct dnsserver_zone *dnsserver_find_zone(struct dnsserver_zone *zones,
+ const char *zone_name);
+struct ldb_dn *dnsserver_name_to_dn(TALLOC_CTX *mem_ctx, struct dnsserver_zone *z,
+ const char *name);
+uint32_t dnsserver_zone_to_request_filter(const char *zone);
+
+/* Database functions from dnsdb.c */
+
+struct dnsserver_partition *dnsserver_db_enumerate_partitions(TALLOC_CTX *mem_ctx,
+ struct dnsserver_serverinfo *serverinfo,
+ struct ldb_context *samdb);
+struct dnsserver_zone *dnsserver_db_enumerate_zones(TALLOC_CTX *mem_ctx,
+ struct ldb_context *samdb,
+ struct dnsserver_partition *p);
+struct dnsserver_partition_info *dnsserver_db_partition_info(TALLOC_CTX *mem_ctx,
+ struct ldb_context *samdb,
+ struct dnsserver_partition *p);
+WERROR dnsserver_db_add_empty_node(TALLOC_CTX *mem_ctx,
+ struct ldb_context *samdb,
+ struct dnsserver_zone *z,
+ const char *node_name);
+WERROR dnsserver_db_add_record(TALLOC_CTX *mem_ctx,
+ struct ldb_context *samdb,
+ struct dnsserver_zone *z,
+ const char *node_name,
+ struct DNS_RPC_RECORD *add_record);
+WERROR dnsserver_db_update_record(TALLOC_CTX *mem_ctx,
+ struct ldb_context *samdb,
+ struct dnsserver_zone *z,
+ const char *node_name,
+ struct DNS_RPC_RECORD *add_record,
+ struct DNS_RPC_RECORD *del_record);
+WERROR dnsserver_db_do_reset_dword(struct ldb_context *samdb,
+ struct dnsserver_zone *z,
+ struct DNS_RPC_NAME_AND_PARAM *n_p);
+WERROR dnsserver_db_delete_record(TALLOC_CTX *mem_ctx,
+ struct ldb_context *samdb,
+ struct dnsserver_zone *z,
+ const char *node_name,
+ struct DNS_RPC_RECORD *del_record);
+WERROR dnsserver_db_create_zone(struct ldb_context *samdb,
+ struct dnsserver_partition *partitions,
+ struct dnsserver_zone *z,
+ struct loadparm_context *lp_ctx);
+WERROR dnsserver_db_delete_zone(struct ldb_context *samdb,
+ struct dnsserver_zone *z);
+
+#endif /* __DNSSERVER_H__ */