[SCM] Samba Shared Repository - branch master updated

Andrew Tridgell tridge at samba.org
Wed Oct 19 23:25:03 MDT 2011


The branch, master has been updated
       via  dd64f99 build: explain the passing of make options to waf
       via  ab50165 ldb: ldb_errstring() takes ldb_contxt as an argument
       via  2feb81f s4-dns: Update serial number for zone on dns updates
       via  7ca0bed s4-selftest: Add tests for RPC dnsserver
       via  b619705 samba-tool: Added dns command for DNS management
       via  8df2ed4 s4-dns: Added DCERPC dns server for DNS management
       via  a8c7b28 s4-provision: Provision DNS records with correct rank
       via  51855de werror: Added missing DNS error codes
       via  65f9a13 s4-dns: Added support for multiple DNS_RPC_RECORDS structures
       via  0f84c63 s4-dns: Added more data types for dnsserver implementation
       via  7ba004d ldb-samba: Added handler to decode dnsProperty attribute
       via  3193e14 dnsp: Added typedefs to interpret dnsProperty attribute for dnsZone objectclass
      from  8890f70 s4-test: added test suite for common.py code

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit dd64f99fd17c1cb5aeefda91618111c6702832a7
Author: Andrew Tridgell <tridge at samba.org>
Date:   Thu Oct 20 14:57:13 2011 +1100

    build: explain the passing of make options to waf
    
    add a comment explaining how we pass make command line options into
    waf
    
    Autobuild-User: Andrew Tridgell <tridge at samba.org>
    Autobuild-Date: Thu Oct 20 07:24:02 CEST 2011 on sn-devel-104

commit ab50165a0235401d7920e67503c211028f55012d
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Wed Oct 19 10:45:28 2011 +1100

    ldb: ldb_errstring() takes ldb_contxt as an argument
    
    Signed-off-by: Andrew Tridgell <tridge at samba.org>

commit 2feb81f659801444be090b8f90b85a78a59da796
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Tue Oct 18 15:20:14 2011 +1100

    s4-dns: Update serial number for zone on dns updates
    
    Signed-off-by: Andrew Tridgell <tridge at samba.org>

commit 7ca0bed38d35948f05e30f52d2bf4c391bfc1711
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Tue Oct 18 12:44:02 2011 +1100

    s4-selftest: Add tests for RPC dnsserver
    
    Signed-off-by: Andrew Tridgell <tridge at samba.org>

commit b619705c22f62a763a83fe57508b16af24a22ef0
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Mon Oct 17 13:15:40 2011 +1100

    samba-tool: Added dns command for DNS management
    
    Signed-off-by: Andrew Tridgell <tridge at samba.org>

commit 8df2ed42cc4662bd385ea34169ebd3bcd4d8bc17
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Tue Sep 27 16:53:45 2011 +1000

    s4-dns: Added DCERPC dns server for DNS management
    
    dnsserver.h - typedefs and prototypes
    dnsserver.c - RPC API and implementation methods
    dnsdb.c     - samdb operations
    dnsdata.c   - functions to manipulate dns structures
    dnsutils.c  - function for serverinfo and zoneinfo structures
    
    Signed-off-by: Andrew Tridgell <tridge at samba.org>

commit a8c7b2843553a3ea6b19c8f9a065b1f54c1ff0d7
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Fri Oct 7 15:39:58 2011 +1100

    s4-provision: Provision DNS records with correct rank
    
    Signed-off-by: Andrew Tridgell <tridge at samba.org>

commit 51855de6338607b0dcca7b81b7fd4577481af40c
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Wed Sep 28 13:15:02 2011 +1000

    werror: Added missing DNS error codes
    
    Signed-off-by: Andrew Tridgell <tridge at samba.org>

commit 65f9a13dc3f3e26aa3f7a9d90abe94a7b2e6bc77
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Tue Sep 27 17:10:14 2011 +1000

    s4-dns: Added support for multiple DNS_RPC_RECORDS structures
    
    Windows returns multiple DNS_RPC_RECORDS structures, but there is
    no well defined structure in [MS-DNSP] doc. Added hand-written
    code to parse ndr.
    
    Pair-Programmed-With: Andrew Tridgell <tridge at samba.org>
    
    Signed-off-by: Andrew Tridgell <tridge at samba.org>

commit 0f84c634fc035f31e284b95b93e66be1a541c680
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Tue Sep 27 17:07:04 2011 +1000

    s4-dns: Added more data types for dnsserver implementation
    
    Windows uses WERROR on dnsserver pipe.
    
    Signed-off-by: Andrew Tridgell <tridge at samba.org>

commit 7ba004da246ea2a6c4738c6d3ea5dfafdbdbf1d6
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Wed Sep 21 14:56:19 2011 +1000

    ldb-samba: Added handler to decode dnsProperty attribute
    
    Signed-off-by: Andrew Tridgell <tridge at samba.org>

commit 3193e142d40b9dcdbf7cb55f708dae7bba398c3c
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Wed Sep 21 14:55:06 2011 +1000

    dnsp: Added typedefs to interpret dnsProperty attribute for dnsZone objectclass
    
    Signed-off-by: Andrew Tridgell <tridge at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 buildtools/wafsamba/samba_utils.py                 |    7 +
 lib/ldb-samba/ldif_handlers.c                      |   21 +
 lib/ldb-samba/ldif_handlers.h                      |    1 +
 lib/ldb/common/ldb_modules.c                       |    2 +-
 lib/param/loadparm.c                               |    2 +-
 libcli/util/werror.h                               |   36 +
 librpc/idl/dnsp.idl                                |  126 ++-
 librpc/idl/dnsserver.idl                           |  929 ++++++----
 librpc/ndr/ndr_dnsserver.c                         |   63 +
 librpc/ndr/ndr_dnsserver.h                         |   25 +
 librpc/wscript_build                               |    2 +-
 selftest/target/Samba4.pm                          |    1 +
 source4/rpc_server/dnsserver/dcerpc_dnsserver.c    | 2021 ++++++++++++++++++++
 source4/rpc_server/dnsserver/dnsdata.c             |  795 ++++++++
 source4/rpc_server/dnsserver/dnsdb.c               |  498 +++++
 source4/rpc_server/dnsserver/dnsserver.h           |  220 +++
 source4/rpc_server/dnsserver/dnsutils.c            |  309 +++
 source4/rpc_server/wscript_build                   |    7 +
 source4/scripting/python/samba/netcmd/dns.py       |  859 +++++++++
 source4/scripting/python/samba/netcmd/main.py      |    2 +
 .../scripting/python/samba/provision/sambadns.py   |   41 +-
 .../python/samba/tests/dcerpc/dnsserver.py         |  181 ++
 source4/selftest/tests.py                          |    1 +
 23 files changed, 5747 insertions(+), 402 deletions(-)
 create mode 100644 librpc/ndr/ndr_dnsserver.c
 create mode 100644 librpc/ndr/ndr_dnsserver.h
 create mode 100644 source4/rpc_server/dnsserver/dcerpc_dnsserver.c
 create mode 100644 source4/rpc_server/dnsserver/dnsdata.c
 create mode 100644 source4/rpc_server/dnsserver/dnsdb.c
 create mode 100644 source4/rpc_server/dnsserver/dnsserver.h
 create mode 100644 source4/rpc_server/dnsserver/dnsutils.c
 create mode 100644 source4/scripting/python/samba/netcmd/dns.py
 create mode 100644 source4/scripting/python/samba/tests/dcerpc/dnsserver.py


Changeset truncated at 500 lines:

diff --git a/buildtools/wafsamba/samba_utils.py b/buildtools/wafsamba/samba_utils.py
index 3adf533..5e16a5d 100644
--- a/buildtools/wafsamba/samba_utils.py
+++ b/buildtools/wafsamba/samba_utils.py
@@ -487,6 +487,13 @@ def CHECK_MAKEFLAGS(bld):
             if Logs.verbose > 2:
                 Logs.zones = ['*']
         elif opt[0].isupper() and opt.find('=') != -1:
+            # this allows us to set waf options on the make command line
+            # for example, if you do "make FOO=blah", then we set the
+            # option 'FOO' in Options.options, to blah. If you look in wafsamba/wscript
+            # you will see that the command line accessible options have their dest=
+            # set to uppercase, to allow for passing of options from make in this way
+            # this is also how "make test TESTS=testpattern" works, and
+            # "make VERBOSE=1" as well as things like "make SYMBOLCHECK=1"
             loc = opt.find('=')
             setattr(Options.options, opt[0:loc], opt[loc+1:])
         elif opt[0] != '-':
diff --git a/lib/ldb-samba/ldif_handlers.c b/lib/ldb-samba/ldif_handlers.c
index 52c77bd..9c49f75 100644
--- a/lib/ldb-samba/ldif_handlers.c
+++ b/lib/ldb-samba/ldif_handlers.c
@@ -915,6 +915,19 @@ static int ldif_write_dnsRecord(struct ldb_context *ldb, void *mem_ctx,
 }
 
 /*
+  convert a NDR formatted blob to a ldif formatted dnsProperty
+*/
+static int ldif_write_dnsProperty(struct ldb_context *ldb, void *mem_ctx,
+				const struct ldb_val *in, struct ldb_val *out)
+{
+	return ldif_write_NDR(ldb, mem_ctx, in, out,
+			      sizeof(struct dnsp_DnsProperty),
+			      (ndr_pull_flags_fn_t)ndr_pull_dnsp_DnsProperty,
+			      (ndr_print_fn_t)ndr_print_dnsp_DnsProperty,
+			      true);
+}
+
+/*
   convert a NDR formatted blob of a supplementalCredentials into text
 */
 static int ldif_write_supplementalCredentialsBlob(struct ldb_context *ldb, void *mem_ctx,
@@ -1348,6 +1361,13 @@ static const struct ldb_schema_syntax samba_syntaxes[] = {
 		.comparison_fn	  = ldb_comparison_binary,
 		.operator_fn      = samba_syntax_operator_fn
 	},{
+		.name		  = LDB_SYNTAX_SAMBA_DNSPROPERTY,
+		.ldif_read_fn	  = ldb_handler_copy,
+		.ldif_write_fn	  = ldif_write_dnsProperty,
+		.canonicalise_fn  = ldb_handler_copy,
+		.comparison_fn	  = ldb_comparison_binary,
+		.operator_fn      = samba_syntax_operator_fn
+	},{
 		.name		  = LDB_SYNTAX_SAMBA_SUPPLEMENTALCREDENTIALS,
 		.ldif_read_fn	  = ldb_handler_copy,
 		.ldif_write_fn	  = ldif_write_supplementalCredentialsBlob,
@@ -1480,6 +1500,7 @@ static const struct {
 
 	/* These NDR encoded things we want to be able to read with --show-binary */
 	{ "dnsRecord",				LDB_SYNTAX_SAMBA_DNSRECORD },
+	{ "dnsProperty",			LDB_SYNTAX_SAMBA_DNSPROPERTY },
 	{ "supplementalCredentials",		LDB_SYNTAX_SAMBA_SUPPLEMENTALCREDENTIALS},
 	{ "partialAttributeSet",		LDB_SYNTAX_SAMBA_PARTIALATTRIBUTESET}
 };
diff --git a/lib/ldb-samba/ldif_handlers.h b/lib/ldb-samba/ldif_handlers.h
index eb6c656..41a2208 100644
--- a/lib/ldb-samba/ldif_handlers.h
+++ b/lib/ldb-samba/ldif_handlers.h
@@ -13,6 +13,7 @@
 #define LDB_SYNTAX_SAMBA_REPLUPTODATEVECTOR     "LDB_SYNTAX_SAMBA_REPLUPTODATEVECTOR"
 #define LDB_SYNTAX_SAMBA_RANGE64		"LDB_SYNTAX_SAMBA_RANGE64"
 #define LDB_SYNTAX_SAMBA_DNSRECORD		"LDB_SYNTAX_SAMBA_DNSRECORD"
+#define LDB_SYNTAX_SAMBA_DNSPROPERTY		"LDB_SYNTAX_SAMBA_DNSPROPERTY"
 #define LDB_SYNTAX_SAMBA_SUPPLEMENTALCREDENTIALS "LDB_SYNTAX_SAMBA_SUPPLEMENTALCREDENTIALS"
 #define LDB_SYNTAX_SAMBA_SDDL_SECURITY_DESCRIPTOR "LDB_SYNTAX_SAMBA_SDDL"
 #define LDB_SYNTAX_SAMBA_TRUSTAUTHINOUTBLOB     "LDB_SYNTAX_SAMBA_TRUSTAUTHINOUTBLOB"
diff --git a/lib/ldb/common/ldb_modules.c b/lib/ldb/common/ldb_modules.c
index c8a53e2..47ec434 100644
--- a/lib/ldb/common/ldb_modules.c
+++ b/lib/ldb/common/ldb_modules.c
@@ -218,7 +218,7 @@ int ldb_module_connect_backend(struct ldb_context *ldb,
 
 	if (ret != LDB_SUCCESS) {
 		ldb_debug(ldb, LDB_DEBUG_ERROR,
-			  "Failed to connect to '%s' with backend '%s': %s", url, be->ops->name, ldb_errstring(ret));
+			  "Failed to connect to '%s' with backend '%s': %s", url, be->ops->name, ldb_errstring(ldb));
 		return ret;
 	}
 	return ret;
diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 0918cce..4274e9b 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -3298,7 +3298,7 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
 	lpcfg_do_global_parameter(lp_ctx, "ntvfs handler", "unixuid default");
 	lpcfg_do_global_parameter(lp_ctx, "max connections", "-1");
 
-	lpcfg_do_global_parameter(lp_ctx, "dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg dssetup unixinfo browser eventlog6 backupkey");
+	lpcfg_do_global_parameter(lp_ctx, "dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg dssetup unixinfo browser eventlog6 backupkey dnsserver");
 	lpcfg_do_global_parameter(lp_ctx, "server services", "smb rpc nbt wrepl ldap cldap kdc drepl winbind ntp_signd kcc dnsupdate");
 	lpcfg_do_global_parameter(lp_ctx, "ntptr providor", "simple_ldb");
 	/* the winbind method for domain controllers is for both RODC
diff --git a/libcli/util/werror.h b/libcli/util/werror.h
index d59f4d6..b490974 100644
--- a/libcli/util/werror.h
+++ b/libcli/util/werror.h
@@ -2400,11 +2400,41 @@ typedef uint32_t WERROR;
 #define WERR_DNS_ERROR_RCODE_BADSIG	W_ERROR(0x00002338)
 #define WERR_DNS_ERROR_RCODE_BADKEY	W_ERROR(0x00002339)
 #define WERR_DNS_ERROR_RCODE_BADTIME	W_ERROR(0x0000233A)
+#define WERR_DNS_ERROR_KEYMASTER_REQUIRED		W_ERROR(0x0000238D)
+#define WERR_DNS_ERROR_NOT_ALLOWED_ON_SIGNED_ZONE	W_ERROR(0x0000238E)
+#define WERR_DNS_ERROR_INVALID_NSEC3_PARAMETERS		W_ERROR(0x0000238F)
+#define WERR_DNS_ERROR_NOT_ENOUGH_SIGNING_KEY_DESCRIPTORS	W_ERROR(0x00002390)
+#define WERR_DNS_ERROR_UNSUPPORTED_ALGORITHM		W_ERROR(0x00002391)
+#define WERR_DNS_ERROR_INVALID_KEY_SIZE			W_ERROR(0x00002392)
+#define WERR_DNS_ERROR_SIGNING_KEY_NOT_ACCESSIBLE	W_ERROR(0x00002393)
+#define WERR_DNS_ERROR_KSP_DOES_NOT_SUPPORT_PROTECTION	W_ERROR(0x00002394)
+#define WERR_DNS_ERROR_UNEXPECTED_DATA_PROTECTION_ERROR	W_ERROR(0x00002395)
+#define WERR_DNS_ERROR_UNEXPECTED_CNG_ERROR		W_ERROR(0x00002396)
+#define WERR_DNS_ERROR_UNKNOWN_SIGNING_PARAMETER_VERSION	W_ERROR(0x00002397)
+#define WERR_DNS_ERROR_KSP_NOT_ACCESSIBLE		W_ERROR(0x00002398)
+#define WERR_DNS_ERROR_TOO_MANY_SKDS			W_ERROR(0x00002399)
+#define WERR_DNS_ERROR_INVALID_ROLLOVER_PERIOD		W_ERROR(0x0000239A)
+#define WERR_DNS_ERROR_INVALID_INITIAL_ROLLOVER_OFFSET	W_ERROR(0x0000239B)
+#define WERR_DNS_ERROR_ROLLOVER_IN_PROGRESS		W_ERROR(0x0000239C)
+#define WERR_DNS_ERROR_STANDBY_KEY_NOT_PRESENT		W_ERROR(0x0000239D)
+#define WERR_DNS_ERROR_NOT_ALLOWED_ON_ZSK		W_ERROR(0x0000239E)
+#define WERR_DNS_ERROR_NOT_ALLOWED_ON_ACTIVE_SKD	W_ERROR(0x0000239F)
+#define WERR_DNS_ERROR_ROLLOVER_ALREADY_QUEUED		W_ERROR(0x000023A0)
+#define WERR_DNS_ERROR_NOT_ALLOWED_ON_UNSIGNED_ZONE	W_ERROR(0x000023A1)
+#define WERR_DNS_ERROR_BAD_KEYMASTER			W_ERROR(0x000023A2)
+#define WERR_DNS_ERROR_INVALID_SIGNATURE_VALIDITY_PERIOD	W_ERROR(0x000023A3)
+#define WERR_DNS_ERROR_INVALID_NSEC3_ITERATION_COUNT	W_ERROR(0x000023A4)
+#define WERR_DNS_ERROR_DNSSEC_IS_DISABLED		W_ERROR(0x000023A5)
+#define WERR_DNS_ERROR_INVALID_XML			W_ERROR(0x000023A6)
+#define WERR_DNS_ERROR_NO_VALID_TRUST_ANCHORS		W_ERROR(0x000023A7)
+#define WERR_DNS_ERROR_ROLLOVER_NOT_POKEABLE		W_ERROR(0x000023A8)
+#define WERR_DNS_ERROR_NSEC3_NAME_COLLISION		W_ERROR(0x000023A9)
 #define WERR_DNS_INFO_NO_RECORDS	W_ERROR(0x0000251D)
 #define WERR_DNS_ERROR_BAD_PACKET	W_ERROR(0x0000251E)
 #define WERR_DNS_ERROR_NO_PACKET	W_ERROR(0x0000251F)
 #define WERR_DNS_ERROR_RCODE	W_ERROR(0x00002520)
 #define WERR_DNS_ERROR_UNSECURE_PACKET	W_ERROR(0x00002521)
+#define WERR_DNS_REQUEST_PENDING	W_ERROR(0x00002522)
 #define WERR_DNS_ERROR_INVALID_TYPE	W_ERROR(0x0000254F)
 #define WERR_DNS_ERROR_INVALID_IP_ADDRESS	W_ERROR(0x00002550)
 #define WERR_DNS_ERROR_INVALID_PROPERTY	W_ERROR(0x00002551)
@@ -2424,6 +2454,9 @@ typedef uint32_t WERROR;
 #define WERR_DNS_ERROR_DWORD_VALUE_TOO_LARGE	W_ERROR(0x0000255F)
 #define WERR_DNS_ERROR_BACKGROUND_LOADING	W_ERROR(0x00002560)
 #define WERR_DNS_ERROR_NOT_ALLOWED_ON_RODC	W_ERROR(0x00002561)
+#define WERR_DNS_ERROR_NOT_ALLOWED_UNDER_DNAME	W_ERROR(0x00002562)
+#define WERR_DNS_ERROR_DELEGATION_REQUIRED	W_ERROR(0x00002563)
+#define WERR_DNS_ERROR_INVALID_POLICY_TABLE	W_ERROR(0x00002564)
 #define WERR_DNS_ERROR_ZONE_DOES_NOT_EXIST	W_ERROR(0x00002581)
 #define WERR_DNS_ERROR_NO_ZONE_INFO	W_ERROR(0x00002582)
 #define WERR_DNS_ERROR_INVALID_ZONE_OPERATION	W_ERROR(0x00002583)
@@ -2469,6 +2502,9 @@ typedef uint32_t WERROR;
 #define WERR_DNS_ERROR_DS_UNAVAILABLE	W_ERROR(0x000025F5)
 #define WERR_DNS_ERROR_DS_ZONE_ALREADY_EXISTS	W_ERROR(0x000025F6)
 #define WERR_DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE	W_ERROR(0x000025F7)
+#define WERR_DNS_ERROR_NODE_IS_DNMAE	W_ERROR(0x000025F8)
+#define WERR_DNS_ERROR_DNAME_COLLISION	W_ERROR(0x000025F9)
+#define WERR_DNS_ERROR_ALIAS_LOOP	W_ERROR(0x000025FA)
 #define WERR_DNS_INFO_AXFR_COMPLETE	W_ERROR(0x00002617)
 #define WERR_DNS_ERROR_AXFR	W_ERROR(0x00002618)
 #define WERR_DNS_INFO_ADDED_LOCAL_WINS	W_ERROR(0x00002619)
diff --git a/librpc/idl/dnsp.idl b/librpc/idl/dnsp.idl
index 12af30a..258b3a2 100644
--- a/librpc/idl/dnsp.idl
+++ b/librpc/idl/dnsp.idl
@@ -65,6 +65,23 @@ interface dnsp
 		DNS_TYPE_WINSR = 0xFF02
 	} dns_record_type;
 
+	typedef [bitmap32bit] bitmap {
+		DNS_RPC_FLAG_SUPPRESS_NOTIFY	= 0x00010000,
+		DNS_RPC_FLAG_AGING_ON			= 0x00020000,
+		DNS_RPC_FLAG_OPEN_ACL			= 0x00040000,
+		DNS_RPC_FLAG_NODE_COMPLETE		= 0x00800000,
+		DNS_RPC_FLAG_NODE_STICKY		= 0x01000000,
+		DNS_RPC_FLAG_RECORD_CREATE_PTR	= 0x02000000,
+		DNS_RPC_FLAG_RECORD_TTL_CHANGE	= 0x04000000,
+		DNS_RPC_FLAG_RECORD_DEFAULT_TTL	= 0x08000000,
+		DNS_RPC_FLAG_ZONE_DELEGATION	= 0x10000000,
+		DNS_RPC_FLAG_AUTH_ZONE_ROOT		= 0x20000000,
+		DNS_RPC_FLAG_ZONE_ROOT			= 0x40000000,
+		DNS_RPC_FLAG_CACHE_DATA			= 0x80000000
+	}
+	dns_rpc_node_flags;
+
+
 	typedef [enum8bit] enum {
 		DNS_RANK_NONE		        = 0x00,
 		DNS_RANK_CACHE_BIT              = 0x01,
@@ -81,6 +98,48 @@ interface dnsp
 		DNS_RANK_ZONE                   = 0xf0
 	} dns_record_rank;
 
+	typedef [v1_enum] enum {
+		DNS_ZONE_TYPE_CACHE             = 0x00,
+		DNS_ZONE_TYPE_PRIMARY           = 0x01,
+		DNS_ZONE_TYPE_SECONDARY         = 0x02,
+		DNS_ZONE_TYPE_STUB              = 0x03,
+		DNS_ZONE_TYPE_FORWARDER         = 0x04,
+		DNS_ZONE_TYPE_SECONDARY_CACHE   = 0x05
+	} dns_zone_type;
+
+	typedef [public,enum8bit] enum {
+		DNS_ZONE_UPDATE_OFF         = 0x00,
+		DNS_ZONE_UPDATE_UNSECURE    = 0x01,
+		DNS_ZONE_UPDATE_SECURE      = 0x02
+	} dns_zone_update;
+
+	typedef [v1_enum] enum {
+		DSPROPERTY_ZONE_EMPTY                   = 0x00,
+		DSPROPERTY_ZONE_TYPE                    = 0x01,
+		DSPROPERTY_ZONE_ALLOW_UPDATE            = 0x02,
+		DSPROPERTY_ZONE_SECURE_TIME             = 0x08,
+		DSPROPERTY_ZONE_NOREFRESH_INTERVAL      = 0x10,
+		DSPROPERTY_ZONE_SCAVENGING_SERVERS      = 0x11,
+		DSPROPERTY_ZONE_AGING_ENABLED_TIME      = 0x12,
+		DSPROPERTY_ZONE_REFRESH_INTERVAL        = 0x20,
+		DSPROPERTY_ZONE_AGING_STATE             = 0x40,
+		DSPROPERTY_ZONE_DELETED_FROM_HOSTNAME   = 0x80,
+		DSPROPERTY_ZONE_MASTER_SERVERS          = 0x81,
+		DSPROPERTY_ZONE_AUTO_NS_SERVERS         = 0x82,
+		DSPROPERTY_ZONE_DCPROMO_CONVERT         = 0x83,
+		DSPROPERTY_ZONE_SCAVENGING_SERVERS_DA   = 0x90,
+		DSPROPERTY_ZONE_MASTER_SERVERS_DA       = 0x91,
+		DSPROPERTY_ZONE_NS_SERVERS_DA           = 0x92,
+		DSPROPERTY_ZONE_NODE_DBFLAGS			= 0x100
+
+	} dns_property_id;
+
+	typedef [enum8bit] enum {
+		DCPROMO_CONVERT_NONE    = 0x00,
+		DCPROMO_CONVERT_DOMAIN  = 0x01,
+		DCPROMO_CONVERT_FOREST  = 0x02
+	} dns_dcpromo_flag;
+
 	typedef [public] struct {
 		uint32		serial;
 		uint32		refresh;
@@ -108,7 +167,33 @@ interface dnsp
 		dnsp_name       nameTarget;
 	} dnsp_srv;
 
-	typedef [nodiscriminant,gensize,public] union {
+	typedef struct {
+		uint32  addrCount;
+		[size_is(addrCount)] uint32 *addr;
+	} dnsp_ip4_array;
+
+	typedef struct {
+		uint16 	family;
+		uint16	port;
+		ipv4address ipv4;
+		ipv6address ipv6;
+		uint8	pad[8];
+		uint32	unused[8];
+	} dnsp_dns_addr;
+
+	typedef [public] struct {
+		uint32	MaxCount;
+		uint32	AddrCount;
+		uint32	Tag;
+		uint16	Family;
+		uint16	Reserved0;
+		uint32	MatchFlag;
+		uint32	Reserved1;
+		uint32	Reserved2;
+		dnsp_dns_addr AddrArray[AddrCount];
+	} dnsp_dns_addr_array;
+
+	typedef [nodiscriminant,gensize] union {
 		[case(DNS_TYPE_TOMBSTONE)] 		    NTTIME timestamp;
 		[case(DNS_TYPE_A)] [flag(NDR_BIG_ENDIAN)]   ipv4address ipv4;
 		[case(DNS_TYPE_NS)]                         dnsp_name ns;
@@ -132,17 +217,52 @@ interface dnsp
 		dns_record_rank 	rank;
 		uint16			flags;
 		uint32          	dwSerial;
-	        [flag(NDR_BIG_ENDIAN)]  uint32   dwTtlSeconds;
+		[flag(NDR_BIG_ENDIAN)]  uint32   dwTtlSeconds;
 		uint32          	dwReserved;
 		uint32			dwTimeStamp;
 		[switch_is(wType)] dnsRecordData data;
 	} dnsp_DnssrvRpcRecord;
 
+	typedef [nodiscriminant,gensize] union {
+		[case(DSPROPERTY_ZONE_EMPTY)]					;
+		[case(DSPROPERTY_ZONE_TYPE)]                    dns_zone_type zone_type;
+		[case(DSPROPERTY_ZONE_ALLOW_UPDATE)]            dns_zone_update allow_update_flag;
+		[case(DSPROPERTY_ZONE_SECURE_TIME)]             NTTIME zone_secure_time;
+		[case(DSPROPERTY_ZONE_NOREFRESH_INTERVAL)]      uint32 norefresh_hours;
+		[case(DSPROPERTY_ZONE_REFRESH_INTERVAL)]        uint32 refresh_hours;
+		[case(DSPROPERTY_ZONE_AGING_STATE)]             uint32 aging_enabled;
+		[case(DSPROPERTY_ZONE_SCAVENGING_SERVERS)]      dnsp_ip4_array servers;
+		[case(DSPROPERTY_ZONE_AGING_ENABLED_TIME)]      uint32 next_scavenging_cycle_hours;
+		[case(DSPROPERTY_ZONE_DELETED_FROM_HOSTNAME)]   utf8string deleted_by_hostname;
+		[case(DSPROPERTY_ZONE_MASTER_SERVERS)]          dnsp_ip4_array master_servers;
+		[case(DSPROPERTY_ZONE_AUTO_NS_SERVERS)]         dnsp_ip4_array ns_servers;
+		[case(DSPROPERTY_ZONE_DCPROMO_CONVERT)]         dns_dcpromo_flag dcpromo_flag;
+		[case(DSPROPERTY_ZONE_SCAVENGING_SERVERS_DA)]	dnsp_dns_addr_array s_ns_servers;
+		[case(DSPROPERTY_ZONE_MASTER_SERVERS_DA)]		dnsp_dns_addr_array z_master_servers;
+		[case(DSPROPERTY_ZONE_NS_SERVERS_DA)]			dnsp_dns_addr_array d_ns_servers;
+		[case(DSPROPERTY_ZONE_NODE_DBFLAGS)]			dns_rpc_node_flags flags;
+	} dnsPropertyData;
+
+	/* this is the format for the dnsProperty attribute in the DNS
+	   partitions in AD */
+	typedef [flag(NDR_NOALIGN),public] struct {
+		[value(ndr_size_dnsPropertyData(&data,id,ndr->flags))] uint32 wDataLength;
+		uint32   			namelength;
+		[value(0)] uint32   flag;
+		[value(1)] uint32   version;
+		dns_property_id     id;
+		[switch_is(wDataLength?id:DSPROPERTY_ZONE_EMPTY)]     dnsPropertyData data;
+		uint32              name;
+	} dnsp_DnsProperty;
 
 	/*
-	  this is a convenience hook for ndrdump
+	  these are convenience hooks for ndrdump
 	 */
 	void decode_DnssrvRpcRecord(
 		[in] dnsp_DnssrvRpcRecord blob
 		);
+
+	void decode_DnsProperty(
+		[in] dnsp_DnsProperty blob
+		);
 }
diff --git a/librpc/idl/dnsserver.idl b/librpc/idl/dnsserver.idl
index 33fadc6..306414e 100644
--- a/librpc/idl/dnsserver.idl
+++ b/librpc/idl/dnsserver.idl
@@ -9,7 +9,9 @@ import "misc.idl", "dnsp.idl";
 [ uuid("50abc2a4-574d-40b3-9d66-ee4fd5fba076"),
   version(5.0),
   pointer_default(unique),
-  helpstring("DNS Server")
+  endpoint("ncacn_ip_tcp:", "ncacn_np:[\\pipe\\dnsserver]"),
+  helper("../librpc/ndr/ndr_dnsserver.h"),
+  helpstring("DNS Management Server")
 ] interface dnsserver
 {
 
@@ -23,18 +25,155 @@ import "misc.idl", "dnsp.idl";
 #define DWORD uint32
 #define PDWORD uint32 *
 
+	/* */
+	/*   DNS RPC data types */
+	/* */
+
+	typedef [v1_enum] enum {
+		DNS_RPC_USE_TCPIP			= 0x00000001,
+		DNS_RPC_USE_NAMED_PIPE		= 0x00000002,
+		DNS_RPC_USE_LPC				= 0x00000004,
+		DNS_RPC_USE_ALL_PROTOCOLS	= 0xFFFFFFFF
+	}
+	DNS_RPC_PROTOCOLS;
+
+	typedef [v1_enum] enum {
+		DNS_CLIENT_VERSION_W2K		= 0x00000000,
+		DNS_CLIENT_VERSION_DOTNET	= 0x00060000,
+		DNS_CLIENT_VERSION_LONGHORN = 0x00070000
+	}
+	DNS_RPC_CLIENT_VERSION;
+
+	/* Return buffer */
 	typedef struct {
-		DWORD       StatId;
-		WORD        wLength;
-		BOOLEAN     fClear;
-		UCHAR       fReserved;
-	} DNSSRV_STAT_HEADER;
+		DWORD                       dwLength;
+		[size_is(dwLength)] BYTE    Buffer[];
+	} DNS_RPC_BUFFER;
 
+	/* String Array */
+	typedef struct {
+		[range(0,10000)]        DWORD       dwCount;
+		[size_is(dwCount),string,charset(UTF8)]      char *       pszStrings[];
+	} DNS_RPC_UTF8_STRING_LIST;
 
+	/* Name and parameter value */
 	typedef struct {
-		DNSSRV_STAT_HEADER Header;
-		BYTE                Buffer[1];
-	} DNSSRV_STAT;
+		DWORD       dwParam;
+		[string, charset(UTF8)] char *       pszNodeName;
+	}
+	DNS_RPC_NAME_AND_PARAM;
+
+
+	/* */
+	/*   DNS Resource Record data types */
+	/* */
+
+	/* DNS_RECORD_TYPE is defined in dnsp.idl as dns_record_type */
+	/* DNS_RPC_NODE_FLAGS is defined in dnsp.idl as dns_rpc_node_flags */
+
+	typedef [gensize] struct {
+		[value(strlen(str))] uint8 len;
+		[charset(UTF8)] uint8 str[len];
+	}
+	DNS_RPC_NAME;
+
+	typedef struct {
+		uint16 wLength;
+		uint16 wRecordCount;
+		uint32 dwFlags;
+		uint32 dwChildCount;
+		DNS_RPC_NAME dnsNodeName;
+	}
+	DNS_RPC_NODE;
+
+	typedef struct {
+		uint32 dwSerialNo;
+		uint32 dwRefresh;
+		uint32 dwRetry;
+		uint32 dwExpire;
+		uint32 dwMinimumTtl;
+		DNS_RPC_NAME NamePrimaryServer;
+		DNS_RPC_NAME ZoneAdministratorEmail;
+	}
+	DNS_RPC_RECORD_SOA;
+
+	typedef struct {
+		uint16 wPreference;
+		DNS_RPC_NAME nameExchange;
+	}
+	DNS_RPC_RECORD_NAME_PREFERENCE;
+
+	typedef struct {
+		uint16 wPriority;
+		uint16 wWeight;
+		uint16 wPort;
+		DNS_RPC_NAME nameTarget;
+	}
+	DNS_RPC_RECORD_SRV;
+
+	typedef [nodiscriminant,gensize,flag(NDR_NOALIGN)] union {
+		[case(DNS_TYPE_TOMBSTONE)] 		    NTTIME timestamp;
+		[case(DNS_TYPE_A)] [flag(NDR_BIG_ENDIAN)]   ipv4address ipv4;
+		[case(DNS_TYPE_NS)]    				DNS_RPC_NAME name;
+		[case(DNS_TYPE_MD)]    				DNS_RPC_NAME name;
+		[case(DNS_TYPE_MF)]    				DNS_RPC_NAME name;
+		[case(DNS_TYPE_CNAME)] 				DNS_RPC_NAME name;
+		[case(DNS_TYPE_SOA)]   				DNS_RPC_RECORD_SOA soa;
+		[case(DNS_TYPE_MB)]    				DNS_RPC_NAME name;
+		[case(DNS_TYPE_MG)]    				DNS_RPC_NAME name;
+		[case(DNS_TYPE_MR)]    				DNS_RPC_NAME name;
+		[case(DNS_TYPE_PTR)]   				DNS_RPC_NAME ptr;
+		[case(DNS_TYPE_HINFO)]   			DNS_RPC_NAME hinfo;
+		[case(DNS_TYPE_MX)]   				DNS_RPC_RECORD_NAME_PREFERENCE mx;
+		[case(DNS_TYPE_TXT)]   				DNS_RPC_NAME name;
+		[case(DNS_TYPE_AAAA)]   			ipv6address ipv6;
+		[case(DNS_TYPE_SRV)]   				DNS_RPC_RECORD_SRV srv;
+		[case(DNS_TYPE_DNAME)] 				DNS_RPC_NAME name;
+	}
+	DNS_RPC_DATA;
+
+	typedef [public] struct {
+		[value(ndr_size_DNS_RPC_DATA(&data,wType,0))] uint16 wDataLength;
+		dns_record_type        wType;
+		DWORD       dwFlags;
+		DWORD       dwSerial;
+		DWORD       dwTtlSeconds;
+		DWORD       dwTimeStamp;
+		DWORD       dwReserved;
+		[subcontext(0),subcontext_size(wDataLength),switch_is(wType)] DNS_RPC_DATA data;
+	}
+	DNS_RPC_RECORD;
+
+	typedef struct {
+		[value(ndr_size_DNS_RPC_DATA(&rec.data,rec.wType,0))] uint3264 wContextLength;
+		DNS_RPC_RECORD rec;
+	}
+	DNS_RPC_RECORD_BUF;
+
+
+	/* */
+	/*   DNS Address Information data types */
+	/* */
+
+	typedef [v1_enum] enum {
+		DNS_IPVAL_DNS_SERVERS		= 0x00,
+		DNS_IPVAL_DNS_ROOTHINTS		= 0x01,
+		DNS_IPVAL_DNS_FORWARDERS	= 0x02,
+		DNS_IPVAL_DNS_ZONE_MASTERS	= 0x03,
+		DNS_IPVAL_DNS_DELEGATIONS	= 0x04
+	}
+	DNS_IPVAL_CONTEXT;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list