ó
E®Uc           @   s'  d  d l  j 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! d	 e f d
 „  ƒ  YZ" d e  f d „  ƒ  YZ# d S(   iÿÿÿÿN(   t   security(   t   SamDB(   t
   ndr_unpackt   ndr_pack(   t   GUID_DRS_ALLOCATE_RIDSt   GUID_DRS_CHANGE_DOMAIN_MASTERt   GUID_DRS_CHANGE_INFR_MASTERt   GUID_DRS_CHANGE_PDCt   GUID_DRS_CHANGE_RID_MASTERt   GUID_DRS_CHANGE_SCHEMA_MASTERt   GUID_DRS_GET_CHANGESt   GUID_DRS_GET_ALL_CHANGESt    GUID_DRS_GET_FILTERED_ATTRIBUTESt   GUID_DRS_MANAGE_TOPOLOGYt   GUID_DRS_MONITOR_TOPOLOGYt   GUID_DRS_REPL_SYNCRONIZEt   GUID_DRS_RO_REPL_SECRET_SYNC(   t
   SCOPE_BASE(   t   system_session(   t   Commandt   CommandErrort   SuperCommandt   Optiont   cmd_dsacl_setc           B   sX  e  Z d  Z d Z d Z i e j d 6e j d 6e j d 6Z	 e
 d d d d	 d
 e d d d d ƒe
 d d
 d d d d d d d d d d d d d d d g d e ƒe
 d d
 d d d  d! g d d" ƒe
 d# d d$ d
 d% ƒe
 d& d d' d
 d% ƒe
 d( d d) d
 d% ƒg Z d* „  Z d1 d+ „ Z d, „  Z d- „  Z d. „  Z d/ „  Z d1 d1 d1 d1 d0 „ Z RS(2   s)   Modify access list on a directory object.s   %prog [options]s+    The access control right to allow or deny t	   sambaoptst   credoptst   versionoptss   -Hs   --URLt   helps%   LDB URL for database or target servert   typet   metavart   URLt   destt   Hs   --cart   choicet   choicess
   change-rids
   change-pdcs   change-infrastructures   change-schemas   change-namingt   allocate_ridss   get-changess   get-changes-alls   get-changes-filtereds   topology-manages   topology-monitors	   repl-syncs   ro-repl-secret-syncs   --actiont   allowt   denys   Deny or allow accesss
   --objectdns#   DN of the object whose SD to modifyt   strings   --trusteedns!   DN of the entity that gets accesss   --sddls1   An ACE or group of ACEs to be added on the objectc         C   sR   | j  d | d d d t ƒ } t | ƒ d k s6 t ‚ t t j | d d d ƒ S(   Nt   baset
   expressions   (objectClass=*)t   scopei   i    t	   objectSid(   t   searchR   t   lent   AssertionErrorR   R    t   dom_sid(   t   selft   samdbt	   trusteednt   res(    (    s6   /usr/lib/python2.7/dist-packages/samba/netcmd/dsacl.pyt   find_trustee_sidV   s    	c         C   sl   t  | t j ƒ s t ‚ t j ƒ  } t j | | ƒ | _ t j t	 | ƒ t j
 d ƒ | d <| j | ƒ d  S(   Nt   nTSecurityDescriptor(   t
   isinstanceR    t
   descriptorR-   t   ldbt   Messaget   Dnt   dnt   MessageElementR   t   FLAG_MOD_REPLACEt   modify(   R/   R0   t	   object_dnt   desct   controlst   m(    (    s6   /usr/lib/python2.7/dist-packages/samba/netcmd/dsacl.pyt   modify_descriptor\   s    c         C   s[   | j  d | d t d d g ƒ } t | ƒ d k s9 t ‚ | d d d } t t j | ƒ S(   NR'   R)   t   attrsR4   i   i    (   R+   R   R,   R-   R   R    R6   (   R/   R0   R>   R2   R?   (    (    s6   /usr/lib/python2.7/dist-packages/samba/netcmd/dsacl.pyt   read_descriptore   s
    c         C   s@   | j  d | j ƒ  d d d t ƒ } t t j | d d d ƒ S(   NR'   R(   s   (objectClass=*)R)   i    R*   (   R+   t	   domain_dnR   R   R    R.   (   R/   R0   R2   (    (    s6   /usr/lib/python2.7/dist-packages/samba/netcmd/dsacl.pyt   get_domain_sidm   s    c         C   sý   |  j  | | ƒ } | j |  j | ƒ ƒ } t j d | ƒ } x/ | D]' } d | k rC | j | d ƒ } qC qC W| | k r~ d S| j d ƒ d k r¾ | | j d ƒ  | | | j d ƒ } n
 | | } t j	 j
 | |  j | ƒ ƒ } |  j | | | ƒ d S(   s   Add new ace explicitly.s   \(.*?\)t   IDt    Nt   (i    (   RD   t   as_sddlRF   t   ret   findallt   replacet   findt   indexR    R6   t	   from_sddlRB   (   R/   R0   R>   t   new_aceR?   t	   desc_sddlt	   desc_acest   ace(    (    s6   /usr/lib/python2.7/dist-packages/samba/netcmd/dsacl.pyt   add_acer   s    +
c         C   sV   |  j  | | ƒ } | j |  j | ƒ ƒ } |  j j d | ƒ |  j j | d ƒ d  S(   Ns   new descriptor for %s:
s   
(   RD   RJ   RF   t   outft   write(   R/   R0   R>   R?   RR   (    (    s6   /usr/lib/python2.7/dist-packages/samba/netcmd/dsacl.pyt   print_new_acl„   s    c
         C   s   | j  ƒ  }
 | j |
 ƒ } | d  k ra | d  k sW | d  k sW | d  k sW | d  k ra |  j ƒ  St d | d t ƒ  d | d |
 ƒ } i t d 6t d 6t d 6t	 d 6t
 d	 6t d
 6t d 6t d 6t d 6t d 6t d 6t d 6t d 6} |  j | | ƒ } | r| } nb | d k r0d | | t | ƒ f } n9 | d k rYd | | t | ƒ f } n t d | ƒ ‚ |  j | | ƒ |  j | | | ƒ |  j | | ƒ d  S(   Nt   urlt   session_infot   credentialst   lps
   change-rids
   change-pdcs   change-infrastructures   change-schemas   change-namingR#   s   get-changess   get-changes-alls   get-changes-filtereds   topology-manages   topology-monitors	   repl-syncs   ro-repl-secret-syncR$   s   (OA;;CR;%s;;%s)R%   s   (OD;;CR;%s;;%s)s   Wrong argument '%s'!(   t   get_loadparmt   get_credentialst   Nonet   usageR   R   R   R   R   R	   R   R   R
   R   R   R   R   R   R   R3   t   strR   RX   RU   (   R/   t   cart   actiont   objectdnR1   t   sddlR    R   R   R   R\   t   credsR0   t   carst   sidRQ   (    (    s6   /usr/lib/python2.7/dist-packages/samba/netcmd/dsacl.pyt   runŠ   s>    $


	N(   t   __name__t
   __module__t   __doc__t   synopsist   car_helpt   optionst   SambaOptionst   CredentialsOptionst   VersionOptionst   takes_optiongroupsR   Ra   t   takes_optionsR3   R_   RB   RD   RF   RU   RX   Ri   (    (    (    s6   /usr/lib/python2.7/dist-packages/samba/netcmd/dsacl.pyR   /   sL   

							t	   cmd_dsaclc           B   s!   e  Z d  Z i  Z e ƒ  e d <RS(   s   DS ACLs manipulation.t   set(   Rj   Rk   Rl   t   subcommandsR   (    (    (    s6   /usr/lib/python2.7/dist-packages/samba/netcmd/dsacl.pyRu   ²   s   ($   t   samba.getoptt   getoptRo   t   samba.dcerpcR    t   samba.samdbR   t	   samba.ndrR   R   t   samba.dcerpc.securityR   R   R   R   R   R	   R
   R   R   R   R   R   R   R7   R   RK   t
   samba.authR   t   samba.netcmdR   R   R   R   R   Ru   (    (    (    s6   /usr/lib/python2.7/dist-packages/samba/netcmd/dsacl.pyt   <module>   s   X
"	ƒ