ó
    cÛ–i½= ã                   ó:  • S r SSKJr  SSKJr  SSKJrJrJrJ	r	  SSK
r
SSKrSSKrSSKJrJr  SSKJrJrJrJrJrJrJrJr  SSKJrJr  SS	KJrJrJr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,  SSK-J.r.  SSKJ/r/J0r0  SSKJ1r1  SSK2J3r3J4r4J5r5  SSK6r6SSK7r7SSK8r8SSK9r9SSK:r:SSK;J<r<  SSK=J>r>  SSK?J@r@  SSKJArAJBrB   " S S\C5      rD " S S\E5      rF      S$S jrG      S$S jrH    S%S jrI " S  S!\F5      rJ " S" S#\J5      rKg)&zJoining a domain.é    )Úsystem_session)ÚSamDB)ÚgensecÚLdbÚ	drs_utilsÚarcfour_encryptN)Úndr_packÚ
ndr_unpack)ÚsecurityÚdrsuapiÚmiscÚnbtÚlsaÚdrsblobsÚ	dnsserverÚdnsp)ÚCredentialsÚDONT_USE_KERBEROS)Úsecretsdb_self_joinÚ	provisionÚprovision_fillÚFILL_DRSÚFILL_SUBDOMAINÚDEFAULTSITE)Ú
setup_path)ÚSchema)Ú
descriptor)ÚNet)Úsetup_bind9_dns)Úread_and_sub_file)Úwerror)Ú	b64encode)ÚWERRORErrorÚNTSTATUSError)Úsd_utils)ÚARecordÚ
AAAARecordÚCNAMERecord)ÚOrderedDict)Ú
get_string)ÚCommandError)ÚdsdbÚfunctional_levelc                   ó(   ^ • \ rS rSrU 4S jrSrU =r$ )ÚDCJoinExceptioné6   c                 ó*   >• [         TU ]  SU-  5        g )NzCan't join, error: %s)ÚsuperÚ__init__)ÚselfÚmsgÚ	__class__s     €Ú,/usr/lib/python3/dist-packages/samba/join.pyr3   ÚDCJoinException.__init__8   s   ø€ Ü‰ÑÐ0°3Ñ6Õ7ó    © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r3   Ú__static_attributes__Ú__classcell__©r6   s   @r7   r/   r/   6   s   ø† ÷8ó 8r9   r/   c                   ó  • \ rS rSrSr       S'S jrS(S jrS(S jrS(S jrS r	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS)S jrS rS rS rS rS rS rS r S  r!S! r"S" r#S# r$S$ r%S% r&S&r'g)*ÚDCJoinContexté<   zPerform a DC join.Nc                 óV  • Xl         X0l        X@l        XPl        Xpl        X l        XÐl        Xàl        Xðl        XÀl	        S U l
        / U l        / U l        U R                  R                  UR                  5       [        R                   -  5        [#        U R                  U R                  S9U l        X l        UU l        U(       a#  UU l        U R*                  R,                  U l        OËU R&                  (       a$  Uc   U R/                  U R&                  5      U l        O\U R                   R1                  SU-  5        U R3                  U5      U l        U R                   R1                  SU R&                  -  5        [5        SU R&                  -  [7        5       U R                  U R                  S9U l        U R                  c  [8        U l         U R*                  R;                  [<        R>                  / S9  [G        U R*                  RI                  5       5      U l%        [G        U R*                  RM                  5       5      U l'        [G        U R*                  RQ                  5       5      U l)        [G        U R*                  RU                  5       5      U l+        [X        RZ                  " U R*                  R]                  5       5      U l/        U R^                  U l0        U Rc                  5       U l2        U Rg                  5       U l4        [j        Rl                  " [G        [n        Rp                  " 5       5      5      U l9        U R*                  Ru                  5       U l;        U Ry                  5       U l=        U R}                  5       U l?        U	b  X�l@        O[‚        R„                  " SS5      U l@        U R*                  R‡                  5       U lD        U(       Ga›  X`lE        SU RŠ                  -  U lF        S	U RŠ                  < S
U R                  < SU RV                  < 3U lG        SU RŽ                  -  U lH        S	U RŠ                  < SU RJ                  < 3U lI        U RŠ                  R•                  5       < SU Rˆ                  < 3U lK        U R*                  R™                  5       U lM        SU RJ                  -  nU R�                  U5      (       a  S	U RŠ                  < SU< 3U lO        OS U lO        SU RŠ                  -  SU R–                  -  SU R–                  < SU Rš                  < 3/U lP        U R*                  R;                  [<        R>                  S/U RJ                  S9nUS   S   S   U lQ        SU RJ                  -  U lR        SU RN                  -  U lS        S[<        R¨                  " U R¤                  5      -  nU R*                  R;                  [<        Rª                  / U R*                  R­                  5       US9nUc  SU lW        O([±        U5      S:X  a  SU lW        [³        S5        OX°lW        U Rˆ                  U lZ        S U l[        [¸        Rº                  [¸        R¼                  -  [¸        R¾                  -  [¸        RÀ                  -  [¸        RÂ                  -  U lb        S U lc        S U ld        S U le        SU lf        S U lg        S U l\        S U lh        SU li        S U lj        S U lk        S U ll        S U lm        SU ln        g ! [<        R@                   a  nURB                  u  nn[E        U5      eS nAff = f)N)ÚcredsÚlpz&Finding a writeable DC for domain '%s'zFound DC %sú	ldap://%s©ÚurlÚsession_infoÚcredentialsrG   ©ÚscopeÚattrséx   ú%s$úCN=z,CN=Servers,CN=z
,CN=Sites,zCN=NTDS Settings,%sz,OU=Domain Controllers,Ú.zGCN=Topology,CN=Domain System Volume,CN=DFSR-GlobalSettings,CN=System,%sÚ,zHOST/%szGC/Ú/ÚrIDManagerReference)rN   rO   Úbaser   zDC=DomainDnsZones,%szDC=ForestDnsZones,%sú$(&(objectClass=crossRef)(ncName=%s))©rN   rO   rW   Ú
expressionÚNONEzCNO DNS zone information found in source domain, not replicating DNSF)oÚloggerrF   rG   ÚsiteÚ	targetdirÚ	use_ntvfsÚplaintext_secretsÚbackend_storeÚbackend_store_sizeÚpromote_existingÚpromote_from_dnÚnc_listÚfull_nc_listÚset_gensec_featuresÚget_gensec_featuresr   ÚFEATURE_SEALr   ÚnetÚserverÚforced_local_samdbÚsamdbrJ   Úfind_dc_siteÚinfoÚfind_dcr   r   r   ÚsearchÚldbÚ
SCOPE_BASEÚLdbErrorÚargsr/   ÚstrÚget_default_basednÚbase_dnÚget_root_basednÚroot_dnÚget_schema_basednÚ	schema_dnÚget_config_basednÚ	config_dnr   Údom_sidÚget_domain_sidÚdomsidÚ	forestsidÚget_domain_nameÚdomain_nameÚget_forest_domain_nameÚforest_domain_namer   ÚGUIDÚuuidÚuuid4Úinvocation_idÚget_dsServiceNameÚ
dc_ntds_dnÚget_dnsHostNameÚdc_dnsHostNameÚget_behavior_versionÚbehavior_versionÚ	acct_passÚsambaÚ generate_random_machine_passwordÚdomain_dns_nameÚ	dnsdomainÚmynameÚsamnameÚ	server_dnÚntds_dnÚacct_dnÚlowerÚdnshostnameÚforest_dns_nameÚ	dnsforestÚ	dn_existsÚtopology_dnÚSPNsÚrid_manager_dnÚdomaindns_zoneÚforestdns_zoneÚbinary_encodeÚSCOPE_ONELEVELÚget_partitions_dnÚdns_backendÚlenÚprintÚrealmÚ	tmp_samdbr   ÚDRSUAPI_DRS_INIT_SYNCÚDRSUAPI_DRS_PER_SYNCÚDRSUAPI_DRS_GET_ANCÚDRSUAPI_DRS_GET_NC_SIZEÚDRSUAPI_DRS_NEVER_SYNCEDÚreplica_flagsÚnever_reveal_sidÚ
reveal_sidÚconnection_dnÚRODCÚ	krbtgt_dnÚ	managedbyÚ	subdomainÚ	adminpassÚpartition_dnÚdns_a_dnÚdns_cname_dnÚforce_all_ips)Úctxr\   rk   rF   rG   r]   Únetbios_namer^   ÚdomainÚmachinepassr_   r¨   rc   r`   ra   rb   rl   ÚeÚenumÚestrÚtopology_baseÚres_rid_managerÚexprÚres_domaindnss                           r7   r3   ÚDCJoinContext.__init__?   s€  € ð Œ
ØŒ	ØŒØŒØ!ŒØ!ŒØ 1ÔØ)ÔØ!3Ôà/ÔØ"ˆÔàˆŒØˆÔà�	‰	×%Ñ% e×&?Ñ&?Ó&AÄF×DWÑDWÑ&WÔXÜ˜CŸI™I¨#¯&©&Ñ1ˆŒàŒ
Ø!3ˆÔæØ*ˆCŒIØŸ™Ÿ™ˆC�Jà�z�zà‘<Ø"×/Ñ/°·
±
Ó;�C”Høð —
‘
—‘Ð HÈ6Ñ QÔRØ Ÿ[™[¨Ó0�”
Ø—
‘
—‘ °·
±
Ñ :Ô;Ü +°·
±
Ñ":Ü+9Ó+;Ø*-¯)©)¸¿¹ñ@ˆCŒIð �8‰8ÑÜ"ˆCŒHð	(Ø�I‰I×Ñ¤3§>¡>¸ÐÑ<ô
 ˜#Ÿ)™)×6Ñ6Ó8Ó9ˆŒÜ˜#Ÿ)™)×3Ñ3Ó5Ó6ˆŒÜ˜CŸI™I×7Ñ7Ó9Ó:ˆŒÜ˜CŸI™I×7Ñ7Ó9Ó:ˆŒÜ×%Ò% c§i¡i×&>Ñ&>Ó&@ÓAˆŒ
ØŸ
™
ˆŒØ×-Ñ-Ó/ˆŒØ!$×!;Ñ!;Ó!=ˆÔÜ ŸIšI¤c¬$¯*ª*«,Ó&7Ó8ˆÔàŸ™×4Ñ4Ó6ˆŒØ ×0Ñ0Ó2ˆÔØ"×7Ñ7Ó9ˆÔàÑ"Ø'�Mä!×BÒBÀ3ÈÓLˆCŒMàŸ	™	×1Ñ1Ó3ˆŒ÷ à%ŒJØ #§*¡*Ñ,ˆC�KØDGÇJÄJÐPS×PXÔPXÐZ]×ZgÓZgÐhˆCŒMØ/°#·-±-Ñ?ˆC�KØ>A¿j¼jÈ#Ï+Ë+ÐVˆCŒKØ),¯©×)9Ñ)9Ö);¸S¿]»]ÐKˆCŒOØŸI™I×5Ñ5Ó7ˆCŒMàeÐhk×hsÑhsÑsˆMØ�}‰}˜]×+Ò+Ø03·
´
ºMÐ"J�•à"&�”à! C§J¡JÑ.Ø! C§O¡OÒ3Ø&)§o¤o°s·}³}ÐEðGˆCŒHð "Ÿi™i×.Ñ.´S·^±^Ø6KÐ5LØ47·K±Kð /ð AˆOð "1°Ñ!3Ð4IÑ!JÈ1Ñ!MˆCÔà3°c·k±kÑAˆÔØ3°c·k±kÑAˆÔà5¼×8IÒ8IÈ#×J\ÑJ\Ó8]Ñ]ˆØŸ	™	×(Ñ(¬s×/AÑ/AØ/1Ø.1¯i©i×.IÑ.IÓ.KØ48ð )ð :ˆð ÑØ$ˆC�Oä�=Ó! QÓ&Ø"(�”ÜÐ[Õ\à"-”à—M‘MˆŒ	àˆŒä$×:Ñ:Ü$×9Ñ9ñ:ä$×8Ñ8ñ9ô %×<Ñ<ñ=ô %×=Ñ=ñ	>ˆÔð  $ˆÔØˆŒØ ˆÔØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆÔàˆŒØˆÔð "ˆÕøôA �|‰|ó 	(ØŸ6™6‰LˆT�4Ü! $Ó'Ð'ûð	(ús   Ç
([5 Û5\(Ü	\#Ü#\(c                 óB  • U(       aN   U R                   R                  U[        R                  S/S9nU H  nU R                  UR                  SS9  M      U R                   R                  U5        [        SU-  5        g ! [         a     g f = f! [         a     g f = f)NÚdn©rW   rN   rO   T©Ú	recursivez
Deleted %s)	rm   rq   rr   r¦   Ú	ExceptionÚdel_noerrorrÌ   Údeleterª   )r¿   rÌ   rÏ   ÚresÚrs        r7   rÑ   ÚDCJoinContext.del_noerrorÖ   sš   € ÞðØ—i‘i×&Ñ&¨B´c×6HÑ6HÐQUÐPVÐ&ÐW�ó �Ø—‘ §¡°�Ó5ñ ð	Ø�I‰I×Ñ˜RÔ Ü�, Ñ#Õ$øô ó Ùðûô ó 	Ùð	ús#   ‰*B Á)B Â
BÂBÂ
BÂBc           
      ó
  • U R                   R                  U R                   R                  5       S[        R                  " U R
                  5      -  SS/S9n[        U5      S:X  a  g U(       då  [        5       nUR                  U R                  5         UR                  U R                  5        UR                  U R                  R                  5       5        [        SU R                  -  [!        5       X0R                  S9nUR                  [        R"                  SS	/S
9nUS   S	   S   US   S   S   :X  a  [%        SU R
                  -  5      e U R'                  US   R(                  SS9  US   R+                  SSS9nUb!  X`l        U R'                  U R,                  5        U R                   R                  U R                   R                  5       S[        R                  " SU R.                  -  5      < S[        R                  " SU R0                  -  5      < S3/ S9nU(       a  U R'                  US   R(                  SS9  U R                   R                  U R                   R                  5       S[        R                  " SU R.                  -  5      -  / S9nU(       aU  [%        S[        R                  " SU R.                  -  5      < S[        R                  " SU R0                  -  5      < 35      eg !    GN¯= f)NúsAMAccountName=%súmsDS-krbTgtLinkÚ	objectSID©rW   rZ   rO   r   rH   rI   Ú ÚtokenGroups)rN   rW   rO   z“Not removing account %s which looks like a Samba DC account matching the password we already have.  To override, remove secrets.ldb and secrets.tdbTrÎ   úmsDS-KrbTgtLink)Úidxz(&(sAMAccountName=údns-%sz)(servicePrincipalName=zdns/%sz))z(sAMAccountName=%s)zNot removing account zU which looks like a Samba DNS service account but does not have servicePrincipalName=)rm   rq   rw   rr   r¥   r—   r©   r   ÚguessrG   Úset_machine_accountÚset_kerberos_staterF   Úget_kerberos_stater   rk   r   rs   r/   rÑ   rÌ   ÚgetÚnew_krbtgt_dnr–   rœ   )r¿   ÚforcerÓ   rF   Úmachine_samdbÚ	token_resr·   s          r7   Úcleanup_old_accountsÚ"DCJoinContext.cleanup_old_accountsä   s«  € Ø�i‰i×Ñ C§I¡I×$@Ñ$@Ó$BØ*=Ä×@QÒ@QÐRU×R]ÑR]Ó@^Ñ*^Ø&7¸Ð%Eð ð Gˆô ˆs‹8�q‹=ØæÜ“MˆEØ�K‰K˜Ÿ™Ôð9Ø×)Ñ)¨#¯&©&Ô1Ø×(Ñ(¨¯©×)EÑ)EÓ)GÔHÜ %¨+¸¿
¹
Ñ*BÜ3AÓ3CØ27¿F¹Fñ!D�ð *×0Ñ0´s·~±~ÈBÐWdÐVeÐ0Ðf�	Ø˜Q‘< Ñ.¨qÑ1Ø˜!‘f˜[Ñ)¨!Ñ,ó-ä)ð +\ð -0¯K©Kñ	+8ó 9ð 9ð-ð 	�‰˜˜A™Ÿ	™	¨TˆÑ2à˜‘F—J‘JÐ0°a�JÐ8ˆ	ØÑ Ø )ÔØ�O‰O˜C×-Ñ-Ô.à�i‰i×Ñ C§I¡I×$@Ñ$@Ô$Bä #× 1Ò 1°(¸S¿Z¹ZÑ2GÖ HÜ #× 1Ò 1°(¸S¿_¹_Ñ2LÖ Mð+Oð &(ð	 ð )ˆö
 Ø�O‰O˜C ™FŸI™I°ˆOÑ6à�i‰i×Ñ C§I¡I×$@Ñ$@Ó$BØ*?Ä#×BSÒBSÐT\Ð_b×_iÑ_iÑTiÓBjÑ*jØ%'ð ð )ˆö Ý!ô $'×#4Ò#4°XÀÇ
Á
Ñ5JÖ#KÜ#&×#4Ò#4°XÀÇÁÑ5OÕ#Pð	#Ró Sð Sð øð=Úús   ÂA.K= Ë=Lc                 ó¢  • U R                   (       d  U R                  US9  U R                  b  U R                  U R                  5        U R                  b  U R                  U R                  5        U R                  U R
                  5        U R                  U R                  SS9  U R                  (       a  U R                  U R                  5        U R                  (       a  U R                  U R                  5        U R                   (       Gag  Sn[        R                  " SU R                  < SU< S3U R                  U R                  5      n[        R                  " 5       n[        R                  " 5       Ul        UR#                  S	U[$        R&                  5      n[        R(                  " 5       nU R*                  Ul        UR/                  XV[        R0                  5      nUR3                  XWR4                  R6                  5        [        R(                  " 5       nU R8                  Ul        UR/                  XV[        R0                  5      nUR3                  XWR4                  R6                  5        U R:                  (       a  U R                  U R:                  5        U R<                  (       a  U R                  U R<                  5        gg)
z$Remove any DNs from a previous join.)ræ   NTrÎ   Úsignúncacn_ip_tcp:Ú[Ú]rÛ   )r¹   ré   rµ   rÑ   r·   r™   r˜   r    r»   r   Úlsarpcrk   rG   rF   ÚObjectAttributeÚQosInfoÚsec_qosÚOpenPolicy2r   ÚSEC_FLAG_MAXIMUM_ALLOWEDÚStringr«   ÚstringÚQueryTrustedDomainInfoByNameÚ!LSA_TRUSTED_DOMAIN_INFO_FULL_INFOÚDeleteTrustedDomainÚinfo_exÚsidr†   r¼   r½   )r¿   ræ   Úbinding_optionsÚlsaconnÚ
objectAttrÚ
pol_handleÚnamero   s           r7   Úcleanup_old_joinÚDCJoinContext.cleanup_old_join  sâ  € ð �}�}Ø×$Ñ$¨5Ð$Ñ1à×ÑÑ(Ø�O‰O˜C×-Ñ-Ô.Ø�=‰=Ñ$Ø�O‰O˜CŸM™MÔ*Ø�‰˜Ÿ™Ô$Ø�‰˜Ÿ™°ˆÑ6Ø�?�?Ø�O‰O˜CŸO™OÔ,Ø××Ø�O‰O˜C×,Ñ,Ô-à�=�=ˆ=Ø$ˆOÜ—j“j¸#¿*¼*ÃoÐ!VØ!$§¡¨¯©ó4ˆGô ×,Ò,Ó.ˆJÜ!$§¢£ˆJÔà ×,Ñ,¨RØ-7Ü-5×-NÑ-NóPˆJô —:’:“<ˆDØŸ)™)ˆDŒKØ×7Ñ7¸
Ì#×JoÑJoÓpˆDà×'Ñ'¨
·L±L×4DÑ4DÔEä—:’:“<ˆDØ×0Ñ0ˆDŒKØ×7Ñ7¸
Ì#×JoÑJoÓpˆDà×'Ñ'¨
·L±L×4DÑ4DÔEà�<�<Ø�O‰O˜CŸL™LÔ)à××Ø�O‰O˜C×,Ñ,Õ-ð r9   c                 ó�  • U R                   (       a  [        S5      eU R                  R                  U R                  R	                  5       S[
        R                  " U R                  5      -  / SQS9n[        U5      S:X  a  [        SU R                  -  5      eSUS   ;   d  SUS   ;   d	  S	US   ;   a  [        S
U R                  -  5      e[        US   S   S   5      [        R                  R                  [        R                  R                  -  -  S:X  a  [        SU R                  -  5      eUS   R                  U l        g)z]confirm that the account is just a bare NT4 BDC or a member server, so can be safely promotedz Can not promote into a subdomainr×   )rØ   ÚuserAccountControlÚserverReferenceBLÚrIDSetReferencesrÚ   r   zcCould not find domain member account '%s' to promote to a DC, use 'samba-tool domain join' instead'rÝ   r  r  zhAccount '%s' appears to be an active DC, use 'samba-tool domain join' if you must re-create this accountr  zZAccount %s is not a domain member or a bare NT4 BDC, use 'samba-tool domain join' instead'N)r¹   rÐ   rm   rq   rw   rr   r¥   r—   r©   Úintr’   r,   ÚUF_WORKSTATION_TRUST_ACCOUNTÚUF_SERVER_TRUST_ACCOUNTrÌ   rd   ©r¿   rÓ   s     r7   Úpromote_possibleÚDCJoinContext.promote_possibleH  sm  € à�=�=äÐ>Ó?Ð?à�i‰i×Ñ C§I¡I×$@Ñ$@Ó$BØ*=Ä×@QÒ@QÐRU×R]ÑR]Ó@^Ñ*^Ú%wð ð yˆô ˆs‹8�q‹=Üð  Bð  EH÷  EPñ  EPñ  Pó  Qð  QØ  A¡Ó&Ð*=ÀÀQÁÓ*GÐK]ÐadÐefÑagÓKgÜð  Gð  JM÷  JUñ  JUñ  Uó  Vð  VÜ��A‘Ð+Ñ,¨QÑ/Ó0´E·J±J×4[Ñ4[Ü49·J±J×4VÑ4Vñ5Wñ XØ[\ó]äÐxÐ{~÷  |Gñ  |Gñ  Gó  Hð  Hà! !™fŸi™iˆÕr9   c                 óø  •  U R                   R                  U[        R                  [        R                  -  [        R
                  -  S9U l        U R                  R                  b5  U R                  R                  S:w  a  U R                  R                  U l        U R                  R                  $ ! [         a%  n[        SU< SUR                  S   < 35      eSnAf[         a    [        SU-  5      ef = f)z(find a writeable DC for the given domain)rÁ   Úflagsz*Failed to find a writeable DC for domain 'z': é   Nz-Failed to find a writeable DC for domain '%s'rÛ   )rj   Úfinddcr   ÚNBT_SERVER_LDAPÚNBT_SERVER_DSÚNBT_SERVER_WRITABLEÚ	cldap_retr$   r+   ru   rÐ   Úclient_siter]   Úpdc_dns_name)r¿   rÁ   Úerrors      r7   rp   ÚDCJoinContext.find_dc[  sß   € ð	YØŸG™GŸN™N°&Ä×@SÑ@SÔVY×VgÑVgÑ@gÔjm÷  kBñ  kBñ  AB˜Nð  CˆCŒMð �=‰=×$Ñ$Ñ0°S·]±]×5NÑ5NÐRTÓ5TØ—}‘}×0Ñ0ˆCŒHØ�}‰}×)Ñ)Ð)øô ó 	8ÝÛ &¨¯
©
°1«ð 7ó 8ð 8ûäó 	YÜÐNÐQWÑWÓXÐXð	Yús   ‚AB3 Â3
C9Â= CÃC9c                 óÎ   • S nU R                   R                  U[        R                  [        R                  -  S9nUR
                  b  UR
                  S:w  a  UR
                  nU$ )N)Úaddressr  rÛ   )rj   r  r   r  r  r  )r¿   rk   r]   r  s       r7   rn   ÚDCJoinContext.find_dc_siteh  s^   € ØˆØ—G‘G—N‘N¨6Ü),×)<Ñ)<¼s×?PÑ?PÑ)Pð #ð Rˆ	à× Ñ Ñ,°×1FÑ1FÈ"Ó1LØ×(Ñ(ˆDØˆr9   c                 óØ   • U R                   R                  U R                  [        R                  S/S9nSUS   ;   a  [        US   S   S   5      $ [        R                  R                  $ )NúmsDS-Behavior-VersionrÍ   r   )	rm   rq   rx   rr   rs   r  r’   r,   ÚDS_DOMAIN_FUNCTION_2000r  s     r7   r�   Ú"DCJoinContext.get_behavior_versionp  s_   € Ø�i‰i×Ñ C§K¡K´s·~±~ÐNeÐMfÐÐgˆØ" c¨!¡fÓ,Ü�s˜1‘vÐ5Ñ6°qÑ9Ó:Ð:ä—:‘:×5Ñ5Ð5r9   c                 ó~   • U R                   R                  S[        R                  S/S9n[	        US   S   S   5      $ )NrÛ   ÚdnsHostNamerÍ   r   )rm   rq   rr   rs   rv   r  s     r7   r�   ÚDCJoinContext.get_dnsHostNamew  s<   € Ø�i‰i×Ñ B¬c¯n©nÀ]ÀOÐÐTˆÜ�3�q‘6˜-Ñ(¨Ñ+Ó,Ð,r9   c                 ó$  • U R                   R                  5       nU R                   R                  U[        R                  S/S[        R
                  " [        U R                   R                  5       5      5      -  S9n[        US   S   S   5      $ ©z9get netbios name of the domain from the partitions recordÚnETBIOSNamez	ncName=%s)rW   rN   rO   rZ   r   )rm   r§   rq   rr   r¦   r¥   rv   rw   ©r¿   Úpartitions_dnrÓ   s      r7   rƒ   ÚDCJoinContext.get_domain_name{  s|   € àŸ	™	×3Ñ3Ó5ˆØ�i‰i×Ñ M¼×9KÑ9KÐTaÐSbØ*5¼×8IÒ8IÌ#ÈcÏiÉi×NjÑNjÓNlÓJmÓ8nÑ*nð ð pˆä�3�q‘6˜-Ñ(¨Ñ+Ó,Ð,r9   c                 ó$  • U R                   R                  5       nU R                   R                  U[        R                  S/S[        R
                  " [        U R                   R                  5       5      5      -  S9n[        US   S   S   5      $ r%  )rm   r§   rq   rr   r¦   r¥   rv   ry   r'  s      r7   r…   Ú$DCJoinContext.get_forest_domain_name‚  s|   € àŸ	™	×3Ñ3Ó5ˆØ�i‰i×Ñ M¼×9KÑ9KÐTaÐSbØ*5¼×8IÒ8IÌ#ÈcÏiÉi×NgÑNgÓNiÓJjÓ8kÑ*kð ð mˆä�3�q‘6˜-Ñ(¨Ñ+Ó,Ð,r9   c                 ó  • U R                   R                  U R                  / S[        R                  " U R
                  5      [        R                  [        R                  R                  4-  S9n[        US   R                  5      $ )z7get the parent domain partition DN from parent DNS namez9(&(objectclass=crossRef)(dnsRoot=%s)(systemFlags:%s:=%u)))rW   rO   rZ   r   )rm   rq   r~   rr   r¥   Úparent_dnsdomainÚOID_COMPARATOR_ANDr’   r,   ÚSYSTEM_FLAG_CR_NTDS_DOMAINrv   rÌ   r  s     r7   Úget_parent_partition_dnÚ%DCJoinContext.get_parent_partition_dn‰  sp   € à�i‰i×Ñ C§M¡M¸Ø*eÜ #× 1Ò 1°#×2FÑ2FÓ GÜ #× 6Ñ 6¼¿
¹
×8]Ñ8]ð _ñ+_ð ð `ˆô �3�q‘6—9‘9‹~Ðr9   c                 ó¶   • U R                   R                  S[        R                  S/S9nUS   S   S   n[	        U R                   R                  SU5      5      $ )z]get the SID of the connected user. Only works with w2k8 and later,
so only used for RODC joinrÛ   rÜ   rÍ   r   rÙ   )rm   rq   rr   rs   r*   Úschema_format_value)r¿   rÓ   Úbinsids      r7   Ú	get_mysidÚDCJoinContext.get_mysid‘  sT   € ð �i‰i×Ñ B¬c¯n©nÀ]ÀOÐÐTˆØ�Q‘˜Ñ& qÑ)ˆÜ˜#Ÿ)™)×7Ñ7¸ÀVÓLÓMÐMr9   c                 óà   •  U R                   R                  U[        R                  / S9ng! [        R                   a-  nUR
                  u  pEU[        R                  :X  a   SnAge SnAff = f)zcheck if a DN existsrÍ   NFT)rm   rq   rr   rs   rt   ru   ÚERR_NO_SUCH_OBJECT)r¿   rÌ   rÓ   Úe5rÄ   rÅ   s         r7   rŸ   ÚDCJoinContext.dn_exists˜  s`   € ð	Ø—)‘)×"Ñ"¨´#·.±.ÈÐ"ÐKˆCð øô �|‰|ó 	ØŸ7™7‰LˆTØ”s×-Ñ-Ó-ÜØûð		ús   ‚), ¬A-Á "A(Á'A(Á(A-c                 óö  • [        SU R                  -  5        U R                  S[        [        R                  R
                  [        R                  R                  -  5      SSU R                  -  S.nU R                  R                  US/5        U R                  R                  U R                  [        R                  S/S9nUS	   S   S	   U l        [        S
U R                  -  5        [        R                  " 5       n[        R                  " U R                  U R                   5      Ul        [        R$                  " U R                  [        R&                  S5      US'   U R                  R)                  U5        SU R                  < SU R*                  < 3U l        [        SU R                  < SU R,                  < 35        U R                  R/                  U R                  U R,                  5        g)z#RODCs need a special krbtgt accountú	Adding %sÚuserÚTRUEzkrbtgt for %s)rÌ   ÚobjectclassÚuseraccountcontrolÚshowinadvancedviewonlyÚdescriptionúrodc_join:1:1ÚsamAccountNamerÍ   r   zGot krbtgt_name=%srØ   rR   ú
,CN=Users,z	Renaming z to N)rª   r·   rv   r’   r,   ÚUF_NORMAL_ACCOUNTÚUF_ACCOUNTDISABLEr—   rm   Úaddrq   rr   rs   Úkrbtgt_nameÚMessageÚDnrš   rÌ   ÚMessageElementÚFLAG_MOD_REPLACEÚmodifyrx   rå   Úrename)r¿   ÚrecrÓ   Úms       r7   Úadd_krbtgt_accountÚ DCJoinContext.add_krbtgt_account£  sm  € äˆk˜CŸM™MÑ)Ô*à—-‘-Ø!Ü"%¤e§j¡j×&BÑ&BÜ&+§j¡j×&BÑ&Bñ'Có #Dà&,Ø*¨S¯[©[Ñ8ñ:ˆð 	�	‰	�‰�c˜OÐ,Ô-ð �i‰i×Ñ C§M¡M¼¿¹ÐP`ÐOaÐÐbˆØ˜a™&Ð!1Ñ2°1Ñ5ˆŒäÐ" S§_¡_Ñ4Ô5ä�KŠK‹MˆÜ�vŠv�c—i‘i §¡Ó-ˆŒÜ"×1Ò1°#·-±-Ü25×2FÑ2FÐHYó [ˆÐ
Ñà�	‰	×Ñ˜Õà36·?´?ÀCÇKÃKÐPˆÔÝ S§]¤]°C×4EÓ4EÐFÔGØ�	‰	×Ñ˜Ÿ™¨×(9Ñ(9Õ:r9   c                 ó2  • SnU R                   R                  5       S:¼  a  US-  nSU R                  < SU< S3n[        R                  " X R                   U R                  5      U l        [
        R                  " U R                  5      u  U l        U l        g)z.make a DRSUAPI connection to the naming masterÚsealé	   ú,printrí   rî   rï   N)	rG   Ú	log_levelrk   r   rF   r   Ú
drs_DsBindÚdrsuapi_handleÚbind_supported_extensions)r¿   rý   Úbinding_strings      r7   Údrsuapi_connectÚDCJoinContext.drsuapi_connectÀ  sq   € à ˆØ�6‰6×ÑÓ Ó"Ø˜xÑ'ˆOøØ25·*´*»oÐNˆÜ—o’o n·f±f¸c¿i¹iÓHˆŒÜ>G×>RÒ>RÐSV×S^ÑS^Ó>_Ñ;ˆÔ	˜SÕ:r9   c           
      óô   • [        U R                  U R                  S9U l        [	        [        5       SSU R                  U R                  SSS9U l        U R                  R                  U R                  5        g)z2create a temporary samdb object for schema queries)ÚschemadnNF)rK   rJ   Úauto_connectrL   rG   Úglobal_schemaÚam_rodc)
r   r�   r|   Ú
tmp_schemar   r   rF   rG   r¬   Ú
set_schema©r¿   s    r7   Úcreate_tmp_samdbÚDCJoinContext.create_tmp_samdbÉ  s[   € ä §
¡
Ø),¯©ñ8ˆŒä¬>Ó+;ÀÐTYØ*-¯)©)¸¿¹ÈeØ&+ñ-ˆŒð 	�‰× Ñ  §¡Õ0r9   c           	      óŒ  • U R                   c  U R                  5         U R                  c  U R                  5         / nU GH>  n[         R                  " 5       nUS   Ul        / nU H›  nUS:X  a  M  [        X6   [        5      (       d  X6   /nOX6   nU Vs/ s H+  n[        U[        5      (       a  UR                  S5      OUPM-     nnU R                  R                  U R                  Xg5      n	UR                  U	5        M�     [         R                  " 5       n
[        U5      U
l        XZl        [         R                   " 5       nXKl        X«l        [         R&                  " 5       nX¼l        UR                  U5        GMA     [         R*                  " 5       nUS   Ul        UR,                  nUSS  H  nXþl        UnM     U R                   R1                  U R2                  SU5      u  nnUS:X  a…  UR4                  [         R6                  :w  a#  [9        SUR4                  -  5        [;        S5      eUR<                  S   [>        R@                  :w  a#  [9        S	UR<                  -  5        [;        S5      eUS
:X  Ga8  URB                  S:w  a  [;        SURB                  -  5      eURD                  RF                  S   [>        R@                  :w  a�  URD                  RH                  c&  [9        SURD                  RF                  S   -  5        OH[9        SURD                  RF                  S   < SURD                  RH                  R<                  < 35        [;        S5      eURD                  R4                  [         R6                  :w  a-  [9        SURD                  R4                  -  5        [;        S5      eURJ                  $ s  snf )z,add a record via the DRSUAPI DsAddEntry callNrÌ   Úutf8r   r  é   z!DsAddEntry failed with dir_err %uzDsAddEntry failedz(DsAddEntry failed with status %s info %sé   zexpected err_ver 1, got %uz.DsAddEntry failed with status %s, info omittedzDsAddEntry failed with status z info )&r   r]  r¬   rg  ÚDsReplicaObjectIdentifierrÌ   Ú
isinstanceÚlistrv   ÚencodeÚdsdb_DsReplicaAttributeÚappendÚDsReplicaAttributeCtrr©   Únum_attributesÚ
attributesÚDsReplicaObjectÚ
identifierÚattribute_ctrÚDsReplicaObjectListItemÚobjectÚDsAddEntryRequest2Úfirst_objectÚnext_objectÚ
DsAddEntryrZ  Údir_errÚDRSUAPI_DIRERR_OKrª   ÚRuntimeErrorÚextended_errr!   ÚWERR_SUCCESSÚerr_verÚerr_dataÚstatusro   Úobjects)r¿   Úrecsr‡  rP  ÚidrO   ÚaÚvÚxÚrattrrx  rz  Úlist_objectÚreq2ÚprevÚoÚlevelÚctrs                     r7   r~  ÚDCJoinContext.DsAddEntryÒ  s  € à�;‰;ÑØ×ÑÔ!Ø�=‰=Ñ Ø× Ñ Ô"àˆÜˆCÜ×2Ò2Ó4ˆBØ˜‘IˆBŒEàˆEÛ�Ø˜“9ÙÜ! #¡&¬$×/Ñ/Ø™˜‘Aà™�AÙLMÓNÊAÀq¬°A´s×);Ñ);�Q—X‘X˜fÔ%ÀÒBÉA�ÐNØŸ™×=Ñ=¸c¿m¹mÈQÓR�Ø—‘˜UÖ#ñ ô $×9Ò9Ó;ˆMÜ+.¨u«:ˆMÔ(Ø',Ô$ä×,Ò,Ó.ˆFØ "ÔØ#0Ô ä!×9Ò9Ó;ˆKØ!'ÔØ�N‰N˜;×'ñ5 ô8 ×)Ò)Ó+ˆØ# A™JˆÔØ× Ñ ˆØ˜˜“ˆAØ ÔØŠDñ ð —{‘{×-Ñ-¨c×.@Ñ.@À!ÀTÓJ‰ˆ�Ø�A‹:Ø�{‰{œg×7Ñ7Ó7ÜÐ9¸C¿K¹KÑGÔHÜ"Ð#6Ó7Ð7Ø×Ñ Ñ"¤f×&9Ñ&9Ó9ÜÐ@ÀC×DTÑDTÑUÔVÜ"Ð#6Ó7Ð7Ø�AŒ:Ø�{‰{˜aÓÜ"Ð#?À#Ç+Á+Ñ#MÓNÐNØ�|‰|×"Ñ" 1Ñ%¬×)<Ñ)<Ó<Ø—<‘<×$Ñ$Ñ,ÜÐJÈcÏlÉl×NaÑNaÐbcÑNdÑeÕfåÈÏÉ×H[ÑH[Ð\]ÔH^ØHKÏÉ×HYÑHY×HfÓHfðhô iä"Ð#6Ó7Ð7Ø�|‰|×#Ñ#¤w×'@Ñ'@Ó@ÜÐ9¸C¿L¹L×<PÑ<PÑPÔQÜ"Ð#6Ó7Ð7à�{‰{Ðùò[ Os   Â2Oc                 óÎ  • [        SU R                  -  5        [        SU R                  4SS[        [        R
                  R                  5      4SU R                  4/5      nU R                  U R                  U R                  /nU R                  [        R
                  R                  :¼  a.  [        R                  " U R                  5      n[        U5      US'   U R                  [        R
                  R                  :¼  a  U R                  US'   U R                  (       a(  SU R                  -  US	'   U R                   US
'   SUS'   U$ SU R                  -  US	'   U R                  [        R
                  R                  :¼  a  U R                   US'   / US'   U H(  nX@R                   ;   d  M  US   R#                  U5        M*     SUS'   [%        U R&                  5      US'   U$ )z return the ntdsdsa object to addr<  rÌ   )r?  ÚnTDSDSAÚsystemFlagsÚdMDLocationr  zmsDS-HasDomainNCszCN=NTDS-DSA-RO,%sÚobjectCategoryzmsDS-HasFullReplicaNCsÚ37ÚoptionszCN=NTDS-DSA,%szmsDS-HasMasterNCsÚHasMasterNCsÚ1ÚinvocationId)rª   r™   r)   rv   r’   r,   Ú#SYSTEM_FLAG_DISALLOW_MOVE_ON_DELETEr|   rx   r~   r�   ÚDS_DOMAIN_FUNCTION_2003r-   Údc_level_from_lprG   r¶   rf   rr  r	   rŠ   )r¿   rP  re   ÚdomainControllerFunctionalityÚncs        r7   Újoin_ntdsdsa_objÚDCJoinContext.join_ntdsdsa_obj  s®  € ô 	ˆk˜CŸK™KÑ'Ô(ô Ø�3—;‘;ÐØ&ØœC¤§
¡
× NÑ NÓOÐPØ˜CŸM™MÐ*ð	,ó -ˆð —;‘; §¡¨s¯}©}Ð=ˆà×Ñ¤5§:¡:×#EÑ#EÓEô
 -=×,MÒ,MÈcÏfÉfÓ,UÐ)Ü+.Ð/LÓ+MˆCÐ'Ñ(à×Ñ¤5§:¡:×#EÑ#EÓEØ'*§{¡{ˆCÐ#Ñ$à�8�8Ø$7¸#¿-¹-Ñ$GˆCÐ Ñ!Ø,/×,<Ñ,<ˆCÐ(Ñ)Ø!ˆC�	‰Nð" ˆ
ð %5°s·}±}Ñ$DˆCÐ Ñ!ð ×#Ñ#¤u§z¡z×'IÑ'IÓIØ+.×+;Ñ+;�Ð'Ñ(à')ˆC�ÑÛ�Ø×)Ñ)Õ)Ø˜Ñ'×.Ñ.¨rÖ2ñ ð !ˆC�	‰NÜ"*¨3×+<Ñ+<Ó"=ˆC�Ñàˆ
r9   c                 óä  • U R                  5       nU R                  (       a  U R                  R                  US/S9  OAU R                  (       a  U R                  R                  US/5        OU R                  U/5        U R                  R                  U R                  [        R                  S/S9n[        R                  " U R                  R                  SUS   S   S   5      5      U l        g)zadd the ntdsdsa objectúrelax:0©ÚcontrolsrC  Ú
objectGUIDrÍ   r   N)r¤  rl   rm   rH  r¶   r~  rq   r™   rr   rs   r   r‡   r3  Ú	ntds_guid)r¿   rP  rÓ   s      r7   Újoin_add_ntdsdsaÚDCJoinContext.join_add_ntdsdsaE  s´   € ð ×"Ñ"Ó$ˆØ×!×!Ø�I‰I�M‰M˜#¨¨ˆMÒ4Ø�X�XØ�I‰I�M‰M˜# Ð0Õ1à�N‰N˜C˜5Ô!ð �i‰i×Ñ C§K¡K´s·~±~ÈlÈ^ÐÐ\ˆÜŸ	š	 #§)¡)×"?Ñ"?ÀÈcÐRSÉfÐUaÑNbÐcdÑNeÓ"fÓgˆ�r9   c                 óˆ  • U R                   (       Gae  [        SU R                   -  5        U R                   SU R                  U R                  [        U R                  [
        R                  R                  -  5      U R                  S.nU R                  [
        R                  R                  :¼  a'  [        [
        R                  R                  5      US'   OU R                  (       a  / US'   U R                  (       a  U R                  US'   OU R                  (       a  / US'   U R                  (       a  U R                  US'   OU R                  (       a  / US'   U R                  (       a  U R                  US'   OU R                  (       a  / US'   U(       a  [!        U5      US'   U R                  (       a�  U R"                  U R                   :w  a0  U R$                  R'                  U R"                  U R                   5        U R$                  R)                  [*        R,                  R/                  U R$                  U[*        R0                  5      5        O!S	nUb  S
/nU R$                  R3                  X#S9  U R4                  (       a  U R7                  5         U R8                  (       aÅ  [        SU R8                  -  5        U R8                  S[        [
        R                  R:                  [
        R                  R<                  -  [
        R                  R>                  -  5      U R                  S.nU R                   (       a  U R                   US'   U R$                  R3                  U5        U R@                  (       a  S	U l!        g	U RD                  (       Ga«  U RG                  5         S[*        RH                  " U RJ                  5      -  nU R$                  RM                  [*        RN                  / U R$                  RQ                  5       US9U RJ                  4nS[*        RH                  " U RR                  5      -  nU R$                  RM                  [*        RN                  / U R$                  RQ                  5       US9U RR                  4nXV4 H²  u  pxX€RT                  ;  a  M  [W        U5      S:X  d  M'  [*        R,                  " 5       n	US   RX                  U	l,        Sn
U RZ                  (       a  Sn
[*        R\                  " U RD                  [*        R^                  U
5      Xš'   U R$                  R)                  U	5        M´     U R`                  bO  [        SU R`                  -  5        U R`                  SSSU Rb                  S.nU R$                  R3                  U5        U R                   (       Ga§  [        SU R                   -  5        [*        R,                  " 5       n	[*        Rd                  " U R$                  U R                   5      U	l,        [g        [W        U Rh                  5      5       HB  nU Rh                  U   Rk                  S[        U RB                  5      5      U Rh                  U'   MD     [*        R\                  " U Rh                  [*        R0                  S5      U	S'   U R$                  R)                  U	5        [        SU R                  -  5         U R$                  Rm                  S[*        RH                  " U R                  5      -  U Rn                  SU R                  S9  U R$                  RM                  U R                   [*        R|                  S!S"/S#9nS!US   ;   a  [        US   S!   S   5      U l@        OS	U l@        [ƒ        [„        R†                  US   S   S   5      U lD        [        S$5        [*        R,                  " 5       n	[*        Rd                  " U R$                  U R                   5      U	l,        [*        R\                  " [        U R                  5      [*        R0                  S%5      U	S%'   U R$                  R)                  U	5        U RŠ                  R�                  S&5      (       Ga  [
        RŽ                  " S'S(5      U lH        U R$                  R“                  [•        [—        S)5      U R˜                  U Rš                  U Rœ                  [Ÿ        U R�                  R¡                  S*5      5      R£                  S+5      U R                  S,.5      5      nU H•  u  nnU[*        R¤                  :X  d   eUS-   n[        S.US-   -  5        US/	 US0	 [        [
        R                  R¦                  [
        R                  R                  -  5      US%'    U R$                  R3                  U5        M—     [        S1U Rœ                  -  5         U R$                  Rm                  S2[*        RH                  " U Rœ                  5      -  U R�                  SU R                  S9  U R$                  RM                  W[*        R|                  S!/S#9nS!US   ;   a  [        US   S!   S   5      U lU        g	S	U lU        g	g	! [*        Rp                   ag  nURr                  u  pÞU[*        Rt                  :w  a  e U Rv                  Ry                  U R                  U Rz                  U Rn                  S 9   S	nAGNÉS	nAff = f! [*        Rp                   a/  nURr                  u  pÞU[*        R¨                  :w  a  e  S	nAGM  S	nAff = f! [*        Rp                   aj  nURr                  u  pÞU[*        Rt                  :w  a  e U Rv                  Ry                  S3U Rœ                  -  U Rz                  U R�                  S 9   S	nAGN“S	nAff = f)4z+add the various objects needed for the joinr<  Úcomputer)rÌ   ÚobjectClassÚdisplaynameÚsamaccountnamer  rœ   zmsDS-SupportedEncryptionTypesr¸   zmsDS-NeverRevealGroupzmsDS-RevealOnDemandGroupÚ	objectSidNr§  r¨  rk   )rÌ   r?  r—  r"  ÚserverReferencerX   rY   r  r   zmsDS-NC-Replica-LocationszmsDS-NC-RO-Replica-LocationsÚnTDSConnectionr>  Ú65)rÌ   r?  Úenabledconnectionr›  Ú
fromServerzAdding SPNs to %sz	$NTDSGUIDÚservicePrincipalNamezSetting account password for %sz((&(objectClass=user)(sAMAccountName=%s))F)Úforce_change_at_next_loginÚusername)Úaccount_namer„   ÚnewpasswordzmsDS-KeyVersionNumberrÙ   rÍ   zEnabling accountr  ÚBIND9_é€   éÿ   zprovision_dns_add_samba.ldifú	utf-16-lerj  )Ú	DNSDOMAINÚDOMAINDNÚHOSTNAMEÚDNSPASS_B64ÚDNSNAMErÌ   z#Adding DNS account %s with dns/ SPNÚclearTextPasswordÚisCriticalSystemObjectz#Setting account password for dns-%sz,(&(objectClass=user)(samAccountName=dns-%s))rß   )Vrš   rª   r—   rv   r  r’   r,   rG  rœ   r�   ÚDS_DOMAIN_FUNCTION_2008ÚENC_ALL_TYPESrc   r¸   r³   r´   r	   rd   rm   rO  rN  rr   rJ  Ú	from_dictrM  rH  r·   rR  r˜   ÚSYSTEM_FLAG_CONFIG_ALLOW_RENAMEÚ%SYSTEM_FLAG_CONFIG_ALLOW_LIMITED_MOVErŸ  r¹   r«  r™   r¬  r¥   r£   rq   r¦   r§   r¤   re   r©   rÌ   r¶   rL  ÚFLAG_MOD_ADDrµ   rŒ   rK  Úranger¡   ÚreplaceÚsetpasswordr‘   rt   ru   ÚERR_UNWILLING_TO_PERFORMrj   Úset_passwordr„   rs   r  Úkey_version_numberr
   r   r   Únew_dc_account_sidr¨   Ú
startswithÚgenerate_random_passwordÚdnspassÚ
parse_ldifr    r   r•   rx   r–   r"   rp  ÚdecodeÚCHANGETYPE_NONErF  ÚERR_ENTRY_ALREADY_EXISTSÚdns_key_version_number)r¿   Úspecified_sidrP  r©  rÈ   rÁ   ÚforestÚpartÚzonerQ  ÚattrÚiÚe2ÚnumÚ_rÓ   rˆ  Ú
changetyper5   Údns_acct_dnrÃ   Úe3s                         r7   Újoin_add_objectsÚDCJoinContext.join_add_objectsT  sB	  € à�;�;ˆ;Ü�+ §¡Ñ+Ô,à—k‘kØ)Ø"Ÿ{™{Ø"%§+¡+Ü&)¨#×*@Ñ*@Ä5Ç:Á:×C_ÑC_Ñ*_Ó&`Ø"Ÿ™ñ0ˆCð ×#Ñ#¤u§z¡z×'IÑ'IÓIÜ7:¼5¿:¹:×;SÑ;SÓ7T�Ð3Ò4Ø×%×%Ø79�Ð3Ñ4Ø�}�}Ø#&§=¡=��KÒ Ø×%×%Ø#%��KÑ à×#×#Ø/2×/CÑ/C�Ð+Ò,Ø×%×%Ø/1�Ð+Ñ,à�~�~Ø25·.±.�Ð.Ò/Ø×%×%Ø24�Ð.Ñ/æÜ#+¨MÓ#:��KÑ à×#×#Ø×&Ñ&¨#¯+©+Ó5Ø—I‘I×$Ñ$ S×%8Ñ%8¸#¿+¹+ÔFØ—	‘	× Ñ ¤§¡×!6Ñ!6°s·y±yÀ#Äs×G[ÑG[Ó!\Õ]à�Ø Ñ,Ø )˜{�HØ—	‘	—‘˜c�Ñ5à�=�=Ø×"Ñ"Ô$à�=�=Ü�+ §¡Ñ-Ô.à—m‘mØ'ä"¤5§:¡:×#MÑ#MÜ#(§:¡:×#SÑ#Sñ$Tä#(§:¡:×#QÑ#Qñ$Ró  Sð  #Ÿ™ñ0ˆCð �{�{Ø),¯©�Ð%Ñ&à�I‰I�M‰M˜#Ôà�=�=à ˆCŒMØà�;�;ˆ;Ø× Ñ Ô"ð :¼C×<MÒ<MÈc×N`ÑN`Ó<aÑaˆDØ—i‘i×&Ñ&¬S×-?Ñ-?Ø-/Ø,/¯I©I×,GÑ,GÓ,IØ26ð 'ð 8ð :=×9KÑ9KðMˆFð
 :¼C×<MÒ<MÈc×N`ÑN`Ó<aÑaˆDØ—i‘i×&Ñ&¬S×-?Ñ-?Ø-/Ø,/¯I©I×,GÑ,GÓ,IØ26ð 'ð 8ð :=×9KÑ9KðMˆFð
  &Ó.‘
�ØŸ{™{Ó*Ùä�t“9 •>ÜŸš›�AØ ™7Ÿ:™:�A”DØ6�DØ—x—xØ=˜ä!×0Ò0°·±Ü14×1AÑ1AÀ4óI�A‘Gà—I‘I×$Ñ$ QÖ'ñ /ð ×ÑÑ(Ü�+ × 1Ñ 1Ñ1Ô2à×'Ñ'Ø/Ø%+ØØ!Ÿn™nñ.ˆCð �I‰I�M‰M˜#Ôà�;�;ˆ;ÜÐ%¨¯©Ñ3Ô4Ü—’“ˆAÜ—6’6˜#Ÿ)™) S§[¡[Ó1ˆAŒDÜœ3˜sŸx™x›=Ö)�Ø!Ÿh™h q™k×1Ñ1°+¼sÀ3Ç=Á=Ó?QÓR�—‘˜“ñ *ä(+×(:Ò(:¸3¿8¹8Ü;>×;OÑ;OØ;Qó)SˆAÐ$Ñ%ð �I‰I×Ñ˜QÔô Ð3°c·k±kÑAÔBð@Ø—	‘	×%Ñ%Ð&PÜ(+×(9Ò(9¸#¿+¹+Ó(Fñ'Gà&)§m¡mØAFØ/2¯{©{ð	 &ñ <ð —)‘)×"Ñ"¨¯©¼3¿>¹>Ø*AØ*5ð*7ð #ð 8ˆCð '¨#¨a©&Ó0Ü),¨S°©VÐ4KÑ-LÈQÑ-OÓ)P�Õ&à)-�Ô&ä%/´×0@Ñ0@Ø03°A±°{Ñ0CÀAÑ0Fó&HˆCÔ"ô Ð$Ô%Ü—’“ˆAÜ—6’6˜#Ÿ)™) S§[¡[Ó1ˆAŒDÜ&)×&8Ò&8¼¸S×=SÑ=SÓ9TÜ9<×9MÑ9MØ9Mó'OˆAÐ"Ñ#ð �I‰I×Ñ˜QÔà�?‰?×%Ñ% h×/Ò/Ü×8Ò8¸¸cÓBˆCŒKà—9‘9×'Ñ'Ô(9¼*ÐEcÓ:dØHKÏÉØGJÇ{Á{ØGJÇzÁzÜJSÐTW×T_ÑT_×TfÑTfÐgrÓTsÓJt×J{ÑJ{ð  }Có  KDØFIÇoÁoñ	;Wó)Xó YˆDó $(‘�
˜CØ!¤S×%8Ñ%8Ó8Ð8Ð8Ø! $™i�ÜÐ;¸cÀ$¹iÑGÔHð Ð+Ð,àÐ0Ð1ä,/´·
±
×0LÑ0LÜ05·
±
×0LÑ0Lñ1Mó -N�Ð(Ñ)ðØ—I‘I—M‘M #Ö&ñ $(ô0 Ð7¸#¿*¹*ÑDÔEð>Ø—	‘	×%Ñ%Ð&TÜ(+×(9Ò(9¸#¿*¹*Ó(Eñ'Fà&)§k¡kØAFØ/2¯{©{ð	 &ñ <ð —)‘)×"Ñ"¨¼3¿>¹>Ø*AÐ)Bð #ð DˆCà&¨#¨a©&Ó0Ü-0°°Q±Ð8OÑ1PÐQRÑ1SÓ-T�Õ*à-1�Õ*ðk 0øô7 —<‘<ó @ØŸ7™7‘�Øœ#×6Ñ6Ó6ØØ—‘×$Ñ$°#·+±+Ø14·±Ø14·±ð %÷ @ûð	@ûôd —|‘|ó Ø Ÿv™v‘H�SØœc×:Ñ:Ó:Øö ;ûðûô" —<‘<ó >ØŸ7™7‘�Øœ#×6Ñ6Ó6ØØ—‘×$Ñ$°(¸S¿Z¹ZÑ2GØ14·±Ø14·±ð %÷ >ûð	>úsL   ÛAi? æ k=çAm é?k:êAk5ë5k:ë=m ì#l;ì;m íoíAn<î<oc                 ó¨  • [        SU R                  -  5        S[        U R                  5      < S[        R
                  < 30n[        R                  " U R                  US9nU R                  SSU R                  -  U R                  U R                  U R                  U R                  [        [        R                  R                   [        R                  R"                  -  5      US.	nU R$                  [        R                  R&                  :¼  a  [        U R$                  5      US'   U R)                  5       nU R+                  X4/5      n[-        U5      S	:w  a  [/        S
5      eUS   R0                  U l        [        S5        U R4                  R7                  U R                  [8        R:                  " S5      U R2                  [<        R>                  [<        R@                  S9  [        S5        U R4                  R7                  U RB                  [8        R:                  " S5      U R2                  [<        R>                  [<        R@                  S9  g)zLadd the various objects needed for the join, for subdomains post replicationr<  ÚSubdomainAdminsÚ-)Úname_mapÚcrossRefzCN=Cross-Ref,%s)	rÌ   r?  r™  ÚnCNamer&  ÚdnsRootÚtrustParentr—  ÚntSecurityDescriptorr  rk  z"Expected 2 objects from DsAddEntryr  zReplicating partition DNú$00000000-0000-0000-0000-000000000000)Úexopr²   zReplicating NTDS DNN)"rª   r»   rv   r�   r   ÚDOMAIN_RID_ADMINSr   Ú+get_paritions_crossref_subdomain_descriptorr‚   r|   rx   r„   r•   Úparent_partition_dnr’   r,   ÚSYSTEM_FLAG_CR_NTDS_NCr/  r�   r   r¤  r~  r©   r/   Úguidr«  ÚreplÚ	replicater   r‡   r   ÚDRSUAPI_EXOP_REPL_OBJÚDRSUAPI_DRS_WRIT_REPr™   )r¿   rï  Ú	sd_binaryrP  Úrec2r‡  s         r7   Újoin_add_objects2ÚDCJoinContext.join_add_objects2+  s¿  € ô 	ˆk˜C×,Ñ,Ñ,Ô-Ø%´#°c·j±j¶/Ä8×C]ÓC]Ð'^Ð_ˆÜ×JÒJÈ3Ï=É=ÐckÑlˆ	à×"Ñ"Ø%Ø/°#·-±-Ñ?Ø—k‘kØŸ?™?Ø—}‘}Ø×2Ñ2ÜœuŸz™z×@Ñ@Ä%Ç*Á*×BgÑBgÑgÓhØ$-ñ

ˆð ×Ñ¤5§:¡:×#EÑ#EÓEÜ+.¨s×/CÑ/CÓ+DˆCÐ'Ñ(à×#Ñ#Ó%ˆà—.‘. # Ó-ˆÜˆw‹<˜1ÓÜ!Ð"FÓGÐGà ™
Ÿ™ˆŒäÐ(Ô)Ø�‰×Ñ˜3×+Ñ+ÜŸ9š9Ð%KÓLØŸ=™=Ü '× =Ñ =Ü)0×)EÑ)Eð	 	ñ 	Gô 	Ð#Ô$Ø�‰×Ñ˜3Ÿ;™;ÜŸ9š9Ð%KÓLØŸ=™=Ü '× =Ñ =Ü)0×)EÑ)Eð	 	ò 	Gr9   c                 ó|  • [        S5        U R                  R                  n[        U R                  [        5       40 SU_SU R                  _S[        _SU R                  _SU R                  _SU R                  _SU R                  _S	U R                  _S
U R                  _SU R                  _SU R                  _SU R                   _SU R"                  _SS_SU R$                  _SU R                  _SU R&                  _SU R(                  _SU R*                  _SU R,                  _SU R.                  _SU R0                  _SS_6n[        SUR2                  -  5        UR4                  U l        UR                  U l        UR8                  U l        UR:                  U l        U R<                  U R:                  l        g)úProvision the local SAM.zCalling bare provisionÚsmbconfr^   Ú
samdb_fillr«   ÚrootdnÚdomaindnr`  ÚconfigdnÚserverdnrÁ   ÚhostnameÚ	domainsidrÂ   Ú
serverroleú"active directory domain controllerÚsitenamerG   Úntdsguidr_   r¨   r`   ra   rb   Ú
batch_modeTzProvision OK for domain DN %sN)rª   rG   Ú
configfiler   r\   r   r^   r   r«   rz   rx   r|   r~   r˜   r„   r–   r�   r‘   r]   r«  r_   r¨   r`   ra   rb   r	  rm   Úlocal_samdbÚpathsÚnamesr‚   )r¿   r  Úpresults      r7   Újoin_provisionÚDCJoinContext.join_provisionV  s¹  € ô 	Ð&Ô'à—&‘&×#Ñ#ˆä˜CŸJ™J¬Ó(8ò -Á'ð -Ø&)§m¢mð-Ý@Hð-ØPS×PYÒPYð-à#&§;¢;ð-à9<¿ºð-ð &)§]¢]ð-ð >A¿]º]ð-ð &)§]¢]ð	-ð <?¿?º?ð	-ð
 &)§Z¢Zð-ð
 <?¿:º:ð-ð ),¯ªð-ñ Cgð-ð &)§X¢Xð-ð 36·&²&ð-ð DGÇ=Â=ð-ð '*§m¢mð-ð BEÇÂð-ð /2×.CÒ.Cð-ð +.×*;Ò*;ð-ð 03×/EÒ/Eð-ñ (,ð-ˆô 	Ð-°×0@Ñ0@Ñ@ÔAØ!Ÿ-™-ˆŒØ!Ÿ*™*ˆŒØ!Ÿ-™-ˆŒ	Ø!Ÿ-™-ˆŒ	ð "Ÿm™mˆ�	‰	Õr9   c                 ó|  • [        S5        [        U R                  R                  S/[	        5       U R                  R
                  SS9U l        U R                  R                  [        U R                  5      5        U R                  U l        U R                  R                  S5        U R                  R                  U R                  [        R                  S/SS/S	9nS
US   ;  a1  [!        SU R                  < SU R                  R                  < 35      e [        ["        R$                  " [        R&                  " U R                  US   S   S   R)                  S5      5      R+                  S5      5      5      U R,                  l        U R                  R                  SU R,                  R.                  -  5        U R                  R                  S5        [3        U R4                  R6                  [	        5       U R
                  S9n[9        U R                  UU R                  U R,                  U R4                  U R:                  [<        U R>                  SU R
                  U R,                  R@                  U R,                  RB                  U RD                  U RF                  S9  U R:                  [H        RJ                  RL                  :¼  aë  U R:                  nSnU R
                  RO                  S5      c)  U R
                  RQ                  SS5        [        S5        SnU R                  RS                  5          SSK*J+n  U" U R                  SS9nURY                  U[H        RJ                  RZ                  SS9  U R                  R]                  5         U(       a  U R
                  RQ                  SS5        [        S U R,                  Rb                  -  5        g! [0         a    [!        SUS   S   S   -  5      ef = f! [^         a-  nU R                  Ra                  5         [!        SU-  5      eSnAff = f)!r  zReconnecting to local samdbz#transaction_index_cache_size:200000F)rJ   r›  rK   rG   rb  zFinding domain GUID from ncNameÚncNamezextended_dn:1:1zreveal_internals:0)rW   rN   rO   r©  rñ  r   z*Can't find naming context on partition DN z in rj  r‡   z3Can't find GUID in naming master on partition DN %szGot domain GUID %szCalling own domain provision©rK   rG   r  )	Údom_for_fun_levelr  rÂ   r  rG   ÚhostipÚhostip6r¨   rº   zdsdb:schema update allowedNÚyesz;Temporarily overriding 'dsdb:schema update allowed' settingT)ÚDomainUpdate)Úfix)Úupdate_revisionzDomainUpdate() failed: %sÚnozProvision OK for domain %s)2rª   r   r  rJ   r   rG   rm   Úset_invocation_idrv   rŠ   r\   ro   rq   r»   rr   rs   r/   r   r‡   rK  rÚ  Úget_extended_componentr  Ú
domainguidÚKeyErrorr   r  Úsecretsr   r�   r   r‘   r  r  r¨   rº   r’   r,   ÚDS_DOMAIN_FUNCTION_2012rä   ÚsetÚtransaction_startÚsamba.domain_updater!  Úcheck_updates_functional_levelrÉ  Útransaction_commitrÐ   Útransaction_cancelr•   )r¿   rÓ   Úsecrets_ldbÚadprep_levelÚupdates_allowed_overriddenr!  rÁ   rÃ   s           r7   Újoin_provision_own_domainÚ'DCJoinContext.join_provision_own_domains  sb  € ô 	Ð+Ô,Ü˜cŸo™o×1Ñ1àBð"Dä'5Ó'7Ø Ÿ_™_×/Ñ/Ø(-ñ/ˆŒ	ð 	�	‰	×#Ñ#¤C¨×(9Ñ(9Ó$:Ô;ØŸ)™)ˆŒà�
‰
�‰Ð9Ô:Ø�o‰o×$Ñ$¨#×*:Ñ*:Ä#Ç.Á.ÐYaÐXbØ/@ÐBVÐ.Wð %ð Yˆð ˜3˜q™6Ó!Ý!ÐZ]×ZjÔZjÐlo×luÑlu×lyÓlyÐ"zÓ{Ð{ð	oÜ#&¤t§y¢y´·²¸¿	¹	À3ÀqÁ6È(ÑCSÐTUÑCV×C]ÑC]Ð^dÓCeÓ1f×1}Ñ1}ð  Eó  2Fó  (Gó  $HˆC�I‰IÔ ð 	�
‰
�‰Ð,¨s¯y©y×/CÑ/CÑCÔDà�
‰
�‰Ð6Ô7ä˜#Ÿ)™)×+Ñ+¼.Ó:JÈsÏvÉvÑVˆä�s—‘¨Ø—z‘z 3§9¡9¨c¯i©iØ),×)=Ñ)=Ü"0Ø#&§=¡=Ð=aØŸ&™&¨¯©×)9Ñ)9À3Ç9Á9×CTÑCTØ#&§?¡?¸c¿m¹mò	Mð ×Ñ¤5§:¡:×#EÑ#EÓEØ×/Ñ/ˆLà).Ð&Ø�v‰v�z‰zÐ6Ó7Ñ?Ø—‘—
‘
Ð7¸Ô?ÜÐSÔTØ-1Ð*à�I‰I×'Ñ'Ô)ðGÝ<á% c§o¡o¸4Ñ@�Ø×5Ñ5°lÜ6;·j±j×6XÑ6XØFJð 6ñ Lð —	‘	×,Ñ,Ô.ö
 *Ø—‘—
‘
Ð7¸Ô>äÐ*¨S¯Y©Y×-@Ñ-@Ñ@ÕAøôW ó 	oÜ!Ð"WÐZ]Ð^_ÑZ`ÐaiÑZjÐklÑZmÑ"mÓnÐnð	oûôH ó GØ—	‘	×,Ñ,Ô.Ü%Ð&AÀAÑ&EÓFÐFûðGús&   ÄA4O Ì?AP Ï"PÐ
P;Ð(P6Ð6P;c                 ó–   • [         R                  " SU R                  < SU< S3U R                  XR                  U R
                  5      $ ©z2Creates a new DRS object for managing replicationsrí   rî   rï   )r   Údrs_Replicaterk   rG   r  rŠ   )r¿   Ú
repl_credsrý   s      r7   Úcreate_replicatorÚDCJoinContext.create_replicator»  s8   € ä×&Ó&Ø),¯¬³_ÐEØ—‘˜
§O¡O°S×5FÑ5FóHð 	Hr9   c           	      ó¦  • U R                   R                  S5        U R                  R                  5          [        R
                  " U R                  R                  5       5      nU R                  c0  [        S5        [        R
                  " [        R                  5      nOU R                  nU R                  (       aq  [        5       nUR                  U R                  5        UR!                  ["        5        UR%                  U R&                  5        UR)                  U R*                  5        OU R,                  nSnU R                  R/                  5       S:¼  a  US-  nU R1                  X45      nUR3                  U R4                  UUSU R                  U R6                  S9  UR3                  U R8                  UX R                  U R6                  S	9  U R:                  (       d   [        S
5         UR3                  U R<                  UX R                  U R>                  [        R@                  -  S	9  U R>                  [        R@                  -  (       d1   UR3                  U R<                  UX R                  U R>                  S	9  [        S5        U RL                  U RN                  4 HP  nXpRP                  ;   d  M  [        S[S        U5      -  5        UR3                  XqX R                  U R6                  S	9  MR     U R                  (       aW  UR3                  U RT                  UU[        RV                  SS9  UR3                  U RX                  UU[        RV                  SS9  O8U RZ                  b+   UR3                  U RZ                  UU[        R\                  S9  XPl3        Xl4        X l5        U R                   R                  S5        U R>                  [        R@                  -  (       d*  U R                  Rm                  [n        Rp                  S5        U R                  Rs                  5         U R                  Rm                  [n        Rp                  S5        U R                   R                  S5        U Rw                  5         g! [B         aH  nURD                  S   [F        RH                  :X  a!  U R                   RK                  S5         SnAGNŸe SnAff = f! [B         ad  nURD                  S   [F        RH                  :X  a=  U R>                  [        R@                  -  (       a  U R                   RK                  S5        e SnAff = f! [^        R`                   aQ  nURD                  u  pšU	[        Rb                  :X  a)  [        SU Rd                  -  5        [        S5         SnAGNe SnAff = f!   U R                  Ru                  5         e = f)zReplicate the SAM.zStarting replicationNzUsing DS_BIND_GUID_W2K3rU  rV  rW  T)ÚschemaÚrodcr²   )r>  r²   z;Replicating critical objects from the base DN of the domainr   zÃFirst pass of replication with DRSUAPI_DRS_CRITICAL_ONLY not possible due to a missing parent object.  This is typical of a Samba 4.5 or earlier server. We will replicate all the objects instead.z§Replication with DRSUAPI_DRS_CRITICAL_ONLY failed due to a missing parent object.  This may be a Samba 4.5 or earlier server and is not compatible with --critical-onlyz5Done with always replicated NC (base, config, schema)zReplicating %s)rö  r>  )rö  zdWARNING: Unable to replicate own RID Set, as server %s (the server we joined) is not the RID Master.zxNOTE: This is normal and expected, Samba will be able to create users after it contacts the RID Master at first startup.z1Committing SAM database - this may take some timer  zCommitted SAM database)<r\   ro   r  r,  r   r‡   rm   Úget_invocation_idr«  rª   r   ÚDRSUAPI_DS_BIND_GUID_W2K3r¶   r   rà   rG   râ   r   Úset_usernamer—   rÓ  r‘   rF   rX  r:  rý  r|   r²   r~   r¹   rx   Údomain_replica_flagsÚDRSUAPI_DRS_CRITICAL_ONLYr#   ru   r!   ÚWERR_DS_DRA_MISSING_PARENTÚwarningr£   r¤   re   rv   rš   ÚDRSUAPI_EXOP_REPL_SECRETrå   r¢   ÚDRSUAPI_EXOP_FSMO_RID_ALLOCr’   ÚDsExtendedErrorÚDRSUAPI_EXOP_ERR_FSMO_NOT_OWNERrk   rü  Úsource_dsa_invocation_idÚdestination_dsa_guidÚ
set_opaquer,   Ú0DSDB_FULL_JOIN_REPLICATION_COMPLETED_OPAQUE_NAMEr/  r0  Úrefresh_ldb_connection)r¿   rJ  rK  r9  rý   rü  rÃ   r£  Úe1rÄ   rÅ   s              r7   Újoin_replicateÚDCJoinContext.join_replicateÁ  sÒ  € ð 	�
‰
�‰Ð.Ô/ð
 	�‰×)Ñ)Ô+ðF	6Ü'+§y¢y°·±×1LÑ1LÓ1NÓ'OÐ$Ø�}‰}Ñ$ÜÐ/Ô0Ü'+§y¢y´×1RÑ1RÓ'SÑ$à'*§}¡}Ð$à�x�xÜ(›]�
Ø× Ñ  §¡Ô(Ø×-Ñ-Ô.?Ô@Ø×'Ñ'¨¯©Ô4Ø×'Ñ'¨¯©Õ6à ŸY™Y�
à$ˆOØ�v‰v×ÑÓ! QÓ&Ø 8Ñ+�à×(Ñ(¨ÓEˆDà�N‰N˜3Ÿ=™=Ð*BØ/¸À3Ç8Á8Ø),×):Ñ):ð ñ <ð �N‰N˜3Ÿ=™=Ð*BØ/·h±hØ),×):Ñ):ð ñ <ð —=—=ô ÐSÔTðØ—N‘N 3§;¡;Ð0HØ#7¿h¹hØ14×1IÑ1IÌG×LmÑLmÑ1mð #ñ oð0 ×/Ñ/´'×2SÑ2S×SðØŸ™ s§{¡{Ð4LØ';Ç(Á(Ø58×5MÑ5Mð 'ñ Oô ÐIÔJð
 ×)Ñ)¨3×+=Ñ+=Ó>�ØŸ™Õ$ÜÐ*¬c°"«gÑ6Ô7Ø—N‘N 2Ø#7¿h¹hØ14×1BÑ1Bð #ó Dñ ?ð �x�xØ—‘˜sŸ{™{Ð,DØ3Ü$+×$DÑ$DÈ4ð ñ Qð —‘˜s×0Ñ0Ð2JØ3Ü$+×$DÑ$DÈ4ð ò Qð ×#Ñ#Ñ/ð
Ø—N‘N 3×#5Ñ#5Ð7OØ#7Ü(/×(KÑ(Kð #ñ Mð ŒHØ+CÔ(Ø';Ô$à�J‰J�O‰OÐOÔPð ×+Ñ+¬g×.OÑ.O×OØ—‘×*Ñ*¬4×+`Ñ+`Ø+,ô.à�O‰O×.Ñ.Ô0Ø�O‰O×&Ñ&¤t×'\Ñ'\Ø'(ô*à�J‰J�O‰OÐ4Ô5ð 	×"Ñ"Õ$øôC #ó 
à—v‘v˜a‘y¤F×$EÑ$EÓEØŸ
™
×*Ñ*ð ,X÷ Yò Yð ûð
ûô4 'ó àŸ6™6 !™9¬×(IÑ(IÓIØ×3Ñ3´g×6WÑ6W×WØŸJ™J×.Ñ.ð 0\ô ]ð ûðûôF ×,Ñ,ó Ø#%§7¡7‘L�TØœw×FÑFÓFÜð  Eð  HK÷  HRñ  HRñ  Rô  SÜð  Y÷  Zò  Zàûðûð	Ø�O‰O×.Ñ.Ô0Øúsš   ·F9V3 Ç1AR È2"V3 É0S Ê3V3 Ê<B5V3 Í2*U Î-V3 Ò
SÒ<SÓV3 ÓSÓSÓV3 Ó
UÓ$AUÕUÕV3 ÕV0ÕAV+Ö$V3 Ö*V+Ö+V0Ö0V3 Ö3Wc                 ó´  •  U R                   R                  [        R                  / S9  g ! [        R                   a˜  nUR
                  u  p#U[        R                  :X  af  SU;   d  SU;   aZ  U R                  R                  S5        [        SU R                  -  [        5       U R                  U R                  S9U l          S nAg [        U5      eS nAff = f)NrM   Ú!NT_STATUS_CONNECTION_DISCONNECTEDÚNT_STATUS_CONNECTION_RESETz)LDB connection disconnected. ReconnectingrH   rI   )rm   rq   rr   rs   rt   ru   ÚERR_OPERATIONS_ERRORr\   rE  r   rk   r   rF   rG   r/   )r¿   rÃ   rÄ   rÅ   s       r7   rN  Ú$DCJoinContext.refresh_ldb_connectionV  s®   € ð	,à�I‰I×Ñ¤3§>¡>¸ÐÒ<øÜ�|‰|ó 	,ØŸ6™6‰LˆTð œ×0Ñ0Ó0Ø4¸Ó<Ø-°Ó5Ø—
‘
×"Ñ"Ð#NÔOÜ! k°C·J±JÑ&>Ü/=Ó/?Ø.1¯i©i¸C¿F¹FñD�—	‘	ô & dÓ+Ð+ûð	,ús   ‚(+ «C¿BCÃCÃCc                 óÞ  • [         R                  " 5       n[         R                  " 5       Ul        [	        U5      UR                  l        [        R                  " S5      UR                  l        [        R                  " S5      UR                  l        U R                  Ul        [	        U R                  5      < SU R                  < 3Ul        [         R                   [         R"                  -  Ul        U R&                  (       d#  U=R$                  [         R(                  -  sl        U R                   c  U R+                  5         U R                   R-                  U R.                  SU5        g )Nrõ  zS-0-0z._msdcs.r  )r   ÚDsReplicaUpdateRefsRequest1rm  Únaming_contextrv   rÌ   r   r‡   rû  r   r   rü   r«  Údest_dsa_guidrž   Údest_dsa_dns_nameÚDRSUAPI_DRS_ADD_REFÚDRSUAPI_DRS_DEL_REFr›  r¶   rÿ  r]  ÚDsReplicaUpdateRefsrZ  )r¿   rÌ   rÔ   s      r7   Úsend_DsReplicaUpdateRefsÚ&DCJoinContext.send_DsReplicaUpdateRefsh  sî   € Ü×/Ò/Ó1ˆÜ"×<Ò<Ó>ˆÔÜ! "›gˆ×ÑÔÜ $§	¢	Ð*PÓ Qˆ×ÑÔÜ'×/Ò/°Ó8ˆ×ÑÔØŸ-™-ˆŒÜ03°C·M±MÖ0BÀCÇMÃMÐRˆÔÜ×/Ñ/´'×2MÑ2MÑMˆŒ	Ø�x�xØ�IŠIœ×5Ñ5Ñ5�Ià�;‰;ÑØ×ÑÔ!à�‰×'Ñ'¨×(:Ñ(:¸A¸qÕAr9   c                 óÐ
  • [         R                  n[         R                  [         R                  -  nU R                  nSU R
                  -  nU R                  n[        U R                  5      nU< SU< 3n[        R                  " U R                  U R                  5      nU R                  R                  S[        U5      XS4-  5        Sn	[         R                   " SU R                   < SU	< S3U R                  U R"                  5      n
Sn[$        R&                  " U R(                  5      n[*        R,                  " 5       nU R.                  Ul        [*        R2                  " S	[        U R4                  5      [*        R6                  4-  5      Ul         U
R;                  US
U R                   UUS[<        R>                  USS5
      u  pïU(       a¢  WRH                   H’  nURJ                   H  nURL                  [<        RN                  :X  d   URL                  [<        RP                  :X  d  MA  [         RR                  " 5       nUUl$         U
RU                  US
U R                   UUSU5        M�     M”     U Hº  nURW                  S5      S:w  a3  U R                  R                  SU< SU< SU< 35        [Y        U5      nO2U R                  R                  SU< SU< SU< 35        [[        U5      n[         RR                  " 5       nUUl$        U
RU                  US
U R                   UUUS5        M¼     [        U5      S
:”  Ga“  [\        R^                  " U R(                  U R`                  5      nU R(                  Rc                  U< SU< 3US9u  U l2        nURg                  U Rd                  US[*        Rh                  [*        Rj                  -  -  /S9  U R                  R                  SU< SU< SU< 35        [         RR                  " 5       n[m        U5      nUUl$        U
RU                  US
U R                   UUUS5        [\        R^                  " U R(                  U Rn                  5      nU R(                  Rc                  U< SU< 3US9u  U l8        nURg                  U Rp                  US[*        Rh                  [*        Rj                  -  -  /S9  U R                  R                  S5        g! [@         a.  nURB                  S
   [D        RF                  :X  a  Sn SnAGN[SnAff = f! [@         a.  nURB                  S
   [D        RF                  :X  a   SnAGMs  e SnAff = f)a>  Remotely Add a DNS record to the target DC.  We assume that if we
replicate DNS that the server holds the DNS roles and can accept
updates.

This avoids issues getting replication going after the DC
first starts as the rest of the domain does not have to
wait for samba_dnsupdate to run successfully.

Specifically, we add the records implied by the DsReplicaUpdateRefs
call above.

We do not just run samba_dnsupdate as we want to strictly
operate against the DC we just joined:
 - We do not want to query another DNS server
 - We do not want to obtain a Kerberos ticket
   (as the KDC we select may not be the DC we just joined,
   and so may not be in sync with the password we just set)
 - We do not wish to set the _ldap records until we have started
 - We do not wish to use NTLM (the --use-samba-tool mode forces
   NTLM)

z	_msdcs.%srS   z&Adding %d remote DNS records for %s.%srì   rí   rî   rï   Tz%s-%dr   NFÚ:éÿÿÿÿzAdding DNS AAAA record z for IPv6 IP: zAdding DNS A record z for IPv4 IP: )Údns_partitionzsd_flags:1:%dr¨  zAdding DNS CNAME record z for z_All other DNS records (like _ldap SRV records) will be created samba_dnsupdate on first startup)9r   ÚDNS_CLIENT_VERSION_LONGHORNÚDNS_RPC_VIEW_AUTHORITY_DATAÚDNS_RPC_VIEW_NO_CHILDRENr•   rž   r–   rv   r«  r’   Úinterface_ipsrG   r¾   r\   ro   r©   rk   rF   r%   ÚSDUtilsrm   r   r   rÕ  Ú	owner_sidr   r�   ÚDOMAIN_RID_DCSÚ	group_sidÚDnssrvEnumRecords2r   ÚDNS_TYPE_ALLr#   ru   r!   Ú"WERR_DNS_ERROR_NAME_DOES_NOT_EXISTrP  ÚrecordsÚwTypeÚ
DNS_TYPE_AÚDNS_TYPE_AAAAÚDNS_RPC_RECORD_BUFÚDnssrvUpdateRecord2Úfindr'   r&   rr   rK  r£   Ú
dns_lookupr¼   Úmodify_sd_on_dnÚSECINFO_OWNERÚSECINFO_GROUPr(   r¤   r½   )r¿   Úclient_versionÚselect_flagsrá  Ú
msdcs_zoner  Úmsdcs_cnameÚcname_targetÚIPsrý   Údns_connÚ
name_foundÚ	sd_helperÚchange_owner_sdÚbuflenrÓ   rÃ   rP  ÚrecordÚdel_rec_bufÚIPÚadd_rec_bufÚdomaindns_zone_dnÚldap_recordÚforestdns_zone_dns                            r7   Újoin_add_dns_recordsÚ"DCJoinContext.join_add_dns_recordsy  s®  € ô0 #×>Ñ>ˆÜ ×<Ñ<Ü×.Ñ.ñ/ˆð �}‰}ˆØ  3§=¡=Ñ0ˆ
Ø�z‰zˆÜ˜#Ÿ-™-Ó(ˆÛ"&ªÐ-ˆÜ×!Ò! #§&¡&¨#×*;Ñ*;Ó<ˆà�
‰
�‰Ð@Ü˜S› 4Ð.ñ/ô 	0ð !ˆÜ×&Ó&ÀÇ
Ä
ËOÐ'\Ø'*§v¡v¨s¯y©yó:ˆð ˆ
ä×$Ò$ S§Y¡YÓ/ˆ	ä"×-Ò-Ó/ˆØ$'×$:Ñ$:ˆÔ!Ü$,×$4Ò$4°WÜ69¸#¿*¹*³oÜ6>×6MÑ6Mð6Oñ6Oó %PˆÔ!ð
	#à×-Ñ-¨nØ./Ø.1¯j©jØ.2Ø.2Ø.2Ü.2×.?Ñ.?Ø.:Ø.2Ø.2ó	4ñ ˆVö Ø—w”w�Ø!Ÿkœk�FØ—|‘|¤t§¡Ó6Ø—|‘|¤t×'9Ñ'9Õ9ä&/×&BÒ&BÓ&D˜Ø*0˜œð&Ø$×8Ñ8¸Ø9:Ø9<¿¹Ø9=Ø9=Ø9=Ø9DöFó *ñ ó* ˆBØ�w‰w�s‹|˜rÓ!Ø—
‘
—’Û#'«ªrð!3ô 4ä  “n‘à—
‘
—’Û#'«ªrð!3ô 4ä˜b“k�ô $×6Ò6Ó8ˆKØ!ˆKŒOØ×(Ñ(¨Ø)*Ø),¯©Ø)-Ø)-Ø)4Ø)-ö/ñ ô* �‹H�qŒLÜ #§¢ s§y¡y°#×2DÑ2DÓ EÐà—)‘)×&Ñ&³$ºÐ'=Ø5Fð 'ð Hñ (ˆSŒ\˜;ð
 ×%Ñ% c§l¡l°OØ0?Ü3;×3IÑ3IÜ5=×5KÑ5Kñ4Lñ1Mð 0Nð &ñ Oð �J‰J�OŠOÛ*«JºðFô Gô $×6Ò6Ó8ˆKÜ˜lÓ+ˆCØ!ˆKŒOØ×(Ñ(¨Ø)*Ø),¯©Ø)3Ø)4Ø)4Ø)-ô/ô !$§¢ s§y¡y°#×2DÑ2DÓ EÐà—)‘)×&Ñ&³+ºzÐ'JØ5Fð 'ð Hñ ,ˆSÔ˜{ð
 ×%Ñ% c×&6Ñ&6¸Ø0?Ü3;×3IÑ3IÜ5=×5KÑ5Kñ4Lñ1Mð 0Nð &ñ Oð
 	�
‰
�‰ð Kõ 	Løôk ó 	#Ø�v‰v�a‰yœF×EÑEÓEØ"�
ÿùð	#ûô(  +ó &Ø Ÿv™v a™y¬F×,UÑ,UÓUÞ $à %ûð	&ús6   Æ4S2 É
!T-Ó2
T*Ó<#T%Ô%T*Ô-
U%Ô7!U ÕU Õ U%c           
      ó<  • U R                   U R                  4 H€  nXR                  ;   d  M  U R                  R	                  S[        U5      -  5        U R                  R                  XR                  U R                  U R                  U R                  SS9  M‚     g )Nz!Replicating new DNS records in %sF)r>  r²   Ú	full_sync)r£   r¤   re   r\   ro   rv   rü  rý  rJ  r«  r¶   r²   )r¿   r£  s     r7   Újoin_replicate_new_dns_recordsÚ,DCJoinContext.join_replicate_new_dns_records  sy   € Ø×%Ñ% s×'9Ñ'9Ó:ˆBØ—[‘[Õ Ø—
‘
—‘Ð CÄsÈ2ÃwÑ OÔPØ—‘×"Ñ" 2×'CÑ'CØ#&§=¡=°s·x±xØ14×1BÑ1BØ-2ð #ó 4ò ;r9   c                 ó&  • U R                   R                  S5        U R                   H  nU R                  U5        M     U R                  (       Ga%  [        S5        U R                  R                  [        U R                  5      5        U R                  R                  SU R                  5        [        R                  " 5       n[        R                  " U R                  SU R                  -  5      Ul        [        R"                  " [%        U R                  5      [        R&                  S5      US'   U R                  R)                  U5        U R                  R+                  UR                   SS5        U R                   R                  S5        [        R                  " 5       n[        R                  " U R                  S5      Ul        [        R"                  " S	[        R&                  S
5      US
'   U R,                  n[        R"                  " S[        U5      -  [        R&                  S5      US'   U R                  R)                  U5        U R.                  (       a  g[1        U R2                  R4                  [7        5       U R8                  S9nU R                   R                  S5        [;        X@R<                  U R>                  U R@                  U RB                  U RD                  U RF                  U RH                  U RJ                  S9	  U RL                  RO                  S5      (       ab  [Q        U R                  UU RR                  U R2                  U R                   U RL                  U RT                  U R                  U RV                  S9	  gg)z=Finalise the join, mark us synchronised and setup secrets db.z=Sending DsReplicaUpdateRefs for all the replicated partitionszSetting RODC invocationIdÚdomainFunctionalityz%srž  r   ú(Setting isSynchronized and dsServiceNameú@ROOTDSEr>  ÚisSynchronizedú	<GUID=%s>ÚdsServiceNameNr  zSetting up secrets database)rÁ   r«   r•   Únetbiosnamer  rÂ   Úsecure_channel_typerÔ  r¾  )r¨   rØ  Úos_levelrÔ  ),r\   ro   re   r_  r¶   rª   r  r%  rv   rŠ   rL  r�   rr   rJ  rK  r™   rÌ   rL  r	   rM  rN  Ú"set_attribute_replmetadata_versionr«  r¹   r   r  r)  r   rG   r   r„   r«   r•   r–   r�   r‘   r›  rÔ  r¨   rÖ  r   r  rØ  rÝ  )r¿   r£  rQ  rû  r1  s        r7   Újoin_finaliseÚDCJoinContext.join_finalise  s‡  € ð 	�
‰
�‰ÐWÔXØ—+”+ˆBØ×(Ñ(¨Ö,ñ ð �8�8ˆ8ÜÐ-Ô.Ø�O‰O×-Ñ-¬c°#×2CÑ2CÓ.DÔEØ�O‰O×&Ñ&Ð'<Ø'*×';Ñ';ô=ä—’“ˆAÜ—6’6˜#Ÿ/™/¨4°#·+±+Ñ+=Ó>ˆAŒDÜ #× 2Ò 2´8¸C×<MÑ<MÓ3NÜ36×3GÑ3GØ3Aó!CˆAˆnÑð �O‰O×"Ñ" 1Ô%ð �O‰O×>Ñ>¸q¿t¹tØ?MØ?@ôBð 	�
‰
�‰ÐBÔCÜ�KŠK‹MˆÜ�vŠv�c—o‘o zÓ2ˆŒÜ!×0Ò0°¼×9MÑ9MÐO_Ó`ˆÐ
Ñà�}‰}ˆÜ ×/Ò/°¼cÀ$»iÑ0GÜ03×0DÑ0DÀoóWˆˆ/Ñà�‰×Ñ˜qÔ!à�=�=Øä˜#Ÿ)™)×+Ñ+¼.Ó:JÈsÏvÉvÑVˆà�
‰
�‰Ð5Ô6Ü˜K·±Ø"%§)¡)Ø&)§m¡mØ(+¯
©
Ø&)§j¡jØ(+¯©Ø03×0GÑ0GØ/2×/EÑ/Eò	Gð �?‰?×%Ñ% h×/Ñ/Ü˜CŸO™O¨[ØŸI™I s§y¡y°#·*±*Ø(+¯©Ø$'§K¡K¸#×:NÑ:NØ/2×/IÑ/Ió	Kð 0r9   c                 ór
  • [        SU R                  -  5        Sn[        R                  " SU R                  < SU< S3U R                  U R
                  5      n[        R                  " 5       n[        R                  " 5       Ul        UR                  SR                  S5      U[        R                  5      n[        R                  " 5       nU R                  UR                  l        U R                  UR"                  l        U R$                  Ul        [        R(                  [        R*                  -  Ul        [        R.                  Ul        [        R2                  Ul         [        R6                  " 5       nU R                  Ul        UR9                  XF[        R:                  5      n[        SU R                  < SUR<                  R&                  < S	35        UR?                  XGR<                  R&                  5        [C        U RD                  RG                  S
5      5      n[H        RJ                  " 5       n	[M        U5      U	l'        X‰l(        [H        RR                  " 5       n
[T        RV                  " [Y        [Z        RZ                  " 5       5      5      U
l.        [        R^                  U
l0        Xšl1        [H        Rd                  " 5       nSUl3        U
/Ul4        [H        Rj                  " 5       nSUl3        X¼l6        [H        Rn                  " 5       nS/S-  n[q        S5       H  n[r        Rt                  " SS5      Xï'   M     Xíl;        XÍl<        XÍl=        [}        U5      n[        UR€                  U5      n[        R‚                  " 5       n[M        U5      Ul'        [C        U5      UlB        [        R†                  " 5       nUUlD        UR‹                  UUU[        RŒ                  5      nSU RŽ                  < SU R�                  < 3S[“        UR0                  5      [“        UR4                  5      [“        UR,                  5      U R”                  U RŽ                  [}        U5      [}        U5      [}        U R–                  5      S.
nU R˜                  R›                  U5        SU R”                  < SU R�                  < 3S[“        [T        Rœ                  Rž                  5      U RD                  RG                  S
5      SU R”                  -  S.nU R˜                  R›                  U5        g! [@         a     GN2f = f)zprovision the local SAM.z"Setup domain trusts with server %srÛ   z	ncacn_np:rî   rï   zutf-8zRemoving old trust record for ú (SID Ú)rÁ  r  rl  i   r   rÀ  zcn=z,cn=system,ÚtrustedDomain)
rÌ   r?  Ú	trustTypeÚtrustAttributesÚtrustDirectionÚflatnameÚtrustPartnerÚtrustAuthIncomingÚtrustAuthOutgoingÚsecurityIdentifierz$,cn=users,r=  rQ   )rÌ   r?  r  rÇ  rD  N)Prª   rk   r   rð   rG   rF   rñ   rò   ró   rô   rÚ  r   rõ   ÚTrustDomainInfoInfoExr•   r„   r÷   rÀ   r�   rü   ÚLSA_TRUST_DIRECTION_INBOUNDÚLSA_TRUST_DIRECTION_OUTBOUNDÚtrust_directionÚLSA_TRUST_TYPE_UPLEVELÚ
trust_typeÚ!LSA_TRUST_ATTRIBUTE_WITHIN_FORESTÚtrust_attributesrö   rø   rù   rû   rú   r�  ro  Útrustdom_passrp  r   ÚAuthInfoClearr©   ÚsizeÚpasswordÚAuthenticationInformationr’   Úunix2nttimer  ÚtimeÚLastUpdateTimeÚTRUST_AUTH_TYPE_CLEARÚAuthTypeÚAuthInfoÚAuthenticationInformationArrayÚcountÚarrayÚtrustAuthInOutBlobÚcurrentÚtrustDomainPasswordsrÏ  ÚrandomÚrandintÚ
confounderÚoutgoingÚincomingr	   r   Úsession_keyÚ	DATA_BUF2ÚdataÚTrustDomainInfoAuthInfoInternalÚ	auth_blobÚCreateTrustedDomainEx2ÚSEC_STD_DELETErž   rx   rv   r†   r‚   r  rH  r,   ÚUF_INTERDOMAIN_TRUST_ACCOUNT)r¿   rý   rþ   rÿ   r   ro   ÚoldnameÚoldinfoÚpassword_blobÚclear_valueÚ clear_authentication_informationÚ authentication_information_arrayrÈ  Ú	trustpassrÇ  rã  Útrustpass_blobÚencrypted_trustpassrÎ  Ú	auth_infoÚtrustdom_handlerP  s                         r7   Újoin_setup_trustsÚDCJoinContext.join_setup_trustsb  sð  € ô 	Ð2°S·Z±ZÑ?Ô@ØˆÜ—*“*°#·*´*»oÐNØ ŸV™V S§Y¡Yó0ˆô ×(Ò(Ó*ˆ
Ü Ÿ[š[›]ˆ
Ôà×(Ñ(¨¯©°7Ó);Ø)3´X×5VÑ5VóXˆ
ô ×(Ò(Ó*ˆØ"%§-¡-ˆ×ÑÔØ#&§?¡?ˆ×ÑÔ Ø—:‘:ˆŒÜ"×>Ñ>Ä×AaÑAaÑaˆÔÜ×4Ñ4ˆŒÜ #× EÑ EˆÔð	Ü—j’j“lˆGØ Ÿ]™]ˆGŒNØ×:Ñ:¸:Ü;>×;`Ñ;`óbˆGåÀÇÄÐPW×P_ÑP_×PcÔPcÐdÔeØ×'Ñ'¨
·O±O×4GÑ4GÔHô ˜S×.Ñ.×5Ñ5°kÓBÓCˆä×,Ò,Ó.ˆÜ˜}Ó-ˆÔØ,Ôä+3×+MÒ+MÓ+OÐ(Ü:?×:KÒ:KÌCÔPT×PYÒPYÓP[ÓL\Ó:]Ð(Ô7Ü47×4MÑ4MÐ(Ô1Ø4?Ô1ä+3×+RÒ+RÓ+TÐ(Ø12Ð(Ô.Ø2RÐ1SÐ(Ô.ä×.Ò.Ó0ˆØˆŒØ;Ôä×1Ò1Ó3ˆ	Ø�S˜3‘Yˆ
ä�s–ˆAÜ"ŸNšN¨1¨cÓ2ˆJ‹Mñ ð  *Ôà%ÔØ%Ôä! )Ó,ˆä-¨g×.AÑ.AÀ>ÓRÐä—M’M“Oˆ	ÜÐ0Ó1ˆ	ŒÜÐ1Ó2ˆ	Œä×7Ò7Ó9ˆ	Ø'ˆ	Ôà!×8Ñ8¸Ø9=Ø9BÜ9A×9PÑ9PóR‰ð +.¯-¬-¸¿»ÐEØ*Ü˜TŸ_™_Ó-Ü" 4×#8Ñ#8Ó9Ü! $×"6Ñ"6Ó7Ø×.Ñ.ØŸM™MÜ!)¨(Ó!3Ü!)¨(Ó!3Ü"*¨3¯=©=Ó"9ñ
ˆð 	�‰×Ñ˜CÕ ð +.×*@Ô*@À#Ç+Ã+ÐNØ!Ü"%¤e§j¡j×&MÑ&MÓ"NØ!$×!2Ñ!2×!9Ñ!9¸+Ó!FØ# c×&<Ñ&<Ñ<ñ
ˆð 	�‰×Ñ˜CÕ øôM ó 	Úð	ús   Å&BT( Ô(
T6Ô5T6c                 ó˜  • U R                   U R                  /U l        U R                  U R                   U R                  /U l        U R
                  (       a1  U R                  S:w  a!  U =R                  U R                  /-  sl        g U R
                  (       d²  U =R                  U R                  /-  sl        U R                  S:w  a�  U =R                  U R                  /-  sl        U =R                  U R                  /-  sl        U =R                  U R                  /-  sl        U =R                  U R                  /-  sl        g g g )Nr[   )	r~   r|   re   rx   rf   r¹   r¨   r£   r¤   rf  s    r7   Úbuild_nc_listsÚDCJoinContext.build_nc_listsÇ  sò   € ð —}‘} c§m¡mÐ4ˆŒØŸK™K¨¯©¸¿¹ÐFˆÔà�=�=˜SŸ_™_°Ó6Ø×Ò ×!3Ñ!3Ð 4Ñ4Öà——Ø�KŠK˜CŸK™K˜=Ñ(�Kà�‰ &Ó(Ø—’ × 2Ñ 2Ð3Ñ3•Ø—’ × 2Ñ 2Ð3Ñ3•Ø× Ò  S×%7Ñ%7Ð$8Ñ8Õ Ø× Ò  S×%7Ñ%7Ð$8Ñ8Ö ð	 )ð r9   c                 ór  • U R                  5         U R                  (       a  U R                  5         OU R                  5          U R	                  5         U R                  5         U R                  5         U R                  (       a0  U R                  5         U R                  5         U R                  5         U R                  S:w  a   U R                  5         U R                  5         U R                  5         g !    [        S5        O! [          a     Of = fU R#                  5         U R                  5         e = f)Nr[   zJoin failed - cleaning up)rà  rc   r  r  rê  r  rP  r¹   r  r4  rÝ  r¨   r�  r‘  rž  rª   ÚIOErrorrN  rf  s    r7   Údo_joinÚDCJoinContext.do_joinÜ  s÷   € Ø×ÑÔà××Ø× Ñ Õ"à× Ñ Ô"ð	Ø× Ñ Ô"Ø×ÑÔ Ø×ÑÔ Ø�}�}Ø×%Ñ%Ô'Ø×-Ñ-Ô/Ø×%Ñ%Ô'à�‰ &Ó(Ø×(Ñ(Ô*Ø×2Ñ2Ô4à×ÑÕøð
	ðÜÐ1Õ2øÜó Ùðúð
 ×&Ñ&Ô(Ø× Ñ Ô"Øús1   ÁB1C6 Ã6D6Ã9DÄD6Ä
DÄD6ÄDÄ$D6r:   )NNNNNNNNNFNFFNNN)F©N)(r;   r<   r=   r>   Ú__doc__r3   rÑ   ré   r  r  rp   rn   r�   r�   rƒ   r…   r0  r5  rŸ   rR  r]  rg  r~  r¤  r¬  rê  r  r  r4  r:  rP  rN  r_  r�  r‘  rž  rÝ  rà  rä  r?   r:   r9   r7   rC   rC   <   sâ   † ÙàJNØ;?Ø@DØ;@Ø#Ø$(Ø$(ôU"ônô3Sôj-.ò^(ò&*òò6ò-ò-ò-òòNò	ò;ò:`ò1òAòF.ò`hôU2òn)GòV,ò:FBòPHòS%òj,ò$Bò"WLòr4òEKòNc!òJ9õ* r9   rC   c                 ó�  • [        XX#XEXgXšUXÍUUS9nUR                  SUR                  5        U R                  SUR                  -  5        UR                  SUR                  5        U R                  SUR                  -  5        SUR
                  < SUR                  < 3Ul        SUR                  < S	[        R                  < S
3S[        R                  -  S[        R                  -  S[        R                  -  S[        R                  -  /Ul        SUR                  < S	[        R                   < S
3Ul        UR%                  5       nSU-  nUUl        [(        R*                  R,                  [(        R*                  R.                  -  [(        R*                  R0                  -  Ul        UR4                  R7                  SUR
                  -  SUR8                  -  /5        SUR:                  -  Ul        [>        R@                  Ul!        SUl"        U=RF                  [H        RJ                  [H        RL                  -  -  sl#        URF                  Ul'        U(       a#  U=RN                  [H        RP                  -  sl'        URS                  5         U R                  SUR                  < SUR                  < S35        g)zJoin as a RODC.©ra   rb   Ú	workgroupúworkgroup is %sr«   úrealm is %sz
CN=krbtgt_rE  z<SID=rî  Ú>z<SID=%s>zRestrictedKrbHost/%szCN=RODC Connection (FRS),%sTúJoined domain r¡  z) as an RODCN)*rC   r+  r„   ro   r«   r–   rx   r·   r�   r   ÚDOMAIN_RID_RODC_DENYÚSID_BUILTIN_ADMINISTRATORSÚSID_BUILTIN_SERVER_OPERATORSÚSID_BUILTIN_BACKUP_OPERATORSÚSID_BUILTIN_ACCOUNT_OPERATORSr³   ÚDOMAIN_RID_RODC_ALLOWr´   r5  r¸   r’   r,   r	  Ú)UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATIONÚUF_PARTIAL_SECRETS_ACCOUNTr  r¡   Úextendrœ   r™   rµ   r   ÚSEC_CHAN_RODCr›  r¶   r²   r   Ú%DRSUAPI_DRS_SPECIAL_SECRET_PROCESSINGÚ$DRSUAPI_DRS_GET_ALL_GROUP_MEMBERSHIPrB  rC  rä  )r\   rk   rF   rG   r]   rÀ   r^   rÁ   Údomain_critical_onlyrÂ   r_   r¨   rc   r`   ra   rb   r¿   ÚmysidÚadmin_dns                      r7   Ú	join_RODCrþ  ÿ  s  € ô ˜¨°4Ø!¨;À;Ø(Ø&3Ø+=ñ	?€Cð ‡F�Fˆ;˜Ÿ™Ô(Ø
‡K�KÐ! C§O¡OÑ3Ô4à‡F�Fˆ7�C—I‘IÔØ
‡K�K� §	¡	Ñ)Õ*à25·*´*¸c¿k»kÐJ€C…Mð Ÿœ¤X×%BÔ%BÐCØ”X×8Ñ8Ñ8Ø”X×:Ñ:Ñ:Ø”X×:Ñ:Ñ:Ø”X×;Ñ;Ñ;ð=€CÕð '*§j¤j´(×2PÔ2PÐQ€C„Nà�M‰M‹O€EØ˜EÑ!€HØ€C„Mä#Ÿj™j×EÑEÜ#Ÿj™j×RÑRñSä#Ÿj™j×CÑCñD€CÔð ‡H�H‡O�OÐ+¨c¯j©jÑ8Ø+¨c¯o©oÑ=ð?ô @ð 6¸¿¹ÑC€CÔÜ"×0Ñ0€CÔØ€C„HØ×Òœ'×GÑGÜ!×FÑFñGñ HÕà"×0Ñ0€CÔÞØ× Ò ¤G×$EÑ$EÑEÕ à‡K�K„Mà
‡K‚K¸#¿/¼/È3Ï:Ì:ÐVÕWr9   c                 óV  • [        XX#XEXgXšUXÍUUS9nUR                  SUR                  5        U R                  SUR                  -  5        UR                  SUR                  5        U R                  SUR                  -  5        [
        R                  R                  [
        R                  R                  -  Ul	        UR                  R                  SUR                  -  5        [        R                  Ul        U=R                   ["        R$                  ["        R&                  -  -  sl        UR                   Ul        U(       a#  U=R(                  ["        R*                  -  sl        UR-                  5         U R                  SUR                  < SUR.                  < S	35        g
)zJoin as a DC.ré  rê  rë  r«   rì  z1E3514235-4B06-11D1-AB04-00C04FC2DCD2/$NTDSGUID/%srî  r¡  z	) as a DCN)rC   r+  r„   ro   r«   r’   r,   r
  ÚUF_TRUSTED_FOR_DELEGATIONr  r¡   rr  r•   r   ÚSEC_CHAN_BDCr›  r²   r   rÿ  Ú!DRSUAPI_DRS_FULL_SYNC_IN_PROGRESSrB  rC  rä  r�   )r\   rk   rF   rG   r]   rÀ   r^   rÁ   rû  rÂ   r_   r¨   rc   r`   ra   rb   r¿   s                    r7   Újoin_DCr  7  s1  € ô ˜¨°4Ø!¨;À;Ø(Ø&3Ø+=ñ	?€Cð ‡F�Fˆ;˜Ÿ™Ô(Ø
‡K�KÐ! C§O¡OÑ3Ô4à‡F�Fˆ7�C—I‘IÔØ
‡K�K� §	¡	Ñ)Ô*ä"ŸZ™Z×?Ñ?Ä%Ç*Á*×BfÑBfÑf€CÔà‡H�H‡O�OÐGÈ#Ï-É-ÑWÔXÜ"×/Ñ/€CÔà×Òœ'×6Ñ6Ü!×CÑCñDñ EÕà"×0Ñ0€CÔÞØ× Ò ¤G×$EÑ$EÑEÕ à‡K�K„MØ
‡K‚K°s·´ÈÏ
Ì
ÐSÕTr9   c
                 óˆ  • [        XX#UXWUUU	S9
n
UR                  SU
R                  5        U R                  SU
R                  -  5        UR                  SU
R                  5        U R                  SU
R                  -  5        U
R                  5         U R                  SU
R                  < SU
R                  < S35        U
$ )	z%Creates a local clone of a remote DC.)r^   rÁ   r¨   Úinclude_secretsra   rb   rê  rë  r«   rì  zCloned domain r¡  r¢  )ÚDCCloneContextr+  r„   ro   r«   rä  r�   )r\   rk   rF   rG   r^   rÁ   r  r¨   ra   rb   r¿   s              r7   Ú
join_cloner  Y  s™   € ô
 ˜¨¸iØ &Ø)8Ø'4Ø,>ñ	@€Cð ‡F�Fˆ;˜Ÿ™Ô(Ø
‡K�KÐ! C§O¡OÑ3Ô4à‡F�Fˆ7�C—I‘IÔØ
‡K�K� §	¡	Ñ)Ô*à‡K�K„MØ
‡K‚K¨s¯¬ÀÇ
Ä
ÐKÔLØ€Jr9   c                   óD   ^ • \ rS rSrSr    SU 4S jjrS rS rSrU =r	$ )r  io  zClones a remote DC.c                 óÒ  >• [         TU ]  XX4XVUU	U
S9	  S U l        S U l        S U l        U R
                  R                  S5      S   U l        S U l        S U l	        U R                  R                  5       U l        U =R                  [        R                  [        R                   -  -  sl        U(       d#  U =R                  [        R"                  -  sl        U R                  U l        g )N)r^   rÁ   r¨   ra   rb   rS   r   )r2   r3   r˜   r™   rš   rk   Úsplitr–   r«  r¢   rm   Úget_ntds_GUIDÚremote_dc_ntds_guidr²   r   rÿ  r  rù  rB  )r¿   r\   rk   rF   rG   r^   rÁ   r¨   r  ra   rb   r6   s              €r7   r3   ÚDCCloneContext.__init__r  sÑ   ø€ ô 	‰Ñ˜¨Ø#,Ø%0Ø'4Ø,>ð	 	ñ 	@ð ˆŒØˆŒØˆŒØ—Z‘Z×%Ñ% cÓ*¨1Ñ-ˆŒ
ØˆŒØ!ˆÔð #&§)¡)×"9Ñ"9Ó";ˆÔà×Òœg×:Ñ:Ü%×GÑGñHñ 	IÕæØ×Ò¤×!NÑ!NÑNÕØ#&×#4Ñ#4ˆÕ r9   c                 óº  • U R                   R                  S5        [        R                  " 5       n[        R                  " U R
                  S5      Ul        [        R                  " S[        R                  S5      US'   U R                  n[        R                  " S[        U5      -  [        R                  S5      US'   U R
                  R                  U5        g )Nr•  r–  r>  r—  r˜  r™  )r\   ro   rr   rJ  rK  r  rÌ   rL  rM  r  rv   rN  )r¿   rQ  rû  s      r7   rž  ÚDCCloneContext.join_finalise�  s¦   € Ø�
‰
�‰ÐBÔCÜ�KŠK‹MˆÜ�vŠv�c—o‘o zÓ2ˆŒÜ!×0Ò0°¼×9MÑ9MØ1AóCˆÐ
Ñð ×&Ñ&ˆÜ ×/Ò/°¼cÀ$»iÑ0GÜ03×0DÑ0DØ0?óAˆˆ/Ñð 	�‰×Ñ˜qÕ!r9   c                 ó„   • U R                  5         U R                  5         U R                  5         U R                  5         g ræ  )rà  r  rP  rž  rf  s    r7   rä  ÚDCCloneContext.do_join›  s4   € Ø×ÑÔð 	×ÑÔØ×ÑÔØ×ÑÕr9   r:   )
NNNNNNNFNN)
r;   r<   r=   r>   rç  r3   rž  rä  r?   r@   rA   s   @r7   r  r  o  s&   ø† Ùà?CØ:>Ø6:Ø$(÷5ò6"÷ð r9   r  c                   óN   ^ • \ rS rSrSr   S	U 4S jjrS rS rS rS r	Sr
U =r$ )
ÚDCCloneAndRenameContexti§  z6Clones a remote DC, renaming the domain along the way.c                 óP   >• [         TU ]  XEXgUU	U
UUS9	  Xl        X l        X0l        g )N)r^   rÁ   r¨   r  ra   )r2   r3   Únew_base_dnÚnew_domain_nameÚ	new_realm)r¿   r  r  r  r\   rk   rF   rG   r^   rÁ   r¨   r  ra   r6   s                €r7   r3   Ú DCCloneAndRenameContext.__init__ª  s<   ø€ ô 	‰Ñ˜¨Ø#,Ø &Ø%0Ø)8Ø'4ð 	ñ 	6ð &ŒØ-ÔØ!�r9   c           	      óÆ   • SU R                   < SU< S3n[        R                  " X0R                  UU R                  U R
                  U R                  U R                  5      $ r7  )rk   r   Údrs_ReplicateRenamerrG   r  rŠ   rx   r  )r¿   r9  rý   Úbinding_strs       r7   r:  Ú)DCCloneAndRenameContext.create_replicator¸  sL   � ð 03¯z¬z»?ÐKˆÜ×-Ò-¨k¿6¹6À:Ø.1¯o©oØ.1×.?Ñ.?Ø.1¯k©k¸3¿?¹?óLð 	Lr9   c                 ó¾   • [         R                  " 5       u  p#UR                  SU5        [        R                  R                  US9n[        R                  " U5        U$ )z?Creates a non-global LoadParm based on the global LP's settingsF)Úfilename_for_non_global_lp)ÚtempfileÚmkstempÚdumpr’   ÚparamÚLoadParmÚosÚremove)r¿   Ú	global_lpÚfdÚtmp_fileÚlocal_lps        r7   Úcreate_non_global_lpÚ,DCCloneAndRenameContext.create_non_global_lpÄ  sJ   € ô  ×'Ò'Ó)‰ˆØ�‰�u˜hÔ'Ü—;‘;×'Ñ'À8Ð'ÐLˆÜ
�	Š	�(ÔØˆr9   c                 ód   • U R                   n[        R                  " SU-  U R                  U5      $ )z/Uses string substitution to replace the base DNrQ   )rx   ÚreÚsubr  )r¿   Údn_strÚold_base_dns      r7   Ú	rename_dnÚ!DCCloneAndRenameContext.rename_dnÓ  s'   € à—k‘kˆÜ�vŠv�e˜kÑ)¨3¯?©?¸FÓCÐCr9   c                 ó@  • [        S5        U R                  U R                  5      n[        U R                  [        5       U R                  [        U R                  UU R                  U R                  5      U R                  U R                  U R                  5      U R                  U R                  5      U R                  U R                  SU R                   U R"                  S9n[        SUR$                  -  5        UR&                  U l        UR*                  U l        g)z"Provision the local (renamed) SAM.z(Provisioning the new (renamed) domain...r  )r^   r  r«   rG   r  r	  r`  r
  rÁ   r  r  r¨   ra   z%Provision OK for renamed domain DN %sN)rª   r*  rG   r   r\   r   r^   r   r  r1  rz   r  r|   r~   r  r�   r¨   ra   r	  rm   r  r  )r¿   Únon_global_lpr  s      r7   r  Ú&DCCloneAndRenameContext.join_provisionÝ  sÐ   € ô 	Ð8Ô9ð ×0Ñ0°·±Ó8ˆô ˜CŸJ™J¬Ó(8Ø&)§m¡mÄØ"%§-¡-°MØ#&§=¡=°·±Ó#=ÈÏÉØ%(§]¡]°3·=±=Ó%AØ%(§]¡]°3·=±=Ó%AØ#&×#6Ñ#6À#Ç*Á*Ø'KØ(+¯©Ø*-×*;Ñ*;ñ	=ˆô 	Ð5¸×8HÑ8HÑHÔIØ!Ÿ-™-ˆŒØ—M‘Mˆ�	r9   r:   )	NNNNNNNTN)r;   r<   r=   r>   rç  r3   r:  r*  r1  r  r?   r@   rA   s   @r7   r  r  §  s/   ø† Ù@àFJØJNØGK÷"ò
LòòD÷"ð "r9   r  )NNNNNNNNFNFNFFNN)
NNNNNNFr[   NN)Lrç  Ú
samba.authr   Úsamba.samdbr   r’   r   r   r   r   rr   rˆ   Ú	samba.ndrr	   r
   Úsamba.dcerpcr   r   r   r   r   r   r   r   Úsamba.credentialsr   r   Úsamba.provisionr   r   r   r   r   r   Úsamba.provision.commonr   Úsamba.schemar   r   Ú	samba.netr   Úsamba.provision.sambadnsr   r    r!   Úbase64r"   r#   r$   r%   Úsamba.dnsserverr&   r'   r(   rÅ  rº  r-  r$  r  Úcollectionsr)   Úsamba.commonr*   Úsamba.netcmdr+   r,   r-   rÐ   r/   rz  rC   rþ  r  r  r  r  r:   r9   r7   Ú<module>rE     sü   ðñ& å %Ý ß 9Ó 9Û 
Û Û ß *ß U× UÓ Uß <÷D÷ Då -Ý Ý Ý Ý 4Ý #Ý Ý ß ,Ý ß <Ñ <Û Û Û 	Û 	Û Ý #Ý #Ý %ß (ô8�iô 8ô@�Fô @ðF. VZØ@EØ=AØ8=Ø Ø!%ô5Xðp TXØ>CØ;?Ø6;ØØ#ôUðD 9=Ø<AØ15Ø"&ôô,3�]ô 3ôpS"˜nõ S"r9   