o
    j                     @   s
  d dl mZ d dl mZ d dlmZ d dlmZ d dlmZ d dl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mZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z" d dl#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- d dl.m/Z/ d dlm0Z0m1Z1mZ e1dZ2G dd de/Z3G dd de)Z4dZ5dZ6d Z7d Z8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAdZBdZCd ZDd!ZEdZFdZGdZHd"ZId#ZJd$ZKe0d%ZLd ZMdZNdZOd ZPdZQdZRd ZSdZTd&ZUd'ZVd(ZWdZXdZYdZZdZ[d)Z\dZ]dZ^dZ_d*Z`d(Zad+ZbdZceZdeZeG d,d- d-e+ZfG d.d/ d/e)ZgG d0d1 d1e(ZhG d2d3 d3e,ZiG d4d5 d5e(ZjG d6d7 d7e)ZkG d8d9 d9e,ZlG d:d; d;e(ZmG d<d= d=e)ZnG d>d? d?e,ZoG d@dA dAe(ZpG dBdC dCe)ZqG dDdE dEe,ZrG dFdG dGe(ZsG dHdI dIe)ZtG dJdK dKe,ZuG dLdM dMe(ZvG dNdO dOe)ZwG dPdQ dQe,ZxG dRdS dSe(ZyG dTdU dUe)ZzG dVdW dWe,Z{G dXdY dYe(Z|G dZd[ d[e)Z}G d\d] d]e,Z~G d^d_ d_e(ZG d`da dae)ZG dbdc dce*ZG ddde dee)ZG dfdg dge(ZG dhdi die,ZG djdk dke(ZG dldm dme)ZG dndo doe(ZG dpdq dqe,ZG drds dse)ZG dtdu due(ZG dvdw dwe)ZG dxdy dye(ZG dzd{ d{e,ZG d|d} d}e(ZG d~d de)ZeZG dd de)ZG dd de)ZG dd de)ZG dd de)ZG dd de)ZG dd de)ZG dd de)ZG dd de)ZG dd de*Zdefdeffe_G dd de)ZG dd de(ZG dd de,ZG dd de)ZG dd de(ZG dd de,ZG dd de)ZG dd de,ZG dd de)ZG dd de)ZG dd de(ZdZG dd deZG dd deZG dd de'ZG dd de'ZG dd de'ZG dd de'ZG dd de'ZG dd de'ZG dd de,Z"G dd de(ZG dd de'ZG dd de'ZG ddĄ de'ZG ddƄ de'ZG ddȄ de'ZG ddʄ de'ZG dd̄ de'ZG dd΄ de'ZG ddЄ de'ZG dd҄ de'ZG ddԄ de'ZG ddք de'ZG dd؄ de'ZG ddڄ de'ZG dd܄ de'ZG ddބ de'ZG dd de'ZG dd de'ZG dd de'ZG dd de'ZG dd de'ZG dd de'ZG dd de+ZG dd de'ZG dd de'ZG dd de'ZG dd de'ZG dd de'ZG dd de'Zi d eefdeefdeefdeefdeefdeefdeefdeefdeefdeefdeefdeefd*eefdeefd eefdeefdeefZ͐dd Zΐdd Zϐd4dd	ZG d
d de$ZG dd de҃ZӐdd ZԐdd ZՐdd Z֐d5ddZאdd ZefddZeXdd dg eg fddZd d g eg efddZg fdd Zd eXeDfd!d"Zd d eXeDg fd#d$Ze[e efd%d&Zed d d d'fd(d)Zd*d+ Ze\fd,d-Zeg efd.d/Zd g eg fd0d1Zd g eg fd2d3ZdS (6      )division)print_function)unpack)datetime)PY2N)hresult_errorsmapi_constantsuuid)
EMPTY_UUID)	Structure)NULLSTRDWORDLPDWORDUUIDPUUIDLONGULONGFILETIME	PFILETIMEBYTESHORTLPSTRLPWSTRUSHORTLPLONGDWORD_ARRAY)LDAP_SID)NDRNDRCALL
NDRPOINTER	NDRSTRUCTNDRUNIONNDRUniConformantVaryingArrayNDRUniConformantArrayNDRUniVaryingArray)DCERPCException)string_to_binuuidtup_to_binr
   )z$F5CC5A18-4264-101A-8C59-08002B2F8426z56.0c                   @      e Zd Zdd ZdS )DCERPCSessionErrorc                 C   sh   | j }|tjv rtj| }d| j |f S |tjv r/tj| d }tj| d }d| j ||f S d| j  S )Nz"NSPI SessionError: code: 0x%x - %sr      z'NSPI SessionError: code: 0x%x - %s - %sz+NSPI SessionError: unknown error code: 0x%x)
error_coder   ERROR_MESSAGESr   )selfkeyerror_msg_shorterror_msg_verbose r2   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/dcerpc/v5/nspi.py__str__.   s   



zDCERPCSessionError.__str__N__name__
__module____qualname__r4   r2   r2   r2   r3   r*   -       r*   c                   @   s.   e Zd ZdefdeffZd	ddZdd ZdS )
handle_tcontext_handle_attributescontext_handle_uuidNFc                 C   s   t | || d| d< d S )N                   r<   )r!   __init__)r.   dataisNDR64r2   r2   r3   r>   C   s   zhandle_t.__init__c                 C   s   | d dkS )Nr<   r=   r2   r.   r2   r2   r3   isNullG   s   zhandle_t.isNull)NF)r6   r7   r8   r   r   	structurer>   rB   r2   r2   r2   r3   r:   =   s    
r:      r+                     i    i   i	  i%O  i  i   i   i   z$C840A7DC-42C0-1A10-B4B9-08002B2FE182i  i      l           @   c                   @      e Zd ZeZdS )PropertyTagArrayNr6   r7   r8   r   itemr2   r2   r2   r3   rP          rP   c                   @      e Zd ZdefdeffZdS )PropertyTagArray_rcValues
aulPropTagN)r6   r7   r8   r   rP   rC   r2   r2   r2   r3   rU          rU   c                   @      e Zd ZdeffZdS )PPropertyTagArray_rDataN)r6   r7   r8   rU   referentr2   r2   r2   r3   rZ          rZ   c                   @   s   e Zd ZdZdS )BinarycN)r6   r7   r8   rR   r2   r2   r2   r3   r^      rS   r^   c                   @   rY   )PBinaryr[   N)r6   r7   r8   r^   r\   r2   r2   r2   r3   r`      r]   r`   c                   @   rT   )Binary_rrV   lpbN)r6   r7   r8   r   r`   rC   r2   r2   r2   r3   ra      rX   ra   c                   @   rO   )
ShortArrayN)r6   r7   r8   r   rR   r2   r2   r2   r3   rc      rS   rc   c                   @   rY   )PShortArrayr[   N)r6   r7   r8   rc   r\   r2   r2   r2   r3   rd      r]   rd   c                   @   rT   )ShortArray_rrV   lpiN)r6   r7   r8   r   rd   rC   r2   r2   r2   r3   re      rX   re   c                   @   rO   )	LongArrayN)r6   r7   r8   r   rR   r2   r2   r2   r3   rg      rS   rg   c                   @   rY   )
PLongArrayr[   N)r6   r7   r8   rg   r\   r2   r2   r2   r3   rh      r]   rh   c                   @   rT   )LongArray_rrV   lplN)r6   r7   r8   r   rh   rC   r2   r2   r2   r3   ri      rX   ri   c                   @   rO   )StringArrayNr6   r7   r8   r   rR   r2   r2   r2   r3   rk      rS   rk   c                   @   rY   )PStringArrayr[   N)r6   r7   r8   rk   r\   r2   r2   r2   r3   rm      r]   rm   c                   @   rT   )StringArray_rrV   lppszAN)r6   r7   r8   r   rm   rC   r2   r2   r2   r3   rn      rX   rn   c                   @   rO   )BinaryArrayN)r6   r7   r8   ra   rR   r2   r2   r2   r3   rp      rS   rp   c                   @   rY   )PBinaryArrayr[   N)r6   r7   r8   rp   r\   r2   r2   r2   r3   rq      r]   rq   c                   @   rT   )BinaryArray_rrV   lpbinN)r6   r7   r8   r   rq   rC   r2   r2   r2   r3   rr      rX   rr   c                   @   rO   )FlatUIDArrayN)r6   r7   r8   
PFlatUID_rrR   r2   r2   r2   r3   rt      rS   rt   c                   @   rY   )PFlatUIDArrayr[   N)r6   r7   r8   rt   r\   r2   r2   r2   r3   rv      r]   rv   c                   @   rT   )FlatUIDArray_rrV   lpguidN)r6   r7   r8   r   rv   rC   r2   r2   r2   r3   rw      rX   rw   c                   @   rO   )WStringArrayNr6   r7   r8   r   rR   r2   r2   r2   r3   ry     rS   ry   c                   @   rY   )PWStringArrayr[   N)r6   r7   r8   ry   r\   r2   r2   r2   r3   r{   
  r]   r{   c                   @   rT   )WStringArray_rrV   lppszWN)r6   r7   r8   r   r{   rC   r2   r2   r2   r3   r|     rX   r|   c                   @   rO   )DateTimeArrayN)r6   r7   r8   r   rR   r2   r2   r2   r3   r~     rS   r~   c                   @   rY   )PDateTimeArrayr[   N)r6   r7   r8   r~   r\   r2   r2   r2   r3   r     r]   r   c                   @   rT   )DateTimeArray_rrV   lpftN)r6   r7   r8   r   r   rC   r2   r2   r2   r3   r     rX   r   c                   @   s   e Zd ZdeffZi ddefddefddefdd	efd
de	fdde
fddefddefddefddefddefddefddefddefddefd d!efd"d#efd#efd#efd$Zd%S )&PROP_VAL_UNIONtagrE   irF   l   b   lpszArK   bin   lpszWH   rx   rN   ft
   erri  MVii  MVli  MVszAi  MVbiniH  MVguidi  MVszWi@  MVftr+   	lReserved)rD   r   N)r6   r7   r8   r   	commonHdrr   r   r   r   ra   r   ru   r   r   re   ri   rn   rr   rw   r|   r   unionr2   r2   r2   r3   r   %  sR    	
r   c                   @   "   e Zd ZdefdefdeffZdS )PropertyValue_r	ulPropTag
ulReservedValueN)r6   r7   r8   r   r   rC   r2   r2   r2   r3   r   A  
    r   c                   @   rY   )PPropertyValue_rr[   N)r6   r7   r8   r   r\   r2   r2   r2   r3   r   H  r]   r   c                   @   rO   )PropertyValueN)r6   r7   r8   r   rR   r2   r2   r2   r3   r   N  rS   r   c                   @   rY   )PPropertyValuer[   N)r6   r7   r8   r   r\   r2   r2   r2   r3   r   Q  r]   r   c                   @   r   )PropertyRow_rReservedrV   lpPropsN)r6   r7   r8   r   r   rC   r2   r2   r2   r3   r   V  r   r   c                   @   rY   )PPropertyRow_rr[   N)r6   r7   r8   r   r\   r2   r2   r2   r3   r   ]  r]   r   c                   @   rO   )PropertyRowSetN)r6   r7   r8   r   rR   r2   r2   r2   r3   r   c  rS   r   c                   @   rT   )PropertyRowSet_rcRowsaRowN)r6   r7   r8   r   r   rC   r2   r2   r2   r3   r   f  rX   r   c                   @   rY   )PPropertyRowSet_rr[   N)r6   r7   r8   r   r\   r2   r2   r2   r3   r   l  r]   r   c                   @      e Zd ZdS )Restriction_rNr6   r7   r8   r2   r2   r2   r3   r   r      r   c                   @   rY   )PRestriction_rr[   N)r6   r7   r8   r   r\   r2   r2   r2   r3   r   u  r]   r   c                   @   rO   )AndRestrictionN)r6   r7   r8   r   rR   r2   r2   r2   r3   r   {  rS   r   c                   @   rY   )PAndRestrictionr[   N)r6   r7   r8   r   r\   r2   r2   r2   r3   r   ~  r]   r   c                   @   rT   )AndRestriction_rcReslpResN)r6   r7   r8   r   r   rC   r2   r2   r2   r3   r     rX   r   c                   @   rY   )NotRestriction_rr   N)r6   r7   r8   r   rC   r2   r2   r2   r3   r     r]   r   c                   @   r   )ContentRestriction_rulFuzzyLevelr   lpPropNr6   r7   r8   r   r   rC   r2   r2   r2   r3   r     r   r   c                   @   "   e Zd ZdefdefdeffZdS )BitMaskRestriction_rrelBMRr   ulMaskNr6   r7   r8   r   rC   r2   r2   r2   r3   r     r   r   c                   @   r   )PropertyRestriction_rrelopr   r   Nr   r2   r2   r2   r3   r     r   r   c                   @   r   )ComparePropsRestriction_rr   
ulPropTag1
ulPropTag2Nr   r2   r2   r2   r3   r     r   r   c                   @   rT   )SubRestriction_rulSubObjectr   N)r6   r7   r8   r   r   rC   r2   r2   r2   r3   r     rX   r   c                   @   r   )SizeRestriction_rr   r   cbNr   r2   r2   r2   r3   r     r   r   c                   @   r   )ExistRestriction_rulReserved1r   ulReserved2Nr   r2   r2   r2   r3   r     r   r   c                   @   sX   e Zd ZdeffZdefdefdefdefde	fde
fdefd	efd
efdefd
ZdS )RestrictionUnion_rr   resAndresOrresNot
resContentresPropertyresCompareProps
resBitMaskresSizeresExistresSubRestriction)
r   r+   rE   rF   rG   rH   rI         	   N)r6   r7   r8   r   r   r   OrRestriction_rr   r   r   r   r   r   r   r   r   r2   r2   r2   r3   r     s    
r   rtresc                   @   "   e Zd ZdefdefdeffZdS )PropertyName_rrx   r   lIDN)r6   r7   r8   ru   r   r   rC   r2   r2   r2   r3   r     r   r   c                   @   rY   )PPropertyName_rr[   N)r6   r7   r8   r   r\   r2   r2   r2   r3   r     r]   r   c                   @   rO   )PropertyNameSetNr6   r7   r8   r   rR   r2   r2   r2   r3   r     rS   r   c                   @   rT   )PropertyNameSet_rcNamesrW   N)r6   r7   r8   r   r   rC   r2   r2   r2   r3   r     rX   r   c                   @   rY   )PPropertyNameSet_rr[   N)r6   r7   r8   r   r\   r2   r2   r2   r3   r     r]   r   c                   @   rO   )StringsArrayNrl   r2   r2   r2   r3   r     rS   r   c                   @   rT   )StringsArray_rCountStringsN)r6   r7   r8   r   r   rC   r2   r2   r2   r3   r     rX   r   c                   @   rO   )WStringsArrayNrz   r2   r2   r2   r3   r     rS   r   c                   @   rT   )WStringsArray_rr   r   N)r6   r7   r8   r   r   rC   r2   r2   r2   r3   r     rX   r   c                
   @   sF   e Zd Zdefdefdefdefdefdefdefdefd	eff	Zd
S )STATSortTypeContainerID
CurrentRecDeltaNumPos	TotalRecsCodePageTemplateLocale
SortLocaleN)r6   r7   r8   r   r   rC   r2   r2   r2   r3   r     s    r   c                   @   rY   )PSTATr[   N)r6   r7   r8   r   r\   r2   r2   r2   r3   r     r]   r   z<L=0c                	   @   s$   e Zd ZddddddddeffZd	S )
EphemeralEntryID)IDTypez<B=0x87R1<B=0R2r   R3r   )ProviderUIDz16s=b"\x00"*16R4z<L=0x0000001DisplayTypez<LMIdN)r6   r7   r8   
MinEntryIDrC   r2   r2   r2   r3   r   (  s    r   c                   @   s   e Zd ZeZdZdd ZdS )PermanentEntryID))r   r   r   r   r   )r  z16s=self["default_guid"]r  r  )DistinguishedNamezc                 C   s   | d S )Nr	  r2   rA   r2   r2   r3   r4   B     zPermanentEntryID.__str__N)r6   r7   r8   	GUID_NSPIdefault_guidrC   r4   r2   r2   r2   r3   r  5  s    r  c                   @   &   e Zd ZdZdefdefdeffZdS )NspiBindr   dwFlagspStatpServerGuidN)r6   r7   r8   opnumr   r   ru   rC   r2   r2   r2   r3   r  J      r  c                   @   r   )NspiBindResponser  contextHandle	ErrorCodeN)r6   r7   r8   ru   r:   r   rC   r2   r2   r2   r3   r  R  r   r  c                   @   s    e Zd ZdZdefdeffZdS )
NspiUnbindr+   r  r   Nr6   r7   r8   r  r:   r   rC   r2   r2   r2   r3   r  Z  s
    r  c                   @   rT   )NspiUnbindResponser  r  N)r6   r7   r8   r:   r   rC   r2   r2   r2   r3   r  a  rX   r  c                   @   ,   e Zd ZdZdefdefdefdeffZdS )NspiUpdateStatrE   hRpcr   r  plDeltaN)	r6   r7   r8   r  r:   r   r   r   rC   r2   r2   r2   r3   r  h      r  c                   @   r   )NspiUpdateStatResponser  r  r  N)r6   r7   r8   r   r   r   rC   r2   r2   r2   r3   r   q  r   r   c                   @   rO   )r   NrQ   r2   r2   r2   r3   r   y  rS   r   c                   @   rY   )PDWORD_ARRAYr[   N)r6   r7   r8   r   r\   r2   r2   r2   r3   r!  |  r]   r!  c                   @   s>   e Zd ZdZdefdefdefdefdefdefdeffZ	d	S )
NspiQueryRowsrF   r  r  r  dwETableCountlpETabler   	pPropTagsN)
r6   r7   r8   r  r:   r   r   r!  rZ   rC   r2   r2   r2   r3   r"    s    r"  c                   @   r   )NspiQueryRowsResponser  ppRowsr  Nr6   r7   r8   r   r   r   rC   r2   r2   r2   r3   r&    r   r&  c                   @   s8   e Zd ZdZdefdefdefdefdefdeffZ	dS )	NspiSeekEntriesrG   r  r   r  pTargetr$  r%  N)
r6   r7   r8   r  r:   r   r   r   rU   rC   r2   r2   r2   r3   r)        r)  c                   @   r   )NspiSeekEntriesResponser  r'  r  Nr(  r2   r2   r2   r3   r,    r   r,  c                   @   r  )NspiDNToMIdr   r  r   pNamesN)r6   r7   r8   r  r:   r   r   rC   r2   r2   r2   r3   r-    r  r-  c                   @   rT   )NspiDNToMIdResponse	ppOutMIdsr  Nr6   r7   r8   rZ   r   rC   r2   r2   r2   r3   r/    rX   r/  c                   @   s,   e Zd ZdZdefdefdefdeffZdS )NspiGetPropListr   r  r  dwMIdr   Nr  r2   r2   r2   r3   r2    r  r2  c                   @   rT   )NspiGetPropListResponser0  r  Nr1  r2   r2   r2   r3   r4    rX   r4  c                   @   r  )NspiGetPropsr   r  r  r  r%  N)	r6   r7   r8   r  r:   r   r   rZ   rC   r2   r2   r2   r3   r5    r  r5  c                   @   rT   )NspiGetPropsResponser'  r  Nr6   r7   r8   r   r   rC   r2   r2   r2   r3   r6    rX   r6  c                   @   s2   e Zd ZdZdefdefdefdefdeffZdS )NspiCompareMIdsr   r  r   r  MId1MId2N)r6   r7   r8   r  r:   r   r   rC   r2   r2   r2   r3   r8         r8  c                   @   rT   )NspiCompareMIdsResponseplResultr  N)r6   r7   r8   r   r   rC   r2   r2   r2   r3   r<  
  rX   r<  c                   @   r  )NspiGetSpecialTable   r  r  r  	lpVersionN)	r6   r7   r8   r  r:   r   r   r   rC   r2   r2   r2   r3   r>  "  r  r>  c                   @   s"   e Zd ZdefdefdeffZdS )NspiGetSpecialTableResponser@  r'  r  N)r6   r7   r8   r   r   rC   r2   r2   r2   r3   rA  +  s
    rA  c                   @   s8   e Zd ZdZdefdefdefdefdefdeffZdS )	NspiGetTemplateInforD   r  r  ulTypepDN
dwCodePage
dwLocaleIDN)r6   r7   r8   r  r:   r   r   rC   r2   r2   r2   r3   rB  6  r+  rB  c                   @   rT   )NspiGetTemplateInfoResponseppDatar  Nr7  r2   r2   r2   r3   rG  A  rX   rG  c                   @   2   e Zd ZdZdefdefdefdefdeffZdS )NspiModLinkAtt   r  r  r   r3  
lpEntryIdsN)r6   r7   r8   r  r:   r   rr   rC   r2   r2   r2   r3   rJ  H  r;  rJ  c                   @   rY   )NspiModLinkAttResponser  N)r6   r7   r8   r   rC   r2   r2   r2   r3   rM  R  r]   rM  c                   @   s&   e Zd ZdZdefdefdeffZdS )NspiQueryColumnsrM   r  r   r  Nr  r2   r2   r2   r3   rN  g  r  rN  c                   @   rT   )NspiQueryColumnsResponse	ppColumnsr  Nr1  r2   r2   r2   r3   rO  o  rX   rO  c                   @   r  )NspiGetNamesFromIDs   r  r   rx   r%  N)	r6   r7   r8   r  r:   r   ru   rZ   rC   r2   r2   r2   r3   rQ  v  r  rQ  c                   @   r   )NspiGetNamesFromIDsResponseppReturnedPropTagsppNamesr  N)r6   r7   r8   rZ   r   r   rC   r2   r2   r2   r3   rS    r   rS  c                   @   rO   )PropertyName_r_ARRAYNr   r2   r2   r2   r3   rV    rS   rV  c                   @   rI  )NspiGetIDsFromNames   r  r   r  
cPropNamesr.  N)r6   r7   r8   r  r:   r   rV  rC   r2   r2   r2   r3   rW    r;  rW  c                   @   rT   )NspiGetIDsFromNamesResponse
ppPropTagsr  Nr1  r2   r2   r2   r3   rZ    rX   rZ  c                   @   2   e Zd ZdZdefdefdefdefdeffZ	dS )NspiResolveNames   r  r   r  r%  paStrN)
r6   r7   r8   r  r:   r   r   rZ   r   rC   r2   r2   r2   r3   r]    r;  r]  c                   @   r   )NspiResolveNamesResponseppMIdsr'  r  Nr6   r7   r8   rZ   r   r   rC   r2   r2   r2   r3   r`    r   r`  c                   @   r\  )NspiResolveNamesW   r  r   r  r%  r_  N)
r6   r7   r8   r  r:   r   r   rZ   r   rC   r2   r2   r2   r3   rc    r;  rc  c                   @   r   )NspiResolveNamesWResponsera  r'  r  Nrb  r2   r2   r2   r3   re    r   re  r   r   r   r   r?  rK  rR  rX  r^  rd  c                 C   s(   | t kr| S | dd  dkr| d S | S )N )r   )stringr2   r2   r3   checkNullString  s
   ri  c                 C   s(   t | } | | dd d  }t|S )N=r+   )strrfindr	   r'   )legacyDNguidr2   r2   r3   get_guid_from_dn  s   
ro  Fc                 C   sD   |rd}nd}t | }trd|t|f S d|tt|df S )Nz/guid=z./o=NT5/ou=00000000000000000000000000000000/cn=z%s%sascii)r'   r   binasciihexlifyrk  )rn  minimizedn_templateguid_binr2   r2   r3   get_dn_from_guid  s   rv  c                   @   r)   )EXCH_SIDc                 C   s   |   S N)formatCanonicalrA   r2   r2   r3   r4     r  zEXCH_SID.__str__Nr5   r2   r2   r2   r3   rw    r9   rw  c                   @   r   )ExchBinaryObjectNr   r2   r2   r2   r3   rz    r   rz  c                 C   s   | d8 } | d } | S )Nl     }*{Gi r2   )tr2   r2   r3   getUnixTime  s   r|  c                 C   s  i }| d D ]\}|d j d d }|d j| }|d }t|ts1t|ts1t|ts1t|tr:t|d ||< qt|tr^|dv rSt	|d 
dd d ||< q|d d d	 ||< qt|trn|d d d	 ||< qt|trd
|d }|dv rt|}nb|dkr|d d	 d}nT|dd tkr|dd dkr|d d dkrt|}n7|d d dkr|dd dkrt|dkrt|}n|dv rt| }n|dkrtd|d }nt	|}|||< qt|trg }|d D ]}|d
|d  q|||< qt|tr(g }|d D ]}||d d d	  q|||< qt|trHg }|d D ]}||d d d	  q4|||< qt|tr_tttd|  d ||< q|||< q|S )Nr   r   r   r   r[   )l    p zutf-16lerf      rb   )l   N  l    i0zutf-8rG   rd     s      s       s      rL   )l    ihl    iiz<lrs   ro   r}   z<Q)!rC   fields
isinstancer   r   r   r   intr   rz  encoder   ra   joinrw  decoder  r  lenr   r	   bin_to_stringlowerr   rr   appendrn   r|   r   r   fromtimestampr|  getData)
rowSetElemrowpropprop_name_in_union
prop_valuePropTagvaluearrayr2   r2   r3   simplifyPropertyRow  sp   

 


0
,






r  c                 C   s$   g }| d D ]	}| t| q|S )Nr   )r  r  )propertyRowSetretrowSetr2   r2   r3   simplifyPropertyRowSetF  s   r  c                 C   s2   t  }|d krt|d d< n||d< | |}|S )Nr  r   )r  
CP_TELETEXrequest)dcer  r  respr2   r2   r3   	hNspiBindN  s   
r  c                 C   s    t  }||d< | j|dd}|S )Nr  F
checkError)r  r  )r  handlerr  r  r2   r2   r3   hNspiUnbindY  s   r  c                 C   s0   t  }||d< ||d< ||d< | j|dd}|S )Nr  r  r  Fr  )r  r  )r  r  r  r  r  r  r2   r2   r3   hNspiUpdateStat`  s   r  2   c	                 C   s  t  }	||	d< ||	d< ||	d< |d kr||	d d< n||	d< t|dkrT|D ]}
t }|
|d< |	d d	 | q&t||	d d
< t|d |	jd jd jd	 jd< n||	d< t|dkrx|D ]}t }||d< |	d | q`t||	d< nt|	d< d|	d< | |	}|S )Nr  r  r   r  r   r   r[   r%  rW   rV   r+   MaximumCountr$  r#  )r"  r  r   r  r  r   r  )r  r  r  r  r   r   r%  pPropTagsRawr$  r  rW   r  mIDelemr  r2   r2   r3   hNspiQueryRowsi  s2   &
r  c	                 C   s   t  }	||	d< ||	d d< t|	d d< d|	d d< d|	d d	 d
< t||	d d	 d< t|dkrE|D ]}
t }|
|d< |	d | q3n||	d< t|dkrt|D ]}t }||d< |	d d | qQt|d |	jd jd jd< n||	d< | |	}|S )Nr  r  r   r   i 0r*  r   r   r   r   r   r   r[   r$  r%  rW   r+   r  )r)  SortTypeDisplayNameri  r  r   r  r  r  )r  r  displayNamer   r   r$  lpETableRawr%  r  r  r  r  rW   r  r  r2   r2   r3   hNspiSeekEntries  s.    
r  c                 C   sZ   t  }||d< t||d d< |D ]}t }t||d< |d d | q| |}|S )Nr  r.  r   r[   r   )r-  r  r   ri  r  r  )r  r  r.  r  namelpstrr  r2   r2   r3   hNspiDNToMId  s   
r  c                 C   4   t  }||d< ||d< ||d< ||d< | |}|S )Nr  r3  r  r   )r2  r  )r  r  r3  r  r   r  r  r2   r2   r3   hNspiGetPropList  s   
r  c                 C   s   t  }||d< ||d< ||d d< ||d d< ||d d< |D ]}t }	||	d< |d d	 |	 qt|d
 |d d< t|d
 |jd jd jd	 jd< | |}
|
S )Nr  r  r  r   r   r   r[   r%  rW   r+   rV   r  )r5  r   r  r  r  r  )r  r  r   r   r  r   r%  r  rW   r  r  r2   r2   r3   hNspiGetProps  s   $
r  c                 C   r  )Nr  r  r  r@  )r>  r  )r  r  r  r  r@  r  r  r2   r2   r3   hNspiGetSpecialTable  s   
r  l    c           	      C   sH   t  }||d< ||d< ||d< t||d< ||d< ||d< | |}|S )Nr  r  rC  rD  rE  rF  )rB  ri  r  )	r  r  rD  rF  rC  rE  r  r  r  r2   r2   r3   hNspiGetTemplateInfo  s   
r  c           
      C   s   t  }||d< ||d< ||d< ||d< |D ]}t }| |d< t|d |d< |d d | qt||d d< | |}	|	S )	Nr  r  r   r3  rb   rV   rL  rs   )rJ  ra   r  r  r  r  )
r  r  r  r   r3  rL  r  	lpEntryIdr  r  r2   r2   r3   hNspiModLinkAtt  s   
r  c                 C   s$   t  }||d< ||d< | |}|S )Nr  r  )rN  r  )r  r  r  r  r  r2   r2   r3   hNspiQueryColumns  s
   
r  c           	      C   s   t  }||d< ||d< t|dkrA|D ]}t }||d< |d d | qt||d d< t|d |jd jd jd jd	< n|tkrKt|jd< n||d< | |}|S )
Nr  rx   r   r[   r%  rW   rV   r+   r  )rQ  r  r   r  r  r   r  )	r  r  rx   r%  r  r  rW   r  r  r2   r2   r3   hNspiGetNamesFromIDs  s   &
r  c                 C      t  }||d< ||d d< t|dkrC|D ]}t }||d< |d d | qt||d d< t|d	 |jd jd jd jd
< n|tkrMt|jd< n||d< t|dkrv|D ]}	t }
t|	|
d< |d d |
 qYt||d d< | |}|S Nr  r  r   r   r[   r%  rW   rV   r+   r  r_  r   r   )	r]  r  r   r  r  r   r   ri  r  r  r  r   r%  r  r_  r  rW   r  	paStrElemr  r  r2   r2   r3   hNspiResolveNames"  *   &
r  c                 C   r  r  )	rc  r  r   r  r  r   r   ri  r  r  r2   r2   r3   hNspiResolveNamesW=  r  r  )Frx  )
__future__r   r   structr   r   sixr   rq  impacketr   r   r	   impacket.uuidr
   impacket.structurer   impacket.dcerpc.v5.dtypesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   impacket.ldap.ldaptypesr   impacket.dcerpc.v5.ndrr   r   r    r!   r"   r#   r$   r%   impacket.dcerpc.v5.rpcrtr&   r'   r(   MSRPC_UUID_NSPIr*   r:   PtypEmbeddedTablePtypNullPtypUnspecifiedDT_MAILUSERDT_DISTLISTDT_FORUMDT_AGENTDT_ORGANIZATIONDT_PRIVATE_DISTLISTDT_REMOTE_MAILUSERDT_CONTAINERDT_TEMPLATEDT_ADDRESS_TEMPLATE	DT_SEARCHNSPI_DEFAULT_LOCALEr  CP_WINUNICODENORM_IGNORECASENORM_IGNORENONSPACENORM_IGNORESYMBOLSSORT_STRINGSORTNORM_IGNOREKANATYPENORM_IGNOREWIDTHr  MID_BEGINNING_OF_TABLEMID_END_OF_TABLEMID_CURRENTMID_UNRESOLVEDMID_AMBIGUOUSMID_RESOLVEDr  SortTypePhoneticDisplayNameSortTypeDisplayName_ROSortTypeDisplayName_WfAnonymousLoginfSkipObjectsfEphIDNspiAddressCreationTemplatesNspiUnicodeStringsNspiUnicodeProptypesNspiVerifyNamesTI_TEMPLATE	TI_SCRIPTTI_EMTTI_HELPFILE_NAMETI_HELPFILE_CONTENTSfDelete	FlatUID_rru   rP   rU   rZ   r^   r`   ra   rc   rd   re   rg   rh   ri   rk   rm   rn   rp   rq   rr   rt   rv   rw   ry   r{   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rC   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r  r  r  r  r  r   r!  r"  r&  r)  r,  r-  r/  r2  r4  r5  r6  r8  r<  r>  rA  rB  rG  rJ  rM  rN  rO  rQ  rS  rV  rW  rZ  r]  r`  rc  re  OPNUMSri  ro  rv  rw  bytesrz  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r2   r2   r2   r3   <module>   s  L(	1		
	
	



	



	@	
#(
