o
    Žõ±jÍs  ã                   @   s~  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	„ d	ej ƒZ!G d
d„ dƒZ"G dd„ dƒZ#G dd„ dƒZ$G dd„ dƒZ%G dd„ dƒZ&G dd„ dƒZ'G dd„ dƒZ(G dd„ dƒZ)G dd„ dƒZ*G dd„ dƒZ+G dd„ dƒZ,d d!„ Z-d"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                   @   s€   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© rY   rY   úŒ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/msldap/commons/adexplorer.pyr      s<    r   c                   @   sL   e Zd Zdd„ Zedefdd„ƒZedd„ ƒZdd	d
„Zdd„ Z	dd„ Z
dS )Ú
SystemTimec                 C   s4   d | _ d | _d | _d | _d | _d | _d | _d | _d S ©N©ÚyearÚmonthÚ	dayOfWeekÚdayÚhourÚminuteÚsecondÚmilliseconds©ÚselfrY   rY   rZ   Ú__init__<   s   
zSystemTime.__init__Údatac                 C   ó   t  t | ¡¡S r\   )r[   Úfrom_bufferÚioÚBytesIO©ri   rY   rY   rZ   Ú
from_bytesF   ó   zSystemTime.from_bytesc                 C   sÊ   t ƒ }t d|  d¡¡d |_t d|  d¡¡d |_t d|  d¡¡d |_t d|  d¡¡d |_t d|  d¡¡d |_t d|  d¡¡d |_	t d|  d¡¡d |_
t d|  d¡¡d |_|S )Nz<Hr   r   )r[   ÚstructÚunpackÚreadr^   r_   r`   ra   rb   rc   rd   re   )ÚbuffÚstrY   rY   rZ   rk   J   s   zSystemTime.from_bufferTc              
   C   s*   t | j| j| j| j| j| j| jd d dS )Niè  )Útzinfo)r   r^   r_   ra   rb   rc   rd   re   )rg   Úis_utcrY   rY   rZ   Úto_datetimeW   s   *zSystemTime.to_datetimec                 C   s   t  |  ¡  ¡ ¡S r\   )ÚcalendarÚtimegmrx   Ú	timetuplerf   rY   rY   rZ   Úto_unixtimeZ   s   zSystemTime.to_unixtimec                 C   sx   d}|d| j  7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d	| j 7 }|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
r]   ©rg   ÚtrY   rY   rZ   Ú__str__]   s   zSystemTime.__str__N)T)r9   r:   r;   rh   ÚstaticmethodÚbytesro   rk   rx   r|   r   rY   rY   rY   rZ   r[   ;   s    


r[   c                   @   óD   e Zd Zdd„ Zdedefdd„Zedefdd	„ƒZed
d„ ƒZ	dS )ÚRightc                 C   s.   d | _ d | _d | _d | _d | _d | _d | _d S r\   )ÚlenRightNameÚ	rightNameÚlenDescriptionÚdescriptionÚblobÚ_posÚ_idxrf   rY   rY   rZ   rh   j   ó   
zRight.__init__ÚidxÚposc                 C   s.   t ƒ }||_| j|_| j|_| j|_||_|S r\   )rƒ   rŠ   r…   r‡   rˆ   r‰   )rg   rŒ   r   ÚrrY   rY   rZ   Úget_metas   s   zRight.get_metari   c                 C   rj   r\   )rƒ   rk   rl   rm   rn   rY   rY   rZ   ro   |   rp   zRight.from_bytesc                 C   sz   t ƒ }t d|  d¡¡d |_|  |j¡ d¡ d¡|_t d|  d¡¡d |_|  |j¡ d¡ d¡|_	|  d¡|_
|S )Nú<Ir    r   ú	utf-16-leú r0   )rƒ   rq   rr   rs   r„   ÚdecodeÚstripr…   r†   r‡   rˆ   )rt   ÚrightrY   rY   rZ   rk   €   s   zRight.from_bufferN©
r9   r:   r;   rh   Úintr   r€   r   ro   rk   rY   rY   rY   rZ   rƒ   i   s    		rƒ   c                   @   ó2   e Zd Zdd„ Zedefdd„ƒZedd„ ƒZdS )	ÚAuxiliaryClassesc                 C   ó   d | _ d | _d S r\   )ÚlenAuxiliaryClassÚauxiliaryClassrf   rY   rY   rZ   rh   ‹   ó   
zAuxiliaryClasses.__init__ri   c                 C   rj   r\   )r™   rk   rl   rm   rn   rY   rY   rZ   ro      rp   zAuxiliaryClasses.from_bytesc                 C   ó<   t ƒ }t d|  d¡¡d |_|  |j¡ d¡ d¡|_|S ©Nr   r    r   r‘   r’   )r™   rq   rr   rs   r›   r“   r”   rœ   )rt   ÚauxrY   rY   rZ   rk   “   ó   zAuxiliaryClasses.from_bufferN©r9   r:   r;   rh   r€   r   ro   rk   rY   rY   rY   rZ   r™   Š   ó    r™   c                   @   r˜   )	ÚSystemPossSuperiorc                 C   rš   r\   )ÚlenSystemPossSuperiorÚsystemPossSuperiorrf   rY   rY   rZ   rh   ›   r   zSystemPossSuperior.__init__ri   c                 C   rj   r\   )r¤   rk   rl   rm   rn   rY   rY   rZ   ro   Ÿ   rp   zSystemPossSuperior.from_bytesc                 C   rž   rŸ   )r¤   rq   rr   rs   r¥   r“   r”   r¦   )rt   ÚspsrY   rY   rZ   rk   £   r¡   zSystemPossSuperior.from_bufferNr¢   rY   rY   rY   rZ   r¤   š   r£   r¤   c                   @   r˜   )	ÚBlockc                 C   s   d | _ d | _d | _d S r\   )Úunk1Úunk2Úunk3rf   rY   rY   rZ   rh   «   s   
zBlock.__init__ri   c                 C   rj   r\   )r¨   rk   rl   rm   rn   rY   rY   rZ   ro   °   rp   zBlock.from_bytesc                 C   sT   t ƒ }t d|  d¡¡d |_t d|  d¡¡d |_|  |j¡ d¡ d¡|_|S rŸ   )	r¨   rq   rr   rs   r©   rª   r“   r”   r«   )rt   ÚblockrY   rY   rZ   rk   ´   s
   zBlock.from_bufferNr¢   rY   rY   rY   rZ   r¨   ª   s    r¨   c                   @   r‚   )ÚClassc                 C   s‚   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d S r\   )ÚlenClassNameÚ	classNameÚlenDNÚDNÚlenCommonClassNameÚcommonClassNameÚlenSubClassOfÚ
subClassOfÚschemaIDGUIDÚoffsetToNumBlocksrª   Ú	numBlocksÚblocksÚnumExtraShizÚ	extraShizÚnumSystemPossSuperiorsÚsystemPossSuperiorsÚnumAuxiliaryClassesÚauxiliaryClassesrŠ   r‰   rf   rY   rY   rZ   rh   ½   s*   
zClass.__init__rŒ   r   c                 C   sf   t ƒ }||_||_| j|_| j|_| j|_| j|_| j|_| j|_| j	|_	| j
|_
| j|_| j|_|S r\   )r­   rŠ   r‰   r¯   r±   r³   rµ   r¶   rª   r¹   r»   r½   r¿   )rg   rŒ   r   ÚclsrY   rY   rZ   r   Ô   s   zClass.get_metari   c                 C   rj   r\   )r­   rk   rl   rm   rn   rY   rY   rZ   ro   ä   rp   zClass.from_bytesc                 C   sî  t ƒ }t d|  d¡¡d |_|  |j¡ d¡ d¡|_t d|  d¡¡d |_|  |j¡ d¡ d¡|_	t d|  d¡¡d |_
|  |j
¡ d¡ d¡|_t d|  d¡¡d |_|  |j¡ d¡ d¡|_|  d¡|_t d|  d¡¡d |_|  |j¡|_t d|  d¡¡d |_g |_t|jƒD ]}|j t | ¡¡ q”t d|  d¡¡d |_|  |jd ¡|_t d|  d¡¡d |_g |_t|jƒD ]}|j t | ¡¡ qÉt d|  d¡¡d |_g |_t|jƒD ]}|j t | ¡¡ qé|S ©Nr   r    r   r‘   r’   r,   )r­   rq   rr   rs   r®   r“   r”   r¯   r°   r±   r²   r³   r´   rµ   r¶   r·   rª   r¸   r¹   ÚrangeÚappendr¨   rk   rº   r»   r¼   r½   r¤   r¾   r¿   r™   )rt   rÀ   ÚirY   rY   rZ   rk   è   s6   zClass.from_bufferNr–   rY   rY   rY   rZ   r­   ¼   s    r­   c                   @   sL   e Zd Zdd„ Zdedefdd„Zedefdd	„ƒZed
d„ ƒZ	dd„ Z
dS )ÚPropertyc                 C   sF   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d S r\   )ÚlenPropNameÚpropNamer©   ÚadsTyper°   r±   r¶   ÚattributeSecurityGUIDrˆ   rŠ   r‰   rf   rY   rY   rZ   rh     s   
zProperty.__init__rŒ   r   c                 C   sZ   t ƒ }||_||_| j|_| j|_| j|_| j|_|jd ur"| j|_| jd ur+| j|_|S r\   )	rÅ   rŠ   r‰   rÇ   rÈ   r±   r¶   rÉ   rˆ   )rg   rŒ   r   ÚprY   rY   rZ   r     s   

zProperty.get_metari   c                 C   rj   r\   )rÅ   rk   rl   rm   rn   rY   rY   rZ   ro   "  rp   zProperty.from_bytesc                 C   sæ   t ƒ }t d|  d¡¡d |_|  |j¡ d¡ d¡|_t d|  d¡¡d |_t d|  d¡¡d |_	t d|  d¡¡d |_
|  |j
¡ d¡ d¡|_|  d¡|_|  d¡|_|  d¡|_z	t|j	ƒ|_	W |S    tj|_	Y |S rÁ   )rÅ   rq   rr   rs   rÆ   r“   r”   rÇ   r©   rÈ   r°   r±   r¶   rÉ   rˆ   r   rV   )rt   ÚproprY   rY   rZ   rk   &  s    þ
zProperty.from_bufferc                 C   s†   d}|d| j  7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d	| j 7 }|d
| j 7 }|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}   rY   rY   rZ   r   8  s   zProperty.__str__N)r9   r:   r;   rh   r—   r   r€   r   ro   rk   r   rY   rY   rY   rZ   rÅ     s    
rÅ   c                   @   s:   e Zd Zdd„ Zedefdd„ƒZedd„ ƒZdd	„ Zd
S )ÚHeaderc                 C   sL   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d | _d S r\   )ÚwinAdSigÚmarkerÚfiletimeÚoptionalDescriptionÚserverÚ
numObjectsÚnumAttributesÚfileoffsetLowÚfileoffsetHighÚfileoffsetEndÚunk0x43aÚmappingOffsetrf   rY   rY   rZ   rh   F  s   
zHeader.__init__ri   c                 C   rj   r\   )rÌ   rk   rl   rm   rn   rY   rY   rZ   ro   T  rp   zHeader.from_bytesc                 C   s  t ƒ }|  d¡|_t d|  d¡¡d |_t d|  d¡¡d |_|  d¡ d¡ d	¡|_	|  d¡ d¡ d	¡|_
t d
|  d¡¡d |_t d
|  d¡¡d |_t d
|  d¡¡d |_t d
|  d¡¡d |_t d
|  d¡¡d |_t d|  d¡¡d |_|jd> |jB |_|S )Nr&   ú<ir    r   ú<Qr$   i  r‘   r’   r   é    )rÌ   rs   rÍ   rq   rr   rÎ   rÏ   r“   r”   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   )rt   ÚheaderrY   rY   rZ   rk   X  s   zHeader.from_bufferc                 C   s¢   d}|d| j  7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d	| j 7 }|d
| j 7 }|d| j	 7 }|d| j
 7 }|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}   rY   rY   rZ   r   i  s   zHeader.__str__N)	r9   r:   r;   rh   r€   r   ro   rk   r   rY   rY   rY   rZ   rÌ   E  s    
rÌ   c                   @   s   e Zd Zdd„ ZdS )ÚLDIFIdxc                 C   s   || _ || _|| | _d S r\   )ÚstartÚendÚlength)rg   rÞ   rß   rY   rY   rZ   rh   y  s   zLDIFIdx.__init__N)r9   r:   r;   rh   rY   rY   rY   rZ   rÝ   x  s    rÝ   c                   @   s\   e Zd Zdd„ Zedefdd„ƒZedd„ ƒZdd	„ Zd
d„ Z	dd„ Z
dd„ Zddd„ZdS )ÚDatEntryc                 C   s.   d | _ d | _d | _i | _d | _d | _i | _d S r\   )Ú_fhr‰   Ú_attridxÚ_bhcacheÚobjSizeÚ	tableSizeÚmappingTablerf   rY   rY   rZ   rh     r‹   zDatEntry.__init__ri   c                 C   s   t  t | ¡|¡S r\   )rá   rk   rl   rm   )ri   ÚattridxrY   rY   rZ   ro   ‰  s   zDatEntry.from_bytesc                 C   s–   t ƒ }| |_|  ¡ |_||_t d|  d¡¡d |_t d|  d¡¡d |_	t
|j	ƒD ]}t d|  d¡¡d }t d|  d¡¡d }||j|< q+|S )Nr   r    r   rÙ   )rá   râ   Útellr‰   rã   rq   rr   rs   rå   ræ   rÂ   rç   )rt   rè   ÚdeÚ_Ú	attrIndexÚ
attrOffsetrY   rY   rZ   rk     s   
zDatEntry.from_bufferc                 C   s|   || j v r<d }| j | | jv r| j | }| j | }n| j | j |  | jv r2| j | j |  }| j | }|d u r8dS ||fS dS )N)NN)rã   rç   )rg   Ú	attributeÚaidxrË   rY   rY   rZ   Úresolve_attribute_name›  s   


zDatEntry.resolve_attribute_namec                 C   s"  |   |¡\}}|d u rd S | j| j|  }| j |¡ t d| j d¡¡d }g }|jt	j
t	jt	jt	jt	jt	jfv rxg }t|ƒD ]}| t d| j d¡¡d ¡ q@|D ]"}	| j ||	 ¡ d}
	 | j d¡}|dkrln|
|7 }
qa| |
¡ qTnÏ|jt	jkr§g }t|ƒD ]}| t d| j d¡¡d ¡ q„|D ]}| j |¡}| |¡ q˜n |jt	jkrÍt|ƒD ]}| ttt d| j d¡¡d ƒƒ ¡  d¡¡ q±nz|jt	jkrêt|ƒD ]}| t d| j d¡¡d ¡ q×n]|jt	jkrt|ƒD ]}| t | j¡ ¡ ¡ qõnC|jt	jkr#t|ƒD ]}| t d	| j d
¡¡d ¡ qn$|jt	jkrGt|ƒD ]}t d| j d¡¡d }| | j |¡¡ q.d }|jtv rUt|j }n|jt v r`t |j }|d ur‡|j!dkro|d S |j!dkrw|S |j!t"v rƒ||ddS ||ƒS t# $d|j ¡ |S )Nr   r    r   ó    Tr   s     r‘   rÚ   r$   Úsingle_dateÚ
multi_date)Úencodingz.[ADEXPLORER] No parser found for property "%s")%rð   r‰   rç   râ   Úseekrq   rr   rs   rÈ   r   r=   r?   r@   rA   rH   rÂ   rÃ   rD   rB   ÚstrÚboolÚupperÚencoderC   rE   r[   rk   rx   rF   rU   rÇ   r   r   r9   ÚENCODER_SPEFIFIC_FULCTIONSr   Údebug)rg   rî   rï   rË   ÚfileAttrOffsetÚ	numValuesÚvaluesÚoffsetsrë   ÚoffsetÚresÚcÚlengthsrà   Úraw_valÚfconvertrY   rY   rZ   Úget_attribute©  s‚   " üø
 þ2ÿ ÿÿ"ÿ

zDatEntry.get_attributec                 C   s6   g }| j D ]}| j| }| |j|  |j¡f¡ q|S r\   )rç   rã   rÃ   rÇ   r  )rg   r  rï   rË   rY   rY   rZ   Úget_all_attributesò  s
   

zDatEntry.get_all_attributesc                 C   s   |dkr|   ¡ S |  |¡S )NÚ*)r  r  )rg   ÚitemrY   rY   rZ   Ú__getitem__ù  s   
zDatEntry.__getitem__Nc                 C   s>   |dkr|   ¡ }t|ƒdkr|S |S |  |¡}|d u r|S |S )Nr  r   )r  Úlenr  )rg   r	  Údefaultr  rY   rY   rZ   Úgetþ  s   
zDatEntry.getr\   )r9   r:   r;   rh   r€   r   ro   rk   rð   r  r  r
  r  rY   rY   rY   rZ   rá   ~  s    

Irá   c                   @   sB  e Zd Zd+defdd„Zedefdd„ƒZdd	„ Zd
d„ Z	dd„ Z
dd„ Zdee fdd„Zefdee fdd„Zefdee fdd„Zefdee fdd„Zefdee fdd„Zefdee fdd„Zefdee fdd„Zefdee fdd „Zefdee fd!d"„Zdee fd#d$„Zd%efd&d'„Zdee fd(d)„Z d*S ),ÚSnapshoté † Úmax_cache_sizec                 C   s.   d | _ d | _d | _|| _i | _i | _d | _d S r\   )ÚfilenameÚ
filehandlerÜ   r  Údn_indexÚ
attr_indexÚ
rootdomain)rg   r  rY   rY   rZ   rh   
  s   
zSnapshot.__init__r  c                 Ã   s,   t ƒ }| |_t| dƒ|_| ¡ I d H  |S )NÚrb)r  r  Úopenr  Úparse)r  ÚsnrY   rY   rZ   Ú	from_file  s   €zSnapshot.from_filec                 Ã   s.   | j  d¡ t | j ¡| _|  ¡ I d H  d S ©Nr   )r  rõ   rÌ   rk   rÜ   Úbuild_indexrf   rY   rY   rZ   r  #  s   €zSnapshot.parsec                 Ã   s8  t  d¡ | j | jjtj¡ t  d¡ t 	d| j 
d¡¡d }d}t|ƒD ]#}| j ¡ }t | j¡}| ||¡| j|< || j| j| j< |d7 }q't  d¡ t 	d| j 
d¡¡d }t|ƒD ]#}| j ¡ }t | j¡}| ||¡| j|< || j| j| j< |d7 }q`t  d¡ t 	d| j 
d¡¡d }t|ƒD ]}| j ¡ }t | j¡}	|	 ||¡| j|< |d7 }q™t  d	¡ t  d
¡ | j d¡ t| jjƒD ]O}| j ¡ }t | j| j¡}
|
d  ¡ }|
 dd¡|
jd< |
 dg ¡|
jd< |
 dg ¡|
jd< | jd u rd|
jd v r|| _|
| j|< | j ||
j ¡ qÊ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Ø   rl   ÚSEEK_SETrq   rr   rs   rÂ   ré   rÅ   rk   r   r  rÇ   r­   r¯   rƒ   rÒ   rá   rø   r  rä   r  r  rå   )rg   Únumattrsrè   rë   r   rË   Ú
numclassesrÀ   Ú	numrightsr•   rê   ÚdnrY   rY   rZ   r  (  sT   €













ôzSnapshot.build_indexc                 C  sJ   || j vrd S | j | }| j | }| jD ]}|| j| jv r"|V  qd S r\   )r  r  rç   )rg   Úattrrè   rË   r'  rY   rY   rZ   Úattr_lookup\  s   €



€þzSnapshot.attr_lookupc                 Ã   s,   | j D ]}|| j | d krt|ƒ qd S )NÚ	objectSid)r  Úprint)rg   Úsidr'  rY   rY   rZ   Ú
sid_lookupi  s   €
€þzSnapshot.sid_lookupÚattrsc                 C  s¨   | j D ]M}t|tƒdu rqt| j | dƒdu rQ| j | j ¡ }|| jvr-t d| ¡ qi }i |d< |D ]}| j| | }|d urH||d |< q5t	 
|¡d fV  qd S )NFr¶   Tz&[ADEXPLORER] DN not found in index: %sÚ
attributes)r  Ú
isinstancer—   Úhasattrr±   rø   r  r   rû   r   Ú	from_ldap)rg   r.  rè   r'  Útempr(  r  rY   rY   rZ   Úget_all_schemaentryo  s&   €

€€ñzSnapshot.get_all_schemaentryc                 Ã   s>   i }i |d< |D ]}| j | j | |d |< q	t |¡d fS ©Nr/  )r  r  r   r2  )rg   r.  r3  r(  rY   rY   rZ   Úget_ad_info  s   €zSnapshot.get_ad_infoc                 C  ón   | j D ]0}d| j | jd v r4i }i |d< |D ]}| j | | }|d ur+||d |< qt |¡d fV  qd S )NÚtrustedDomainr!  r/  )r  rä   r   r2  ©rg   r.  r'  r3  r(  r  rY   rY   rZ   Úget_all_trustsˆ  s   €
€€øzSnapshot.get_all_trustsc                 C  ón   | j D ]0}| j | jd dkr4i }i |d< |D ]}| j | | }|d ur+||d |< qt |¡d fV  qd S )Nr   i   0r/  )r  rä   r   r2  r9  rY   rY   rZ   Úget_all_users”  ó   €
€€øzSnapshot.get_all_usersc                 C  r;  )Nr   i  0r/  )r  rä   r   r2  r9  rY   rY   rZ   Úget_all_machinesŸ  r=  zSnapshot.get_all_machinesc                 C  r7  )NÚgroupr!  r/  )r  rä   r   r2  r9  rY   rY   rZ   Úget_all_groupsª  r=  zSnapshot.get_all_groupsc                 C  r7  )NÚorganizationalUnitr!  r/  )r  rä   r   r2  r9  rY   rY   rZ   Úget_all_ousµ  r=  zSnapshot.get_all_ousc                 C  r7  )NÚgroupPolicyContainerr!  r/  )r  rä   r   r2  r9  rY   rY   rZ   Úget_all_gposÀ  r=  zSnapshot.get_all_gposc                 C  s‚   | j D ]:}| j | j}d|d  ¡ v r>d|d v r>i }i |d< |D ]}| j | | }|d ur5||d |< q"t |¡d fV  qd S )NÚ	CONTAINERr  Ú	containerr!  r/  )r  rä   rø   r	   r2  ©rg   r.  r'  Úbhcacher3  r(  r  rY   rY   rZ   Úget_all_containersË  s   €
€€÷zSnapshot.get_all_containersc                 C  s|   | j D ]7}| j | j}d|d v r;d|d  ¡ v r;i }i |d< |D ]}| j | | }|d ur5||d |< q"|d fV  qd S )NÚforeignSecurityPrincipalr!  zFOREIGN-SECURITY-PRINCIPALr  r/  )r  rä   rø   rG  rY   rY   rZ   Ú!get_all_foreignsecurityprincipals×  s   €
€
€÷z*Snapshot.get_all_foreignsecurityprincipalsr'  c                 Ã   s   | j | ¡  d d fS )NÚnTSecurityDescriptor)r  rø   )rg   r'  rY   rY   rZ   Úget_objectacl_by_dnã  s   €zSnapshot.get_objectacl_by_dnc                 Ã   s`   |  ¡ }|| jvri d fS i }i |d< |D ]}| j| | }|d ur)||d |< q|d d fS r5  )rø   r  )rg   r'  r.  r3  r(  r  rY   rY   rZ   Údnattrsæ  s   €
€zSnapshot.dnattrsN)r  )!r9   r:   r;   r—   rh   r€   rö   r  r  r  r)  r-  r   r4  r   r6  r   r:  r   r<  r   r>  r   r@  r   rB  r   rD  r
   rI  rK  rM  rN  rY   rY   rY   rZ   r  	  s(    4r  c               
   Ã   sj  dd l } zt d¡I d H }d}d}| ddg¡2 z3 d H W \}}|d ur(|‚|d7 }q6 t|ƒ td| ƒ | ¡ I d H \}}|d urG|‚t|ƒ d}| ¡ 2 z3 d H W \}}|d ur_|‚qQ6 t|ƒ d}| ¡ 2 z3 d H W \}}|d ury|‚|d7 }qk6 t|ƒ td| ƒ d}| ¡ 2 z3 d H W \}}|d ur|‚|d7 }q6 t|ƒ td	| ƒ d}| 	¡ 2 z3 d H W \}}|d urÁ|‚|d7 }q³6 t|ƒ td
| ƒ d}| 
¡ 2 z3 d H W \}}|d urå|‚|d7 }q×6 t|ƒ td| ƒ d}| ¡ 2 z3 d H W \}}|d ur
|‚|d7 }qû6 t|ƒ td| ƒ W d S  ty4 } z|  ¡  W Y d }~d S d }~ww )Nr   zdd2.datr  Únamer¶   r   zTotal schema entries: %szTotal users: %szTotal machines: %szTotal groups: %szTotal ous: %szTotal gpos: %s)Ú	tracebackr  r  r4  r+  r6  r:  r<  r>  r@  rB  rD  Ú	ExceptionÚ	print_exc)rP  r  rÄ   ÚentryÚerrÚadinfoÚerY   rY   rZ   Úamainó  sˆ   €
ýÿÿ
ý
ý
ý
ý

ý€ÿrW  c                  C   s   dd l } |  tƒ ¡ d S r  )ÚasyncioÚrunrW  )rX  rY   rY   rZ   Úmain<  s   rZ  Ú__main__)0rl   rq   Úenumry   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  rW  rZ  r9   rY   rY   rY   rZ   Ú<module>   s:   	L.!J?3  kI
ÿ