a
    “I_¤#  ã                   @   s@   d Z ddlmZ ddlmZmZ ddlZG dd„ dejjƒZ	dS )z’Tests for GENSEC.

Note that this just tests the bindings work. It does not intend to test
the functionality, that's already done in other tests.
é    )ÚCredentials)ÚgensecÚauthNc                       sŽ   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd d
d„Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )!ÚGensecTestsc                    s^   t t| ƒ ¡  i | _tj ¡  | jd< | _| j d¡| jd< | j 	dd¡ t
j | j¡| _
d S )NÚlp_ctxznetbios nameZtarget_hostnameúspnego:simulate_w2kÚno)Úsuperr   ÚsetUpÚsettingsÚsambaÚtestsZenv_loadparmr   ÚgetÚsetr   ÚSecurityÚstart_client©Úself©Ú	__class__© ú4/usr/lib/python3/dist-packages/samba/tests/gensec.pyr
      s    zGensecTests.setUpc                 C   s   |   t| jjd¡ d S )NZfoo)ÚassertRaisesÚRuntimeErrorr   Ústart_mech_by_namer   r   r   r   Útest_start_mech_by_unknown_name)   s    z+GensecTests.test_start_mech_by_unknown_namec                 C   s   | j  d¡ d S )NÚspnego)r   r   r   r   r   r   Útest_start_mech_by_name,   s    z#GensecTests.test_start_mech_by_namec                 C   s   |   t| jj¡ d S )N)r   r   r   Úsession_infor   r   r   r   Útest_info_uninitialized/   s    z#GensecTests.test_info_uninitializedNc              
   C   sº  |r&| j  |¡}|sd}| j  |d¡ tj | j¡| _| j |  	¡ ¡ | j 
tj¡ |durj| j |¡ n| j |¡ |rˆ| j  |d¡ tjj| jtj| j dd| _tƒ }| | j ¡ | | j ¡ | j |¡ | j 
tj¡ | j |¡ d}d}d}d}	|sv|r| j  |d¡ td	ƒ z| j |¡\}}	W n0 tjy` }
 zt|
ƒ‚W Y d}
~
n
d}
~
0 0 |rv| j  |d¡ |sÊtd
ƒ z| j |	¡\}}W n0 tjyÈ }
 zt|
ƒ‚W Y d}
~
n
d}
~
0 0 |rú|rúqØqú|rì| j  ||¡ |  |¡ |  |¡ | j ¡ }d}z| j |¡}| j |¡}W n6 tjy` } z|  t|ƒ¡ W Y d}~n
d}~0 0 |   ||¡ d}| j |¡}| j |¡}|   ||¡ | j !¡ }| j !¡ }|   ||¡ dS )úJTest GENSEC by doing an exchange with ourselves using GSSAPI against a KDCÚ ÚyesNr   ©r   ©r   Zauth_contextFó    zrunning client gensec_updatezrunning server gensec_updateó   Hello Serveró   Hello Client)"r   r   r   r   r   r   r   Úgensec_clientÚset_credentialsÚget_credentialsÚwant_featureZFEATURE_SEALr   Zstart_mech_by_sasl_nameÚstart_serverr   ÚAuthContextÚgensec_serverr   ÚguessÚset_machine_accountÚprintÚupdater   ZNTSTATUSErrorÚAssertionErrorÚ
assertTruer   ÚwrapÚunwrapZfailÚstrÚassertEqualÚsession_key)r   ZmechZclient_mechZclient_only_optZorig_client_optÚcredsÚclient_finishedÚserver_finishedÚserver_to_clientÚclient_to_serverÚntr   Ú
test_bytesÚtest_wrappedÚtest_unwrappedÚeÚclient_session_keyÚserver_session_keyr   r   r   Ú_test_update2   s~    
ÿ


$

zGensecTests._test_updatec                 C   s   |   d¡ d S )NZGSSAPI©rF   r   r   r   r   Útest_update†   s    zGensecTests.test_updatec                 C   s   |   d¡ d S )Nú
GSS-SPNEGOrG   r   r   r   r   Útest_update_spnego‰   s    zGensecTests.test_update_spnegoc                 C   s   |   ddd¡ d S )NrI   r   zgensec:gssapi_krb5rG   r   r   r   r   Útest_update_spnego_downgradeŒ   s    z(GensecTests.test_update_spnego_downgradec                 C   s   |   ddd¡ d S )NrI   r   zspnego:client_no_optimisticrG   r   r   r   r   Ú test_update_no_optimistic_spnego   s    z,GensecTests.test_update_no_optimistic_spnegoc                 C   s:   | j  dd¡ tj | j¡| _| j  dd¡ |  d¡ d S )Nr   r"   r   rI   ©r   r   r   r   r   r   rF   r   r   r   r   Útest_update_w2k_spnego_client’   s    z)GensecTests.test_update_w2k_spnego_clientc                 C   s,   t j | j¡| _ | j dd¡ |  d¡ d S )Nr   r"   rI   )r   r   r   r   r   r   rF   r   r   r   r   Útest_update_w2k_spnego_server   s    z)GensecTests.test_update_w2k_spnego_serverc                 C   s,   | j  dd¡ tj | j¡| _|  d¡ d S )Nr   r   rI   rM   r   r   r   r   Útest_update_w2k_spnego¦   s    z"GensecTests.test_update_w2k_spnegoc                 C   s   |   dd¡ d S )NrI   Zgssapi_krb5rG   r   r   r   r   Útest_update_gss_krb5_to_spnego®   s    z*GensecTests.test_update_gss_krb5_to_spnegoc                 C   s   |   dd¡ d S )NrI   ZntlmssprG   r   r   r   r   Útest_update_ntlmssp_to_spnego±   s    z)GensecTests.test_update_ntlmssp_to_spnegoc                 C   s´  t j | j¡| _| j |  ¡ ¡ | j t j¡ | j 	d¡ | j 
d¡ t jj| jtj| jdd| _tƒ }| | j¡ | | j¡ | j |¡ | j t j¡ | j 	d¡ | j 
d¡ d}d}d}d}|rÎ|s(|d7 }|sþtd	t|ƒ|f ƒ | j |¡\}}|sÄtd
t|ƒ|f ƒ | j |¡\}}qÄ|  |dk¡ | j ¡ }d}| j |¡}	| j |	¡}
|  ||
¡ d}| j |¡}	| j |	¡}
|  ||
¡ | j ¡ }| j ¡ }|  ||¡ dS )r    é   r   r#   r$   Fr%   r   é   z$running client gensec_update: %d: %rz$running server gensec_update: %d: %ré
   r&   r'   N)r   r   r   r   r(   r)   r*   r+   ZFEATURE_SIGNZset_max_update_sizer   r,   r   r-   r   r.   r   r/   r0   r1   Úlenr2   r4   r   r5   r6   r8   r9   )r   r:   r;   r<   r=   Úir>   r   r@   rA   rB   rD   rE   r   r   r   Útest_max_update_size´   sP    
ÿ



z GensecTests.test_max_update_size)NN)Ú__name__Ú
__module__Ú__qualname__r
   r   r   r   rF   rH   rJ   rK   rL   rN   rO   rP   rQ   rR   rX   Ú__classcell__r   r   r   r   r      s   

T	r   )
Ú__doc__Zsamba.credentialsr   r   r   r   Zsamba.testsr   ZTestCaser   r   r   r   r   Ú<module>   s   