
    bD%              	       &   d Z ddlZddlZddlZi Zi ddddddd	d
dddddddddddddddddddddddded <   i d!dd"dd#dd$dd%dd&dd'd
d(dd)dd*d+d,d-d.d/d0d1d2d3d4d5d6ded7<   d8died9<    ej        d:                              d;           ej        d<                              d;           ej        d=                              d;           ej        d>                              d;           ej        d?                              d;           ej        d@                              d;           ej        dA                              d;          dBZ eg dC          Z	dD Z
dE ZdF ZdG ZdH ZdI ZdJ ZdQdMZedNk    rrddlZ	 ej        d5         Zej        d3         Zn;# e$ r3  edOej        d         z  ej        P            ej        d5           Y nw xY w e eee                     dS dS )Rz&Generate LDIF from WSPP documentation.    N	fATTINDEX   fPDNTATTINDEX   fANR   fPRESERVEONDELETE   fCOPY   fTUPLEINDEX   fSUBTREEATTINDEX   fCONFIDENTIAL   fCONFIDENTAILfNEVERVALUEAUDIT   fRODCAttribute   fRODCFilteredAttributefRODCFILTEREDATTRIBUTEfEXTENDEDLINKTRACKING   	fBASEONLY   fPARTITIONSECRET   searchflagsFLAG_ATTR_NOT_REPLICATEDFLAG_CR_NTDS_NC FLAG_ATTR_REQ_PARTIAL_SET_MEMBERFLAG_CR_NTDS_DOMAINFLAG_ATTR_IS_CONSTRUCTEDFLAG_CR_NTDS_NOT_GC_REPLICATEDFLAG_ATTR_IS_OPERATIONALFLAG_SCHEMA_BASE_OBJECTFLAG_ATTR_IS_RDNFLAG_DISALLOW_MOVE_ON_DELETE   FLAG_DOMAIN_DISALLOW_MOVE   FLAG_DOMAIN_DISALLOW_RENAME   FLAG_CONFIG_ALLOW_LIMITED_MOVE   FLAG_CONFIG_ALLOW_MOVE   FLAG_CONFIG_ALLOW_RENAME   FLAG_DISALLOW_DELETEsystemflagsFLAG_ATTR_IS_CRITICALschemaflagsexs	   +s >utf8s
   *Hs   Vs
   *Hs	   +s Js	   +s \s
   *H)z1.3.12.2.1011.28.0.702z1.2.840.113556.1.1.1.12z2.6.6.1.2.5.11.29z1.2.840.113556.1.1.1.11z1.3.12.2.1011.28.0.714z1.3.12.2.1011.28.0.732z1.2.840.113556.1.1.1.6)auxiliaryclass
maycontainmustcontainposssuperiorssystemauxiliaryclasssystemmaycontainsystemmustcontainsystemposssuperiorsc                     |}	 |                                  }|dd         dk    r|dk    r|dk    sJ ||z   }n|dk    r
|}|dk    rnn|}nJ||fS )z- reads a line from an LDIF file, unfolding itTNr5     
)readline)fbufferlinels       1/usr/lib/python3/dist-packages/samba/ms_schema.py__read_folded_linerM   Y   s    DJJLLRaR5C<< 2::$$,,,, !8DD rzz77  14 &>    c              #     K   ddl }t          j        d          }d}	 g }	 t          | |          \  }}|dd         dk    r#|dk    s|dk    rnp|                    |          }|r.|d	d         dk    r
|dd	         }|                    |           n*t          d
|z  d|j                    |j        d           t          |          r|V  |dk    rdS )z)reads an LDIF entry, only unfolding linesr   Nz^([A-Za-z]+[A-Za-z0-9-]*):rE   Tr5   #rF   zInvalid line: %srD   )endfile)
sysrecompilerM   matchappendprintstderrexitlen)rH   rT   attr_type_rerI   entryrK   ms          rL   __read_raw_entriesr`   z   s     JJJ ::;;LF	,Q77KQ!u||DyyAGG""1%%A RSS6T>>#2#AQ(1,#CJGGGG%	( u:: 	KKK77E7rN   c                 h   |                      d          dk    rB|                     dd          } |                     dd          } |                     dd          S |                     d          r|                     d	d          S |                     d
          r|                     dd          S | S )z"fix a string DN to use ${SCHEMADN}z<RootDomainDN>rQ   
 rE   rD   z)CN=Schema,CN=Configuration,<RootDomainDN>z${SCHEMADN}zDC=XzCN=Schema,CN=Configuration,DC=XzCN=XzCN=Schema,CN=Configuration,CN=X)findreplaceendswith)dns    rL   fix_dnrg      s     
ww  B&&ZZr""ZZR  zzE}UUU	V		 zz;]KKK	V		 zz;]KKK	rN   c                 \   t          |t                    sJ |                    dd          }|                    dd          }	 t          |          }nJ# t          $ r= d}|                    d          }|D ] }t          |          |         }|dd|z
  z  z  }!Y nw xY wt          |          S )z%Evaluate the OR expression in 'value'rb   rE   rD   r   |r5   r   )
isinstancestrrd   int
ValueErrorsplit	bitFields)keyvalueoflagsrH   bitposs         rL   __convert_bitfieldru      s    eS!!"""MM%$$EMM#r""E)JJ ) ) )C   	) 	)As^A&FQ2;'(AA	) 	)) q66Ms   A ABBc                 <   g }| D ]}t          |d         t                    r
|d         g}n|d         }|d         r'|                    |d         d|d                    ^|D ]"}|                    |d         d|           #d                    |          S )zWrite out entry as LDIFr5   r3   r   z:: : rF   )rj   rk   rX   join)r^   outrK   vlvs        rL   __write_ldif_oner|      s    
C - -adC   	A$BB1BQ4 	JJAaDDD!A$$/000 	- 	-AJJ1Q444+,,,,	- 99S>>rN   c                    d | D             } d}dx}x}x}}| D ]}|d                              d          r)|                    d           |d         dd         |d<   n|                    d           |d	                                         }|d                                         |d<   |d                                         |d<   |s|d
k    r|d         }|t
          v r\|d                             dd          |d<   |d                             dd          |d<   |d                             d          |d<   |t          v rt          ||d                   |d<   |dk    r5|d         s-t          |d                                                  |d<   d|d<   t          |d         t                    rt          |d                   |d<   |dk    r
d}|d         }	|dk    rd}|dk    rd}|dk    rd}|sJ g }
|s|
                    dd|z  dg           n|
                    d|	dg           |s|
                    dd|gdg           |s|
                    d|dg           |s|
                    d|dg           |
                    dt          t          j                              dg           |
d | D             z   } | S )z}Perform transformations required to convert the LDIF-like schema
       file entries to LDIF, including Samba-specific stuff.c                 :    g | ]}|                     d d          S ):r5   )rn   ).0rK   s     rL   
<listcomp>z%__transform_entry.<locals>.<listcomp>   s$    ,,,QWWS!__,,,rN   rE   Fr5   rw   Tr3   Nr   cnrb   rD   ,omobjectclassrf   objectclassadmindisplaynameadmindescriptionzCN=%s,${SCHEMADN}objectClasstopadminDescriptionadminDisplayName
objectGUIDc                 h    g | ]/}|d                                           t          g d          v-|0S )r   )rf   
changetypeobjectcategory)lowerset)r   xs     rL   r   z%__transform_entry.<locals>.<listcomp>  s=    jjjA!A$**,,cBhBhBh>i>i*i*ia*i*i*irN   )
startswithrX   r   lstriprstripmultivalued_attrsrd   rn   ro   ru   oMObjectClassBERstriprj   rk   rg   uuiduuid4)r^   r   r   skip_dnskip_objectclassskip_admin_descriptionskip_admin_display_namerK   rp   rf   headers              rL   __transform_entryr      s    -,e,,,E	BTYYGYY!7:Q )* )*Q4??4   	HHTNNNQ48AaDDHHUOOOdjjllt{{}}!t{{}}! 	cTkk1B###Q4<<r**AaDQ4<<R((AaDQ4::c??AaD)%c1Q400AaD/!!Q4 '!

5!!adC   	 !A$<<AaD$;;G1B-#&&&&*##&&&%)"JJJF )t025u=>>>>tR'((( D}uk&:EBCCC! 7)2u5666" 7)2u5666
MM<TZ\\!2!2E:;;;jjjjjjELrN   c           
         g }ddl m}  || dd          5 }t          |          D ]2}|                    t	          t          ||                               3	 ddd           n# 1 swxY w Y   d                    |          S )z!Load and transform a schema file.r   )openrzlatin-1)encodingN

)ior   r`   rX   r|   r   rx   )filenamer   ry   r   rH   r^   s         rL   __parse_schema_filer   #  s     C	hi	0	0	0 PA'** 	P 	PEJJ'(9%(M(MNNOOOO	PP P P P P P P P P P P P P P P ;;ss   AA''A+.A+TFc                 h    d}d}|rt          | d          }|rt          |d          }|dz   |z   dz   S )z-Read WSPP documentation-derived schema files.rE   attributeSchemaclassSchemar   )r   )	attr_fileclasses_filedump_attributesdump_classesdebug	attr_ldifclasses_ldifs          rL   read_ms_schemar   0  sT     IL F'	3DEE	 H*<GGv,v55rN   __main__z(Usage: %s attr-file.txt classes-file.txt)rS   )TTF)__doc__rU   base64r   ro   	b64encodedecoder   r   r   rM   r`   rg   ru   r|   r   r   r   __name__rT   argvr   r   
IndexErrorrY   rZ   r[    rN   rL   <module>r      s  $ - , 				  	R B 	
 R 2  R R  b b  b!" R#$ %& '	- .$5r&,A2  %Eb 	
 r  #A   "1 %a a  A	- $ R	/  /f./VWW^^_eff/v/0[\\ccdjkk))*IJJQQRXYY/v/0[\\ccdjkk.f./VWW^^_eff.f./VWW^^_eff.f./Z[[bbcijj   C 0 0 0 1 1 
  B$ $ $N     (  (G G GT
 
 
6 6 6 6 zJJJHQK	x{   8CHQKHszZZZZ 
E..L
1
122222 s   $F? ?5G76G7