2018-12-12 13:40:43 +13:00
#!/usr/bin/env python3
2009-09-15 17:34:42 -07:00
# -*- coding: utf-8 -*-
import optparse
import sys
import os
import base64
import re
import random
2011-02-01 14:43:34 +11:00
sys . path . insert ( 0 , " bin/python " )
2010-06-30 10:57:37 +02:00
import samba
2014-11-02 08:57:37 -08:00
from samba . tests . subunitrun import SubunitOptions , TestProgram
2009-09-15 17:34:42 -07:00
import samba . getopt as options
# Some error messages that are being tested
2010-04-04 00:14:23 +02:00
from ldb import SCOPE_SUBTREE , SCOPE_BASE , LdbError , ERR_NO_SUCH_OBJECT
2009-09-15 17:34:42 -07:00
# For running the test unit
2012-11-16 12:51:44 +01:00
from samba . ndr import ndr_pack , ndr_unpack
2009-09-15 17:34:42 -07:00
from samba . dcerpc import security
2010-12-10 10:31:58 +02:00
from samba import gensec , sd_utils
2010-06-14 15:12:00 +03:00
from samba . samdb import SamDB
2012-02-19 21:24:59 +11:00
from samba . credentials import Credentials , DONT_USE_KERBEROS
2009-09-15 17:34:42 -07:00
from samba . auth import system_session
2010-04-04 00:14:23 +02:00
from samba . dsdb import DS_DOMAIN_FUNCTION_2008
2010-04-03 23:33:47 +02:00
from samba . dcerpc . security import (
SECINFO_OWNER , SECINFO_GROUP , SECINFO_DACL , SECINFO_SACL )
2010-06-19 18:58:18 +02:00
import samba . tests
2010-11-25 01:15:24 +02:00
from samba . tests import delete_force
2009-09-15 17:34:42 -07:00
2010-11-10 13:35:30 +01:00
parser = optparse . OptionParser ( " sec_descriptor.py [options] <host> " )
2009-09-15 17:34:42 -07:00
sambaopts = options . SambaOptions ( parser )
parser . add_option_group ( sambaopts )
parser . add_option_group ( options . VersionOptions ( parser ) )
# use command line creds if available
credopts = options . CredentialsOptions ( parser )
parser . add_option_group ( credopts )
2014-11-02 08:57:37 -08:00
subunitopts = SubunitOptions ( parser )
parser . add_option_group ( subunitopts )
2009-09-15 17:34:42 -07:00
opts , args = parser . parse_args ( )
if len ( args ) < 1 :
parser . print_usage ( )
sys . exit ( 1 )
host = args [ 0 ]
lp = sambaopts . get_loadparm ( )
creds = credopts . get_credentials ( lp )
2010-06-14 15:12:00 +03:00
creds . set_gensec_features ( creds . get_gensec_features ( ) | gensec . FEATURE_SEAL )
2009-09-15 17:34:42 -07:00
#
# Tests start here
#
2018-07-30 18:20:39 +12:00
2010-06-19 18:58:18 +02:00
class DescriptorTests ( samba . tests . TestCase ) :
2009-09-15 17:34:42 -07:00
def get_users_domain_dn ( self , name ) :
return " CN= %s ,CN=Users, %s " % ( name , self . base_dn )
2017-01-11 13:34:28 +01:00
def create_schema_class ( self , _ldb , desc = None ) :
2009-09-15 17:34:42 -07:00
while True :
2018-07-30 18:19:05 +12:00
class_id = random . randint ( 0 , 65535 )
2017-01-11 13:34:28 +01:00
class_name = " descriptor-test-class %s " % class_id
2009-09-15 17:34:42 -07:00
class_dn = " CN= %s , %s " % ( class_name , self . schema_dn )
try :
2017-01-11 13:34:28 +01:00
self . ldb_admin . search ( base = class_dn , attrs = [ " name " ] )
2018-02-23 14:34:23 +00:00
except LdbError as e :
( num , _ ) = e . args
2020-02-07 11:02:38 +13:00
self . assertEqual ( num , ERR_NO_SUCH_OBJECT )
2017-01-11 13:34:28 +01:00
break
2009-09-15 17:34:42 -07:00
ldif = """
2017-01-11 13:34:28 +01:00
dn : """ + class_dn + """
2009-09-15 17:34:42 -07:00
objectClass : classSchema
objectCategory : CN = Class - Schema , """ + self.schema_dn + """
2017-01-11 13:34:28 +01:00
defaultObjectCategory : """ + class_dn + """
governsId : 1.3 .6 .1 .4 .1 .7165 .4 .6 .2 .3 . """ + str(class_id) + """
2009-09-15 17:34:42 -07:00
instanceType : 4
objectClassCategory : 1
subClassOf : organizationalPerson
systemFlags : 16
rDNAttID : cn
systemMustContain : cn
systemOnly : FALSE
"""
if desc :
assert ( isinstance ( desc , str ) or isinstance ( desc , security . descriptor ) )
if isinstance ( desc , str ) :
ldif + = " nTSecurityDescriptor: %s " % desc
elif isinstance ( desc , security . descriptor ) :
2018-05-04 15:27:12 +01:00
ldif + = " nTSecurityDescriptor:: %s " % base64 . b64encode ( ndr_pack ( desc ) ) . decode ( ' utf8 ' )
2009-09-15 17:34:42 -07:00
_ldb . add_ldif ( ldif )
2017-01-11 13:34:28 +01:00
return class_dn
2009-09-15 17:34:42 -07:00
def create_configuration_container ( self , _ldb , object_dn , desc = None ) :
ldif = """
dn : """ + object_dn + """
objectClass : container
objectCategory : CN = Container , """ + self.schema_dn + """
showInAdvancedViewOnly : TRUE
instanceType : 4
"""
if desc :
assert ( isinstance ( desc , str ) or isinstance ( desc , security . descriptor ) )
if isinstance ( desc , str ) :
ldif + = " nTSecurityDescriptor: %s " % desc
elif isinstance ( desc , security . descriptor ) :
2018-05-04 15:27:12 +01:00
ldif + = " nTSecurityDescriptor:: %s " % base64 . b64encode ( ndr_pack ( desc ) ) . decode ( ' utf8 ' )
2009-09-15 17:34:42 -07:00
_ldb . add_ldif ( ldif )
def create_configuration_specifier ( self , _ldb , object_dn , desc = None ) :
ldif = """
dn : """ + object_dn + """
objectClass : displaySpecifier
showInAdvancedViewOnly : TRUE
"""
if desc :
assert ( isinstance ( desc , str ) or isinstance ( desc , security . descriptor ) )
if isinstance ( desc , str ) :
ldif + = " nTSecurityDescriptor: %s " % desc
elif isinstance ( desc , security . descriptor ) :
2018-05-04 15:27:12 +01:00
ldif + = " nTSecurityDescriptor:: %s " % base64 . b64encode ( ndr_pack ( desc ) ) . decode ( ' utf8 ' )
2009-09-15 17:34:42 -07:00
_ldb . add_ldif ( ldif )
def get_ldb_connection ( self , target_username , target_password ) :
2010-06-14 15:12:00 +03:00
creds_tmp = Credentials ( )
creds_tmp . set_username ( target_username )
creds_tmp . set_password ( target_password )
creds_tmp . set_domain ( creds . get_domain ( ) )
creds_tmp . set_realm ( creds . get_realm ( ) )
creds_tmp . set_workstation ( creds . get_workstation ( ) )
creds_tmp . set_gensec_features ( creds_tmp . get_gensec_features ( )
| gensec . FEATURE_SEAL )
2018-07-30 18:19:33 +12:00
creds_tmp . set_kerberos_state ( DONT_USE_KERBEROS ) # kinit is too expensive to use in a tight loop
2010-06-14 15:12:00 +03:00
ldb_target = SamDB ( url = host , credentials = creds_tmp , lp = lp )
2009-09-15 17:34:42 -07:00
return ldb_target
def setUp ( self ) :
2010-06-19 18:58:18 +02:00
super ( DescriptorTests , self ) . setUp ( )
2014-11-02 08:23:36 -08:00
self . ldb_admin = SamDB ( host , credentials = creds , session_info = system_session ( lp ) , lp = lp ,
2018-07-30 18:16:12 +12:00
options = ldb_options )
2014-11-02 08:23:36 -08:00
self . base_dn = self . ldb_admin . domain_dn ( )
2010-11-18 20:44:22 +02:00
self . configuration_dn = self . ldb_admin . get_config_basedn ( ) . get_linearized ( )
self . schema_dn = self . ldb_admin . get_schema_basedn ( ) . get_linearized ( )
2010-11-27 12:32:22 +01:00
self . domain_sid = security . dom_sid ( self . ldb_admin . get_domain_sid ( ) )
2014-11-02 08:23:36 -08:00
self . sd_utils = sd_utils . SDUtils ( self . ldb_admin )
2018-01-08 13:56:03 +13:00
self . addCleanup ( self . delete_admin_connection )
2018-03-09 13:57:01 +00:00
print ( " baseDN: %s " % self . base_dn )
2009-09-15 17:34:42 -07:00
2018-01-08 13:56:03 +13:00
def delete_admin_connection ( self ) :
del self . sd_utils
del self . ldb_admin
2009-09-15 17:34:42 -07:00
################################################################################################
2018-07-30 18:19:49 +12:00
# Tests for DOMAIN
2009-09-15 17:34:42 -07:00
# Default descriptor tests #####################################################################
2018-07-30 18:20:39 +12:00
2009-09-15 17:34:42 -07:00
class OwnerGroupDescriptorTests ( DescriptorTests ) :
2010-01-08 10:00:35 +11:00
def deleteAll ( self ) :
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , self . get_users_domain_dn ( " testuser1 " ) )
delete_force ( self . ldb_admin , self . get_users_domain_dn ( " testuser2 " ) )
delete_force ( self . ldb_admin , self . get_users_domain_dn ( " testuser3 " ) )
delete_force ( self . ldb_admin , self . get_users_domain_dn ( " testuser4 " ) )
delete_force ( self . ldb_admin , self . get_users_domain_dn ( " testuser5 " ) )
delete_force ( self . ldb_admin , self . get_users_domain_dn ( " testuser6 " ) )
delete_force ( self . ldb_admin , self . get_users_domain_dn ( " testuser7 " ) )
delete_force ( self . ldb_admin , self . get_users_domain_dn ( " testuser8 " ) )
2010-01-08 10:00:35 +11:00
# DOMAIN
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , self . get_users_domain_dn ( " test_domain_group1 " ) )
delete_force ( self . ldb_admin , " CN=test_domain_user1,OU=test_domain_ou1, " + self . base_dn )
delete_force ( self . ldb_admin , " OU=test_domain_ou2,OU=test_domain_ou1, " + self . base_dn )
delete_force ( self . ldb_admin , " OU=test_domain_ou1, " + self . base_dn )
2010-01-08 10:00:35 +11:00
# SCHEMA
2023-03-20 12:04:37 +01:00
mod = " (A;CI;WDCC;;;AU)(A;;CC;;;AU) "
self . sd_utils . dacl_delete_aces ( self . schema_dn , mod )
2010-01-08 10:00:35 +11:00
# CONFIGURATION
2018-07-30 18:22:01 +12:00
delete_force ( self . ldb_admin , " CN=test-specifier1,CN=test-container1,CN=DisplaySpecifiers, "
2018-07-30 18:16:12 +12:00
+ self . configuration_dn )
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , " CN=test-container1,CN=DisplaySpecifiers, " + self . configuration_dn )
2010-01-08 10:00:35 +11:00
2009-09-15 17:34:42 -07:00
def setUp ( self ) :
2010-06-19 18:58:18 +02:00
super ( OwnerGroupDescriptorTests , self ) . setUp ( )
2010-01-08 10:00:35 +11:00
self . deleteAll ( )
2018-07-30 18:19:49 +12:00
# Create users
2010-11-18 19:13:41 +02:00
# User 1 - Enterprise Admins
2010-11-23 17:52:55 +02:00
self . ldb_admin . newuser ( " testuser1 " , " samba123@ " )
2010-11-18 19:13:41 +02:00
# User 2 - Domain Admins
2010-11-23 17:52:55 +02:00
self . ldb_admin . newuser ( " testuser2 " , " samba123@ " )
2010-11-18 19:13:41 +02:00
# User 3 - Schema Admins
2010-11-23 17:52:55 +02:00
self . ldb_admin . newuser ( " testuser3 " , " samba123@ " )
2010-11-18 19:13:41 +02:00
# User 4 - regular user
2010-11-23 17:52:55 +02:00
self . ldb_admin . newuser ( " testuser4 " , " samba123@ " )
2010-11-18 19:13:41 +02:00
# User 5 - Enterprise Admins and Domain Admins
2010-11-23 17:52:55 +02:00
self . ldb_admin . newuser ( " testuser5 " , " samba123@ " )
2010-11-18 19:13:41 +02:00
# User 6 - Enterprise Admins, Domain Admins, Schema Admins
2010-11-23 17:52:55 +02:00
self . ldb_admin . newuser ( " testuser6 " , " samba123@ " )
2010-11-18 19:13:41 +02:00
# User 7 - Domain Admins and Schema Admins
2010-11-23 17:52:55 +02:00
self . ldb_admin . newuser ( " testuser7 " , " samba123@ " )
2010-11-18 19:13:41 +02:00
# User 5 - Enterprise Admins and Schema Admins
2010-11-23 17:52:55 +02:00
self . ldb_admin . newuser ( " testuser8 " , " samba123@ " )
2010-11-18 19:13:41 +02:00
self . ldb_admin . add_remove_group_members ( " Enterprise Admins " ,
2012-06-19 12:43:08 +02:00
[ " testuser1 " , " testuser5 " , " testuser6 " , " testuser8 " ] ,
2010-11-18 19:13:41 +02:00
add_members_operation = True )
self . ldb_admin . add_remove_group_members ( " Domain Admins " ,
2018-07-30 18:19:05 +12:00
[ " testuser2 " , " testuser5 " , " testuser6 " , " testuser7 " ] ,
2010-11-18 19:13:41 +02:00
add_members_operation = True )
self . ldb_admin . add_remove_group_members ( " Schema Admins " ,
2018-07-30 18:19:05 +12:00
[ " testuser3 " , " testuser6 " , " testuser7 " , " testuser8 " ] ,
2010-11-18 19:13:41 +02:00
add_members_operation = True )
2009-09-15 17:34:42 -07:00
self . results = {
2009-09-20 23:16:04 +02:00
# msDS-Behavior-Version < DS_DOMAIN_FUNCTION_2008
2018-07-30 18:17:14 +12:00
" ds_behavior_win2003 " : {
" 100 " : " O:EAG:DU " ,
" 101 " : " O:DAG:DU " ,
" 102 " : " O: %s G:DU " ,
" 103 " : " O: %s G:DU " ,
" 104 " : " O:DAG:DU " ,
" 105 " : " O:DAG:DU " ,
" 106 " : " O:DAG:DU " ,
" 107 " : " O:EAG:DU " ,
" 108 " : " O:DAG:DA " ,
" 109 " : " O:DAG:DA " ,
" 110 " : " O: %s G:DA " ,
" 111 " : " O: %s G:DA " ,
" 112 " : " O:DAG:DA " ,
" 113 " : " O:DAG:DA " ,
" 114 " : " O:DAG:DA " ,
" 115 " : " O:DAG:DA " ,
" 130 " : " O:EAG:DU " ,
" 131 " : " O:DAG:DU " ,
" 132 " : " O:SAG:DU " ,
" 133 " : " O: %s G:DU " ,
" 134 " : " O:EAG:DU " ,
" 135 " : " O:SAG:DU " ,
" 136 " : " O:SAG:DU " ,
" 137 " : " O:SAG:DU " ,
" 138 " : " O:DAG:DA " ,
" 139 " : " O:DAG:DA " ,
" 140 " : " O: %s G:DA " ,
" 141 " : " O: %s G:DA " ,
" 142 " : " O:DAG:DA " ,
" 143 " : " O:DAG:DA " ,
" 144 " : " O:DAG:DA " ,
" 145 " : " O:DAG:DA " ,
" 160 " : " O:EAG:DU " ,
" 161 " : " O:DAG:DU " ,
" 162 " : " O: %s G:DU " ,
" 163 " : " O: %s G:DU " ,
" 164 " : " O:EAG:DU " ,
" 165 " : " O:EAG:DU " ,
" 166 " : " O:DAG:DU " ,
" 167 " : " O:EAG:DU " ,
" 168 " : " O:DAG:DA " ,
" 169 " : " O:DAG:DA " ,
" 170 " : " O: %s G:DA " ,
" 171 " : " O: %s G:DA " ,
" 172 " : " O:DAG:DA " ,
" 173 " : " O:DAG:DA " ,
" 174 " : " O:DAG:DA " ,
" 175 " : " O:DAG:DA " ,
2009-09-15 17:34:42 -07:00
} ,
2009-11-15 19:26:02 +02:00
# msDS-Behavior-Version >= DS_DOMAIN_FUNCTION_2008
2018-07-30 18:17:14 +12:00
" ds_behavior_win2008 " : {
" 100 " : " O:EAG:EA " ,
" 101 " : " O:DAG:DA " ,
" 102 " : " O: %s G:DU " ,
" 103 " : " O: %s G:DU " ,
" 104 " : " O:DAG:DA " ,
" 105 " : " O:DAG:DA " ,
" 106 " : " O:DAG:DA " ,
" 107 " : " O:EAG:EA " ,
" 108 " : " O:DAG:DA " ,
" 109 " : " O:DAG:DA " ,
" 110 " : " O: %s G:DA " ,
" 111 " : " O: %s G:DA " ,
" 112 " : " O:DAG:DA " ,
" 113 " : " O:DAG:DA " ,
" 114 " : " O:DAG:DA " ,
" 115 " : " O:DAG:DA " ,
" 130 " : " O:EAG:EA " ,
" 131 " : " O:DAG:DA " ,
" 132 " : " O:SAG:SA " ,
" 133 " : " O: %s G:DU " ,
" 134 " : " O:EAG:EA " ,
" 135 " : " O:SAG:SA " ,
" 136 " : " O:SAG:SA " ,
" 137 " : " O:SAG:SA " ,
" 138 " : " " ,
" 139 " : " " ,
" 140 " : " O: %s G:DA " ,
" 141 " : " O: %s G:DA " ,
" 142 " : " " ,
" 143 " : " " ,
" 144 " : " " ,
" 145 " : " " ,
" 160 " : " O:EAG:EA " ,
" 161 " : " O:DAG:DA " ,
" 162 " : " O: %s G:DU " ,
" 163 " : " O: %s G:DU " ,
" 164 " : " O:EAG:EA " ,
" 165 " : " O:EAG:EA " ,
" 166 " : " O:DAG:DA " ,
" 167 " : " O:EAG:EA " ,
" 168 " : " O:DAG:DA " ,
" 169 " : " O:DAG:DA " ,
" 170 " : " O: %s G:DA " ,
" 171 " : " O: %s G:DA " ,
" 172 " : " O:DAG:DA " ,
" 173 " : " O:DAG:DA " ,
" 174 " : " O:DAG:DA " ,
" 175 " : " O:DAG:DA " ,
2009-09-15 17:34:42 -07:00
} ,
}
2013-01-24 13:07:32 +01:00
# Discover 'domainControllerFunctionality'
res = self . ldb_admin . search ( base = " " , scope = SCOPE_BASE ,
attrs = [ ' domainControllerFunctionality ' ] )
res = int ( res [ 0 ] [ ' domainControllerFunctionality ' ] [ 0 ] )
2009-09-20 23:16:04 +02:00
if res < DS_DOMAIN_FUNCTION_2008 :
2009-09-15 17:34:42 -07:00
self . DS_BEHAVIOR = " ds_behavior_win2003 "
else :
self . DS_BEHAVIOR = " ds_behavior_win2008 "
def tearDown ( self ) :
2018-10-28 11:10:58 +13:00
super ( OwnerGroupDescriptorTests , self ) . tearDown ( )
2010-01-08 10:00:35 +11:00
self . deleteAll ( )
2009-09-15 17:34:42 -07:00
2023-02-23 15:53:58 +13:00
def check_user_belongs ( self , user_dn , groups = None ) :
2019-01-07 15:07:22 +01:00
""" Test whether user is member of the expected group(s) """
2023-02-23 15:53:58 +13:00
if groups is None :
groups = [ ]
2009-09-15 17:34:42 -07:00
if groups != [ ] :
# User is member of at least one additional group
res = self . ldb_admin . search ( user_dn , attrs = [ " memberOf " ] )
2018-10-10 21:48:38 +01:00
res = [ str ( x ) . upper ( ) for x in sorted ( list ( res [ 0 ] [ " memberOf " ] ) ) ]
2009-09-15 17:34:42 -07:00
expected = [ ]
for x in groups :
expected . append ( self . get_users_domain_dn ( x ) )
expected = [ x . upper ( ) for x in sorted ( expected ) ]
self . assertEqual ( expected , res )
else :
# User is not a member of any additional groups but default
res = self . ldb_admin . search ( user_dn , attrs = [ " * " ] )
res = [ x . upper ( ) for x in res [ 0 ] . keys ( ) ]
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " MEMBEROF " , res )
2009-09-15 17:34:42 -07:00
2009-11-15 19:26:02 +02:00
def check_modify_inheritance ( self , _ldb , object_dn , owner_group = " " ) :
# Modify
2010-12-10 10:31:58 +02:00
sd_user_utils = sd_utils . SDUtils ( _ldb )
2018-07-30 18:19:33 +12:00
ace = " (D;;CC;;;LG) " # Deny Create Children to Guest account
2009-11-15 19:26:02 +02:00
if owner_group != " " :
2010-12-10 10:31:58 +02:00
sd_user_utils . modify_sd_on_dn ( object_dn , owner_group + " D: " + ace )
2009-11-15 19:26:02 +02:00
else :
2010-12-10 10:31:58 +02:00
sd_user_utils . modify_sd_on_dn ( object_dn , " D: " + ace )
2009-11-15 19:26:02 +02:00
# Make sure the modify operation has been applied
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2023-03-22 14:48:00 +01:00
self . assertIn ( ace , desc_sddl )
2009-11-15 19:26:02 +02:00
# Make sure we have identical result for both "add" and "modify"
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2018-03-09 13:57:01 +00:00
print ( self . _testMethodName )
2009-11-15 19:26:02 +02:00
test_number = self . _testMethodName [ 5 : ]
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ test_number ] , res )
2009-09-15 17:34:42 -07:00
def test_100 ( self ) :
""" Enterprise admin group member creates object (default nTSecurityDescriptor) in DOMAIN
"""
user_name = " testuser1 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " ] )
# Open Ldb connection with the tested user
2009-11-15 19:26:02 +02:00
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
object_dn = " CN=test_domain_group1,CN=Users, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-24 17:18:09 +02:00
_ldb . newgroup ( " test_domain_group1 " , grouptype = 4 )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , object_dn )
2009-09-15 17:34:42 -07:00
def test_101 ( self ) :
2009-11-10 15:58:52 +02:00
""" Domain admin group member creates object (default nTSecurityDescriptor) in DOMAIN
2009-09-15 17:34:42 -07:00
"""
user_name = " testuser2 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Domain Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
2009-11-15 19:26:02 +02:00
object_dn = " CN=test_domain_group1,CN=Users, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-24 17:18:09 +02:00
_ldb . newgroup ( " test_domain_group1 " , grouptype = 4 )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , object_dn )
2009-09-15 17:34:42 -07:00
def test_102 ( self ) :
""" Schema admin group member with CC right creates object (default nTSecurityDescriptor) in DOMAIN
"""
user_name = " testuser3 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
object_dn = " OU=test_domain_ou1, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( object_dn )
2018-07-30 18:17:02 +12:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( user_name ) )
2009-11-15 19:26:02 +02:00
mod = " (A;CI;WPWDCC;;; %s ) " % str ( user_sid )
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod )
2009-09-15 17:34:42 -07:00
# Create additional object into the first one
object_dn = " CN=test_domain_user1, " + object_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-23 17:52:55 +02:00
_ldb . newuser ( " test_domain_user1 " , " samba123@ " ,
userou = " OU=test_domain_ou1 " , setpassword = False )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] % str ( user_sid ) , res )
# This fails, research why
#self.check_modify_inheritance(_ldb, object_dn)
2009-09-15 17:34:42 -07:00
def test_103 ( self ) :
""" Regular user with CC right creates object (default nTSecurityDescriptor) in DOMAIN
"""
user_name = " testuser4 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
object_dn = " OU=test_domain_ou1, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( object_dn )
2018-07-30 18:17:02 +12:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( user_name ) )
2009-11-15 19:26:02 +02:00
mod = " (A;CI;WPWDCC;;; %s ) " % str ( user_sid )
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod )
2009-09-15 17:34:42 -07:00
# Create additional object into the first one
object_dn = " CN=test_domain_user1, " + object_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-23 17:52:55 +02:00
_ldb . newuser ( " test_domain_user1 " , " samba123@ " ,
userou = " OU=test_domain_ou1 " , setpassword = False )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] % str ( user_sid ) , res )
2018-07-30 18:19:49 +12:00
# this fails, research why
2009-11-15 19:26:02 +02:00
#self.check_modify_inheritance(_ldb, object_dn)
2009-09-15 17:34:42 -07:00
def test_104 ( self ) :
""" Enterprise & Domain admin group member creates object (default nTSecurityDescriptor) in DOMAIN
"""
user_name = " testuser5 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Domain Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
2009-11-15 19:26:02 +02:00
object_dn = " CN=test_domain_group1,CN=Users, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-24 17:18:09 +02:00
_ldb . newgroup ( " test_domain_group1 " , grouptype = 4 )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , object_dn )
2009-09-15 17:34:42 -07:00
def test_105 ( self ) :
""" Enterprise & Domain & Schema admin group member creates object (default nTSecurityDescriptor) in DOMAIN
"""
user_name = " testuser6 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Domain Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
2009-11-15 19:26:02 +02:00
object_dn = " CN=test_domain_group1,CN=Users, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-24 17:18:09 +02:00
_ldb . newgroup ( " test_domain_group1 " , grouptype = 4 )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , object_dn )
2009-09-15 17:34:42 -07:00
def test_106 ( self ) :
""" Domain & Schema admin group member creates object (default nTSecurityDescriptor) in DOMAIN
"""
user_name = " testuser7 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Domain Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
2009-11-15 19:26:02 +02:00
object_dn = " CN=test_domain_group1,CN=Users, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-24 17:18:09 +02:00
_ldb . newgroup ( " test_domain_group1 " , grouptype = 4 )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , object_dn )
2009-09-15 17:34:42 -07:00
def test_107 ( self ) :
""" Enterprise & Schema admin group member creates object (default nTSecurityDescriptor) in DOMAIN
"""
user_name = " testuser8 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
2009-11-15 19:26:02 +02:00
object_dn = " CN=test_domain_group1,CN=Users, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-24 17:18:09 +02:00
_ldb . newgroup ( " test_domain_group1 " , grouptype = 4 )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , object_dn )
2009-09-15 17:34:42 -07:00
# Control descriptor tests #####################################################################
def test_108 ( self ) :
""" Enterprise admin group member creates object (custom descriptor) in DOMAIN
"""
user_name = " testuser1 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
2009-11-15 19:26:02 +02:00
object_dn = " CN=test_domain_group1,CN=Users, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
2010-11-24 17:18:09 +02:00
sddl = " O:DAG:DAD:(A;;RP;;;DU) "
tmp_desc = security . descriptor . from_sddl ( sddl , self . domain_sid )
_ldb . newgroup ( " test_domain_group1 " , grouptype = 4 , sd = tmp_desc )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
2009-09-15 17:34:42 -07:00
def test_109 ( self ) :
""" Domain admin group member creates object (custom descriptor) in DOMAIN
"""
user_name = " testuser2 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Domain Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
2009-11-15 19:26:02 +02:00
object_dn = " CN=test_domain_group1,CN=Users, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
2010-11-24 17:18:09 +02:00
sddl = " O:DAG:DAD:(A;;RP;;;DU) "
tmp_desc = security . descriptor . from_sddl ( sddl , self . domain_sid )
_ldb . newgroup ( " test_domain_group1 " , grouptype = 4 , sd = tmp_desc )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
2009-09-15 17:34:42 -07:00
def test_110 ( self ) :
""" Schema admin group member with CC right creates object (custom descriptor) in DOMAIN
"""
user_name = " testuser3 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
object_dn = " OU=test_domain_ou1, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( object_dn )
2018-07-30 18:17:02 +12:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( user_name ) )
2009-11-15 19:26:02 +02:00
mod = " (A;CI;WOWDCC;;; %s ) " % str ( user_sid )
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
# NB! Problematic owner part won't accept DA only <User Sid> !!!
2010-11-23 17:52:55 +02:00
sddl = " O: %s G:DAD:(A;;RP;;;DU) " % str ( user_sid )
tmp_desc = security . descriptor . from_sddl ( sddl , self . domain_sid )
2009-09-15 17:34:42 -07:00
# Create additional object into the first one
object_dn = " CN=test_domain_user1, " + object_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-23 17:52:55 +02:00
_ldb . newuser ( " test_domain_user1 " , " samba123@ " ,
userou = " OU=test_domain_ou1 " , sd = tmp_desc , setpassword = False )
2010-12-10 10:31:58 +02:00
desc = self . sd_utils . read_sd_on_dn ( object_dn )
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] % str ( user_sid ) , res )
2009-09-15 17:34:42 -07:00
def test_111 ( self ) :
""" Regular user with CC right creates object (custom descriptor) in DOMAIN
"""
user_name = " testuser4 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
object_dn = " OU=test_domain_ou1, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( object_dn )
2018-07-30 18:17:02 +12:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( user_name ) )
2009-11-15 19:26:02 +02:00
mod = " (A;CI;WOWDCC;;; %s ) " % str ( user_sid )
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
# NB! Problematic owner part won't accept DA only <User Sid> !!!
2010-11-23 17:52:55 +02:00
sddl = " O: %s G:DAD:(A;;RP;;;DU) " % str ( user_sid )
tmp_desc = security . descriptor . from_sddl ( sddl , self . domain_sid )
2009-09-15 17:34:42 -07:00
# Create additional object into the first one
object_dn = " CN=test_domain_user1, " + object_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-23 17:52:55 +02:00
_ldb . newuser ( " test_domain_user1 " , " samba123@ " ,
userou = " OU=test_domain_ou1 " , sd = tmp_desc , setpassword = False )
2010-12-10 10:31:58 +02:00
desc = self . sd_utils . read_sd_on_dn ( object_dn )
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] % str ( user_sid ) , res )
2009-09-15 17:34:42 -07:00
def test_112 ( self ) :
""" Domain & Enterprise admin group member creates object (custom descriptor) in DOMAIN
"""
user_name = " testuser5 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Domain Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
2009-11-15 19:26:02 +02:00
object_dn = " CN=test_domain_group1,CN=Users, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
2010-11-24 17:18:09 +02:00
sddl = " O:DAG:DAD:(A;;RP;;;DU) "
tmp_desc = security . descriptor . from_sddl ( sddl , self . domain_sid )
_ldb . newgroup ( " test_domain_group1 " , grouptype = 4 , sd = tmp_desc )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
2009-09-15 17:34:42 -07:00
def test_113 ( self ) :
""" Domain & Enterprise & Schema admin group member creates object (custom descriptor) in DOMAIN
"""
user_name = " testuser6 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Domain Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
2009-11-15 19:26:02 +02:00
object_dn = " CN=test_domain_group1,CN=Users, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
2010-11-24 17:18:09 +02:00
sddl = " O:DAG:DAD:(A;;RP;;;DU) "
tmp_desc = security . descriptor . from_sddl ( sddl , self . domain_sid )
_ldb . newgroup ( " test_domain_group1 " , grouptype = 4 , sd = tmp_desc )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
2009-09-15 17:34:42 -07:00
def test_114 ( self ) :
""" Domain & Schema admin group member creates object (custom descriptor) in DOMAIN
"""
user_name = " testuser7 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Domain Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
2009-11-15 19:26:02 +02:00
object_dn = " CN=test_domain_group1,CN=Users, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
2010-11-24 17:18:09 +02:00
sddl = " O:DAG:DAD:(A;;RP;;;DU) "
tmp_desc = security . descriptor . from_sddl ( sddl , self . domain_sid )
_ldb . newgroup ( " test_domain_group1 " , grouptype = 4 , sd = tmp_desc )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
2009-09-15 17:34:42 -07:00
def test_115 ( self ) :
""" Enterprise & Schema admin group member creates object (custom descriptor) in DOMAIN
"""
user_name = " testuser8 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
2009-11-15 19:26:02 +02:00
object_dn = " CN=test_domain_group1,CN=Users, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
2010-11-24 17:18:09 +02:00
sddl = " O:DAG:DAD:(A;;RP;;;DU) "
tmp_desc = security . descriptor . from_sddl ( sddl , self . domain_sid )
_ldb . newgroup ( " test_domain_group1 " , grouptype = 4 , sd = tmp_desc )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
2009-09-15 17:34:42 -07:00
def test_999 ( self ) :
user_name = " Administrator "
object_dn = " OU=test_domain_ou1, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( object_dn )
2018-07-30 18:17:02 +12:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( user_name ) )
2009-09-15 17:34:42 -07:00
mod = " (D;CI;WP;;;S-1-3-0) "
#mod = ""
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
# Create additional object into the first one
object_dn = " OU=test_domain_ou2, " + object_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( object_dn )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
2018-07-30 18:19:49 +12:00
# Tests for SCHEMA
2009-09-15 17:34:42 -07:00
# Defalt descriptor tests ##################################################################
def test_130 ( self ) :
user_name = " testuser1 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Change Schema partition descriptor
2018-07-30 18:17:02 +12:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( user_name ) )
2021-10-22 21:10:35 +03:00
mod = " (A;CI;WDCC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( self . schema_dn , mod )
2009-09-15 17:34:42 -07:00
# Create example Schema class
2021-10-25 13:10:56 +03:00
try :
class_dn = self . create_schema_class ( _ldb )
except LdbError as e3 :
self . fail ( )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , class_dn )
2009-09-15 17:34:42 -07:00
def test_131 ( self ) :
user_name = " testuser2 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Domain Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Change Schema partition descriptor
2009-11-15 19:26:02 +02:00
mod = " (A;CI;WDCC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( self . schema_dn , mod )
2009-09-15 17:34:42 -07:00
# Create example Schema class
2017-01-11 13:34:28 +01:00
class_dn = self . create_schema_class ( _ldb )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , class_dn )
2009-09-15 17:34:42 -07:00
def test_132 ( self ) :
user_name = " testuser3 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Change Schema partition descriptor
2009-11-15 19:26:02 +02:00
mod = " (A;CI;WDCC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( self . schema_dn , mod )
2009-09-15 17:34:42 -07:00
# Create example Schema class
2017-01-11 13:34:28 +01:00
class_dn = self . create_schema_class ( _ldb )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
#self.check_modify_inheritance(_ldb, class_dn)
2009-09-15 17:34:42 -07:00
def test_133 ( self ) :
user_name = " testuser4 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
2018-07-30 18:19:49 +12:00
# Change Schema partition descriptor
2018-07-30 18:17:02 +12:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( user_name ) )
2009-11-15 19:26:02 +02:00
mod = " (A;CI;WDCC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( self . schema_dn , mod )
2009-09-15 17:34:42 -07:00
# Create example Schema class
2017-01-11 13:34:28 +01:00
class_dn = self . create_schema_class ( _ldb )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] % str ( user_sid ) , res )
#self.check_modify_inheritance(_ldb, class_dn)
2009-09-15 17:34:42 -07:00
def test_134 ( self ) :
user_name = " testuser5 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Domain Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
2018-07-30 18:19:49 +12:00
# Change Schema partition descriptor
2009-11-15 19:26:02 +02:00
mod = " (A;CI;WDCC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( self . schema_dn , mod )
2009-09-15 17:34:42 -07:00
# Create example Schema class
2017-01-11 13:34:28 +01:00
class_dn = self . create_schema_class ( _ldb )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , class_dn )
2009-09-15 17:34:42 -07:00
def test_135 ( self ) :
user_name = " testuser6 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Domain Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Change Schema partition descriptor
2009-11-15 19:26:02 +02:00
mod = " (A;CI;WDCC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( self . schema_dn , mod )
2009-09-15 17:34:42 -07:00
# Create example Schema class
2017-01-11 13:34:28 +01:00
class_dn = self . create_schema_class ( _ldb )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , class_dn )
2009-09-15 17:34:42 -07:00
def test_136 ( self ) :
user_name = " testuser7 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Domain Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Change Schema partition descriptor
2009-11-15 19:26:02 +02:00
mod = " (A;CI;WDCC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( self . schema_dn , mod )
2009-09-15 17:34:42 -07:00
# Create example Schema class
2017-01-11 13:34:28 +01:00
class_dn = self . create_schema_class ( _ldb )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , class_dn )
2009-09-15 17:34:42 -07:00
def test_137 ( self ) :
user_name = " testuser8 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Change Schema partition descriptor
2009-11-15 19:26:02 +02:00
mod = " (A;CI;WDCC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( self . schema_dn , mod )
2009-09-15 17:34:42 -07:00
# Create example Schema class
2017-01-11 13:34:28 +01:00
class_dn = self . create_schema_class ( _ldb )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , class_dn )
2009-09-15 17:34:42 -07:00
# Custom descriptor tests ##################################################################
def test_138 ( self ) :
user_name = " testuser1 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Change Schema partition descriptor
mod = " (A;;CC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( self . schema_dn , mod )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
desc_sddl = " O:DAG:DAD:(A;;RP;;;DU) "
# Create example Schema class
2017-01-11 13:34:28 +01:00
class_dn = self . create_schema_class ( _ldb , desc_sddl )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
self . assertEqual ( " O:DAG:DA " , res )
def test_139 ( self ) :
user_name = " testuser2 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Domain Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Change Schema partition descriptor
mod = " (A;;CC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( self . schema_dn , mod )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
desc_sddl = " O:DAG:DAD:(A;;RP;;;DU) "
# Create example Schema class
2017-01-11 13:34:28 +01:00
class_dn = self . create_schema_class ( _ldb , desc_sddl )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
self . assertEqual ( " O:DAG:DA " , res )
def test_140 ( self ) :
user_name = " testuser3 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create a custom security descriptor
# NB! Problematic owner part won't accept DA only <User Sid> !!!
2018-07-30 18:17:02 +12:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( user_name ) )
2009-09-15 17:34:42 -07:00
desc_sddl = " O: %s G:DAD:(A;;RP;;;DU) " % str ( user_sid )
# Create example Schema class
2017-01-11 13:34:28 +01:00
class_dn = self . create_schema_class ( _ldb , desc_sddl )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] % str ( user_sid ) , res )
2009-09-15 17:34:42 -07:00
def test_141 ( self ) :
user_name = " testuser4 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
2023-03-20 12:04:37 +01:00
# Change Schema partition descriptor
mod = " (A;;CC;;;AU) "
self . sd_utils . dacl_add_ace ( self . schema_dn , mod )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
# NB! Problematic owner part won't accept DA only <User Sid> !!!
2018-07-30 18:17:02 +12:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( user_name ) )
2009-09-15 17:34:42 -07:00
desc_sddl = " O: %s G:DAD:(A;;RP;;;DU) " % str ( user_sid )
# Create example Schema class
2017-01-11 13:34:28 +01:00
class_dn = self . create_schema_class ( _ldb , desc_sddl )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] % str ( user_sid ) , res )
2009-09-15 17:34:42 -07:00
def test_142 ( self ) :
user_name = " testuser5 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Domain Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Change Schema partition descriptor
mod = " (A;;CC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( self . schema_dn , mod )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
desc_sddl = " O:DAG:DAD:(A;;RP;;;DU) "
# Create example Schema class
2017-01-11 13:34:28 +01:00
class_dn = self . create_schema_class ( _ldb , desc_sddl )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
self . assertEqual ( " O:DAG:DA " , res )
def test_143 ( self ) :
user_name = " testuser6 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Domain Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Change Schema partition descriptor
mod = " (A;;CC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( self . schema_dn , mod )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
desc_sddl = " O:DAG:DAD:(A;;RP;;;DU) "
# Create example Schema class
2017-01-11 13:34:28 +01:00
class_dn = self . create_schema_class ( _ldb , desc_sddl )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
self . assertEqual ( " O:DAG:DA " , res )
def test_144 ( self ) :
user_name = " testuser7 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Domain Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Change Schema partition descriptor
mod = " (A;;CC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( self . schema_dn , mod )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
desc_sddl = " O:DAG:DAD:(A;;RP;;;DU) "
# Create example Schema class
2017-01-11 13:34:28 +01:00
class_dn = self . create_schema_class ( _ldb , desc_sddl )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
self . assertEqual ( " O:DAG:DA " , res )
def test_145 ( self ) :
user_name = " testuser8 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Change Schema partition descriptor
mod = " (A;;CC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( self . schema_dn , mod )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
desc_sddl = " O:DAG:DAD:(A;;RP;;;DU) "
# Create example Schema class
2017-01-11 13:34:28 +01:00
class_dn = self . create_schema_class ( _ldb , desc_sddl )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( class_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
self . assertEqual ( " O:DAG:DA " , res )
2018-07-30 18:19:49 +12:00
# Tests for CONFIGURATION
2009-09-15 17:34:42 -07:00
# Defalt descriptor tests ##################################################################
def test_160 ( self ) :
user_name = " testuser1 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
container_name = " test-container1 "
object_dn = " CN= %s ,CN=DisplaySpecifiers, %s " % ( container_name , self . configuration_dn )
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
self . create_configuration_container ( _ldb , object_dn , )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , object_dn )
2009-09-15 17:34:42 -07:00
def test_161 ( self ) :
user_name = " testuser2 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Domain Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
container_name = " test-container1 "
object_dn = " CN= %s ,CN=DisplaySpecifiers, %s " % ( container_name , self . configuration_dn )
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
self . create_configuration_container ( _ldb , object_dn , )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , object_dn )
2009-09-15 17:34:42 -07:00
def test_162 ( self ) :
user_name = " testuser3 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
object_dn = " CN=test-container1,CN=DisplaySpecifiers, " + self . configuration_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
self . create_configuration_container ( self . ldb_admin , object_dn , )
2018-07-30 18:17:02 +12:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( user_name ) )
2021-10-22 21:10:35 +03:00
mod = " (A;CI;WDCC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod )
2009-09-15 17:34:42 -07:00
# Create child object with user's credentials
object_dn = " CN=test-specifier1, " + object_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2021-10-25 13:10:56 +03:00
try :
self . create_configuration_specifier ( _ldb , object_dn )
except LdbError as e3 :
self . fail ( )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] % str ( user_sid ) , res )
#self.check_modify_inheritance(_ldb, object_dn)
2009-09-15 17:34:42 -07:00
def test_163 ( self ) :
user_name = " testuser4 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
object_dn = " CN=test-container1,CN=DisplaySpecifiers, " + self . configuration_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
self . create_configuration_container ( self . ldb_admin , object_dn , )
2018-07-30 18:17:02 +12:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( user_name ) )
2009-11-15 19:26:02 +02:00
mod = " (A;CI;WDCC;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod )
2009-09-15 17:34:42 -07:00
# Create child object with user's credentials
object_dn = " CN=test-specifier1, " + object_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
self . create_configuration_specifier ( _ldb , object_dn )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] % str ( user_sid ) , res )
#self.check_modify_inheritance(_ldb, object_dn)
2009-09-15 17:34:42 -07:00
def test_164 ( self ) :
user_name = " testuser5 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Domain Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
container_name = " test-container1 "
object_dn = " CN= %s ,CN=DisplaySpecifiers, %s " % ( container_name , self . configuration_dn )
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
self . create_configuration_container ( _ldb , object_dn , )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , object_dn )
2009-09-15 17:34:42 -07:00
def test_165 ( self ) :
user_name = " testuser6 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Domain Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
container_name = " test-container1 "
object_dn = " CN= %s ,CN=DisplaySpecifiers, %s " % ( container_name , self . configuration_dn )
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
self . create_configuration_container ( _ldb , object_dn , )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , object_dn )
2009-09-15 17:34:42 -07:00
def test_166 ( self ) :
user_name = " testuser7 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Domain Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
container_name = " test-container1 "
object_dn = " CN= %s ,CN=DisplaySpecifiers, %s " % ( container_name , self . configuration_dn )
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
self . create_configuration_container ( _ldb , object_dn , )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , object_dn )
2009-09-15 17:34:42 -07:00
def test_167 ( self ) :
user_name = " testuser8 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
container_name = " test-container1 "
object_dn = " CN= %s ,CN=DisplaySpecifiers, %s " % ( container_name , self . configuration_dn )
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
self . create_configuration_container ( _ldb , object_dn , )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] , res )
self . check_modify_inheritance ( _ldb , object_dn )
2009-09-15 17:34:42 -07:00
# Custom descriptor tests ##################################################################
def test_168 ( self ) :
user_name = " testuser1 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
container_name = " test-container1 "
object_dn = " CN= %s ,CN=DisplaySpecifiers, %s " % ( container_name , self . configuration_dn )
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
desc_sddl = " O:DAG:DAD:(A;;RP;;;DU) "
self . create_configuration_container ( _ldb , object_dn , desc_sddl )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
self . assertEqual ( " O:DAG:DA " , res )
def test_169 ( self ) :
user_name = " testuser2 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Domain Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
container_name = " test-container1 "
object_dn = " CN= %s ,CN=DisplaySpecifiers, %s " % ( container_name , self . configuration_dn )
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
desc_sddl = " O:DAG:DAD:(A;;RP;;;DU) "
self . create_configuration_container ( _ldb , object_dn , desc_sddl )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
self . assertEqual ( " O:DAG:DA " , res )
def test_170 ( self ) :
user_name = " testuser3 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
object_dn = " CN=test-container1,CN=DisplaySpecifiers, " + self . configuration_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
self . create_configuration_container ( self . ldb_admin , object_dn , )
2018-07-30 18:17:02 +12:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( user_name ) )
2021-10-22 21:10:35 +03:00
mod = " (A;CI;CCWD;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod )
2009-09-15 17:34:42 -07:00
# Create child object with user's credentials
object_dn = " CN=test-specifier1, " + object_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
# NB! Problematic owner part won't accept DA only <User Sid> !!!
desc_sddl = " O: %s G:DAD:(A;;RP;;;DU) " % str ( user_sid )
2021-10-25 13:10:56 +03:00
try :
self . create_configuration_specifier ( _ldb , object_dn , desc_sddl )
except LdbError as e3 :
self . fail ( )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] % str ( user_sid ) , res )
2009-09-15 17:34:42 -07:00
def test_171 ( self ) :
user_name = " testuser4 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
object_dn = " CN=test-container1,CN=DisplaySpecifiers, " + self . configuration_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
self . create_configuration_container ( self . ldb_admin , object_dn , )
2018-07-30 18:17:02 +12:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( user_name ) )
2021-10-22 21:10:35 +03:00
mod = " (A;CI;CCWD;;;AU) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod )
2009-09-15 17:34:42 -07:00
# Create child object with user's credentials
object_dn = " CN=test-specifier1, " + object_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
# NB! Problematic owner part won't accept DA only <User Sid> !!!
desc_sddl = " O: %s G:DAD:(A;;RP;;;DU) " % str ( user_sid )
2021-10-25 13:10:56 +03:00
try :
self . create_configuration_specifier ( _ldb , object_dn , desc_sddl )
except LdbError as e3 :
self . fail ( )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
2009-11-15 19:26:02 +02:00
self . assertEqual ( self . results [ self . DS_BEHAVIOR ] [ self . _testMethodName [ 5 : ] ] % str ( user_sid ) , res )
2009-09-15 17:34:42 -07:00
def test_172 ( self ) :
user_name = " testuser5 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Domain Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
container_name = " test-container1 "
object_dn = " CN= %s ,CN=DisplaySpecifiers, %s " % ( container_name , self . configuration_dn )
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
desc_sddl = " O:DAG:DAD:(A;;RP;;;DU) "
self . create_configuration_container ( _ldb , object_dn , desc_sddl )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
self . assertEqual ( " O:DAG:DA " , res )
def test_173 ( self ) :
user_name = " testuser6 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Domain Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
container_name = " test-container1 "
object_dn = " CN= %s ,CN=DisplaySpecifiers, %s " % ( container_name , self . configuration_dn )
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
desc_sddl = " O:DAG:DAD:(A;;RP;;;DU) "
self . create_configuration_container ( _ldb , object_dn , desc_sddl )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
self . assertEqual ( " O:DAG:DA " , res )
def test_174 ( self ) :
user_name = " testuser7 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Domain Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
container_name = " test-container1 "
object_dn = " CN= %s ,CN=DisplaySpecifiers, %s " % ( container_name , self . configuration_dn )
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
desc_sddl = " O:DAG:DAD:(A;;RP;;;DU) "
self . create_configuration_container ( _ldb , object_dn , desc_sddl )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
self . assertEqual ( " O:DAG:DA " , res )
def test_175 ( self ) :
user_name = " testuser8 "
self . check_user_belongs ( self . get_users_domain_dn ( user_name ) , [ " Enterprise Admins " , " Schema Admins " ] )
# Open Ldb connection with the tested user
_ldb = self . get_ldb_connection ( user_name , " samba123@ " )
# Create example Configuration container
container_name = " test-container1 "
object_dn = " CN= %s ,CN=DisplaySpecifiers, %s " % ( container_name , self . configuration_dn )
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2009-09-15 17:34:42 -07:00
# Create a custom security descriptor
desc_sddl = " O:DAG:DAD:(A;;RP;;;DU) "
self . create_configuration_container ( _ldb , object_dn , desc_sddl )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-09-15 17:34:42 -07:00
res = re . search ( " (O:.*G:.*?)D: " , desc_sddl ) . group ( 1 )
self . assertEqual ( " O:DAG:DA " , res )
########################################################################################
2011-01-11 12:23:57 +02:00
# Inheritance tests for DACL
2009-09-15 17:34:42 -07:00
2018-07-30 18:20:39 +12:00
2009-09-15 17:34:42 -07:00
class DaclDescriptorTests ( DescriptorTests ) :
2010-01-08 10:00:35 +11:00
def deleteAll ( self ) :
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , " CN=test_inherit_group,OU=test_inherit_ou, " + self . base_dn )
2011-01-11 12:23:57 +02:00
delete_force ( self . ldb_admin , " OU=test_inherit_ou5,OU=test_inherit_ou1,OU=test_inherit_ou_p, " + self . base_dn )
delete_force ( self . ldb_admin , " OU=test_inherit_ou6,OU=test_inherit_ou2,OU=test_inherit_ou_p, " + self . base_dn )
delete_force ( self . ldb_admin , " OU=test_inherit_ou1,OU=test_inherit_ou_p, " + self . base_dn )
delete_force ( self . ldb_admin , " OU=test_inherit_ou2,OU=test_inherit_ou_p, " + self . base_dn )
delete_force ( self . ldb_admin , " OU=test_inherit_ou3,OU=test_inherit_ou_p, " + self . base_dn )
delete_force ( self . ldb_admin , " OU=test_inherit_ou4,OU=test_inherit_ou_p, " + self . base_dn )
delete_force ( self . ldb_admin , " OU=test_inherit_ou_p, " + self . base_dn )
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , " OU=test_inherit_ou, " + self . base_dn )
2010-01-08 10:00:35 +11:00
2009-09-15 17:34:42 -07:00
def setUp ( self ) :
2010-06-19 18:58:18 +02:00
super ( DaclDescriptorTests , self ) . setUp ( )
2010-01-08 10:00:35 +11:00
self . deleteAll ( )
2009-09-15 17:34:42 -07:00
def create_clean_ou ( self , object_dn ) :
""" Base repeating setup for unittests to follow """
2018-07-30 18:22:01 +12:00
res = self . ldb_admin . search ( base = self . base_dn , scope = SCOPE_SUBTREE ,
2018-07-30 18:16:12 +12:00
expression = " distinguishedName= %s " % object_dn )
2009-09-15 17:34:42 -07:00
# Make sure top testing OU has been deleted before starting the test
2011-02-09 21:51:34 +03:00
self . assertEqual ( len ( res ) , 0 )
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( object_dn )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2009-11-15 19:26:02 +02:00
# Make sure there are inheritable ACEs initially
2009-09-15 17:34:42 -07:00
self . assertTrue ( " CI " in desc_sddl or " OI " in desc_sddl )
# Find and remove all inherit ACEs
2022-04-28 20:31:50 +12:00
res = re . findall ( r " \ (.*? \ ) " , desc_sddl )
2009-09-15 17:34:42 -07:00
res = [ x for x in res if ( " CI " in x ) or ( " OI " in x ) ]
for x in res :
desc_sddl = desc_sddl . replace ( x , " " )
# Add flag 'protected' in both DACL and SACL so no inherit ACEs
# can propagate from above
2009-11-10 15:58:52 +02:00
# remove SACL, we are not interested
2009-09-15 17:34:42 -07:00
desc_sddl = desc_sddl . replace ( " :AI " , " :AIP " )
2010-12-10 10:31:58 +02:00
self . sd_utils . modify_sd_on_dn ( object_dn , desc_sddl )
2009-09-15 17:34:42 -07:00
# Verify all inheritable ACEs are gone
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( object_dn )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " CI " , desc_sddl )
self . assertNotIn ( " OI " , desc_sddl )
2009-09-15 17:34:42 -07:00
def test_200 ( self ) :
""" OU with protected flag and child group. See if the group has inherit ACEs.
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
# Create group child object
2010-11-24 17:18:09 +02:00
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 )
2009-09-15 17:34:42 -07:00
# Make sure created group object contains NO inherit ACEs
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " ID " , desc_sddl )
2009-09-15 17:34:42 -07:00
def test_201 ( self ) :
""" OU with protected flag and no inherit ACEs, child group with custom descriptor.
Verify group has custom and default ACEs only .
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
# Create group child object using custom security descriptor
sddl = " O:AUG:AUD:AI(D;;WP;;;DU) "
2010-11-24 17:18:09 +02:00
tmp_desc = security . descriptor . from_sddl ( sddl , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
2009-09-15 17:34:42 -07:00
# Make sure created group descriptor has NO additional ACEs
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2009-11-15 19:26:02 +02:00
self . assertEqual ( desc_sddl , sddl )
sddl = " O:AUG:AUD:AI(D;;CC;;;LG) "
2021-10-22 21:33:03 +03:00
try :
self . sd_utils . modify_sd_on_dn ( group_dn , sddl )
except LdbError as e :
self . fail ( str ( e ) )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2009-09-15 17:34:42 -07:00
self . assertEqual ( desc_sddl , sddl )
def test_202 ( self ) :
""" OU with protected flag and add couple non-inheritable ACEs, child group.
See if the group has any of the added ACEs .
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
# Add some custom non-inheritable ACEs
mod = " (D;;WP;;;DU)(A;;RP;;;DU) "
2009-11-15 19:26:02 +02:00
moded = " (D;;CC;;;LG) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( ou_dn , mod )
2009-09-15 17:34:42 -07:00
# Verify all inheritable ACEs are gone
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
2009-09-15 17:34:42 -07:00
# Create group child object
2010-11-24 17:18:09 +02:00
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 )
2009-09-15 17:34:42 -07:00
# Make sure created group object contains NO inherit ACEs
2009-11-15 19:26:02 +02:00
# also make sure the added above non-inheritable ACEs are absent too
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " ID " , desc_sddl )
2022-04-28 20:31:50 +12:00
for x in re . findall ( r " \ (.*? \ ) " , mod ) :
2023-03-22 14:48:00 +01:00
self . assertNotIn ( x , desc_sddl )
2021-10-22 21:33:03 +03:00
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " ID " , desc_sddl )
2022-04-28 20:31:50 +12:00
for x in re . findall ( r " \ (.*? \ ) " , mod ) :
2023-03-22 14:48:00 +01:00
self . assertNotIn ( x , desc_sddl )
2009-09-15 17:34:42 -07:00
def test_203 ( self ) :
""" OU with protected flag and add ' CI ' ACE, child group.
See if the group has the added inherited ACE .
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
# Add some custom 'CI' ACE
mod = " (D;CI;WP;;;DU) "
2009-11-15 19:26:02 +02:00
moded = " (D;;CC;;;LG) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
2009-09-15 17:34:42 -07:00
# Create group child object
2010-11-24 17:18:09 +02:00
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
2009-09-15 17:34:42 -07:00
# Make sure created group object contains only the above inherited ACE
# that we've added manually
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2009-09-15 17:34:42 -07:00
mod = mod . replace ( " ;CI; " , " ;CIID; " )
2023-03-22 14:48:00 +01:00
self . assertIn ( mod , desc_sddl )
2021-10-22 21:33:03 +03:00
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertIn ( moded , desc_sddl )
self . assertIn ( mod , desc_sddl )
2009-09-15 17:34:42 -07:00
def test_204 ( self ) :
""" OU with protected flag and add ' OI ' ACE, child group.
See if the group has the added inherited ACE .
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
# Add some custom 'CI' ACE
mod = " (D;OI;WP;;;DU) "
2009-11-15 19:26:02 +02:00
moded = " (D;;CC;;;LG) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
2009-09-15 17:34:42 -07:00
# Create group child object
2010-11-24 17:18:09 +02:00
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
2009-09-15 17:34:42 -07:00
# Make sure created group object contains only the above inherited ACE
# that we've added manually
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2018-07-30 18:19:33 +12:00
mod = mod . replace ( " ;OI; " , " ;OIIOID; " ) # change it how it's gonna look like
2023-03-22 14:48:00 +01:00
self . assertIn ( mod , desc_sddl )
2021-10-22 21:33:03 +03:00
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertIn ( moded , desc_sddl )
self . assertIn ( mod , desc_sddl )
2009-09-15 17:34:42 -07:00
def test_205 ( self ) :
""" OU with protected flag and add ' OA ' for GUID & ' CI ' ACE, child group.
See if the group has the added inherited ACE .
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
# Add some custom 'OA' for 'name' attribute & 'CI' ACE
mod = " (OA;CI;WP;bf967a0e-0de6-11d0-a285-00aa003049e2;;DU) "
2009-11-15 19:26:02 +02:00
moded = " (D;;CC;;;LG) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
2009-09-15 17:34:42 -07:00
# Create group child object
2010-11-24 17:18:09 +02:00
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
2009-09-15 17:34:42 -07:00
# Make sure created group object contains only the above inherited ACE
# that we've added manually
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2018-07-30 18:19:33 +12:00
mod = mod . replace ( " ;CI; " , " ;CIID; " ) # change it how it's gonna look like
2023-03-22 14:48:00 +01:00
self . assertIn ( mod , desc_sddl )
2021-10-22 21:33:03 +03:00
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertIn ( moded , desc_sddl )
self . assertIn ( mod , desc_sddl )
2009-09-15 17:34:42 -07:00
def test_206 ( self ) :
""" OU with protected flag and add ' OA ' for GUID & ' OI ' ACE, child group.
See if the group has the added inherited ACE .
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
# Add some custom 'OA' for 'name' attribute & 'OI' ACE
mod = " (OA;OI;WP;bf967a0e-0de6-11d0-a285-00aa003049e2;;DU) "
2009-11-15 19:26:02 +02:00
moded = " (D;;CC;;;LG) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
2009-09-15 17:34:42 -07:00
# Create group child object
2010-11-24 17:18:09 +02:00
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
2009-09-15 17:34:42 -07:00
# Make sure created group object contains only the above inherited ACE
# that we've added manually
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2018-07-30 18:19:33 +12:00
mod = mod . replace ( " ;OI; " , " ;OIIOID; " ) # change it how it's gonna look like
2023-03-22 14:48:00 +01:00
self . assertIn ( mod , desc_sddl )
2021-10-22 21:33:03 +03:00
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertIn ( moded , desc_sddl )
self . assertIn ( mod , desc_sddl )
2009-09-15 17:34:42 -07:00
def test_207 ( self ) :
""" OU with protected flag and add ' OA ' for OU specific GUID & ' CI ' ACE, child group.
See if the group has the added inherited ACE .
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
# Add some custom 'OA' for 'st' attribute (OU specific) & 'CI' ACE
mod = " (OA;CI;WP;bf967a39-0de6-11d0-a285-00aa003049e2;;DU) "
2009-11-15 19:26:02 +02:00
moded = " (D;;CC;;;LG) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
2009-09-15 17:34:42 -07:00
# Create group child object
2010-11-24 17:18:09 +02:00
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
2009-09-15 17:34:42 -07:00
# Make sure created group object contains only the above inherited ACE
# that we've added manually
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2018-07-30 18:19:33 +12:00
mod = mod . replace ( " ;CI; " , " ;CIID; " ) # change it how it's gonna look like
2023-03-22 14:48:00 +01:00
self . assertIn ( mod , desc_sddl )
2021-10-22 21:33:03 +03:00
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertIn ( moded , desc_sddl )
self . assertIn ( mod , desc_sddl )
2009-09-15 17:34:42 -07:00
def test_208 ( self ) :
""" OU with protected flag and add ' OA ' for OU specific GUID & ' OI ' ACE, child group.
See if the group has the added inherited ACE .
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
# Add some custom 'OA' for 'st' attribute (OU specific) & 'OI' ACE
mod = " (OA;OI;WP;bf967a39-0de6-11d0-a285-00aa003049e2;;DU) "
2009-11-15 19:26:02 +02:00
moded = " (D;;CC;;;LG) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
2009-09-15 17:34:42 -07:00
# Create group child object
2010-11-24 17:18:09 +02:00
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
2009-09-15 17:34:42 -07:00
# Make sure created group object contains only the above inherited ACE
# that we've added manually
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2018-07-30 18:19:33 +12:00
mod = mod . replace ( " ;OI; " , " ;OIIOID; " ) # change it how it's gonna look like
2023-03-22 14:48:00 +01:00
self . assertIn ( mod , desc_sddl )
2021-10-22 21:33:03 +03:00
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D:(OA;OI;WP;bf967a39-0de6-11d0-a285-00aa003049e2;;DU) " + moded )
except LdbError as e :
self . fail ( str ( e ) )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertIn ( moded , desc_sddl )
self . assertIn ( mod , desc_sddl )
2009-09-15 17:34:42 -07:00
def test_209 ( self ) :
""" OU with protected flag and add ' CI ' ACE with ' CO ' SID, child group.
See if the group has the added inherited ACE .
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
# Add some custom 'CI' ACE
mod = " (D;CI;WP;;;CO) "
2009-11-15 19:26:02 +02:00
moded = " (D;;CC;;;LG) "
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
2009-09-15 17:34:42 -07:00
# Create group child object
2010-11-24 17:18:09 +02:00
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
2009-09-15 17:34:42 -07:00
# Make sure created group object contains only the above inherited ACE(s)
# that we've added manually
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertIn ( " (D;ID;WP;;;AU) " , desc_sddl )
self . assertIn ( " (D;CIIOID;WP;;;CO) " , desc_sddl )
2021-10-22 21:33:03 +03:00
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertIn ( moded , desc_sddl )
self . assertIn ( " (D;ID;WP;;;DA) " , desc_sddl )
self . assertIn ( " (D;CIIOID;WP;;;CO) " , desc_sddl )
2009-09-15 17:34:42 -07:00
2010-04-15 18:21:55 +03:00
def test_210 ( self ) :
""" OU with protected flag, provide ACEs with ID flag raised. Should be ignored.
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
self . create_clean_ou ( ou_dn )
# Add some custom ACE
mod = " D:(D;CIIO;WP;;;CO)(A;ID;WP;;;AU) "
2010-11-24 17:18:09 +02:00
tmp_desc = security . descriptor . from_sddl ( mod , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
2010-04-15 18:21:55 +03:00
# Make sure created group object does not contain the ID ace
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " (A;ID;WP;;;AU) " , desc_sddl )
2010-04-15 18:21:55 +03:00
2010-04-17 18:16:25 +03:00
def test_211 ( self ) :
""" Provide ACE with CO SID, should be expanded and replaced
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
# Add some custom 'CI' ACE
mod = " D:(D;CI;WP;;;CO) "
2010-11-24 17:18:09 +02:00
tmp_desc = security . descriptor . from_sddl ( mod , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertIn ( " (D;;WP;;;DA) " , desc_sddl )
self . assertIn ( " (D;CIIO;WP;;;CO) " , desc_sddl )
2010-04-17 18:16:25 +03:00
2010-04-20 00:23:42 +03:00
def test_212 ( self ) :
""" Provide ACE with IO flag, should be ignored
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
# Add some custom 'CI' ACE
mod = " D:(D;CIIO;WP;;;CO) "
2010-11-24 17:18:09 +02:00
tmp_desc = security . descriptor . from_sddl ( mod , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
2010-04-20 00:23:42 +03:00
# Make sure created group object contains only the above inherited ACE(s)
# that we've added manually
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertIn ( " (D;CIIO;WP;;;CO) " , desc_sddl )
self . assertNotIn ( " (D;;WP;;;DA) " , desc_sddl )
self . assertNotIn ( " (D;CIIO;WP;;;CO)(D;CIIO;WP;;;CO) " , desc_sddl )
2010-04-20 00:23:42 +03:00
def test_213 ( self ) :
""" Provide ACE with IO flag, should be ignored
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " D:(D;IO;WP;;;DA) "
2010-11-24 17:18:09 +02:00
tmp_desc = security . descriptor . from_sddl ( mod , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
2010-04-20 00:23:42 +03:00
# Make sure created group object contains only the above inherited ACE(s)
# that we've added manually
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " (D;IO;WP;;;DA) " , desc_sddl )
2010-04-20 00:23:42 +03:00
2011-01-11 12:23:57 +02:00
def test_214 ( self ) :
""" Test behavior of ACEs containing generic rights
"""
ou_dn = " OU=test_inherit_ou_p, " + self . base_dn
ou_dn1 = " OU=test_inherit_ou1, " + ou_dn
ou_dn2 = " OU=test_inherit_ou2, " + ou_dn
ou_dn3 = " OU=test_inherit_ou3, " + ou_dn
ou_dn4 = " OU=test_inherit_ou4, " + ou_dn
ou_dn5 = " OU=test_inherit_ou5, " + ou_dn1
ou_dn6 = " OU=test_inherit_ou6, " + ou_dn2
# Create inheritable-free OU
2023-03-22 14:48:00 +01:00
mod = " D:P(A;CI;WPRPLCCCDCWDRCSD;;;DA) "
2011-01-11 12:23:57 +02:00
tmp_desc = security . descriptor . from_sddl ( mod , self . domain_sid )
self . ldb_admin . create_ou ( ou_dn , sd = tmp_desc )
mod = " D:(A;CI;GA;;;DU) "
tmp_desc = security . descriptor . from_sddl ( mod , self . domain_sid )
self . ldb_admin . create_ou ( ou_dn1 , sd = tmp_desc )
mod = " D:(A;CIIO;GA;;;DU) "
tmp_desc = security . descriptor . from_sddl ( mod , self . domain_sid )
self . ldb_admin . create_ou ( ou_dn2 , sd = tmp_desc )
mod = " D:(A;;GA;;;DU) "
tmp_desc = security . descriptor . from_sddl ( mod , self . domain_sid )
self . ldb_admin . create_ou ( ou_dn3 , sd = tmp_desc )
mod = " D:(A;IO;GA;;;DU) "
tmp_desc = security . descriptor . from_sddl ( mod , self . domain_sid )
self . ldb_admin . create_ou ( ou_dn4 , sd = tmp_desc )
self . ldb_admin . create_ou ( ou_dn5 )
self . ldb_admin . create_ou ( ou_dn6 )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn1 )
2022-03-15 14:01:13 +13:00
self . assertIn ( " (A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;DU) " , desc_sddl )
2023-03-22 14:48:00 +01:00
self . assertIn ( " (A;CIIO;GA;;;DU) " , desc_sddl )
2011-01-11 12:23:57 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn2 )
2022-03-15 14:01:13 +13:00
self . assertNotIn ( " (A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;DU) " , desc_sddl )
2023-03-22 14:48:00 +01:00
self . assertIn ( " (A;CIIO;GA;;;DU) " , desc_sddl )
2011-01-11 12:23:57 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn3 )
2022-03-15 14:01:13 +13:00
self . assertIn ( " (A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;DU) " , desc_sddl )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " (A;CIIO;GA;;;DU) " , desc_sddl )
2011-01-11 12:23:57 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn4 )
2022-03-15 14:01:13 +13:00
self . assertNotIn ( " (A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;DU) " , desc_sddl )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " (A;CIIO;GA;;;DU) " , desc_sddl )
2011-01-11 12:23:57 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn5 )
2022-03-15 14:01:13 +13:00
self . assertIn ( " (A;ID;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;DU) " , desc_sddl )
2023-03-22 14:48:00 +01:00
self . assertIn ( " (A;CIIOID;GA;;;DU) " , desc_sddl )
2011-01-11 12:23:57 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn6 )
2022-03-15 14:01:13 +13:00
self . assertIn ( " (A;ID;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;DU) " , desc_sddl )
2023-03-22 14:48:00 +01:00
self . assertIn ( " (A;CIIOID;GA;;;DU) " , desc_sddl )
2011-01-11 12:23:57 +02:00
2011-01-18 15:58:18 +02:00
def test_215 ( self ) :
""" Make sure IO flag is removed in child objects
"""
ou_dn = " OU=test_inherit_ou_p, " + self . base_dn
ou_dn1 = " OU=test_inherit_ou1, " + ou_dn
ou_dn5 = " OU=test_inherit_ou5, " + ou_dn1
# Create inheritable-free OU
2023-03-22 14:48:00 +01:00
mod = " D:P(A;CI;WPRPLCCCDCWDRCSD;;;DA) "
2011-01-18 15:58:18 +02:00
tmp_desc = security . descriptor . from_sddl ( mod , self . domain_sid )
self . ldb_admin . create_ou ( ou_dn , sd = tmp_desc )
mod = " D:(A;CIIO;WP;;;DU) "
tmp_desc = security . descriptor . from_sddl ( mod , self . domain_sid )
self . ldb_admin . create_ou ( ou_dn1 , sd = tmp_desc )
self . ldb_admin . create_ou ( ou_dn5 )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn5 )
2023-03-22 14:48:00 +01:00
self . assertIn ( " (A;CIID;WP;;;DU) " , desc_sddl )
self . assertNotIn ( " (A;CIIOID;WP;;;DU) " , desc_sddl )
2011-01-18 15:58:18 +02:00
2011-02-10 12:43:35 +02:00
def test_216 ( self ) :
""" Make sure ID ACES provided by user are ignored
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
2023-03-22 14:48:00 +01:00
mod = " D:P(A;;WPRPLCCCDCWDRCSD;;;DA) "
2011-02-10 12:43:35 +02:00
tmp_desc = security . descriptor . from_sddl ( mod , self . domain_sid )
self . ldb_admin . create_ou ( ou_dn , sd = tmp_desc )
# Add some custom ACE
mod = " D:(D;ID;WP;;;AU) "
tmp_desc = security . descriptor . from_sddl ( mod , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
# Make sure created group object does not contain the ID ace
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " (A;ID;WP;;;AU) " , desc_sddl )
self . assertNotIn ( " (A;;WP;;;AU) " , desc_sddl )
2011-02-10 12:43:35 +02:00
def test_217 ( self ) :
""" Make sure ID ACES provided by user are not ignored if P flag is set
"""
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
2023-03-22 14:48:00 +01:00
mod = " D:P(A;;WPRPLCCCDCWDRCSD;;;DA) "
2011-02-10 12:43:35 +02:00
tmp_desc = security . descriptor . from_sddl ( mod , self . domain_sid )
self . ldb_admin . create_ou ( ou_dn , sd = tmp_desc )
# Add some custom ACE
mod = " D:P(A;ID;WP;;;AU) "
tmp_desc = security . descriptor . from_sddl ( mod , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
# Make sure created group object does not contain the ID ace
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " (A;ID;WP;;;AU) " , desc_sddl )
self . assertIn ( " (A;;WP;;;AU) " , desc_sddl )
2011-02-10 12:43:35 +02:00
2023-03-22 14:48:00 +01:00
def test_ci_and_io_on_attribute ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CIOI;WP;bf967a0e-0de6-11d0-a285-00aa003049e2;;DU) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
mod = mod . replace ( " ;CIOI; " , " ;OICIID; " ) # change it how it's gonna look like
self . assertIn ( mod , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertIn ( mod , desc_sddl )
def test_ci_and_np_on_attribute ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CINP;WP;bf967a0e-0de6-11d0-a285-00aa003049e2;;DU) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
mod = mod . replace ( " ;CINP; " , " ;ID; " ) # change it how it's gonna look like
self . assertIn ( mod , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertIn ( mod , desc_sddl )
def test_oi_and_np_on_attribute ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;OINP;WP;bf967a0e-0de6-11d0-a285-00aa003049e2;;DU) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
mod = mod . replace ( " ;OINP; " , " ;ID; " ) # change it how it's gonna look like
self . assertNotIn ( mod , desc_sddl )
self . assertNotIn ( " bf967a0e-0de6-11d0-a285-00aa003049e2 " , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertNotIn ( mod , desc_sddl )
self . assertNotIn ( " bf967a0e-0de6-11d0-a285-00aa003049e2 " , desc_sddl )
def test_ci_ga_no_attr_objectclass_same ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CI;GA;;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
modob = " (A;ID;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;DA) "
modid = " (OA;CIIOID;GA;;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( modob , desc_sddl )
self . assertIn ( modid , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertIn ( modob , desc_sddl )
self . assertIn ( modid , desc_sddl )
def test_ci_ga_no_attr_objectclass_different ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CI;GA;;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee;DA) "
modno = " (A;ID;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;DA) "
modid = " (OA;CIIOID;GA;;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertNotIn ( modno , desc_sddl )
self . assertIn ( modid , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertNotIn ( modno , desc_sddl )
self . assertIn ( modid , desc_sddl )
def test_ci_ga_name_attr_objectclass_same ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CI;GA;bf967a0e-0de6-11d0-a285-00aa003049e2;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
modob = " (OA;ID;CCDCLCSWRPWPDTLOCRSDRCWDWO;bf967a0e-0de6-11d0-a285-00aa003049e2;;DA) "
modid = " (OA;CIIOID;GA;bf967a0e-0de6-11d0-a285-00aa003049e2;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( modob , desc_sddl )
self . assertIn ( modid , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertIn ( modob , desc_sddl )
self . assertIn ( modid , desc_sddl )
def test_ci_ga_name_attr_objectclass_different ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CI;GA;bf967a0e-0de6-11d0-a285-00aa003049e2;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee;DA) "
modno = " (OA;ID;CCDCLCSWRPWPDTLOCRSDRCWDWO;bf967a0e-0de6-11d0-a285-00aa003049e2;;DA) "
modid = " (OA;CIIOID;GA;bf967a0e-0de6-11d0-a285-00aa003049e2;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertNotIn ( modno , desc_sddl )
self . assertIn ( modid , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertNotIn ( modno , desc_sddl )
self . assertIn ( modid , desc_sddl )
def test_ci_lc_no_attr_objectclass_same ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CI;LC;;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
modno = " (A;ID;LC;;;DA) "
modid = " (OA;CIID;LC;;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertNotIn ( modno , desc_sddl )
self . assertIn ( modid , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertNotIn ( modno , desc_sddl )
self . assertIn ( modid , desc_sddl )
def test_ci_lc_no_attr_objectclass_different ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CI;LC;;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee;DA) "
modno = " (A;ID;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;DA) "
modid = " (OA;CIIOID;LC;;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertNotIn ( modno , desc_sddl )
self . assertIn ( modid , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertNotIn ( modno , desc_sddl )
self . assertIn ( modid , desc_sddl )
def test_ci_lc_name_attr_objectclass_same ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CI;LC;bf967a0e-0de6-11d0-a285-00aa003049e2;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
modob = " (OA;ID;LC;bf967a0e-0de6-11d0-a285-00aa003049e2;;DA) "
modid = " (OA;CIID;LC;bf967a0e-0de6-11d0-a285-00aa003049e2;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertNotIn ( modob , desc_sddl )
self . assertIn ( modid , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertNotIn ( modob , desc_sddl )
self . assertIn ( modid , desc_sddl )
def test_ci_lc_name_attr_objectclass_different ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CI;LC;bf967a0e-0de6-11d0-a285-00aa003049e2;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee;DA) "
modno = " (OA;ID;LC;bf967a0e-0de6-11d0-a285-00aa003049e2;;DA) "
modid = " (OA;CIIOID;LC;bf967a0e-0de6-11d0-a285-00aa003049e2;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertNotIn ( modno , desc_sddl )
self . assertIn ( modid , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertNotIn ( modno , desc_sddl )
self . assertIn ( modid , desc_sddl )
def test_ci_np_ga_no_attr_objectclass_same ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
# Add some custom 'OA' for 'name' attribute & 'CI'+'OI' ACE
mod = " (OA;CINP;GA;;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
modob = " (A;ID;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;DA) "
modid = " (OA;CIIOID;GA;;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( modob , desc_sddl )
self . assertNotIn ( modid , desc_sddl )
self . assertNotIn ( " bf967a9c-0de6-11d0-a285-00aa003049e2 " , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertNotIn ( modid , desc_sddl )
self . assertNotIn ( " bf967a9c-0de6-11d0-a285-00aa003049e2 " , desc_sddl )
def test_ci_np_ga_no_attr_objectclass_different ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CINP;GA;;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee;DA) "
modno = " (A;ID;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;DA) "
modid = " (OA;CIIOID;GA;;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertNotIn ( modno , desc_sddl )
self . assertNotIn ( modid , desc_sddl )
self . assertNotIn ( " aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee " , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertNotIn ( modno , desc_sddl )
self . assertNotIn ( modid , desc_sddl )
self . assertNotIn ( " aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee " , desc_sddl )
def test_ci_np_ga_name_attr_objectclass_same ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CINP;GA;bf967a0e-0de6-11d0-a285-00aa003049e2;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
modob = " (OA;ID;CCDCLCSWRPWPDTLOCRSDRCWDWO;bf967a0e-0de6-11d0-a285-00aa003049e2;;DA) "
modid = " (OA;CIIOID;GA;bf967a0e-0de6-11d0-a285-00aa003049e2;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( modob , desc_sddl )
self . assertNotIn ( modid , desc_sddl )
self . assertNotIn ( " bf967a9c-0de6-11d0-a285-00aa003049e2 " , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertIn ( modob , desc_sddl )
self . assertNotIn ( modid , desc_sddl )
self . assertNotIn ( " bf967a9c-0de6-11d0-a285-00aa003049e2 " , desc_sddl )
def test_ci_np_ga_name_attr_objectclass_different ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CINP;GA;bf967a0e-0de6-11d0-a285-00aa003049e2;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertNotIn ( " bf967a0e-0de6-11d0-a285-00aa003049e2 " , desc_sddl )
self . assertNotIn ( " aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee " , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertNotIn ( " bf967a0e-0de6-11d0-a285-00aa003049e2 " , desc_sddl )
self . assertNotIn ( " aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee " , desc_sddl )
def test_ci_np_lc_no_attr_objectclass_same ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CINP;LC;;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
modno = " (A;ID;LC;;;DA) "
modid = " (OA;CIID;LC;;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( modno , desc_sddl )
self . assertNotIn ( modid , desc_sddl )
self . assertNotIn ( " bf967a9c-0de6-11d0-a285-00aa003049e2 " , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertIn ( modno , desc_sddl )
self . assertNotIn ( modid , desc_sddl )
self . assertNotIn ( " bf967a9c-0de6-11d0-a285-00aa003049e2 " , desc_sddl )
def test_ci_np_lc_no_attr_objectclass_different ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CINP;LC;;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee;DA) "
modno = " (A;ID;LC;;;DA) "
modid = " (OA;CIIOID;LC;;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertNotIn ( modno , desc_sddl )
self . assertNotIn ( modid , desc_sddl )
self . assertNotIn ( " aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee " , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertNotIn ( modno , desc_sddl )
self . assertNotIn ( modid , desc_sddl )
self . assertNotIn ( " aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee " , desc_sddl )
def test_ci_np_lc_name_attr_objectclass_same ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CINP;LC;bf967a0e-0de6-11d0-a285-00aa003049e2;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
modob = " (OA;ID;LC;bf967a0e-0de6-11d0-a285-00aa003049e2;;DA) "
modid = " (OA;CIID;LC;bf967a0e-0de6-11d0-a285-00aa003049e2;bf967a9c-0de6-11d0-a285-00aa003049e2;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( modob , desc_sddl )
self . assertNotIn ( modid , desc_sddl )
self . assertNotIn ( " bf967a9c-0de6-11d0-a285-00aa003049e2 " , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertIn ( modob , desc_sddl )
self . assertNotIn ( modid , desc_sddl )
self . assertNotIn ( " bf967a9c-0de6-11d0-a285-00aa003049e2 " , desc_sddl )
def test_ci_np_lc_name_attr_objectclass_different ( self ) :
ou_dn = " OU=test_inherit_ou, " + self . base_dn
group_dn = " CN=test_inherit_group, " + ou_dn
# Create inheritable-free OU
self . create_clean_ou ( ou_dn )
mod = " (OA;CINP;LC;bf967a0e-0de6-11d0-a285-00aa003049e2;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee;DA) "
modno = " (OA;ID;LC;bf967a0e-0de6-11d0-a285-00aa003049e2;;DA) "
modid = " (OA;CIIOID;LC;bf967a0e-0de6-11d0-a285-00aa003049e2;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee;DA) "
moded = " (D;;CC;;;LG) "
self . sd_utils . dacl_add_ace ( ou_dn , mod )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
# Create group child object
tmp_desc = security . descriptor . from_sddl ( " O:AUG:AUD:AI(A;;CC;;;AU) " , self . domain_sid )
self . ldb_admin . newgroup ( " test_inherit_group " , groupou = " OU=test_inherit_ou " , grouptype = 4 , sd = tmp_desc )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertNotIn ( modno , desc_sddl )
self . assertNotIn ( modid , desc_sddl )
self . assertNotIn ( " bf967a0e-0de6-11d0-a285-00aa003049e2 " , desc_sddl )
self . assertNotIn ( " aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee " , desc_sddl )
try :
self . sd_utils . modify_sd_on_dn ( group_dn , " D: " + moded )
except LdbError as e :
self . fail ( str ( e ) )
desc_sddl = self . sd_utils . get_sd_as_sddl ( group_dn )
self . assertIn ( moded , desc_sddl )
self . assertNotIn ( modno , desc_sddl )
self . assertNotIn ( modid , desc_sddl )
self . assertNotIn ( " bf967a0e-0de6-11d0-a285-00aa003049e2 " , desc_sddl )
self . assertNotIn ( " aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee " , desc_sddl )
2009-09-15 17:34:42 -07:00
########################################################################################
2009-11-20 13:25:13 +02:00
class SdFlagsDescriptorTests ( DescriptorTests ) :
2010-01-08 10:00:35 +11:00
def deleteAll ( self ) :
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , " OU=test_sdflags_ou, " + self . base_dn )
2010-01-08 10:00:35 +11:00
2009-11-20 13:25:13 +02:00
def setUp ( self ) :
2010-06-19 18:58:18 +02:00
super ( SdFlagsDescriptorTests , self ) . setUp ( )
2009-11-20 13:25:13 +02:00
self . test_descr = " O:AUG:AUD:(D;;CC;;;LG)S:(OU;;WP;;;AU) "
2010-01-08 10:00:35 +11:00
self . deleteAll ( )
2009-11-20 13:25:13 +02:00
def test_301 ( self ) :
""" Modify a descriptor with OWNER_SECURITY_INFORMATION set.
See that only the owner has been changed .
"""
ou_dn = " OU=test_sdflags_ou, " + self . base_dn
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( ou_dn )
2010-12-10 10:31:58 +02:00
self . sd_utils . modify_sd_on_dn ( ou_dn , self . test_descr , controls = [ " sd_flags:1: %d " % ( SECINFO_OWNER ) ] )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
2009-11-20 13:25:13 +02:00
# make sure we have modified the owner
2023-03-22 14:48:00 +01:00
self . assertIn ( " O:AU " , desc_sddl )
2009-11-20 13:25:13 +02:00
# make sure nothing else has been modified
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " G:AU " , desc_sddl )
self . assertNotIn ( " D:(D;;CC;;;LG) " , desc_sddl )
self . assertNotIn ( " (OU;;WP;;;AU) " , desc_sddl )
2009-11-20 13:25:13 +02:00
def test_302 ( self ) :
""" Modify a descriptor with GROUP_SECURITY_INFORMATION set.
See that only the owner has been changed .
"""
ou_dn = " OU=test_sdflags_ou, " + self . base_dn
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( ou_dn )
2010-12-10 10:31:58 +02:00
self . sd_utils . modify_sd_on_dn ( ou_dn , self . test_descr , controls = [ " sd_flags:1: %d " % ( SECINFO_GROUP ) ] )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
2009-11-20 13:25:13 +02:00
# make sure we have modified the group
2023-03-22 14:48:00 +01:00
self . assertIn ( " G:AU " , desc_sddl )
2009-11-20 13:25:13 +02:00
# make sure nothing else has been modified
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " O:AU " , desc_sddl )
self . assertNotIn ( " D:(D;;CC;;;LG) " , desc_sddl )
self . assertNotIn ( " (OU;;WP;;;AU) " , desc_sddl )
2009-11-20 13:25:13 +02:00
def test_303 ( self ) :
""" Modify a descriptor with SACL_SECURITY_INFORMATION set.
See that only the owner has been changed .
"""
ou_dn = " OU=test_sdflags_ou, " + self . base_dn
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( ou_dn )
2010-12-10 10:31:58 +02:00
self . sd_utils . modify_sd_on_dn ( ou_dn , self . test_descr , controls = [ " sd_flags:1: %d " % ( SECINFO_DACL ) ] )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
2009-11-20 13:25:13 +02:00
# make sure we have modified the DACL
2023-03-22 14:48:00 +01:00
self . assertIn ( " (D;;CC;;;LG) " , desc_sddl )
2009-11-20 13:25:13 +02:00
# make sure nothing else has been modified
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " O:AU " , desc_sddl )
self . assertNotIn ( " G:AU " , desc_sddl )
self . assertNotIn ( " (OU;;WP;;;AU) " , desc_sddl )
2009-11-20 13:25:13 +02:00
def test_304 ( self ) :
""" Modify a descriptor with SACL_SECURITY_INFORMATION set.
See that only the owner has been changed .
"""
ou_dn = " OU=test_sdflags_ou, " + self . base_dn
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( ou_dn )
2010-12-10 10:31:58 +02:00
self . sd_utils . modify_sd_on_dn ( ou_dn , self . test_descr , controls = [ " sd_flags:1: %d " % ( SECINFO_SACL ) ] )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
2009-11-20 13:25:13 +02:00
# make sure we have modified the DACL
2023-03-22 14:48:00 +01:00
self . assertIn ( " (OU;;WP;;;AU) " , desc_sddl )
2009-11-20 13:25:13 +02:00
# make sure nothing else has been modified
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " O:AU " , desc_sddl )
self . assertNotIn ( " G:AU " , desc_sddl )
self . assertNotIn ( " (D;;CC;;;LG) " , desc_sddl )
2009-11-20 13:25:13 +02:00
def test_305 ( self ) :
""" Modify a descriptor with 0x0 set.
Contrary to logic this is interpreted as no control ,
which is the same as 0xF
"""
ou_dn = " OU=test_sdflags_ou, " + self . base_dn
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( ou_dn )
2010-12-10 10:31:58 +02:00
self . sd_utils . modify_sd_on_dn ( ou_dn , self . test_descr , controls = [ " sd_flags:1:0 " ] )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
2009-11-20 13:25:13 +02:00
# make sure we have modified the DACL
2023-03-22 14:48:00 +01:00
self . assertIn ( " (OU;;WP;;;AU) " , desc_sddl )
2009-11-20 13:25:13 +02:00
# make sure nothing else has been modified
2023-03-22 14:48:00 +01:00
self . assertIn ( " O:AU " , desc_sddl )
self . assertIn ( " G:AU " , desc_sddl )
self . assertIn ( " (D;;CC;;;LG) " , desc_sddl )
2009-11-20 13:25:13 +02:00
def test_306 ( self ) :
""" Modify a descriptor with 0xF set.
"""
ou_dn = " OU=test_sdflags_ou, " + self . base_dn
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( ou_dn )
2010-12-10 10:31:58 +02:00
self . sd_utils . modify_sd_on_dn ( ou_dn , self . test_descr , controls = [ " sd_flags:1:15 " ] )
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn )
2009-11-20 13:25:13 +02:00
# make sure we have modified the DACL
2023-03-22 14:48:00 +01:00
self . assertIn ( " (OU;;WP;;;AU) " , desc_sddl )
2009-11-20 13:25:13 +02:00
# make sure nothing else has been modified
2023-03-22 14:48:00 +01:00
self . assertIn ( " O:AU " , desc_sddl )
self . assertIn ( " G:AU " , desc_sddl )
self . assertIn ( " (D;;CC;;;LG) " , desc_sddl )
2009-11-20 13:25:13 +02:00
2009-11-21 18:40:51 +02:00
def test_307 ( self ) :
""" Read a descriptor with OWNER_SECURITY_INFORMATION
Only the owner part should be returned .
"""
ou_dn = " OU=test_sdflags_ou, " + self . base_dn
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( ou_dn )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn , controls = [ " sd_flags:1: %d " % ( SECINFO_OWNER ) ] )
2009-11-21 18:40:51 +02:00
# make sure we have read the owner
2023-03-22 14:48:00 +01:00
self . assertIn ( " O: " , desc_sddl )
2009-11-21 18:40:51 +02:00
# make sure we have read nothing else
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " G: " , desc_sddl )
self . assertNotIn ( " D: " , desc_sddl )
self . assertNotIn ( " S: " , desc_sddl )
2009-11-21 18:40:51 +02:00
def test_308 ( self ) :
""" Read a descriptor with GROUP_SECURITY_INFORMATION
Only the group part should be returned .
"""
ou_dn = " OU=test_sdflags_ou, " + self . base_dn
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( ou_dn )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn , controls = [ " sd_flags:1: %d " % ( SECINFO_GROUP ) ] )
2009-11-21 18:40:51 +02:00
# make sure we have read the owner
2023-03-22 14:48:00 +01:00
self . assertIn ( " G: " , desc_sddl )
2009-11-21 18:40:51 +02:00
# make sure we have read nothing else
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " O: " , desc_sddl )
self . assertNotIn ( " D: " , desc_sddl )
self . assertNotIn ( " S: " , desc_sddl )
2009-11-21 18:40:51 +02:00
def test_309 ( self ) :
""" Read a descriptor with SACL_SECURITY_INFORMATION
Only the sacl part should be returned .
"""
ou_dn = " OU=test_sdflags_ou, " + self . base_dn
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( ou_dn )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn , controls = [ " sd_flags:1: %d " % ( SECINFO_SACL ) ] )
2009-11-21 18:40:51 +02:00
# make sure we have read the owner
2023-03-22 14:48:00 +01:00
self . assertIn ( " S: " , desc_sddl )
2009-11-21 18:40:51 +02:00
# make sure we have read nothing else
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " O: " , desc_sddl )
self . assertNotIn ( " D: " , desc_sddl )
self . assertNotIn ( " G: " , desc_sddl )
2009-11-21 18:40:51 +02:00
def test_310 ( self ) :
""" Read a descriptor with DACL_SECURITY_INFORMATION
Only the dacl part should be returned .
"""
ou_dn = " OU=test_sdflags_ou, " + self . base_dn
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( ou_dn )
2010-12-10 10:31:58 +02:00
desc_sddl = self . sd_utils . get_sd_as_sddl ( ou_dn , controls = [ " sd_flags:1: %d " % ( SECINFO_DACL ) ] )
2009-11-21 18:40:51 +02:00
# make sure we have read the owner
2023-03-22 14:48:00 +01:00
self . assertIn ( " D: " , desc_sddl )
2009-11-21 18:40:51 +02:00
# make sure we have read nothing else
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " O: " , desc_sddl )
self . assertNotIn ( " S: " , desc_sddl )
self . assertNotIn ( " G: " , desc_sddl )
2009-11-21 18:40:51 +02:00
2012-12-06 14:04:47 +01:00
def test_311 ( self ) :
sd_flags = ( SECINFO_OWNER |
SECINFO_GROUP |
SECINFO_DACL |
SECINFO_SACL )
res = self . ldb_admin . search ( self . base_dn , SCOPE_BASE , None ,
2018-07-30 18:16:12 +12:00
[ ] , controls = None )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " nTSecurityDescriptor " , res [ 0 ] )
2012-12-06 14:04:47 +01:00
res = self . ldb_admin . search ( self . base_dn , SCOPE_BASE , None ,
2018-07-30 18:16:12 +12:00
[ " name " ] , controls = None )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " nTSecurityDescriptor " , res [ 0 ] )
2012-12-06 14:04:47 +01:00
res = self . ldb_admin . search ( self . base_dn , SCOPE_BASE , None ,
2018-07-30 18:16:12 +12:00
[ " name " ] , controls = [ " sd_flags:1: %d " % ( sd_flags ) ] )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " nTSecurityDescriptor " , res [ 0 ] )
2012-12-06 14:04:47 +01:00
res = self . ldb_admin . search ( self . base_dn , SCOPE_BASE , None ,
2019-03-28 15:54:06 +13:00
controls = [ " sd_flags:1: %d " % ( sd_flags ) ] )
2023-03-22 14:48:00 +01:00
self . assertIn ( " nTSecurityDescriptor " , res [ 0 ] )
2012-12-06 14:04:47 +01:00
tmp = res [ 0 ] [ " nTSecurityDescriptor " ] [ 0 ]
sd = ndr_unpack ( security . descriptor , tmp )
sddl = sd . as_sddl ( self . sd_utils . domain_sid )
2023-03-22 14:48:00 +01:00
self . assertIn ( " O: " , sddl )
self . assertIn ( " G: " , sddl )
self . assertIn ( " D: " , sddl )
self . assertIn ( " S: " , sddl )
2012-12-06 14:04:47 +01:00
res = self . ldb_admin . search ( self . base_dn , SCOPE_BASE , None ,
2018-07-30 18:16:12 +12:00
[ " * " ] , controls = [ " sd_flags:1: %d " % ( sd_flags ) ] )
2023-03-22 14:48:00 +01:00
self . assertIn ( " nTSecurityDescriptor " , res [ 0 ] )
2012-12-06 14:04:47 +01:00
tmp = res [ 0 ] [ " nTSecurityDescriptor " ] [ 0 ]
sd = ndr_unpack ( security . descriptor , tmp )
sddl = sd . as_sddl ( self . sd_utils . domain_sid )
2023-03-22 14:48:00 +01:00
self . assertIn ( " O: " , sddl )
self . assertIn ( " G: " , sddl )
self . assertIn ( " D: " , sddl )
self . assertIn ( " S: " , sddl )
2012-12-06 14:04:47 +01:00
res = self . ldb_admin . search ( self . base_dn , SCOPE_BASE , None ,
2018-07-30 18:16:12 +12:00
[ " nTSecurityDescriptor " , " * " ] , controls = [ " sd_flags:1: %d " % ( sd_flags ) ] )
2023-03-22 14:48:00 +01:00
self . assertIn ( " nTSecurityDescriptor " , res [ 0 ] )
2012-12-06 14:04:47 +01:00
tmp = res [ 0 ] [ " nTSecurityDescriptor " ] [ 0 ]
sd = ndr_unpack ( security . descriptor , tmp )
sddl = sd . as_sddl ( self . sd_utils . domain_sid )
2023-03-22 14:48:00 +01:00
self . assertIn ( " O: " , sddl )
self . assertIn ( " G: " , sddl )
self . assertIn ( " D: " , sddl )
self . assertIn ( " S: " , sddl )
2012-12-06 14:04:47 +01:00
res = self . ldb_admin . search ( self . base_dn , SCOPE_BASE , None ,
2018-07-30 18:16:12 +12:00
[ " * " , " nTSecurityDescriptor " ] , controls = [ " sd_flags:1: %d " % ( sd_flags ) ] )
2023-03-22 14:48:00 +01:00
self . assertIn ( " nTSecurityDescriptor " , res [ 0 ] )
2012-12-06 14:04:47 +01:00
tmp = res [ 0 ] [ " nTSecurityDescriptor " ] [ 0 ]
sd = ndr_unpack ( security . descriptor , tmp )
sddl = sd . as_sddl ( self . sd_utils . domain_sid )
2023-03-22 14:48:00 +01:00
self . assertIn ( " O: " , sddl )
self . assertIn ( " G: " , sddl )
self . assertIn ( " D: " , sddl )
self . assertIn ( " S: " , sddl )
2012-12-06 14:04:47 +01:00
res = self . ldb_admin . search ( self . base_dn , SCOPE_BASE , None ,
2018-07-30 18:16:12 +12:00
[ " nTSecurityDescriptor " , " name " ] , controls = [ " sd_flags:1: %d " % ( sd_flags ) ] )
2023-03-22 14:48:00 +01:00
self . assertIn ( " nTSecurityDescriptor " , res [ 0 ] )
2012-12-06 14:04:47 +01:00
tmp = res [ 0 ] [ " nTSecurityDescriptor " ] [ 0 ]
sd = ndr_unpack ( security . descriptor , tmp )
sddl = sd . as_sddl ( self . sd_utils . domain_sid )
2023-03-22 14:48:00 +01:00
self . assertIn ( " O: " , sddl )
self . assertIn ( " G: " , sddl )
self . assertIn ( " D: " , sddl )
self . assertIn ( " S: " , sddl )
2012-12-06 14:04:47 +01:00
res = self . ldb_admin . search ( self . base_dn , SCOPE_BASE , None ,
2018-07-30 18:16:12 +12:00
[ " name " , " nTSecurityDescriptor " ] , controls = [ " sd_flags:1: %d " % ( sd_flags ) ] )
2023-03-22 14:48:00 +01:00
self . assertIn ( " nTSecurityDescriptor " , res [ 0 ] )
2012-12-06 14:04:47 +01:00
tmp = res [ 0 ] [ " nTSecurityDescriptor " ] [ 0 ]
sd = ndr_unpack ( security . descriptor , tmp )
sddl = sd . as_sddl ( self . sd_utils . domain_sid )
2023-03-22 14:48:00 +01:00
self . assertIn ( " O: " , sddl )
self . assertIn ( " G: " , sddl )
self . assertIn ( " D: " , sddl )
self . assertIn ( " S: " , sddl )
2012-12-06 14:04:47 +01:00
res = self . ldb_admin . search ( self . base_dn , SCOPE_BASE , None ,
2018-07-30 18:16:12 +12:00
[ " nTSecurityDescriptor " ] , controls = None )
2023-03-22 14:48:00 +01:00
self . assertIn ( " nTSecurityDescriptor " , res [ 0 ] )
2012-12-06 14:04:47 +01:00
tmp = res [ 0 ] [ " nTSecurityDescriptor " ] [ 0 ]
sd = ndr_unpack ( security . descriptor , tmp )
sddl = sd . as_sddl ( self . sd_utils . domain_sid )
2023-03-22 14:48:00 +01:00
self . assertIn ( " O: " , sddl )
self . assertIn ( " G: " , sddl )
self . assertIn ( " D: " , sddl )
self . assertIn ( " S: " , sddl )
2012-12-06 14:04:47 +01:00
res = self . ldb_admin . search ( self . base_dn , SCOPE_BASE , None ,
2018-07-30 18:16:12 +12:00
[ " name " , " nTSecurityDescriptor " ] , controls = None )
2023-03-22 14:48:00 +01:00
self . assertIn ( " nTSecurityDescriptor " , res [ 0 ] )
2012-12-06 14:04:47 +01:00
tmp = res [ 0 ] [ " nTSecurityDescriptor " ] [ 0 ]
sd = ndr_unpack ( security . descriptor , tmp )
sddl = sd . as_sddl ( self . sd_utils . domain_sid )
2023-03-22 14:48:00 +01:00
self . assertIn ( " O: " , sddl )
self . assertIn ( " G: " , sddl )
self . assertIn ( " D: " , sddl )
self . assertIn ( " S: " , sddl )
2012-12-06 14:04:47 +01:00
res = self . ldb_admin . search ( self . base_dn , SCOPE_BASE , None ,
2018-07-30 18:16:12 +12:00
[ " nTSecurityDescriptor " , " name " ] , controls = None )
2023-03-22 14:48:00 +01:00
self . assertIn ( " nTSecurityDescriptor " , res [ 0 ] )
2012-12-06 14:04:47 +01:00
tmp = res [ 0 ] [ " nTSecurityDescriptor " ] [ 0 ]
sd = ndr_unpack ( security . descriptor , tmp )
sddl = sd . as_sddl ( self . sd_utils . domain_sid )
2023-03-22 14:48:00 +01:00
self . assertIn ( " O: " , sddl )
self . assertIn ( " G: " , sddl )
self . assertIn ( " D: " , sddl )
self . assertIn ( " S: " , sddl )
2010-06-19 18:58:18 +02:00
2012-12-07 18:58:57 +01:00
def test_312 ( self ) :
""" This search is done by the windows dc join... """
res = self . ldb_admin . search ( self . base_dn , SCOPE_BASE , None , [ " 1.1 " ] ,
2018-07-30 18:16:12 +12:00
controls = [ " extended_dn:1:0 " , " sd_flags:1:0 " , " search_options:1:1 " ] )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " nTSecurityDescriptor " , res [ 0 ] )
2012-12-07 18:58:57 +01:00
2018-07-30 18:20:39 +12:00
2009-12-10 15:49:53 +02:00
class RightsAttributesTests ( DescriptorTests ) :
2010-01-08 10:00:35 +11:00
def deleteAll ( self ) :
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , self . get_users_domain_dn ( " testuser_attr " ) )
delete_force ( self . ldb_admin , self . get_users_domain_dn ( " testuser_attr2 " ) )
delete_force ( self . ldb_admin , " OU=test_domain_ou1, " + self . base_dn )
2010-01-08 10:00:35 +11:00
2009-12-10 15:49:53 +02:00
def setUp ( self ) :
2010-06-19 18:58:18 +02:00
super ( RightsAttributesTests , self ) . setUp ( )
2010-01-08 10:00:35 +11:00
self . deleteAll ( )
2018-07-30 18:19:49 +12:00
# Create users
2010-11-18 19:13:41 +02:00
# User 1
2010-11-23 17:52:55 +02:00
self . ldb_admin . newuser ( " testuser_attr " , " samba123@ " )
2009-12-10 15:49:53 +02:00
# User 2, Domain Admins
2010-11-23 17:52:55 +02:00
self . ldb_admin . newuser ( " testuser_attr2 " , " samba123@ " )
2010-11-18 19:13:41 +02:00
self . ldb_admin . add_remove_group_members ( " Domain Admins " ,
2012-06-19 12:43:08 +02:00
[ " testuser_attr2 " ] ,
2010-11-18 19:13:41 +02:00
add_members_operation = True )
2009-12-10 15:49:53 +02:00
def test_sDRightsEffective ( self ) :
object_dn = " OU=test_domain_ou1, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( object_dn )
2018-03-09 13:57:01 +00:00
print ( self . get_users_domain_dn ( " testuser_attr " ) )
2010-12-10 10:31:58 +02:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( " testuser_attr " ) )
2018-07-30 18:19:49 +12:00
# give testuser1 read access so attributes can be retrieved
2009-12-10 15:49:53 +02:00
mod = " (A;CI;RP;;; %s ) " % str ( user_sid )
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod )
2009-12-10 15:49:53 +02:00
_ldb = self . get_ldb_connection ( " testuser_attr " , " samba123@ " )
res = _ldb . search ( base = object_dn , expression = " " , scope = SCOPE_BASE ,
2018-07-30 18:16:12 +12:00
attrs = [ " sDRightsEffective " ] )
2018-07-30 18:19:49 +12:00
# user whould have no rights at all
2020-02-07 11:02:38 +13:00
self . assertEqual ( len ( res ) , 1 )
self . assertEqual ( str ( res [ 0 ] [ " sDRightsEffective " ] [ 0 ] ) , " 0 " )
2018-07-30 18:19:49 +12:00
# give the user Write DACL and see what happens
2009-12-10 15:49:53 +02:00
mod = " (A;CI;WD;;; %s ) " % str ( user_sid )
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod )
2009-12-10 15:49:53 +02:00
res = _ldb . search ( base = object_dn , expression = " " , scope = SCOPE_BASE ,
2018-07-30 18:16:12 +12:00
attrs = [ " sDRightsEffective " ] )
2018-07-30 18:19:49 +12:00
# user whould have DACL_SECURITY_INFORMATION
2020-02-07 11:02:38 +13:00
self . assertEqual ( len ( res ) , 1 )
self . assertEqual ( str ( res [ 0 ] [ " sDRightsEffective " ] [ 0 ] ) , ( " %d " ) % SECINFO_DACL )
2018-07-30 18:19:49 +12:00
# give the user Write Owners and see what happens
2009-12-10 15:49:53 +02:00
mod = " (A;CI;WO;;; %s ) " % str ( user_sid )
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod )
2009-12-10 15:49:53 +02:00
res = _ldb . search ( base = object_dn , expression = " " , scope = SCOPE_BASE ,
2018-07-30 18:16:12 +12:00
attrs = [ " sDRightsEffective " ] )
2018-07-30 18:19:49 +12:00
# user whould have DACL_SECURITY_INFORMATION, OWNER_SECURITY_INFORMATION, GROUP_SECURITY_INFORMATION
2020-02-07 11:02:38 +13:00
self . assertEqual ( len ( res ) , 1 )
self . assertEqual ( str ( res [ 0 ] [ " sDRightsEffective " ] [ 0 ] ) , ( " %d " ) % ( SECINFO_DACL | SECINFO_GROUP | SECINFO_OWNER ) )
2018-07-30 18:19:49 +12:00
# no way to grant security privilege bu adding ACE's so we use a memeber of Domain Admins
2009-12-10 15:49:53 +02:00
_ldb = self . get_ldb_connection ( " testuser_attr2 " , " samba123@ " )
res = _ldb . search ( base = object_dn , expression = " " , scope = SCOPE_BASE ,
2018-07-30 18:16:12 +12:00
attrs = [ " sDRightsEffective " ] )
2018-07-30 18:19:49 +12:00
# user whould have DACL_SECURITY_INFORMATION, OWNER_SECURITY_INFORMATION, GROUP_SECURITY_INFORMATION
2020-02-07 11:02:38 +13:00
self . assertEqual ( len ( res ) , 1 )
self . assertEqual ( str ( res [ 0 ] [ " sDRightsEffective " ] [ 0 ] ) ,
2009-12-10 15:49:53 +02:00
( " %d " ) % ( SECINFO_DACL | SECINFO_GROUP | SECINFO_OWNER | SECINFO_SACL ) )
def test_allowedChildClassesEffective ( self ) :
object_dn = " OU=test_domain_ou1, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( object_dn )
2010-12-10 10:31:58 +02:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( " testuser_attr " ) )
2018-07-30 18:19:49 +12:00
# give testuser1 read access so attributes can be retrieved
2009-12-10 15:49:53 +02:00
mod = " (A;CI;RP;;; %s ) " % str ( user_sid )
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod )
2009-12-10 15:49:53 +02:00
_ldb = self . get_ldb_connection ( " testuser_attr " , " samba123@ " )
res = _ldb . search ( base = object_dn , expression = " " , scope = SCOPE_BASE ,
2018-07-30 18:16:12 +12:00
attrs = [ " allowedChildClassesEffective " ] )
2018-07-30 18:19:49 +12:00
# there should be no allowed child classes
2020-02-07 11:02:38 +13:00
self . assertEqual ( len ( res ) , 1 )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " allowedChildClassesEffective " , res [ 0 ] . keys ( ) )
2018-07-30 18:19:49 +12:00
# give the user the right to create children of type user
2009-12-10 15:49:53 +02:00
mod = " (OA;CI;CC;bf967aba-0de6-11d0-a285-00aa003049e2;; %s ) " % str ( user_sid )
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod )
2009-12-10 15:49:53 +02:00
res = _ldb . search ( base = object_dn , expression = " " , scope = SCOPE_BASE ,
2018-07-30 18:16:12 +12:00
attrs = [ " allowedChildClassesEffective " ] )
2009-12-10 15:49:53 +02:00
# allowedChildClassesEffective should only have one value, user
2020-02-07 11:02:38 +13:00
self . assertEqual ( len ( res ) , 1 )
self . assertEqual ( len ( res [ 0 ] [ " allowedChildClassesEffective " ] ) , 1 )
self . assertEqual ( str ( res [ 0 ] [ " allowedChildClassesEffective " ] [ 0 ] ) , " user " )
2009-12-10 15:49:53 +02:00
def test_allowedAttributesEffective ( self ) :
object_dn = " OU=test_domain_ou1, " + self . base_dn
2010-11-25 01:15:24 +02:00
delete_force ( self . ldb_admin , object_dn )
2010-11-23 14:33:11 +02:00
self . ldb_admin . create_ou ( object_dn )
2010-12-10 10:31:58 +02:00
user_sid = self . sd_utils . get_object_sid ( self . get_users_domain_dn ( " testuser_attr " ) )
2018-07-30 18:19:49 +12:00
# give testuser1 read access so attributes can be retrieved
2009-12-10 15:49:53 +02:00
mod = " (A;CI;RP;;; %s ) " % str ( user_sid )
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod )
2009-12-10 15:49:53 +02:00
_ldb = self . get_ldb_connection ( " testuser_attr " , " samba123@ " )
res = _ldb . search ( base = object_dn , expression = " " , scope = SCOPE_BASE ,
2018-07-30 18:16:12 +12:00
attrs = [ " allowedAttributesEffective " ] )
2018-07-30 18:19:49 +12:00
# there should be no allowed attributes
2020-02-07 11:02:38 +13:00
self . assertEqual ( len ( res ) , 1 )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( " allowedAttributesEffective " , res [ 0 ] . keys ( ) )
2018-07-30 18:19:49 +12:00
# give the user the right to write displayName and managedBy
2009-12-10 15:49:53 +02:00
mod2 = " (OA;CI;WP;bf967953-0de6-11d0-a285-00aa003049e2;; %s ) " % str ( user_sid )
mod = " (OA;CI;WP;0296c120-40da-11d1-a9c0-0000f80367c1;; %s ) " % str ( user_sid )
# also rights to modify an read only attribute, fromEntry
mod3 = " (OA;CI;WP;9a7ad949-ca53-11d1-bbd0-0080c76670c0;; %s ) " % str ( user_sid )
2010-12-10 10:31:58 +02:00
self . sd_utils . dacl_add_ace ( object_dn , mod + mod2 + mod3 )
2009-12-10 15:49:53 +02:00
res = _ldb . search ( base = object_dn , expression = " " , scope = SCOPE_BASE ,
2018-07-30 18:16:12 +12:00
attrs = [ " allowedAttributesEffective " ] )
2009-12-10 15:49:53 +02:00
# value should only contain user and managedBy
2020-02-07 11:02:38 +13:00
self . assertEqual ( len ( res ) , 1 )
self . assertEqual ( len ( res [ 0 ] [ " allowedAttributesEffective " ] ) , 2 )
2023-03-22 14:48:00 +01:00
self . assertIn ( b " displayName " , res [ 0 ] [ " allowedAttributesEffective " ] )
self . assertIn ( b " managedBy " , res [ 0 ] [ " allowedAttributesEffective " ] )
2009-12-10 15:49:53 +02:00
2018-07-30 18:20:39 +12:00
2012-11-16 12:51:44 +01:00
class SdAutoInheritTests ( DescriptorTests ) :
def deleteAll ( self ) :
delete_force ( self . ldb_admin , self . sub_dn )
delete_force ( self . ldb_admin , self . ou_dn )
def setUp ( self ) :
super ( SdAutoInheritTests , self ) . setUp ( )
self . ou_dn = " OU=test_SdAutoInherit_ou, " + self . base_dn
self . sub_dn = " OU=test_sub, " + self . ou_dn
self . deleteAll ( )
def test_301 ( self ) :
""" Modify a descriptor with OWNER_SECURITY_INFORMATION set.
See that only the owner has been changed .
"""
attrs = [ " nTSecurityDescriptor " , " replPropertyMetaData " , " uSNChanged " ]
2018-07-30 18:18:03 +12:00
controls = [ " sd_flags:1: %d " % ( SECINFO_DACL ) ]
2012-11-16 12:51:44 +01:00
ace = " (A;CI;CC;;;NU) "
sub_ace = " (A;CIID;CC;;;NU) "
sd_sddl = " O:BAG:BAD:P(A;CI;0x000f01ff;;;AU) "
sd = security . descriptor . from_sddl ( sd_sddl , self . domain_sid )
2018-07-30 18:19:05 +12:00
self . ldb_admin . create_ou ( self . ou_dn , sd = sd )
2012-11-16 12:51:44 +01:00
self . ldb_admin . create_ou ( self . sub_dn )
ou_res0 = self . sd_utils . ldb . search ( self . ou_dn , SCOPE_BASE ,
None , attrs , controls = controls )
sub_res0 = self . sd_utils . ldb . search ( self . sub_dn , SCOPE_BASE ,
None , attrs , controls = controls )
ou_sd0 = ndr_unpack ( security . descriptor , ou_res0 [ 0 ] [ " nTSecurityDescriptor " ] [ 0 ] )
sub_sd0 = ndr_unpack ( security . descriptor , sub_res0 [ 0 ] [ " nTSecurityDescriptor " ] [ 0 ] )
ou_sddl0 = ou_sd0 . as_sddl ( self . domain_sid )
sub_sddl0 = sub_sd0 . as_sddl ( self . domain_sid )
2023-03-22 14:48:00 +01:00
self . assertNotIn ( ace , ou_sddl0 )
self . assertNotIn ( ace , sub_sddl0 )
2012-11-16 12:51:44 +01:00
ou_sddl1 = ( ou_sddl0 [ : ou_sddl0 . index ( " ( " ) ] + ace +
ou_sddl0 [ ou_sddl0 . index ( " ( " ) : ] )
sub_sddl1 = ( sub_sddl0 [ : sub_sddl0 . index ( " ( " ) ] + ace +
sub_sddl0 [ sub_sddl0 . index ( " ( " ) : ] )
self . sd_utils . modify_sd_on_dn ( self . ou_dn , ou_sddl1 , controls = controls )
2022-04-28 21:00:56 +12:00
self . sd_utils . modify_sd_on_dn ( self . sub_dn , sub_sddl1 , controls = controls )
2012-11-16 12:51:44 +01:00
sub_res2 = self . sd_utils . ldb . search ( self . sub_dn , SCOPE_BASE ,
None , attrs , controls = controls )
ou_res2 = self . sd_utils . ldb . search ( self . ou_dn , SCOPE_BASE ,
None , attrs , controls = controls )
ou_sd2 = ndr_unpack ( security . descriptor , ou_res2 [ 0 ] [ " nTSecurityDescriptor " ] [ 0 ] )
sub_sd2 = ndr_unpack ( security . descriptor , sub_res2 [ 0 ] [ " nTSecurityDescriptor " ] [ 0 ] )
ou_sddl2 = ou_sd2 . as_sddl ( self . domain_sid )
sub_sddl2 = sub_sd2 . as_sddl ( self . domain_sid )
self . assertFalse ( ou_sddl2 == ou_sddl0 )
self . assertFalse ( sub_sddl2 == sub_sddl0 )
if ace not in ou_sddl2 :
2018-03-09 13:57:01 +00:00
print ( " ou0: %s " % ou_sddl0 )
print ( " ou2: %s " % ou_sddl2 )
2012-11-16 12:51:44 +01:00
if sub_ace not in sub_sddl2 :
2018-03-09 13:57:01 +00:00
print ( " sub0: %s " % sub_sddl0 )
print ( " sub2: %s " % sub_sddl2 )
2012-11-16 12:51:44 +01:00
2023-03-22 14:48:00 +01:00
self . assertIn ( ace , ou_sddl2 )
self . assertIn ( sub_ace , sub_sddl2 )
2012-11-16 12:51:44 +01:00
ou_usn0 = int ( ou_res0 [ 0 ] [ " uSNChanged " ] [ 0 ] )
ou_usn2 = int ( ou_res2 [ 0 ] [ " uSNChanged " ] [ 0 ] )
2023-03-22 14:48:00 +01:00
self . assertGreater ( ou_usn2 , ou_usn0 )
2012-11-16 12:51:44 +01:00
sub_usn0 = int ( sub_res0 [ 0 ] [ " uSNChanged " ] [ 0 ] )
sub_usn2 = int ( sub_res2 [ 0 ] [ " uSNChanged " ] [ 0 ] )
2022-04-28 21:00:56 +12:00
self . assertGreater ( sub_usn2 , sub_usn0 )
2012-11-16 12:51:44 +01:00
2018-07-30 18:21:29 +12:00
2018-07-30 18:22:34 +12:00
if " :// " not in host :
2010-01-08 10:00:35 +11:00
if os . path . isfile ( host ) :
host = " tdb:// %s " % host
else :
host = " ldap:// %s " % host
2010-09-26 00:18:35 +03:00
# use 'paged_search' module when connecting remotely
if host . lower ( ) . startswith ( " ldap:// " ) :
ldb_options = [ " modules:paged_searches " ]
2014-11-02 08:57:37 -08:00
TestProgram ( module = __name__ , opts = subunitopts )