a
    )&i                     @   s   d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZ d dl	m
Z
mZmZmZ ejd d de jd< d	Zd	ZeG d
d deZedkrd	Zd	Zd dlZe  dS )    N)DynamicTestCase)KDCBaseTest)KerberosCredentials)AES256_CTS_HMAC_SHA1_96ARCFOUR_HMAC_MD5KDC_ERR_S_PRINCIPAL_UNKNOWNNT_PRINCIPALz
bin/python1ZPYTHONUNBUFFEREDFc                       s   e Zd ZejjejjejjdZddddddZ	e
 fdd	Ze
d
d Zdd Z fddZdddZdddZdd Zdd Z  ZS )SpnTests)ZcomputerZserverZrodczldap/{{account}}z&ldap/{{account}}/{netbios_domain_name}z"ldap/{{account}}/{dns_domain_name}zldap/{{account}}/testz'ldap/{{account}}:test/{dns_domain_name})Z2_partZ3_part_our_domainZ3_part_our_realmZ3_part_not_our_realmZ3_part_instancec                    s   t    d | _d S N)super
setUpClass_mock_rodc_creds)cls	__class__ </usr/lib/python3/dist-packages/samba/tests/krb5/spn_tests.pyr   :   s    
zSpnTests.setUpClassc                 C   sV   | j  D ]F\}}| j D ]2\}}| d| }||f}| jd|g|R   qq
d S )NZ_spn_Ztest_spn)test_account_typesitems	test_spnsZgenerate_dynamic_test)r   Zaccount_type_nameaccount_typeZspn_namespnZtnameZtargsr   r   r   setUpDynamicTestCases@   s
    zSpnTests.setUpDynamicTestCasesc                 C   s,  |  |}| ||}| jt|dd}|  }| |}|  }| }|	 }	| 
|jj}
ttf}|| jju r|t}nd }| j||d}|ddkr||s||	r|| jjur|| jjurt}| j}d }nd}d }| j}| j|j|j|j||||| j|||
ddd}| j|d |j||d	 d S )
N/)Z	name_typenames)etype   r   0F)Zexpected_crealmZexpected_cnameZexpected_srealmZexpected_snameZticket_decryption_keycheck_rep_fncheck_error_fnZcheck_kdc_private_fnexpected_error_modetgtZauthenticator_subkeyZkdc_optionsZexpect_edata)cnamerealmsnameetypes)
_get_creds_format_spnZPrincipalName_creater   splitZget_client_credsZget_tgt	get_samdbdomain_netbios_namedomain_dns_nameZ	RandomKeyZsession_keyr   r   r   AccountTypeSERVERZTicketDecryptionKey_from_credscountendswithRODCr   Zgeneric_check_kdc_errorZgeneric_check_kdc_repZtgs_exchange_dictZcrealmr#   ZsrealmZgeneric_check_kdc_privateZ_generic_kdc_exchange)selfr   r   Ztarget_credsr%   Zclient_credsr"   samdbnetbios_domain_namedns_domain_nameZsubkeyr&   Zticket_etypeZdecryption_keyr!   r    r   Zkdc_exchange_dictr   r   r   _test_spn_with_argsH   sl    



zSpnTests._test_spn_with_argsc                    s   t    t| _t| _d S r   )r   setUpglobal_asn1_printZdo_asn1_printglobal_hexdumpZ
do_hexdump)r2   r   r   r   r7      s    
zSpnTests.setUpNc                    s   t  fdd|S )Nc                    s    |  S r   )r(   )r   credsr2   r   r   <lambda>       z'SpnTests._format_spns.<locals>.<lambda>)map)r2   spnsr;   r   r:   r   _format_spns   s    zSpnTests._format_spnsc                 C   s>   |   }|j| | d}|d ur:| }|j|d}|S )N)r4   r5   Zaccount)r*   formatr+   r,   Zget_username)r2   r   r;   r3   Zaccount_namer   r   r   r(      s    
zSpnTests._format_spnc                 C   sV   |  | j }|| jju r@| j}|d u rR| |}|t| _n| j|d|id}|S )Nr   )r   Zopts)	r@   r   valuesr-   r1   r   _get_mock_rodc_credstypeZget_cached_creds)r2   r   r?   r;   r   r   r   r'      s    
zSpnTests._get_credsc                 C   s0  |   }|D ](}|j|jd}||jvr|j| q|  }t||j}t	|}t
|jtjd|d< || t }||   ||j  ||j ||j ||j ||j || ||j |j|tjdgd}t|d jddd}	| |	 | !||}
| "||
 |S )NrA   ZservicePrincipalNamezmsDS-KeyVersionNumber)baseZscopeattrsr   )idx)#Zget_mock_rodc_ctxrB   ZmynameZSPNsappendr*   ldbZDnZacct_dnZMessageZMessageElementZFLAG_MOD_REPLACEZmodifyr   ZguessZget_lpZ	set_realmr$   upperZ
set_domainZdomain_nameZset_passwordZ	acct_passZset_usernameZset_workstationZsamnameZset_dnZset_spnsearchZ
SCOPE_BASEintgetZset_kvnoZget_keysZcreds_set_keys)r2   r?   Zrodc_ctxr   r3   Zrodc_dnmsgr;   resZkvnokeysr   r   r   rD      s@    




zSpnTests._get_mock_rodc_creds)N)N)__name__
__module____qualname__r   r-   ZCOMPUTERr.   r1   r   r   classmethodr   r   r6   r7   r@   r(   r'   rD   __classcell__r   r   r   r   r
   +   s(   
;

r
   __main__)ossysZsamba.testsr   rJ   Zsamba.tests.krb5.kdc_base_testr   Zsamba.tests.krb5.raw_testcaser   Z"samba.tests.krb5.rfc4120_constantsr   r   r   r   pathinsertenvironr8   r9   r
   rR   Zunittestmainr   r   r   r   <module>   s$   
 %