o
    õ±ji3  ã                   @   sÊ   d dl mZ d dlmZ d dlZd dlZG dd„ dejƒZejej	ej
ejdœZdd„ e ¡ D ƒZd	d
„ ZG dd„ dƒZedkrcdZdZejeedZeeƒ ee ¡ ƒ eee ¡ kƒ eeƒ dS dS )é    )ÚACL)ÚSIDNc                   @   sD   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S )ÚSE_SACLé   i   é   é   i   é   é   i @  i   i   é   i    i €  N)Ú__name__Ú
__module__Ú__qualname__ÚSE_DACL_AUTO_INHERIT_REQÚSE_DACL_AUTO_INHERITEDÚSE_DACL_DEFAULTEDÚSE_DACL_PRESENTÚSE_DACL_PROTECTEDÚSE_GROUP_DEFAULTEDÚSE_OWNER_DEFAULTEDÚSE_RM_CONTROL_VALIDÚSE_SACL_AUTO_INHERIT_REQÚSE_SACL_AUTO_INHERITEDÚSE_SACL_DEFAULTEDÚSE_SACL_PRESENTÚSE_SACL_PROTECTEDÚSE_SELF_RELATIVE© r   r   ú’/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/winacl/dtyp/security_descriptor.pyr      s    r   )ÚPÚARÚAIÚSRc                 C   s   i | ]\}}||“qS r   r   )Ú.0ÚkÚvr   r   r   Ú
<dictcomp>%   s    r%   c                 C   s2   d}t D ]}|tjkrq|| v r|t | 7 }q|S )NÚ )Úsddl_acl_control_flags_invr   r   )ÚflagsÚtÚxr   r   r   Úsddl_acl_control'   s   
€r+   c                   @   sx   e Zd Zddd„Zeddd„ƒZdd„ Zdd	„ Zedd
d„ƒZddd„Z	edde
fdd„ƒZdd„ Zdd„ Zdd„ ZdS )ÚSECURITY_DESCRIPTORNc                 C   s4   d| _ d| _d | _d | _d | _d | _d | _|| _d S )Nr	   r   )ÚRevisionÚSbz1ÚControlÚOwnerÚGroupÚSaclÚDaclÚobject_type)Úselfr4   r   r   r   Ú__init__2   s   
zSECURITY_DESCRIPTOR.__init__c                 C   s   t  t | ¡|¡S ©N)r,   Úfrom_bufferÚioÚBytesIO)Údatar4   r   r   r   Ú
from_bytes=   s   zSECURITY_DESCRIPTOR.from_bytesc                 C   s$   t  ¡ }|  |¡ | d¡ | ¡ S )Nr   )r9   r:   Ú	to_bufferÚseekÚread)r5   Úbuffr   r   r   Úto_bytesA   s   

zSECURITY_DESCRIPTOR.to_bytesc                 C   s|  |  ¡ }t ¡ }d}d}d}d}| jd ur!| | j ¡ ¡ |d }| jd ur6|d |  ¡  }| | j ¡ ¡ | jd urK|d |  ¡  }| | j ¡ ¡ | jd ur`|d |  ¡  }| | j ¡ ¡ | | j	jdddd¡ | | j
jdddd¡ | | jjdddd¡ | |jdddd¡ | |jdddd¡ | |jdddd¡ | |jdddd¡ | d¡ | | ¡ ¡ d S )	Nr   é   r	   ÚlittleF©Úsignedr   r   )Útellr9   r:   r0   ÚwriterA   r1   r2   r3   r-   r.   r/   r>   r?   )r5   r@   ÚstartÚ	buff_dataÚOffsetOwnerÚOffsetGroupÚ
OffsetSaclÚ
OffsetDaclr   r   r   r=   G   s6   




zSECURITY_DESCRIPTOR.to_bufferc                 C   s,  t |ƒ}tj|  d¡ddd|_tj|  d¡ddd|_ttj|  d¡dddƒ|_tj|  d¡ddd}tj|  d¡ddd}tj|  d¡ddd}tj|  d¡ddd}|dkre|  |¡ t	 
| ¡|_|dkrt|  |¡ t	 
| ¡|_|dkr„|  |¡ t 
| |¡|_|dkr”|  |¡ t 
| |¡|_|S )Nr	   rC   FrD   r   r   r   )r,   Úintr<   r?   r-   r.   r   r/   r>   r   r8   r0   r1   r   r2   r3   )r@   r4   ÚsdrJ   rK   rL   rM   r   r   r   r8   n   s*   



zSECURITY_DESCRIPTOR.from_bufferc                 C   s   d}| j d ur|d| j  ¡  7 }| jd ur|d| j ¡  7 }| jd ur2|dt| jƒ | j |¡ 7 }| jd urF|dt| jƒ | j |¡ 7 }|S )Nr&   zO:zG:zS:zD:)r0   Úto_sddlr1   r2   r+   r/   r3   )r5   r4   r)   r   r   r   rP   ‹   s   



zSECURITY_DESCRIPTOR.to_sddlÚsddlc                 C   sÎ  t |d}|  d¡}|d g}d}|t|ƒk r5| || d d… ¡ | || d ¡ |d7 }|t|ƒk si }d}|t|ƒk rZ|| dkrFn||d  ||| < |d7 }|t|ƒk s?tj|_d }d|v rgd}nd	|v rmd	}|d ur÷d
|| v r‚||  d
d¡\}}	n|| }| ¡  d¡dkr¥| jtj	O  _| jtj
O  _| dd¡}tt|ƒƒD ]K}
|d d… }t| }|tjkrÍ| jtjO  _| jtjO  _n|tjkrã| jtjO  _| jtjO  _n| j|O  _|dd … }|dkrö nq«d|v rtj|d |d|_d|v rtj|d |d|_d|v r=| jtjO  _|d }	|	 d
¡}|dkr=tj|	|d … ||d|_d	|v re| jtjO  _|d	 }	|	 d
¡}|dkretj|	|d … ||d|_|S )N)r4   ú:r   r	   éÿÿÿÿú)r   ÚDÚSú(r   r&   ÚO©Ú
domain_sidÚG)r4   rZ   )r,   ÚsplitÚlenÚappendr   r   r/   ÚupperÚfindr   r   ÚreplaceÚrangeÚsddl_acl_control_flagsr   r   r   r   r   Ú	from_sddlr0   r1   r   r   r3   r   r2   )rQ   r4   rZ   rO   ÚparamsÚnpÚiÚfkr(   ÚaclÚ_r*   ÚcfÚmr   r   r   rd   —   s|   


ýü

ÿ







zSECURITY_DESCRIPTOR.from_sddlc                 C   s\   d}|d| j  7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|S )Nz=== SECURITY_DESCRIPTOR ==
zRevision : %s
zControl : %s
zOwner : %s
zGroup : %s
zSacl : %s
zDacl : %s
)r-   r/   r0   r1   r2   r3   )r5   r)   r   r   r   Ú__str__Þ   s   zSECURITY_DESCRIPTOR.__str__c                 C   sö   t |tƒsdS |j| jkrdS |j| jkrdS | j| jkrdS | j| jkr'dS | j| jkr/dS |jd ur;| jd u r;dS |jd urG| jd u rGdS |jd u rS| jd urSdS |jd u r_| jd ur_dS | jd url| j|jkrldS | jd ury| j|jkrydS dS )NFT)	Ú
isinstancer,   r-   r.   r/   r0   r1   r2   r3   )r5   rO   r   r   r   Ú__eq__è   s6   


zSECURITY_DESCRIPTOR.__eq__c                 C   sf  i }|j | j kr| j |j g|d< |j| jkr| j|jg|d< | j| jkr,| j|jg|d< | j| jkr:| j|jg|d< | j| jkrH| j|jg|d< |jd urV| jd u rVd |d< |jd urd| jd u rdd |d< |jd u rr| jd urrd |d< |jd u r€| jd ur€d |d	< | jd ur›|jd ur›| j |j¡}t|ƒd
kr›||d< | jd ur±| j |j¡}t|ƒd
kr±||d< |S )NÚrevisionr.   r/   r0   r1   Ú
Sacl_addedÚ
Dacl_addedÚSacl_deletedÚDacl_deletedr   r2   r3   )	r-   r.   r/   r0   r1   r2   r3   Údiffr]   )r5   rO   Údiff_resÚ	sacl_diffÚ	dacl_diffr   r   r   ru     s8   
zSECURITY_DESCRIPTOR.diffr7   )NN)r   r   r   r6   Ústaticmethodr<   rA   r=   r8   rP   Ústrrd   rm   ro   ru   r   r   r   r   r,   1   s    
'
F
r,   Ú__main__z)S-1-5-21-3448413973-1765323015-1500960949zªO:BAG:DUD:AI(A;OICI;FA;;;DA)(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;0x1200a9;;;BU)(A;CIID;0x100004;;;BU)(A;CIID;0x100002;;;BU)(A;OICIIOID;FA;;;CO)(A;OICIID;FA;;;DA)rY   )Úwinacl.dtyp.aclr   Úwinacl.dtyp.sidr   Úenumr9   ÚIntFlagr   r   r   r   r   rc   Úitemsr'   r+   r,   r   Údsr*   rd   ÚaÚprintrP   r   r   r   r   Ú<module>   s.    ü
 wø