View | Details | Raw Unified | Return to bug 38217 | Differences between
and this patch

Collapse All | Expand All

(-)a/source3/smbd/pysmbd.c (-7 / +5 lines)
 Lines 147-153   static NTSTATUS set_nt_acl_conn(const char *fname, Link Here 
147
		fsp->fh->fd = SMB_VFS_OPEN(conn, smb_fname, fsp, flags, 00400);
147
		fsp->fh->fd = SMB_VFS_OPEN(conn, smb_fname, fsp, flags, 00400);
148
	}
148
	}
149
	if (fsp->fh->fd == -1) {
149
	if (fsp->fh->fd == -1) {
150
		printf("open: error=%d (%s)\n", errno, strerror(errno));
150
		DBG_WARNING("open: error=%d (%s)\n", errno, strerror(errno));
151
		TALLOC_FREE(frame);
151
		TALLOC_FREE(frame);
152
		umask(saved_umask);
152
		umask(saved_umask);
153
		return NT_STATUS_UNSUCCESSFUL;
153
		return NT_STATUS_UNSUCCESSFUL;
 Lines 156-165   static NTSTATUS set_nt_acl_conn(const char *fname, Link Here 
156
	ret = SMB_VFS_FSTAT(fsp, &smb_fname->st);
156
	ret = SMB_VFS_FSTAT(fsp, &smb_fname->st);
157
	if (ret == -1) {
157
	if (ret == -1) {
158
		/* If we have an fd, this stat should succeed. */
158
		/* If we have an fd, this stat should succeed. */
159
		DEBUG(0,("Error doing fstat on open file %s "
159
		DBG_WARNING("Error doing fstat on open file %s (%s)\n",
160
			"(%s)\n",
161
			smb_fname_str_dbg(smb_fname),
160
			smb_fname_str_dbg(smb_fname),
162
			strerror(errno) ));
161
			strerror(errno));
163
		TALLOC_FREE(frame);
162
		TALLOC_FREE(frame);
164
		umask(saved_umask);
163
		umask(saved_umask);
165
		return map_nt_error_from_unix(errno);
164
		return map_nt_error_from_unix(errno);
 Lines 178-184   static NTSTATUS set_nt_acl_conn(const char *fname, Link Here 
178
177
179
	status = SMB_VFS_FSET_NT_ACL( fsp, security_info_sent, sd);
178
	status = SMB_VFS_FSET_NT_ACL( fsp, security_info_sent, sd);
180
	if (!NT_STATUS_IS_OK(status)) {
179
	if (!NT_STATUS_IS_OK(status)) {
181
		DEBUG(0,("set_nt_acl_no_snum: fset_nt_acl returned %s.\n", nt_errstr(status)));
180
		DBG_WARNING("set_nt_acl_no_snum: fset_nt_acl returned %s.\n",
181
			nt_errstr(status));
182
	}
182
	}
183
183
184
	SMB_VFS_CLOSE(fsp);
184
	SMB_VFS_CLOSE(fsp);
185
- 
186
--
187
source3/smbd/pysmbd.c | 2 +-
185
source3/smbd/pysmbd.c | 2 +-
188
1 file changed, 1 insertion(+), 1 deletion(-)
186
1 file changed, 1 insertion(+), 1 deletion(-)
(-)a/source3/smbd/pysmbd.c (-3 / +1 lines)
 Lines 150-156   static NTSTATUS set_nt_acl_conn(const char *fname, Link Here 
150
		DBG_WARNING("open: error=%d (%s)\n", errno, strerror(errno));
150
		DBG_WARNING("open: error=%d (%s)\n", errno, strerror(errno));
151
		TALLOC_FREE(frame);
151
		TALLOC_FREE(frame);
152
		umask(saved_umask);
152
		umask(saved_umask);
153
		return NT_STATUS_UNSUCCESSFUL;
153
		return map_nt_error_from_unix(errno);
154
	}
154
	}
155
155
156
	ret = SMB_VFS_FSTAT(fsp, &smb_fname->st);
156
	ret = SMB_VFS_FSTAT(fsp, &smb_fname->st);
157
- 
158
--
159
python/samba/provision/__init__.py | 23 +++++++++++++++++++++++
157
python/samba/provision/__init__.py | 23 +++++++++++++++++++++++
160
1 file changed, 23 insertions(+)
158
1 file changed, 23 insertions(+)
(-)a/python/samba/provision/__init__.py (-2 / +23 lines)
 Lines 27-32    Link Here 
27
__docformat__ = "restructuredText"
27
__docformat__ = "restructuredText"
28
28
29
from base64 import b64encode
29
from base64 import b64encode
30
import ctypes
30
import os
31
import os
31
import re
32
import re
32
import pwd
33
import pwd
 Lines 50-55   from samba.dsdb import DS_DOMAIN_FUNCTION_2000 Link Here 
50
from samba import (
51
from samba import (
51
    Ldb,
52
    Ldb,
52
    MAX_NETBIOS_NAME_LEN,
53
    MAX_NETBIOS_NAME_LEN,
54
    NTSTATUSError,
53
    check_all_substituted,
55
    check_all_substituted,
54
    is_valid_netbios_char,
56
    is_valid_netbios_char,
55
    setup_file,
57
    setup_file,
 Lines 125-130   DEFAULT_DC_POLICY_GUID = "6AC1786C-016F-11D2-945F-00C04FB984F9" Link Here 
125
DEFAULTSITE = "Default-First-Site-Name"
127
DEFAULTSITE = "Default-First-Site-Name"
126
LAST_PROVISION_USN_ATTRIBUTE = "lastProvisionUSN"
128
LAST_PROVISION_USN_ATTRIBUTE = "lastProvisionUSN"
127
129
130
NT_STATUS_OBJECT_NAME_NOT_FOUND = 0xc0000034
131
128
132
129
class ProvisionPaths(object):
133
class ProvisionPaths(object):
130
134
 Lines 1473-1478   SYSVOL_ACL = "O:LAG:BAD:P(A;OICI;0x001f01ff;;;BA)(A;OICI;0x001200a9;;;SO)(A;OICI Link Here 
1473
POLICIES_ACL = "O:LAG:BAD:P(A;OICI;0x001f01ff;;;BA)(A;OICI;0x001200a9;;;SO)(A;OICI;0x001f01ff;;;SY)(A;OICI;0x001200a9;;;AU)(A;OICI;0x001301bf;;;PA)"
1477
POLICIES_ACL = "O:LAG:BAD:P(A;OICI;0x001f01ff;;;BA)(A;OICI;0x001200a9;;;SO)(A;OICI;0x001f01ff;;;SY)(A;OICI;0x001200a9;;;AU)(A;OICI;0x001301bf;;;PA)"
1474
SYSVOL_SERVICE="sysvol"
1478
SYSVOL_SERVICE="sysvol"
1475
1479
1480
def set_nt_acl_wrapper(lp, file, sddl, domsid, backend=None, eadbfile=None,
1481
    use_ntvfs=True, skip_invalid_chown=False, passdb=None, service=None,
1482
    logger=None, resume_on_error=False):
1483
    """A wrapper around setntacl() that catches NTSTATUSError and only logs
1484
    them if a logger is given and resume_on_error is True.
1485
    """
1486
    try:
1487
        setntacl(lp, file, sddl, domsid, backend=backend, eadbfile=eadbfile,
1488
                 use_ntvfs=use_ntvfs, skip_invalid_chown=skip_invalid_chown,
1489
                 passdb=passdb, service=service)
1490
    except NTSTATUSError as error:
1491
        err_value = ctypes.c_uint32(error[0]).value
1492
        only_log = err_value == NT_STATUS_OBJECT_NAME_NOT_FOUND
1493
        if resume_on_error and logger and only_log:
1494
            logger.warning('Unable to set ACL %s on %s' % (sddl, file))
1495
        else:
1496
            raise
1497
1498
1476
def set_dir_acl(path, acl, lp, domsid, use_ntvfs, passdb, service=SYSVOL_SERVICE):
1499
def set_dir_acl(path, acl, lp, domsid, use_ntvfs, passdb, service=SYSVOL_SERVICE):
1477
    setntacl(lp, path, acl, domsid, use_ntvfs=use_ntvfs, skip_invalid_chown=True, passdb=passdb, service=service)
1500
    setntacl(lp, path, acl, domsid, use_ntvfs=use_ntvfs, skip_invalid_chown=True, passdb=passdb, service=service)
1478
    for root, dirs, files in os.walk(path, topdown=False):
1501
    for root, dirs, files in os.walk(path, topdown=False):
1479
- 
1480
`setntacl()`
1502
`setntacl()`
1481
--
1482
python/samba/netcmd/ntacl.py       |  8 ++---
1503
python/samba/netcmd/ntacl.py       |  8 ++---
1483
python/samba/provision/__init__.py | 73 +++++++++++++++++++++++++-------------
1504
python/samba/provision/__init__.py | 73 +++++++++++++++++++++++++-------------
1484
python/samba/upgrade.py            |  9 ++---
1505
python/samba/upgrade.py            |  9 ++---
1485
3 files changed, 57 insertions(+), 33 deletions(-)
1506
3 files changed, 57 insertions(+), 33 deletions(-)
(-)a/python/samba/netcmd/ntacl.py (-4 / +4 lines)
 Lines 233-242   class cmd_ntacl_sysvolreset(Command): Link Here 
233
        if use_ntvfs:
233
        if use_ntvfs:
234
            logger.warning("Please note that POSIX permissions have NOT been changed, only the stored NT ACL")
234
            logger.warning("Please note that POSIX permissions have NOT been changed, only the stored NT ACL")
235
235
236
        provision.setsysvolacl(samdb, netlogon, sysvol,
236
        provision.setsysvolacl(samdb, logger, netlogon, sysvol, LA_uid, BA_gid,
237
                               LA_uid, BA_gid, domain_sid,
237
                               domain_sid, lp.get("realm").lower(),
238
                               lp.get("realm").lower(), samdb.domain_dn(),
238
                               samdb.domain_dn(), lp, use_ntvfs=use_ntvfs,
239
                               lp, use_ntvfs=use_ntvfs)
239
                               resume_on_error=False)
240
240
241
class cmd_ntacl_sysvolcheck(Command):
241
class cmd_ntacl_sysvolcheck(Command):
242
    """Check sysvol ACLs match defaults (including correct ACLs on GPOs)."""
242
    """Check sysvol ACLs match defaults (including correct ACLs on GPOs)."""
(-)a/python/samba/provision/__init__.py (-25 / +48 lines)
 Lines 1496-1528   def set_nt_acl_wrapper(lp, file, sddl, domsid, backend=None, eadbfile=None, Link Here 
1496
            raise
1496
            raise
1497
1497
1498
1498
1499
def set_dir_acl(path, acl, lp, domsid, use_ntvfs, passdb, service=SYSVOL_SERVICE):
1499
def set_dir_acl(path, acl, lp, domsid, use_ntvfs, passdb, service=SYSVOL_SERVICE, logger=None, resume_on_error=False):
1500
    setntacl(lp, path, acl, domsid, use_ntvfs=use_ntvfs, skip_invalid_chown=True, passdb=passdb, service=service)
1500
    set_nt_acl_wrapper(lp, path, acl, domsid, use_ntvfs=use_ntvfs,
1501
                       skip_invalid_chown=True, passdb=passdb, service=service,
1502
                       logger=logger, resume_on_error=resume_on_error)
1501
    for root, dirs, files in os.walk(path, topdown=False):
1503
    for root, dirs, files in os.walk(path, topdown=False):
1502
        for name in files:
1504
        for name in files:
1503
            setntacl(lp, os.path.join(root, name), acl, domsid,
1505
            set_nt_acl_wrapper(lp, os.path.join(root, name), acl, domsid,
1504
                    use_ntvfs=use_ntvfs, skip_invalid_chown=True, passdb=passdb, service=service)
1506
                               use_ntvfs=use_ntvfs, skip_invalid_chown=True,
1507
                               passdb=passdb, service=service, logger=logger,
1508
                               resume_on_error=resume_on_error)
1505
        for name in dirs:
1509
        for name in dirs:
1506
            setntacl(lp, os.path.join(root, name), acl, domsid,
1510
            set_nt_acl_wrapper(lp, os.path.join(root, name), acl, domsid,
1507
                    use_ntvfs=use_ntvfs, skip_invalid_chown=True, passdb=passdb, service=service)
1511
                               use_ntvfs=use_ntvfs, skip_invalid_chown=True,
1512
                               passdb=passdb, service=service, logger=logger,
1513
                               resume_on_error=resume_on_error)
1508
1514
1509
1515
1510
def set_gpos_acl(sysvol, dnsdomain, domainsid, domaindn, samdb, lp, use_ntvfs, passdb):
1516
def set_gpos_acl(sysvol, logger, dnsdomain, domainsid, domaindn, samdb, lp,
1517
    use_ntvfs, passdb, resume_on_error):
1511
    """Set ACL on the sysvol/<dnsname>/Policies folder and the policy
1518
    """Set ACL on the sysvol/<dnsname>/Policies folder and the policy
1512
    folders beneath.
1519
    folders beneath.
1513
1520
1514
    :param sysvol: Physical path for the sysvol folder
1521
    :param sysvol: Physical path for the sysvol folder
1522
    :param logger: Logger object
1515
    :param dnsdomain: The DNS name of the domain
1523
    :param dnsdomain: The DNS name of the domain
1516
    :param domainsid: The SID of the domain
1524
    :param domainsid: The SID of the domain
1517
    :param domaindn: The DN of the domain (ie. DC=...)
1525
    :param domaindn: The DN of the domain (ie. DC=...)
1518
    :param samdb: An LDB object on the SAM db
1526
    :param samdb: An LDB object on the SAM db
1519
    :param lp: an LP object
1527
    :param lp: an LP object
1528
    :param resume_on_error: A boolean that indicates if the function should
1529
            only log a NTSTATUSError and continue.
1520
    """
1530
    """
1521
1531
1522
    # Set ACL for GPO root folder
1532
    # Set ACL for GPO root folder
1523
    root_policy_path = os.path.join(sysvol, dnsdomain, "Policies")
1533
    root_policy_path = os.path.join(sysvol, dnsdomain, "Policies")
1524
    setntacl(lp, root_policy_path, POLICIES_ACL, str(domainsid),
1534
    set_nt_acl_wrapper(lp, root_policy_path, POLICIES_ACL, str(domainsid),
1525
            use_ntvfs=use_ntvfs, skip_invalid_chown=True, passdb=passdb, service=SYSVOL_SERVICE)
1535
                       use_ntvfs=use_ntvfs, skip_invalid_chown=True,
1536
                       passdb=passdb, service=SYSVOL_SERVICE, logger=logger,
1537
                       resume_on_error=resume_on_error)
1526
1538
1527
    res = samdb.search(base="CN=Policies,CN=System,%s"%(domaindn),
1539
    res = samdb.search(base="CN=Policies,CN=System,%s"%(domaindn),
1528
                        attrs=["cn", "nTSecurityDescriptor"],
1540
                        attrs=["cn", "nTSecurityDescriptor"],
 Lines 1534-1547   def set_gpos_acl(sysvol, dnsdomain, domainsid, domaindn, samdb, lp, use_ntvfs, p Link Here 
1534
        policy_path = getpolicypath(sysvol, dnsdomain, str(policy["cn"]))
1546
        policy_path = getpolicypath(sysvol, dnsdomain, str(policy["cn"]))
1535
        set_dir_acl(policy_path, dsacl2fsacl(acl, domainsid), lp,
1547
        set_dir_acl(policy_path, dsacl2fsacl(acl, domainsid), lp,
1536
                    str(domainsid), use_ntvfs,
1548
                    str(domainsid), use_ntvfs,
1537
                    passdb=passdb)
1549
                    passdb=passdb, logger=logger,
1550
                    resume_on_error=resume_on_error)
1538
1551
1539
1552
1540
def setsysvolacl(samdb, netlogon, sysvol, uid, gid, domainsid, dnsdomain,
1553
def setsysvolacl(samdb, logger, netlogon, sysvol, uid, gid, domainsid,
1541
        domaindn, lp, use_ntvfs):
1554
	dnsdomain, domaindn, lp, use_ntvfs, resume_on_error):
1542
    """Set the ACL for the sysvol share and the subfolders
1555
    """Set the ACL for the sysvol share and the subfolders
1543
1556
1544
    :param samdb: An LDB object on the SAM db
1557
    :param samdb: An LDB object on the SAM db
1558
    :param logger: Logger object
1545
    :param netlogon: Physical path for the netlogon folder
1559
    :param netlogon: Physical path for the netlogon folder
1546
    :param sysvol: Physical path for the sysvol folder
1560
    :param sysvol: Physical path for the sysvol folder
1547
    :param uid: The UID of the "Administrator" user
1561
    :param uid: The UID of the "Administrator" user
 Lines 1549-1554   def setsysvolacl(samdb, netlogon, sysvol, uid, gid, domainsid, dnsdomain, Link Here 
1549
    :param domainsid: The SID of the domain
1563
    :param domainsid: The SID of the domain
1550
    :param dnsdomain: The DNS name of the domain
1564
    :param dnsdomain: The DNS name of the domain
1551
    :param domaindn: The DN of the domain (ie. DC=...)
1565
    :param domaindn: The DN of the domain (ie. DC=...)
1566
    :param resume_on_error: A boolean that indicates if the function should
1567
            only log a NTSTATUSError and continue.
1552
    """
1568
    """
1553
    s4_passdb = None
1569
    s4_passdb = None
1554
1570
 Lines 1611-1635   def setsysvolacl(samdb, netlogon, sysvol, uid, gid, domainsid, dnsdomain, Link Here 
1611
        canchown = True
1627
        canchown = True
1612
1628
1613
    # Set the SYSVOL_ACL on the sysvol folder and subfolder (first level)
1629
    # Set the SYSVOL_ACL on the sysvol folder and subfolder (first level)
1614
    setntacl(lp,sysvol, SYSVOL_ACL, str(domainsid), use_ntvfs=use_ntvfs,
1630
    set_nt_acl_wrapper(lp, sysvol, SYSVOL_ACL, str(domainsid),
1615
             skip_invalid_chown=True, passdb=s4_passdb,
1631
                       use_ntvfs=use_ntvfs, skip_invalid_chown=True,
1616
             service=SYSVOL_SERVICE)
1632
                       passdb=s4_passdb, service=SYSVOL_SERVICE, logger=logger,
1633
                       resume_on_error=resume_on_error)
1617
    for root, dirs, files in os.walk(sysvol, topdown=False):
1634
    for root, dirs, files in os.walk(sysvol, topdown=False):
1618
        for name in files:
1635
        for name in files:
1619
            if use_ntvfs and canchown:
1636
            if use_ntvfs and canchown:
1620
                os.chown(os.path.join(root, name), -1, gid)
1637
                os.chown(os.path.join(root, name), -1, gid)
1621
            setntacl(lp, os.path.join(root, name), SYSVOL_ACL, str(domainsid),
1638
            set_nt_acl_wrapper(lp, os.path.join(root, name), SYSVOL_ACL,
1622
                     use_ntvfs=use_ntvfs, skip_invalid_chown=True,
1639
                               str(domainsid), use_ntvfs=use_ntvfs,
1623
                     passdb=s4_passdb, service=SYSVOL_SERVICE)
1640
                               skip_invalid_chown=True, passdb=s4_passdb,
1641
                               service=SYSVOL_SERVICE, logger=logger,
1642
                               resume_on_error=resume_on_error)
1624
        for name in dirs:
1643
        for name in dirs:
1625
            if use_ntvfs and canchown:
1644
            if use_ntvfs and canchown:
1626
                os.chown(os.path.join(root, name), -1, gid)
1645
                os.chown(os.path.join(root, name), -1, gid)
1627
            setntacl(lp, os.path.join(root, name), SYSVOL_ACL, str(domainsid),
1646
            set_nt_acl_wrapper(lp, os.path.join(root, name), SYSVOL_ACL,
1628
                     use_ntvfs=use_ntvfs, skip_invalid_chown=True,
1647
                               str(domainsid), use_ntvfs=use_ntvfs,
1629
                     passdb=s4_passdb, service=SYSVOL_SERVICE)
1648
                               skip_invalid_chown=True, passdb=s4_passdb,
1649
                               service=SYSVOL_SERVICE, logger=logger,
1650
                               resume_on_error=resume_on_error)
1630
1651
1631
    # Set acls on Policy folder and policies folders
1652
    # Set acls on Policy folder and policies folders
1632
    set_gpos_acl(sysvol, dnsdomain, domainsid, domaindn, samdb, lp, use_ntvfs, passdb=s4_passdb)
1653
    set_gpos_acl(sysvol, logger, dnsdomain, domainsid, domaindn, samdb, lp,
1654
                 use_ntvfs, passdb=s4_passdb, resume_on_error=resume_on_error)
1633
1655
1634
def acl_type(direct_db_access):
1656
def acl_type(direct_db_access):
1635
    if direct_db_access:
1657
    if direct_db_access:
 Lines 1824-1832   def provision_fill(samdb, secrets_ldb, logger, names, paths, Link Here 
1824
        # Continue setting up sysvol for GPO. This appears to require being
1846
        # Continue setting up sysvol for GPO. This appears to require being
1825
        # outside a transaction.
1847
        # outside a transaction.
1826
        if not skip_sysvolacl:
1848
        if not skip_sysvolacl:
1827
            setsysvolacl(samdb, paths.netlogon, paths.sysvol, paths.root_uid,
1849
            setsysvolacl(samdb, logger, paths.netlogon, paths.sysvol,
1828
                         paths.root_gid, names.domainsid, names.dnsdomain,
1850
                         paths.root_uid, paths.root_gid, names.domainsid,
1829
                         names.domaindn, lp, use_ntvfs)
1851
                         names.dnsdomain, names.domaindn, lp, use_ntvfs,
1852
                         resume_on_error=False)
1830
        else:
1853
        else:
1831
            logger.info("Setting acl on sysvol skipped")
1854
            logger.info("Setting acl on sysvol skipped")
1832
1855
(-)a/python/samba/upgrade.py (-6 / +5 lines)
 Lines 847-856   Please fix this account before attempting to upgrade again Link Here 
847
        logger.info("Administrator password has been set to password of user '%s'", admin_user)
847
        logger.info("Administrator password has been set to password of user '%s'", admin_user)
848
848
849
    if result.server_role == "active directory domain controller":
849
    if result.server_role == "active directory domain controller":
850
        setsysvolacl(result.samdb, result.paths.netlogon, result.paths.sysvol,
850
        setsysvolacl(result.samdb, logger, result.paths.netlogon,
851
                result.paths.root_uid, result.paths.root_gid,
851
                result.paths.sysvol, result.paths.root_uid,
852
                security.dom_sid(result.domainsid), result.names.dnsdomain,
852
                result.paths.root_gid, security.dom_sid(result.domainsid),
853
                result.names.domaindn, result.lp, use_ntvfs)
853
                result.names.dnsdomain, result.names.domaindn, result.lp,
854
                use_ntvfs, resume_on_error=False)
854
855
855
    # FIXME: import_registry(registry.Registry(), samba3.get_registry())
856
    # FIXME: import_registry(registry.Registry(), samba3.get_registry())
856
    # FIXME: shares
857
    # FIXME: shares
857
- 
858
sysvolreset
858
sysvolreset
859
--
860
python/samba/netcmd/ntacl.py | 7 ++++---
859
python/samba/netcmd/ntacl.py | 7 ++++---
861
1 file changed, 4 insertions(+), 3 deletions(-)
860
1 file changed, 4 insertions(+), 3 deletions(-)
(-)a/python/samba/netcmd/ntacl.py (-4 / +4 lines)
 Lines 183-192   class cmd_ntacl_sysvolreset(Command): Link Here 
183
183
184
    takes_options = [
184
    takes_options = [
185
        Option("--use-ntvfs", help="Set the ACLs for use with the ntvfs file server", action="store_true"),
185
        Option("--use-ntvfs", help="Set the ACLs for use with the ntvfs file server", action="store_true"),
186
        Option("--use-s3fs", help="Set the ACLs for use with the default s3fs file server", action="store_true")
186
        Option("--use-s3fs", help="Set the ACLs for use with the default s3fs file server", action="store_true"),
187
        Option("--resume-on-error", help="Only log unsuccessful ACL operation and resume", action="store_true"),
187
        ]
188
        ]
188
189
189
    def run(self, use_ntvfs=False, use_s3fs=False,
190
    def run(self, use_ntvfs=False, use_s3fs=False, resume_on_error=False,
190
            credopts=None, sambaopts=None, versionopts=None):
191
            credopts=None, sambaopts=None, versionopts=None):
191
        lp = sambaopts.get_loadparm()
192
        lp = sambaopts.get_loadparm()
192
        path = lp.private_path("secrets.ldb")
193
        path = lp.private_path("secrets.ldb")
 Lines 236-242   class cmd_ntacl_sysvolreset(Command): Link Here 
236
        provision.setsysvolacl(samdb, logger, netlogon, sysvol, LA_uid, BA_gid,
237
        provision.setsysvolacl(samdb, logger, netlogon, sysvol, LA_uid, BA_gid,
237
                               domain_sid, lp.get("realm").lower(),
238
                               domain_sid, lp.get("realm").lower(),
238
                               samdb.domain_dn(), lp, use_ntvfs=use_ntvfs,
239
                               samdb.domain_dn(), lp, use_ntvfs=use_ntvfs,
239
                               resume_on_error=False)
240
                               resume_on_error=resume_on_error)
240
241
241
class cmd_ntacl_sysvolcheck(Command):
242
class cmd_ntacl_sysvolcheck(Command):
242
    """Check sysvol ACLs match defaults (including correct ACLs on GPOs)."""
243
    """Check sysvol ACLs match defaults (including correct ACLs on GPOs)."""
243
- 

Return to bug 38217