[SCM] Samba Shared Repository - branch v3-6-test updated

Günther Deschner gd at samba.org
Mon Sep 20 11:52:58 MDT 2010


The branch, v3-6-test has been updated
       via  671211c s4-smbtorture: add test_SetServiceObjectSecurity() to RPC-SVCCTL.
       via  d1413e8 s4-smbtorture: add LOCAL-NDR-NTLMSSP.
       via  114d174 s3-nltest: add dsregdns command to nltest.
       via  1bcc9e5 s3-libnetapi: support NETLOGON_CONTROL_FORCE_DNS_REG in I_NetLogonControl().
       via  4904ea1 libnetapi: deal with NULL data in I_NetLogonControl2().
       via  761c5d8 testprogs: skip two tests in spoolss tester.
       via  9ba8811 s3-nltest: add dsgetdc command.
       via  fd905e7 s3-libnetapi: try using netr_DsRGetDCNameEx() in DsGetDcName().
       via  f36ca53 s3-libnetapi: add DS request flags to public header.
       via  fdbf08c s3-libnetapi: add DS_X_FLAGs to public header.
       via  36839ae libnetapi: add DOMAIN_CONTROLLER_INFO_FLAGS.
       via  c87dd06 s3-nltest: convert server input argument into --server.
       via  1bda5a0 s3-nltest: rename print_result to print_netlogon_info_result.
      from  5ada1b9 s4-smbtorture: try to fix spoolss winreg Form tests on bigendian machines.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test


- Log -----------------------------------------------------------------
commit 671211c539767af5a64508ad4cf8776c27345a54
Author: Günther Deschner <gd at samba.org>
Date:   Fri Apr 24 13:44:54 2009 +0200

    s4-smbtorture: add test_SetServiceObjectSecurity() to RPC-SVCCTL.
    
    Guenther
    (cherry picked from commit f12756b5acac3fad4178f009865f8bcc5b6934a2)

commit d1413e8877bfed6d0a2b2c21621d8ef6cf0e225e
Author: Günther Deschner <gd at samba.org>
Date:   Tue Sep 14 17:27:55 2010 +0200

    s4-smbtorture: add LOCAL-NDR-NTLMSSP.
    
    Guenther
    (cherry picked from commit 55f465576c4602e74a6bc5c194adb27231c520f8)

commit 114d17415cf124e2a36bc47ebd76680362e3563c
Author: Günther Deschner <gd at samba.org>
Date:   Fri Sep 17 13:16:26 2010 +0200

    s3-nltest: add dsregdns command to nltest.
    
    Guenther
    (cherry picked from commit 1d8094172c69ec8d64701b70a87ddf31b0d8f4f9)

commit 1bcc9e5329dfde5ec484ae24695a0cbb58ff9f57
Author: Günther Deschner <gd at samba.org>
Date:   Fri Sep 17 13:15:35 2010 +0200

    s3-libnetapi: support NETLOGON_CONTROL_FORCE_DNS_REG in I_NetLogonControl().
    
    Guenther
    (cherry picked from commit 8e73826b3c2323c6e81a285f49c6b9d606cb7a53)

commit 4904ea1f3da8c9bfa5572b6970ccd76c5f454472
Author: Günther Deschner <gd at samba.org>
Date:   Fri Sep 17 13:14:50 2010 +0200

    libnetapi: deal with NULL data in I_NetLogonControl2().
    
    Guenther
    (cherry picked from commit 47a7a5830c145dd12e200fa12fec41bc745046d3)

commit 761c5d88ca9eee89bb9c9c08de1c5a6b87e2ad90
Author: Günther Deschner <gd at samba.org>
Date:   Fri Sep 17 10:06:16 2010 +0200

    testprogs: skip two tests in spoolss tester.
    
    Guenther
    (cherry picked from commit b772f4cdffda7f7e1bd0a7951bec0304102606d2)

commit 9ba8811dbabfab63c874b953df813ddea707bf2e
Author: Günther Deschner <gd at samba.org>
Date:   Fri Sep 10 09:56:36 2010 +0200

    s3-nltest: add dsgetdc command.
    
    Guenther
    (cherry picked from commit c35629cbb2e5f7c6743c8c15e0b3bb424e611931)

commit fd905e7dc8366c4f9dc832df31c82ca4474efc08
Author: Günther Deschner <gd at samba.org>
Date:   Wed Sep 15 10:11:38 2010 +0200

    s3-libnetapi: try using netr_DsRGetDCNameEx() in DsGetDcName().
    
    Guenther
    (cherry picked from commit bbdbb0cbcc3de9a3188b77c2d34cf46a33bbe980)

commit f36ca53e911e57bfa4d1c631d56a512b760f1ea8
Author: Günther Deschner <gd at samba.org>
Date:   Sat Sep 11 01:23:01 2010 +0200

    s3-libnetapi: add DS request flags to public header.
    
    Guenther
    (cherry picked from commit 3fe966d28003f8a09a29c9a9051672e0e066e7b6)

commit fdbf08c56771d05a3a8e89933390306df0cbbcf5
Author: Günther Deschner <gd at samba.org>
Date:   Sat Sep 11 01:19:07 2010 +0200

    s3-libnetapi: add DS_X_FLAGs to public header.
    
    Guenther
    (cherry picked from commit 26672e228a6eb327f5810ee1b6adb8b4bb39d5ec)

commit 36839aec7f7a13fb0866e570811e5eab340830b6
Author: Günther Deschner <gd at samba.org>
Date:   Sat Sep 11 01:18:04 2010 +0200

    libnetapi: add DOMAIN_CONTROLLER_INFO_FLAGS.
    
    Guenther
    (cherry picked from commit 45d772e0e616186cd8b45c81d7c775e07ab0d7ae)

commit c87dd0604050033f511d973c0709b0761922a0e3
Author: Günther Deschner <gd at samba.org>
Date:   Tue Sep 14 17:39:45 2010 +0200

    s3-nltest: convert server input argument into --server.
    
    Guenther
    (cherry picked from commit 5901e81acff9b6da965782276e457069bf2be55d)

commit 1bda5a0f921dc78d191fbeb39e86d6cfe1a535a4
Author: Günther Deschner <gd at samba.org>
Date:   Fri Sep 10 09:56:02 2010 +0200

    s3-nltest: rename print_result to print_netlogon_info_result.
    
    Guenther
    (cherry picked from commit a609c03956843b11d335b7f3b0f8d5a330588711)

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

Summary of changes:
 source3/lib/netapi/examples/netlogon/nltest.c |  268 ++++++++++++++++++++++---
 source3/lib/netapi/getdc.c                    |   13 ++
 source3/lib/netapi/netapi.h                   |   37 ++++
 source3/lib/netapi/netlogon.c                 |    4 +
 source3/librpc/idl/libnetapi.idl              |   22 ++-
 source4/torture/config.mk                     |    2 +-
 source4/torture/ndr/ndr.c                     |    1 +
 source4/torture/ndr/ntlmssp.c                 |  119 +++++++++++
 source4/torture/rpc/svcctl.c                  |   63 ++++++-
 source4/torture/wscript_build                 |    2 +-
 testprogs/win32/spoolss/testspoolss.c         |    4 +
 11 files changed, 499 insertions(+), 36 deletions(-)
 create mode 100644 source4/torture/ndr/ntlmssp.c


Changeset truncated at 500 lines:

diff --git a/source3/lib/netapi/examples/netlogon/nltest.c b/source3/lib/netapi/examples/netlogon/nltest.c
index 9dc70da..0c393ea 100644
--- a/source3/lib/netapi/examples/netlogon/nltest.c
+++ b/source3/lib/netapi/examples/netlogon/nltest.c
@@ -30,18 +30,43 @@
 #include "common.h"
 
 enum {
-	OPT_DBFLAG = 1,
+	OPT_SERVER = 1,
+	OPT_DBFLAG,
 	OPT_SC_QUERY,
 	OPT_SC_RESET,
 	OPT_SC_VERIFY,
-	OPT_SC_CHANGE_PWD
+	OPT_SC_CHANGE_PWD,
+	OPT_DSGETDC,
+	OPT_PDC,
+	OPT_DS,
+	OPT_DSP,
+	OPT_GC,
+	OPT_KDC,
+	OPT_TIMESERV,
+	OPT_GTIMESERV,
+	OPT_WS,
+	OPT_NETBIOS,
+	OPT_DNS,
+	OPT_IP,
+	OPT_FORCE,
+	OPT_WRITABLE,
+	OPT_AVOIDSELF,
+	OPT_LDAPONLY,
+	OPT_BACKG,
+	OPT_DS_6,
+	OPT_TRY_NEXT_CLOSEST_SITE,
+	OPT_SITE,
+	OPT_ACCOUNT,
+	OPT_RET_DNS,
+	OPT_RET_NETBIOS,
+	OPT_DSREGDNS
 };
 
 /****************************************************************
 ****************************************************************/
 
-static void print_result(uint32_t level,
-			 uint8_t *buffer)
+static void print_netlogon_info_result(uint32_t level,
+				       uint8_t *buffer)
 {
 	struct NETLOGON_INFO_1 *i1 = NULL;
 	struct NETLOGON_INFO_2 *i2 = NULL;
@@ -100,25 +125,128 @@ static void print_result(uint32_t level,
 /****************************************************************
 ****************************************************************/
 
+static void print_dc_info_flags(uint32_t flags)
+{
+	if (flags & DS_PDC_FLAG)
+		printf("PDC ");
+	if (flags & DS_GC_FLAG)
+		printf("GC ");
+	if (flags & DS_DS_FLAG)
+		printf("DS ");
+	if (flags & DS_LDAP_FLAG)
+		printf("LDAP ");
+	if (flags & DS_KDC_FLAG)
+		printf("KDC ");
+	if (flags & DS_TIMESERV_FLAG)
+		printf("TIMESERV ");
+	if (flags & DS_GOOD_TIMESERV_FLAG)
+		printf("GTIMESERV ");
+	if (flags & DS_WRITABLE_FLAG)
+		printf("WRITABLE ");
+	if (flags & DS_DNS_FOREST_FLAG)
+		printf("DNS_FOREST ");
+	if (flags & DS_CLOSEST_FLAG)
+		printf("CLOSE_SITE ");
+	if (flags & DS_FULL_SECRET_DOMAIN_6_FLAG)
+		printf("FULL_SECRET ");
+	/* "WS" */
+	printf("\n");
+}
+
+/****************************************************************
+****************************************************************/
+
+static void print_dc_info(struct DOMAIN_CONTROLLER_INFO *dc_info)
+{
+	if (dc_info->flags) {
+		printf("           DC: %s\n", dc_info->domain_controller_name);
+		printf("      Address: %s\n", dc_info->domain_controller_address);
+/*		printf("     Dom Guid: %s\n", X(domain_guid)); */
+		printf("     Dom Name: %s\n", dc_info->domain_name);
+		printf("  Forest Name: %s\n", dc_info->dns_forest_name);
+		printf(" Dc Site Name: %s\n", dc_info->dc_site_name);
+		printf("Our Site Name: %s\n", dc_info->client_site_name);
+		printf("        Flags: ");
+		print_dc_info_flags(dc_info->flags);
+	} else {
+		printf("           DC: %s\n", dc_info->domain_controller_name);
+		printf("      Address: %s\n", dc_info->domain_controller_address);
+		printf("     Dom Name: %s\n", dc_info->domain_name);
+	}
+}
+
+/****************************************************************
+****************************************************************/
+
 int main(int argc, const char **argv)
 {
 	int opt;
 	NET_API_STATUS status;
 	struct libnetapi_ctx *ctx = NULL;
-	const char *server_name = NULL;
+	char *opt_server = NULL;
 	char *opt_domain = NULL;
 	int opt_dbflag = 0;
+	int opt_pdc = 0;
+	int opt_ds = 0;
+	int opt_dsp = 0;
+	int opt_gc = 0;
+	int opt_kdc = 0;
+	int opt_timeserv = 0;
+	int opt_gtimeserv = 0;
+	int opt_ws = 0;
+	int opt_netbios = 0;
+	int opt_dns = 0;
+	int opt_ip = 0;
+	int opt_force = 0;
+	int opt_writable = 0;
+	int opt_avoidself = 0;
+	int opt_ldaponly = 0;
+	int opt_backg = 0;
+	int opt_ds_6 = 0;
+	int opt_try_next_closest_site = 0;
+	char *opt_site = NULL;
+	char *opt_account = NULL;
+	int opt_ret_dns = 0;
+	int opt_ret_netbios = 0;
+	int opt_dsregdns = 0;
 	uint32_t query_level = 0;
 	uint8_t *buffer = NULL;
+	uint32_t flags = 0;
+	struct DOMAIN_CONTROLLER_INFO *dc_info = NULL;
 
 	poptContext pc;
 	struct poptOption long_options[] = {
 		POPT_AUTOHELP
+		{"server", 0, POPT_ARG_STRING, &opt_server, OPT_SERVER, "Servername", "SERVER"},
 		{"dbflag", 0, POPT_ARG_INT,   &opt_dbflag, OPT_DBFLAG, "New Debug Flag", "HEXFLAGS"},
 		{"sc_query", 0, POPT_ARG_STRING,   &opt_domain, OPT_SC_QUERY, "Query secure channel for domain on server", "DOMAIN"},
 		{"sc_reset", 0, POPT_ARG_STRING,   &opt_domain, OPT_SC_RESET, "Reset secure channel for domain on server to dcname", "DOMAIN"},
 		{"sc_verify", 0, POPT_ARG_STRING,   &opt_domain, OPT_SC_VERIFY, "Verify secure channel for domain on server", "DOMAIN"},
 		{"sc_change_pwd", 0, POPT_ARG_STRING,   &opt_domain, OPT_SC_CHANGE_PWD, "Change a secure channel password for domain on server", "DOMAIN"},
+		{"dsgetdc", 0, POPT_ARG_STRING, &opt_domain, OPT_DSGETDC, "Call DsGetDcName", "DOMAIN"},
+		{"pdc", 0, POPT_ARG_NONE, &opt_pdc, OPT_PDC, NULL},
+		{"ds", 0, POPT_ARG_NONE, &opt_ds, OPT_DS, NULL},
+		{"dsp", 0, POPT_ARG_NONE, &opt_dsp, OPT_DSP, NULL},
+		{"gc", 0, POPT_ARG_NONE, &opt_gc, OPT_GC, NULL},
+		{"kdc", 0, POPT_ARG_NONE, &opt_kdc, OPT_KDC, NULL},
+		{"timeserv", 0, POPT_ARG_NONE, &opt_timeserv, OPT_TIMESERV, NULL},
+		{"gtimeserv", 0, POPT_ARG_NONE, &opt_gtimeserv, OPT_GTIMESERV, NULL},
+		{"ws", 0, POPT_ARG_NONE, &opt_ws, OPT_WS, NULL},
+		{"netbios", 0, POPT_ARG_NONE, &opt_netbios, OPT_NETBIOS, NULL},
+		{"dns", 0, POPT_ARG_NONE, &opt_dns, OPT_DNS, NULL},
+		{"ip", 0, POPT_ARG_NONE, &opt_ip, OPT_IP, NULL},
+		{"force", 0, POPT_ARG_NONE, &opt_force, OPT_FORCE, NULL},
+		{"writable", 0, POPT_ARG_NONE, &opt_writable, OPT_WRITABLE, NULL},
+		{"avoidself", 0, POPT_ARG_NONE, &opt_avoidself, OPT_AVOIDSELF, NULL},
+		{"ldaponly", 0, POPT_ARG_NONE, &opt_ldaponly, OPT_LDAPONLY, NULL},
+		{"backg", 0, POPT_ARG_NONE, &opt_backg, OPT_BACKG, NULL},
+		{"ds_6", 0, POPT_ARG_NONE, &opt_ds_6, OPT_DS_6, NULL},
+		{"try_next_closest_site", 0, POPT_ARG_NONE, &opt_try_next_closest_site, OPT_TRY_NEXT_CLOSEST_SITE, NULL},
+		{"site", 0, POPT_ARG_STRING, &opt_site, OPT_SITE, "SITE"},
+		{"account", 0, POPT_ARG_STRING, &opt_account, OPT_ACCOUNT, "ACCOUNT"},
+		{"ret_dns", 0, POPT_ARG_NONE, &opt_ret_dns, OPT_RET_DNS, NULL},
+		{"ret_netbios", 0, POPT_ARG_NONE, &opt_ret_netbios, OPT_RET_NETBIOS, NULL},
+		{"dsregdns", 0, POPT_ARG_NONE, &opt_dsregdns, OPT_DSREGDNS, "Force registration of all DC-specific DNS records"},
 		POPT_COMMON_LIBNETAPI_EXAMPLES
 		POPT_TABLEEND
 	};
@@ -130,39 +258,32 @@ int main(int argc, const char **argv)
 
 	pc = poptGetContext("nltest", argc, argv, long_options, 0);
 
-	poptSetOtherOptionHelp(pc, "server_name");
+	poptSetOtherOptionHelp(pc, "<options>");
 	while((opt = poptGetNextOpt(pc)) != -1) {
 	}
 
-	if (!poptPeekArg(pc)) {
-		poptPrintHelp(pc, stderr, 0);
-		goto done;
-	}
-	server_name = poptGetArg(pc);
-
 	if (argc == 1) {
 		poptPrintHelp(pc, stderr, 0);
 		goto done;
 	}
 
-	if (!server_name || poptGetArg(pc)) {
-		poptPrintHelp(pc, stderr, 0);
-		goto done;
-	}
-
-	if ((server_name[0] == '/' && server_name[1] == '/') ||
-	    (server_name[0] == '\\' && server_name[1] ==  '\\')) {
-		server_name += 2;
-	}
-
 	poptResetContext(pc);
 
 	while ((opt = poptGetNextOpt(pc)) != -1) {
 		switch (opt) {
 
+		case OPT_SERVER:
+
+			if ((opt_server[0] == '/' && opt_server[1] == '/') ||
+			    (opt_server[0] == '\\' && opt_server[1] ==  '\\')) {
+				opt_server += 2;
+			}
+
+			break;
+
 		case OPT_DBFLAG:
 			query_level = 1;
-			status = I_NetLogonControl2(server_name,
+			status = I_NetLogonControl2(opt_server,
 						    NETLOGON_CONTROL_SET_DBFLAG,
 						    query_level,
 						    (uint8_t *)opt_dbflag,
@@ -173,10 +294,13 @@ int main(int argc, const char **argv)
 					libnetapi_get_error_string(ctx, status));
 				goto done;
 			}
+
+			print_netlogon_info_result(query_level, buffer);
+
 			break;
 		case OPT_SC_QUERY:
 			query_level = 2;
-			status = I_NetLogonControl2(server_name,
+			status = I_NetLogonControl2(opt_server,
 						    NETLOGON_CONTROL_TC_QUERY,
 						    query_level,
 						    (uint8_t *)opt_domain,
@@ -187,10 +311,13 @@ int main(int argc, const char **argv)
 					libnetapi_get_error_string(ctx, status));
 				goto done;
 			}
+
+			print_netlogon_info_result(query_level, buffer);
+
 			break;
 		case OPT_SC_VERIFY:
 			query_level = 2;
-			status = I_NetLogonControl2(server_name,
+			status = I_NetLogonControl2(opt_server,
 						    NETLOGON_CONTROL_TC_VERIFY,
 						    query_level,
 						    (uint8_t *)opt_domain,
@@ -201,10 +328,13 @@ int main(int argc, const char **argv)
 					libnetapi_get_error_string(ctx, status));
 				goto done;
 			}
+
+			print_netlogon_info_result(query_level, buffer);
+
 			break;
 		case OPT_SC_RESET:
 			query_level = 2;
-			status = I_NetLogonControl2(server_name,
+			status = I_NetLogonControl2(opt_server,
 						    NETLOGON_CONTROL_REDISCOVER,
 						    query_level,
 						    (uint8_t *)opt_domain,
@@ -215,10 +345,13 @@ int main(int argc, const char **argv)
 					libnetapi_get_error_string(ctx, status));
 				goto done;
 			}
+
+			print_netlogon_info_result(query_level, buffer);
+
 			break;
 		case OPT_SC_CHANGE_PWD:
 			query_level = 1;
-			status = I_NetLogonControl2(server_name,
+			status = I_NetLogonControl2(opt_server,
 						    NETLOGON_CONTROL_CHANGE_PASSWORD,
 						    query_level,
 						    (uint8_t *)opt_domain,
@@ -229,15 +362,88 @@ int main(int argc, const char **argv)
 					libnetapi_get_error_string(ctx, status));
 				goto done;
 			}
+
+			print_netlogon_info_result(query_level, buffer);
+
+			break;
+		case OPT_DSREGDNS:
+			query_level = 1;
+			status = I_NetLogonControl2(opt_server,
+						    NETLOGON_CONTROL_FORCE_DNS_REG,
+						    query_level,
+						    NULL,
+						    &buffer);
+			if (status != 0) {
+				fprintf(stderr, "I_NetlogonControl failed: Status = %d 0x%x %s\n",
+					status, status,
+					libnetapi_get_error_string(ctx, status));
+				goto done;
+			}
+
+			print_netlogon_info_result(query_level, buffer);
+
+			break;
+		case OPT_DSGETDC:
+			if (opt_pdc)
+				flags |= DS_PDC_REQUIRED;
+			if (opt_ds)
+				flags |= DS_DIRECTORY_SERVICE_REQUIRED;
+			if (opt_dsp)
+				flags |= DS_DIRECTORY_SERVICE_PREFERRED;
+			if (opt_kdc)
+				flags |= DS_KDC_REQUIRED;
+			if (opt_timeserv)
+				flags |= DS_TIMESERV_REQUIRED;
+			if (opt_gtimeserv)
+				flags |= DS_GOOD_TIMESERV_PREFERRED;
+			if (opt_ws)
+				flags |= DS_WEB_SERVICE_REQUIRED;
+			if (opt_netbios)
+				flags |= DS_IS_FLAT_NAME;
+			if (opt_dns)
+				flags |= DS_IS_DNS_NAME;
+			if (opt_ip)
+				flags |= DS_IP_REQUIRED;
+			if (opt_force)
+				flags |= DS_FORCE_REDISCOVERY;
+			if (opt_writable)
+				flags |= DS_WRITABLE_REQUIRED;
+			if (opt_avoidself)
+				flags |= DS_AVOID_SELF;
+			if (opt_ldaponly)
+				flags |= DS_ONLY_LDAP_NEEDED;
+			if (opt_backg)
+				flags |= DS_BACKGROUND_ONLY;
+			if (opt_ds_6)
+				flags |= DS_DIRECTORY_SERVICE_6_REQUIRED;
+			if (opt_try_next_closest_site)
+				flags |= DS_TRY_NEXTCLOSEST_SITE;
+			if (opt_ret_dns)
+				flags |= DS_RETURN_DNS_NAME;
+			if (opt_ret_netbios)
+				flags |= DS_RETURN_FLAT_NAME;
+
+			status = DsGetDcName(opt_server,
+					     opt_domain,
+					     NULL, /* domain_guid */
+					     opt_site,
+					     flags,
+					     &dc_info);
+			if (status != 0) {
+				fprintf(stderr, "DsGetDcName failed: Status = %d 0x%x %s\n",
+					status, status,
+					libnetapi_get_error_string(ctx, status));
+				goto done;
+			}
+
+			print_dc_info(dc_info);
+
 			break;
 		default:
-			poptPrintHelp(pc, stderr, 0);
-			goto done;
+			continue;
 		}
 	}
 
-	print_result(query_level, buffer);
-
 	printf("The command completed successfully\n");
 	status = 0;
 
diff --git a/source3/lib/netapi/getdc.c b/source3/lib/netapi/getdc.c
index 787b258..565ccbc 100644
--- a/source3/lib/netapi/getdc.c
+++ b/source3/lib/netapi/getdc.c
@@ -146,6 +146,19 @@ WERROR DsGetDcName_r(struct libnetapi_ctx *ctx,
 		goto done;
 	}
 
+	status = rpccli_netr_DsRGetDCNameEx(pipe_cli,
+					    ctx,
+					    r->in.server_name,
+					    r->in.domain_name,
+					    r->in.domain_guid,
+					    r->in.site_name,
+					    r->in.flags,
+					    (struct netr_DsRGetDCNameInfo **)r->out.dc_info,
+					    &werr);
+	if (NT_STATUS_IS_OK(status)) {
+		goto done;
+	}
+
 	status = rpccli_netr_DsRGetDCName(pipe_cli,
 					  ctx,
 					  r->in.server_name,
diff --git a/source3/lib/netapi/netapi.h b/source3/lib/netapi/netapi.h
index 8976ebd..9e1549d 100644
--- a/source3/lib/netapi/netapi.h
+++ b/source3/lib/netapi/netapi.h
@@ -1284,6 +1284,22 @@ struct NETLOGON_INFO_4 {
 	const char * netlog4_trusted_domain_name;
 };
 
+#define DS_PDC_FLAG ( 0x00000001 )
+#define DS_GC_FLAG ( 0x00000004 )
+#define DS_LDAP_FLAG ( 0x00000008 )
+#define DS_DS_FLAG ( 0x00000010 )
+#define DS_KDC_FLAG ( 0x00000020 )
+#define DS_TIMESERV_FLAG ( 0x00000040 )
+#define DS_CLOSEST_FLAG ( 0x00000080 )
+#define DS_WRITABLE_FLAG ( 0x00000100 )
+#define DS_GOOD_TIMESERV_FLAG ( 0x00000200 )
+#define DS_NDNC_FLAG ( 0x00000400 )
+#define DS_SELECT_SECRET_DOMAIN_6_FLAG ( 0x00000800 )
+#define DS_FULL_SECRET_DOMAIN_6_FLAG ( 0x00001000 )
+#define DS_DNS_CONTROLLER_FLAG ( 0x20000000 )
+#define DS_DNS_DOMAIN_FLAG ( 0x40000000 )
+#define DS_DNS_FOREST_FLAG ( 0x80000000 )
+
 #endif /* _HEADER_libnetapi */
 
 #ifndef _HEADER_netlogon
@@ -1305,6 +1321,27 @@ struct NETLOGON_INFO_4 {
 #define NETLOGON_CONTROL_SET_DBFLAG ( 0x0000FFFE )
 #define NETLOGON_CONTROL_BREAKPOINT ( 0x0000FFFF )
 
+#define DS_FORCE_REDISCOVERY ( 0x00000001 )
+#define DS_DIRECTORY_SERVICE_REQUIRED ( 0x00000010 )
+#define DS_DIRECTORY_SERVICE_PREFERRED ( 0x00000020 )
+#define DS_GC_SERVER_REQUIRED ( 0x00000040 )
+#define DS_PDC_REQUIRED ( 0x00000080 )
+#define DS_BACKGROUND_ONLY ( 0x00000100 )
+#define DS_IP_REQUIRED ( 0x00000200 )
+#define DS_KDC_REQUIRED ( 0x00000400 )
+#define DS_TIMESERV_REQUIRED ( 0x00000800 )
+#define DS_WRITABLE_REQUIRED ( 0x00001000 )
+#define DS_GOOD_TIMESERV_PREFERRED ( 0x00002000 )
+#define DS_AVOID_SELF ( 0x00004000 )
+#define DS_ONLY_LDAP_NEEDED ( 0x00008000 )
+#define DS_IS_FLAT_NAME ( 0x00010000 )
+#define DS_IS_DNS_NAME ( 0x00020000 )
+#define DS_TRY_NEXTCLOSEST_SITE ( 0x00040000 )
+#define DS_DIRECTORY_SERVICE_6_REQUIRED ( 0x00080000 )
+#define DS_WEB_SERVICE_REQUIRED ( 0x00100000 )
+#define DS_RETURN_DNS_NAME ( 0x40000000 )
+#define DS_RETURN_FLAT_NAME ( 0x80000000 )
+
 #endif /* _HEADER_netlogon */
 
 /****************************************************************
diff --git a/source3/lib/netapi/netlogon.c b/source3/lib/netapi/netlogon.c
index d58b7cc..932ab8b 100644
--- a/source3/lib/netapi/netlogon.c
+++ b/source3/lib/netapi/netlogon.c
@@ -43,6 +43,9 @@ static WERROR construct_data(enum netr_LogonControlCode function_code,
 	case NETLOGON_CONTROL_SET_DBFLAG:
 		data_out->debug_level = atoi((const char *)data_in);
 		break;
+	case NETLOGON_CONTROL_FORCE_DNS_REG:
+		ZERO_STRUCTP(data_out);
+		break;
 	default:
 		return WERR_INVALID_PARAM;
 	}
@@ -193,6 +196,7 @@ WERROR I_NetLogonControl2_r(struct libnetapi_ctx *ctx,
 	switch (r->in.function_code) {
 	case NETLOGON_CONTROL_TC_VERIFY:
 	case NETLOGON_CONTROL_SET_DBFLAG:
+	case NETLOGON_CONTROL_FORCE_DNS_REG:
 		status = rpccli_netr_LogonControl2Ex(pipe_cli, ctx,
 						     r->in.server_name,
 						     r->in.function_code,
diff --git a/source3/librpc/idl/libnetapi.idl b/source3/librpc/idl/libnetapi.idl
index c57048d..935256a 100644
--- a/source3/librpc/idl/libnetapi.idl
+++ b/source3/librpc/idl/libnetapi.idl
@@ -800,6 +800,24 @@ interface libnetapi
 	/* DsGetDcName                             */
 	/*******************************************/
 
+	[public] typedef [v1_enum] enum {
+		DS_PDC_FLAG			= 0x00000001,
+		DS_GC_FLAG			= 0x00000004,
+		DS_LDAP_FLAG			= 0x00000008,
+		DS_DS_FLAG			= 0x00000010,


-- 
Samba Shared Repository


More information about the samba-cvs mailing list