[SCM] Samba Shared Repository - branch master updated

Joseph Sutton jsutton at samba.org
Fri Dec 24 03:04:01 UTC 2021


The branch, master has been updated
       via  9a68025ad39 s4:rpc_server/netlogon: adjust the valid_flags based on dsdb_dc_functional_level()
       via  d9abd7fff58 s4:rpc_server/netlogon: adjust the flags logic to MS-NRPC 3.5.4.3.1 DsrGetDcNameEx2
       via  55948433135 dsdb/netlogon: Indicate DC functional level support in samlogon response
       via  0e515b3309d dsdb/netlogon: make use of dsdb_dc_functional_level() in fill_netlogon_samlogon_response()
       via  e0b47257d9f dsgetdcname: Display new flags in debug output
       via  454e46c467f netlogon.idl: Add flags for indicating directory service versions
       via  2926cfb299c s4:rpc_server/dnsserver: make use of dsdb_dc_functional_level()
       via  b5f71e25d49 dsdb/common: add dsdb_dc_functional_level() helper
      from  2da538a4585 python:tests: Don't require an emtpy 'authorization-data' to be present

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


- Log -----------------------------------------------------------------
commit 9a68025ad391b148166c25b7dec06a7ce12fe4a6
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Dec 23 18:32:44 2021 +0100

    s4:rpc_server/netlogon: adjust the valid_flags based on dsdb_dc_functional_level()
    
    This allows us to let DS_DIRECTORY_SERVICE_{8,9,10}_REQUIRED through
    based on the manual changed msDS-Behavior-Version of our NTDSA object.
    
    We still need to have tests depending on the msDS-Behavior-Version
    value if the DSGETDC_VALID_FLAGS is really correct at all.
    But for now this allows us to test krb5 FAST from Windows clients.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    
    Autobuild-User(master): Joseph Sutton <jsutton at samba.org>
    Autobuild-Date(master): Fri Dec 24 03:03:50 UTC 2021 on sn-devel-184

commit d9abd7fff58970725fa1375bf0ed210602e45d27
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Dec 22 14:41:50 2021 +1300

    s4:rpc_server/netlogon: adjust the flags logic to MS-NRPC 3.5.4.3.1 DsrGetDcNameEx2
    
    Note that this doesn't change the logic as we still reject
    DS_DIRECTORY_SERVICE_{8,9,10}_REQUIRED via the initial DSGETDC_VALID_FLAGS
    check. The may change that in future, but may need some tests for it.
    
    Pair-Programmed-With: Stefan Metzmacher <metze at samba.org>
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 55948433135929488fa8370f826afdc02db1bf2a
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Dec 22 14:51:08 2021 +1300

    dsdb/netlogon: Indicate DC functional level support in samlogon response
    
    The DS_SERVER_DS_8 flag is necessary for Windows to detect FAST support.
    
    Note for know we only ever have DS_DOMAIN_FUNCTION_2008_R2 (4) in the
    msDS-Behavior-Version attribute of our own NTDSA object. So
    for now this is only for manual testing. In future we most likely
    want to extend 'samba-tool domain level' to raise the dc level
    manually or let 'samba' autoupgrade the value.
    
    Pair-Programmed-With: Stefan Metzmacher <metze at samba.org>
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 0e515b3309d0c3bbb63447fb712df2279f071551
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Dec 23 11:40:58 2021 +0100

    dsdb/netlogon: make use of dsdb_dc_functional_level() in fill_netlogon_samlogon_response()
    
    [MS-ADTS] 6.3.3.2 "Domain Controller Response to an LDAP Ping" indicates
    that the resulting flags depend on the server software (behavior)
    and not the domain wide functional level.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Joseph Sutton <josephsutton at catalyst.net.nz>

commit e0b47257d9f004e943da78dcb84f9a4a15552cef
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Dec 22 14:53:44 2021 +1300

    dsgetdcname: Display new flags in debug output
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 454e46c467fbba9814c03c7200c58efb269c326d
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Thu Dec 23 10:57:50 2021 +1300

    netlogon.idl: Add flags for indicating directory service versions
    
    Pair-Programmed-With: Stefan Metzmacher <metze at samba.org>
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 2926cfb299c14a6d80c32059377833d41fd7a32a
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Dec 23 11:34:25 2021 +0100

    s4:rpc_server/dnsserver: make use of dsdb_dc_functional_level()
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Joseph Sutton <josephsutton at catalyst.net.nz>

commit b5f71e25d49cff27a7f9c48b60a1a0eb70adfeec
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Dec 23 11:34:02 2021 +0100

    dsdb/common: add dsdb_dc_functional_level() helper
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Joseph Sutton <josephsutton at catalyst.net.nz>

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

Summary of changes:
 librpc/idl/netlogon.idl                       |  20 ++++-
 source3/libsmb/dsgetdcname.c                  |  24 +++---
 source4/dsdb/common/util.c                    |  15 ++++
 source4/dsdb/samdb/ldb_modules/netlogon.c     |  16 +++-
 source4/rpc_server/dnsserver/dnsutils.c       |   2 +-
 source4/rpc_server/netlogon/dcerpc_netlogon.c | 112 ++++++++++++++++++++++++--
 6 files changed, 165 insertions(+), 24 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/idl/netlogon.idl b/librpc/idl/netlogon.idl
index e9a4b192a9f..5832d6862be 100644
--- a/librpc/idl/netlogon.idl
+++ b/librpc/idl/netlogon.idl
@@ -1149,6 +1149,13 @@ interface netlogon
 					 DS_TRY_NEXTCLOSEST_SITE |
 					 DS_DIRECTORY_SERVICE_6_REQUIRED |
 					 DS_WEB_SERVICE_REQUIRED |
+					 /*
+					  * For now we skip these until
+					  * we have test for them:
+					  * DS_DIRECTORY_SERVICE_8_REQUIRED |
+					  * DS_DIRECTORY_SERVICE_9_REQUIRED |
+					  * DS_DIRECTORY_SERVICE_10_REQUIRED |
+					  */
 					 DS_RETURN_FLAT_NAME |
 					 DS_RETURN_DNS_NAME);
 
@@ -1169,8 +1176,11 @@ interface netlogon
 		DS_IS_FLAT_NAME			= 0x00010000,
 		DS_IS_DNS_NAME			= 0x00020000,
 		DS_TRY_NEXTCLOSEST_SITE		= 0x00040000,
-		DS_DIRECTORY_SERVICE_6_REQUIRED = 0x00080000,
+		DS_DIRECTORY_SERVICE_6_REQUIRED = 0x00080000, /* 2008 */
 		DS_WEB_SERVICE_REQUIRED		= 0x00100000,
+		DS_DIRECTORY_SERVICE_8_REQUIRED = 0x00200000, /* 2012 */
+		DS_DIRECTORY_SERVICE_9_REQUIRED = 0x00400000, /* 2012R2 */
+		DS_DIRECTORY_SERVICE_10_REQUIRED= 0x00800000, /* 2016 */
 		DS_RETURN_DNS_NAME		= 0x40000000,
 		DS_RETURN_FLAT_NAME		= 0x80000000
 	} netr_DsRGetDCName_flags;
@@ -1191,10 +1201,12 @@ interface netlogon
 		DS_SERVER_WRITABLE		 = 0x00000100,
 		DS_SERVER_GOOD_TIMESERV		 = 0x00000200,
 		DS_SERVER_NDNC			 = 0x00000400,
-		DS_SERVER_SELECT_SECRET_DOMAIN_6 = 0x00000800,
-		DS_SERVER_FULL_SECRET_DOMAIN_6	 = 0x00001000,
+		DS_SERVER_SELECT_SECRET_DOMAIN_6 = 0x00000800, /* 2008 / RODC */
+		DS_SERVER_FULL_SECRET_DOMAIN_6	 = 0x00001000, /* 2008 / RWDC */
 		DS_SERVER_WEBSERV		 = 0x00002000,
-		DS_SERVER_DS_8			 = 0x00004000,
+		DS_SERVER_DS_8			 = 0x00004000, /* 2012 */
+		DS_SERVER_DS_9			 = 0x00008000, /* 2012R2 */
+		DS_SERVER_DS_10			 = 0x00010000, /* 2016 */
 		DS_DNS_CONTROLLER		 = 0x20000000,
 		DS_DNS_DOMAIN			 = 0x40000000,
 		DS_DNS_FOREST_ROOT		 = 0x80000000
diff --git a/source3/libsmb/dsgetdcname.c b/source3/libsmb/dsgetdcname.c
index 5954e48d747..42714fcb2a1 100644
--- a/source3/libsmb/dsgetdcname.c
+++ b/source3/libsmb/dsgetdcname.c
@@ -89,18 +89,18 @@ static void debug_dsdcinfo_flags(int lvl, uint32_t flags)
 		DEBUGADD(lvl,("DS_IS_FLAT_NAME "));
 	if (flags & DS_IS_DNS_NAME)
 		DEBUGADD(lvl,("DS_IS_DNS_NAME "));
-	if (flags & 0x00040000)
-		DEBUGADD(lvl,("0x00040000 "));
-	if (flags & 0x00080000)
-		DEBUGADD(lvl,("0x00080000 "));
-	if (flags & 0x00100000)
-		DEBUGADD(lvl,("0x00100000 "));
-	if (flags & 0x00200000)
-		DEBUGADD(lvl,("0x00200000 "));
-	if (flags & 0x00400000)
-		DEBUGADD(lvl,("0x00400000 "));
-	if (flags & 0x00800000)
-		DEBUGADD(lvl,("0x00800000 "));
+	if (flags & DS_TRY_NEXTCLOSEST_SITE)
+		DEBUGADD(lvl,("DS_TRY_NEXTCLOSEST_SITE "));
+	if (flags & DS_DIRECTORY_SERVICE_6_REQUIRED)
+		DEBUGADD(lvl,("DS_DIRECTORY_SERVICE_6_REQUIRED "));
+	if (flags & DS_WEB_SERVICE_REQUIRED)
+		DEBUGADD(lvl,("DS_WEB_SERVICE_REQUIRED "));
+	if (flags & DS_DIRECTORY_SERVICE_8_REQUIRED)
+		DEBUGADD(lvl,("DS_DIRECTORY_SERVICE_8_REQUIRED "));
+	if (flags & DS_DIRECTORY_SERVICE_9_REQUIRED)
+		DEBUGADD(lvl,("DS_DIRECTORY_SERVICE_9_REQUIRED "));
+	if (flags & DS_DIRECTORY_SERVICE_10_REQUIRED)
+		DEBUGADD(lvl,("DS_DIRECTORY_SERVICE_10_REQUIRED "));
 	if (flags & 0x01000000)
 		DEBUGADD(lvl,("0x01000000 "));
 	if (flags & 0x02000000)
diff --git a/source4/dsdb/common/util.c b/source4/dsdb/common/util.c
index 9b4afa45215..5da75f2d28f 100644
--- a/source4/dsdb/common/util.c
+++ b/source4/dsdb/common/util.c
@@ -3841,6 +3841,21 @@ int dsdb_forest_functional_level(struct ldb_context *ldb)
 	return *forestFunctionality;
 }
 
+/*
+ * This detects and returns the DC functional level (DS_DOMAIN_FUNCTION_*)
+ */
+int dsdb_dc_functional_level(struct ldb_context *ldb)
+{
+	int *dcFunctionality =
+		talloc_get_type(ldb_get_opaque(ldb, "domainFunctionality"), int);
+	if (!dcFunctionality) {
+		/* this is expected during initial provision */
+		DEBUG(4,(__location__ ": WARNING: domainControllerFunctionality not setup\n"));
+		return DS_DOMAIN_FUNCTION_2008_R2;
+	}
+	return *dcFunctionality;
+}
+
 /*
   set a GUID in an extended DN structure
  */
diff --git a/source4/dsdb/samdb/ldb_modules/netlogon.c b/source4/dsdb/samdb/ldb_modules/netlogon.c
index 66ab70b6f54..4864ae4740e 100644
--- a/source4/dsdb/samdb/ldb_modules/netlogon.c
+++ b/source4/dsdb/samdb/ldb_modules/netlogon.c
@@ -77,6 +77,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
 	struct interface *ifaces;
 	bool user_known = false, am_rodc = false;
 	uint32_t uac = 0;
+	int dc_level;
 	NTSTATUS status;
 
 	/* the domain parameter could have an optional trailing "." */
@@ -287,7 +288,8 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
 		server_type |= DS_SERVER_WRITABLE;
 	}
 
-	if (dsdb_functional_level(sam_ctx) >= DS_DOMAIN_FUNCTION_2008) {
+	dc_level = dsdb_dc_functional_level(sam_ctx);
+	if (dc_level >= DS_DOMAIN_FUNCTION_2008) {
 		if (server_type & DS_SERVER_WRITABLE) {
 			server_type |= DS_SERVER_FULL_SECRET_DOMAIN_6;
 		} else {
@@ -295,6 +297,18 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
 		}
 	}
 
+	if (dc_level >= DS_DOMAIN_FUNCTION_2012) {
+		server_type |= DS_SERVER_DS_8;
+	}
+
+	if (dc_level >= DS_DOMAIN_FUNCTION_2012_R2) {
+		server_type |= DS_SERVER_DS_9;
+	}
+
+	if (dc_level >= DS_DOMAIN_FUNCTION_2016) {
+		server_type |= DS_SERVER_DS_10;
+	}
+
 	if (version & (NETLOGON_NT_VERSION_5EX|NETLOGON_NT_VERSION_5EX_WITH_IP)) {
 		pdc_name = lpcfg_netbios_name(lp_ctx);
 	} else {
diff --git a/source4/rpc_server/dnsserver/dnsutils.c b/source4/rpc_server/dnsserver/dnsutils.c
index 94407be0dcf..56b2690aa95 100644
--- a/source4/rpc_server/dnsserver/dnsutils.c
+++ b/source4/rpc_server/dnsserver/dnsutils.c
@@ -148,7 +148,7 @@ struct dnsserver_serverinfo *dnsserver_init_serverinfo(TALLOC_CTX *mem_ctx,
 
 	serverinfo->dwDsForestVersion = dsdb_forest_functional_level(samdb);
 	serverinfo->dwDsDomainVersion = dsdb_functional_level(samdb);
-	serverinfo->dwDsDsaVersion = 4; /* need to do ldb search here */
+	serverinfo->dwDsDsaVersion = dsdb_dc_functional_level(samdb);
 
 	serverinfo->pszDomainName = samdb_dn_to_dns_domain(mem_ctx, domain_dn);
 	serverinfo->pszForestName = samdb_dn_to_dns_domain(mem_ctx, forest_dn);
diff --git a/source4/rpc_server/netlogon/dcerpc_netlogon.c b/source4/rpc_server/netlogon/dcerpc_netlogon.c
index 670f7a46358..269bea7c6fc 100644
--- a/source4/rpc_server/netlogon/dcerpc_netlogon.c
+++ b/source4/rpc_server/netlogon/dcerpc_netlogon.c
@@ -2990,6 +2990,31 @@ struct dcesrv_netr_DsRGetDCName_base_state {
 
 static void dcesrv_netr_DsRGetDCName_base_done(struct tevent_req *subreq);
 
+/* Returns a nonzero value if multiple bits in 'val' are set. */
+static bool multiple_bits_set(uint32_t val)
+{
+	/*
+	 * Subtracting one from an integer has the effect of flipping all the
+	 * bits from the least significant bit up to and including the least
+	 * significant '1' bit. For example,
+	 *
+	 *   0b101000 - 1
+	 * = 0b100111
+	 *       ====
+	 *
+	 * If 'val' is zero, all the bits will be flipped and thus the bitwise
+	 * AND of 'val' with 'val - 1' will be zero.
+	 *
+	 * If the integer is nonzero, the least significant '1' bit will be
+	 * ANDed with a '0' bit and so will be reset in the final result, but
+	 * all other '1' bits will remain set. In other words, the effect of
+	 * this expression is to mask off the least significant bit that is
+	 * set. Therefore iff the result of 'val & (val - 1)' is non-zero, 'val'
+	 * must contain multiple set bits.
+	 */
+	return val & (val - 1);
+}
+
 static WERROR dcesrv_netr_DsRGetDCName_base_call(struct dcesrv_netr_DsRGetDCName_base_state *state)
 {
 	struct dcesrv_call_state *dce_call = state->dce_call;
@@ -3012,6 +3037,8 @@ static WERROR dcesrv_netr_DsRGetDCName_base_call(struct dcesrv_netr_DsRGetDCName
 	const char *domain_name = NULL;
 	const char *pdc_ip;
 	bool different_domain = true;
+	uint32_t valid_flags;
+	int dc_level;
 
 	ZERO_STRUCTP(r->out.info);
 
@@ -3034,28 +3061,100 @@ static WERROR dcesrv_netr_DsRGetDCName_base_call(struct dcesrv_netr_DsRGetDCName
 
 	/* "server_unc" is ignored by w2k3 */
 
-	if (r->in.flags & ~(DSGETDC_VALID_FLAGS)) {
+	/*
+	 * With the following flags:
+	 * DS_FORCE_REDISCOVERY (Flag A)
+	 * DS_DIRECTORY_SERVICE_REQUIRED (Flag B)
+	 * DS_DIRECTORY_SERVICE_PREFERRED (Flag C)
+	 * DS_GC_SERVER_REQUIRED (Flag D)
+	 * DS_PDC_REQUIRED (Flag E)
+	 * DS_BACKGROUND_ONLY (Flag F)
+	 * DS_IP_REQUIRED (Flag G)
+	 * DS_KDC_REQUIRED (Flag H)
+	 * DS_TIMESERV_REQUIRED (Flag I)
+	 * DS_WRITABLE_REQUIRED (Flag J)
+	 * DS_GOOD_TIMESERV_PREFERRED (Flag K)
+	 * DS_AVOID_SELF (Flag L)
+	 * DS_ONLY_LDAP_NEEDED (Flag M)
+	 * DS_IS_FLAT_NAME (Flag N)
+	 * DS_IS_DNS_NAME (Flag O)
+	 * DS_TRY_NEXTCLOSEST_SITE (Flag P)
+	 * DS_DIRECTORY_SERVICE_6_REQUIRED  (Flag Q)
+	 * DS_WEB_SERVICE_REQUIRED (Flag T)
+	 * DS_DIRECTORY_SERVICE_8_REQUIRED  (Flag U)
+	 * DS_DIRECTORY_SERVICE_9_REQUIRED  (Flag V)
+	 * DS_DIRECTORY_SERVICE_10_REQUIRED (Flag W)
+	 * DS_RETURN_DNS_NAME (Flag R)
+	 * DS_RETURN_FLAT_NAME (Flag S)
+	 *
+	 * MS-NRPC 3.5.4.3.1 says:
+	 * ...
+	 * On receiving this call, the server MUST perform the following Flags
+	 * parameter validations:
+	 * - Flags D, E, and H MUST NOT be combined with each other.
+	 * - Flag N MUST NOT be combined with the O flag.
+	 * - Flag R MUST NOT be combined with the S flag.
+	 * - Flags B, Q, U, V, and W MUST NOT be combined with each other.
+	 * - Flag K MUST NOT be combined with any of the flags: B, C, D, E, or H.
+	 * - Flag P MUST NOT be set when the SiteName parameter is provided.
+	 * The server MUST return ERROR_INVALID_FLAGS for any of the previously
+	 * mentioned conflicting combinations.
+	 * ...
+	 */
+
+	dc_level = dsdb_dc_functional_level(sam_ctx);
+	valid_flags = DSGETDC_VALID_FLAGS;
+	if (dc_level >= DS_DOMAIN_FUNCTION_2012) {
+		valid_flags |= DS_DIRECTORY_SERVICE_8_REQUIRED;
+	}
+	if (dc_level >= DS_DOMAIN_FUNCTION_2012_R2) {
+		valid_flags |= DS_DIRECTORY_SERVICE_9_REQUIRED;
+	}
+	if (dc_level >= DS_DOMAIN_FUNCTION_2016) {
+		valid_flags |= DS_DIRECTORY_SERVICE_10_REQUIRED;
+	}
+	if (r->in.flags & ~valid_flags) {
+		/*
+		 * TODO: add tests to prove this (maybe based on the
+		 * msDS-Behavior-Version levels of dc, domain and/or forest
+		 */
 		return WERR_INVALID_FLAGS;
 	}
 
-	if (r->in.flags & DS_GC_SERVER_REQUIRED &&
-	    r->in.flags & DS_PDC_REQUIRED &&
-	    r->in.flags & DS_KDC_REQUIRED) {
+	/* Flags D, E, and H MUST NOT be combined with each other. */
+#define _DEH (DS_GC_SERVER_REQUIRED|DS_PDC_REQUIRED|DS_KDC_REQUIRED)
+	if (multiple_bits_set(r->in.flags & _DEH)) {
 		return WERR_INVALID_FLAGS;
 	}
+
+	/* Flag N MUST NOT be combined with the O flag. */
 	if (r->in.flags & DS_IS_FLAT_NAME &&
 	    r->in.flags & DS_IS_DNS_NAME) {
 		return WERR_INVALID_FLAGS;
 	}
+
+	/* Flag R MUST NOT be combined with the S flag. */
 	if (r->in.flags & DS_RETURN_DNS_NAME &&
 	    r->in.flags & DS_RETURN_FLAT_NAME) {
 		return WERR_INVALID_FLAGS;
 	}
-	if (r->in.flags & DS_DIRECTORY_SERVICE_REQUIRED &&
-	    r->in.flags & DS_DIRECTORY_SERVICE_6_REQUIRED) {
+
+	/* Flags B, Q, U, V, and W MUST NOT be combined with each other */
+#define _BQUVW ( \
+	DS_DIRECTORY_SERVICE_REQUIRED | \
+	DS_DIRECTORY_SERVICE_6_REQUIRED | \
+	DS_DIRECTORY_SERVICE_8_REQUIRED | \
+	DS_DIRECTORY_SERVICE_9_REQUIRED | \
+	DS_DIRECTORY_SERVICE_10_REQUIRED | \
+0)
+	if (multiple_bits_set(r->in.flags & _BQUVW)) {
 		return WERR_INVALID_FLAGS;
 	}
 
+	/*
+	 * Flag K MUST NOT be combined with any of the flags:
+	 * B, C, D, E, or H.
+	 */
 	if (r->in.flags & DS_GOOD_TIMESERV_PREFERRED &&
 	    r->in.flags &
 	    (DS_DIRECTORY_SERVICE_REQUIRED |
@@ -3066,6 +3165,7 @@ static WERROR dcesrv_netr_DsRGetDCName_base_call(struct dcesrv_netr_DsRGetDCName
 		return WERR_INVALID_FLAGS;
 	}
 
+	/* Flag P MUST NOT be set when the SiteName parameter is provided. */
 	if (r->in.flags & DS_TRY_NEXTCLOSEST_SITE &&
 	    r->in.site_name) {
 		return WERR_INVALID_FLAGS;


-- 
Samba Shared Repository



More information about the samba-cvs mailing list