o
    �õ±jq  ã                   @   sd   d dl mZ d dlZd dlZd dlZd dlmZ G dd„ dejƒZg d¢Z	g d¢Z
G dd	„ d	ƒZdS )
é    )ÚACEN)ÚListc                   @   s   e Zd ZdZdZdS )ÚACL_REVISIONé   é   N)Ú__name__Ú
__module__Ú__qualname__ÚNO_DSÚDS© r   r   ú‚/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/winacl/dtyp/acl.pyr      s    r   )r   é   r   é   é   é   é   )é   é   é   é   r   c                   @   sd   e Zd Zddd„Zeddd„ƒZdd„ Zdd	„ Zd
d„ Zddd„Z	eddd„ƒZ
dd„ Zdd„ ZdS )ÚACLNc                 C   s.   d | _ d| _d | _d | _d| _g | _|| _d S ©Nr   )ÚAclRevisionÚSbz1ÚAclSizeÚAceCountÚSbz2ÚacesÚsd_object_type)Úselfr   r   r   r   Ú__init__   s   
zACL.__init__c                 C   s¨   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�|_t	|jƒD ]}|j
 t | |¡¡ qE|S )Nr   ÚlittleF©Úsignedr   )r   ÚintÚ
from_bytesÚreadr   r   r   r   r   Úranger   Úappendr   Úfrom_buffer)Úbuffr   ÚaclÚ_r   r   r   r*      s   zACL.from_bufferc                 C   s$   t  ¡ }|  |¡ | d¡ | ¡ S r   )ÚioÚBytesIOÚ	to_bufferÚseekr'   )r    r+   r   r   r   Úto_bytes%   s   

zACL.to_bytesc                 C   sÌ   t  ¡ }t| jƒ| _| jD ]}| |¡ qd| ¡  | _| | j	j
dddd�¡ | | jj
dddd�¡ | | jj
dddd�¡ | | jj
dddd�¡ | | jj
dddd�¡ | d¡ | | ¡ ¡ d S )Nr   r   r"   Fr#   r   r   )r.   r/   Úlenr   r   r0   Útellr   Úwriter   r2   r   r   r1   r'   )r    r+   Ú	data_buffÚacer   r   r   r0   +   s   

zACL.to_bufferc                 C   s$   d}| j D ]
}|dt|ƒ 7 }q|S )Nz=== ACL ===
z%s
)r   Ústr)r    Útr7   r   r   r   Ú__str__<   s   
zACL.__str__c                 C   s"   d}| j D ]	}|| |¡7 }q|S )NÚ )r   Úto_sddl)r    Úobject_typer9   r7   r   r   r   r<   B   s   
zACL.to_sddlc                 C   sp   t ƒ }d|_d|_|  d¡D ]'}tj|||d�}|j |¡ | jd7  _|jdkr5|jj	t
v r5tjj	|_q|S )Nr   r   z)()r=   Ú
domain_sidr   )r   r   r   Úsplitr   Ú	from_sddlr   r)   ÚAceTypeÚvalueÚACL_REV_DS_ALLOWED_TYPESr   r   )Úsddl_strr=   r>   r,   Úace_sddlr7   r   r   r   r@   H   s   

€zACL.from_sddlc           
      C   s8  t |tƒsdS | j|jkrdS | j|jkrdS | j|jkrdS i }i }| jD ]!}t ¡ }| |¡ | 	¡ }| 
dd¡ d|t | |¡¡ ¡ < q&|jD ]!}t ¡ }| |¡ | 	¡ }| 
dd¡ d|t | |¡¡ ¡ < qK|D ]	}||vrx dS qo|D ]	}||vr„ dS q{t| ¡ | ¡ ƒD ]\}}	||	kr™ dS qŽdS )NFr   r   T)Ú
isinstancer   r   r   r   r   r.   r/   r0   r4   r1   ÚhashlibÚsha1r'   ÚdigestÚzipÚkeys)
r    r,   Ú	this_acesÚ	that_acesr7   r+   ÚposÚhaÚhthisÚhthatr   r   r   Ú__eq__X   sF   




ÿÿÿz
ACL.__eq__c           
      C   s<  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< i }i }| jD ]#}t ¡ }| |¡ | ¡ }| dd¡ | 	|¡}||t
 |¡ ¡ < q3|jD ]#}t ¡ }| |¡ | ¡ }| dd¡ | 	|¡}||t
 |¡ ¡ < qZ|D ]}	|	|vrŒ||	 |d< q€|D ]}	|	|vr›||	 |d< q�|S )NÚrevisionr   r   r   ÚdeletedÚadded)r   r   r   r   r.   r/   r0   r4   r1   r'   rG   rH   rI   )
r    r,   Údiff_resrL   rM   r7   r+   rN   ÚdatarO   r   r   r   Údiff€   s@   





€€zACL.diff)N)NN)r   r   r	   r!   Ústaticmethodr*   r2   r0   r:   r<   r@   rR   rX   r   r   r   r   r      s    


(r   )Úwinacl.dtyp.acer   r.   ÚenumrG   Útypingr   ÚEnumr   ÚACL_REV_NODS_ALLOWED_TYPESrC   r   r   r   r   r   Ú<module>   s    