³ò
OÉcIc           @   s=  d  d k  l Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z y d  d k Td  d k	 Z	 Wn% e
 j
 o d Z d Z d Z n Xd d d „  ƒ  YZ d „  Z d „  Z d	 e i f d
 „  ƒ  YZ d e i f d „  ƒ  YZ d „  Z d „  Z e e _ d „  Z e e _ d „  Z e e _ d „  Z d S(   iÿÿÿÿ(   t
   generatorsN(   t   *i    t   ACLc           B   s[   e  Z e e Be BZ d d  „ Z d „  Z e d „ Z	 d „  Z
 d „  Z d „  Z d „  Z RS(   c         C   s   d |  _  | |  _ d  S(   Nt    (   t	   _ACL__aclt   index(   t   selfR   (    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt   __init__$   s    	c         C   s!   |  i  o d i |  i  ƒ p d S(   Nt   /t   .(   R   t   join(   R   (    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt   get_indexpath(   s    c      
   C   sm  | i  |  _  y% | i i i | i t t i ƒ } WnH t t	 t
 i f j
 o0 } t i d t | i ƒ | f d ƒ d  Sn X| o| i ƒ  } | o\ | i ƒ  } xM | oA | d 8} | i | ƒ d d } | t @o | i | ƒ q¥ q¥ Wn | i d | d ƒ t i t @o† | i ƒ  } | oo | i ƒ  } xI | oA | d 8} | i | ƒ d d } | t @o | i | ƒ q5q5W| i d | d ƒ q™qn | i ƒ  p | i d d  d ƒ n t i t @o% | i ƒ  o | i d d  d ƒ n y% | i i i | t t i ƒ |  _ WnM t t	 t
 i f j
 o5 } t i d t | i ƒ | f d ƒ d |  _ n Xd  S(   Ns'   Warning: unable to read ACL from %s: %si   i   i    s4   Warning: unable to convert ACL from %s to string: %sR   (   R   t   connt   win32securityt   GetNamedSecurityInfot   patht   SE_FILE_OBJECTR   t   flagst   OSErrort   IOErrort
   pywintypest   errort   logt   Logt   reprt   GetSecurityDescriptorDaclt   GetAceCountt   GetAcet   INHERIT_ONLY_ACEt	   DeleteAcet   SetSecurityDescriptorDaclt   SACL_SECURITY_INFORMATIONt   GetSecurityDescriptorSaclt   SetSecurityDescriptorSaclt   Nonet3   ConvertSecurityDescriptorToStringSecurityDescriptort   SDDL_REVISION_1R   (   R   t   rpt   skip_inherit_onlyt   sdt   exct   aclt   nt	   ace_flags(    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt   load_from_rp*   sV    		 
 
	c         C   sÝ  y% | i  i i | i t t i ƒ } WnD t t t	 i
 f j
 o, } t i d t | i ƒ | f d ƒ n X| i ƒ  } | oI | i ƒ  } x# | o | d 8} | i | ƒ qŽ W| i d | d ƒ n t i t @o` | i ƒ  } | oI | i ƒ  } x# | o | d 8} | i | ƒ qø W| i d | d ƒ q6n y\ | i  i i | i t t i | i ƒ  | i ƒ  | i ƒ  t i t @o | i ƒ  p d  ƒ WnD t t t	 i
 f j
 o, } t i d t | i ƒ | f d ƒ n Xd  S(   Ns4   Warning: unable to read ACL from %s for clearing: %si   i   i    s3   Warning: unable to set ACL on %s after clearing: %s(   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R    R!   t   SetNamedSecurityInfot   GetSecurityDescriptorOwnert   GetSecurityDescriptorGroupR"   (   R   R%   R'   R(   R)   R*   (    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt   clear_rp]   sB    	 
 
		c         C   s[  |  i  p d  Sn y | i i i |  i  t ƒ } WnD t t t i f j
 o, } t	 i
 d t |  i  ƒ | f d ƒ n X| i ƒ  \ } } | i ƒ  o | t @o |  i | ƒ n y\ | i i i | i t t i | i ƒ  | i ƒ  | i ƒ  t i t @o | i ƒ  p d  ƒ WnD t t t i f j
 o, } t	 i
 d t | i ƒ | f d ƒ n Xd  S(   Ns/   Warning: unable to convert string %s to ACL: %si   s$   Warning: unable to set ACL on %s: %s(   R   R   R   t3   ConvertStringSecurityDescriptorToSecurityDescriptorR$   R   R   R   R   R   R   R   t   GetSecurityDescriptorControlt   isdirt   SE_DACL_PROTECTEDR0   R-   R   R   R   R   R.   R/   R   R   R    R"   (   R   R%   R'   R(   R   t   revision(    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt   write_to_rp…   s*    
			c         C   s&   d t  i |  i ƒ  ƒ t |  i ƒ f S(   Ns   # file: %s
%s
(   t   Ct	   acl_quoteR   t   unicodeR   (   R   (    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt   __str__¶   s    c         C   s®   | i  ƒ  } t | ƒ d j p | d d  d j o t i d | d d  ƒ ‚ n | d d } | d j o d	 |  _ n" t t i | ƒ i d ƒ ƒ |  _ | d |  _	 d  S(
   Ni   i    i   s   # file: s   Bad record beginning: R	   R   i   (    (
   t
   splitlinest   lent   metadatat   ParsingErrorR   t   tupleR7   t   acl_unquotet   splitR   (   R   t   acl_strt   linest   filename(    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt   from_stringº   s    ) !(    (   t   __name__t
   __module__t   GROUP_SECURITY_INFORMATIONt   OWNER_SECURITY_INFORMATIONt   DACL_SECURITY_INFORMATIONR   R   R   t   TrueR,   R0   R6   R:   RE   (    (    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyR      s   	3	(	1	c         C   s   t  ƒ  } | i |  ƒ | S(   N(   R   RE   (   t   recordR)   (    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt   Record2WACLÃ   s    	c         C   s
   t  |  ƒ S(   N(   R9   (   t   wacl(    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt   WACL2RecordÈ   s    t   WACLExtractorc           B   s2   e  Z d  Z e i d ƒ Z e e ƒ Z d „  Z	 RS(   sA   Iterate ExtendedAttributes objects from the WACL information files   (?:\n|^)(# file: (.*?))\nc         C   s5   | d j o d Sn t  t i | ƒ i d ƒ ƒ Sd S(   s/   Convert possibly quoted filename to index tupleR	   R   N(    (   R?   R7   R@   RA   (   R   RD   (    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt   filename_to_indexÏ   s     (
   RF   RG   t   __doc__t   ret   compilet   record_boundary_regexpt   staticmethodRM   t   record_to_objectRQ   (    (    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyRP   Ë   s   t   WinAccessControlListFilec           B   s&   e  Z d  Z d Z e Z e e ƒ Z RS(   s1   Store/retrieve ACLs from extended_attributes filet   win_access_control_lists(	   RF   RG   RR   t   _prefixRP   t
   _extractorRV   RO   t   _object_to_record(    (    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyRX   Ô   s   c         c   st   xm t  i |  | ƒ D]Y \ } } | p t d | i f ‚ | p t | i ƒ } n | i t | ƒ ƒ | Vq Wd S(   s:   Update a rorp iter by adding the information from acl_iters   Missing rorp for index %sN(   t   rorpitert   CollateIteratorst   AssertionErrorR   R   t   set_win_aclR9   (   t	   rorp_itert	   wacl_itert   rorpRN   (    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt   join_wacl_iterÚ   s      c         C   s    t  ƒ  } | i |  ƒ t | ƒ S(   N(   R   R,   R9   (   t   rpathR)   (    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt   rpath_acl_win_getâ   s    	c         C   s   t  |  ƒ } t | ƒ S(   N(   R   R9   (   R   R)   (    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt   rpath_get_blank_win_aclè   s    c         C   s'   t  ƒ  } | i | ƒ | i |  ƒ d  S(   N(   R   RE   R6   (   R%   RB   R)   (    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt   rpath_set_win_aclí   s    	c          C   s@  d d  k  }  y t |  i ƒ  t t Bƒ } Wn0 |  i j
 o! } t i d | d ƒ d  Sn XzÏ yP d „  } | t ƒ } t	 | t
 | t f | t ƒ t f | t ƒ t f g ƒ Wn0 |  i j
 o! } t i d | d ƒ d  Sn XxE t | t ƒ D]4 \ } } | | j o | o t i t O_ Pqò qò WWd  |  i | ƒ Xd  S(   Niÿÿÿÿs1   Warning: unable to open Windows process token: %si   c         S   s   t  d  |  ƒ S(   N(   t   LookupPrivilegeValueR"   (   t   priv(    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt   <lambda>  s    s2   Warning: unable to enable SE_*_NAME privileges: %s(   t   win32apit   OpenProcessTokent   GetCurrentProcesst   TOKEN_ADJUST_PRIVILEGESt   TOKEN_QUERYR   R   R   t   SE_SECURITY_NAMEt   AdjustTokenPrivilegest   Falset   SE_PRIVILEGE_ENABLEDt   SE_BACKUP_NAMEt   SE_RESTORE_NAMEt   GetTokenInformationt   TokenPrivilegesR   R   R   t   CloseHandle(   Rl   t   hndR(   t   lpvt   SecurityNamet   namet   enabled(    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pyt	   init_aclsó   s4    							 (    (   t
   __future__R    R7   R=   RS   R]   Re   R   R   R   t   ImportErrorRH   RI   RJ   R   RM   RO   t   FlatExtractorRP   t   FlatFileRX   Rd   Rf   t   win_acl_getRg   t   get_blank_win_aclRh   t   write_win_aclR   (    (    (    s:   /var/lib/python-support/python2.5/rdiff_backup/win_acls.pys   <module>   s*   H
¤										