
    Id&              	          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:      j                  d;       ej
                  d<      j                  d;       ej
                  d=      j                  d;       ej
                  d>      j                  d;       ej
                  d?      j                  d;       ej
                  d@      j                  d;       ej
                  dA      j                  d;      dBZ eg dC      Z	dD Z
dE ZdF ZdG ZdH ZdI ZdJ ZdOdKZedLk(  r3ddlZ	 ej(                  d5   Zej(                  d3   Z e eee             yy# e$ r9  edMej(                  d   z  ej2                  N        ej4                  d5       Y Nw xY w)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                    |}t        j                  d      }	 | j                         }|dd dk(  r|dk7  r|dk7  sJ ||z   }nF|dk(  r|}|dk(  r:	 ||fS |dd dk7  r&|dk7  r!|dk7  r|j                  |      }|s	|dz   |z   }j|}	 ||fS q)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              #   z  K   ddl }t        j                  d      }d}	 g }	 t        | |      \  }}|dd dk(  r|dk(  s|dk(  rn`|j	                  |      }|r|dd dk(  r|dd }|j                  |       n-t        d	|z  d
|j                          |j                  d       t        |      r| |dk(  ryw)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   B9B;c                 &   | j                  d      dk7  r6| j                  dd      } | j                  dd      } | j                  dd      S | j                  d      r| j                  d	d      S | j                  d
      r| j                  dd      S | S )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                 0   t        |t              sJ |j                  dd      }|j                  dd      }	 t        |      }t        |      S # t        $ r> d}|j                  d      }|D ]  }t        |    |   }|dd|z
  z  z  } Y t        |      S w xY w)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	) q6M)s   A :BBc                     g }| D ]c  }t        |d   t              r|d   g}n|d   }|d   r|j                  |d   d|d          D|D ]  }|j                  |d   d|        e dj                  |      S )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           	         | D cg c]  }|j                  dd       } }d}dx}x}x}}| D ]p  }|d   j                  d      r|j                  d       |d   dd |d<   n|j                  d       |d	   j                         }|d   j	                         |d<   |d   j                         |d<   |s
|d
k(  r|d   }|t        v rG|d   j                  dd      |d<   |d   j                  dd      |d<   |d   j                  d      |d<   |t        v rt        ||d         |d<   |dk(  r'|d   s"t        |d   j                            |d<   d|d<   t        |d   t              rt        |d         |d<   |dk(  rd}|d   }	|dk(  rd}_|dk(  rd}h|dk(  sod}s |sJ g }
|s|
j                  dd|z  dg       n|
j                  d	dg       |s|
j                  dd|gdg       |s|
j                  d|dg       |s|
j                  d|dg       |
j                  dt        t        j                                dg       |
| D cg c]%  }|d	   j                         t#        g d      vs$|' c}z   } | S c c}w c c}w )z}Perform 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    ',,QWWS!_,E,	BTYYGYY!7:Q )*Q4??4 HHTNQ48AaDHHUOdjjlt{{}!t{{}!cTk1B##Q4<<r*AaDQ4<<R(AaDQ4::c?AaD)%c1Q4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:;jA!A$**,cBh>i*iajjELG -B ks   I=%J2Jc           
          g }ddl m}  || dd      5 }t        |      D ]&  }|j                  t	        t        ||                   ( 	 ddd       dj                  |      S # 1 sw Y   xY w)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   ,  st     C	hi	0 PA'* 	PEJJ'(9%(MNO	PP ;;s	P Ps   5A##A,c                 X    d}d}|rt        | d      }|rt        |d      }|dz   |z   dz   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      sG  $ - 	  	R B 	
 R 2  R R  b b  b!" R#$ %& '	- .$5r&,A2  %Eb 	
 r  #A   "1 %a a  A	- $ R	/  /f../VW^^_ef/v//0[\ccdjk)))*IJQQRXY/v//0[\ccdjk.f../VW^^_ef.f../VW^^_ef.f../Z[bbcij   0 1 
&R%P ((GT
6 zHHQK	xx{
 
.L
12   8CHHQKHszzZs   G ;G?>G?