
    IdZ"                     .   d dl mZ 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e       Z$ G d de$      Z% G d de$      Z& G d de$      Z' G d de"      Z(y)    N)sd_utils)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                   d    e Zd ZdZdZej                  ej                  ej                  dZ	ddZ
y)cmd_dsacl_basezBase class for DSACL commands.z%prog [options])	sambaoptscredoptsversionoptsc                     |j                  |      }| j                  j                  |d|d       | j                  j                  |dz          y )Nzdescriptor for z:

)get_sd_as_sddloutfwrite)self	sd_helper	object_dnprefix	desc_sddls        4/usr/lib/python3/dist-packages/samba/netcmd/dsacl.py	print_aclzcmd_dsacl_base.print_acl9   s<    ,,Y7			FIFG			D()    N) )__name__
__module____qualname____doc__synopsisoptionsSambaOptionsCredentialsOptionsVersionOptionstakes_optiongroupsr+    r,   r*   r   r   .   s4    ( H ))..--*r,   r   c            
           e Zd ZdZdZ edddedd       ed	d
g de       edd
ddgd       eddd       eddd       eddd      gZd Zd Z		 ddZ
y)cmd_dsacl_setz)Modify access list on a directory object.z+ The access control right to allow or deny -H--URL%LDB URL for database or target serverURLHhelptypemetavardestz--carchoicez
change-ridz
change-pdczchange-infrastructurezchange-schemazchange-namingallocate_ridszget-changeszget-changes-allzget-changes-filteredztopology-manageztopology-monitorz	repl-synczro-repl-secret-sync)rB   choicesrA   z--actionallowdenyzDeny or allow access
--objectdn#DN of the object whose SD to modifystringrA   rB   z--trusteednz!DN of the entity that gets access--sddlz1An ACE or group of ACEs to be added on the objectc                     |j                  |dt              }t        |      dk(  sJ t        t        j
                  |d   d   d         S )Nz(objectClass=*))base
expressionscope   r   	objectSid)searchr   lenr   r   dom_sid)r%   samdb	trusteednress       r*   find_trustee_sidzcmd_dsacl_set.find_trustee_sid_   sN    ll	6G!+  -3x1}}(**CF;,?,BCCr,   c                 .   |j                  ||      \  }}|D ];  }|j                  |j                        }| j                  j	                  d|z         = |D ];  }|j                  |j                        }| j                  j	                  d|z         = y)zAdd new ace explicitly.%WARNING: ignored INHERITED_ACE (%s).
zDWARNING: (%s) was already found in the current security descriptor.
N)dacl_prepend_acesas_sddl
domain_sidr#   r$   )r%   r&   r'   new_aceaiiiacesddls           r*   add_acezcmd_dsacl_set.add_acee   s    ++Iw?2 	MC;;y334DIIOODtKL	M  	lC;;y334DIIOOcfjjk	lr,   Nc
                    |j                         }
|j                  |
      }|||||| j                         S t        |t	               ||
      }t        j                  |      }t        t        t        t        t        t        t        t        t        t         t"        t$        t&        d}| j)                  ||      }|r|}nD|dk(  rd||   dt+        |      d}n)|dk(  rd||   dt+        |      d}nt-        d	|z        | j/                  ||d
       | j1                  |||       | j/                  ||d       y )Nurlsession_infocredentialslprF   rI   z(OA;;CR;z;;)rJ   z(OD;;CR;zWrong argument '%s'!old r(   new )get_loadparmget_credentialsusager   r   r   SDUtilsr   r   r
   r   r	   r   r   r   r   r   r   r   r   r\   strr   r+   rg   )r%   caractionobjectdnrZ   rf   r?   r   r   r   rm   credsrY   r&   carssidrb   s                    r*   runzcmd_dsacl_set.runo   s-   ##%((,<S[FN ( 0I4E::<!.*:"'B0$$U+	81)D!>!>!73#;(H#;$=5'C ##E95Gw+/9c#h?Gv+/9c#h?G5>??y(6:Y'2y(6:r,   NNNN)r.   r/   r0   r1   car_helpr   rv   takes_optionsr\   rg   r}   r8   r,   r*   r:   r:   ?   s    3@H 	tW#JS	2wX 0G 	 	z7F2C.	0|"G	}#F	xQ	/M6Dl @D&;r,   r:   c                   L    e Zd ZdZ edddedd       edd	d
      gZ	 ddZy)cmd_dsacl_getz(Print access list on a directory object.r;   r<   r=   r>   r?   r@   rK   rL   rM   rN   Nc                     |j                         }|j                  |      }t        |t               ||      }t	        j
                  |      }	| j                  |	|       y )Nri   )rr   rs   r   r   r   ru   r+   )
r%   ry   r?   r   r   r   rm   rz   rY   r&   s
             r*   r}   zcmd_dsacl_get.run   sT    ##%((,!.*:"&$$U+	y(+r,   r~   )r.   r/   r0   r1   r   rv   r   r}   r8   r,   r*   r   r      s@    2 	tW#JS	2|"G	
M @D,r,   r   c                   d    e Zd ZdZ edddedd       edd	d
       eddd
      gZddZd Zy)cmd_dsacl_deletez2Delete an access list entry on a directory object.r;   r<   r=   r>   r?   r@   rK   rL   rM   rN   rO   z5An ACE or group of ACEs to be deleted from the objectNc                 <   |j                         }|j                  |      }||| j                         S t        |t	               ||      }	t        j                  |	      }
| j                  |
|d       | j                  |
||       | j                  |
|d       y )Nri   ro   rp   rq   )	rr   rs   rt   r   r   r   ru   r+   
delete_ace)r%   ry   rf   r?   r   r   r   rm   rz   rY   r&   s              r*   r}   zcmd_dsacl_delete.run   s    ##%((,<8+::<!.*:"'B0$$U+	y(6:	8T2y(6:r,   c                 .   |j                  ||      \  }}|D ];  }|j                  |j                        }| j                  j	                  d|z         = |D ];  }|j                  |j                        }| j                  j	                  d|z         = y)zDelete ace explicitly.r^   z@WARNING: (%s) was not found in the current security descriptor.
N)dacl_delete_acesr`   ra   r#   r$   )r%   r&   r'   delete_acesdird   re   rf   s           r*   r   zcmd_dsacl_delete.delete_ace   s    **9kB2 	MC;;y334DIIOODtKL	M  	hC;;y334DIIOO_bffg	hr,   r~   )	r.   r/   r0   r1   r   rv   r   r}   r   r8   r,   r*   r   r      sO    < 	tW#JS	2|"G	xU	
M;hr,   r   c                   P    e Zd ZdZi Z e       ed<    e       ed<    e       ed<   y)	cmd_dsaclzDS ACLs manipulation.setgetdeleteN)r.   r/   r0   r1   subcommandsr:   r   r   r8   r,   r*   r   r      s/    K&K&K,.Kr,   r   ))samba.getoptgetoptr3   sambar   samba.dcerpcr   samba.samdbr   	samba.ndrr   r   samba.dcerpc.securityr   r	   r
   r   r   r   r   r   r   r   r   r   r   ldbr   re
samba.authr   samba.netcmdr   r   r   r   r   r:   r   r   r   r8   r,   r*   <module>r      s   &   !  *" " " "   	 % *W *"V;N V;r,N ,*#h~ #hL/ /r,   