
    b'                         d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ i fdZ G d de          Zd Zd Z	 	 	 ddZdS )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_ONELEVELc                 d    d}t           j                            ||           }t          |          S )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   $   s0    AD. 

'
'j
9
9CC==    c                   t    e Zd ZdddddZ	 	 	 ddZed             Zed	             Zd
 Zd Z	d Z
d Zd ZdS )Schema)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)AD_DS_Attributes__Windows_Server_2012.ldfz&AD_DS_Classes__Windows_Server_2012.ldf8   )z,AD_DS_Attributes__Windows_Server_2012_R2.ldfz)AD_DS_Classes__Windows_Server_2012_R2.ldfE   )2008_R2_old2008_R220122012_R2Nc                    ddl m} 	 |t                                          }|| _        || _        t          dd          | _        || j                            |           t           |dt          j
        |         d         z             |dt          j
        |         d         z                      | _        d |&d                    fd	|D                       | _        t          | j        d
|i          | _        t          | j                   t          t                              |                    }	t#           |d          ||	d          | _        t'          t)          |                                        d          }
t#           |d          ||
d          | _        ||| _        n  |d                    | _        |-| xj        d                    d |D                       z  c_        t'          | j                                      d          | _        d| j        d| j        d}|                     || j        | j                   d S )Nr   )
setup_pathF)global_schemaam_rodczad-schema/%s   c                 ~    t          | d          5 }|                                cd d d            S # 1 swxY w Y   d S )Nrb)openread)file	data_files     r   	read_filez"Schema.__init__.<locals>.read_fileq   s    dD!! (Y ~~''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   266 c              3   H   K   | ]}t           |                    V  d S Nr   ).0r,   r.   s     r   	<genexpr>z"Schema.__init__.<locals>.<genexpr>v   sG       ': ':+/ (2))D//'B'B ': ': ': ': ': ':r   SCHEMADNz#provision_schema_basedn_modify.ldif)r4   
OBJVERSIONutf8zprovision_schema_basedn.ldif)r4   
DESCRIPTORzprefixMap.txtc              3       K   | ]	}d |z  V  
dS )z%s
N )r2   maps     r   r3   z"Schema.__init__.<locals>.<genexpr>   s&      *X*XC6C<*X*X*X*X*X*Xr   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   invocationidr>   filesoverride_prefixmapadditional_prefixmapr=   r$   schema_versiondescrprefixmap_ldifr.   s               @r   __init__zSchema.__init__R   s    	/.....	  4466K&  ue<<<#H&&|444)J~(;K(H(KKLLJ~(;K(H(KKLLN N	( 	( 	( !ww ': ': ': ':38': ': ':  :  :D *$*:+5x*@B Bd.///V//<<== 1J<==!@@!B !B /
;;<<CCFKK.J566!779 9 )"4D"+)JJ,G,G"H"HD+277*X*XCW*X*X*X#X#XX'(;<<CCFKK :>H[H[H[\>4+;T]KKKKKr   c                      dS )z&Returns the default base schema to user"   r9   r9   r   r   r<   zSchema.default_base_schema   s	     yr   c                 2    t           j        |          d         S )z=Returns the base schema's object version, e.g. 47 for 2008_R2   )r   rA   )r=   s    r   rE   zSchema.get_version   s     ";/22r   c                 >    t          j        | j        |||           d S r1   )r   _dsdb_set_schema_from_ldifr?   )rK   pfdfdns       r   rJ   zSchema.set_from_ldif   s!    '"b"=====r   c                    | j                             |           | j                                          	 | j                             d           | j        dz   }| j                             |           | j                             | j                   | j                             | j                   | j                                          d S #  | j         	                                  xY w)N)urlzpdn: @ATTRIBUTES
linkID: INTEGER

dn: @INDEXLIST
@IDXATTR: linkID
@IDXATTR: attributeSyntax
@IDXGUID: objectGUID
z1objectGUID: 24e2ca70-b093-4ae8-84c0-2d7ac652a1b8
)
r?   connecttransaction_startadd_ldifrH   modify_ldifrF   rB   transaction_committransaction_cancel)rK   schemadb_pathrH   s      r   write_to_tmp_ldbzSchema.write_to_tmp_ldb   s    ]+++""$$$	* H     !.FGM Hm,,,H  !6777Hd.///
 H'')))))		H'')))s   A<C C)c                 6    t          | j        | j                  S r1   )get_linked_attributesr>   r?   rK   s    r   linked_attributeszSchema.linked_attributes   s    $T]DH===r   c                 6    t          | j        | j                  S r1   )get_dnsyntax_attributesr>   r?   rh   s    r   dnsyntax_attributeszSchema.dnsyntax_attributes   s    &t}dh???r   c                 8    t          j        | j        ||          S r1   )r    _dsdb_convert_schema_to_openldapr?   )rK   targetmappings      r   convert_to_openldapzSchema.convert_to_openldap   s    4TXvwOOOr   )NNNNNN)__name__
__module____qualname__rA   rS   staticmethodr<   rE   rJ   re   ri   rl   rq   r9   r   r   r   r   @   s         L @DKO!AL AL AL ALF   \ 3 3 \3> > >* * *<> > >@ @ @P P P P Pr   r   c                 r   ddg}|                     d| t          |          }i }t          dt          |                    D ]t}dt	          ||         d         d                   dz   z  }|                    | |dt                    }|+t          |          |t          ||         d                   <   u|S )	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'   )basednrz   	attributer|   )searchr   rangelenint	searchoner   rD   )r>   	schemaldbr}   res
attributesirz   ro   s           r   rg   rg      s    ()E


0 ^5  : :C J1c#hh 	E 	E33q6(+A.//!35
 $$H0:/@+8 % : : 9<VJs3q6"34556r   c                     |                     d| t          ddg          }g }t          dt          |                    D ]0}|                    t          ||         d                              1|S )NzF(&(!(linkID=*))(objectclass=attributeSchema)(attributeSyntax=2.5.5.1))rw   rx   ry   r   )r   r   r   r   appendrD   )r>   r   r   r   r   s        r   rk   rk      s    


[^*+  - -C J1c#hh : :#c!f%67889999r   ,cn=schema,cn=configuration,dc=example,dc=comNc                 z    |t          j                    }nt          j        |          }t          || |          S )aO  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.
    N)r>   rN   )r   
random_siddom_sidr   )r>   	domainsidrN   s      r   ldb_with_schemar      sH     '))		$Y//	)h%79 9 9 9r   )r   NN)__doc__base64r   sambar   r   r   samba.dcerpcr   samba.ms_schemar   	samba.ndrr	   samba.samdbr
   samba.commonr   r   r?   r   r   r   objectr   rg   rk   r   r9   r   r   <module>r      s]  . / .       J J J J J J J J J J ! ! ! ! ! ! * * * * * *             # # # # # #       - - - - - - - - 02    8GP GP GP GP GPV GP GP GPV  .   L"'+9 9 9 9 9 9r   