ó
E®Uc        	   @   s  d  Z  d d l Z d d l Z d d l Z i  Z i d d 6d d 6d d 6d	 d
 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6e d <i d d 6d d 6d d 6d d 6d d 6d d  6d	 d! 6d d" 6d d# 6d$ d% 6d& d' 6d( d) 6d* d+ 6d, d- 6d. d/ 6d0 d1 6e d2 <i d d3 6e d4 <i e j d5 ƒ d6 6e j d7 ƒ d8 6e j d9 ƒ d: 6e j d; ƒ d< 6e j d= ƒ d> 6e j d? ƒ d@ 6e j dA ƒ dB 6Z e dC dD dE dF dG dH dI dJ g ƒ Z dK „  Z	 dL „  Z
 dM „  Z dN „  Z dO „  Z dP „  Z dQ „  Z e e e dR „ Z e dS k r‹d d l Z y e j d. Z e j d, Z Wn6 e k
 rye j dT e j d0 IJe j d. ƒ n Xe e e ƒ GHn  d S(U   s&   Generate LDIF from WSPP documentation.iÿÿÿÿNi   t	   fATTINDEXi   t   fPDNTATTINDEXi   t   fANRi   t   fPRESERVEONDELETEi   t   fCOPYi   t   fTUPLEINDEXi   t   fSUBTREEATTINDEXi   t   fCONFIDENTIALi   t   fNEVERVALUEAUDITi   t   fRODCAttributet   fRODCFilteredAttributet   fCONFIDENTAILt   fRODCFILTEREDATTRIBUTEt   searchflagst   FLAG_ATTR_NOT_REPLICATEDt   FLAG_CR_NTDS_NCt    FLAG_ATTR_REQ_PARTIAL_SET_MEMBERt   FLAG_CR_NTDS_DOMAINt   FLAG_ATTR_IS_CONSTRUCTEDt   FLAG_CR_NTDS_NOT_GC_REPLICATEDt   FLAG_ATTR_IS_OPERATIONALt   FLAG_SCHEMA_BASE_OBJECTt   FLAG_ATTR_IS_RDNi   t   FLAG_DISALLOW_MOVE_ON_DELETEi   t   FLAG_DOMAIN_DISALLOW_MOVEi   t   FLAG_DOMAIN_DISALLOW_RENAMEi   t   FLAG_CONFIG_ALLOW_LIMITED_MOVEi   t   FLAG_CONFIG_ALLOW_MOVEi   t   FLAG_CONFIG_ALLOW_RENAMEi    t   FLAG_DISALLOW_DELETEt   systemflagst   FLAG_ATTR_IS_CRITICALt   schemaflagsexs	   +‡s …>s   1.3.12.2.1011.28.0.702s
   *†H†÷s   1.2.840.113556.1.1.1.12s   Vs   2.6.6.1.2.5.11.29s
   *†H†÷s   1.2.840.113556.1.1.1.11s	   +‡s …Js   1.3.12.2.1011.28.0.714s	   +‡s …\s   1.3.12.2.1011.28.0.732s
   *†H†÷s   1.2.840.113556.1.1.1.6t   auxiliaryclasst
   maycontaint   mustcontaint   posssuperiorst   systemauxiliaryclasst   systemmaycontaint   systemmustcontaint   systemposssuperiorsc         C   s   | } x} t  r… |  j ƒ  } | d  d k rV | d k rC | d k sI t ‚ | | } q	 | d k r{ | } | d k r‚ Pq‚ q	 | } Pq	 W| | f S(   s-    reads a line from an LDIF file, unfolding iti   t    t    s   
(   t   Truet   readlinet   AssertionError(   t   ft   buffert   linet   l(    (    s3   /usr/lib/python2.7/dist-packages/samba/ms_schema.pyt   __read_folded_lineU   s    	c         c   s  t  j d ƒ } d } xè t rÿ g  } x± t r× t |  | ƒ \ } } | d  d k rX q' n  | d k sp | d k rt Pn  | j | ƒ } | r¶ | d d k r¦ | d  } n  | j | ƒ q' t j d | It j d ƒ q' Wt	 | ƒ rì | Vn  | d k r Pq q Wd S(	   s)   reads an LDIF entry, only unfolding liness   ^([A-Za-z]+[A-Za-z0-9-]*):R*   i   t   #s   
iÿÿÿÿs   Invalid line: %sN(
   t   ret   compileR+   R2   t   matcht   appendt   syst   stderrt   exitt   len(   R.   t   attr_type_reR/   t   entryR1   t   m(    (    s3   /usr/lib/python2.7/dist-packages/samba/ms_schema.pyt   __read_raw_entriesv   s*    		c         C   sQ   |  j  d ƒ d k rI |  j d d ƒ }  |  j d d ƒ }  |  j d d ƒ S|  Sd S(	   s"   fix a string DN to use ${SCHEMADN}s   <RootDomainDN>iÿÿÿÿs   
 R*   R)   s)   CN=Schema,CN=Configuration,<RootDomainDN>s   ${SCHEMADN}N(   t   findt   replace(   t   dn(    (    s3   /usr/lib/python2.7/dist-packages/samba/ms_schema.pyt   fix_dnœ   s
    c         C   s­   t  | t ƒ s t ‚ | j d d ƒ } | j d d ƒ } y t | ƒ } WnW t k
 r¢ d } | j d ƒ } x2 | D]& } t |  | } | d d | >B} qu Wn Xt | ƒ S(   s%   Evaluate the OR expression in 'value's   
 R*   R)   i    t   |i   i   (   t
   isinstancet   strR-   RA   t   intt
   ValueErrort   splitt	   bitFields(   t   keyt   valuet   ot   flagsR.   t   bitpos(    (    s3   /usr/lib/python2.7/dist-packages/samba/ms_schema.pyt   __convert_bitfield§   s    c         C   s¸   g  } x¢ |  D]š } t  | d t ƒ r6 | d g } n
 | d } | d j ƒ  d k r{ | j d | d | d f ƒ q n  x) | D]! } | j d | d | f ƒ q‚ Wq Wd j | ƒ S(   s   Write out entry as LDIFi   i    t   omobjectclasss   %s:: %ss   %s: %ss   
(   RE   RF   t   lowerR7   t   join(   R=   t   outR1   t   vlt   v(    (    s3   /usr/lib/python2.7/dist-packages/samba/ms_schema.pyt   __write_ldif_oneº   s    
#c         C   sL  g  |  D] } | j  d d ƒ ^ q }  d } x7|  D]/} | d j ƒ  } | d j ƒ  | d <| d j ƒ  | d <| r | d k r | d } n  | t k rê | d j d d ƒ | d <| d j d d ƒ | d <| d j  d ƒ | d <n  | t k rt | | d ƒ | d <n  | d	 k r7t | d j	 ƒ  | d <n  t
 | d t ƒ r2 t | d ƒ | d <q2 q2 W| sqt ‚ |  j d d
 d | g ƒ |  j d d d | g g ƒ |  j d d | g ƒ |  j d d t t j ƒ  ƒ g ƒ |  j d d | g ƒ |  j d d | g ƒ x: |  D]2 } | d j ƒ  } | d k r|  j | ƒ qqW|  S(   s}   Perform transformations required to convert the LDIF-like schema
       file entries to LDIF, including Samba-specific stuff.t   :i   R*   i    t   cns   
 R)   t   ,RQ   RB   s   CN=%s,${SCHEMADN}t   objectClasst   topi   t
   objectGUIDt   adminDescriptiont   adminDisplayName(   RI   RR   t   lstript   rstript   multivalued_attrsRA   RJ   RP   t   oMObjectClassBERt   stripRE   RF   RC   R-   t   insertt   uuidt   uuid4t   remove(   R=   R[   R1   RY   RK   (    (    s3   /usr/lib/python2.7/dist-packages/samba/ms_schema.pyt   __transform_entryÎ   s<    %"c         C   sU   g  } t  |  d ƒ } x0 t | ƒ D]" } | j t t | | ƒ ƒ ƒ q" Wd j | ƒ S(   s!   Load and transform a schema file.t   rUs   

(   t   openR?   R7   RW   Ri   RS   (   t   filenameR[   RT   R.   R=   (    (    s3   /usr/lib/python2.7/dist-packages/samba/ms_schema.pyt   __parse_schema_fileÿ   s
     c         C   sL   d } d } | r$ t  |  d ƒ } n  | r< t  | d ƒ } n  | d | d S(   s-   Read WSPP documentation-derived schema files.R*   t   attributeSchemat   classSchemas   

(   Rm   (   t	   attr_filet   classes_filet   dump_attributest   dump_classest   debugt	   attr_ldift   classes_ldif(    (    s3   /usr/lib/python2.7/dist-packages/samba/ms_schema.pyt   read_ms_schema  s    t   __main__s(   Usage: %s attr-file.txt classes-file.txt(   t   __doc__R4   t   base64Rf   RJ   t	   b64encodeRc   t   setRb   R2   R?   RC   RP   RW   Ri   Rm   R+   t   FalseRw   t   __name__R8   t   argvRp   Rq   t
   IndexErrorR9   R:   (    (    (    s3   /usr/lib/python2.7/dist-packages/samba/ms_schema.pyt   <module>   s|   		!	&				1	