ó
    cÛ–iyN  ã                   óä   • S SK JrJrJr  S SKJr  S SKJr  S SKJ	r	  S SKJ
r
  S SKJr  S SKrS SKrS SKJrJrJr  S SKr " S	 S
\5      rSS jrS rS rS rS r " S S\5      r " S S\5      rg)é    )ÚdrsuapiÚmiscÚdrsblobs)ÚNet)Ú
ndr_unpack)Údsdb)Úwerror)ÚWERRORErrorN)ÚDRSUAPI_ATTID_nameÚ(DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8Ú)DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V10c                   ó$   • \ rS rSrSrS rS rSrg)ÚdrsExceptioné"   zBase element for drs errorsc                 ó   • Xl         g ©N©Úvalue)Úselfr   s     Ú1/usr/lib/python3/dist-packages/samba/drs_utils.pyÚ__init__ÚdrsException.__init__%   s   € Ø�
ó    c                 ó    • SU R                   -   $ )NzdrsException: r   )r   s    r   Ú__str__ÚdrsException.__str__(   s   € Ø $§*¡*Ñ,Ð,r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   Ú__static_attributes__© r   r   r   r   "   s   † Ù%òõ-r   r   c                 ó  • SnUR                  5       S:¼  a  US-  nUb  USU  3-  nSU SU S3nOSU < SU< S3n [        R                  " XQU5      n[        U5      u  pxXgU4$ ! [         a  n	[	        S	U < S
U	< 35      eSn	A	ff = f)av  Make a DRSUAPI connection to the server.

:param server: the name of the server to connect to
:param lp: a samba line parameter object
:param creds: credential used for the connection
:param ip: Forced target server name
:return: A tuple with the drsuapi bind object, the drsuapi handle
            and the supported extensions.
:raise drsException: if the connection fails
Úsealé	   z,printNz,target_hostname=zncacn_ip_tcp:Ú[Ú]zDRS connection to z	 failed: )Ú	log_levelr   Ú
drs_DsBindÚ	Exceptionr   )
ÚserverÚlpÚcredsÚipÚbinding_optionsÚbinding_stringÚdrsuapiBindÚdrsuapiHandleÚbindSupportedExtensionsÚes
             r   Údrsuapi_connectr6   ,   sµ   € ð €OØ	‡|�|ƒ~˜ÓØ˜8Ñ#ˆð 
�~ØÐ.¨v¨hÐ7Ñ7ˆØ(¨¨¨A¨oÐ->¸aÐ@‰ð ó 39»/ÐJˆðLÜ—o’o n¸%Ó@ˆÜ3=¸kÓ3JÑ0ˆð Ð(?Ð@Ð@øô ó LÝÃÊÐJÓKÐKûðLús   ½$A% Á%
BÁ/BÂBc                 ó  • [         R                  " 5       nX5l        [         R                  " 5       nXVl        XFl        [        R                  " U5      Ul         U R                  USU5        g! [         a  n[        SU-  5      eSnAff = f)a¾  Send DS replica sync request.

:param drsuapiBind: a drsuapi Bind object
:param drsuapi_handle: a drsuapi handle on the drsuapi connection
:param source_dsa_guid: the guid of the source dsa for the replication
:param naming_context: the DN of the naming context to replicate
:param req_options: replication options for the DsReplicaSync call
:raise drsException: if any error occur while sending and receiving the
    reply for the dsReplicaSync
é   zDsReplicaSync failed %sN)r   ÚDsReplicaObjectIdentifierÚdnÚDsReplicaSyncRequest1Únaming_contextÚoptionsr   ÚGUIDÚsource_dsa_guidÚDsReplicaSyncr+   r   )r2   Údrsuapi_handler?   r<   Ú
req_optionÚncÚreq1Úestrs           r   ÚsendDsReplicaSyncrF   L   sy   € ô 
×	*Ò	*Ó	,€BØ„Eä×(Ò(Ó*€DØÔØ„LÜŸ9š9 _Ó5€DÔð=Ø×!Ñ! .°!°TÕ:øÜó =ÜÐ4°tÑ;Ó<Ð<ûð=ús   ÁA- Á-
B
Á7BÂB
c                 óà
  • [         R                  " 5       nSUl        [         R                  " 5       Ul        UR                  =R
                  [         R                  -  sl        UR                  =R
                  [         R                  -  sl        UR                  =R
                  [         R                  -  sl        UR                  =R
                  [         R                  -  sl        UR                  =R
                  [         R                  -  sl        UR                  =R
                  [         R                  -  sl        UR                  =R
                  [         R                  -  sl        UR                  =R
                  [         R                  -  sl        UR                  =R
                  [         R                  -  sl        UR                  =R
                  [         R                  -  sl        UR                  =R
                  [         R                   -  sl        UR                  =R
                  [         R"                  -  sl        UR                  =R
                  [         R$                  -  sl        UR                  =R
                  [         R&                  -  sl        UR                  =R
                  [         R(                  -  sl        UR                  =R
                  [         R*                  -  sl        UR                  =R
                  [         R,                  -  sl        UR                  =R
                  [         R.                  -  sl        UR                  =R
                  [         R0                  -  sl        UR                  =R
                  [         R2                  -  sl        UR                  =R
                  [         R4                  -  sl        UR                  =R
                  [         R6                  -  sl        UR                  =R
                  [         R8                  -  sl        UR                  =R
                  [         R:                  -  sl        UR                  =R
                  [         R<                  -  sl        UR                  =R
                  [         R>                  -  sl        UR                  =R
                  [         R@                  -  sl        UR                  =R
                  [         RB                  -  sl        U RE                  [F        RH                  " [         RJ                  5      U5      u  p#X2R                  R
                  4$ )z0make a DsBind call, returning the binding handleé   )&r   ÚDsBindInfoCtrÚlengthÚDsBindInfo28ÚinfoÚsupported_extensionsÚ DRSUAPI_SUPPORTED_EXTENSION_BASEÚ-DRSUAPI_SUPPORTED_EXTENSION_ASYNC_REPLICATIONÚ%DRSUAPI_SUPPORTED_EXTENSION_REMOVEAPIÚ&DRSUAPI_SUPPORTED_EXTENSION_MOVEREQ_V2Ú+DRSUAPI_SUPPORTED_EXTENSION_GETCHG_COMPRESSÚ%DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V1Ú4DRSUAPI_SUPPORTED_EXTENSION_RESTORE_USN_OPTIMIZATIONÚ'DRSUAPI_SUPPORTED_EXTENSION_KCC_EXECUTEÚ'DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY_V2Ú4DRSUAPI_SUPPORTED_EXTENSION_LINKED_VALUE_REPLICATIONÚ%DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V2Ú8DRSUAPI_SUPPORTED_EXTENSION_INSTANCE_TYPE_NOT_REQ_ON_MODÚ'DRSUAPI_SUPPORTED_EXTENSION_CRYPTO_BINDÚ)DRSUAPI_SUPPORTED_EXTENSION_GET_REPL_INFOÚ-DRSUAPI_SUPPORTED_EXTENSION_STRONG_ENCRYPTIONÚ&DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V01Ú1DRSUAPI_SUPPORTED_EXTENSION_TRANSITIVE_MEMBERSHIPÚ+DRSUAPI_SUPPORTED_EXTENSION_ADD_SID_HISTORYÚ&DRSUAPI_SUPPORTED_EXTENSION_POST_BETA3Ú,DRSUAPI_SUPPORTED_EXTENSION_GET_MEMBERSHIPS2Ú(DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V6Ú)DRSUAPI_SUPPORTED_EXTENSION_NONDOMAIN_NCSr   Ú*DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V5Ú*DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V6Ú,DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3Ú*DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V7Ú)DRSUAPI_SUPPORTED_EXTENSION_VERIFY_OBJECTÚDsBindr   r>   ÚDRSUAPI_DS_BIND_GUID)ÚdrsÚ	bind_inforL   Úhandles       r   r*   r*   g   sP  € ä×%Ò%Ó'€IØ€IÔÜ×)Ò)Ó+€I„NØ‡N�N×'Ò'¬7×+SÑ+SÑSÕ'Ø‡N�N×'Ò'¬7×+`Ñ+`Ñ`Õ'Ø‡N�N×'Ò'¬7×+XÑ+XÑXÕ'Ø‡N�N×'Ò'¬7×+YÑ+YÑYÕ'Ø‡N�N×'Ò'¬7×+^Ñ+^Ñ^Õ'Ø‡N�N×'Ò'¬7×+XÑ+XÑXÕ'Ø‡N�N×'Ò'¬7×+gÑ+gÑgÕ'Ø‡N�N×'Ò'¬7×+ZÑ+ZÑZÕ'Ø‡N�N×'Ò'¬7×+ZÑ+ZÑZÕ'Ø‡N�N×'Ò'¬7×+gÑ+gÑgÕ'Ø‡N�N×'Ò'¬7×+XÑ+XÑXÕ'Ø‡N�N×'Ò'¬7×+kÑ+kÑkÕ'Ø‡N�N×'Ò'¬7×+ZÑ+ZÑZÕ'Ø‡N�N×'Ò'¬7×+\Ñ+\Ñ\Õ'Ø‡N�N×'Ò'¬7×+`Ñ+`Ñ`Õ'Ø‡N�N×'Ò'¬7×+YÑ+YÑYÕ'Ø‡N�N×'Ò'¬7×+dÑ+dÑdÕ'Ø‡N�N×'Ò'¬7×+^Ñ+^Ñ^Õ'Ø‡N�N×'Ò'¬7×+YÑ+YÑYÕ'Ø‡N�N×'Ò'¬7×+_Ñ+_Ñ_Õ'Ø‡N�N×'Ò'¬7×+[Ñ+[Ñ[Õ'Ø‡N�N×'Ò'¬7×+\Ñ+\Ñ\Õ'Ø‡N�N×'Ò'¬7×+[Ñ+[Ñ[Õ'Ø‡N�N×'Ò'¬7×+]Ñ+]Ñ]Õ'Ø‡N�N×'Ò'¬7×+]Ñ+]Ñ]Õ'Ø‡N�N×'Ò'¬7×+_Ñ+_Ñ_Õ'Ø‡N�N×'Ò'¬7×+]Ñ+]Ñ]Õ'Ø‡N�N×'Ò'¬7×+\Ñ+\Ñ\Õ'Ø—Z‘Z¤§	¢	¬'×*FÑ*FÓ GÈÓS�N€Tà—I‘I×2Ñ2Ð3Ð3r   c                 óž  • [         R                  " 5       nSUl        / nU R                  5       nU R	                  U[
        R                  S/ SQS9nU HÐ  n[        US   S   5      nSU;   aP  US   S   n[        U5      [        R                  R                  [        R                  R                  -  -  (       a  Mj  SU;   a5  US   S   n[        U5      [        R                  R                  -  (       a  M¥  U R                  U5      n	UR                  [        U	5      5        MÒ     UR!                  5         X!l        [%        U5      Ul        U$ )	z-get a list of attributes for RODC replicationr8   zobjectClass=attributeSchema)ÚlDAPDisplayNameÚsystemFlagsÚsearchFlags)ÚbaseÚscopeÚ
expressionÚattrsro   r   rp   rq   )r   ÚDsPartialAttributeSetÚversionÚget_schema_basednÚsearchÚldbÚSCOPE_SUBTREEÚstrÚintÚsambar   ÚDS_FLAG_ATTR_NOT_REPLICATEDÚDS_FLAG_ATTR_IS_CONSTRUCTEDÚSEARCH_FLAG_RODC_ATTRIBUTEÚget_attid_from_lDAPDisplayNameÚappendÚsortÚattidsÚlenÚ
num_attids)
ÚsamdbÚpartial_attribute_setr…   Ú	schema_dnÚresÚrÚldap_display_nameÚsystem_flagsÚsearch_flagsÚattids
             r   Ú"drs_get_rodc_partial_attribute_setr‘   �   s3  € ä#×9Ò9Ó;ÐØ$%ÐÔ!à€Fð
 ×'Ñ'Ó)€IØ
�,‰,˜I¬S×->Ñ->Ø"?ò-ð ð .€Có
 ˆÜ Ð"3Ñ 4°QÑ 7Ó8ÐØ˜AÓØ ! -Ñ 0°Ñ 3ˆLÜ�LÓ!¤U§Z¡Z×%KÑ%KÜ%*§Z¡Z×%KÑ%Kñ&L÷ MáØ˜AÓØ˜]Ñ+¨AÑ.ˆLÜ�LÓ!¤E§J¡J×$IÑ$I×IÙØ×4Ñ4Ð5FÓGˆØ�‰”c˜%“jÖ!ñ ð  ‡K�K„MØ+1Ô Ü'*¨6£{ÐÔ$Ø Ð r   c                 ój   • UR                   U l         UR                  U l        UR                  U l        g)z”
Copies the highwater mark by value, rather than by object reference. (This
avoids lingering talloc references to old GetNCChanges reply messages).
N)Útmp_highest_usnÚreserved_usnÚhighest_usn)ÚhwmÚnew_hwms     r   Údrs_copy_highwater_markr˜   ³   s-   € ð
 "×1Ñ1€CÔØ×+Ñ+€CÔØ×)Ñ)€C…Or   c                   ól   • \ rS rSrSrS rS r\S 5       rS r	S r
S\R                  SS	S
SS4S jrSrg	)Údrs_Replicateé½   zDRS replication callsc                 óÀ  • [         R                   " XU5      U l        [        U R                  5      u  U l        U l        [        X2S9U l        X@l        [        U[        R                  5      (       d  [        S5      eU[        R                  " S5      :X  a  [        S5      eU R                  R                  U R                  X R                  U5      U l        SU l        g )N)r.   r-   z"Must supply GUID for invocation_idú$00000000-0000-0000-0000-000000000000zGMust not set GUID 00000000-0000-0000-0000-000000000000 as invocation_idr   )r   rk   r*   Ú
drs_handleÚsupports_extr   Únetrˆ   Ú
isinstancer   r>   ÚRuntimeErrorÚreplicate_initÚreplication_stateÚ
more_flags)r   r1   r-   r.   rˆ   Úinvocation_ids         r   r   Údrs_Replicate.__init__À   s£   € Ü—?’? >°uÓ=ˆŒÜ/9¸$¿(¹(Ó/CÑ,ˆŒ˜$Ô+Ü˜UÑ*ˆŒØŒ
Ü˜-¬¯©×3Ñ3ÜÐCÓDÐDØœDŸIšIÐ&LÓMÓMÜÐhÓiÐiØ!%§¡×!8Ñ!8¸¿¹ÀRÏÉÐS`Ó!aˆÔØˆ�r   c                 ó®   • U R                   nU[        R                  :H  =(       a0    U[        -  =(       a     UR                  [
        R                  -  S:H  $ ©Nr   )rŸ   r	   ÚWERR_DS_DRA_RECYCLED_TARGETr   r¥   r   ÚDRSUAPI_DRS_GET_TGT)r   Ú
error_codeÚreqrŸ   s       r   Ú_should_retry_with_get_tgtÚ(drs_Replicate._should_retry_with_get_tgtÌ   sO   € ð
 ×(Ñ(ˆàœf×@Ñ@Ñ@÷ DØÔHÑH÷Dà—‘¤'×"=Ñ"=Ñ=À!ÑCð	Er   c                 óv   • U [         R                  :H  =(       a     UR                  [        R                  -  S:g  $ r©   )r	   ÚWERR_DS_DRA_MISSING_PARENTÚreplica_flagsr   ÚDRSUAPI_DRS_GET_ANC)r¬   r­   s     r   Ú%_should_calculate_missing_anc_locallyÚ3drs_Replicate._should_calculate_missing_anc_locally×   s7   € ð œv×@Ñ@Ñ@÷ GØ×"Ñ"¤W×%@Ñ%@Ñ@ÀQÑFð	Hr   c                 ób  • [        5       U l        UR                  n Uc  g U R                  R                  [	        UR
                  R                  R                  5      5        UR                  b²  UR                  [        R                  " S5      :w  aŽ  [	        UR                  5      U R                  ;  ak  [        R                  " U R                  UR
                  R                  R                  5      nUR                  5       n[!        SU SUR                   S35        UR"                  nGM  )Nr�   zObject z with GUID z) was not sent by the server in this chunk)ÚsetÚ
guids_seenÚfirst_objectÚaddr|   ÚobjectÚ
identifierÚguidÚparent_object_guidr   r>   rz   ÚDnrˆ   r:   ÚparentÚprintÚnext_object)r   ÚctrÚobject_to_checkÚobj_dnÚ	parent_dns        r   Ú_calculate_missing_anc_locallyÚ,drs_Replicate._calculate_missing_anc_locallyâ   sü   € Ü›%ˆŒð
 ×*Ñ*ˆàØÑ&Øà�O‰O×Ñ¤ O×$:Ñ$:×$EÑ$E×$JÑ$JÓ KÔLà×1Ñ1Ñ=Ø"×5Ñ5Ü—)’)ÐBÓCóDä�×9Ñ9Ó:À$Ç/Á/ÓQÜŸš §
¡
¨O×,BÑ,B×,MÑ,M×,PÑ,PÓQ�Ø"ŸM™M›O�	Ü˜ 	˜{ð +Ø-×@Ñ@ÐAð BAðAô Bð .×9Ñ9ˆOò! r   c           	      óP   • U R                   R                  U R                  XX4US9  g)ú5Processes a single chunk of received replication data)ÚschemaÚ	req_levelr­   N)r    Úreplicate_chunkr¤   )r   ÚlevelrÃ   rË   rÌ   r­   Úfirst_chunks          r   Úprocess_chunkÚdrs_Replicate.process_chunký   s+   € ð 	�‰× Ñ  ×!7Ñ!7¸Ø(.Èð 	!ò 	Nr   FNTr   c           	      ó  • U R                   [        -  (       a+  [        R                  " 5       nX R                  -  Ul        SnOSn[        R
                  " 5       nX;l        X+l        [        R                  " 5       Ul	        XR                  l
        Sn[        R                  " 5       nSUl        SUl        SUl        U(       Gd[  U R                  R!                  U["        R$                  S/S9nSUS   ;   a[  US   S    HO  n['        [(        R*                  U5      nUR,                  R                  U:X  d  M9  UR,                  R.                  nMQ     [        R0                  " 5       nSUl        SUl        SUl        / n[8        R:                  " U R                  U R                  R=                  5       5      nU HK  n[        R>                  " 5       nUR                  Ul        UR                  Ul        URA                  U5        MM     UUl!        [E        U5      Ul#        Xël        XÛl$        Ub  X{l%        OÃU[        RL                  :X  a  SUl%        O§[        RN                  [        RP                  -  [        RR                  -  [        RT                  -  [        RV                  -  Ul%        U(       a$  U=RJ                  [        RX                  -  sl%        O#U=RJ                  [        RZ                  -  sl%        U	(       a#  U=RJ                  [        R\                  -  sl%        SUl/        S	Ul0        X[l1        SUl2        SUl3        SUl4        SURj                  l6        SURj                  l7        U(       d!  U(       a  [q        U R                  5      Ul3        U R                   [r        -  (       dM  S
n[        Rt                  " 5       n[w        U5       H%  nUS   S:w  d  M  [y        UU[{        UU5      5        M'     UnSnSnSn U R|                  R                  U R€                  XË5      u  nnUR‚                  c(  UR„                  S:w  a  [‡        SUR„                  -  5      e U R‰                  UUXLUU5        SnUUR„                  -  n UUR˜                  -  nURœ                  S:X  a   UU4$ [Ÿ        UR.                  UR                   5        MÌ  ! [Š         a¢  nU R�                  URŽ                  S   U5      (       a7  [‘        S5        U=R                  [        R’                  -  sl        Sn SnAGM2  U R•                  URŽ                  S   U5      (       a  [‘        S5        U R—                  U5        UeSnAff = f! [š         a     Nòf = f)zreplicate a single DNé
   é   Nr   ÚrepsFrom)rr   rs   ru   r8   i’  iÄ" é   Ú_Tz6DsGetNCChanges: NULL first_object with object_count=%uz1Missing target object - retrying with DRS_GET_TGTz;Missing parent object - calculating missing objects locallyF)QrŸ   r   r   ÚDsGetNCChangesRequest10r¥   ÚDsGetNCChangesRequest8Údestination_dsa_guidÚsource_dsa_invocation_idr9   r<   r:   ÚDsReplicaHighWaterMarkr“   r”   r•   rˆ   ry   rz   Ú
SCOPE_BASEr   r   ÚrepsFromToBlobrÃ   ÚhighwatermarkÚDsReplicaCursorCtrExrw   Ú	reserved1Ú	reserved2r   Ú_dsdb_load_udv_v2Úget_default_basednÚDsReplicaCursorrƒ   Úcursorsr†   ÚcountÚuptodateness_vectorr²   ÚDRSUAPI_EXOP_REPL_SECRETÚDRSUAPI_DRS_INIT_SYNCÚDRSUAPI_DRS_PER_SYNCr³   ÚDRSUAPI_DRS_NEVER_SYNCEDÚ$DRSUAPI_DRS_GET_ALL_GROUP_MEMBERSHIPÚ%DRSUAPI_DRS_SPECIAL_SECRET_PROCESSINGÚDRSUAPI_DRS_WRIT_REPÚDRSUAPI_DRS_SYNC_FORCEDÚmax_object_countÚmax_ndr_sizeÚextended_opÚ	fsmo_infor‰   Úpartial_attribute_set_exÚmapping_ctrÚnum_mappingsÚmappingsr‘   r   ÚDsGetNCChangesRequest5ÚdirÚsetattrÚgetattrrk   ÚDsGetNCChangesrž   r¹   Úobject_countr¢   rÐ   r
   r®   ÚargsrÁ   r«   r´   rÇ   Úlinked_attributes_countÚAttributeErrorÚ	more_datar˜   Únew_highwatermark)r   r:   rÛ   rÚ   rË   ÚexopÚrodcr²   Ú	full_syncÚsync_forcedr¥   r­   rÌ   Úudvr–   r‹   Úreps_from_packedÚreps_from_objÚ
cursors_v1Ú
cursors_v2Ú	cursor_v2Ú	cursor_v1Úreq5ÚaÚnum_objectsÚ	num_linksrÏ   rÎ   rÃ   r5   s                                 r   Ú	replicateÚdrs_Replicate.replicate  sÉ  € ð ×ÑÔH×HÜ×1Ò1Ó3ˆCØ(¯?©?Ñ:ˆCŒNØ‰IàˆIÜ×0Ò0Ó2ˆCà#7Ô Ø'?Ô$Ü$×>Ò>Ó@ˆÔØ "×ÑÔð ˆÜ×,Ò,Ó.ˆØˆÔØˆÔØˆŒçØ—*‘*×#Ñ#¨´3·>±>Ø+5¨,ð $ð 8ˆCà˜S ™VÓ#Ø(+¨A©¨zÔ(:Ð$Ü$.¬x×/FÑ/FÐHXÓ$Y�MØ$×(Ñ(×AÑAÐE]Õ]Ø+×/Ñ/×=Ñ=šñ );ô
 ×.Ò.Ó0ˆCØˆCŒKØˆCŒMØˆCŒMàˆJÜ×/Ò/°·
±
Ø04·
±
×0MÑ0MÓ0OóQˆJã'�	Ü#×3Ò3Ó5�	Ø5>×5WÑ5W�	Ô2Ø(1×(=Ñ(=�	Ô%Ø×!Ñ! )Ö,ñ	 (ð %ˆCŒKÜ˜J›ˆCŒIàÔØ"%ÔàÑ$Ø -ÕØ”W×5Ñ5Ó5Ø !ˆCÕä!(×!>Ñ!>Ü!(×!=Ñ!=ñ">ä!(×!<Ñ!<ñ"=ô ")×!AÑ!Añ"Bô ")×!MÑ!Mñ	"NˆCÔö
 Ø×!Ò!Ü×BÑBñDÖ!ð ×!Ò!¤W×%AÑ%AÑAÕ!æØ×Ò¤×!@Ñ!@Ñ@Õà"ˆÔØ!ˆÔØŒØˆŒØ$(ˆÔ!Ø'+ˆÔ$Ø'(ˆ�‰Ô$Ø#'ˆ�‰Ô æž$Ü(JÈ4Ï:É:Ó(VˆCÔ%à× Ñ Ô#K×KØˆIÜ×1Ò1Ó3ˆDÜ˜–Y�Ø�Q‘4˜3•;Ü˜D !¤W¨S°!£_Ö5ñ ð ˆCàˆØˆ	ØˆàØŸ8™8×2Ñ2°4·?±?ÀIÓS‰LˆU�CØ×ÑÑ'¨C×,<Ñ,<ÀÓ,AÜ"Ð#[Ð_b×_oÑ_oÑ#pÓqÐqðØ×"Ñ" 5¨#¨vÀ#À{ÔSð(  ˆKØ˜3×+Ñ+Ñ+ˆKðØ˜S×8Ñ8Ñ8�	ð �}‰} Ó!Øð
 ˜YÐ'Ð'ô $ C×$5Ñ$5°s×7LÑ7LÔMñO øô ó à×2Ñ2°1·6±6¸!±9¸c×BÑBäÐMÔNØ—N’N¤g×&AÑ&AÑA•Nð #'�KÞà×=Ñ=¸a¿f¹fÀQ¹iØ>A÷Cñ CäÐWÔXà×7Ñ7¸Ô<Ø�ûð#ûô2 "ó Ùðús2   Ñ!S ÒU= Ó
U:ÓAU5Ô3AU5Õ5U:Õ=
V
Ö	V
)rk   rž   r¸   r¥   r    r¤   rˆ   rŸ   )r   r   r   r    r!   r   r®   Ústaticmethodr´   rÇ   rÐ   r   ÚDRSUAPI_EXOP_NONEr  r"   r#   r   r   rš   rš   ½   sP   † Ùò
ò	Eð ñHó ðHò:ò6Nð  W×%>Ñ%>ÀUØ $°À%ÐTU÷K(r   rš   c                   óJ   ^ • \ rS rSrSrU 4S jrS rS rS rU 4S jr	Sr
U =r$ )	Údrs_ReplicateRenameri“  z,Uses DRS replication to rename the entire DBc                 ój   >• [         TU ]  XX4U5        X`l        Xpl        [        R
                  U l        g r   )Úsuperr   Úold_base_dnÚnew_base_dnr   r«   r¥   )	r   r1   r-   r.   rˆ   r¦   r  r  Ú	__class__s	           €r   r   Údrs_ReplicateRenamer.__init__–  s/   ø€ ä‰Ñ˜¨U¸=ÔIØ&ÔØ&Ôô "×5Ñ5ˆ�r   c                 ó`   • [         R                  " SU R                  -  U R                  U5      $ )z/Uses string substitution to replace the base DNz%s$)ÚreÚsubr  r  )r   Údn_strs     r   Ú	rename_dnÚdrs_ReplicateRenamer.rename_dn¢  s&   € ä�vŠv�e˜d×.Ñ.Ñ.°×0@Ñ0@À&ÓIÐIr   c                 óN  • UR                   R                   H‹  nUR                  [        :X  d  M  [        R
                  " U R                  UR                  R                  5      nUR                  5       nUR                  S5      UR                  R                  S   l        M�     g)z3Updates the 'name' attribute for the base DN objectz	utf-16-ler   N)Úattribute_ctrÚ
attributesr�   r   rz   r¿   rˆ   r¼   r:   Úget_rdn_valueÚencodeÚ	value_ctrÚvaluesÚblob)r   Úbase_objÚattrÚbase_dnÚnew_names        r   Úupdate_name_attrÚ%drs_ReplicateRenamer.update_name_attr¦  ss   € à×*Ñ*×5Ô5ˆDØ�z‰zÔ/Õ/ÜŸ&š& §¡¨X×-@Ñ-@×-CÑ-CÓD�Ø"×0Ñ0Ó2�Ø08·±ÀÓ0L�—‘×%Ñ% aÑ(Ö-ò	 6r   c                 óR  • UR                   R                  nU R                  UR                   R                  5      UR                   l        [        SU< SUR                   R                  < 35        UR                   R                  U R                  :X  a  U R                  U5        gg)z1Renames the first/top-level object in a partitionzRenaming partition z --> N)r¼   r:   r#  rÁ   r  r1  )r   Ú	first_objÚold_dns      r   Úrename_top_level_objectÚ,drs_ReplicateRenamer.rename_top_level_object®  s…   € à×%Ñ%×(Ñ(ˆØ"&§.¡.°×1EÑ1E×1HÑ1HÓ"Iˆ	×ÑÔÝ³Ø09×0DÑ0D×0GÓ0GðIô 	Jð
 ×Ñ×"Ñ" d×&6Ñ&6Ó6Ø×!Ñ! )Õ,ð 7r   c                 ó*  >• UR                   (       a4  U R                  UR                   R                  5      UR                   l        U(       a5  UR                  S:w  a%  U R	                  UR
                  R                  5        [        TU ]!  XX4XV5        g)rÊ   r   N)	r<   r#  r:   rþ   r6  r¹   r»   r  rÐ   )r   rÎ   rÃ   rË   rÌ   r­   rÏ   r  s          €r   rÐ   Ú"drs_ReplicateRenamer.process_chunkº  sp   ø€ ð
 ××Ø$(§N¡N°3×3EÑ3E×3HÑ3HÓ$IˆC×ÑÔ!ö ˜3×+Ñ+¨qÓ0Ø×(Ñ(¨×)9Ñ)9×)@Ñ)@ÔAô 	‰Ñ˜e¨&¸SÕNr   )r¥   r  r  )r   r   r   r    r!   r   r#  r1  r6  rÐ   r"   Ú__classcell__)r  s   @r   r  r  “  s(   ø† Ù6õ
6òJòMò
-÷Oó Or   r  r   )Úsamba.dcerpcr   r   r   Ú	samba.netr   Ú	samba.ndrr   r~   r   r	   r
   rz   Úsamba.dcerpc.drsuapir   r   r   r   r+   r   r6   rF   r*   r‘   r˜   r»   rš   r  r#   r   r   Ú<module>r?     sy   ð÷( 1Ñ 0Ý Ý  Ý Ý Ý Û Û 
÷Mñ Mó 
ô-�9ô -ôAò@=ò6#4òL#!òL*ôQ(�Fô Q(ôl5O˜=õ 5Or   