
    b@                        d dl Z d dlZd dlmc mZ d dlZd dlZd dlmc 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mZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ  G d de          Z G d de          ZdS )    N)gensec)Credentials)TestCase)ndr_pack
ndr_unpackndr_unpack_out)!NT_STATUS_CONNECTION_DISCONNECTEDNT_STATUS_PIPE_DISCONNECTEDNT_STATUS_IO_TIMEOUT)NTSTATUSError)param)libsmb_samba_internal)SMB_SIGNING_REQUIREDc                   0    e Zd Zd Zd Zd ZddZddZdS )	smb_pipe_socketc                 l   t          j                    }|                    |j                   |                                }|                    t                     t          j        |d||d          | _	        |                    |           | j	        
                    |dddd|          | _        d S )	NzIPC$T)credsipci       i@ @ )DesiredAccessShareAccessCreateDispositionCreateOptionsImpersonationLevel)s3paramget_contextload
configfileget_smb_ipc_signingset_smb_ipc_signingr   libsmbConnsmbconncreatesmbfid)selftarget_hostnamepipenamer   impersonation_levellplp3saved_signing_states           A/usr/lib/python3/dist-packages/samba/tests/dcerpc/raw_testcase.py__init__zsmb_pipe_socket.__init__*   s    !###7799!!"6777{?FC).D: : :!!"5666l))(8@69<=8@=P * R R 	    c                 H    | j                             | j                   | ` d S N)r$   closer&   r'   s    r.   r3   zsmb_pipe_socket.close:   s#    4;'''LLLr0   c                 n    t          |dz            }|dk    sJ | j                            |           d S )Ni  r   )intr$   
settimeout)r'   timeomsecss      r.   r7   zsmb_pipe_socket.settimeout>   s=     EDL!!zzzz&&&r0   r   c                 H    | j                             | j        |dd          S )Nr      )bufferoffsetmode)r$   writer&   )r'   bufflagss      r.   sendzsmb_pipe_socket.sendF   s#    |!!$+c!!!LLLr0   c                 N   	 | j                             | j        d|          S # t          $ rv}|j        d         t
          k    rY d }~dS |j        d         t          k    rY d }~dS |j        d         t          k    r!t          j	        t          |                    |d }~ww xY w)Nr   )r=   sizer0   )r$   readr&   r   argsr	   r
   r   sockettimeoutstr)r'   lenrA   es       r.   recvzsmb_pipe_socket.recvI   s    		<$$T[$EEE 	 	 	vay=== yyyyyvay777 yyyyyvay000nSVV,,,G	s    !$ 
B$B
B&9BB$N)r   )__name__
__module____qualname__r/   r3   r7   rB   rL    r0   r.   r   r   (   sm               M M M M
 
 
 
 
 
r0   r   c                       e Zd ZdZd Zd Zd Zd Z fdZ fdZ	d Z
	 	 d/d
Z	 	 d0dZd Zd Z	 	 d1dZd	ej        j        j        ej        j        j        z  ddd	d	dej        j        j        ej        j        j        z  df	dZd	ddd	ej        j        j        ej        j        j        z  ddfdZd	d	dddddej        j        j        ej        j        j        z  d	d	d	d	d	fdZd2dZd2dZd2dZd/dZd/dZ	 	 	 	 	 	 d3dZ	 	 d4dZ	 	 d2dZddej        j        j        ej        j        j        z  ej        j        j        dddgd	d	fdZ ej        ej        z  d	d	d	d	d	d	d	d	f	d Z!ddej        j        j        ej        j        j        z  ej        j        j        dddgd	fd!Z"ej        j        j        ej        j        j        z  d	d	dg d"d	d	fd#Z#ej        j        j        ej        j        j        z  d	d	dg d"d	d	fd$Z$ej        j        j        ej        j        j        z  d"d	d	fd%Z%ej        j        j        ej        j        j        z  d	d	d	d	d	d"d	d	f	d&Z&ej        j        j        ej        j        j        z  d"d	d	fd'Z'ej        j        j        ej        j        j        z  d"d	d	fd(Z(ej        j        j        ej        j        j        z  d	d	fd)Z)d* Z*d+ Z+d, Z,d- Z-d. Z. xZ/S )5RawDCERPCTestzA raw DCE/RPC Test case.c                     | j         d S | j                                          d | _         | j        r$t          j                            d|z             d S d S )Nzdisconnect[%s]
)sr3   
do_hexdumpsysstderrr?   )r'   reasons     r.   _disconnectzRawDCERPCTest._disconnectX   sZ    6>F? 	:J/&899999	: 	:r0   c                    t          | j                  }	 t          j        | j        |t          j        t          j        t          j        d          | _        t          j        | j        d         d         | j        d         d         | j        d         d                   | _	        | j	        
                    d           | j	                            | j        d         d                    nf# t          j        $ r}| j	                                          d }~wt          $ r}| j	                                          d }~wt          $ r} d }~ww xY w	 n# w xY wd| _        d| _        | j        | j        | _        || _        d S )Nr   r      
      i  )r6   primary_addressrG   getaddrinfohost	AF_UNSPECSOCK_STREAMSOL_TCParT   r7   connecterrorr3   IOError	Exceptionmax_xmit_fragmax_recv_fragsecondary_addresstcp_port)r'   rl   rK   s      r.   _connect_tcpzRawDCERPCTest._connect_tcp`   se   t+,,	'	8V=M(.(:FN()+ +DF ]46!9Q<1tvay|LLDFFb!!!FNN46!9Q<((((| 	 	 	FLLNNN 	 	 	FLLNNN 	 	 		 ) DDDD!!!)%)%9D" sB   CC+ *E +E:DE!D;;EE		EE Ec                    | j                             d          }|                     t          |          d           |                     |d         d           |                     |d         d           |d         }t	          | j        || j        | j        | j                  | _	        d| _
        d| _        | j        | j         | _        d S d S )	N\   r    r   piper[   i  )r^   splitassertEqualrJ   r   r(   transport_credstransport_impersonationlp_ctxrT   ri   rj   rk   )r'   rd   r)   s      r.   _connect_smbzRawDCERPCTest._connect_smbz   s     &&t,,Q###1r"""1v&&&Q4 !5!)!%!5!%!=!%	. .
 "!!)%)%9D""" *)r0   c                     |                                   | j                            d          r|                                  n|                                  | j        | j        | _        d S )Nz\pipe\)assertNotConnectedr^   
startswithrx   rm   rk   r4   s    r.   re   zRawDCERPCTest.connect   sm    !!!**:66 	 !)%)%9D"r0   c                    t          t          |                                            d| _        d| _        t
          j                            dd          | _        t
          j                            d          | _	        t
          j                            dd          | _
        | j
        | j	        | _
        d| _        d | _        |                                 | _        d| _        i | _        t
          j                                        x| j        d	<   | _        | j
        | j        d
<   d | _        |                                  d S )NFIGNORE_RANDOM_PADT)allow_missingSERVERTARGET_HOSTNAME135r[   rw   r(   )superrR   setUpdo_ndr_printrU   sambatestsenv_get_var_valueignore_random_padr`   r(   r^   rk   get_anon_credsru   rv   settingsenv_loadparmrw   rT   re   r'   	__class__s    r.   r   zRawDCERPCTest.setUp   s   mT""((***!!&!>!>?RMQ "? "S "SK11(;;	${<<=N^b<cc'#'9D $!%#2244'*$050H0H0J0JJh$++/+?'(r0   c                     |                      d           t          t          |                                            d S )NtearDown)rY   r   r   r   r   s    r.   r   zRawDCERPCTest.tearDown   s9    $$$h&&(((((r0   c                     d S r2   rP   r4   s    r.   noopzRawDCERPCTest.noop   s    r0   Nc                     |                      d           |                     |           || _        ||| _        nd | _        ||| _        ||| _        |                                  d S )Nreconnect_smb_pipe)rY   assertIsNotNoner^   rk   ru   rv   re   )r'   r^   rk   ru   rv   s        r.   r   z RawDCERPCTest.reconnect_smb_pipe   sz    -..._---.(%6D""%)D"&#2D ".+BD(r0   c                    t          d          }| j        |_        | j        |_        | j        |_        | j        |_        | j        |_        |||_        |||_        n5d |_        n-|                     |           | j        |_        | j        |_        |||_	        n| j	        |_	        |||_
        n| j
        |_
        | j        |_        | j        |_        d |_        |                                 |S )Nr   )
methodName)rR   r   rU   r   r`   r(   r^   rk   assertIsNoneru   rv   rw   r   rT   re   )r'   r^   rk   ru   rv   cs         r.   second_connectionzRawDCERPCTest.second_connection   s    V,,,*"4 0& /A ,&7##&*##/000 $ 4A"&"8A& /A $ 4A".(?A%%(,(DA%;]
			r0   c                    t                      }|                                 t          j                            d          }t          j                            d          }t          j                            d          }t          j                            d          }|                    |           |                    |           |                    |           |                    |           |S )NDOMAINREALMUSERNAMEPASSWORD)	r   guessr   r   r   
set_domain	set_realmset_usernameset_password)r'   r   domainrealmusernamepasswords         r.   get_user_credszRawDCERPCTest.get_user_creds   s    MM				..x88--g66;00<<;00<<	V	E	x   	x   r0   c                 J    t                      }|                                 |S r2   )r   set_anonymous)r'   r   s     r.   r   zRawDCERPCTest.get_anon_creds   s     MM	r0   Fc                    ||}t           j                            | j                  }|                    |           |                    t           j                   |                    ||           |t          j	        k    rd}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   Securitystart_clientr   set_credentialswant_featureFEATURE_DCE_STYLEstart_mech_by_authtypedcerpcDCERPC_AUTH_TYPE_KRB5DCERPC_AUTH_TYPE_NTLMSSP)
r'   r   r   r   r   r   r   gr   auth_contexts
             r.   get_auth_context_credsz$RawDCERPCTest.get_auth_context_creds   s    
 %LO((77	%   	v/000	  L999444LL&999LL L$-[!%/\"*9&''3^$!"X&1]#'3^$r0   r   c                    |g}||d         r|t           j        z  }|d         }d}|d                             |          \  }}|                     |           |                     |d         |d         |d         |          }nd}|r|                     |||d	|z
  |
          }|                     |           |                                 }|>|                     |t          j         j         j
        |j        |j        t          j         j         j        z  d           |                     |j        j        d           |                     |j        j        d           |                     |j        j        d           |                     |j        j        d           |                     |j        j        |           |                     |j        j        d           |                     t/          |j        j                  d           d S |                     |t          j         j         j        |j        |j                   |                     |j        j        |j        j                   |                     |j        j        |j        j                   |                     |j        j        |           |                     |j        j        d           |                     |j        j        d           |                     |j        j         d           n| !                    |||||
          }|                     |           |                                 }||                     |t          j         j         j"        |j        d           |                     |j        j#        |           |                     |j        j$        d           |                     |j        j%        d         j&        |j&                   |                     |j        j%        d         j'        |j'                   |                     |j        j(        d           d S |                     |t          j         j         j)        |j        |           |                     |j        j        |j        j                   |                     |j        j        |j        j                   |dk    r!|                     |j        j        |           n,|                     |j        j        d           |j        j        }| j        }t/          |          dz   }d|z   dz  }|dk    rd|z
  }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        |j2        d                    |}|J|                     |j3        d           |                     t/          |j        j4                  d           |S |                     |j3        d           | 5                    t/          |j        j4                  t          j         j         j6                   |                     |j3        t/          |j        j4                  t          j         j         j6        z
             | 7                    |j        j4        |          }|j8        }|d                             |          \  }}|rC| 9                    |           |d         r%|d         :                    tv          j<                   n*|                     |
           |                     |           |                     |d         |d         |d         |          }|
rn| =                    ||	|          }|                     |           |                     d          }| >                    |           | ?                                 |S |                     |||	d	|z
  |          }|                     |           |                                 }|>|                     |t          j         j         j
        |j        |j        t          j         j         j        z  d           |                     |j        j        d           |                     |j        j        d           |                     |j        j        d           |                     |j        j        d           |                     |j        j        |           |                     |j        j        d           |                     t/          |j        j                  d           d S |                     |t          j         j         j        |j        |j                   |                     |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        |j2        d                    |r|                     |j3        d           n|                     |j3        d           | @                    t/          |j        j4                  t          j         j         j6                   |                     |j3        t/          |j        j4                  t          j         j         j6        z
             | 7                    |j        j4        |          }|r|S |j8        }|d                             |          \  }}| 9                    |           |d         r%|d         :                    tv          j<                   |S )Nr   r   r0   r   r   r   r   )r   r   r   	auth_blobl    )call_id	pfc_flagsctx_listassoc_group_id	auth_infor   r   auth_length)r   rq   r[   r   r   rp   r]   )r   )r   r   r   g{Gz?)rH   )r   r   r   r   r   )Ar   #DCERPC_PFC_FLAG_SUPPORT_HEADER_SIGNupdateassertFalsegenerate_authgenerate_altersend_pdurecv_pdu
verify_pdur   DCERPC_PKT_FAULTr   r   DCERPC_PFC_FLAG_DID_NOT_EXECUTEassertNotEqualu
alloc_hintrt   
context_idcancel_countrA   statusreservedrJ   error_and_verifierDCERPC_PKT_ALTER_RESPri   rj   r   secondary_address_sizerk   assertPadding_pad1generate_bindDCERPC_PKT_BIND_NAKreject_reasonnum_versionsversionsrpc_versrpc_vers_minor_padDCERPC_PKT_BIND_ACKnum_resultsr   result!DCERPC_BIND_ACK_RESULT_ACCEPTANCErX   $DCERPC_BIND_ACK_REASON_NOT_SPECIFIEDassertNDRSyntaxEqualssyntaxtransfer_syntaxesr   r   assertGreaterDCERPC_AUTH_TRAILER_LENGTH
parse_authcredentials
assertTruer   r   FEATURE_SIGN_PKT_HEADERgenerate_auth3r   assertIsConnectedassertGreaterEqual)r'   ctxr   r   r   r   
nak_reasonalter_faultstart_with_alterpfc_flags_2nd	use_auth3r   r   from_serverfinished	to_serverr   reqrepsda_strsda_lenmod_lensda_padackrd   s                            r.   do_generic_bindzRawDCERPCTest.do_generic_bind  s-    5#M* HVGG	'7LK$0$:$A$A+$N$N!XyX&&&**\+5N6B<6P;GHY;Z5> + @ @II
 I @	5%%g09/75?.5P09	 & ; ;C
 MM#--//C&U\%8%I3;*-- % 3 S+T,-   / / / ##CE$4a888  !11555  !3Q777  a000  {;;;  333  SU%=!>!>BBBtOOC!4!JCK&)m  5 5 5SU0#%2EFFFSU0#%2EFFFSU1>BBBSU91===SU4b999su{A....$$W/8.64B/8	 % : :C
 MM#--//C%U\%8%Lck,-   / / /  !4jAAA  !3Q777  !2!;S\JJJ  !2!A3CUVVV""35:q111OOC!4!H#+&/  1 1 1SU0#%2EFFFSU0#%2EFFF""  !5~FFFF##CE$8!<<<!$!5,G'llQ&G7{a'G!||g+SU97CCCSU4g>>>su{G444*A...*1,-O	Q 	Q 	Q*1,-R	T 	T 	T""35>!#4#;S=RST=UVVVS_a000S111555JCOQ///3su//1D1_```#ceo*>*>ATAo*opppOOCEO,OGGm ,X 6 = =k J J9 	'OOH%%%M* TX&33F4RSSSY'''X&&&&&k1J2>|2L7CDU7V1: ' < <	  	%%g0=09 & ; ;C MM#-----Cc"""""$$$J!!'+3,91;n1L,5	 " 7 7
 	cmmoo"OOC!4!Es{&)m!L/O'P()  + + +  0!444SU-q111SU/333SU[!,,,SU\;777SU^Q///S!9::A>>>4U\0F"%- 	 	1 	1 	1,ce.ABBB,ce.ABBB-~>>>5q9990"55535;****A...*1,-O	Q 	Q 	Q*1,-R	T 	T 	T""35>!#4#;S=RST=UVVV 	4S_a0000333CEO 4 4el6I6deee#ceo*>*>ATAo*opppOOCEO,OGG 	Jm ,X 6 = =k J J9!!!& 	P"//0NOOO
r0     c
                    |r|                      |||           |g}
t          j        j                                        }||_        t          |
          |_        ||_        |
|_        | 	                    ||||          }|d }|	r||fS |S )N)transferobject)r   r   r   r   )
epmap_reconnectr   r   r   r   rJ   num_transfer_syntaxesabstract_syntaxr   r  )r'   abstractr
  r  r   epmapr   r   r   
return_ack	tsf1_listr   r  s                r.   prepare_presentationz"RawDCERPCTest.prepare_presentation  s      	M  HV LLLJ	l!**,,#$'	NN!& )""s0<-62@ # B B ;C 	:
r0   Tc           	         ||j         }|| j        }|| j        }|	r>|r?t          j                            dt          j                            |          z             t          j        	                    |||          }|rDt          j                            dt          |          |                     |          fz             t          j        j        j        }|t          j        j        j        z  }||t          j        j        j        z  }|                     ||j         |||                                ||          }|                     |||           |
r|                     |||          \  }}|r|                     |t          j        j        j        ||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	         t          j        k    r|	r|j         }n|j         }|                     |t          j        j        j!        ||
           |                     |j        j        d           |                     |j        j         |j         dz             |                     |j        j        d           | "                    t          |j        j#                  |j        j                   | $                    |||          }|                     t          |          |j        j                   |rDt          j                            dt          |          |                     |          fz             tK          |||||           |rCt          j                            dt          j        &                    |          z             d S d S d S )Nzin: %s)	bigendianndr64zstub_in: %d
%s)r   r   r   r  opnumstubr   )	ndr_printhexdump)rH   r  r  r   r   r   r      zstub_out: %d
%s)r  r  allow_remainingzout: %s)'r   r   rU   rV   rW   r?   r   ndrndr_print_inndr_pack_inrJ   r  r   DCERPC_PFC_FLAG_FIRSTDCERPC_PFC_FLAG_LASTDCERPC_PFC_FLAG_OBJECT_UUIDgenerate_request_authr  r   recv_pdu_rawr   r   r   r   r   rt   r   rA   r   r   r   DCERPC_AUTH_LEVEL_PACKETr   DCERPC_PKT_RESPONSEr   stub_and_verifiercheck_response_authr   ndr_print_out)r'   r   r   ior   r  r  r  r  send_reqrecv_repfault_pfc_flagsfault_statusfault_context_idrH   r  r  stub_inr   r   r  rep_blobexpected_auth_lengthstub_outs                           r.   do_single_requestzRawDCERPCTest.do_single_request  sT     #"~)I?oG 	E H
  EI,B,B2,F,F!FGGGi++B)5+QQG \
  !2c'llDLLQXDYDY5Z!Z[[[+AI,AAI!U\0LL	,,W8;7@4:3588::29:F - H HC MM#GMDDD '	J"//:C8? 0 A AOS(  
U\%8%I7*9q   J J J##CE$4a888  !13CDDD  !3Q777  a000  |<<<  333  SU%=!>!>BBB#$ 'L)V-LLL ;+.?((+.?( OOC!4!H'(<  > > > 0!444SU-s~/DEEESU/333##C(?$@$@#%BRSSS//X|LLHS]]CE,<=== _
  !3s8}}dllS[F\F\6]!]^^^2x9E+:< < < < J
  UY-D-DR-H-H!HIIIIIO'	J '	JLJ Jr0   c                    t           j        j                                        }||}|#t           j        j                                        }|                     t           j        j                                        |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                                        }t9          |          |_        ||_        t           j        j                                        }||_         t           j        j        !                                }||_"        ||_#        t           j        j        $                                |_%        d|_&        | '                    d||           | (                    |j)        d	           |j*        d         j+        }| ,                    |           | -                    |j.        d
           | -                    |j         j        d           | -                    t9          |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        z  | _        d | _0        | 1                                 d S )Nr   )r      r0   z0.0.0.0r]   r[   )r   r   r*  r   K      rp   r  z%d)2r   r   basetransfer_syntax_ndrmiscGUIDr  epmapperr  r   epm_lhsEPM_PROTOCOL_UUIDprotocollhs_dataepm_rhs_uuidunknown	epm_floorlhsrhsEPM_PROTOCOL_NCACNminor_versionEPM_PROTOCOL_TCPr6   r^   portEPM_PROTOCOL_IPipaddr	epm_towerrJ   
num_floorsfloors	epm_twr_ttowerepm_Map	in_objectin_map_towerpolicy_handlein_entry_handlein_max_towersr4  r   out_num_towers
out_towerstwrr   rt   tower_lengthrY   rk   re   )r'   r  r
  r  ndr32r   data1lhs1rhs1floor1data2lhs2rhs2floor2lhs3floor3lhs4floor4lhs5floor5rO  	req_towerreq_twrepm_maprep_twrs                            r.   r  zRawDCERPCTest.epmap_reconnectG  s   !5577H>\&++--F''(=(M(M(O(O(0Q ( @ @ ""|$,,..-?crc
|$1133RSSz&0022

""|$,,..-?crc
|$1133RSSz&0022

|$,,..-@&0022
#$
 |$,,..->&0022
d233
|$,,..-=&0022
%
&&&&9L)3355	"6{{	!	,'1133!,'//11"&"',"3"A"A"C"C !qcg>>> 6:::$Q'+W%%%-r22211555W]122A666-a04=.?	A 	A 	A-a04=.?	A 	A 	A 	*+++#gm&:1&=&A&FF!%r0   c                    || j         }|| j        }	 t          |          }|r?t          j                            dt          j                            |          z             |rDt          j                            dt          |          | 
                    |          fz             	 | j                            |d          }|t          |          k    rn||d          }:n|# t          j        $ r}|                     d|z              d }~wt           $ r}|                     d|z              d }~wt"          $ r}|                     d|z              d }~ww xY w	 d S # w xY w)Nzsend_pdu: %szsend_pdu: %d
%sTr   )r   rU   r   rV   rW   r?   r   r  r  rJ   r  rT   rB   rG   rf   rY   rg   r   )r'   r   r  r  req_pdusentrK   s          r.   r   zRawDCERPCTest.send_pdu  s   )I?oG	smmG L
  %)2E2Ec2J2J!JKKK ]
  !3s7||T\\RYEZEZ6[![\\\)v{{7A..3w<<''!$%%.	) | 	 	 	^a/000 	 	 	^a/000 	 	 	^a/000	  DDDDDsB   CC& %E% &E5DED44EEEE% %E'c                    d }|| j         }	 || j                            |           | j                            dd          }| j                            d           t	          |          dk    r|                     d           	 d S |rDt          j                            dt	          |          | 	                    |          fz             n# t          j        $ rC}| j                            d           t          j                            d           Y d }~nYd }~wt          j        $ r}|                     d|z              d }~wt          $ r}|                     d|z              d }~ww xY wn# w xY w|S )Nr  r   r\   zrecv_raw: EOFzrecv_raw: %d
%szrecv_raw: TIMEOUT
zrecv_raw: %s)rU   rT   r7   rL   rJ   rY   rV   rW   r?   r  rG   rH   rf   rg   )r'   r  rH   rep_pdurK   s        r.   recv_rawzRawDCERPCTest.recv_raw  s   ?oG	"!!'***fkk&!,,GFb!!!7||q    111 D  ]
  !3s7||T\\RYEZEZ6[![\\\~ 	 	 	Fb!!!J2333DDDD| 	 	 	^a/000 	 	 	^a/000	 DDDDsO   A9C 	AC E7 E39DE7 E3/EE3E..E33E7 7E9c                    d }d }|| j         }|| j        }	 |                     ||          }|	 dS t          t          j        j        j        |d          }|r?t          j        	                    dt          j
                            |          z             |                     |j        t          |                     n# w xY w||fS )N)r  rH   NNTr  zrecv_pdu: %s)r   rU   rt  r   r   r   ncacn_packetrV   rW   r?   r  r  rt   frag_lengthrJ   )r'   r  r  rH   rs  r  s         r.   r$  zRawDCERPCTest.recv_pdu_raw  s    )I?oG		mmGWmEEG# D U\0=wX\]]]C L
  %)2E2Ec2J2J!JKKKS_c'll;;;DDDDW~s   C BC Cc                 <    |                      |||          \  }}|S )N)r  r  rH   )r$  )r'   r  r  rH   r  rs  s         r.   r   zRawDCERPCTest.recv_pdu  s/    **Y3:3: + < <g 
r0   c                    || j         }|| j        }|t          j        j                                        }||_        ||_        ||_        ||_        ||_	        t          |          }	|r?t          j                            dt          j                            |          z             |rDt          j                            dt!          |	          |                     |	          fz             nd}	|	S )Nzgenerate_auth: %szgenerate_auth: %d
%sr0   )r   rU   r   r   authr   r   auth_pad_lengthr   r   r   rV   rW   r?   r  r  rJ   r  )
r'   r   r   r}  r   r   r  r  rd   ais
             r.   r   zRawDCERPCTest.generate_auth  s     )I?oG #((**A#AK%AL /A /A%AM!B O
  !4uy7J7J17M7M!MNNN X
  !8CGGT\\RTEUEU;V!VWWWB	r0   c                 V   || j         }|| j        }t          |          t          j        j        j        k    rd S |rDt          j                            dt          |          | 	                    |          fz             t          t          j        j        j        |d          }|r?t          j                            dt          j                            |          z             ||                     |j        |d                    |                     |j        |d                    |                     |j        d           |                     |j        |d                    |                     |j        t          j                   |                     |j        |           |S )	Nzparse_auth: %d
%sTrw  zparse_auth: %sr   r   r   r   )r   rU   rJ   r   r   r   rV   rW   r?   r  r   r|  r  r  rt   r   r   auth_reservedr   assertLessEqualr}  DCERPC_AUTH_PAD_ALIGNMENT)r'   r   r  r  r   stub_lenrd   s          r.   r   zRawDCERPCTest.parse_auth  sy   )I?oG	NNel1LLL4 	_J1S^^T\\R[E\E\4]]^^^u|*/DQQQ 	HJ-	0C0CA0F0FFGGG#Q[,{*CDDDQ\<+EFFFQ_a000Q.=N0OPPP  !2F4TUUU  !2H===r0   c                 b   |'|                      |j        d           |j        j        S |d         t          j        k    r'|                      |j        d           |j        j        S |                     |j        d           t          j        }|j        |j        z
  }|t          j	        z
  }|||         }|d|         }	||d          }
||d          }| 
                    ||t          |                    }||                      |j        |           |                      |j        |
           |d         t          j        k    r|                     d           n3|d         t          j        k    r|d                             ||	|
           |dt          |          |j        z
           }|S )Nr   r   )r   r  Fr   )rt   r   r   r'  r   DCERPC_AUTH_LEVEL_CONNECTr   DCERPC_REQUEST_LENGTHry  r   r   rJ   r}  r   DCERPC_AUTH_LEVEL_PRIVACYr   r%  check_packet)r'   r  r1  r   r}  ofs_stubofs_sigofs_trailerrep_data	rep_wholerep_sigrep_auth_info_blobrep_auth_infor3  s                 r.   r(  z!RawDCERPCTest.check_response_auth"  s    S_a0005**%)IIIS_a0005**3?A...//CO3 AAH[01QwY'	788$%kll3(:5A14X ( @ @ &]:OLLL2G<<<%)IIIOOE"""",'6+JJJ"//)WMMMAc(mmM,IIIJr0   r8  c
                    t          |dd           r|j        }
nd}
t          j        j                                        }||_        ||_        ||_        ||_        ||_	        d|_
        t          |
          t          j        j        j        k    r,t          |
          t          j        j        j        z
  |_        nd|_        ||_        ||_        t!          |          }t          |          |_
        |S )Nr   r0   r   )getattrr   r   r   rx  r   r   ptyper   drepry  rJ   r   r   r   r   r   )r'   r  r   payloadr   r   r   r  r  r  r~  ppdus                r.   generate_pduzRawDCERPCTest.generate_pduH  s     7K.. 	"BBBL,,..
)r77U\(CCCGGel&9&TTAMMAM	qkkCr0   c                    |d}d}|t          |          t          j        z  }d}|dk    rt          j        |z
  }|d|z  z  }|d         t          j        j        j        k    r)|d                             t          |                    }nd}d|z  }|                     |d         |d         ||d	         |
          }nd}|                     |||||||||	|

  
        }||S t          j        	                    |          }t          j
        }t          |          |j        z
  }|t          j        z
  }|||         }|d|         }|d         t          j        k    r|                     d           nt|d         t          j        k    r|d                             ||          }nA|d         t          j        k    r)|                     |d         t          j                   d}n|S |                     t          |          |j                   |                     t          |          |           t          |j        j                  |z
  }|j        j        d|         |z   }||j        _        |S )Nr0   r       r   r      r   r   r   )r   r   r}  r   r   )
r   r   r   r   r  r  r  r   r  r  Fs                  )rJ   r   r  r   r%  sig_sizer   generate_requestr  r   r  r   r   r  r   sign_packetr  rt   r   r   r'  )r'   r   r   r   r   r  r  r  r   r  r  r  r  r}  zero_sigr   r   req_blobr  r  r  req_data	req_wholereq_sigstub_sig_ofss                            r.   r#  z#RawDCERPCTest.generate_request_authh  s    <D#$ii&"BBGO{{"("BW"LGo--DN+u|/B/[[['1::3t99EE)H**\+5N6B<6P;J;GHY;Z5=	 + ? ?II I##G.7/9/9*/+1)-.7.7,3 $ 	5 	5 J9%%c**/h--#/1 AAH[01QwY'	'6+KKKOOE"""".)V-LLL"8,889MMGG.)V-MMM\+6$=? ? ?*GGJWs777Wx00035233h>u&q~6@"&
r0   c	                 ^   |                      |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        z
             n9||                     |j        |           n|                     |j        d           |                     |j        |           d S )NzNo valid pdur   r0   r   )r   r  r   r   rt   r   r   r  r   r  r   ry  r   r   DCERPC_NCACN_PAYLOAD_OFFSETrJ   r   r   r   )
r'   r  r  r   r   r   r   r  r   r~  s
             r.   r   zRawDCERPCTest.verify_pdu  s    	Q///13T** 	BBBX...)>:::%(((i000&&& % 3 O	Q 	Q 	Qr77U\(CCCQ] WWu|':'UUW W W W$Q]K8888Q]A...G,,,r0   r0   c
                 <   || j         }|| j        }t          j        j                                        }
||
_         ||
_        ||
_        t          |          |
_        ||
_        ||
_	        | 
                    t          j        j        j        |||
||	          }|S N)r  r   r   r  r  r  )ri   rj   r   r   bindr   rJ   num_contextsr   r   r  DCERPC_PKT_BIND)r'   r   r   ri   rj   r   r   r   r  r  br  s               r.   r   zRawDCERPCTest.generate_bind  s      ,M ,ML$$&&'')X
EL$7$G(1&-&'(17	  D D r0   c
                 <   || j         }|| j        }t          j        j                                        }
||
_         ||
_        ||
_        t          |          |
_        ||
_        ||
_	        | 
                    t          j        j        j        |||
||	          }|S r  )ri   rj   r   r   r  r   rJ   r  r   r   r  DCERPC_PKT_ALTER)r'   r   r   ri   rj   r   r   r   r  r  rd   r  s               r.   r   zRawDCERPCTest.generate_alter  s      ,M ,ML$$&&'')X
EL$7$H(1&-&'(17	  D D r0   c                     t           j        j                                        }||_        |                     t           j        j        j        |||||          }|S r  )r   r   auth3r   r  DCERPC_PKT_AUTH3)r'   r   r   r   r  r  rd   r  s           r.   r   zRawDCERPCTest.generate_auth3  s\     L%%''EL$7$H(1&-&'(17	  D D r0   c                    |t          |          }t          j        j                                        }||_        ||_        ||_        |||_        ||z   |_        | 	                    t          j        j        j
        ||||	|
          }t          |          t          j        j        j        k    r+t          |          t          j        j        j        z
  |_        |S r  )rJ   r   r   requestr   r   r  r  r'  r  DCERPC_PKT_REQUESTr   r   )r'   r   r   r   r   r  r  r  r   r  r  rr  s                r.   r  zRawDCERPCTest.generate_request$  s     TJL''))!!AH"Y.EL$7$J(1&-&'(17	  D D y>>EL/JJJ	NNU\-@-[[AMr0   c                     t           j        j                                        }||_        |                     t           j        j        j        |||||          }|S r  )r   r   	co_cancelr   r  DCERPC_PKT_CO_CANCEL)r'   r   r   r   r  r  r   r  s           r.   generate_co_cancelz RawDCERPCTest.generate_co_cancelE  s\     L))++EL$7$L(1&-&'(17	  D D r0   c                     t           j        j                                        }||_        |                     t           j        j        j        |||||          }|S r  )r   r   orphanedr   r  DCERPC_PKT_ORPHANED)r'   r   r   r   r  r  or  s           r.   generate_orphanedzRawDCERPCTest.generate_orphanedV  s\     L((**EL$7$K(1&-&'(17	  D D r0   c                     t           j        j                                        }|                     t           j        j        j        |||||          }|S r  )r   r   shutdownr  DCERPC_PKT_SHUTDOWN)r'   r   r   r  r  rT   r  s          r.   generate_shutdownzRawDCERPCTest.generate_shutdowng  sU    
 L((**EL$7$K(1&-&'(17	  D D r0   c                 >    |                      | j        d           d S )NzNot connectedmsg)r   rT   r4   s    r.   r   zRawDCERPCTest.assertIsConnectedv  s"    TV999r0   c                 >    |                      | j        d           d S )NzIs connectedr  )r   rT   r4   s    r.   rz   z RawDCERPCTest.assertNotConnectedz  s"    $&n555r0   c                     |                      |j        |j                   |                      |j        |j                   d S r2   )rt   uuid
if_versionr'   s1s2s      r.   r   z#RawDCERPCTest.assertNDRSyntaxEquals~  s;    "'***666r0   c                     |                      t          |          |           | j        rd S d|z  }|                      ||           d S )Nr  )rt   rJ   r   )r'   padlengthzero_pads       r.   r   zRawDCERPCTest.assertPadding  sU    S6*** ! 	F6>h'''''r0   c                     |                      t          |                                          t          |                                                     d S r2   )rt   rI   lowerr  s      r.   assertEqualsStrLowerz"RawDCERPCTest.assertEqualsStrLower  s:    R#b''--//:::::r0   )NNN)NNNN)NFrv  )NNr   NNNN)NNNr   )0rM   rN   rO   __doc__rY   rm   rx   re   r   r   r   r   r   r   r   r   r   r   r   r!  r  r  r4  r  r   rt  r$  r   r   r   r(  DCERPC_DREP_LEr  r#  r   r   r   r   r  r  r  r  r   rz   r   r   r  __classcell__)r   s   @r.   rR   rR   U   s       "": : :! ! !4: : :       .) ) ) ) )   EIIM   & IMHL# # # #J     -1+0   > 15"',"5"K+@#A'(!#'T).&+l&9&O+@'A"'z z z zx ?C(.e$',|':'P"\0E(F,-(-   8 (,!%$)*/#'#'#l1G#l1FG'++/"&$("&SJ SJ SJ SJjO O O Ob   8   8   &    !%!%&'&* $.2   < =A/0   6 ?C,0$ $ $ $N  $% % 3 I % 3 H!I <.=q!QG#T   B *0)E)/)D*E)-)-$(%)#'+/(,dJ J J JZ "##l1G#l1FG,;Q1E#   D "'!4!J!&!4!I"J$($(%&! # $d   @ #(,"5"K"',"5"J#K%)%)&' "!$!%t   @ #(,"5"K"',"5"J#K!$!%t	   $ %*L$7$M$)L$7$L%M$($(# $"#&#'   D ',l&9&O&+l&9&N'O%(%)4	   $ &+\%8%N%*\%8%M&N$'$($	   $ &+\%8%N%*\%8%M&N$($         
( ( (; ; ; ; ; ; ;r0   rR   ) rV   rG   samba.dcerpc.dcerpcr   samba.dcerpc.baser   samba.dcerpc.epmappersamba.dcerpc.securitysecuritysamba.testsr   samba.credentialsr   r   	samba.ndrr   r   r   samba.ntstatusr	   r
   r   r   samba.samba3r   r   r   r"   r   r  r   rR   rP   r0   r.   <module>r     s  & 


  $ $ $ $ $ $ $ $ $         ( ( ( ( ( ( ( ( (           ) ) ) ) ) )             : : : : : : : : : :         
        ) ) ) ) ) ) 8 8 8 8 8 8 2 2 2 2 2 2+ + + + +f + + +Z|; |; |; |; |;H |; |; |; |; |;r0   