o
    Žõ±jŒ3  ã                   @   sN   d dl Z d dlZd dlmZmZ d dlmZ g d¢Zg d¢ZG dd„ dƒZ	dS )é    N)Ú
MSLDAP_UACÚvn)Úbh_dt_convert)(ÚaccountExpiresÚbadPasswordTimeÚbadPwdCountÚcnÚdescriptionÚcodePageÚcountryCodeÚdisplayNameÚdistinguishedNameÚdNSHostNameÚinstanceTypeÚisCriticalSystemObjectÚ
lastLogoffÚ	lastLogonÚlastLogonTimestampÚ
logonCountÚlocalPolicyFlagsúmsDS-SupportedEncryptionTypesÚnameÚobjectCategoryÚobjectClassÚ
objectGUIDÚ	objectSidÚoperatingSystemÚoperatingSystemVersionÚprimaryGroupIDÚ
pwdLastSetÚsAMAccountNameÚsAMAccountTypeÚsnÚuserAccountControlÚwhenChangedÚwhenCreatedÚservicePrincipalNameúmsDS-AllowedToDelegateToú(msDS-AllowedToActOnBehalfOfOtherIdentityÚoperatingSystemServicePackÚ	isDeletedúms-Mcs-AdmPwdExpirationTimeÚ
sIDHistory)r    r   r   r   r)   r   r   r   r   r%   r$   r&   r   r   r	   Ú
UAC_SCRIPTÚUAC_ACCOUNTDISABLEÚUAC_LOCKOUTÚUAC_PASSWD_NOTREQDÚUAC_PASSWD_CANT_CHANGEÚ#UAC_ENCRYPTED_TEXT_PASSWORD_ALLOWEDÚUAC_DONT_EXPIRE_PASSWDÚUAC_USE_DES_KEY_ONLYÚUAC_DONT_REQUIRE_PREAUTHÚUAC_PASSWORD_EXPIREDc                   @   sZ   e Zd Zdd„ Zdd„ Zdd„ Zeddd	„ƒZd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚMSADMachinec                 C   s  d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _ d | _!d | _"d | _#d | _$d | _%d | _&d | _'d | _(d | _)d | _*d | _+d | _,d S ©N)-r"   r   r   r   r   r   r
   r   r   r   r	   r   r   r   r   r   r   r   Úsupported_enc_typesr   ÚnTSecurityDescriptorr   r   r   r   r   r   r   r   r    r!   r#   r$   r%   r&   ÚallowedtodelegatetoÚ#allowedtoactonbehalfofotheridentityr)   r*   Úms_Mcs_AdmPwdExpirationTimer,   Úwhen_pw_changeÚwhen_pw_expiresÚmust_change_pwÚcanLogon)Úself© rC   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/msldap/ldap_objects/adcomp.pyÚ__init__"   sZ   
zMSADMachine.__init__c                 C   sŒ   t jt jt jt jt jg}|D ]}|| j@ rtjj  S q| j	t 
¡ kr'tjjS |jt 
¡ kr2tjjS |jjdk r<tjjS | j	|j jd d�S )Né¾ñÿÿ©Útzinfo)r   ÚDONT_EXPIRE_PASSWDÚSMARTCARD_REQUIREDÚINTERDOMAIN_TRUST_ACCOUNTÚWORKSTATION_TRUST_ACCOUNTÚSERVER_TRUST_ACCOUNTr#   ÚdatetimeÚmaxr   Ú	timedeltaÚminÚ	maxPwdAgeÚdaysÚreplace)rB   ÚadinfoÚflagsÚflagrC   rC   rD   Úcalc_PasswordMustChangeT   s   
ÿz#MSADMachine.calc_PasswordMustChangec                 C   s˜   t jt jt jt jt jt jg}|D ]
}|| j@ r dS qt j| j@ s3| j	j
d d�tj ¡   ¡ dk r3dS | jtjjkr<dS | jtj ¡   ¡ dk rJdS dS )NFrG   r   T)r   ÚACCOUNTDISABLEÚLOCKOUTrJ   rK   rL   rM   r#   rI   r   rT   rN   ÚnowÚtotal_secondsr@   rQ   )rB   rV   rW   rC   rC   rD   Úcalc_CanLogoni   s   
ÿ,zMSADMachine.calc_CanLogonNc                 C   s  t ƒ }| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d	¡|_	| d  d
¡|_
| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d¡|_| d  d ¡|_ | d  d!¡|_!| d  d"¡|_"| d  d#¡|_#| d  d$¡|_$| d  d%¡|_%| d  d&¡|_&| d  d'¡|_'| d  d(¡|_(| d  d)¡}|�r„t)|ƒ|_*|�r„|j|j+ j,d d*�|_-|j.j/d+k �ret0j0j1|_2n|j.d,k�ru|j|j. j,d d*�n|j|_2| 3|¡|_4| 5¡ |_6|S )-NÚ
attributesr"   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$   r%   r&   r)   r*   r+   r,   r'   r(   r#   rG   rF   r   )7r7   Úgetr"   r   r   r   r   r   r
   r   r	   r   r   r   r   r   r   r   r   r   r9   r   r   r   r   r   r   r   r   r   r    r!   r$   r%   r&   r)   r*   r=   r,   r;   r<   r   r#   Ú	minPwdAgerT   r>   rR   rS   rN   rO   r?   rX   r@   r]   rA   )ÚentryrU   ÚadiÚtemprC   rC   rD   Ú	from_ldap   sf   
(
zMSADMachine.from_ldapc                 C   sò  i }t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | j	ƒ|d	< t | j
ƒ|d
< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | jƒ|d< t | j ƒ|d < t | j!ƒ|d!< t | j"ƒ|d"< t | j#ƒ|d#< |S )$Nr"   r   r   r   r   r   r
   r   r	   r   r   r   r   r   r   r   r   r   r9   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   r   r   r   r   r   r9   r   r   r   r   r   r   r   r   r   r    r!   r$   r%   r&   r#   r)   ©rB   ÚtrC   rC   rD   Úto_dictº   sJ   zMSADMachine.to_dictc                 C   s<   | j d u s
| j dkrdS tt|dd … ƒ}| j |@ rdS dS )NÚ zN/Aé   TF)r#   Úgetattrr   )rB   Úattr_sÚattrrC   rC   rD   Úuac_to_textflagá   s   
zMSADMachine.uac_to_textflagc                    s   ˆ   ¡ ‰‡ ‡fdd„|D ƒS )Nc                    s8   g | ]}|d d… dkrt ˆ |¡ƒnt ˆ  |¡ƒ‘qS )Nri   ÚUAC_)Ústrr_   rm   )Ú.0Úxre   rC   rD   Ú
<listcomp>ë   s   8 z'MSADMachine.get_row.<locals>.<listcomp>)rg   )rB   ÚattrsrC   re   rD   Úget_rowé   s   zMSADMachine.get_rowc                 C   s*   d}| j D ]}|d|| j | f 7 }q|S )Nrh   z	%s : %s
)Ú__dict__)rB   rf   ÚkrC   rC   rD   Ú__str__î   s   
zMSADMachine.__str__c                 C   s4  | j }|d u rtdƒ}| j}| jd ur | jd ur | jd | j }g }| jd ur4| jD ]	}| t|ƒ¡ q*| j}|d urBt 	|¡ 
¡ }| j}|d u rKg }i d|“d| j“dg “dg “dg “d| j“d	t| jƒ d
d¡d d
 t| jƒ “dg “dg “dt| jƒ“dd“dd “dg “di dd| j ¡ | ¡ f “d|“dt| jƒ d
d¡d “dt| jƒ ¡ “d|  d¡“dtj|v“dtj|v “d| j“d| jd u“dt| jƒ“d t| jƒ“d!t| jƒ“d"| j“d#| j“d$|“d%|“d&|““d'dd g d(œ“d)dd g d(œ“d*dd g d(œ“dd g d(œdd g d(œdd g d(œdd g d(œd+œ¥S ),Nr   ú Ú$_allowedtoactonbehalfofotheridentityÚ_dnsÚAcesÚAllowedToDelegateÚAllowedToActÚObjectIdentifierÚPrimaryGroupSIDú-é   Ú
SPNTargetsÚHasSIDHistoryÚ	IsDeletedÚIsACLProtectedFÚStatusÚDumpSMSAPasswordÚ
Propertiesr   z%s@%sÚdomainÚ	domainsidÚdistinguishednameÚunconstraineddelegationÚUAC_TRUSTED_FOR_DELEGATIONÚenabledÚtrustedtoauthÚsamaccountnameÚhaslapsÚ	lastlogonÚlastlogontimestampÚwhencreatedÚserviceprincipalnamesr	   ÚoperatingsystemÚ
sidhistoryÚallowedtodelegateÚLocalAdmins)Ú	CollectedÚFailureReasonÚResultsÚPSRemoteUsersÚRemoteDesktopUsers)Ú	DcomUsersÚSessionsÚPrivilegedSessionsÚRegistrySessions)r#   r   r   r)   r,   Úappendro   r<   Úbase64Ú	b64encodeÚdecoder;   r   r   Úrsplitr   Úboolr*   r    Úupperr   rm   rY   Ú&TRUSTED_TO_AUTHENTICATE_FOR_DELEGATIONr=   r   r   r   r%   r&   r	   )rB   r‰   ÚuacÚopr—   ÚsidÚactonbehalfÚalloweddelegrC   rC   rD   Úto_bhô   sæ   



ÿþüûúù$ø	÷
ö
õôóòÿþýü
û
ú
ùø
	÷

ö
õ
ôóòñðïñ"ýÞ'ýÙ,ýÔ2ýýýýÀzMSADMachine.to_bhr8   )Ú__name__Ú
__module__Ú__qualname__rE   rX   r]   Ústaticmethodrd   rg   rm   rt   rw   r°   rC   rC   rC   rD   r7   !   s    2:'r7   )
rN   r¤   Úmsldap.ldap_objects.commonr   r   Úmsldap.commons.utilsr   ÚMSADMachine_ATTRSÚMSADMachine_TSV_ATTRSr7   rC   rC   rC   rD   Ú<module>   s   