
    5is                     &   d dl Z d dlZd dlZd dlZd dlmZ d dl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mZmZmZmZmZmZmZmZmZ d dlmZmZ g dZ G d d	ej                   Z! G d
 d          Z" G d d          Z# G d d          Z$ G d d          Z% G d d          Z& G d d          Z' G d d          Z( G d d          Z) G d d          Z* G d d          Z+ G d d          Z,d  Z-d! Z.e/d"k    r e.             dS dS )#    N)datetime)DictList)logger)MSADSchemaEntryMSADInfo_ATTRSMSADInfoMSADContainerMSADContainer_ATTRSMSADDomainTrust_ATTRSMSADDomainTrustMSADOUMSADOU_ATTRSMSADUserMSADUser_ATTRS	MSADGroupMSADGroup_ATTRSMSADMachine_ATTRSMSADMachineMSADGPO_ATTRSMSADGPO)MSLDAP_BUILTIN_ATTRIBUTE_TYPESLDAP_WELL_KNOWN_ATTRS)single_bool
single_str	multi_strc                       e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdS )ADSTYPEr                           	   
                                                         N) __name__
__module____qualname__INVALID	DN_STRINGCASE_EXACT_STRINGCASE_IGNORE_STRINGPRINTABLE_STRINGNUMERIC_STRINGBOOLEANINTEGEROCTET_STRINGUTC_TIMELARGE_INTEGERPROV_SPECIFICOBJECT_CLASSCASEIGNORE_LIST
OCTET_LISTPATHPOSTALADDRESS	TIMESTAMPBACKLINK	TYPEDNAMEHOLD
NETADDRESSREPLICAPOINTER	FAXNUMBEREMAILNT_SECURITY_DESCRIPTORUNKNOWNDN_WITH_BINARYDN_WITH_STRING     O/home/kali/Ninja/venv/lib/python3.11/site-packages/msldap/commons/adexplorer.pyr   r      s        GINGGLHMMLOJDMIHIDJNIEGNNNNr\   r   c                   Z    e Zd Zd Zedefd            Zed             Zd
dZd Z	d Z
d	S )
SystemTimec                 v    d | _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d S Nyearmonth	dayOfWeekdayhourminutesecondmillisecondsselfs    r]   __init__zSystemTime.__init__<   sA    	
	 r\   datac                 Z    t                               t          j        |                     S ra   )r_   from_bufferioBytesIOrn   s    r]   
from_byteszSystemTime.from_bytesF   s     %%bj&6&6777r\   c                 R   t                      }t          j        d|                     d                    d         |_        t          j        d|                     d                    d         |_        t          j        d|                     d                    d         |_        t          j        d|                     d                    d         |_        t          j        d|                     d                    d         |_        t          j        d|                     d                    d         |_	        t          j        d|                     d                    d         |_
        t          j        d|                     d                    d         |_        |S )Nz<Hr    r   )r_   structunpackreadrc   rd   re   rf   rg   rh   ri   rj   )buffsts     r]   rp   zSystemTime.from_bufferJ   s    \\-diill33A6=tyy||44Q7}T499Q<<88;tTYYq\\2215-diill33A6M$		!55a8	M$		!55a8	 -diill;;A>	r\   Tc           
      |    t          | j        | j        | j        | j        | j        | j        | j        dz  d           S )Ni  )tzinfo)r   rc   rd   rf   rg   rh   ri   rj   )rl   is_utcs     r]   to_datetimezSystemTime.to_datetimeW   sJ    	4:txDKQUQ\^b^opt^t  ~B  C  C  C  	Cr\   c                 r    t          j        |                                                                           S ra   )calendartimegmr~   	timetuplerk   s    r]   to_unixtimezSystemTime.to_unixtimeZ   s*    t//11;;==>>>r\   c                     d}|d| j         z  z  }|d| j        z  z  }|d| j        z  z  }|d| j        z  z  }|d| j        z  z  }|d| j        z  z  }|d| j        z  z  }|d	| j        z  z  }|S )
Nz== SystemTime ==
z
year: %s
zmonth: %s
zdayOfWeek: %s
z	day: %s
z
hour: %s
zminute: %s
zsecond: %s
zmilliseconds: %s
rb   rl   ts     r]   __str__zSystemTime.__str__]   s    "	^di''	_tz))	 4>11	]TX%%	^di''	++	++	#d&777r\   N)T)r;   r<   r=   rm   staticmethodbytesrt   rp   r~   r   r   r[   r\   r]   r_   r_   ;   s        ! ! ! 8 8 8 8 \8 
 
 \
C C C C? ? ?
 
 
 
 
r\   r_   c                   V    e Zd Zd ZdedefdZedefd            Zed             Z	dS )	Rightc                 h    d | _         d | _        d | _        d | _        d | _        d | _        d | _        d S ra   )lenRightName	rightNamelenDescriptiondescriptionblob_pos_idxrk   s    r]   rm   zRight.__init__j   s:     "					r\   idxposc                     t                      }||_        | j        |_        | j        |_        | j        |_        ||_        |S ra   )r   r   r   r   r   r   )rl   r   r   rs       r]   get_metazRight.get_metas   s:    GGn(r\   rn   c                 Z    t                               t          j        |                     S ra   )r   rp   rq   rr   rs   s    r]   rt   zRight.from_bytes|          D!1!1222r\   c                 6   t                      }t          j        d|                     d                    d         |_        |                     |j                                      d                              d          |_        t          j        d|                     d                    d         |_        |                     |j                                      d                              d          |_	        |                     d          |_
        |S )N<Ir"   r   	utf-16-le r2   )r   rv   rw   rx   r   decodestripr   r   r   r   )ry   rights     r]   rp   zRight.from_buffer   s    #]41>>qA))E$677>>{KKQQRXYY%}T499Q<<@@C IIe&:;;BB;OOUUV\]]YYr]]
r\   N
r;   r<   r=   rm   intr   r   r   rt   rp   r[   r\   r]   r   r   i   s          3 C     3 3 3 3 \3   \  r\   r   c                   F    e Zd Zd Zedefd            Zed             ZdS )AuxiliaryClassesc                 "    d | _         d | _        d S ra   )lenAuxiliaryClassauxiliaryClassrk   s    r]   rm   zAuxiliaryClasses.__init__   s    !%"r\   rn   c                 Z    t                               t          j        |                     S ra   )r   rp   rq   rr   rs   s    r]   rt   zAuxiliaryClasses.from_bytes   s     ++BJt,<,<===r\   c                    t                      }t          j        d|                     d                    d         |_        |                     |j                                      d                              d          |_        |S Nr   r"   r   r   r   )r   rv   rw   rx   r   r   r   r   )ry   auxs     r]   rp   zAuxiliaryClasses.from_buffer   si       &dDIIaLL A A! D!YYs'<==DD[QQWWX^__
r\   Nr;   r<   r=   rm   r   r   rt   rp   r[   r\   r]   r   r      se        # # # > > > > \>   \  r\   r   c                   F    e Zd Zd Zedefd            Zed             ZdS )SystemPossSuperiorc                 "    d | _         d | _        d S ra   )lenSystemPossSuperiorsystemPossSuperiorrk   s    r]   rm   zSystemPossSuperior.__init__   s    %)""&r\   rn   c                 Z    t                               t          j        |                     S ra   )r   rp   rq   rr   rs   s    r]   rt   zSystemPossSuperior.from_bytes   s     !--bj.>.>???r\   c                    t                      }t          j        d|                     d                    d         |_        |                     |j                                      d                              d          |_        |S r   )r   rv   rw   rx   r   r   r   r   )ry   spss     r]   rp   zSystemPossSuperior.from_buffer   si     ""$*M$		!$E$Ea$H!!%3+D!E!E!L!L[!Y!Y!_!_`f!g!g
r\   Nr   r[   r\   r]   r   r      sj        ' ' ' @ @ @ @ \@   \  r\   r   c                   F    e Zd Zd Zedefd            Zed             ZdS )Blockc                 0    d | _         d | _        d | _        d S ra   )unk1unk2unk3rk   s    r]   rm   zBlock.__init__   s    					r\   rn   c                 Z    t                               t          j        |                     S ra   )r   rp   rq   rr   rs   s    r]   rt   zBlock.from_bytes   r   r\   c                 x   t                      }t          j        d|                     d                    d         |_        t          j        d|                     d                    d         |_        |                     |j                                      d                              d          |_        |S r   )	r   rv   rw   rx   r   r   r   r   r   )ry   blocks     r]   rp   zBlock.from_buffer   s    ]4166q9
]4166q9
YYuz**11+>>DDVLL
r\   Nr   r[   r\   r]   r   r      se          
 3 3 3 3 \3   \  r\   r   c                   V    e Zd Zd ZdedefdZedefd            Zed             Z	dS )	Classc                 ,   d | _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d | _
        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d S ra   )lenClassName	classNamelenDNDNlenCommonClassNamecommonClassNamelenSubClassOf
subClassOfschemaIDGUIDoffsetToNumBlocksr   	numBlocksblocksnumExtraShiz	extraShiznumSystemPossSuperiorssystemPossSuperiorsnumAuxiliaryClassesauxiliaryClassesr   r   rk   s    r]   rm   zClass.__init__   s     
"&#! !%	 &*##' #'  $				r\   r   r   c                 .   t                      }||_        ||_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j	        |_	        | j
        |_
        | j        |_        | j        |_        |S ra   )r   r   r   r   r   r   r   r   r   r   r   r   r   )rl   r   r   clss       r]   r   zClass.get_meta   s    gg"2,9[
"&":#4
r\   rn   c                 Z    t                               t          j        |                     S ra   )r   rp   rq   rr   rs   s    r]   rt   zClass.from_bytes   r   r\   c                 v   t                      }t          j        d|                     d                    d         |_        |                     |j                                      d                              d          |_        t          j        d|                     d                    d         |_        |                     |j                                      d                              d          |_	        t          j        d|                     d                    d         |_
        |                     |j
                                      d                              d          |_        t          j        d|                     d                    d         |_        |                     |j                                      d                              d          |_        |                     d          |_        t          j        d|                     d                    d         |_        |                     |j                  |_        t          j        d|                     d                    d         |_        g |_        t'          |j                  D ]4}|j                            t*                              |                      5t          j        d|                     d                    d         |_        |                     |j        dz            |_        t          j        d|                     d                    d         |_        g |_        t'          |j                  D ]4}|j                            t6                              |                      5t          j        d|                     d                    d         |_        g |_        t'          |j                  D ]4}|j                            t<                              |                      5|S Nr   r"   r   r   r   r.   )r   rv   rw   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rangeappendr   rp   r   r   r   r   r   r   r   r   )ry   r   is      r]   rp   zClass.from_buffer   s7   gg!=tyy||<<Q?		#"233::;GGMMfUUM$		!55a8	39%%,,[99??GG!'tTYYq\\!B!B1!E"ii(>??FF{SSYYZ`aa"M$		!==a@3#455<<[IIOOPVWW99R== &dDIIaLL A A! D99S233dDIIaLL99!<
s}%% 	7 	7AJe//556666!=tyy||<<Q?		#"24"788%+]41%F%Fq%I""$s122 	Q 	QA#**+=+I+I$+O+OPPPP"(-diill"C"CA"F!s.// 	L 	LA ''(8(D(DT(J(JKKKK
r\   Nr   r[   r\   r]   r   r      s          .3 C      3 3 3 3 \3   \  r\   r   c                   \    e Zd Zd ZdedefdZedefd            Zed             Z	d Z
d	S )
Propertyc                     d | _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d | _
        d S ra   )lenPropNamepropNamer   adsTyper   r   r   attributeSecurityGUIDr   r   r   rk   s    r]   rm   zProperty.__init__  sV    	
 %)"					r\   r   r   c                     t                      }||_        ||_        | j        |_        | j        |_        | j        |_        | j        |_        |j        | j        |_        | j        | j        |_        |S ra   )	r   r   r   r   r   r   r   r   r   )rl   r   r   ps       r]   r   zProperty.get_meta  sh    JJ]
L	w*".&*&@A#9 YAFr\   rn   c                 Z    t                               t          j        |                     S ra   )r   rp   rq   rr   rs   s    r]   rt   zProperty.from_bytes"  s     ##BJt$4$4555r\   c                    t                      }t          j        d|                     d                    d         |_        |                     |j                                      d                              d          |_        t          j        d|                     d                    d         |_        t          j        d|                     d                    d         |_	        t          j        d|                     d                    d         |_
        |                     |j
                                      d                              d          |_        |                     d          |_        |                     d          |_        |                     d          |_        	 t          |j	                  |_	        n#  t          j        |_	        Y nxY w|S r   )r   rv   rw   rx   r   r   r   r   r   r   r   r   r   r   r   r   rX   )ry   props     r]   rp   zProperty.from_buffer&  s_   zz!=tyy||<<Q?		$"233::;GGMMfUUM$		!55a8	}T499Q<<88;]4166q9
))DJ''..{;;AA&II IIbMM%)YYr]]"IIaLL		+"4<00DLL	+"?DLLLs   4G G#c                     d}|d| j         z  z  }|d| j        z  z  }|d| j        z  z  }|d| j        z  z  }|d| j        z  z  }|d| j        z  z  }|d| j        z  z  }|d	| j        z  z  }|d
| j        z  z  }|S )Nz== Property ==
zlenPropName: %s
zpropName: %s
z
unk1: %s
zadsType: %s
zlenDN: %s
zDN: %s
zschemaIDGUID: %s
zattributeSecurityGUID: %s
z
blob: %s
)	r   r   r   r   r   r   r   r   r   r   s     r]   r   zProperty.__str__8  s     	"T%555	$-//	^di''	--	_tz))	\DG##	#d&777	,t/III	^di''r\   N)r;   r<   r=   rm   r   r   r   r   rt   rp   r   r[   r\   r]   r   r     s          3 C     6 6 6 6 \6   \"    r\   r   c                   L    e Zd Zd Zedefd            Zed             Zd ZdS )Headerc                     d | _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d | _
        d | _        d S ra   )winAdSigmarkerfiletimeoptionalDescriptionserver
numObjectsnumAttributesfileoffsetLowfileoffsetHighfileoffsetEndunk0x43amappingOffsetrk   s    r]   rm   zHeader.__init__F  sb    #' !!"!!r\   rn   c                 Z    t                               t          j        |                     S ra   )r   rp   rq   rr   rs   s    r]   rt   zHeader.from_bytesT  s     !!"*T"2"2333r\   c                    t                      }|                     d          |_        t          j        d|                     d                    d         |_        t          j        d|                     d                    d         |_        |                     d                              d                              d	          |_	        |                     d                              d                              d	          |_
        t          j        d
|                     d                    d         |_        t          j        d
|                     d                    d         |_        t          j        d
|                     d                    d         |_        t          j        d
|                     d                    d         |_        t          j        d
|                     d                    d         |_        t          j        d|                     d                    d         |_        |j        dz  |j        z  |_        |S )Nr(   <ir"   r   <Qr&   i  r   r   r       )r   rx   r   rv   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   )ry   headers     r]   rp   zHeader.from_bufferX  s   ))B--dDIIaLL99!< -diill;;A>%)YYu%5%5%<%<[%I%I%O%OPV%W%W"		%((//<<BB6JJ"M$		!==a@%}T499Q<<@@C%}T499Q<<@@C &dDIIaLL A A! D%}T499Q<<@@C -diill;;A> & 5 ;v?SSr\   c                 (   d}|d| j         z  z  }|d| j        z  z  }|d| j        z  z  }|d| j        z  z  }|d| j        z  z  }|d| j        z  z  }|d| j        z  z  }|d	| j        z  z  }|d
| j        z  z  }|d| j	        z  z  }|d| j
        z  z  }|S )Nz== Header ==
zwinAdSig: %s
zmarker: %s
zfiletime: %s
zoptionalDescription: %s
zserver: %s
znumObjects: %s
znumAttributes: %s
zfileoffsetLow: %s
zfileoffsetHigh: %s
zfileoffsetEnd: %s
zunk0x43a: %s
)r   r   r   r   r   r   r   r   r   r   r   r   s     r]   r   zHeader.__str__i  s    	$-//	++	$-//	*T-EEE	++	!DO33	$t'999	$t'999	%(;;;	$t'999	$-//r\   N)	r;   r<   r=   rm   r   r   rt   rp   r   r[   r\   r]   r   r   E  st        " " " 4 4 4 4 \4   \     r\   r   c                       e Zd Zd ZdS )LDIFIdxc                 6    || _         || _        ||z
  | _        d S ra   )startendlength)rl   r  r  s      r]   rm   zLDIFIdx.__init__y  s    
Ekr\   N)r;   r<   r=   rm   r[   r\   r]   r   r   x  s#        " " " " "r\   r   c                   f    e Zd Zd Zedefd            Zed             Zd Zd Z	d Z
d Zdd
Zd	S )DatEntryc                 h    d | _         d | _        d | _        i | _        d | _        d | _        i | _        d S ra   )_fhr   _attridx_bhcacheobjSize	tableSizemappingTablerk   s    r]   rm   zDatEntry.__init__  s:    	r\   rn   c                 \    t                               t          j        |           |          S ra   )r  rp   rq   rr   )rn   attridxs     r]   rt   zDatEntry.from_bytes  s"    ##BJt$4$4g>>>r\   c                 6   t                      }| |_        |                                 |_        ||_        t          j        d|                     d                    d         |_        t          j        d|                     d                    d         |_	        t          |j	                  D ]h}t          j        d|                     d                    d         }t          j        d|                     d                    d         }||j        |<   i|S )Nr   r"   r   r   )r  r  tellr   r	  rv   rw   rx   r  r  r   r  )ry   r  de_	attrIndex
attrOffsets         r]   rp   zDatEntry.from_buffer  s    ZZ))++]4166q9
}T499Q<<88;r|$$ 	4 	4AdDIIaLL99!<ItTYYq\\::1=J)3BOI&&	r\   c                    || j         v r}d }| j         |         | j        v r| j         |         }| j         |         }nD| j         | j         |                  | j        v r%| j         | j         |                  }| j         |         }|dS ||fS dS )N)NN)r	  r  )rl   	attributeaidxr   s       r]   resolve_attribute_namezDatEntry.resolve_attribute_name  s    %%D}Y'4+<<<}Y/}T*t}Y78D<MMM}T]9%=>}T*|!z:zr\   c                 
   |                      |          \  }}|d S | j        | j        |         z   }| j                            |           t          j        d| j                            d                    d         }g }|j        t          j
        t          j        t          j        t          j        t          j        t          j        fv rg }t          |          D ]H}|                    t          j        d| j                            d                    d                    I|D ]^}	| j                            ||	z              d}
	 | j                            d          }|dk    rn|
|z  }
'|                    |
           _n#|j        t          j        k    rg }t          |          D ]H}|                    t          j        d| j                            d                    d                    I|D ]1}| j                            |          }|                    |           2n~|j        t          j        k    rt          |          D ]}|                    t'          t)          t          j        d| j                            d                    d                                                                                 d                     n|j        t          j        k    rZt          |          D ]H}|                    t          j        d| j                            d                    d                    Ina|j        t          j        k    rWt          |          D ]F}|                    t2                              | j                                                             Gn|j        t          j        k    rYt          |          D ]H}|                    t          j        d	| j                            d
                    d                    In|j        t          j        k    rrt          |          D ]b}t          j        d| j                            d                    d         }|                    | j                            |                     cd }|j        t>          v rt>          |j                 }n |j        t@          v rt@          |j                 }|F|j!        dk    r|d         S |j!        dk    r|S |j!        tD          v r ||d          S  ||          S tG          j$        d|j        z             |S )Nr   r"   r   r\   Tr    s     r   r   r&   single_date
multi_date)encodingz.[ADEXPLORER] No parser found for property "%s")%r  r   r  r  seekrv   rw   rx   r   r   r?   rA   rB   rC   rJ   r   r   rF   rD   strboolupperencoderE   rG   r_   rp   r~   rH   rW   r   r   r   r;   ENCODER_SPEFIFIC_FULCTIONSr   debug)rl   r  r  r   fileAttrOffset	numValuesvaluesoffsetsr  offsetresclengthsr  raw_valfconverts                   r]   get_attributezDatEntry.get_attribute  s   00;;
d<4T%6t%<<n%%%M$a(8(899!<	<G-w/I7Kegng  BI  BX  Za  Zn  o  o  oG9%% I Iv}T48==3C3CDDQGHHHH! # #nv5666a((AK''1HC	
 c""""# \W111G9%% I Iv}T48==3C3CDDQGHHHH! ' '(--//g&&&&' \W_,,9%% o oc$v}T48==;K;K'L'LQ'O"P"PQQWWYY``almmnnnno \W_,,9%% H HfmD$(--2B2BCCAFGGGGH \W---9%% N Nj44TX>>JJLLMMMMN \W2229%% H HfmD$(--2B2BCCAFGGGGH \W;;;9%% 5 5tTX]]1-=-=>>qAdhmmF334444=:::5dmDHH]333,T];H M11ay  L00 $>>>x====8F###EUVVVr\   c                     g }| j         D ]C}| j        |         }|                    |j        |                     |j                  f           D|S ra   )r  r	  r   r   r/  )rl   r*  r  r   s       r]   get_all_attributeszDatEntry.get_all_attributes  sX    % 	K 	KD=&DJJt'9'9$-'H'HIJJJJ
r\   c                 `    |dk    r|                                  S |                     |          S )N*)r1  r/  )rl   items     r]   __getitem__zDatEntry.__getitem__  s1    3;;**,,,!!$'''r\   Nc                     |dk    r+|                                  }t          |          dk    r|S |S |                     |          }||S |S )Nr3  r   )r1  lenr/  )rl   r4  defaultr*  s       r]   getzDatEntry.get  sW    3;;))++C3xx1}}J  &&;N
r\   ra   )r;   r<   r=   rm   r   r   rt   rp   r  r/  r1  r5  r9  r[   r\   r]   r  r  ~  s           ? ? ? ? \?   \  G G GR  ( ( (
	 	 	 	 	 	r\   r  c                      e Zd ZddefdZedefd            Zd Zd Z	d Z
d	 Zd
ee         fdZefd
ee         fdZefd
ee         fdZefd
ee         fdZefd
ee         fdZefd
ee         fdZefd
ee         fdZefd
ee         fdZefd
ee         fdZd
ee         fdZdefdZd
ee         fdZ dS )Snapshot順 max_cache_sizec                 h    d | _         d | _        d | _        || _        i | _        i | _        d | _        d S ra   )filename
filehandler   r=  dn_index
attr_index
rootdomain)rl   r=  s     r]   rm   zSnapshot.__init__
  s>     !, -/
  r\   r?  c                    K   t                      }| |_        t          | d          |_        |                                 d {V  |S )Nrb)r;  r?  openr@  parse)r?  sns     r]   	from_filezSnapshot.from_file  sL      ZZXt,,hhjj	r\   c                    K   | j                             d           t                              | j                   | _        |                                  d {V  d S Nr   )r@  r  r   rp   r   build_indexrk   s    r]   rG  zSnapshot.parse#  s]      Q((99           r\   c                   K   t          j        d           | j                            | j        j        t          j                   t          j        d           t          j	        d| j        
                    d                    d         }d}t          |          D ]w}| j                                        }t                              | j                  }|                    ||          | j        |<   || j        | j        |         j        <   |dz  }xt          j        d           t          j	        d| j        
                    d                    d         }t          |          D ]w}| j                                        }t$                              | j                  }|                    ||          | j        |<   || j        | j        |         j        <   |dz  }xt          j        d           t          j	        d| j        
                    d                    d         }t          |          D ]]}| j                                        }t(                              | j                  }	|	                    ||          | j        |<   |dz  }^t          j        d	           t          j        d
           | j                            d           t          | j        j                  D ]}| j                                        }t,                              | j        | j                  }
|
d                                         }|
                    dd          |
j        d<   |
                    dg           |
j        d<   |
                    dg           |
j        d<   | j        d|
j        d         v r|| _        |
| j        |<   | j                            ||
j        z              d S )Nz[ADEXPLORER] Building index...z"[ADEXPLORER] Parsing Properties...r   r"   r   r   z[ADEXPLORER] Parsing Classes...z[ADEXPLORER] Parsing Rights...z[ADEXPLORER] Meta index built!z![ADEXPLORER] Building DN index...i>  distinguishedNameobjectCategory sAMAccountTypeobjectClassdomain)r   r$  r@  r  r   r   rq   SEEK_SETrv   rw   rx   r   r  r   rp   r   rB  r   r   r   r   r   r  r!  r9  r
  rC  rA  r  )rl   numattrsr  r  r   r   
numclassesr   	numrightsr   r  dns               r]   rL  zSnapshot.build_index(  sv     5666T[6DDD9:::=t';';A'>'>??Bx 	 	A/&&((C''88D'+}}Wc'B'BDOG$AHDODOG4=>qLGG6777]4)=)=a)@)@AA!D
z"" 	 	A/&&((C##DO44C'*||GS'A'ADOG$BIDODOG4>?qLGG5666M$(<(<Q(?(?@@C	y!! 	 	A/&&((C%%do66E',~~gs'C'CDOG$qLGG56668999U###t{-.. 	1 	1A/&&((C%%dotGGB'(..00B,.FF3CR,H,HBK(),.FF3CR,H,HBK())+r)B)BBK& &8r{=7Q+Q+Q"$ "DM"O  RZ0000	1 	1r\   c                   K   || j         vrd S | j         |         }| j         |         }| j        D ]}|| j        |         j        v r|W V  d S ra   )rB  rA  r  )rl   attrr  r   rX  s        r]   attr_lookupzSnapshot.attr_lookup\  sn       t&&F/$'w'- 	 	B$-+888	 	r\   c                 j   K   | j         D ](}|| j         |         d         k    rt          |           )d S )N	objectSid)rA  print)rl   sidrX  s      r]   
sid_lookupzSnapshot.sid_lookupi  sD      - 	 	BdmB'444b				 	r\   attrsc                  K   | j         D ]}t          |t                    du rt          | j         |         d          du r| j         |         j                                        }|| j        vrt          j        d|z             |i }i |d<   |D ]"}| j        |         |         }|||d         |<   #t          j
        |          d fW V  d S )NFr   Tz&[ADEXPLORER] DN not found in index: %s
attributes)rB  
isinstancer   hasattrr   r!  rA  r   r$  r   	from_ldap)rl   ra  r  rX  temprZ  r*  s          r]   get_all_schemaentryzSnapshot.get_all_schemaentryo  s       	< 	<G'3''500tw/@@DHH_W-06688T]**L!IB!NOOO%'\"! 7 7D-+D1C36\*40%/55t;;;;;	< 	<r\   c                    K   i }i |d<   |D ]#}| j         | j                 |         |d         |<   $t          j        |          d fS Nrc  )rA  rC  r	   rf  )rl   ra  rg  rZ  s       r]   get_ad_infozSnapshot.get_ad_info  s\      \ 	L 	LD'+}T_'Ed'KDt$$!$''--r\   c                   K   | j         D ]a}d| j         |         j        d         v rEi }i |d<   |D ]"}| j         |         |         }|||d         |<   #t          j        |          d fW V  bd S )NtrustedDomainrR  rc  )rA  r
  r   rf  rl   ra  rX  rg  rZ  r*  s         r]   get_all_trustszSnapshot.get_all_trusts  s      - 	< 	<B$-"3"<]"KKK%'\"! 7 7D-+D1C36\*40%/55t;;;;;	< 	<r\   c                   K   | j         D ]c}| j         |         j        d         dk    rEi }i |d<   |D ]"}| j         |         |         }|||d         |<   #t          j        |          d fW V  dd S )NrQ  i   0rc  )rA  r
  r   rf  rn  s         r]   get_all_userszSnapshot.get_all_users  s      - 	5 	5B}R )*:;yHH%'\"! 7 7D-+D1C36\*40(..44444	5 	5r\   c                   K   | j         D ]c}| j         |         j        d         dk    rEi }i |d<   |D ]"}| j         |         |         }|||d         |<   #t          j        |          d fW V  dd S )NrQ  i  0rc  )rA  r
  r   rf  rn  s         r]   get_all_machineszSnapshot.get_all_machines  s      - 	8 	8B}R )*:;yHH%'\"! 7 7D-+D1C36\*40!+D11477777	8 	8r\   c                   K   | j         D ]a}d| j         |         j        d         v rEi }i |d<   |D ]"}| j         |         |         }|||d         |<   #t          j        |          d fW V  bd S )NgrouprR  rc  )rA  r
  r   rf  rn  s         r]   get_all_groupszSnapshot.get_all_groups  s      - 	6 	6B$-+4]CCC%'\"! 7 7D-+D1C36\*40)$//55555	6 	6r\   c                   K   | j         D ]a}d| j         |         j        d         v rEi }i |d<   |D ]"}| j         |         |         }|||d         |<   #t          j        |          d fW V  bd S )NorganizationalUnitrR  rc  )rA  r
  r   rf  rn  s         r]   get_all_ouszSnapshot.get_all_ous  s      - 	3 	3B#t}R'8'A-'PPP%'\"! 7 7D-+D1C36\*40&t,,d22222	3 	3r\   c                   K   | j         D ]a}d| j         |         j        d         v rEi }i |d<   |D ]"}| j         |         |         }|||d         |<   #t          j        |          d fW V  bd S )NgroupPolicyContainerrR  rc  )rA  r
  r   rf  rn  s         r]   get_all_gposzSnapshot.get_all_gpos  s      - 	4 	4B%r):)CM)RRR%'\"! 7 7D-+D1C36\*40'--t33333	4 	4r\   c                  K   | j         D ]}| j         |         j        }d|d                                         v rOd|d         v rEi }i |d<   |D ]"}| j         |         |         }|||d         |<   #t          j        |          d fW V  d S )N	CONTAINERrO  	containerrR  rc  )rA  r
  r!  r
   rf  rl   ra  rX  bhcacherg  rZ  r*  s          r]   get_all_containerszSnapshot.get_all_containers  s      - 		: 		:BmB'0Gg&67==????KSZ[hSiDiDi%'\"! 7 7D-+D1C36\*40#-d33T99999		: 		:r\   c                   K   | j         D ]m}| j         |         j        }d|d         v rOd|d                                         v r3i }i |d<   |D ]"}| j         |         |         }|||d         |<   #|d fW V  nd S )NforeignSecurityPrincipalrR  zFOREIGN-SECURITY-PRINCIPALrO  rc  )rA  r
  r!  r  s          r]   !get_all_foreignsecurityprincipalsz*Snapshot.get_all_foreignsecurityprincipals  s      - 		! 		!BmB'0G)W]-CCCHdho  qA  iB  iH  iH  iJ  iJ  IJ  IJ%'\"! 7 7D-+D1C36\*40Dj    		! 		!r\   rX  c                 T   K   | j         |                                         d         d fS )NnTSecurityDescriptor)rA  r!  )rl   rX  s     r]   get_objectacl_by_dnzSnapshot.get_objectacl_by_dn  s&      }RXXZZ()?@$FFr\   c                    K   |                                 }|| j        vri d fS i }i |d<   |D ]"}| j        |         |         }|||d         |<   #|d         d fS rj  )r!  rA  )rl   rX  ra  rg  rZ  r*  s         r]   dnattrszSnapshot.dnattrs  s}      XXZZT]""t8O\ 	/ 	/D-#D)C+.\"4(L!4''r\   N)r<  )!r;   r<   r=   r   rm   r   r  rI  rG  rL  r[  r`  r   rh  r   rk  r   ro  r   rq  r   rs  r   rv  r   ry  r   r|  r   r  r  r  r  r[   r\   r]   r;  r;  	  sd        c    "     \! ! !
11 11 11h    <d3i < < < <$ 3A . .d3i . . . . 6K 
< 
<c 
< 
< 
< 
< 5C 	5 	5S	 	5 	5 	5 	5 8I 	8 	849 	8 	8 	8 	8 6E 	6 	6c 	6 	6 	6 	6 3? 	3 	3d3i 	3 	3 	3 	3 4A 	4 	4tCy 	4 	4 	4 	4 :M 
: 
:T#Y 
: 
: 
: 
:
!DI 
! 
! 
! 
!G3 G G G G(d3i ( ( ( ( ( (r\   r;  c                    K   dd l } 	 t                              d           d {V }d}d}|                    ddg          2 3 d {V \  }}|||dz  }6 t	          |           t	          d|z             |                                 d {V \  }}||t	          |           d}|                                2 3 d {V \  }}||6 t	          |           d}|                                2 3 d {V \  }}|||dz  }6 t	          |           t	          d|z             d}|                                2 3 d {V \  }}|||dz  }6 t	          |           t	          d	|z             d}|	                                2 3 d {V \  }}|||dz  }6 t	          |           t	          d
|z             d}|
                                2 3 d {V \  }}|||dz  }6 t	          |           t	          d|z             d}|                                2 3 d {V \  }}|||dz  }6 t	          |           t	          d|z             d S # t          $ r}|                                  Y d }~d S d }~ww xY w)Nr   zdd2.datrP  namer   r   zTotal schema entries: %szTotal users: %szTotal machines: %szTotal groups: %szTotal ous: %szTotal gpos: %s)	tracebackr;  rI  rh  r^  rk  ro  rq  rs  rv  ry  r|  	Exception	print_exc)r  rH  r   entryerradinfoes          r]   amainr    s     E%%i00000000 " 6 67O P P 	 	 	 	 	 	 	*%	FAA !Q 	e(1,---NN,,,,,,,,?If " 1 1 3 3 	 	 	 	 	 	 	*%	  !4 	e " 0 0 2 2 	 	 	 	 	 	 	*%	FAA !3 	e!#$$$ " 3 3 5 5 	 	 	 	 	 	 	*%	FAA !6 	e"Q&''' " 1 1 3 3 	 	 	 	 	 	 	*%	FAA !4
 	e 1$%%% " 0 0 	 	 	 	 	 	 	*%	FAA !1
 	eo!""" " 1 1 	 	 	 	 	 	 	*%	FAA !2
 	e"#####    sp   ;I A	A6I ?C/I 4D:AI  EAI F AI G,AI $H8*0I 
J&J  Jc                  P    dd l } |                     t                                 d S rK  )asynciorunr  )r  s    r]   mainr  <  s'    NNNKKr\   __main__)0rq   rv   enumr   r   typingr   r   msldapr   msldap.ldap_objectsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   msldap.protocol.typeconversionr   r   r#  Enumr   r_   r   r   r   r   r   r   r   r   r  r;  r  r  r;   r[   r\   r]   <module>r     s   
			                       ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; a ` ` ` ` ` ` `       di   >, , , , , , , ,\       B                       $H H H H H H H HT= = = = = = = =~1 1 1 1 1 1 1 1f" " " " " " " "I I I I I I I IVh( h( h( h( h( h( h( h(TG G GR   zDFFFFF r\   