
    g&              	          S r SSKrSSKrSSKr0 r0 SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_\S '   0 S!S_S"S_S#S_S$S_S%S_S&S_S'S
_S(S_S)S_S*S+_S,S-_S.S/_S0S1_S2S3_S4S5_S6S_\S7'   S8S0\S9'   \R
                  " S:5      R                  S;5      \R
                  " S<5      R                  S;5      \R
                  " S=5      R                  S;5      \R
                  " S>5      R                  S;5      \R
                  " S?5      R                  S;5      \R
                  " S@5      R                  S;5      \R
                  " SA5      R                  S;5      SB.r\" / SCQ5      r	SD r
SE rSF rSG rSH rSI rSJ rSOSK jr\SL:X  a3  SSKr \R(                  S5   r\R(                  S3   r\" \" \\5      5        gg! \ a6    \" SM\R(                  S   -  \R2                  SN9  \R4                  " S55         NLf = f)Pz&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                 0   Un[         R                  " S5      n U R                  5       nUSS S:X  a  US:w  a  US:w  d   eX$-   nOPUS:X  a  UnUS:X  a   X!4$ O=USS S:w  a.  US:w  a(  US:w  a"  UR                  U5      nU(       d
  US-   U-   nMw  Un X!4$ M~  )z,reads a line from an LDIF file, unfolding it&^([A-Za-z][A-Za-z0-9-]*[A-Za-z0-9])::?Nr5     
#)recompilereadlinematch)fbufferlineattr_type_relms         1/usr/lib/python3/dist-packages/samba/ms_schema.py__read_folded_linerT   Y   s    D::FGL
JJLRa5C< 2:$$,/. 8D rz7 >!  Ra5C<AI!r'$**1-A#czA~ 
 >A     c              #     #    SSK n[        R                  " S5      nSn / n [        X5      u  pSUSS S:X  a  M  US:X  d  US:X  a  OdUR	                  U5      nU(       a   USS S:X  a  USS nUR                  U5        O*[        S	U-  S
UR                  S9  UR                  " S5        M  [        U5      (       a  Uv   US:X  a  gM  7f)z)reads an LDIF entry, only unfolding linesr   NrD   rF   r5   rH   rG   zInvalid line: %srE   )endfile)
sysrI   rJ   rT   rL   appendprintstderrexitlen)rM   rZ   rP   rN   entryrQ   rR   s          rS   __read_raw_entriesra      s      ::FGLF
,Q7KQ!u|DyAG""1%ARS6T>#2AQ(1,#CJJG% ( u::K77 s   CC	c                 <   U R                  S5      S:w  a6  U R                  SS5      n U R                  SS5      n U R                  SS5      $ U R                  S5      (       a  U R                  S	S5      $ U R                  S
5      (       a  U R                  SS5      $ U $ )z"fix a string DN to use ${SCHEMADN}z<RootDomainDN>rW   
 rF   rE   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    rS   fix_dnrh      s     
ww B&ZZr"ZZR zzE}UU	V		zz;]KK	V		zz;]KK	rU   c                 ,   [        U[        5      (       d   eUR                  SS5      nUR                  SS5      n [        U5      n[        U5      $ ! [         a6    SnUR                  S5      nU H  n[        U    U   nUSSU-
  -  -  nM      NJf = f)z%Evaluate the OR expression in 'value'rc   rF   rE   r   |r5   r   )
isinstancestrre   int
ValueErrorsplit	bitFields)keyvalueoflagsrM   bitposs         rS   __convert_bitfieldrv      s    eS!!"!MM%$EMM#r"E)J q6M  )C As^A&FQ2;'(A )s   A =BBc                    / nU  Hu  n[        US   [        5      (       a  US   /nOUS   nUS   (       a   UR                  US   < SUS   < 35        MQ  U H  nUR                  US   < SU< 35        M      Mw     SR                  U5      $ )zWrite out entry as LDIFr5   r3   r   z:: : rG   )rk   rl   r[   join)r`   outrQ   vlvs        rS   __write_ldif_oner}      s    
CadC  A$B1BQ4JJAaD!A$/0AJJ1Q4+,   99S>rU   c           	         U  Vs/ s H  o"R                  SS5      PM     n nSnS=n=n=pgU  GH  nUS   R                  S5      (       a  UR                  S5        US   SS US'   OUR                  S5        US	   R                  5       nUS   R	                  5       US'   US   R                  5       US'   U(       d  US
:X  a  US   nU[        ;   aG  US   R                  SS5      US'   US   R                  SS5      US'   US   R                  S5      US'   U[        ;   a  [        XS   5      US'   US:X  a,  US   (       d"  [        US   R                  5          US'   SUS'   [        US   [        5      (       a  [        US   5      US'   US:X  a  SnUS   n	US:X  a  SnGM{  US:X  a  SnGM  US:X  d  GM  SnGM     U(       d   e/ n
U(       d  U
R                  SSU-  S/5        OU
R                  SW	S/5        U(       d  U
R                  SSU/S/5        U(       d  U
R                  SUS/5        U(       d  U
R                  SUS/5        U
R                  S[        [        R                   " 5       5      S/5        X Vs/ s H(  oS	   R                  5       [#        / SQ5      ;  d  M&  UPM*     sn-   n U $ s  snf s  snf )zvPerform transformations required to convert the LDIF-like schema
file entries to LDIF, including Samba-specific stuff.:r5   rF   Frx   Tr3   Nr   cnrc   rE   ,omobjectclassrg   objectclassadmindisplaynameadmindescriptionzCN=%s,${SCHEMADN}objectClasstopadminDescriptionadminDisplayName
objectGUID)rg   
changetypeobjectcategory)ro   
startswithr[   lowerlstriprstripmultivalued_attrsre   rp   rv   oMObjectClassBERstriprk   rl   rh   uuiduuid4set)r`   r   rQ   r   skip_dnskip_objectclassskip_admin_descriptionskip_admin_display_namerq   rg   headerxs               rS   __transform_entryr      s    ',,eWWS!_eE,	BTYYGYY!7Q4??4  HHTNQ48AaDHHUOdjjlt{{}!t{{}!cTk1B##Q4<<r*AaDQ4<<R(AaDQ4::c?AaD)%cQ40AaD/!Q4'!

5!!adC  !A$<AaD$;G1B-#&&&*#&&%)"S V J2Ft025u=>tR'(}uk&:EBC!)2u56")2u56
MM<TZZ\!2E:;jAA$**,cBh>i*iajjELG -B ks   J>%K1Kc           
          / nSSK Jn  U" U SSS9 n[        U5       H&  nUR                  [	        [        XQ5      5      5        M(     SSS5        SR                  U5      $ ! , (       d  f       N= f)z!Load and transform a schema file.r   )openrzlatin-1)encodingN

)ior   ra   r[   r}   r   ry   )filenamer   rz   r   rM   r`   s         rS   __parse_schema_filer   ,  s`     C	hi	0A'*EJJ'(9%(MNO + 
1 ;;s	 
1	0s   6A  
A.c                 l    SnSnU(       a  [        U S5      nU(       a  [        US5      nUS-   U-   S-   $ )z-Read WSPP documentation-derived schema files.rF   attributeSchemaclassSchemar   )r   )	attr_fileclasses_filedump_attributesdump_classesdebug	attr_ldifclasses_ldifs          rS   read_ms_schemar   9  sB     IL'	3DE	*<Gv,v55rU   __main__z(Usage: %s attr-file.txt classes-file.txt)rY   )TTF)__doc__rI   base64r   rp   	b64encodedecoder   r   r   rT   ra   rh   rv   r}   r   r   r   __name__rZ   argvr   r   
IndexErrorr\   r]   r^    rU   rS   <module>r      s7  $ - 	  	R B 	
 R 2  R R  b b  b!" R#$ %& '	- .$5r&,A2  %Eb 	
 r  #A   "1 %a a  A	- $ R	/  %../VW^^_ef%//0[\ccdjk))*IJQQRXY%//0[\ccdjk$../VW^^_ef$../VW^^_ef$../Z[bbcij   0 1 
&R%P ((GT
6 zHHQK	xx{
 
.L
12   8CHHQKHszzZs   G 9G?>G?