The branch, v4-22-test has been updated
       via  29bd6fe9cbe python:lsa_utils: Fix fallback to OpenPolicy2
       via  8a7346f6c03 python:lsa_utils: Don't use optional arguments for 
OpenPolicyFallback()
       via  1f84f56c6df pidl: Update documentation for DCERPC interface 
connections
       via  82aa8314259 librpc:pyrpc: Allow new authenticated rpc connection on 
the same transport as the basis_connection
       via  310b5c9dcec dcesrv_core: Make dcesrv_call_disconnect_after() public
       via  1a3be37e0eb s3:rpc_client: Use cli_rpc_pipe_reopen_np_noauth() for 
OpenPolicy fallback
       via  d0420684649 s3:rpc_cerver: Use dcerpc_lsa_open_policy3() for 
internal RPC
       via  60dc107d2a6 s3:rpc_client: Add cli_rpc_pipe_reopen_np_noauth()
       via  3a7591436e6 pytests: test pysmbd with relative path names via 
samba-tool ntacl
       via  aad39687b6f pysmbd: Fix interactive samba-tool use after 
0bb35e246141
       via  78ed8d3a985 pytests: test pysmbd with non-existent file
       via  836ff80b954 pysmbd: Init mangle_fns
      from  65494ee1223 mdssvc: support a few more attributes

https://git.samba.org/?p=samba.git;a=shortlog;h=v4-22-test


- Log -----------------------------------------------------------------
commit 29bd6fe9cbe538b267bf0ed66823cfe8599afb3d
Author: Stefan Metzmacher <[email protected]>
Date:   Wed Jul 17 18:12:31 2024 +0200

    python:lsa_utils: Fix fallback to OpenPolicy2
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15680
    
    Pair-Programmed-With: Andreas Schneider <[email protected]>
    Signed-off-by: Andreas Schneider <[email protected]>
    Signed-off-by: Stefan Metzmacher <[email protected]>
    
    Autobuild-User(master): Andreas Schneider <[email protected]>
    Autobuild-Date(master): Mon Feb 17 18:33:15 UTC 2025 on atb-devel-224
    
    (cherry picked from commit a814f5d90a3fb85a94c9516dba224037e8fd76f1)
    
    Autobuild-User(v4-22-test): Jule Anger <[email protected]>
    Autobuild-Date(v4-22-test): Thu Feb 20 11:22:18 UTC 2025 on atb-devel-224

commit 8a7346f6c03dd4f5e8394997e1d118d33c950c35
Author: Andreas Schneider <[email protected]>
Date:   Thu Feb 13 10:31:49 2025 +0100

    python:lsa_utils: Don't use optional arguments for OpenPolicyFallback()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15680
    
    Signed-off-by: Andreas Schneider <[email protected]>
    Reviewed-by: Stefan Metzmacher <[email protected]>
    (cherry picked from commit f9a3fc19f1e212c54351c3f94978e66fceeb8835)

commit 1f84f56c6df0813e488701704daf2174bd0f7eb3
Author: Andreas Schneider <[email protected]>
Date:   Mon Feb 17 15:41:06 2025 +0100

    pidl: Update documentation for DCERPC interface connections
    
    https://realpython.com/documenting-python-code/
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15680
    
    Signed-off-by: Andreas Schneider <[email protected]>
    Reviewed-by: Stefan Metzmacher <[email protected]>
    (cherry picked from commit 73ce15e7d5b7ea867849f1aa4fa5390830660f11)

commit 82aa83142598f99d662fb9f16aa20c5e2f5fafa5
Author: Stefan Metzmacher <[email protected]>
Date:   Wed Jul 17 18:11:49 2024 +0200

    librpc:pyrpc: Allow new authenticated rpc connection on the same transport 
as the basis_connection
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15680
    
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>
    (cherry picked from commit 2c171fb1b8c88034a98c3aaf052e99ba5dbbafd9)

commit 310b5c9dcecfba72b3b02632fca08a68c042d2c1
Author: Stefan Metzmacher <[email protected]>
Date:   Wed Jul 17 17:39:24 2024 +0200

    dcesrv_core: Make dcesrv_call_disconnect_after() public
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15680
    
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>
    (cherry picked from commit a094a29e426cc79e23bb4d866334d7735159fb41)

commit 1a3be37e0eb564604b20c5d2ab1842661d466433
Author: Stefan Metzmacher <[email protected]>
Date:   Wed Feb 12 12:45:19 2025 +0100

    s3:rpc_client: Use cli_rpc_pipe_reopen_np_noauth() for OpenPolicy fallback
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15680
    
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>
    (cherry picked from commit 3bbe35d42c4d4a0ce663580dfb035b6beb329ebb)

commit d0420684649383ffbd309d23c69a0bf8a051fc06
Author: Stefan Metzmacher <[email protected]>
Date:   Wed Feb 12 14:17:30 2025 +0100

    s3:rpc_cerver: Use dcerpc_lsa_open_policy3() for internal RPC
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15680
    
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>
    (cherry picked from commit 0c68d9bc0cd5873f7b59be0fe93d64d6d47b5a57)

commit 60dc107d2a6154bf3254218e10b91c2a91ee88d9
Author: Stefan Metzmacher <[email protected]>
Date:   Wed Feb 12 12:35:20 2025 +0100

    s3:rpc_client: Add cli_rpc_pipe_reopen_np_noauth()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15680
    
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>
    (cherry picked from commit d2ac6221db48b93581d7ce48d31f8851c88b77bc)

commit 3a7591436e68d6f18ac8db0fddf853236b5378d0
Author: Björn Baumbach <[email protected]>
Date:   Thu Feb 13 18:05:44 2025 +0100

    pytests: test pysmbd with relative path names via samba-tool ntacl
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15806
    
    Signed-off-by: Björn Baumbach <[email protected]>
    Reviewed-by: Douglas Bagnall <[email protected]>
    
    Autobuild-User(master): Björn Baumbach <[email protected]>
    Autobuild-Date(master): Fri Feb 14 16:18:19 UTC 2025 on atb-devel-224
    
    (cherry picked from commit 3e1c19c2c3f8b0bdf21301431bc886757fd4b3ce)

commit aad39687b6f1facdba5a03319ee6bc45f5915547
Author: Volker Lendecke <[email protected]>
Date:   Wed Feb 12 13:45:42 2025 +0100

    pysmbd: Fix interactive samba-tool use after 0bb35e246141
    
    samba-tool ntacl also calls into pysmbd, and 0bb35e246141 broke
    relative path names. Thanks to Björn Baumbach <[email protected]> for
    testing interactively!!
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=15806
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Douglas Bagnall <[email protected]>
    (cherry picked from commit 26705d047cb885957a49939370e03047429351b6)

commit 78ed8d3a985654a7982e63accded24ddcb5fd378
Author: Björn Baumbach <[email protected]>
Date:   Wed Feb 12 17:15:37 2025 +0100

    pytests: test pysmbd with non-existent file
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15807
    
    Signed-off-by: Björn Baumbach <[email protected]>
    Reviewed-by: Douglas Bagnall <[email protected]>
    (cherry picked from commit 334f621e4b74e9cda735982e223aefc7eefb4631)

commit 836ff80b95403519f6ea925d3c45fcf191bc41d1
Author: Volker Lendecke <[email protected]>
Date:   Mon Jan 13 11:45:06 2025 +0100

    pysmbd: Init mangle_fns
    
    openat_pathref_fsp() eventually calls mangling functions, so we have
    to initialize them.
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=15807
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Douglas Bagnall <[email protected]>
    (cherry picked from commit 0a9946258eb4587f5c132805d7c44062c377f375)

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

Summary of changes:
 librpc/rpc/dcesrv_core.c                    |  4 +-
 librpc/rpc/dcesrv_core.h                    |  3 +
 pidl/lib/Parse/Pidl/Samba4/Python.pm        | 29 +++++++--
 python/samba/lsa_utils.py                   | 67 +++++++++++++--------
 python/samba/netcmd/domain/trust.py         | 93 +++++++++++++----------------
 python/samba/tests/dcerpc/lsa_utils.py      | 51 ++++++++++------
 python/samba/tests/krb5/kdc_base_test.py    | 32 ++++++----
 python/samba/tests/samba_tool/ntacl.py      | 80 +++++++++++++++++++++++++
 source3/lib/netapi/localgroup.c             |  2 +-
 source3/rpc_client/cli_lsarpc.c             | 15 ++++-
 source3/rpc_client/cli_lsarpc.h             |  4 +-
 source3/rpc_client/cli_pipe.c               | 88 +++++++++++++++++++++++++++
 source3/rpc_client/cli_pipe.h               |  2 +
 source3/rpc_server/netlogon/srv_netlog_nt.c |  2 +-
 source3/rpcclient/cmd_lsarpc.c              | 48 +++++++--------
 source3/smbd/pysmbd.c                       | 44 ++++++++++++--
 source3/utils/net_rpc.c                     |  6 +-
 source3/utils/net_rpc_rights.c              |  4 +-
 source3/utils/net_rpc_trust.c               |  2 +-
 source3/winbindd/winbindd_cm.c              |  2 +-
 source3/wscript_build                       |  2 +-
 source4/librpc/rpc/pyrpc_util.c             | 78 +++++++++++++++++++++---
 22 files changed, 496 insertions(+), 162 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/rpc/dcesrv_core.c b/librpc/rpc/dcesrv_core.c
index 66478001640..7fb23d49d61 100644
--- a/librpc/rpc/dcesrv_core.c
+++ b/librpc/rpc/dcesrv_core.c
@@ -783,8 +783,8 @@ static void dcesrv_call_set_list(struct dcesrv_call_state 
*call,
        }
 }
 
-static void dcesrv_call_disconnect_after(struct dcesrv_call_state *call,
-                                        const char *reason)
+void dcesrv_call_disconnect_after(struct dcesrv_call_state *call,
+                                 const char *reason)
 {
        struct dcesrv_auth *a = NULL;
 
diff --git a/librpc/rpc/dcesrv_core.h b/librpc/rpc/dcesrv_core.h
index 90f5bd21d64..0b69af575b2 100644
--- a/librpc/rpc/dcesrv_core.h
+++ b/librpc/rpc/dcesrv_core.h
@@ -566,6 +566,9 @@ NTSTATUS dcesrv_auth_session_key(struct dcesrv_call_state 
*call,
 NTSTATUS dcesrv_transport_session_key(struct dcesrv_call_state *call,
                                      DATA_BLOB *session_key);
 
+void dcesrv_call_disconnect_after(struct dcesrv_call_state *call,
+                                 const char *reason);
+
 /* a useful macro for generating a RPC fault in the backend code */
 #define DCESRV_FAULT(code) do { \
        dce_call->fault_code = code; \
diff --git a/pidl/lib/Parse/Pidl/Samba4/Python.pm 
b/pidl/lib/Parse/Pidl/Samba4/Python.pm
index 1d32f71c886..e6a5ac8bb17 100644
--- a/pidl/lib/Parse/Pidl/Samba4/Python.pm
+++ b/pidl/lib/Parse/Pidl/Samba4/Python.pm
@@ -1597,11 +1597,30 @@ sub Interface($$$)
                $self->pidl("");
 
                my $signature =
-"\"$interface->{NAME}(binding, lp_ctx=None, credentials=None) -> 
connection\\n\"
-\"\\n\"
-\"binding should be a DCE/RPC binding string (for example: 
ncacn_ip_tcp:127.0.0.1)\\n\"
-\"lp_ctx should be a path to a smb.conf file or a param.LoadParm object\\n\"
-\"credentials should be a credentials.Credentials object.\\n\\n\"";
+"\"$interface->{NAME}(binding, lp_ctx=None, credentials=None, 
basis_connection=None) -> connection\\n\"
+\"\\n\\n\"
+\"Parameters\\n\"
+\"----------\\n\"
+\"binding : str\\n\"
+\"    A DCE/RPC binding string (for example: ncacn_ip_tcp:127.0.0.1)\\n\"
+\"lp_ctx : param.LoadParm\\n\"
+\"    Should be a path to a smb.conf file or a param.LoadParm object\\n\"
+\"credentials : credentials.Credentials, optional\\n\"
+\"    A credentials.Credentials object (default is None).\\n\"
+\"basis_connection : samba.dcerpc.ClientConnection, optional\\n\"
+\"    A $interface->{NAME} client connection object (default is None).\\n\"
+\"\\n\\n\"
+\"Returns\\n\"
+\"-------\\n\"
+\"samba.dcerpc.ClientConnection\\n\"
+\"    A ClientConnection object\\n\"
+\"\\n\\n\"
+\"Raises\\n\"
+\"------\\n\"
+\"samba.NTSTATUSError\\n\"
+\"    An NTSTATUS error\\n\"
+\"\\n\"";
+
 
                my $docstring = $self->DocString($interface, 
$interface->{NAME});
 
diff --git a/python/samba/lsa_utils.py b/python/samba/lsa_utils.py
index 043e65f3341..506dc399c93 100644
--- a/python/samba/lsa_utils.py
+++ b/python/samba/lsa_utils.py
@@ -20,24 +20,27 @@ from samba.dcerpc import lsa, drsblobs, misc
 from samba.ndr import ndr_pack
 from samba import (
     NTSTATUSError,
+    ntstatus,
     aead_aes_256_cbc_hmac_sha512,
     arcfour_encrypt,
 )
-from samba.ntstatus import (
-    NT_STATUS_RPC_PROCNUM_OUT_OF_RANGE
-)
 from samba import crypto
 from secrets import token_bytes
+# FIXME from collections.abc import Callable
 
 
 def OpenPolicyFallback(
-    conn: lsa.lsarpc,
+    # new_lsa_conn: Callable[[], lsa.lsarpc], - FIXME the type doesn't work
+    # with python version 3.6 (CentOS8, SLES15).
+    new_lsa_conn,
     system_name: str,
     in_version: int,
     in_revision_info: lsa.revision_info1,
-    sec_qos: bool = False,
-    access_mask: int = 0,
+    sec_qos: bool,
+    access_mask: int,
 ):
+    conn = new_lsa_conn()
+
     attr = lsa.ObjectAttribute()
     if sec_qos:
         qos = lsa.QosInfo()
@@ -48,26 +51,38 @@ def OpenPolicyFallback(
 
         attr.sec_qos = qos
 
-    try:
-        out_version, out_rev_info, policy = conn.OpenPolicy3(
-            system_name,
-            attr,
-            access_mask,
-            in_version,
-            in_revision_info
-        )
-    except NTSTATUSError as e:
-        if e.args[0] == NT_STATUS_RPC_PROCNUM_OUT_OF_RANGE:
-            out_version = 1
-            out_rev_info = lsa.revision_info1()
-            out_rev_info.revision = 1
-            out_rev_info.supported_features = 0
-
-            policy = conn.OpenPolicy2(system_name, attr, access_mask)
-        else:
-            raise
-
-    return out_version, out_rev_info, policy
+    open_policy2 = False
+    if in_revision_info is not None:
+        try:
+            out_version, out_rev_info, policy = conn.OpenPolicy3(
+                system_name,
+                attr,
+                access_mask,
+                in_version,
+                in_revision_info
+            )
+        except NTSTATUSError as e:
+            if e.args[0] == ntstatus.NT_STATUS_RPC_PROCNUM_OUT_OF_RANGE:
+                open_policy2 = True
+            if e.args[0] == ntstatus.NT_STATUS_ACCESS_DENIED:
+                # We need a new connection
+                conn = new_lsa_conn(basis_connection=conn)
+
+                open_policy2 = True
+            else:
+                raise
+    else:
+        open_policy2 = True
+
+    if open_policy2:
+        out_version = 1
+        out_rev_info = lsa.revision_info1()
+        out_rev_info.revision = 1
+        out_rev_info.supported_features = 0
+
+        policy = conn.OpenPolicy2(system_name, attr, access_mask)
+
+    return conn, out_version, out_rev_info, policy
 
 
 def CreateTrustedDomainRelax(
diff --git a/python/samba/netcmd/domain/trust.py 
b/python/samba/netcmd/domain/trust.py
index 0784fa5e282..f3d75f84137 100644
--- a/python/samba/netcmd/domain/trust.py
+++ b/python/samba/netcmd/domain/trust.py
@@ -125,8 +125,13 @@ class DomainTrustCommand(Command):
         self.local_creds = local_creds
         return self.local_server
 
-    def new_local_lsa_connection(self):
-        return lsa.lsarpc(self.local_binding_string, self.local_lp, 
self.local_creds)
+    def new_local_lsa_connection(self, basis_connection=None):
+        return lsa.lsarpc(
+            self.local_binding_string,
+            self.local_lp,
+            self.local_creds,
+            basis_connection=basis_connection
+        )
 
     def new_local_netlogon_connection(self):
         return netlogon.netlogon(self.local_binding_string, self.local_lp, 
self.local_creds)
@@ -203,13 +208,23 @@ class DomainTrustCommand(Command):
         self.remote_creds = remote_creds
         return self.remote_server
 
-    def new_remote_lsa_connection(self):
-        return lsa.lsarpc(self.remote_binding_string, self.local_lp, 
self.remote_creds)
+    def new_remote_lsa_connection(self, basis_connection=None):
+        return lsa.lsarpc(
+            self.remote_binding_string,
+            self.local_lp,
+            self.remote_creds,
+            basis_connection=basis_connection
+        )
 
-    def new_remote_netlogon_connection(self):
-        return netlogon.netlogon(self.remote_binding_string, self.local_lp, 
self.remote_creds)
+    def new_remote_netlogon_connection(self, basis_connection=None):
+        return netlogon.netlogon(
+            self.remote_binding_string,
+            self.local_lp,
+            self.remote_creds,
+            basis_connection=basis_connection
+        )
 
-    def get_lsa_info(self, conn, policy_access):
+    def get_lsa_info(self, conn_fn, policy_access):
         in_version = 1
         in_revision_info1 = lsa.revision_info1()
         in_revision_info1.revision = 1
@@ -217,17 +232,18 @@ class DomainTrustCommand(Command):
             lsa.LSA_FEATURE_TDO_AUTH_INFO_AES_CIPHER
         )
 
-        out_version, out_revision_info1, policy = OpenPolicyFallback(
-            conn,
-            b''.decode('utf-8'),
+        conn, out_version, out_revision_info1, policy = OpenPolicyFallback(
+            conn_fn,
+            '',
             in_version,
             in_revision_info1,
+            False,
             policy_access
         )
 
         info = conn.QueryInfoPolicy2(policy, lsa.LSA_POLICY_INFO_DNS)
 
-        return (policy, out_version, out_revision_info1, info)
+        return (conn, policy, out_version, out_revision_info1, info)
 
     def get_netlogon_dc_unc(self, conn, server, domain):
         try:
@@ -507,19 +523,15 @@ class cmd_domain_trust_show(DomainTrustCommand):
     def run(self, domain, sambaopts=None, versionopts=None, localdcopts=None):
 
         self.setup_local_server(sambaopts, localdcopts)
-        try:
-            local_lsa = self.new_local_lsa_connection()
-        except RuntimeError as error:
-            raise self.LocalRuntimeError(self, error, "failed to connect lsa 
server")
-
         try:
             local_policy_access = lsa.LSA_POLICY_VIEW_LOCAL_INFORMATION
             (
+                local_lsa,
                 local_policy,
                 local_version,
                 local_revision_info1,
                 local_lsa_info
-            ) = self.get_lsa_info(local_lsa, local_policy_access)
+            ) = self.get_lsa_info(self.new_local_lsa_connection, 
local_policy_access)
         except RuntimeError as error:
             raise self.LocalRuntimeError(self, error, "failed to query 
LSA_POLICY_INFO_DNS")
 
@@ -648,19 +660,16 @@ class cmd_domain_trust_modify(DomainTrustCommand):
             raise CommandError("modification arguments are required, try 
--help")
 
         self.setup_local_server(sambaopts, localdcopts)
-        try:
-            local_lsa = self.new_local_lsa_connection()
-        except RuntimeError as error:
-            raise self.LocalRuntimeError(self, error, "failed to connect to 
lsa server")
 
         try:
             local_policy_access = lsa.LSA_POLICY_VIEW_LOCAL_INFORMATION
             (
+                local_lsa,
                 local_policy,
                 local_version,
                 local_revision_info1,
                 local_lsa_info
-            ) = self.get_lsa_info(local_lsa, local_policy_access)
+            ) = self.get_lsa_info(self.new_local_lsa_connection, 
local_policy_access)
         except RuntimeError as error:
             raise self.LocalRuntimeError(self, error, "failed to query 
LSA_POLICY_INFO_DNS")
 
@@ -907,18 +916,15 @@ class cmd_domain_trust_create(DomainTrustCommand):
                 remote_trust_info.trust_attributes |= 
lsa.LSA_TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL
 
         local_server = self.setup_local_server(sambaopts, localdcopts)
-        try:
-            local_lsa = self.new_local_lsa_connection()
-        except RuntimeError as error:
-            raise self.LocalRuntimeError(self, error, "failed to connect lsa 
server")
 
         try:
             (
+                local_lsa,
                 local_policy,
                 local_version,
                 local_revision_info1,
                 local_lsa_info
-            ) = self.get_lsa_info(local_lsa, local_policy_access)
+            ) = self.get_lsa_info(self.new_local_lsa_connection, 
local_policy_access)
         except RuntimeError as error:
             raise self.LocalRuntimeError(self, error, "failed to query 
LSA_POLICY_INFO_DNS")
 
@@ -932,18 +938,14 @@ class cmd_domain_trust_create(DomainTrustCommand):
         except RuntimeError as error:
             raise self.RemoteRuntimeError(self, error, "failed to locate 
remote server")
 
-        try:
-            remote_lsa = self.new_remote_lsa_connection()
-        except RuntimeError as error:
-            raise self.RemoteRuntimeError(self, error, "failed to connect lsa 
server")
-
         try:
             (
+                remote_lsa,
                 remote_policy,
                 remote_version,
                 remote_revision_info1,
                 remote_lsa_info
-            ) = self.get_lsa_info(remote_lsa, remote_policy_access)
+            ) = self.get_lsa_info(self.new_remote_lsa_connection, 
remote_policy_access)
         except RuntimeError as error:
             raise self.RemoteRuntimeError(self, error, "failed to query 
LSA_POLICY_INFO_DNS")
 
@@ -1296,18 +1298,15 @@ class cmd_domain_trust_delete(DomainTrustCommand):
             remote_policy_access |= lsa.LSA_POLICY_CREATE_SECRET
 
         self.setup_local_server(sambaopts, localdcopts)
-        try:
-            local_lsa = self.new_local_lsa_connection()
-        except RuntimeError as error:
-            raise self.LocalRuntimeError(self, error, "failed to connect lsa 
server")
 
         try:
             (
+                local_lsa,
                 local_policy,
                 local_version,
                 local_revision_info1,
                 local_lsa_info
-            ) = self.get_lsa_info(local_lsa, local_policy_access)
+            ) = self.get_lsa_info(self.new_local_lsa_connection, 
local_policy_access)
         except RuntimeError as error:
             raise self.LocalRuntimeError(self, error, "failed to query 
LSA_POLICY_INFO_DNS")
 
@@ -1337,18 +1336,14 @@ class cmd_domain_trust_delete(DomainTrustCommand):
             except RuntimeError as error:
                 raise self.RemoteRuntimeError(self, error, "failed to locate 
remote server")
 
-            try:
-                remote_lsa = self.new_remote_lsa_connection()
-            except RuntimeError as error:
-                raise self.RemoteRuntimeError(self, error, "failed to connect 
lsa server")
-
             try:
                 (
+                    remote_lsa,
                     remote_policy,
                     remote_version,
                     remote_revision_info1,
                     remote_lsa_info
-                ) = self.get_lsa_info(remote_lsa, remote_policy_access)
+                ) = self.get_lsa_info(self.new_remote_lsa_connection, 
remote_policy_access)
             except RuntimeError as error:
                 raise self.RemoteRuntimeError(self, error, "failed to query 
LSA_POLICY_INFO_DNS")
 
@@ -1449,18 +1444,15 @@ class cmd_domain_trust_validate(DomainTrustCommand):
         local_policy_access = lsa.LSA_POLICY_VIEW_LOCAL_INFORMATION
 
         local_server = self.setup_local_server(sambaopts, localdcopts)
-        try:
-            local_lsa = self.new_local_lsa_connection()
-        except RuntimeError as error:
-            raise self.LocalRuntimeError(self, error, "failed to connect lsa 
server")
 
         try:
             (
+                local_lsa,
                 local_policy,
                 local_version,
                 local_revision_info1,
                 local_lsa_info
-            ) = self.get_lsa_info(local_lsa, local_policy_access)
+            ) = self.get_lsa_info(self.new_local_lsa_connection, 
local_policy_access)
         except RuntimeError as error:
             raise self.LocalRuntimeError(self, error, "failed to query 
LSA_POLICY_INFO_DNS")
 
@@ -1896,11 +1888,12 @@ class cmd_domain_trust_namespaces(DomainTrustCommand):
 
         try:
             (
+                local_lsa,
                 local_policy,
                 local_version,
                 local_revision_info1,
                 local_lsa_info
-            ) = self.get_lsa_info(local_lsa, local_policy_access)
+            ) = self.get_lsa_info(self.new_local_lsa_connection, 
local_policy_access)
         except RuntimeError as error:
             raise self.LocalRuntimeError(self, error, "failed to query 
LSA_POLICY_INFO_DNS")
 
diff --git a/python/samba/tests/dcerpc/lsa_utils.py 
b/python/samba/tests/dcerpc/lsa_utils.py
index 229f57ec546..8a3e7d24276 100644
--- a/python/samba/tests/dcerpc/lsa_utils.py
+++ b/python/samba/tests/dcerpc/lsa_utils.py
@@ -35,6 +35,7 @@ from samba.lsa_utils import (
 
 
 class CreateTrustedDomain(TestCase):
+    smbencrypt = True
 
     def get_user_creds(self):
         c = Credentials()
@@ -47,26 +48,35 @@ class CreateTrustedDomain(TestCase):
         c.set_password(password)
         return c
 
-    def _create_trust_relax(self, smbencrypt=True):
+    def new_lsa_conn(self, basis_connection=None):
         creds = self.get_user_creds()
-
-        if smbencrypt:
+        if self.smbencrypt:
             creds.set_smb_encryption(SMB_ENCRYPTION_REQUIRED)
         else:
             creds.set_smb_encryption(SMB_ENCRYPTION_OFF)
 
         lp = self.get_loadparm()
-
         binding_string = (
             "ncacn_np:%s" % (samba.tests.env_get_var_value('SERVER'))
         )
-        lsa_conn = lsa.lsarpc(binding_string, lp, creds)
 
-        if smbencrypt:
+        lsa_conn = lsa.lsarpc(
+            binding_string,
+            lp,
+            creds,
+            basis_connection=basis_connection
+        )
+
+        if self.smbencrypt:
             self.assertTrue(lsa_conn.transport_encrypted())
         else:
             self.assertFalse(lsa_conn.transport_encrypted())
 
+        return lsa_conn
+
+    def _create_trust_relax(self, smbencrypt=True):
+        self.smbencrypt = smbencrypt
+
         in_version = 1
         in_revision_info1 = lsa.revision_info1()
         in_revision_info1.revision = 1
@@ -74,12 +84,18 @@ class CreateTrustedDomain(TestCase):
             lsa.LSA_FEATURE_TDO_AUTH_INFO_AES_CIPHER
         )
 
-        out_version, out_revision_info1, pol_handle = OpenPolicyFallback(
+        (
             lsa_conn,
+            out_version,
+            out_revision_info1,
+            pol_handle
+        ) = OpenPolicyFallback(
+            self.new_lsa_conn,
             '',
             in_version,
             in_revision_info1,
-            access_mask=security.SEC_FLAG_MAXIMUM_ALLOWED
+            False,
+            security.SEC_FLAG_MAXIMUM_ALLOWED
         )
         self.assertIsNotNone(pol_handle)
 
@@ -147,14 +163,7 @@ class CreateTrustedDomain(TestCase):
             self.assertIsNone(trustdom_handle)
 
     def _create_trust_fallback(self):
-        creds = self.get_user_creds()
-
-        lp = self.get_loadparm()
-
-        binding_string = (
-            "ncacn_np:%s" % (samba.tests.env_get_var_value('SERVER'))
-        )
-        lsa_conn = lsa.lsarpc(binding_string, lp, creds)
+        self.smbencrypt = True
 
         in_version = 1
         in_revision_info1 = lsa.revision_info1()
@@ -163,12 +172,18 @@ class CreateTrustedDomain(TestCase):
             lsa.LSA_FEATURE_TDO_AUTH_INFO_AES_CIPHER
         )
 
-        out_version, out_revision_info1, pol_handle = OpenPolicyFallback(
+        (
             lsa_conn,
+            out_version,


-- 
Samba Shared Repository

Reply via email to