HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/samba/tests/__pycache__/__init__.cpython-310.pyc
o

�hb�[�@s�dZddlZddlZddlZddlZddlZddlZddlmZddlmZddl	m
Z
ddlmZddlZddl
Z
ddlZddlZddlmZmZddlZddlZddlmZdd	lmZdd
lmZddlZzddlmZWn
ey}dd
�ZYnwddlZddlZddl Zzddlm!Z!Wney�Gdd�de"�Z!Ynwej#�$ej#�%ej#�&e'�d��Z(e)dd�e*d�D��Z+dd�e,e��-�D�Z.dd�Z/dd�Z0Gdd�dej1�Z1Gdd�de1�Z2Gdd �d e1�Z3d!d"�Z4d@d$d%�Z5dZ6Gd&d'�d'e1�Z7Gd(d)�d)e1�Z8Gd*d+�d+e"�Z9Gd,d-�d-e3�Z:		.dAd/d0�Z;		#dBd1d2�Z<dCd3d4�Z=d5d6�Z>d7d8�Z?eGd9d:�d:e��Z@				;dDd<d=�ZA		dEd>d?�ZBdS)FzSamba Python tests.�N)�param)�credentials)�Credentials)�gensec)�IntEnum�unique)�randint)�SystemRandom)�contextmanager)�SamDBcOsdS�N�)�args�kwargsr
r
�6/usr/lib/python3/dist-packages/samba/tests/__init__.pyr.�r)�SkipTestc@�eZdZdZdS)rz
Test skipped.N��__name__�
__module__�__qualname__�__doc__r
r
r
rr8�rz../../../../bincCs4g|]}ttt|���dkr|dkr|ntd��qS)���.)�len�repr�chr�ord��.0�xr
r
r�
<listcomp>>s4r$�cCs i|]\}}|�d�r||�qS��ERR_)�
startswith�r"�k�vr
r
r�
<dictcomp>@s r,c
Cstt|tj�r|jd}|tvrt|Szdd�dd�|D���d�WSty9}zt|�WYd}~|Sd}~ww)Nr�[�, css�|]	}t�||�VqdSr)�LDB_ERR_LUT�getr!r
r
r�	<genexpr>Js�zldb_err.<locals>.<genexpr>�])�
isinstance�ldb�LdbErrorrr/�join�	TypeError�print)r+�er
r
r�ldb_errBs
��r:cCs|��|Sr)�setUpDynamicTestCases)�clsr
r
r�DynamicTestCasePsr=cszeZdZdZedd�dd��Zedd��Z�fdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zddd�Zddd�Z
dd�Z�ZS)�TestCasezA Samba test case.N)�doccsJ��fdd�}||_d�|f}t||�rtd|�d���t|||�dS)a 
        fnname is something like "test_dynamic_sum"
        suffix is something like "1plus2"
        argstr could be (1, 2)

        This would generate a test case called
        "test_dynamic_sum_1plus2(self)" that
        calls
        self._test_dynamic_sum_with_args(1, 2)
        cst|d����dS)Nz
_%s_with_args)�getattr��self�r�fnnamer
r�fncsz*TestCase.generate_dynamic_test.<locals>.fnz%s_%sz
Dynamic test z already exists!N)r�hasattr�RuntimeError�setattr)r<rD�suffixr?rrE�attrr
rCr�generate_dynamic_testWs
zTestCase.generate_dynamic_testcCsd|}t|��)z�This can be implemented in order to call cls.generate_dynamic_test()
        In order to implement autogenerated testcase permutations.
        z=%s needs setUpDynamicTestCases() if @DynamicTestCase is used!)�	Exception)r<�msgr
r
rr;kszTestCase.setUpDynamicTestCasescsRtt|���t�d�}|dur't|�}t��|_t�	|�|�
tj	|�dSdS)N�TEST_DEBUG_LEVEL)�superr>�setUp�os�getenv�int�samba�get_debug_level�_old_debug_level�set_debug_level�
addCleanup)rB�test_debug_level��	__class__r
rrPss


�zTestCase.setUpcCst�Sr)�env_loadparmrAr
r
r�get_loadparm|szTestCase.get_loadparmcCstSr)�cmdline_credentialsrAr
r
r�get_credentialsrzTestCase.get_credentialscCs"|��}|�|���}|��}|Sr)r_�get_named_ccacher]�get_name)rB�creds�ccache�ccache_namer
r
r�get_creds_ccache_name�szTestCase.get_creds_ccache_namec		Cs�d}d}t|t�}|ru|dd�}|dd�}|dd�}|r>d�dd�|D��}d�dd�|D��}|�t�}|�t�}n$d�d	d�|D��}d�d
d�|D��}|�t��d�}|�t��d�}|d|d
|d
|||f7}|d7}|s|S)Nr���� cS�g|]}dt|��qS�z%02X�r r!r
r
rr$��z$TestCase.hexdump.<locals>.<listcomp>cSrjrkrlr!r
r
rr$�rmcS�g|]}d|�qSrkr
r!r
r
rr$��cSrnrkr
r!r
r
rr$�ro�utf8z[%04X] %-*s  %-*s  %s %s
�)r3�strr6�	translate�HEXDUMP_FILTER�decode)	rB�src�N�result�	is_string�ll�lr�hl�hrr
r
r�hexdump�s(

�zTestCase.hexdumpcCs�|durtd��|dur|durtd��|dur&|dusJ�|��}|��}|��}|dur2|��}t�}|�|�|�|�|�|�	��|�
|���|�|�
��|�|��tjB�|�|�|rj|�|�|S)Nz)you need to supply a Credentials templatez8you cannot set creds username without setting a password)�
ValueError�get_username�get_password�get_bind_dn�get_kerberos_stater�set_username�set_password�
set_domain�
get_domain�	set_realm�	get_realm�set_workstation�get_workstation�set_gensec_features�get_gensec_featuresr�FEATURE_SEAL�set_kerberos_state�set_bind_dn)rB�template�username�userpass�kerberos_state�simple_bind_dn�cr
r
r�insta_creds�s4�


�

zTestCase.insta_credsFcCs�|r
|��}|��}||krFtj�d|rdndt|�t|�f�ddlm}||�d�|�d�dd�}|D]}tj�|�q6|�|�d	Sd	S)
z�Assert equality between two strings and highlight any differences.
        If strip is true, leading and trailing whitespace is ignored.z8The strings differ %s(lengths %d vs %d); a diff follows
zwhen stripped rfr)�unified_diffT�a�bN)	�strip�sys�stderr�writer�difflibr��
splitlines�fail)rBr�r�rMr�r��diff�liner
r
r�assertStringsEqual�s$
��
��zTestCase.assertStringsEqualcsr|dur|j�d|�d|�d�}z	||i|��Wnotjy�}zb|j\}}t|tjj�r3||v}	n||k}	|	s}dd�tt��	�D��t|tjj�rXd�
�fdd	�|D��}
n��|�}
|�|�d
|
�d|�d��|��d
|�d|���WYd}~dSWYd}~dSd}~wwdd�tt��	�D��t|tjj�r�d�
�fdd	�|D��}
n��|�}
|�d||
|f�dS)z/Assert a function raises a particular LdbError.Nz(*z, **�)cS�*i|]\}}|�d�rt|t�r||�qSr&�r(r3rSr)r
r
rr,��
��z1TestCase.assertRaisesLdbError.<locals>.<dictcomp>ric3��|]}��|�VqdSr�r0r!��lutr
rr1���z0TestCase.assertRaisesLdbError.<locals>.<genexpr>z, expected LdbError r.z got z (z) cSr�r&r�r)r
r
rr,�r�c3r�rr�r!r�r
rr1�r�z1%s, expected LdbError %s, (%s) but we got success)
rr4r5rr3�collections�abc�	Container�vars�itemsr6r0r�)rB�errcode�message�frrr9�numrM�found�errcode_namer
r�r�assertRaisesLdbError�sL



��������
�
�zTestCase.assertRaisesLdbError)NNNN)NF)rrrr�classmethodrKr;rPr]r_rer~r�r�r��
__classcell__r
r
rZrr>Ts
	

"r>cs,eZdZdZ�fdd�Zgfdd�Z�ZS)�LdbTestCasez2Trivial test case for running tests against a LDB.cs8tt|���tjdd�|_|jj|_t�|j�|_	dS)NF)�delete)
rOr�rP�tempfile�NamedTemporaryFile�name�filenamerT�Ldbr4rArZr
rrPs
zLdbTestCase.setUpcCsDt��}t�|jd�|_d�|�|d<|j�|�t�|j�|_dS)z Change the modules for this Ldb.z@MODULES�,z@LISTN)	r4�Message�Dn�dnr6�addrTr�r�)rB�modules�mr
r
r�set_moduless
zLdbTestCase.set_modules)rrrrrPr�r�r
r
rZrr��sr�cs0eZdZ�fdd�Zdd�Zedd��Z�ZS)�TestCaseInTempDircs(tt|���t��|_|�|j�dSr)rOr�rPr��mkdtemp�tempdirrX�_remove_tempdirrArZr
rrPs
zTestCaseInTempDir.setUpcCs*|�gt�|j��t�|j�d|_dSr)�assertEqualrQ�listdirr��rmdirrAr
r
rr�s
z!TestCaseInTempDir._remove_tempdirccs��z9tj|jd�\}}|VWz
t�|�t�|�WdSttfy:}ztd|t	j
d�WYd}~dSd}~wwzt�|�t�|�Wwttfyd}ztd|t	j
d�WYd}~wd}~ww)z*Yield a temporary filename in the tempdir.)�dirz#could not remove temporary file: %s)�fileN)r��mkstempr�rQ�close�unlink�OSError�IOErrorr8r�r�)rB�fdrEr9r
r
r�mktemps,�
����
���zTestCaseInTempDir.mktemp)rrrrPr�r
r�r�r
r
rZrr�s
r�cCs6t��}z|�tjd�W|Stytd��w)N�
SMB_CONF_PATHzSMB_CONF_PATH not set)r�LoadParm�loadrQ�environ�KeyError)�lpr
r
rr\+s��r\FcCs:|r|tj��vrdS|tj��vsJd|��tj|S)z�Returns value for variable in os.environ

    Function throws AssertionError if variable is defined.
    Unit-test based python tests require certain input params
    to be set in environment, otherwise they can't be run
    NzPlease supply %s in environment)rQr��keys)�var_name�
allow_missingr
r
r�env_get_var_value4s

r�c@r)�RpcInterfaceTestCasezDCE/RPC Test case.Nrr
r
r
rr�Err�c@s$eZdZdd�Zdd�Zdd�ZdS)�ValidNetbiosNameTestscC�|�t�d��dS)N�FOO)�
assertTruerT�valid_netbios_namerAr
r
r�
test_validK�z ValidNetbiosNameTests.test_validcCr�)N�FOOFOOFOOFOOFOOFOOFOOFOOFOOFOO��assertFalserTr�rAr
r
r�
test_too_longNr�z#ValidNetbiosNameTests.test_too_longcCr�)Nz*BLAr�rAr
r
r�test_invalid_charactersQr�z-ValidNetbiosNameTests.test_invalid_charactersN)rrrr�r�r�r
r
r
rr�Isr�c@s"eZdZdZddd�Zdd�ZdS)�BlackboxProcessErrorz�This is raised when check_output() process returns a non-zero exit status

    Exception instance should contain the exact exit code (S.returncode),
    command line (S.cmd), process output (S.stdout) and process error stream
    (S.stderr)
    NcCsF||_t|t�rd�|�|_d|_n||_d|_||_||_||_dS)NriFT)	�
returncoder3�listr6�cmd�shell�stdoutr�rM)rBr�r�r�r�rMr
r
r�__init__]s

zBlackboxProcessError.__init__cCs8d|j|j|j|j|jf}|jdurd||jf}|S)NzBCommand '%s'; shell %s; exit status %d; stdout: '%s'; stderr: '%s'z%s; message: %s)r�r�r�r�r�rM)rB�sr
r
r�__str__is�
zBlackboxProcessError.__str__r)rrrrr�r�r
r
r
rr�Us
r�c@sFeZdZdZdd�Zddd�Zddd�Zd	d
�Zdd�Zddd�Z	dS)�BlackboxTestCasez"Base test case for blackbox tests.cCs�t|t�r|}n|�dd�}|d}tj�t|�}gd�}tj�|�r'||d<||vr:t�dd�r:|�	dtj
d�t|t�sDd�|�}|S)zQExpand the called script into a fully resolved path in the bin
        directory.ri�r)z
samba-tool�samba_dnsupdate�samba_upgradednszscript/traffic_replayzscript/traffic_learner�PYTHONN)r3r��splitrQ�pathr6�BINDIR�existsrR�insertr�)rBr��partsr��exe�python_cmdsr
r
r�
_make_cmdlinevs


zBlackboxTestCase._make_cmdlineNcCs|j|d|d�dS)Nr)rM)�check_exit_code)rBr�rMr
r
r�	check_run�r�zBlackboxTestCase.check_runc	Csn|�|�}t|t�}tj|tjtj|d�}|��\}}|j}||kr5|dur-d||f}t|||||��|S)N�r�r�r�zexpected return code %s; got %s)	rr3r��
subprocess�Popen�PIPE�communicater�r�)	rBr��expectedrM�	use_shell�p�
stdoutdata�
stderrdata�retcoder
r
rr	�s&
��z BlackboxTestCase.check_exit_codecCsVt|t�}|�|�}tj|tjtj|dd�}|��\}}|j}|r)t||||��|S)NT)r�r�r��	close_fds)	r3r�rrr
rrr�r��rBr�rrrrrr
r
r�check_output�s
�zBlackboxTestCase.check_outputcCsT|�|�}t|t�}tj|tjtj|d�}|��\}}|j}||�d�|�d�fS)Nr�UTF8)	rr3r�rr
rrr�rurr
r
r�run_command�s
�zBlackboxTestCase.run_command� cCsVt��tj�}|t��tj�7}|t��tj�7}|d�dd�t|d�D��7}|S)Nrfcss*�|]}t��tjtjtj�VqdSr)r	�choice�string�ascii_uppercase�ascii_lowercase�digitsr!r
r
rr1�s�
���z3BlackboxTestCase.random_password.<locals>.<genexpr>r)r	rrrr rr6�range)rB�count�passwordr
r
r�random_password�s

�z BlackboxTestCase.random_passwordr)r)
rrrrrr
r	rrr$r
r
r
rr�ss


r�Tc	Cs�d|vr|stj�|�rd|}nd|}|�d�rdg}n|r&td|��|dur-t�}|dur7tj�|�}|dur=t	}t
|||||||d�S)	auCreate SamDB instance and connects to samdb_url database.

    :param samdb_url: Url for database to connect to.
    :param lp: Optional loadparm object
    :param session_info: Optional session information
    :param credentials: Optional credentials, defaults to anonymous.
    :param flags: Optional LDB flags
    :param ldap_only: If set, only remote LDAP connection will be created.
    :param global_schema: Whether to use global schema.

    Added value for tests is that we have a shorthand function
    to make proper URL for ldb.connect() while using default
    parameters for connection based on test environment
    z://ztdb://%sz	ldap://%szldap://zmodules:paged_searchesz;Trying to connect to %s while remote connection is requiredN)�urlr��session_infor�flags�options�
global_schema)rQr�isfiler(�AssertionErrorr\rT�auth�system_sessionr^r)�	samdb_urlr�r&rr'�ldb_options�	ldap_onlyr)r
r
r�
connect_samdb�s0

��r1c	Cs6t|||||||�}|jddtjdgd�}||dfS)a�Connects to samdb_url database

    :param samdb_url: Url for database to connect to.
    :param lp: Optional loadparm object
    :param session_info: Optional session information
    :param credentials: Optional credentials, defaults to anonymous.
    :param flags: Optional LDB flags
    :param ldap_only: If set, only remote LDAP connection will be created.
    :return: (sam_db_connection, rootDse_record) tuple
    rf�*)�base�
expression�scope�attrsr)r1�searchr4�
SCOPE_BASE)	r.r�r&rr'r/r0�sam_db�resr
r
r�connect_samdb_ex�s
��r;cCsTt|�}t��}|durt��}|�|�|�t|��|�t|��t|||d�S)aConnect to SamDB by getting URL and Credentials from environment

    :param env_url: Environment variable name to get lsb url from
    :param env_username: Username environment variable
    :param env_password: Password environment variable
    :return: sam_db_connection
    N)rr�)	r�rrrr��guessr�r�r1)�env_url�env_username�env_passwordr�r.rbr
r
r�connect_samdb_envs
r@c
Ksbz|j|fi|��WdStjy0}z|j\}}|tjks%Jd|��WYd}~dSd}~ww)Nzldb.delete() failed: %s)r�r4r5r�ERR_NO_SUCH_OBJECT)�samdbr�r�errorr��errstrr
r
r�delete_force#s
$��rEcCs8tdd�}t�|d|||��f�}|�|dd��|S)z Creates a unique OU for the testr�i���z
OU=%s%d,%s�organizationalUnit)r��objectclass)rr4r��get_default_basednr�)rBr��randr�r
r
r�create_test_ou+s
rJc@seZdZdZdZdZdZdS)�OptStaterr��rN)rrr�NOOPT�HYPHEN1�HYPHEN2�NAMEr
r
r
rrK8s
rK�
c
Cs�|durg}nd}|�d�D]3}|��}|dkrq|dur%||kr$g}nqt|�t|�|kr0q|ddkr;|�|�||krAnq|durHdSt�d�j}|D]{}tj}	d}
d}|D]a}|	tjkrp|dkrm|�	�rmtj
}	|}q[|	tj
kr�|��r�d|}
tj}	n|dkr�tj
}	q[|	tj
kr�|��r�d|}
tj}	ntj}	|}q[|	tjkr�||�r�|
|7}
q[|�|
g��|�tj}	|}q[|	tjkr�|�|
g��|�qPdS)N�
rfr�-z^[\w-]$riz--)r�lstripr�append�re�compile�matchrKrM�isspacerN�isalnumrPrO�
setdefault)
�out�
options_start�options_end�optmap�max_leading_spaces�	opt_lines�raw_liner��is_longname_char�stater��prevr�r
r
r�parse_help_consistency@sp
�




�
��rfcCsfi}t||||�g}t|���D]\}}t|�dkr)|D]}|�d||f�qq|r1d�|�SdS)a�Ensure that options are not repeated and redefined in --help
    output.

    Returns None if everything is OK, otherwise a string indicating
    the problems.

    If options_start and/or options_end are provided, only the bit in
    the output between these two lines is considered. For example,
    with samba-tool,

    options_start='Options:', options_end='Available subcommands:'

    will prevent the test looking at the preamble which may contain
    examples using options.
    r�z%s: %srRN)rf�sortedr�rrUr6)r\r]r^r_�errorsr*�valuesr+r
r
r�check_help_consistency�s��
�rj)F)NNNrNFT)NNNrNFr)NNNrQ)NN)CrrQr��warningsr�r4rTrr�samba.credentialsrrrr��unittestrV�enumrr�
samba.auth�samba.dcerpc.base�randomrr	�
contextlibr
r�samba.samdbr�ImportError�	samba.ndr�samba.dcerpc.dcerpc�samba.dcerpc.epmapperrrLr�abspathr6�dirname�__file__r�	bytearrayr!rtr�r�r/r:r=r>r�r�r\r�r^r�r�r�r�r1r;r@rErJrKrfrjr
r
r
r�<module>s����*
	[
�-
�


�K�