o
    j3                     @   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)}|rt)||_*|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   