2018-12-12 03:40:43 +03:00
#!/usr/bin/env python3
2016-10-18 00:39:00 +03:00
# -*- coding: utf-8 -*-
import optparse
import sys
sys . path . insert ( 0 , ' bin/python ' )
import os
import samba
import samba . getopt as options
import random
import tempfile
import shutil
import time
from samba . netcmd . main import cmd_sambatool
# We try to use the test infrastructure of Samba 4.3+, but if it
# doesn't work, we are probably in a back-ported patch and trying to
# run on 4.1 or something.
#
# Don't copy this horror into ordinary tests -- it is special for
# performance tests that want to apply to old versions.
try :
from samba . tests . subunitrun import SubunitOptions , TestProgram
ANCIENT_SAMBA = False
except ImportError :
ANCIENT_SAMBA = True
samba . ensure_external_module ( " testtools " , " testtools " )
samba . ensure_external_module ( " subunit " , " subunit/python " )
from subunit . run import SubunitTestRunner
import unittest
from samba . samdb import SamDB
from samba . auth import system_session
from ldb import Message , MessageElement , Dn , LdbError
from ldb import FLAG_MOD_ADD , FLAG_MOD_REPLACE , FLAG_MOD_DELETE
from ldb import SCOPE_BASE , SCOPE_SUBTREE , SCOPE_ONELEVEL
2021-05-11 02:21:21 +03:00
parser = optparse . OptionParser ( " ad_dc_multi_bind.py [options] <host> " )
2016-10-18 00:39:00 +03:00
sambaopts = options . SambaOptions ( parser )
parser . add_option_group ( sambaopts )
parser . add_option_group ( options . VersionOptions ( parser ) )
if not ANCIENT_SAMBA :
subunitopts = SubunitOptions ( parser )
parser . add_option_group ( subunitopts )
# use command line creds if available
credopts = options . CredentialsOptions ( parser )
parser . add_option_group ( credopts )
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 )
2018-07-30 09:20:39 +03:00
2016-10-18 00:39:00 +03:00
class UserTests ( samba . tests . TestCase ) :
def setUp ( self ) :
super ( UserTests , self ) . setUp ( )
self . lp = lp
def tearDown ( self ) :
super ( UserTests , self ) . tearDown ( )
def test_1000_binds ( self ) :
for x in range ( 1 , 1000 ) :
samdb = SamDB ( host , credentials = creds ,
2018-07-30 09:16:12 +03:00
session_info = system_session ( self . lp ) , lp = self . lp )
2016-10-18 00:39:00 +03:00
samdb . search ( base = samdb . domain_dn ( ) ,
scope = SCOPE_BASE , attrs = [ " * " ] )
if " :// " not in host :
if os . path . isfile ( host ) :
host = " tdb:// %s " % host
else :
host = " ldap:// %s " % host
if ANCIENT_SAMBA :
runner = SubunitTestRunner ( )
if not runner . run ( unittest . makeSuite ( UserTests ) ) . wasSuccessful ( ) :
sys . exit ( 1 )
sys . exit ( 0 )
else :
TestProgram ( module = __name__ , opts = subunitopts )