
    g)                         S r SSKJr  SSKJrJrJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJrJr  SS jr " S S\5      rS rS r   SS jrg)z(Functions for setting up a Samba Schema.    )	b64encode)read_and_sub_filesubstitute_varcheck_all_substituted)security)read_ms_schema)ndr_pack)SamDB
get_string)dsdb)SCOPE_SUBTREESCOPE_ONELEVELNc                 d    Uc  0 nSn[         R                  R                  X 5      n[        U5      $ )Na  O:SAG:SAD:AI(OA;;CR;e12b56b6-0a95-11d1-adbb-00c04fd8d5cd;;SA)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;BA)(A;CI;RPLCLORC;;;AU)(A;CI;RPWPCRCCLCLORCWOWDSW;;;SA)(A;CI;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;ED)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;BA)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;RO)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;RO)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;RO)S:(AU;SA;WPCCDCWOWDSDDTSW;;;WD)(AU;CISA;WP;;;WD)(AU;SA;CR;;;BA)(AU;SA;CR;;;DU)(OU;SA;CR;e12b56b6-0a95-11d1-adbb-00c04fd8d5cd;;WD)(OU;SA;CR;45ec5156-db7e-47bb-b53f-dbeb2d03c40f;;WD))r   
descriptor	from_sddlr	   )
domain_sidname_mapsddlsecs       ./usr/lib/python3/dist-packages/samba/schema.pyget_schema_descriptorr   $   s7    AD. 


'
'
9CC=    c                   t    \ rS rSrSSSSSSS.r   SS
 jr\S 5       r\S 5       rS r	S r
S rS rS rSrg	)SchemaC   )z"MS-AD_Schema_2K8_R2_Attributes.txtzMS-AD_Schema_2K8_R2_Classes.txt/   )z0Attributes_for_AD_DS__Windows_Server_2008_R2.ldfz-Classes_for_AD_DS__Windows_Server_2008_R2.ldfr   )z-Attributes_for_AD_DS__Windows_Server_2012.ldfz*Classes_for_AD_DS__Windows_Server_2012.ldf8   )z,AD_DS_Attributes__Windows_Server_2012_R2.ldfz)AD_DS_Classes__Windows_Server_2012_R2.ldfE   )z*AD_DS_Attributes__Windows_Server_v1803.ldfz'AD_DS_Classes__Windows_Server_v1803.ldfW   )z)AD_DS_Attributes_Windows_Server_v1903.ldfz&AD_DS_Classes_Windows_Server_v1903.ldfX   )2008_R2_old2008_R220122012_R220162019Nc                 R  ^ SSK Jn   Uc  [        R                  5       nXpl        X0l        [        SSS9U l        Ub  U R                  R                  U5        [        U" S[        R                  U   S   -  5      U" S[        R                  U   S   -  5      5      U l        S mUb   SR                  U4S	 jU 5       5      U l        [        U R                  S
U05      U l        [        U R                  5        [        [        R!                  U5      5      n	[#        U" S5      X9S.5      U l        ['        [)        U5      5      R+                  S5      n
[#        U" S5      X:S.5      U l        Ub  XPl        OT" U" S5      5      U l        Ub+  U =R.                  SR                  S U 5       5      -  sl        ['        U R.                  5      R+                  S5      U l        SU R
                  < SU R.                  < S3nU R1                  XR                  U R
                  5        g )Nr   )
setup_pathF)global_schemaam_rodczad-schema/%s   c                 p    [        U S5       nUR                  5       sS S S 5        $ ! , (       d  f       g = f)Nrb)openread)file	data_files     r   	read_file"Schema.__init__.<locals>.read_filez   s$    dD!Y ~~' "!!s   '
5 c              3   F   >#    U  H  n[        T" U5      5      v   M     g 7fNr   ).0r1   r3   s     r   	<genexpr>"Schema.__init__.<locals>.<genexpr>   s$      ':384 (2)D/'B'B38s   !SCHEMADNz#provision_schema_basedn_modify.ldif)r;   
OBJVERSIONutf8zprovision_schema_basedn.ldif)r;   
DESCRIPTORzprefixMap.txtc              3   ,   #    U  H
  nS U-  v   M     g7f)z%s
N )r8   maps     r   r9   r:      s     *XCWC6C<CWs   zdn: z
prefixMap:: z

)samba.provisionr)   r   default_base_schemabase_schemaschemadnr
   ldbset_invocation_idr   base_schemasschema_datajoinr   r   strget_versionr   schema_dn_modifyr   r   decodeschema_dn_addprefixmap_dataset_from_ldif)selfr   invocationidrE   filesoverride_prefixmapadditional_prefixmaprD   r)   schema_versiondescrprefixmap_ldifr3   s               @r   __init__Schema.__init__[   s    	/	  446K&  ue<#HH&&|4)~(;(;K(H(KKL~(;(;K(H(KKLN	( !ww ':38':  :D *$*:*:+5x*@Bd../V//<= 1<=!@!B /
;<CCFK.56!79 )"4"+J,G"HD+277*XCW*X#XX'(;(;<CCFK :>H[H[\>+;+;T]]Kr   c                      g)z&Returns the default base schema to user%   r@   r@   r   r   rC   Schema.default_base_schema   s     r   c                 .    [         R                  U    S   $ )z=Returns the base schema's object version, e.g. 47 for 2008_R2   )r   rH   )rD   s    r   rL   Schema.get_version   s     "";/22r   c                 H    [         R                  " U R                  XU5        g r7   )r   _dsdb_set_schema_from_ldifrF   )rR   pfdfdns       r   rQ   Schema.set_from_ldif   s    ''""=r   c                    U R                   R                  US9  U R                   R                  5          U R                   R                  S5        U R                  S-   nU R                   R                  U5        U R                   R                  U R                  5        U R                   R                  U R                  5        U R                   R                  5         g !   U R                   R                  5         e = f)N)urlzpdn: @ATTRIBUTES
linkID: INTEGER

dn: @INDEXLIST
@IDXATTR: linkID
@IDXATTR: attributeSyntax
@IDXGUID: objectGUID
z1objectGUID: 24e2ca70-b093-4ae8-84c0-2d7ac652a1b8
)
rF   connecttransaction_startadd_ldifrO   modify_ldifrM   rI   transaction_committransaction_cancel)rR   schemadb_pathrO   s      r   write_to_tmp_ldbSchema.write_to_tmp_ldb   s    ]+""$	* HH   !..FGM HHm,HH  !6!67HHd../
 HH'')		HH'')s   BC C<c                 B    [        U R                  U R                  5      $ r7   )get_linked_attributesrE   rF   rR   s    r   linked_attributesSchema.linked_attributes   s    $T]]DHH==r   c                 B    [        U R                  U R                  5      $ r7   )get_dnsyntax_attributesrE   rF   rt   s    r   dnsyntax_attributesSchema.dnsyntax_attributes   s    &t}}dhh??r   c                 D    [         R                  " U R                  X5      $ r7   )r    _dsdb_convert_schema_to_openldaprF   )rR   targetmappings      r   convert_to_openldapSchema.convert_to_openldap   s    44TXXvOOr   )rD   rF   rP   rI   rO   rM   rE   )NNNNNN)__name__
__module____qualname____firstlineno__rH   rZ   staticmethodrC   rL   rQ   rp   ru   ry   r   __static_attributes__r@   r   r   r   r   C   s    !L* @DKO!ALF   3 3>*<>@Pr   r   c                 "   SS/nUR                  SU [        US9n0 n[        S[        U5      5       HY  nS[	        X5   S   S   5      S-   -  nUR                  U US[        S9nUc  M7  UR                  S	5      U[        X5   S   5      '   M[     U$ )
NlinkIDlDAPDisplayNamezh(&(linkID=*)(!(linkID:1.2.840.113556.1.4.803:=1))(objectclass=attributeSchema)(attributeSyntax=2.5.5.1))
expressionbasescopeattrsr   zD(&(objectclass=attributeSchema)(linkID=%d)(attributeSyntax=2.5.5.1))r,   )basednr   	attributer   zutf-8)	searchr   rangelenint	searchoner   rN   rK   )rE   	schemaldbr   res
attributesir   r}   s           r   rs   rs      s    ()E


0 ^5  :C J1c#h336(+A./!35
 $$H0:/@+8 % : 9?w9OJs36"3456   r   c                     UR                  SU [        SS/S9n/ n[        S[        U5      5       H"  nUR	                  [        X$   S   5      5        M$     U$ )NzF(&(!(linkID=*))(objectclass=attributeSchema)(attributeSyntax=2.5.5.1))r   r   r   r   )r   r   r   r   appendrK   )rE   r   r   r   r   s        r   rx   rx      se    


[^*+  -C J1c#h#cf%6789  r   c                 t    Uc  [         R                  " 5       nO[         R                  " U5      n[        XUS9$ )a7  Load schema for the SamDB from the AD schema files and samba4_schema.ldif

:param schemadn: DN of the schema
:param serverdn: DN of the server

Returns the schema data loaded as an object, with .ldb being a
new ldb with the schema loaded.  This allows certain tests to
operate without a remote or local schema.
)rE   rU   )r   
random_siddom_sidr   )rE   	domainsidrU   s      r   ldb_with_schemar      s:     '')	$$Y/	)%79 9r   r7   )z,cn=schema,cn=configuration,dc=example,dc=comNN)__doc__base64r   sambar   r   r   samba.dcerpcr   samba.ms_schemar   	samba.ndrr	   samba.samdbr
   samba.commonr   r   rF   r   r   r   objectr   rs   rx   r   r@   r   r   <module>r      sY   . /  J J ! *   #  ->MPV MPb. L"'+9r   