a
    cl_%                     @   s   d dl mZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZmZmZmZmZmZmZmZmZmZmZmZmZ d dlZd dlmZ d dlZd dlmZ d dlmZmZm Z m!Z! G d	d
 d
eZ"G dd deZ#G dd de Z$dS )    N)security)SamDB)
ndr_unpackndr_pack)GUID_DRS_ALLOCATE_RIDSGUID_DRS_CHANGE_DOMAIN_MASTERGUID_DRS_CHANGE_INFR_MASTERGUID_DRS_CHANGE_PDCGUID_DRS_CHANGE_RID_MASTERGUID_DRS_CHANGE_SCHEMA_MASTERGUID_DRS_GET_CHANGESGUID_DRS_GET_ALL_CHANGES GUID_DRS_GET_FILTERED_ATTRIBUTESGUID_DRS_MANAGE_TOPOLOGYGUID_DRS_MONITOR_TOPOLOGYGUID_DRS_REPL_SYNCRONIZEGUID_DRS_RO_REPL_SECRET_SYNC)
SCOPE_BASE)system_session)CommandCommandErrorSuperCommandOptionc                
   @   s   e Zd ZdZdZdZejejej	dZ
edddedd	d
eddg dededdddgddeddddeddddeddddgZdd Zd+ddZd d! Zd"d# Zd$d% Zd,d'd(Zd-d)d*ZdS ).cmd_dsacl_setz)Modify access list on a directory object.%prog [options]z+ The access control right to allow or deny 	sambaoptscredoptsversionopts-H--URL%LDB URL for database or target serverURLHhelptypemetavardestz--carZchoicez
change-ridz
change-pdczchange-infrastructurezchange-schemazchange-namingZallocate_ridszget-changeszget-changes-allzget-changes-filteredztopology-manageztopology-monitorz	repl-synczro-repl-secret-sync)r&   choicesr%   z--actionallowdenyzDeny or allow access
--objectdn#DN of the object whose SD to modifystringr%   r&   z--trusteednz!DN of the entity that gets accessz--sddlz1An ACE or group of ACEs to be added on the objectc                 C   s8   |j |dtd}t|dks J ttj|d d d S )N(objectClass=*)baseZ
expressionscope   r   	objectSid)searchr   lenr   r   dom_sid)selfsamdb	trusteednres r>   4/usr/lib/python3/dist-packages/samba/netcmd/dsacl.pyfind_trustee_sidU   s
    zcmd_dsacl_set.find_trustee_sidNc                 C   sL   t |tjsJ t }t|||_tt|tj	d|d< |
| d S )NnTSecurityDescriptor)
isinstancer   
descriptorldbZMessageZDnZdnZMessageElementr   ZFLAG_MOD_REPLACEZmodify)r:   r;   	object_dndescZcontrolsmr>   r>   r?   modify_descriptor[   s    
zcmd_dsacl_set.modify_descriptorc                 C   s>   |j |tdgd}t|dks"J |d d d }ttj|S NrA   )r3   r4   attrsr5   r   r7   r   r8   r   r   rC   r:   r;   rE   r=   rF   r>   r>   r?   read_descriptord   s    zcmd_dsacl_set.read_descriptorc                 C   s,   |j | dtd}ttj|d d d S Nr1   r2   r   r6   r7   Z	domain_dnr   r   r   r9   r:   r;   r=   r>   r>   r?   get_domain_sidl   s    
zcmd_dsacl_set.get_domain_sidc           	      C   s   |  ||}tjd| | |}td| }|D ]}|| |}td|}|D ]}d|v r\||d}q\||v rq8|	ddkr|d|
d | ||
dd  }n|| }tj|| |}| ||| q8dS )zAdd new ace explicitly.zD:z\(.*?\)ZID (r   N)rM   r   rC   Z	from_sddlrQ   refindallas_sddlreplacefindindexrH   )	r:   r;   rE   new_acerF   Znew_ace_list	desc_sddlZ	desc_acesZacer>   r>   r?   add_aceq   s     *zcmd_dsacl_set.add_aceFc                 C   sV   |  ||}|| |}|r2| jd|  n| jd|  | j|d  d S )Nznew descriptor for %s:
zold descriptor for %s:

rM   rV   rQ   Zoutfwrite)r:   r;   rE   newrF   r[   r>   r>   r?   	print_acl   s    zcmd_dsacl_set.print_aclc
                 C   s   |  }
||
}|d u rB|d u s:|d u s:|d u s:|d u rB|  S t|t ||
d}ttttt	t
tttttttd}| ||}|r|}nH|dkrd|| t|f }n*|dkrd|| t|f }ntd| | || | ||| | j||dd	 d S )
NZurlZsession_infoZcredentialslpr)   r+   z(OA;;CR;%s;;%s)r,   z(OD;;CR;%s;;%s)zWrong argument '%s'!T)r`   )get_loadparmget_credentialsZusager   r   r
   r	   r   r   r   r   r   r   r   r   r   r   r   r@   strr   ra   r\   )r:   Zcaractionobjectdnr<   Zsddlr#   r   r   r   rc   credsr;   ZcarsZsidrZ   r>   r>   r?   run   sH    
zcmd_dsacl_set.run)N)F)NNNN)__name__
__module____qualname____doc__synopsisZcar_helpoptionsSambaOptionsCredentialsOptionsVersionOptionstakes_optiongroupsr   rf   takes_optionsr@   rH   rM   rQ   r\   ra   rj   r>   r>   r>   r?   r   .   sD   
	

 r   c                   @   sj   e Zd ZdZdZejejejdZ	e
dddeddd	e
d
dddgZdd Zdd Zdd ZdddZdS )cmd_dsacl_getz(Print access list on a directory object.r   r   r   r    r!   r"   r#   r$   r-   r.   r/   r0   c                 C   s>   |j |tdgd}t|dks"J |d d d }ttj|S rI   rK   rL   r>   r>   r?   rM      s    zcmd_dsacl_get.read_descriptorc                 C   s,   |j | dtd}ttj|d d d S rN   rO   rP   r>   r>   r?   rQ      s    
zcmd_dsacl_get.get_domain_sidc                 C   s@   |  ||}|| |}| jd|  | j|d  d S )Nzdescriptor for %s:
r]   r^   )r:   r;   rE   rF   r[   r>   r>   r?   ra      s    zcmd_dsacl_get.print_aclNc           	      C   s4   |  }||}t|t ||d}| || d S )Nrb   )rd   re   r   r   ra   )	r:   rh   r#   r   r   r   rc   ri   r;   r>   r>   r?   rj      s    
zcmd_dsacl_get.run)NNNN)rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   r   rf   ru   rM   rQ   ra   rj   r>   r>   r>   r?   rv      s$    rv   c                   @   s(   e Zd ZdZi Ze ed< e ed< dS )	cmd_dsaclzDS ACLs manipulation.setgetN)rk   rl   rm   rn   Zsubcommandsr   rv   r>   r>   r>   r?   rw      s   
rw   )%Zsamba.getoptZgetoptrp   Zsamba.dcerpcr   Zsamba.samdbr   Z	samba.ndrr   r   Zsamba.dcerpc.securityr   r   r   r	   r
   r   r   r   r   r   r   r   r   rD   r   rT   Z
samba.authr   Zsamba.netcmdr   r   r   r   r   rv   rw   r>   r>   r>   r?   <module>   s   <
 
/