
    g6                     h    S SK r S SKJrJrJr  S SKJr  S SKJrJ	r	   " S S\
5      rS rS
S jrS	 rg)    N)Ldbldbread_and_sub_file)system_session)SamDBdsdb_Dnc                       \ rS rSrSrg)	LdifError    N)__name__
__module____qualname____firstlineno____static_attributes__r       >/usr/lib/python3/dist-packages/samba/kcc/ldif_import_export.pyr
   r
      s    r   r
   c                 ~    U H7  nU R                  U[        R                  5      nUR                  SU-  5        M9     g )Nz%s)
write_ldifr   CHANGETYPE_NONEwrite)samdbfresmsglstrs        r   write_search_resultr   !   s4    S%8%89	t r   c                    [         R                  R                  U 5      (       a  [        SU -  5      e[	        U [        5       US/S9nUR                  5          [        US5      nUR                  US5        U(       a  UR                  SU-  5        UR                  S5        UR                  5         [        U [        5       US	9nU$ ! [         a(  nUR                  5         [        SU< SU< 35      eSnAff = f)
a  Routine to import all objects and attributes that are relevant
to the KCC algorithms from a previously exported LDIF file.

The point of this function is to allow a programmer/debugger to
import an LDIF file with non-security relevant information that
was previously extracted from a DC database.  The LDIF file is used
to create a temporary abbreviated database.  The KCC algorithm can
then run against this abbreviated database for debug or test
verification that the topology generated is computationally the
same between different OSes and algorithms.

:param dburl: path to the temporary abbreviated db to create
:param ldif_file: path to the ldif file to import
z3Specify a database (%s) that doesn't already exist.zmodules:)urlsession_infolpoptionsNzfdn: @ROOTDSE
changetype: modify
replace: dsServiceName
dsServiceName: CN=NTDS Settings,%s
            zLdn: @MODULES
@LIST: rootdse,extended_dn_in,extended_dn_out_ldb,objectguid
-
zFailed to import z: )r   r    r!   )ospathexistsr
   r   r   transaction_startr   add_ldifmodify_ldif	Exceptiontransaction_canceltransaction_commitr   )dburlr!   	ldif_fileforced_local_dsatmpdbdataestrr   s           r   ldif_to_samdbr2   '   s     
ww~~eM  	
 E(8
|-E 
G D1tT"  #	# $ 	  	 

 e.*:rBEL  G  "YEFFGs   A
C 
C:#C55C:c           
      H
    [        U[        5       X2S9n [        R                  R                  U5      (       a  [        SU-  5      e [        US5      n / SQn
S	U R                  5       -  nU R                  U[        R                  U
S
S9n[        XU5        / SQn
S	U R                  5       -  nU R                  U[        R                  U
SS9n[        XU5        / SQn
SU R                  5       -  nU R                  U[        R                  U
SS9n[        XU5        U HL  n[        UR                   5      n/ SQn
SU-  nU R                  U[        R"                  U
S9n[        XU5        MN     / nU H  n[        UR                   5      n/ SQn/ SQn
U R                  U[        R                  U
U-   SS9nU Hw  nUR%                  5        H`  nUU;   d  M  UU    HL  n['        U UR)                  S5      5      n[        UR                   5      nUU;  d  M;  UR+                  U5        MN     Mb     My     [        XU5        M     U HH  n[        UR                   5      n/ SQn
U R                  U[        R                  U
SS9n[        XU5        MJ     / SQn
SU R                  5       -  nU R                  U[        R                  U
SS9n[        XU5        / SQn
SU R                  5       -  nU R                  U[        R                  U
SS /S!9n[        XU5        / S"Qn
SU R                  5       -  nU R                  U[        R                  U
S#S9n[        XU5        / SQn
SU R                  5       -  nU R                  U[        R                  U
S$S9n[        XU5        / S%Qn
SU R                  5       -  nU R                  U[        R                  U
S&S9n[        XU5        / S'Qn
U H.  nU R                  U[        R"                  U
S(9n[        XU5        M0     / S)Qn
S*nU R                  U[        R"                  U
S(9n[        R,                  " U S+5      US,   l        [        XU5        UR/                  5         g! [        R                   a&  nUR                  u  pg[        SU< SU< 35      eSnAff = f! [         a!  n	[        SU< S[        U	5      < 35      eSn	A	ff = f! [        R                   a&  nUR                  u  pg[        S-W< SU< 35      eSnAff = f).a  Routine to extract all objects and attributes that are relevant
to the KCC algorithms from a DC database.

The point of this function is to allow a programmer/debugger to
extract an LDIF file with non-security relevant information from
a DC database.  The LDIF file can then be used to "import" via
the import_ldif() function this file into a temporary abbreviated
database.  The KCC algorithm can then run against this abbreviated
database for debug or test verification that the topology generated
is computationally the same between different OSes and algorithms.

:param dburl: LDAP database URL to extract info from
:param ldif_file: output LDIF file name to create
)r   r    credentialsr!   zUnable to open sam database (z) : Nz/Specify a file (%s) that doesn't already exist.wzUnable to open ()objectClass
objectGUIDcnwhenChanged	objectSidEnabledsystemFlagsdnsRootnCNamezmsDS-NC-Replica-LocationszmsDS-NC-RO-Replica-LocationszCN=Partitions,%sz(objectClass=crossRef))basescopeattrs
expression)r6   r7   r8   r9   fSMORoleOwnerr<   msDS-Behavior-VersionzmsDS-EnabledFeaturez(objectClass=crossRefContainer))r6   r7   r8   r9   r<   zCN=Sites,%sz(objectClass=site))r6   r7   r8   r9   interSiteTopologyGeneratorinterSiteTopologyFailoverscheduler"   zCN=NTDS Site Settings,%s)r?   r@   rA   )hasMasterNCszmsDS-hasMasterNCshasPartialReplicaNCszmsDS-HasDomainNCszmsDS-hasFullReplicaNCszmsDS-HasInstantiatedNCs)r6   r7   r8   r9   invocationIDr"   zmsDS-isRODCrD   z(objectClass=nTDSDSA)utf8)r6   r7   r8   r9   r"   whenCreatedenabledConnectionrG   transportType
fromServerr<   z(objectClass=nTDSConnection))r6   r7   r8   r9   r"   namebridgeheadServerListBLtransportAddressAttributez$CN=Inter-Site Transports,CN=Sites,%sz (objectClass=interSiteTransport))r@   rA   rB   )
r6   r7   r8   r9   r<   r"   rG   replIntervalsiteListcostz(objectClass=siteLink)zextended_dn:0)r@   rA   rB   controls)r6   r7   r8   r9   siteLinkListz(objectClass=siteLinkBridge)z(objectClass=serversContainer))r6   r7   r8   r9   r<   dNSHostNamemailAddressz(objectClass=server))	r6   r7   r8   r9   r:   rC   rD   repsFromrepsTo)r@   rA   )	r6   r7   r8   r9   rootDomainNamingContextconfigurationNamingContextschemaNamingContextdefaultNamingContextdsServiceName z@ROOTDSEr   zError processing ()r   r   r   LdbErrorargsr
   r#   r$   r%   openIOErrorstrget_config_basednsearchSCOPE_SUBTREEr   dn
SCOPE_BASEkeysr   decodeappendDnclose)r   r,   r!   credsr-   eenumr1   r   ioerrrA   sstrr   sitesr   sitestrnclistncattrsres_msgkvaluedsdndnstre1s                           r   samdb_to_ldif_filer   \   sm   '%#1#3"'0 
ww~~i  I!" # 	#NC TE
1 "E$;$;$==llC,=,=!&&>  @
 	Ec*( "E$;$;$==llC,=,=!&&G  I
 	Ec*  u6688$c.?.?#((<  >
 	Ee, C#&&kG E .7D,,D%*  ,C  #.# (  Csvv;D2G.E ,,D0A0A%*W_*A  CC  AG|%,QZE $+5%,,v2F#GD$'LE$F2 &e 4 &0 (   #.K P Csvv;D
$E ,,D0A0A%**H  JC  #.' ,. 6&&()ll4s'8'8!&&H  J
 	Ec*	 &&()ll4s'8'8!&&>%4$5  7 	Ec*! u6688ll4s'8'8!&&D  F
 	Ec*  u6688ll4s'8'8!&&F  H
 	Ec*  u6688ll4s'8'8!&&<  >
 	Ec* D,,t3>>%*  ,C  #. " ll4s~~!&  ( FF5*-A	 	Ec* GGII	 << 'vv& ' 	''  NiULMMNj << EwwdCDDEsU   Q< R9 E>S' <S' IS' <R6!R11R69
S$SS$'T!;!TT!)N)r#   sambar   r   r   
samba.authr   samba.samdbr   r   r)   r
   r   r2   r   r   r   r   <module>r      s3   , 
 - - % &		 	2jwr   