
    b%                     
   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$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            
       (   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	
           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$dZd Zd Zd  Zd%d"Z	 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--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)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                     |                     |dt                    }t          |          dk    sJ t          t          j        |d         d         d                   S )N(objectClass=*)base
expressionscope   r   	objectSid)searchr   lenr   r   dom_sid)selfsamdb	trusteednress       4/usr/lib/python3/dist-packages/samba/netcmd/dsacl.pyfind_trustee_sidzcmd_dsacl_set.find_trustee_sidU   sV    ll	6G!+  - -3xx1}}}}(*CF;,?,BCCC    Nc                 "   t          |t          j                  sJ t          j                    }t          j        ||          |_        t          j        t          |          t          j	        d          |d<   |
                    |           d S )NnTSecurityDescriptor)
isinstancer   
descriptorldbMessageDndnMessageElementr   FLAG_MOD_REPLACEmodify)r@   rA   	object_dndesccontrolsms         rD   modify_descriptorzcmd_dsacl_set.modify_descriptor[   sw    $ 344555KMMveY''$'$6$#"6&%( %(
 ! 	QrF   c                     |                     |t          dg          }t          |          dk    sJ |d         d         d         }t          t          j        |          S NrH   )r8   r:   attrsr;   r   r=   r   r>   r   r   rJ   r@   rA   rR   rC   rS   s        rD   read_descriptorzcmd_dsacl_set.read_descriptord   s`    ll	"8!9  ; ; 3xx1}}}}1v,-a0(-t444rF   c                     |                     |                                dt                    }t          t          j        |d         d         d                   S Nr6   r7   r   r<   r=   	domain_dnr   r   r   r?   r@   rA   rC   s      rD   get_domain_sidzcmd_dsacl_set.get_domain_sidl   sN    ll 1 1&7z  K K(*CF;,?,BCCCrF   c                 
   |                      ||          }t          j                            d|z   |                     |                    }t          j        d|                                          }|D ]}|                    |                     |                    }t          j        d|          }|D ]}d|v r|                    |d          }||v rd|	                    d          dk    r?|d|
                    d                   |z   ||
                    d          d         z   }n||z   }t          j                            ||                     |                    }|                     |||           dS )zAdd new ace explicitly.zD:z\(.*?\)ID (r   N)r\   r   rJ   	from_sddlrb   refindallas_sddlreplacefindindexrV   )	r@   rA   rR   new_acerS   new_ace_list	desc_sddl	desc_acesaces	            rD   add_acezcmd_dsacl_set.add_aceq   s   ##E955%//wt?R?RSX?Y?YZZz*W__->->??# 	; 	;GT%8%8%?%?@@I
:y99I  ; ;CKK ) 1 1#r : :I)##~~c""a''%&;ys';';&;<wFS\SbSbcfSgSgShShIii		%/	&00D<O<OPU<V<VWWD""5)T::::	; 	;rF   Fc                 6   |                      ||          }|                    |                     |                    }|r| j                            d|z             n| j                            d|z             | j                            |dz              d S )Nznew descriptor for %s:
zold descriptor for %s:

r\   rj   rb   outfwrite)r@   rA   rR   newrS   rp   s         rD   	print_aclzcmd_dsacl_set.print_acl   s    ##E955LL!4!4U!;!;<<	 	DIOO6BCCCCIOO6BCCC		D()))))rF   c
                    |                                 }
|                    |
          }||||||                                 S t          |t	                      ||
          }t
          t          t          t          t          t          t          t          t          t          t          t           t"          d}|                     ||          }|r|}nX|dk    rd||         dt'          |          d}n5|dk    rd||         dt'          |          d}nt)          d	|z            |                     ||           |                     |||           |                     ||d
           d S )Nurlsession_infocredentialslpr,   r/   z(OA;;CR;z;;)r0   z(OD;;CR;zWrong argument '%s'!T)ry   )get_loadparmget_credentialsusager   r   r   r
   r	   r   r   r   r   r   r   r   r   r   r   rE   strr   rz   rs   )r@   caractionobjectdnrB   sddlr%   r   r   r    r   credsrA   carssidrn   s                   rD   runzcmd_dsacl_set.run   s}   ##%%((,,<S[FN ( 0I4E::<<!.*:*:"'B0 0 081)D!>!>!73#;(H#;$=5'C  ##E955 	@GGw+/999c#hhhh?GGv+/999c#hhhh?GG5>???uh'''UHg...uhD11111rF   )N)FNNNN)__name__
__module____qualname____doc__synopsiscar_helpoptionsSambaOptionsCredentialsOptionsVersionOptionstakes_optiongroupsr   r   takes_optionsrE   rV   r\   rb   rs   rz   r    rF   rD   r   r   .   s       33 H@H ).-  	tW#JS	2 	2 	2wX 0G 0G 0G 	 	 	 	z7F2C.	0 	0 	0|"G	 	 	}#F	 	 	xQ	 	 	/M6D D D   5 5 5D D D
; ; ;** * * * @D%2 %2 %2 %2 %2 %2rF   r   c                       e Zd ZdZdZej        ej        ej        dZ	 e
dddedd	           e
d
dd          gZd Zd Zd Z	 ddZdS )cmd_dsacl_getz(Print access list on a directory object.r   r   r!   r"   r#   r$   r%   r&   r1   r2   r3   r4   c                     |                     |t          dg          }t          |          dk    sJ |d         d         d         }t          t          j        |          S rX   rZ   r[   s        rD   r\   zcmd_dsacl_get.read_descriptor   s`    ll	-.  0 0 3xx1}}}}1v,-a0(-t444rF   c                     |                     |                                dt                    }t          t          j        |d         d         d                   S r^   r_   ra   s      rD   rb   zcmd_dsacl_get.get_domain_sid   sN    ll 1 1,J  @ @8+CF;,?,BCCCrF   c                     |                      ||          }|                    |                     |                    }| j                            d|z             | j                            |dz              d S )Nzdescriptor for %s:
ru   rv   )r@   rA   rR   rS   rp   s        rD   rz   zcmd_dsacl_get.print_acl   so    ##E955LL!4!4U!;!;<<		.:;;;		D()))))rF   Nc                     |                                 }|                    |          }t          |t                      ||          }|                     ||           d S )Nr|   )r   r   r   r   rz   )	r@   r   r%   r   r   r    r   r   rA   s	            rD   r   zcmd_dsacl_get.run   sc    ##%%((,,!.*:*:"& & &uh'''''rF   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r\   rb   rz   r   r   rF   rD   r   r      s        22 H ).-
 
 	tW#JS	2 	2 	2|"G	 	 	
M5 5 5D D D
* * * @D( ( ( ( ( (rF   r   c                   J    e Zd ZdZi Z e            ed<    e            ed<   dS )	cmd_dsaclzDS ACLs manipulation.setgetN)r   r   r   r   subcommandsr   r   r   rF   rD   r   r      s;        K&K&KrF   r   )%samba.getoptgetoptr   samba.dcerpcr   samba.samdbr   	samba.ndrr   r   samba.dcerpc.securityr   r   r	   r
   r   r   r   r   r   r   r   r   r   rK   r   rh   
samba.authr   samba.netcmdr   r   r   r   r   r   r   r   rF   rD   <module>r      s  &       ! ! ! ! ! !       * * * * * * * *" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " 


       				 % % % % % %           F2 F2 F2 F2 F2G F2 F2 F2R,( ,( ,( ,( ,(G ,( ,( ,(^) ) ) ) ) ) ) ) ) )rF   