ó
E®Uc           @   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 d e f d „  ƒ  YZ d S(	   s5   Utility methods for security descriptor manipulation.iÿÿÿÿN(   t   Messaget   MessageElementt   Dn(   t   FLAG_MOD_REPLACEt
   SCOPE_BASE(   t   ndr_packt
   ndr_unpack(   t   securityt   SDUtilsc           B   sM   e  Z d  Z d „  Z d d „ Z d d „ Z d „  Z d „  Z g  d „ Z	 RS(   sC   Some utilities for manipulation of security descriptors on objects.c         C   s(   | |  _  t j |  j  j ƒ  ƒ |  _ d  S(   N(   t   ldbR   t   dom_sidt   get_domain_sidt
   domain_sid(   t   selft   samdb(    (    s2   /usr/lib/python2.7/dist-packages/samba/sd_utils.pyt   __init__   s    	c         C   s½   t  ƒ  } t |  j | ƒ | _ t | t ƒ sE t | t j ƒ sE t ‚ t | t ƒ ro t j j	 | |  j
 ƒ } n t | t j ƒ rŠ | } n  t t | ƒ t d ƒ | d <|  j j | | ƒ d S(   sf   Modify security descriptor using either SDDL string
            or security.descriptor object
        t   nTSecurityDescriptorN(   R    R   R	   t   dnt
   isinstancet   strR   t
   descriptort   AssertionErrort	   from_sddlR   R   R   R   t   modify(   R   t	   object_dnt   sdt   controlst   mt   tmp_desc(    (    s2   /usr/lib/python2.7/dist-packages/samba/sd_utils.pyt   modify_sd_on_dn#   s    	'	c         C   sF   |  j  j | t d  d g d | ƒ} | d d d } t t j | ƒ S(   NR   R   i    (   R	   t   searchR   t   NoneR   R   R   (   R   R   R   t   rest   desc(    (    s2   /usr/lib/python2.7/dist-packages/samba/sd_utils.pyt   read_sd_on_dn4   s    c         C   s.   |  j  j | ƒ } t t j | d d d ƒ S(   Ni    t	   objectSid(   R	   R   R   R   R
   (   R   R   R    (    (    s2   /usr/lib/python2.7/dist-packages/samba/sd_utils.pyt   get_object_sid:   s    c         C   s›   |  j  | d g ƒ } | j |  j ƒ } | | k r7 d S| j d ƒ d k rw | | j d ƒ  | | | j d ƒ } n
 | | } |  j | | d g ƒ d S(   s5   Add an ACE to an objects security descriptor
        s   show_deleted:1Nt   (i    (   R"   t   as_sddlR   t   findt   indexR   (   R   R   t   aceR!   t	   desc_sddl(    (    s2   /usr/lib/python2.7/dist-packages/samba/sd_utils.pyt   dacl_add_ace>   s    
c         C   s)   |  j  | | d g ƒ } | j |  j ƒ S(   s:   Return object nTSecutiryDescriptor in SDDL format
        s   show_deleted:1(   R"   R&   R   (   R   R   R   R!   (    (    s2   /usr/lib/python2.7/dist-packages/samba/sd_utils.pyt   get_sd_as_sddlL   s    N(
   t   __name__t
   __module__t   __doc__R   R   R   R"   R$   R+   R,   (    (    (    s2   /usr/lib/python2.7/dist-packages/samba/sd_utils.pyR      s   			(   R/   t   sambaR	   R    R   R   R   R   t	   samba.ndrR   R   t   samba.dcerpcR   t   objectR   (    (    (    s2   /usr/lib/python2.7/dist-packages/samba/sd_utils.pyt   <module>   s   