[SCM] Samba Shared Repository - branch master updated
Andrew Bartlett
abartlet at samba.org
Thu Jun 22 00:23:01 UTC 2023
The branch, master has been updated
via 91eb3f1d223 testprogs/blackbox: add --recursive tests to test_samba-tool_ntacl.sh
via 11741791cc6 testprogs/blackbox: move 'ntacl get' out of test_changedomsid() in test_samba-tool_ntacl.sh
via 619f097b7d4 testprogs/blackbox: pass $CONFIGURATION to test_samba-tool_ntacl.sh
via 16b9b508af4 samba-tool/ntacl: implement set --recursive
via 27b29cfa766 samba-tool/ntacl: add set --verbose and print out the file/directory name
via 6327fd9cdba samba-tool/ntacl: don't announce -q,--quiet in --help as it's not used at all
via 4ca5b78f5b7 samba-tool/ntacl: let changedomsid ignore symlinks
via 3694f2ce620 vfs_aio_pthread: don't crash without a pthreadpool
via 0e9f1eec5a2 samba-tool: print default (domain) for --dns-directory-partition option in help message
via b26dcfba10e tests/krb5/s4u_tests.py: add test_constrained_delegation_authtime
via 489cdefa6ab tests/krb5/s4u_tests.py: add test_constrained_delegation_with_enc_auth_data_[no_]subkey()
from 0ef8083cca0 WHATSNEW: Mention new default schema and Functional Level prep
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 91eb3f1d2236ad88eb3cf6ad036ae16ea2eac6b8
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed May 17 11:26:48 2023 +0200
testprogs/blackbox: add --recursive tests to test_samba-tool_ntacl.sh
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Autobuild-User(master): Andrew Bartlett <abartlet at samba.org>
Autobuild-Date(master): Thu Jun 22 00:22:47 UTC 2023 on atb-devel-224
commit 11741791cc6ae339efd71b122ea9313b710bf1ac
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed May 17 11:26:48 2023 +0200
testprogs/blackbox: move 'ntacl get' out of test_changedomsid() in test_samba-tool_ntacl.sh
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 619f097b7d4c0fa4614ab12042292c1e9a8fe234
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed May 17 11:26:48 2023 +0200
testprogs/blackbox: pass $CONFIGURATION to test_samba-tool_ntacl.sh
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 16b9b508af4432abe5717da129b1be921c0227c6
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue May 2 16:18:51 2023 +0200
samba-tool/ntacl: implement set --recursive
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 27b29cfa766099252b417da06599aee585a228bc
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue May 2 16:18:26 2023 +0200
samba-tool/ntacl: add set --verbose and print out the file/directory name
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 6327fd9cdbaf3dad4b09ce291de1f42259e11d2b
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue May 2 16:18:26 2023 +0200
samba-tool/ntacl: don't announce -q,--quiet in --help as it's not used at all
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 4ca5b78f5b7c35e6276d92f7948334dad7a59456
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue May 16 13:57:51 2023 +0200
samba-tool/ntacl: let changedomsid ignore symlinks
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 3694f2ce6205a647eb5dab2115785fb45decaf0b
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue May 2 15:15:16 2023 +0200
vfs_aio_pthread: don't crash without a pthreadpool
During 'samba-tool ntacl sysvolreset' and similar.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 0e9f1eec5a2e484d947a433cc854d9903de8537f
Author: Björn Baumbach <bb at sernet.de>
Date: Wed Jun 21 20:52:03 2023 +0200
samba-tool: print default (domain) for --dns-directory-partition option in help message
Signed-off-by: Björn Baumbach <bb at sernet.de>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit b26dcfba10e3e38c04f3fe20dbf49e7e6ef4f0ed
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Mar 24 00:12:47 2022 +0100
tests/krb5/s4u_tests.py: add test_constrained_delegation_authtime
This demonstrates that we use the correct authtime
when doing constrained delegation.
The actual fix for the problem is already in place via
commit 75ec66c729faad60fa18b9504ba4053b3e2f47bc
third_party/heimdal: Import lorikeet-heimdal-202306091507 (commit 7d8afc9d7e3d309ddccc2aea6405a8ca6280f6de)
The related patch is:
006a365a6aa3047a4e685e1607973746a28cc1f1 kdc: use the correct authtime from addtitional ticket for S4U2Proxy tickets
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13137
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 489cdefa6ab1bf7bd5cf3ea0ea64c03dc08fa8bd
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Mar 17 14:46:55 2022 +0100
tests/krb5/s4u_tests.py: add test_constrained_delegation_with_enc_auth_data_[no_]subkey()
This demonstrates that we use the correct key for EncAuthorizationData
together with constrained delegation.
The actual fix for the problem is already in place via
commit 75ec66c729faad60fa18b9504ba4053b3e2f47bc
third_party/heimdal: Import lorikeet-heimdal-202306091507 (commit 7d8afc9d7e3d309ddccc2aea6405a8ca6280f6de)
The related patches are:
38c47c54f0c78fed5afc1aea9c5f6683e06ec842 kdc: fix memory leak when decryption AuthorizationData
61c0089ea3f5387953818a3ac99fb529244196e6 kdc: decrypt b->enc_authorization_data in tgs_build_reply()
fed5579814108ee90f701ca6bfb5500f7d839bc4 kdc: if we don't have an authenticator subkey for S4U2Proxy we need to use the keys from evidence_tkt
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13131
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
-----------------------------------------------------------------------
Summary of changes:
python/samba/netcmd/dns.py | 2 +-
python/samba/netcmd/ntacl.py | 97 +++++++++++-----
python/samba/tests/krb5/s4u_tests.py | 126 ++++++++++++++++++++-
source3/modules/vfs_aio_pthread.c | 7 ++
source4/selftest/tests.py | 2 +-
testprogs/blackbox/test_samba-tool_ntacl.sh | 170 ++++++++++++++++++++++++----
6 files changed, 350 insertions(+), 54 deletions(-)
Changeset truncated at 500 lines:
diff --git a/python/samba/netcmd/dns.py b/python/samba/netcmd/dns.py
index f10e67e0d4e..d40f01fa1cd 100644
--- a/python/samba/netcmd/dns.py
+++ b/python/samba/netcmd/dns.py
@@ -917,7 +917,7 @@ class cmd_zonecreate(Command):
Option('--dns-directory-partition',
help='Specify the naming context for the new zone, which '
'affects the replication scope (domain or forest wide '
- 'replication).',
+ 'replication, default: domain).',
default='domain',
metavar='domain|forest',
choices=['domain', 'forest'],
diff --git a/python/samba/netcmd/ntacl.py b/python/samba/netcmd/ntacl.py
index 8675719017d..b6aaed7712a 100644
--- a/python/samba/netcmd/ntacl.py
+++ b/python/samba/netcmd/ntacl.py
@@ -70,7 +70,7 @@ def get_local_domain_sid(lp):
class cmd_ntacl_set(Command):
"""Set ACLs on a file."""
- synopsis = "%prog <acl> <file> [options]"
+ synopsis = "%prog <acl> <path> [options]"
takes_optiongroups = {
"sambaopts": options.SambaOptions,
@@ -79,21 +79,25 @@ class cmd_ntacl_set(Command):
}
takes_options = [
- Option("-q", "--quiet", help="Be quiet", action="store_true"),
+ # --quiet is not used at all...
+ Option("-q", "--quiet", help=Option.SUPPRESS_HELP, action="store_true"),
+ Option("-v", "--verbose", help="Be verbose", action="store_true"),
Option("--xattr-backend", type="choice", help="xattr backend type (native fs or tdb)",
choices=["native", "tdb"]),
Option("--eadb-file", help="Name of the tdb file where attributes are stored", type="string"),
Option("--use-ntvfs", help="Set the ACLs directly to the TDB or xattr for use with the ntvfs file server", action="store_true"),
Option("--use-s3fs", help="Set the ACLs for use with the default s3fs file server via the VFS layer", action="store_true"),
+ Option("--recursive", help="Set the ACLs for directories and their contents recursively", action="store_true"),
+ Option("--follow-symlinks", help="Follow symlinks", action="store_true"),
Option("--service", help="Name of the smb.conf service to use when applying the ACLs", type="string")
]
- takes_args = ["acl", "file"]
+ takes_args = ["acl", "path"]
- def run(self, acl, file, use_ntvfs=False, use_s3fs=False,
- quiet=False, xattr_backend=None, eadb_file=None,
+ def run(self, acl, path, use_ntvfs=False, use_s3fs=False,
+ quiet=False, verbose=False, xattr_backend=None, eadb_file=None,
credopts=None, sambaopts=None, versionopts=None,
- service=None):
+ recursive=False, follow_symlinks=False, service=None):
logger = self.get_logger()
lp = sambaopts.get_loadparm()
domain_sid = get_local_domain_sid(lp)
@@ -103,15 +107,41 @@ class cmd_ntacl_set(Command):
elif use_s3fs:
use_ntvfs = False
- setntacl(lp,
- file,
- acl,
- str(domain_sid),
- system_session_unix(),
- xattr_backend,
- eadb_file,
- use_ntvfs=use_ntvfs,
- service=service)
+ def _setntacl_path(_path):
+ if not follow_symlinks and os.path.islink(_path):
+ if recursive:
+ self.outf.write("ignored symlink: %s\n" % _path)
+ return
+ raise CommandError("symlink: %s: requires --follow-symlinks" % (_path))
+
+ if verbose:
+ if os.path.islink(_path):
+ self.outf.write("symlink: %s\n" % _path)
+ elif os.path.isdir(_path):
+ self.outf.write("dir: %s\n" % _path)
+ else:
+ self.outf.write("file: %s\n" % _path)
+ try:
+ return setntacl(lp,
+ _path,
+ acl,
+ str(domain_sid),
+ system_session_unix(),
+ xattr_backend,
+ eadb_file,
+ use_ntvfs=use_ntvfs,
+ service=service)
+ except Exception as e:
+ raise CommandError("Could not set acl for %s: %s" % (_path, e))
+
+ _setntacl_path(path)
+
+ if recursive and os.path.isdir(path):
+ for root, dirs, files in os.walk(path, followlinks=follow_symlinks):
+ for name in files:
+ _setntacl_path(os.path.join(root, name))
+ for name in dirs:
+ _setntacl_path(os.path.join(root, name))
if use_ntvfs:
logger.warning("Please note that POSIX permissions have NOT been changed, only the stored NT ACL")
@@ -234,12 +264,12 @@ class cmd_ntacl_changedomsid(Command):
action="store_true"),
]
- takes_args = ["old_domain_sid", "new_domain_sid", "file"]
+ takes_args = ["old_domain_sid", "new_domain_sid", "path"]
def run(self,
old_domain_sid_str,
new_domain_sid_str,
- file,
+ path,
use_ntvfs=False,
use_s3fs=False,
service=None,
@@ -274,20 +304,31 @@ class cmd_ntacl_changedomsid(Command):
raise CommandError("Could not parse old sid %s: %s" %
(new_domain_sid_str, e))
- def changedom_sids(file):
+ def changedom_sids(_path):
+ if not follow_symlinks and os.path.islink(_path):
+ if recursive:
+ self.outf.write("ignored symlink: %s\n" % _path)
+ return
+ raise CommandError("symlink: %s: requires --follow-symlinks" % (_path))
+
if verbose:
- self.outf.write("file: %s\n" % file)
+ if os.path.islink(_path):
+ self.outf.write("symlink: %s\n" % _path)
+ elif os.path.isdir(_path):
+ self.outf.write("dir: %s\n" % _path)
+ else:
+ self.outf.write("file: %s\n" % _path)
try:
acl = getntacl(lp,
- file,
+ _path,
system_session_unix(),
xattr_backend,
eadb_file,
direct_db_access=use_ntvfs,
service=service)
except Exception as e:
- raise CommandError("Could not get acl for %s: %s" % (file, e))
+ raise CommandError("Could not get acl for %s: %s" % (_path, e))
orig_sddl = acl.as_sddl(domain_sid)
if verbose:
@@ -320,7 +361,7 @@ class cmd_ntacl_changedomsid(Command):
try:
setntacl(lp,
- file,
+ _path,
acl,
new_domain_sid,
system_session_unix(),
@@ -329,19 +370,19 @@ class cmd_ntacl_changedomsid(Command):
use_ntvfs=use_ntvfs,
service=service)
except Exception as e:
- raise CommandError("Could not set acl for %s: %s" % (file, e))
+ raise CommandError("Could not set acl for %s: %s" % (_path, e))
- def recursive_changedom_sids(file):
- for root, dirs, files in os.walk(file, followlinks=follow_symlinks):
+ def recursive_changedom_sids(_path):
+ for root, dirs, files in os.walk(_path, followlinks=follow_symlinks):
for f in files:
changedom_sids(os.path.join(root, f))
for d in dirs:
changedom_sids(os.path.join(root, d))
- changedom_sids(file)
- if recursive and os.path.isdir(file):
- recursive_changedom_sids(file)
+ changedom_sids(path)
+ if recursive and os.path.isdir(path):
+ recursive_changedom_sids(path)
if use_ntvfs:
logger.warning("Please note that POSIX permissions have NOT been "
diff --git a/python/samba/tests/krb5/s4u_tests.py b/python/samba/tests/krb5/s4u_tests.py
index 83ca06e4577..fbd32d00dd1 100755
--- a/python/samba/tests/krb5/s4u_tests.py
+++ b/python/samba/tests/krb5/s4u_tests.py
@@ -23,6 +23,7 @@ sys.path.insert(0, "bin/python")
os.environ["PYTHONUNBUFFERED"] = "1"
import functools
+import time
from samba import dsdb, ntstatus
from samba.dcerpc import krb5pac, lsa, security
@@ -37,6 +38,7 @@ from samba.tests.krb5.raw_testcase import (
)
from samba.tests.krb5.rfc4120_constants import (
AES256_CTS_HMAC_SHA1_96,
+ AD_IF_RELEVANT,
ARCFOUR_HMAC_MD5,
KDC_ERR_BADMATCH,
KDC_ERR_BADOPTION,
@@ -49,7 +51,9 @@ from samba.tests.krb5.rfc4120_constants import (
KU_PA_ENC_TIMESTAMP,
KU_AS_REP_ENC_PART,
KU_TGS_REP_ENC_PART_SUB_KEY,
- NT_PRINCIPAL
+ KU_TGS_REQ_AUTH_DAT_SESSION,
+ KU_TGS_REQ_AUTH_DAT_SUBKEY,
+ NT_PRINCIPAL,
)
import samba.tests.krb5.rfc4120_pyasn1 as krb5_asn1
@@ -559,6 +563,8 @@ class S4UKerberosTests(KDCBaseTest):
def _run_delegation_test(self, kdc_dict):
s4u2self = kdc_dict.pop('s4u2self', False)
+ authtime_delay = kdc_dict.pop('authtime_delay', 0)
+
client_opts = kdc_dict.pop('client_opts', None)
client_creds = self.get_cached_creds(
account_type=self.AccountType.USER,
@@ -598,6 +604,8 @@ class S4UKerberosTests(KDCBaseTest):
opts=service1_opts)
service1_tgt = self.get_tgt(service1_creds)
+ self.assertElementPresent(service1_tgt.ticket_private, 'authtime')
+ service1_tgt_authtime = self.getElementValue(service1_tgt.ticket_private, 'authtime')
client_username = client_creds.get_username()
client_realm = client_creds.get_realm()
@@ -625,6 +633,8 @@ class S4UKerberosTests(KDCBaseTest):
ARCFOUR_HMAC_MD5))
if s4u2self:
+ self.assertEqual(authtime_delay, 0)
+
def generate_s4u2self_padata(_kdc_exchange_dict,
_callback_dict,
req_body):
@@ -670,19 +680,32 @@ class S4UKerberosTests(KDCBaseTest):
client_service_tkt = s4u2self_kdc_exchange_dict['rep_ticket_creds']
else:
+ if authtime_delay != 0:
+ time.sleep(authtime_delay)
+ fresh = True
+ else:
+ fresh = False
+
client_tgt = self.get_tgt(client_creds,
kdc_options=client_tkt_options,
- expected_flags=expected_flags)
+ expected_flags=expected_flags,
+ fresh=fresh)
client_service_tkt = self.get_service_ticket(
client_tgt,
service1_creds,
kdc_options=client_tkt_options,
- expected_flags=expected_flags)
+ expected_flags=expected_flags,
+ fresh=fresh)
modify_client_tkt_fn = kdc_dict.pop('modify_client_tkt_fn', None)
if modify_client_tkt_fn is not None:
client_service_tkt = modify_client_tkt_fn(client_service_tkt)
+ self.assertElementPresent(client_service_tkt.ticket_private, 'authtime')
+ expected_authtime = self.getElementValue(client_service_tkt.ticket_private, 'authtime')
+ if authtime_delay > 1:
+ self.assertNotEqual(expected_authtime, service1_tgt_authtime)
+
additional_tickets = [client_service_tkt.ticket]
modify_service_tgt_fn = kdc_dict.pop('modify_service_tgt_fn', None)
@@ -722,7 +745,11 @@ class S4UKerberosTests(KDCBaseTest):
pac_options = kdc_dict.pop('pac_options', None)
- authenticator_subkey = self.RandomKey(Enctype.AES256)
+ use_authenticator_subkey = kdc_dict.pop('use_authenticator_subkey', True)
+ if use_authenticator_subkey:
+ authenticator_subkey = self.RandomKey(Enctype.AES256)
+ else:
+ authenticator_subkey = None
expected_proxy_target = service2_creds.get_spn()
@@ -759,22 +786,65 @@ class S4UKerberosTests(KDCBaseTest):
expected_transited_services=expected_transited_services,
expect_pac=expect_pac)
+ EncAuthorizationData = kdc_dict.pop('enc-authorization-data', None)
+
+ if EncAuthorizationData is not None:
+ if authenticator_subkey is not None:
+ EncAuthorizationData_key = authenticator_subkey
+ EncAuthorizationData_usage = KU_TGS_REQ_AUTH_DAT_SUBKEY
+ else:
+ EncAuthorizationData_key = client_service_tkt.session_key
+ EncAuthorizationData_usage = KU_TGS_REQ_AUTH_DAT_SESSION
+ else:
+ EncAuthorizationData_key = None
+ EncAuthorizationData_usage = None
+
self._generic_kdc_exchange(kdc_exchange_dict,
cname=None,
realm=service2_realm,
sname=service2_sname,
etypes=etypes,
- additional_tickets=additional_tickets)
+ additional_tickets=additional_tickets,
+ EncAuthorizationData=EncAuthorizationData,
+ EncAuthorizationData_key=EncAuthorizationData_key,
+ EncAuthorizationData_usage=EncAuthorizationData_usage)
if not expected_error_mode:
# Check whether the ticket contains a PAC.
ticket = kdc_exchange_dict['rep_ticket_creds']
+ self.assertElementEqual(ticket.ticket_private, 'authtime', expected_authtime)
pac = self.get_ticket_pac(ticket, expect_pac=expect_pac)
+ ticket_auth_data = ticket.ticket_private.get('authorization-data')
+ expected_num_ticket_auth_data = 0
if expect_pac:
self.assertIsNotNone(pac)
+ expected_num_ticket_auth_data += 1
else:
self.assertIsNone(pac)
+ if EncAuthorizationData is not None:
+ expected_num_ticket_auth_data += len(EncAuthorizationData)
+
+ if expected_num_ticket_auth_data == 0:
+ self.assertIsNone(ticket_auth_data)
+ else:
+ self.assertIsNotNone(ticket_auth_data)
+ self.assertEqual(len(ticket_auth_data),
+ expected_num_ticket_auth_data)
+
+ if EncAuthorizationData is not None:
+ enc_ad_plain = self.der_encode(
+ EncAuthorizationData,
+ asn1Spec=krb5_asn1.AuthorizationData())
+ req_EncAuthorizationData = self.der_decode(
+ enc_ad_plain,
+ asn1Spec=krb5_asn1.AuthorizationData())
+
+ rep_EncAuthorizationData = ticket_auth_data.copy()
+ if expect_pac:
+ rep_EncAuthorizationData.pop(0)
+ self.assertEqual(rep_EncAuthorizationData, req_EncAuthorizationData)
+
# Ensure we used all the parameters given to us.
self.assertEqual({}, kdc_dict)
@@ -793,6 +863,52 @@ class S4UKerberosTests(KDCBaseTest):
'allow_delegation': True
})
+ def test_constrained_delegation_authtime(self):
+ # Test constrained delegation.
+ self._run_delegation_test(
+ {
+ 'expected_error_mode': 0,
+ 'allow_delegation': True,
+ 'authtime_delay': 2,
+ })
+
+ def test_constrained_delegation_with_enc_auth_data_subkey(self):
+ # Test constrained delegation.
+ EncAuthorizationData = []
+ relevant_elems = []
+ auth_data777 = self.AuthorizationData_create(777, b'AuthorizationData777')
+ relevant_elems.append(auth_data777)
+ auth_data999 = self.AuthorizationData_create(999, b'AuthorizationData999')
+ relevant_elems.append(auth_data999)
+ ad_relevant = self.der_encode(relevant_elems, asn1Spec=krb5_asn1.AD_IF_RELEVANT())
+ ad_data = self.AuthorizationData_create(AD_IF_RELEVANT, ad_relevant)
+ EncAuthorizationData.append(ad_data)
+ self._run_delegation_test(
+ {
+ 'expected_error_mode': 0,
+ 'allow_delegation': True,
+ 'enc-authorization-data': EncAuthorizationData,
+ })
+
+ def test_constrained_delegation_with_enc_auth_data_no_subkey(self):
+ # Test constrained delegation.
+ EncAuthorizationData = []
+ relevant_elems = []
+ auth_data777 = self.AuthorizationData_create(777, b'AuthorizationData777')
+ relevant_elems.append(auth_data777)
+ auth_data999 = self.AuthorizationData_create(999, b'AuthorizationData999')
+ relevant_elems.append(auth_data999)
+ ad_relevant = self.der_encode(relevant_elems, asn1Spec=krb5_asn1.AD_IF_RELEVANT())
+ ad_data = self.AuthorizationData_create(AD_IF_RELEVANT, ad_relevant)
+ EncAuthorizationData.append(ad_data)
+ self._run_delegation_test(
+ {
+ 'expected_error_mode': 0,
+ 'allow_delegation': True,
+ 'enc-authorization-data': EncAuthorizationData,
+ 'use_authenticator_subkey': False,
+ })
+
def test_constrained_delegation_authentication_asserted_identity(self):
# Test constrained delegation and check asserted identity is the
# authentication authority. Note that we should always find this
diff --git a/source3/modules/vfs_aio_pthread.c b/source3/modules/vfs_aio_pthread.c
index 5d051b4f7da..428ae5f2a4c 100644
--- a/source3/modules/vfs_aio_pthread.c
+++ b/source3/modules/vfs_aio_pthread.c
@@ -468,6 +468,13 @@ static int aio_pthread_openat_fn(vfs_handle_struct *handle,
return -1;
}
+ if (fsp->conn->sconn->pool == NULL) {
+ /*
+ * a threadpool is required for async support
+ */
+ aio_allow_open = false;
+ }
+
if (fsp->conn->sconn->client->server_multi_channel_enabled) {
/*
* This module is not compatible with multi channel yet.
diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py
index 51b5e1ac4f6..235d87266fd 100755
--- a/source4/selftest/tests.py
+++ b/source4/selftest/tests.py
@@ -826,7 +826,7 @@ plantestsuite("samba4.blackbox.client_etypes_all(ad_dc:client)", "ad_dc:client",
plantestsuite("samba4.blackbox.client_etypes_legacy(ad_dc:client)", "ad_dc:client", [os.path.join(bbdir, "test_client_etypes.sh"), '$DC_SERVER', '$DC_USERNAME', '$DC_PASSWORD', '$PREFIX_ABS', 'legacy', '23'])
plantestsuite("samba4.blackbox.client_etypes_strong(ad_dc:client)", "ad_dc:client", [os.path.join(bbdir, "test_client_etypes.sh"), '$DC_SERVER', '$DC_USERNAME', '$DC_PASSWORD', '$PREFIX_ABS', 'strong', '17_18'])
plantestsuite("samba4.blackbox.net_ads_dns(ad_member:local)", "ad_member:local", [os.path.join(bbdir, "test_net_ads_dns.sh"), '$DC_SERVER', '$DC_USERNAME', '$DC_PASSWORD', '$REALM', '$USERNAME', '$PASSWORD'])
-plantestsuite("samba4.blackbox.samba-tool_ntacl(ad_member:local)", "ad_member:local", [os.path.join(bbdir, "test_samba-tool_ntacl.sh"), '$PREFIX', '$DOMSID'])
+plantestsuite("samba4.blackbox.samba-tool_ntacl(ad_member:local)", "ad_member:local", [os.path.join(bbdir, "test_samba-tool_ntacl.sh"), '$PREFIX', '$DOMSID', configuration])
env = "ad_member:local"
plantestsuite("samba4.blackbox.net_ads_search_server_P.primary", env,
diff --git a/testprogs/blackbox/test_samba-tool_ntacl.sh b/testprogs/blackbox/test_samba-tool_ntacl.sh
index 24589729791..1571b1a72c5 100755
--- a/testprogs/blackbox/test_samba-tool_ntacl.sh
+++ b/testprogs/blackbox/test_samba-tool_ntacl.sh
@@ -2,20 +2,28 @@
# Blackbox tests for samba-tool ntacl get/set on member server
# Copyright (C) 2018 Björn Baumbach <bb at sernet.de>
-if [ $# -ne 2 ]; then
- echo "Usage: test_samba-tool_ntacl.sh PREFIX DOMSID"
+if [ $# -ne 3 ]; then
+ echo "Usage: test_samba-tool_ntacl.sh PREFIX DOMSID CONFIGURATION"
exit 1
fi
+set -u
+set -e
+
PREFIX=$1
domain_sid=$2
+CONFIGURATION=$3
failed=0
samba4bindir="$BINDIR"
samba_tool="$samba4bindir/samba-tool"
-testfile="$PREFIX/ntacl_testfile"
+testdirtop="$PREFIX/ntacl_testdirtop"
+testfile="$testdirtop/testfile"
+testdir1="$testdirtop/dir1"
+testdir1f="$testdirtop/dir1/file"
+testdir1l="$testdirtop/dir1/symlink"
# acl from samba_tool/ntacl.py tests
acl="O:DAG:DUD:P(A;OICI;FA;;;DA)(A;OICI;FA;;;EA)(A;OICIIO;FA;;;CO)(A;OICI;FA;;;DA)(A;OICI;FA;;;SY)(A;OICI;0x001200a9;;;AU)(A;OICI;0x001200a9;;;ED)S:AI(OU;CIIDSA;WP;f30e3bbe-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)(OU;CIIDSA;WP;f30e3bbf-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)"
@@ -31,8 +39,9 @@ test_get_acl()
{
testfile="$1"
exptextedacl="$2"
+ shift 2
- retacl=$($PYTHON $samba_tool ntacl get "$testfile" --as-sddl) || return $?
+ retacl=$($PYTHON $samba_tool ntacl get "$testfile" --as-sddl "$@") || return $?
test "$retacl" = "$exptextedacl"
}
@@ -41,8 +50,9 @@ test_set_acl()
{
--
Samba Shared Repository
More information about the samba-cvs
mailing list