a
    “I_ð  ã                   @   s`   d Z ddlZddlmZmZmZ ddlmZmZ ddlm	Z	m
Z
 ddlmZ G dd„ deƒZdS )	z5Utility methods for security descriptor manipulation.é    N)ÚMessageÚMessageElementÚDn)ÚFLAG_MOD_REPLACEÚ
SCOPE_BASE)Úndr_packÚ
ndr_unpack)Úsecurityc                   @   sH   e Zd ZdZdd„ Zddd„Zddd„Zd	d
„ Zdd„ Zg fdd„Z	dS )ÚSDUtilszCSome utilities for manipulation of security descriptors on objects.c                 C   s   || _ t | j  ¡ ¡| _d S )N)Úldbr	   Údom_sidZget_domain_sidÚ
domain_sid)ÚselfZsamdb© r   ú0/usr/lib/python3/dist-packages/samba/sd_utils.pyÚ__init__   s    zSDUtils.__init__Nc                 C   s’   t ƒ }t|tƒr||_nt| j|ƒ|_t|tƒs@t|tjƒs@J ‚t|tƒr\tj || j	¡}nt|tjƒrl|}t
t|ƒtdƒ|d< | j ||¡ dS )zfModify security descriptor using either SDDL string
            or security.descriptor object
        ÚnTSecurityDescriptorN)r   Ú
isinstancer   Zdnr   Ústrr	   Ú
descriptorZ	from_sddlr   r   r   r   Zmodify)r   Ú	object_dnZsdÚcontrolsÚmZtmp_descr   r   r   Úmodify_sd_on_dn#   s    

þzSDUtils.modify_sd_on_dnc                 C   s4   | j j|td dg|d}|d d d }ttj|ƒS )Nr   )r   r   )r   Úsearchr   r   r	   r   )r   r   r   ÚresÚdescr   r   r   Úread_sd_on_dn8   s
    ÿzSDUtils.read_sd_on_dnc                 C   s$   | j  |¡}ttj|d d d ƒS )Nr   Z	objectSid)r   r   r   r	   r   )r   r   r   r   r   r   Úget_object_sid>   s    zSDUtils.get_object_sidc                 C   sz   |   |dg¡}| | j¡}||v r&dS | d¡dkr^|d| d¡… | || d¡d…  }n|| }|  ||dg¡ dS )z5Add an ACE to an objects security descriptor
        úshow_deleted:1Nú(r   )r   Úas_sddlr   ÚfindÚindexr   )r   r   Zacer   Z	desc_sddlr   r   r   Údacl_add_aceB   s    ÿzSDUtils.dacl_add_acec                 C   s   |   ||dg ¡}| | j¡S )z:Return object nTSecutiryDescriptor in SDDL format
        r   )r   r!   r   )r   r   r   r   r   r   r   Úget_sd_as_sddlP   s    zSDUtils.get_sd_as_sddl)N)N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r$   r%   r   r   r   r   r
      s   

r
   )r)   Zsambar   r   r   r   r   r   Z	samba.ndrr   r   Zsamba.dcerpcr	   Úobjectr
   r   r   r   r   Ú<module>   s   