[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Wed Sep 15 02:17:36 MDT 2010


The branch, master has been updated
       via  c35629c s3-nltest: add dsgetdc command.
       via  bbdbb0c s3-libnetapi: try using netr_DsRGetDCNameEx() in DsGetDcName().
       via  3fe966d s3-libnetapi: add DS request flags to public header.
       via  26672e2 s3-libnetapi: add DS_X_FLAGs to public header.
       via  45d772e libnetapi: add DOMAIN_CONTROLLER_INFO_FLAGS.
       via  5901e81 s3-nltest: convert server input argument into --server.
       via  a609c03 s3-nltest: rename print_result to print_netlogon_info_result.
      from  2d23ddb s3-build: only link in prs parser where needed.

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


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

    s3-nltest: add dsgetdc command.
    
    Guenther

commit bbdbb0cbcc3de9a3188b77c2d34cf46a33bbe980
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

commit 3fe966d28003f8a09a29c9a9051672e0e066e7b6
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

commit 26672e228a6eb327f5810ee1b6adb8b4bb39d5ec
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

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

    libnetapi: add DOMAIN_CONTROLLER_INFO_FLAGS.
    
    Guenther

commit 5901e81acff9b6da965782276e457069bf2be55d
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

commit a609c03956843b11d335b7f3b0f8d5a330588711
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

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

Summary of changes:
 source3/lib/netapi/examples/netlogon/nltest.c |  248 +++++++++++++++++++++---
 source3/lib/netapi/getdc.c                    |   13 ++
 source3/lib/netapi/netapi.h                   |   37 ++++
 source3/librpc/idl/libnetapi.idl              |   20 ++-
 4 files changed, 286 insertions(+), 32 deletions(-)


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..e3ced90 100644
--- a/source3/lib/netapi/examples/netlogon/nltest.c
+++ b/source3/lib/netapi/examples/netlogon/nltest.c
@@ -30,18 +30,42 @@
 #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
 };
 
 /****************************************************************
 ****************************************************************/
 
-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 +124,126 @@ 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;
 	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},
 		POPT_COMMON_LIBNETAPI_EXAMPLES
 		POPT_TABLEEND
 	};
@@ -130,39 +255,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 +291,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 +308,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 +325,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 +342,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 +359,71 @@ 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_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/librpc/idl/libnetapi.idl b/source3/librpc/idl/libnetapi.idl
index c57048d..f83896c 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,
+		DS_KDC_FLAG			= 0x00000020,
+		DS_TIMESERV_FLAG		= 0x00000040,
+		DS_CLOSEST_FLAG			= 0x00000080,
+		DS_WRITABLE_FLAG		= 0x00000100,
+		DS_GOOD_TIMESERV_FLAG		= 0x00000200,
+		DS_NDNC_FLAG			= 0x00000400,
+		DS_SELECT_SECRET_DOMAIN_6_FLAG	= 0x00000800,
+		DS_FULL_SECRET_DOMAIN_6_FLAG	= 0x00001000,
+		DS_DNS_CONTROLLER_FLAG		= 0x20000000,
+		DS_DNS_DOMAIN_FLAG		= 0x40000000,
+		DS_DNS_FOREST_FLAG		= 0x80000000
+	} DOMAIN_CONTROLLER_INFO_FLAGS;
+
 	[public] typedef struct {
 		string domain_controller_name;
 		string domain_controller_address;
@@ -807,7 +825,7 @@ interface libnetapi
 		GUID domain_guid;
 		string domain_name;
 		string dns_forest_name;
-		uint32 flags;
+		DOMAIN_CONTROLLER_INFO_FLAGS flags;
 		string dc_site_name;
 		string client_site_name;
 	} DOMAIN_CONTROLLER_INFO;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list