1
0
mirror of https://github.com/samba-team/samba.git synced 2025-12-16 00:23:52 +03:00

python: Implement OpenPolicyFallback()

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
Andreas Schneider
2024-03-21 11:24:10 +01:00
committed by Andrew Bartlett
parent 85d0ab38f7
commit 00ed209e48
2 changed files with 59 additions and 7 deletions

View File

@@ -18,10 +18,54 @@
from samba.dcerpc import lsa, drsblobs
from samba.ndr import ndr_pack
from samba import arcfour_encrypt, string_to_byte_array
from samba import NTSTATUSError, arcfour_encrypt, string_to_byte_array
from samba.ntstatus import (
NT_STATUS_RPC_PROCNUM_OUT_OF_RANGE
)
import random
from samba import crypto
def OpenPolicyFallback(
conn: lsa.lsarpc,
system_name: str,
in_version: int,
in_revision_info: lsa.revision_info1,
sec_qos: bool = False,
access_mask: int = 0,
):
attr = lsa.ObjectAttribute()
if sec_qos:
qos = lsa.QosInfo()
qos.len = 0xc
qos.impersonation_level = 2
qos.context_mode = 1
qos.effective_only = 0
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
def CreateTrustedDomainRelax(lsaconn, policy, trust_info, mask, in_blob, out_blob):
def generate_AuthInfoInternal(session_key, incoming=None, outgoing=None):

View File

@@ -24,7 +24,7 @@ import samba
from samba.tests import TestCase
from samba.dcerpc import lsa, security, drsblobs
from samba.credentials import Credentials, SMB_ENCRYPTION_REQUIRED, SMB_ENCRYPTION_OFF
from samba.lsa_utils import CreateTrustedDomainRelax
from samba.lsa_utils import OpenPolicyFallback, CreateTrustedDomainRelax
class CreateTrustedDomainRelaxTest(TestCase):
@@ -57,12 +57,20 @@ class CreateTrustedDomainRelaxTest(TestCase):
else:
self.assertFalse(lsa_conn.transport_encrypted())
objectAttr = lsa.ObjectAttribute()
objectAttr.sec_qos = lsa.QosInfo()
in_version = 1
in_revision_info1 = lsa.revision_info1()
in_revision_info1.revision = 1
in_revision_info1.supported_features = (
lsa.LSA_FEATURE_TDO_AUTH_INFO_AES_CIPHER
)
pol_handle = lsa_conn.OpenPolicy2('',
objectAttr,
security.SEC_FLAG_MAXIMUM_ALLOWED)
out_version, out_revision_info1, pol_handle = OpenPolicyFallback(
lsa_conn,
'',
in_version,
in_revision_info1,
access_mask=security.SEC_FLAG_MAXIMUM_ALLOWED
)
self.assertIsNotNone(pol_handle)
name = lsa.String()