a
    û)&iˆ¸  ã                   @   sì   d dl Z d dlZd dlm  mZ d dlZd dlZd dlm  mZ d dl	Zd dlm
Z
 d dlmZ d dl	mZ d dlmZmZmZ d dlmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZ G dd„ deƒZG dd„ deƒZ dS )é    N)Úgensec)ÚCredentials)ÚTestCase)Úndr_packÚ
ndr_unpackÚndr_unpack_out)Ú	text_type)Ú!NT_STATUS_CONNECTION_DISCONNECTEDÚNT_STATUS_PIPE_DISCONNECTEDÚNT_STATUS_IO_TIMEOUT)ÚNTSTATUSError)Úparam)Úlibsmb_samba_internalc                   @   s8   e Zd Zdd„ Zdd„ Zdd„ Zddd	„Zdd
d„ZdS )Úsmb_pipe_socketc                 C   sH   t  ¡ }| |j¡ tj|d||dd| _| jj|dddd|d| _d S )	NzIPC$T)ÚcredsZsigniŸ é   é   i@ @ )ZDesiredAccessZShareAccessZCreateDispositionZCreateOptionsZImpersonationLevel)	Ús3paramZget_contextÚloadZ
configfileÚlibsmbZConnÚsmbconnZcreateÚsmbfid)ÚselfÚtarget_hostnameÚpipenamer   Zimpersonation_levelZlpZlp3© r   úA/usr/lib/python3/dist-packages/samba/tests/dcerpc/raw_testcase.pyÚ__init__*   s    
ÿûzsmb_pipe_socket.__init__c                 C   s   | j  | j¡ | ` d S ©N)r   Úcloser   ©r   r   r   r   r   7   s    zsmb_pipe_socket.closec                 C   s(   t |d ƒ}|dksJ ‚| j |¡ d S )Niè  r   )Úintr   Ú
settimeout)r   ZtimeoZmsecsr   r   r   r"   ;   s    zsmb_pipe_socket.settimeoutr   c                 C   s   | j j| j|dddS )Nr   é   )ÚbufferÚoffsetÚmode)r   Úwriter   )r   ZbufÚflagsr   r   r   ÚsendC   s    zsmb_pipe_socket.sendc              
   C   s˜   z| j j| jd|dW S  ty’ } zd|jd tkrBW Y d }~dS |jd tkr^W Y d }~dS |jd tkrzt 	t
|ƒ¡‚|‚W Y d }~n
d }~0 0 d S )Nr   )r%   Úsizeó    )r   Úreadr   r   Úargsr	   r
   r   ÚsocketÚtimeoutÚstr)r   Úlenr(   Úer   r   r   ÚrecvF   s    zsmb_pipe_socket.recvN)r   )r   )Ú__name__Ú
__module__Ú__qualname__r   r   r"   r)   r3   r   r   r   r   r   (   s
   
r   c                       s"  e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Z‡ fd
d„Z‡ fdd„Z	dd„ Z
dUdd„ZdVdd„Zdd„ Zdd„ ZdWdd„ZdejjjejjjB dddddejjjejjjB df	dd„ZddddejjjejjjB ddfd d!„Zdddddd"d"ejjjejjjB dddddfd#d$„ZdXd%d&„ZdYd'd(„ZdZd)d*„Zd[d+d,„Zd\d-d.„Zd]d/d0„Zd^d1d2„Zd_d3d4„Zd5dejjjejjjB ejjjdddgddfd6d7„Z ejejB ddddddddf	d8d9„Z!d5dejjjejjjB ejjjdddgdfd:d;„Z"ejjjejjjB dddg d<ddfd=d>„Z#ejjjejjjB dddg d<ddfd?d@„Z$ejjjejjjB d<ddfdAdB„Z%ejjjejjjB dddddd<ddf	dCdD„Z&ejjjejjjB d<ddfdEdF„Z'ejjjejjjB d<ddfdGdH„Z(ejjjejjjB ddfdIdJ„Z)dKdL„ Z*dMdN„ Z+dOdP„ Z,dQdR„ Z-dSdT„ Z.‡  Z/S )`ÚRawDCERPCTestzA raw DCE/RPC Test case.c                 C   s8   | j d u rd S | j  ¡  d | _ | jr4tj d| ¡ d S )Nzdisconnect[%s]
)Úsr   Ú
do_hexdumpÚsysÚstderrr'   )r   Úreasonr   r   r   Ú_disconnectU   s    

zRawDCERPCTest._disconnectc              
   C   s6  t | jƒ}zþzrt | j|tjtjtjd¡| _t | jd d | jd d | jd d ¡| _	| j	 
d¡ | j	 | jd d ¡ W n† tjy° } z| j	 ¡  ‚ W Y d }~n^d }~0  tyÞ } z| j	 ¡  ‚ W Y d }~n0d }~0  ty } z‚ W Y d }~n
d }~0 0 W n0 d| _d| _| jd u r,| j| _|| _d S )Nr   r   é   é
   é   iÐ  )r!   Úprimary_addressr.   ZgetaddrinfoÚhostZ	AF_UNSPECZSOCK_STREAMZSOL_TCPÚar8   r"   ÚconnectÚerrorr   ÚIOErrorÚ	ExceptionÚmax_xmit_fragÚmax_recv_fragÚsecondary_addressÚtcp_port)r   rK   r2   r   r   r   Ú_connect_tcp]   s.    
þ.

zRawDCERPCTest._connect_tcpc                 C   s€   | j  d¡}|  t|ƒd¡ |  |d d¡ |  |d d¡ |d }t| j|| j| j| jƒ| _	d| _
d| _| jd u r|| j | _d S )	Nú\é   r   Ú r   Úpiper>   i¸  )rA   ÚsplitÚassertEqualr1   r   r   Útransport_credsÚtransport_impersonationÚlp_ctxr8   rH   rI   rJ   )r   rC   r   r   r   r   Ú_connect_smbw   s    ü
zRawDCERPCTest._connect_smbc                 C   s<   |   ¡  | j d¡r|  ¡  n|  ¡  | jd u r8| j| _d S )Nz\pipe\)ÚassertNotConnectedrA   Ú
startswithrV   rL   rJ   r    r   r   r   rD   ‡   s    

zRawDCERPCTest.connectc                    s´   t t| ƒ ¡  d| _d| _tjjddd| _tj d¡| _	tjjddd| _
| j
d u r^| j	| _
d| _d | _|  ¡ | _d| _i | _tj ¡  | jd	< | _| j
| jd
< d | _|  ¡  d S )NFZIGNORE_RANDOM_PADT)Zallow_missingZSERVERZTARGET_HOSTNAMEZ135r>   rU   r   )Úsuperr7   ÚsetUpÚdo_ndr_printr9   ÚsambaÚtestsÚenv_get_var_valueÚignore_random_padrB   r   rA   rJ   Úget_anon_credsrS   rT   ÚsettingsZenv_loadparmrU   r8   rD   r    ©Ú	__class__r   r   rZ   ‘   s&    ÿ

zRawDCERPCTest.setUpc                    s   |   d¡ tt| ƒ ¡  d S )NÚtearDown)r=   rY   r   rd   r    rb   r   r   rd   ¨   s    
zRawDCERPCTest.tearDownc                 C   s   d S r   r   r    r   r   r   Únoop¬   s    zRawDCERPCTest.noopNc                 C   sX   |   d¡ |  |¡ || _|d ur*|| _nd | _|d ur>|| _|d urL|| _|  ¡  d S )NÚreconnect_smb_pipe)r=   ÚassertIsNotNonerA   rJ   rS   rT   rD   )r   rA   rJ   rS   rT   r   r   r   rf   ¯   s    

z RawDCERPCTest.reconnect_smb_pipec                 C   sÄ   t dd}| j|_| j|_| j|_| j|_| j|_|d urX||_|d urP||_qrd |_n|  |¡ | j|_| j|_|d ur‚||_	n| j	|_	|d urš||_
n| j
|_
| j|_| j|_d |_| ¡  |S )Nre   )Z
methodName)r7   r[   r9   r_   rB   r   rA   rJ   ÚassertIsNonerS   rT   rU   ra   r8   rD   )r   rA   rJ   rS   rT   Úcr   r   r   Úsecond_connectionÂ   s2    

zRawDCERPCTest.second_connectionc                 C   sj   t ƒ }| ¡  tj d¡}tj d¡}tj d¡}tj d¡}| |¡ | |¡ | |¡ | |¡ |S )NZDOMAINZREALMZUSERNAMEZPASSWORD)	r   Zguessr\   r]   r^   Z
set_domainZ	set_realmZset_usernameZset_password)r   ri   ZdomainZrealmZusernameZpasswordr   r   r   Úget_user_credsç   s    



zRawDCERPCTest.get_user_credsc                 C   s   t ƒ }| ¡  |S r   )r   Zset_anonymous)r   ri   r   r   r   r`   ô   s    zRawDCERPCTest.get_anon_credsFc           
      C   s    |d u r|}t j | j¡}| |¡ | t j¡ | ||¡ |tj	krLd}n|tj
kr\d}nd}i }	||	d< ||	d< ||	d< ||	d< ||	d< ||	d< ||	d	< |	S )
NTFÚ	auth_typeÚ
auth_levelÚauth_context_idÚg_auth_levelr   Úhdr_signingÚexpect_3legs)r   ZSecurityZstart_clientra   Zset_credentialsÚwant_featureZFEATURE_DCE_STYLEZstart_mech_by_authtypeÚdcerpcZDCERPC_AUTH_TYPE_KRB5ÚDCERPC_AUTH_TYPE_NTLMSSP)
r   r   rl   rm   rn   ro   rp   Úgrq   Úauth_contextr   r   r   Úget_auth_context_credsù   s(    


z$RawDCERPCTest.get_auth_context_credsr   c                 C   sx  |g}|d urh|d r |t jO }|d }d}|d  |¡\}}|  |¡ | j|d |d |d |d}nd}|rÎ| j|||d	| |d
}|  |¡ |  ¡ }|d urF| j|t	j j j
|j|jt	j j jB dd |  |jjd¡ |  |jjd¡ |  |jjd¡ |  |jjd¡ |  |jj|¡ |  |jjd¡ |  t|jjƒd¡ d S | j|t	j j j|j|jd |  |jj|jj¡ |  |jj|jj¡ |  |jj|¡ |  |jjd¡ |  |jjd¡ |  |jj d¡ nŠ| j!|||||d
}|  |¡ |  ¡ }|d ur|| j|t	j j j"|jdd |  |jj#|¡ |  |jj$d¡ |  |jj%d j&|j&¡ |  |jj%d j'|j'¡ |  |jj(d¡ d S | j|t	j j j)|j|d |  |jj|jj¡ |  |jj|jj¡ |dkrÚ|  |jj|¡ n|  |jjd¡ |jj}| j}t|ƒd }d| d }|dkr$d| }nd}|  |jj|¡ |  |jj|¡ |  |jj |¡ |  |jj*d¡ |  |jj+d j,t	j j j-¡ |  |jj+d j.t	j j j/¡ |  0|jj+d j1|j2d ¡ |}|d u rð|  |j3d¡ |  t|jj4ƒd¡ |S |  |j3d¡ |  5t|jj4ƒt	j j j6¡ |  |j3t|jj4ƒt	j j j6 ¡ | j7|jj4|d}|j8}|d  |¡\}}|rŽ|  9|¡ |d r¢|d  :t;j<¡ n|  |
¡ |  |¡ | j|d |d |d |d}|
r| j=||	|d}|  |¡ | jdd}|  >|¡ |  ?¡  |S | j|||	d	| |d}|  |¡ |  ¡ }|d urÖ| j|t	j j j
|j|jt	j j jB dd |  |jjd¡ |  |jjd¡ |  |jjd¡ |  |jjd¡ |  |jj|¡ |  |jjd¡ |  t|jjƒd¡ d S | j|t	j j j|j|jd |  |jj|jj¡ |  |jj|jj¡ |  |jj|¡ |  |jjd¡ |  |jjd¡ |  |jj d¡ |  |jj*d¡ |  |jj+d j,t	j j j-¡ |  |jj+d j.t	j j j/¡ |  0|jj+d j1|j2d ¡ |rÔ|  |j3d¡ n|  |j3d¡ |  @t|jj4ƒt	j j j6¡ |  |j3t|jj4ƒt	j j j6 ¡ | j7|jj4|d}|r8|S |j8}|d  |¡\}}|  9|¡ |d rt|d  :t;j<¡ |S )Nrp   rq   r+   r   rl   rm   rn   )rl   rm   rn   Ú	auth_blobl   ÿÿ )Úcall_idÚ	pfc_flagsÚctx_listÚassoc_group_idÚ	auth_infor   ©rz   Úauth_length)rz   rO   r>   ©r   r   rN   r@   )rv   )ry   rz   r}   g{®Gáz„?)r/   )ry   r{   rz   r|   r}   )Ars   Z#DCERPC_PFC_FLAG_SUPPORT_HEADER_SIGNÚupdateZassertFalseÚgenerate_authÚgenerate_alterÚsend_pduÚrecv_pduÚ
verify_pdur\   ÚDCERPC_PKT_FAULTry   rz   ZDCERPC_PFC_FLAG_DID_NOT_EXECUTEÚassertNotEqualÚuÚ
alloc_hintrR   Ú
context_idÚcancel_countr(   ÚstatusÚreservedr1   Úerror_and_verifierZDCERPC_PKT_ALTER_RESPrH   rI   r|   Zsecondary_address_sizerJ   ÚassertPaddingZ_pad1Úgenerate_bindZDCERPC_PKT_BIND_NAKZreject_reasonZnum_versionsZversionsÚrpc_versÚrpc_vers_minorZ_padZDCERPC_PKT_BIND_ACKZnum_resultsr{   ÚresultZ!DCERPC_BIND_ACK_RESULT_ACCEPTANCEr<   Z$DCERPC_BIND_ACK_REASON_NOT_SPECIFIEDÚassertNDRSyntaxEqualsZsyntaxÚtransfer_syntaxesr   r}   ÚassertGreaterÚDCERPC_AUTH_TRAILER_LENGTHÚ
parse_authÚcredentialsÚ
assertTruerr   r   ZFEATURE_SIGN_PKT_HEADERÚgenerate_auth3rh   ÚassertIsConnectedÚassertGreaterEqual)r   Úctxrv   rz   r|   ry   Z
nak_reasonZalter_faultZstart_with_alterZpfc_flags_2ndZ	use_auth3r{   rq   Zfrom_serverZfinishedZ	to_serverr}   ÚreqÚrepZsda_strZsda_lenÚmod_lenZsda_padÚackrC   r   r   r   Údo_generic_bind  sb   	


ýü

ÿýÿü

ÿÿ


ÿÿ
 




ýþ

ü

ÿýÿÿÿ 

zRawDCERPCTest.do_generic_bindéÿÿ  c
                 C   sp   |r| j |||d |g}
tjj ¡ }||_t|
ƒ|_||_|
|_| j	||||d}|d u r`d }|	rl||fS |S )N)ÚtransferÚobject)rŸ   rv   rz   r|   )
Úepmap_reconnectr\   rs   r{   r‹   r1   Znum_transfer_syntaxesÚabstract_syntaxr–   r¤   )r   Úabstractr¦   r§   r‹   Zepmaprv   rz   r|   Z
return_ackZ	tsf1_listrŸ   r£   r   r   r   Úprepare_presentationÔ  s$    
ýz"RawDCERPCTest.prepare_presentationTc              	   C   sž  |d u r|j }|d u r| j}|d u r*| j}|	rÚ|rJtj dtj |¡ ¡ tjj	|||d}|r~tj dt
|ƒ|  |¡f ¡ tjjj}|tjjjO }|d ur¬|tjjjO }| j||j ||| ¡ ||d}| j|||d |
rš| j|||d\}}|rŒ| j|tjjj||dd |  |jjd¡ |  |jj |¡ |  |jjd¡ |  |jjd¡ |  |jj|¡ |  |jjd¡ |  t
|jjƒd¡ d S d}|d ur¾|d	 tjkr¾|	r¸|j }n|j }| j|tjjj!||d
 |  |jjd¡ |  |jj |j d@ ¡ |  |jjd¡ |  "t
|jj#ƒ|jj¡ |  $|||¡}|  t
|ƒ|jj¡ |rjtj dt
|ƒ|  |¡f ¡ t%|||||d |rštj dtj &|¡ ¡ d S )Nzin: %s)Ú	bigendianÚndr64zstub_in: %d
%s)ry   r‹   rz   r§   ÚopnumÚstubrv   )Ú	ndr_printÚhexdump)r/   r°   r±   r   r~   rm   r€   éÿ   zstub_out: %d
%s)r¬   r­   Úallow_remainingzout: %s)'r‹   r[   r9   r:   r;   r'   r\   ÚndrZndr_print_inZndr_pack_inr1   r±   rs   ÚDCERPC_PFC_FLAG_FIRSTÚDCERPC_PFC_FLAG_LASTZDCERPC_PFC_FLAG_OBJECT_UUIDÚgenerate_request_authr®   r„   Úrecv_pdu_rawr†   r‡   rˆ   r‰   rŠ   rR   rŒ   r(   r   rŽ   r   ÚDCERPC_AUTH_LEVEL_PACKETr   ZDCERPC_PKT_RESPONSErž   Ústub_and_verifierÚcheck_response_authr   Zndr_print_out)r   ry   rŸ   Úiorv   r§   r¬   r­   r³   Zsend_reqZrecv_repZfault_pfc_flagsZfault_statusZfault_context_idr/   r°   r±   Zstub_inrz   r    r¡   Úrep_blobZexpected_auth_lengthÚstub_outr   r   r   Údo_single_requestï  s‚    
úþ
ÿ
ÿÿ
ÿzRawDCERPCTest.do_single_requestc                 C   sî  t jj ¡ }|d u r|}|d u r,t jj ¡ }| jt jj ¡ |dd}t	|ƒ}t jj 
¡ }t jjj|_|d d… |_t jj ¡ }|dd … |_t jj ¡ }	||	_||	_t	|ƒ}
t jj 
¡ }t jjj|_|
d d… |_t jj ¡ }|dd … |_t jj ¡ }||_||_t jj 
¡ }t jjj|_d|_t jj ¡ }||_d|j_t jj 
¡ }t jjj|_d|_t jj ¡ }||_t| jƒ|j_t jj 
¡ }t jjj|_d|_t jj ¡ }||_d|j_|	||||g}t jj ¡ }t|ƒ|_||_t jj ¡ }||_ t jj !¡ }||_"||_#t jj $¡ |_%d|_&| j'd||d |  (|j)d	¡ |j*d j+}|  ,|¡ |  -|j.d
¡ |  -|j jd¡ |  -t|j jƒd¡ |  -|j jd jjt jjj¡ |  -|j jd jjt jjj¡ |  /d¡ d|j jd jj | _d | _0|  1¡  d S )Nr   )r‹   é   r+   z0.0.0.0r@   r>   )ry   rŸ   r¼   r   éK   é   rN   r¨   z%d)2r\   rs   ÚbaseZtransfer_syntax_ndrZmiscZGUIDr«   Zepmapperr©   r   Zepm_lhsZEPM_PROTOCOL_UUIDZprotocolZlhs_dataZepm_rhs_uuidÚunknownZ	epm_floorZlhsZrhsZEPM_PROTOCOL_NCACNZminor_versionZEPM_PROTOCOL_TCPr!   rA   ZportZEPM_PROTOCOL_IPZipaddrZ	epm_towerr1   Z
num_floorsÚfloorsZ	epm_twr_tZtowerZepm_MapZ	in_objectZin_map_towerZpolicy_handleZin_entry_handleZin_max_towersr¿   rž   Zout_num_towersZ
out_towersZtwrrg   rR   Ztower_lengthr=   rJ   rD   )r   rª   r¦   r§   Zndr32rŸ   Zdata1Zlhs1Zrhs1Zfloor1Zdata2Zlhs2Zrhs2Zfloor2Zlhs3Zfloor3Zlhs4Zfloor4Zlhs5Zfloor5rÅ   Z	req_towerZreq_twrZepm_mapZrep_twrr   r   r   r¨   D  s    ÿ

ÿÿ
zRawDCERPCTest.epmap_reconnectc              
   C   s<  |d u r| j }|d u r| j}zztt|ƒ}|rFtj dtj |¡ ¡ |rhtj dt	|ƒ|  
|¡f ¡ | j |d¡}|t	|ƒkr„q’||d … }qhW nœ tjyÊ } z|  d| ¡ ‚ W Y d }~npd }~0  tyü } z|  d| ¡ ‚ W Y d }~n>d }~0  ty0 } z|  d| ¡ ‚ W Y d }~n
d }~0 0 W n0 d S )Nzsend_pdu: %szsend_pdu: %d
%sr   )r[   r9   r   r:   r;   r'   r\   r´   r°   r1   r±   r8   r)   r.   rE   r=   rF   r   )r   r    r°   r±   Zreq_pduZsentr2   r   r   r   r„   •  s0    zRawDCERPCTest.send_pduc              
   C   s:  d }|d u r| j }zzr|d ur,| j |¡ | j dd¡}| j d¡ t|ƒdkrd|  d¡ W W d S |r†tj dt|ƒ|  	|¡f ¡ W n¦ t
jyÆ } z$| j d¡ tj d¡ W Y d }~nrd }~0  t
jyú } z|  d| ¡ ‚ W Y d }~n>d }~0  ty. } z|  d| ¡ ‚ W Y d }~n
d }~0 0 W n0 |S )Nr¥   r   r?   zrecv_raw: EOFzrecv_raw: %d
%szrecv_raw: TIMEOUT
zrecv_raw: %s)r9   r8   r"   r3   r1   r=   r:   r;   r'   r±   r.   r/   rE   rF   )r   r±   r/   Úrep_pdur2   r   r   r   Úrecv_raw±  s2    
"zRawDCERPCTest.recv_rawc                 C   s’   d }d }|d u r| j }|d u r$| j}zb| j||d}|d u rBW dS ttjjj|dd}|rrtj 	dtj
 |¡ ¡ |  |jt|ƒ¡ W n0 ||fS )N)r±   r/   )NNT©r³   zrecv_pdu: %s)r[   r9   rÇ   r   r\   rs   Úncacn_packetr:   r;   r'   r´   r°   rR   Úfrag_lengthr1   )r   r°   r±   r/   rÆ   r¡   r   r   r   r¸   Í  s     zRawDCERPCTest.recv_pdu_rawc                 C   s   | j |||d\}}|S )N)r°   r±   r/   )r¸   )r   r°   r±   r/   r¡   rÆ   r   r   r   r…   à  s
    þ
zRawDCERPCTest.recv_pduc           
      C   sž   |d u r| j }|d u r| j}|d ur–tjj ¡ }||_||_||_||_||_	t
|ƒ}	|rrtj dtj |¡ ¡ |rštj dt|	ƒ|  |	¡f ¡ nd}	|	S )Nzgenerate_auth: %szgenerate_auth: %d
%sr+   )r[   r9   r\   rs   Úauthrl   rm   Úauth_pad_lengthrn   rš   r   r:   r;   r'   r´   r°   r1   r±   )
r   rl   rm   rÌ   rn   rx   r°   r±   rC   Úair   r   r   r‚   æ  s$     zRawDCERPCTest.generate_authc                 C   sò   |d u r| j }|d u r| j}t|ƒtjjjkr2d S |rTtj dt|ƒ|  	|¡f ¡ t
tjjj|dd}|r„tj dtj |¡ ¡ |d urî|  |j|d ¡ |  |j|d ¡ |  |jd¡ |  |j|d ¡ |  |jtj¡ |  |j|¡ |S )	Nzparse_auth: %d
%sTrÈ   zparse_auth: %srl   rm   r   rn   )r[   r9   r1   r\   rs   r˜   r:   r;   r'   r±   r   rË   r´   r°   rR   rl   rm   Zauth_reservedrn   ZassertLessEqualrÌ   ÚDCERPC_AUTH_PAD_ALIGNMENT)r   r}   r°   r±   rv   Ústub_lenrC   r   r   r   r™     s&    zRawDCERPCTest.parse_authc                 C   s*  |d u r|   |jd¡ |jjS |d tjkrB|   |jd¡ |jjS |  |jd¡ tj}|j|j }|tj	 }|||… }|d|… }	||d … }
||d … }| j
||t|ƒd}|d urÆ|   |j|¡ |   |j|
¡ |d tjkrî|  d¡ n"|d tjkr|d  ||	|
¡ |dt|ƒ|j … }|S )Nr   rm   )rv   rÏ   Fr   )rR   r   r‰   rº   rs   ÚDCERPC_AUTH_LEVEL_CONNECTr—   ÚDCERPC_REQUEST_LENGTHrÊ   r˜   r™   r1   rÌ   rš   ÚDCERPC_AUTH_LEVEL_PRIVACYr›   r¹   Zcheck_packet)r   r¡   r½   rv   rÌ   Úofs_stubÚofs_sigÚofs_trailerZrep_dataZ	rep_wholeZrep_sigZrep_auth_info_blobZrep_auth_infor¾   r   r   r   r»     s6    
þz!RawDCERPCTest.check_response_authrÂ   c
                 C   s˜   t |dd ƒr|j}
nd}
tjj ¡ }||_||_||_||_||_	d|_
t|
ƒtjjjkrpt|
ƒtjjj |_nd|_||_||_t|ƒ}t|ƒ|_
|S )Nr}   r+   r   )Úgetattrr}   r\   rs   rÉ   r’   r“   Úptyperz   ÚdreprÊ   r1   r˜   r   ry   r‰   r   )r   r×   ry   Úpayloadr’   r“   rz   rØ   r°   r±   rÍ   ÚpZpdur   r   r   Úgenerate_pduE  s$    
zRawDCERPCTest.generate_pduc                 C   sÈ  |d u rd}d}|d urœt |ƒtj }d}|dkr<tj| }|d| 7 }|d tjjjkrn|d  t |ƒ¡}nd}d| }| j|d |d ||d	 |d
}nd}| j|||||||||	|
d
}|d u rÊ|S tj 	|¡}tj
}t |ƒ|j }|tj }|||… }|d|… }|d tjkr(|  d¡ nN|d tjkrJ|d  ||¡}n,|d tjkrr|  |d tj¡ d}n|S |  t |ƒ|j¡ |  t |ƒ|¡ t |jjƒ| }|jjd|… | }||j_|S )Nr+   r   ó    ro   r   é   rl   rm   rn   )rl   rm   rÌ   rn   rx   )
ry   rz   rŠ   r‹   r®   r§   r¯   r}   r°   r±   Fs                  )r1   rs   rÎ   r\   r¹   Úsig_sizer‚   Úgenerate_requestr´   r   rÑ   r   r˜   rÒ   r›   Zsign_packetrÐ   rR   rt   r‰   rº   )r   ry   rz   rŠ   r‹   r®   r§   r¯   rv   r°   r±   rÞ   r¢   rÌ   Zzero_sigr}   r    Zreq_blobrÓ   rÔ   rÕ   Zreq_dataZ	req_wholeZreq_sigZstub_sig_ofsr   r   r   r·   e  sn    

ü÷


ÿz#RawDCERPCTest.generate_request_authc	           
      C   sê   |   |d¡ t|jdd ƒr$|jj}	nd}	|  |j|¡ |  |j|¡ |  |j|¡ |  |j|¡ |  |j	|¡ |  
|jtjjj¡ t|	ƒtjjjkr²|  |jt|	ƒtjjj ¡ n&|d urÊ|  |j|¡ n|  |jd¡ |  |j|¡ d S )NzNo valid pdur}   r+   r   )rg   rÖ   r‰   r}   rR   r’   r“   r×   rz   rØ   rž   rÊ   r\   rs   ZDCERPC_NCACN_PAYLOAD_OFFSETr1   r˜   r   ry   )
r   rÚ   r×   ry   r’   r“   rz   rØ   r   rÍ   r   r   r   r†   ±  s*    
ÿÿzRawDCERPCTest.verify_pdur+   c
                 C   sp   |d u r| j }|d u r| j}tjj ¡ }
||
_ ||
_||
_t|ƒ|
_||
_||
_	| j
tjjj|||
||	d}|S ©N)r×   rz   ry   rÙ   r°   r±   )rH   rI   r\   rs   Úbindr|   r1   Únum_contextsr{   r}   rÛ   ZDCERPC_PKT_BIND)r   ry   rz   rH   rI   r|   r{   r}   r°   r±   ÚbrÚ   r   r   r   r‘   Ò  s$    

üzRawDCERPCTest.generate_bindc
                 C   sp   |d u r| j }|d u r| j}tjj ¡ }
||
_ ||
_||
_t|ƒ|
_||
_||
_	| j
tjjj|||
||	d}|S rà   )rH   rI   r\   rs   rá   r|   r1   râ   r{   r}   rÛ   ZDCERPC_PKT_ALTER)r   ry   rz   rH   rI   r|   r{   r}   r°   r±   rC   rÚ   r   r   r   rƒ   ñ  s$    

üzRawDCERPCTest.generate_alterc                 C   s2   t jj ¡ }||_| jt jjj|||||d}|S rà   )r\   rs   Zauth3r}   rÛ   ZDCERPC_PKT_AUTH3)r   ry   rz   r}   r°   r±   rC   rÚ   r   r   r   rœ     s    üzRawDCERPCTest.generate_auth3c                 C   sŒ   |d u rt |ƒ}tjj ¡ }||_||_||_|d ur<||_|| |_| j	tjjj
||||	|
d}t |ƒtjjjkrˆt |ƒtjjj |_|S rà   )r1   r\   rs   ZrequestrŠ   r‹   r®   r§   rº   rÛ   ZDCERPC_PKT_REQUESTr˜   r   )r   ry   rz   rŠ   r‹   r®   r§   r¯   r}   r°   r±   ÚrrÚ   r   r   r   rß   !  s$    
üzRawDCERPCTest.generate_requestc                 C   s2   t jj ¡ }||_| jt jjj|||||d}|S rà   )r\   rs   Z	co_cancelr}   rÛ   ZDCERPC_PKT_CO_CANCEL)r   ry   rz   r}   r°   r±   ri   rÚ   r   r   r   Úgenerate_co_cancelB  s    üz RawDCERPCTest.generate_co_cancelc                 C   s2   t jj ¡ }||_| jt jjj|||||d}|S rà   )r\   rs   Zorphanedr}   rÛ   ZDCERPC_PKT_ORPHANED)r   ry   rz   r}   r°   r±   ÚorÚ   r   r   r   Úgenerate_orphanedS  s    üzRawDCERPCTest.generate_orphanedc                 C   s,   t jj ¡ }| jt jjj|||||d}|S rà   )r\   rs   ZshutdownrÛ   ZDCERPC_PKT_SHUTDOWN)r   ry   rz   r°   r±   r8   rÚ   r   r   r   Úgenerate_shutdownd  s    üzRawDCERPCTest.generate_shutdownc                 C   s   | j | jdd d S )NzNot connected©Úmsg)rg   r8   r    r   r   r   r   s  s    zRawDCERPCTest.assertIsConnectedc                 C   s   | j | jdd d S )NzIs connectedré   )rh   r8   r    r   r   r   rW   w  s    z RawDCERPCTest.assertNotConnectedc                 C   s$   |   |j|j¡ |   |j|j¡ d S r   )rR   ZuuidZ
if_version©r   Ús1Ús2r   r   r   r•   {  s    z#RawDCERPCTest.assertNDRSyntaxEqualsc                 C   s2   |   t|ƒ|¡ | jrd S d| }|   ||¡ d S )NrÜ   )rR   r1   r_   )r   ZpadZlengthZzero_padr   r   r   r   €  s
    zRawDCERPCTest.assertPaddingc                 C   s    |   t|ƒ ¡ t|ƒ ¡ ¡ d S r   )rR   r0   Úlowerrë   r   r   r   ÚassertEqualsStrLower  s    z"RawDCERPCTest.assertEqualsStrLower)NNN)NNNN)NF)NN)NN)NN)NNN)NNN)NNr   NNNN)NNNr   )NN)0r4   r5   r6   Ú__doc__r=   rL   rV   rD   rZ   rd   re   rf   rj   rk   r`   rw   r\   rs   rµ   r¶   r¤   r«   r¿   r¨   r„   rÇ   r¸   r…   r‚   r™   r»   ZDCERPC_DREP_LErÛ   r·   r†   r‘   rƒ   rœ   rß   rå   rç   rè   r   rW   r•   r   rï   Ú__classcell__r   r   rb   r   r7   R   s>  
  ÿ
  ÿ
%  ý
ÿÿø
 =ÿû
ÿò
U
Q



      ú
  ÿ
  ÿ
'ÿú
!ÿ÷
Mÿú
"ÿø
 ÿø
 ÿü
ÿ÷
"ÿü
ÿü
ÿý
r7   )!r:   r.   Zsamba.dcerpc.dcerpcrs   Zsamba.dcerpc.baser\   Zsamba.dcerpc.epmapperZsamba.dcerpc.securityZsecurityZsamba.testsr   Zsamba.credentialsr   r   Z	samba.ndrr   r   r   Zsamba.compatr   Zsamba.ntstatusr	   r
   r   r   Zsamba.samba3r   r   r   r   r§   r   r7   r   r   r   r   Ú<module>   s"   *