ó
    cÛ–iQ  ã                   óä   • S SK r S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
JrJrJrJr  SrSrS	S
SSSSSSSSSSSSSS.r\
S\S\S\S\S0r\
S\S\S\S\S 0r/ r " S! S"\5      r " S# S$\5      rg)%é    N)Ú	b64encode)Úsd_utils)Úsecurity)Ú'get_managed_service_accounts_descriptor)ÚDS_DOMAIN_FUNCTION_2008ÚDS_DOMAIN_FUNCTION_2008_R2ÚDS_DOMAIN_FUNCTION_2012ÚDS_DOMAIN_FUNCTION_2012_R2ÚDS_DOMAIN_FUNCTION_2016éK   éY   z$5e1574f6-55df-493e-a671-aaeffca6a100z$d262aae8-41f7-48ed-9f35-56bbb677573dz$82112ba0-7e4c-4a44-89d9-d46c9612bf91z$c3c927a6-cc1d-47c0-966b-be8f9b63d991z$54afcfb9-637a-4251-9f47-4d50e7021211z$f4728883-84dd-483c-9897-274f2ebcf11ez$ff4f9d27-7157-4cb0-80a9-5d6f2b14c8ffz$83c53da7-427e-47a4-a07a-a324598b88f7z$c81fc9cc-0130-4fd1-b272-634d74818133z$e5f9e791-d96d-4fc9-93c9-d53e1dc439baz$e6d5fd00-385d-4e65-b02d-9da3493ed850z$3a6b3fbf-3168-4312-a10d-dd5b3393952dz$7f950403-0ab3-47f9-9730-5d7b0269f9bdz$434bb40d-dbc9-4fe7-81d4-d57229f7b080z$a0c238ba-9e30-4ee6-80a6-43f731e9a5cd)r   éL   éM   éN   éO   éP   éQ   éR   éS   éT   éU   éV   éW   éX   r   éJ   r   r   é   é   é	   é
   é   c                   ó   • \ rS rSrSrg)ÚDomainUpdateExceptionr   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r#   ó    Ú5/usr/lib/python3/dist-packages/samba/domain_update.pyr"   r"   W   s   † Úr)   r"   c                   ó²   • \ rS rSrSr   SS jr  SS j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S rS rS rS rSrg)ÚDomainUpdateé[   z2Check and update a SAM database for domain updatesc                 óü  • Xl         X l        X0l        X@l        SU l        U R                   R                  5       U l        U R                   R                  5       U l        U R                   R                  5       U l	        [        R                  " U5      U l
        [        R                  " UR                  5       5      U l        U R                   R!                  5       U l         U R"                  R%                  S5        U R                   R!                  5       U l         U R,                  R%                  S5        g! [&        R(                   a    [+        S5      ef = f! [&        R(                   a    [+        S5      ef = f)a  
:param samdb: LDB database
:param fix: Apply the update if the container is missing
:param new_install: Apply the update as per a new install (see op 88)
:param add_update_container: Add the container at the end of the change
:raise DomainUpdateException:
Fz(CN=Operations,CN=DomainUpdates,CN=Systemz+Failed to add domain update container childz3CN=ActiveDirectoryUpdate,CN=DomainUpdates,CN=Systemz#Failed to add revision object childN)ÚsamdbÚfixÚnew_installÚadd_update_containerÚcheck_update_appliedÚget_config_basednÚ	config_dnÚ	domain_dnÚget_schema_basednÚ	schema_dnr   ÚSDUtilsr   Údom_sidÚget_domain_sidÚ
domain_sidÚget_root_basednÚdomainupdate_containerÚ	add_childÚldbÚLdbErrorr"   Úrevision_object)Úselfr/   r0   r1   r2   s        r*   Ú__init__ÚDomainUpdate.__init__^   s2  € ð Œ
ØŒØ&ÔØ$8Ô!à$)ˆÔ!àŸ™×5Ñ5Ó7ˆŒØŸ™×-Ñ-Ó/ˆŒØŸ™×5Ñ5Ó7ˆŒä ×(Ò(¨Ó/ˆŒÜ"×*Ò*¨5×+?Ñ+?Ó+AÓBˆŒà&*§j¡j×&@Ñ&@Ó&BˆÔ#ð	WØ×'Ñ'×1Ñ1Ð2\Ô]ð  $Ÿz™z×9Ñ9Ó;ˆÔð	OØ× Ñ ×*Ñ*Ð+`Õaøô �|‰|ó 	WÜ'Ð(UÓVÐVð	Wûô �|‰|ó 	OÜ'Ð(MÓNÐNð	Oús   Ã!D8 ÄE Ä8 EÅ E;Nc                 óÖ  • U R                   R                  U R                  S/[        R                  S9n[
        U   nU(       a  [
        U   nUS-  nO[        nU R                  Xe5        [        U   n[        US   S   S   5      nU(       a[  X‡:  aU  U R                  (       d  [        SUU4-  5      eU R                   R                  S[        U R                  5      U4-  5        ggg)zÔ
Apply all updates for a given old and new functional level
:param functional_level: constant
:param old_functional_level: constant
:param update_revision: modify the stored version
:raise DomainUpdateException:
Úrevision)ÚbaseÚattrsÚscopeé   r   zERevision is not high enough. Fix is set to False.
Expected: %dGot: %dz9dn: %s
changetype: modify
replace: revision
revision: %d
N)r/   ÚsearchrB   r@   Ú
SCOPE_BASEÚfunctional_level_to_max_updateÚ
MIN_UPDATEÚcheck_updates_rangeÚfunctional_level_to_versionÚintr0   r"   Úmodify_ldifÚstr)	rC   Úfunctional_levelÚold_functional_levelÚupdate_revisionÚresÚexpected_updateÚ
min_updateÚexpected_versionÚfound_versions	            r*   Úcheck_updates_functional_levelÚ+DomainUpdate.check_updates_functional_level‚   sÿ   € ð �j‰j×Ñ T×%9Ñ%9Ø'1 l¼#¿.¹.ð  ð Jˆô 9Ð9IÑJˆæÜ7Ð8LÑMˆJØ˜!‰O‰Jä#ˆJà× Ñ  Ô=ä6Ð7GÑHÐÜ˜C ™F :Ñ.¨qÑ1Ó2ˆÞ˜}Ó?Ø—8—8Ü+ð -DØGWØGTðGVñ-Vó Wð Wð �J‰J×"Ñ"ð $ô ˆ4×ÑÓ Ð"2Ð3ñ	$4õ 5ð  @ˆ?r)   c                 ó~   • U H7  nU[         :  d
  U[        :”  a  [        S5      e[        U SU-  5      " U5        M9     g)z¬
Apply a list of updates which must be within the valid range of updates
:param iterator: Iterable specifying integer update numbers to apply
:raise DomainUpdateException:
úUpdate number invalid.úoperation_%dN)rO   Ú
MAX_UPDATEr"   Úgetattr)rC   ÚiteratorÚops      r*   Úcheck_updates_iteratorÚ#DomainUpdate.check_updates_iterator¦   s=   € ó ˆBØ”J‹ "¤z£/Ü+Ð,DÓEÐEô �D˜.¨2Ñ-Ô.¨rÖ2ò r)   c                 ó²   • UnU[         :  d  X:”  d
  U[        :”  a  [        S5      eX2::  a,  U[        ;  a  [	        U SU-  5      " U5        US-  nX2::  a  M+  gg)z¼
Apply a range of updates which must be within the valid range of updates
:param start: integer update to begin
:param end: integer update to end (inclusive)
:raise DomainUpdateException:
r`   ra   rK   N)rO   rb   r"   Úmissing_updatesrc   )rC   ÚstartÚendre   s       r*   rP   Ú DomainUpdate.check_updates_range³   sY   € ð ˆØ”:Ó £°´jÓ0@Ü'Ð(@ÓAÐAØ‹iØœÓ(ä˜˜n¨rÑ1Ô2°2Ô6à�!‰GˆBð �ir)   c                 óf  • S[         U   < SU R                  < 3n U R                  R                  U[        R
                  / S9n[        U5      S:X  d   e[        SU[         U   4-  5        g! [        R                   a-  nUR                  u  pVU[        R                  :w  a  e  SnAgSnAff = f)	zL
:param op: Integer update number
:return: True if update exists else False
zCN=Ú,)rH   rJ   rI   NFrK   zSkip Domain Update %u: %sT)Ú
update_mapr>   r/   rL   r@   rM   rA   ÚargsÚERR_NO_SUCH_OBJECTÚlenÚprint)rC   re   Ú	update_dnrX   ÚeÚnumÚmsgs          r*   Úupdate_existsÚDomainUpdate.update_existsÄ   s£   � ô
 #-¨R¤.°$×2MÓ2MÐNˆ	ð	Ø—*‘*×#Ñ#¨Ü*-¯.©.Ø*,ð $ð .ˆCô �3‹x˜1‹}Ðˆ}ÜÐ)¨R´¸B±Ð,@Ñ@ÔAØøô �|‰|ó 	ØŸ™‰JˆSØ”c×,Ñ,Ó,ØÜûð		ús   �)A/ Á/B0Â#B+Â+B0c                 ó®   • U R                   R                  S[        U   < S[        U R                  5      < S35        [        SU[        U   4-  5        g)zW
Add the corresponding container object for the given update
:param op: Integer update
zdn: CN=rn   z
objectClass: container
zApplied Domain Update %u: %sN)r/   Úadd_ldifro   rT   r>   rs   ©rC   re   s     r*   Ú
update_addÚDomainUpdate.update_addØ   sH   € ð
 	�
‰
×Òä�"„~”s˜4×6Ñ6Ö7ð9ô 	:ô 	Ð,°´J¸r±NÐ/CÑCÕDr)   c                 óB   • U R                   (       d  [        SU-  5      eg)zc
Raises an exception if not set to fix.
:param op: Integer operation
:raise DomainUpdateException:
z3Missing operation %d. Fix is currently set to FalseN)r0   r"   r|   s     r*   Úraise_if_not_fixÚDomainUpdate.raise_if_not_fixâ   s"   € ð �x�xÜ'Ð(]Ð`bÑ(bÓcÐcð r)   c                 óì   • U R                  U5      (       a  g U R                  U5        U R                  R                  SU R                  -  SS/S9  U R
                  (       a  U R                  U5        g g )NzVdn: CN=TPM Devices,%s
objectClass: top
objectClass: msTPM-InformationObjectsContainer
úrelax:0úprovision:0©Úcontrols)rx   r€   r/   r{   r6   r2   r}   r|   s     r*   Úoperation_78ÚDomainUpdate.operation_78ì   su   € Ø×Ñ˜b×!Ñ!ØØ×Ñ˜bÔ!à�
‰
×Ñð ð ‡n�nñð '0°Ð%?ð	 	ñ 	Að ×$×$Ø�O‰O˜BÕð %r)   c                 óè   • U R                  U5      (       a  g U R                  U5        SnU R                  R                  U R                  U/S9  U R
                  (       a  U R                  U5        g g )NzY(OA;CIIO;WP;ea1b7b93-5e48-46d5-bc6c-4df4fda78a35;bf967a86-0de6-11d0-a285-00aa003049e2;PS)©Úadd_aces©rx   r€   r   Úupdate_aces_in_daclr6   r2   r}   ©rC   re   Úaces      r*   Úoperation_79ÚDomainUpdate.operation_79û   s`   € Ø×Ñ˜b×!Ñ!ØØ×Ñ˜bÔ!àiˆà�‰×)Ñ)¨$¯.©.ÀCÀ5Ð)ÑIà×$×$Ø�O‰O˜BÕð %r)   c                 óè   • U R                  U5      (       a  g U R                  U5        SnU R                  R                  U R                  U/S9  U R
                  (       a  U R                  U5        g g )Nz1(OA;;CR;3e0f7e18-2c7a-4c10-ba82-4d926db99a3e;;CN)rŠ   rŒ   rŽ   s      r*   Úoperation_80ÚDomainUpdate.operation_80  s`   € Ø×Ñ˜b×!Ñ!ØØ×Ñ˜bÔ!àAˆà�‰×)Ñ)¨$¯.©.ÀCÀ5Ð)ÑIà×$×$Ø�O‰O˜BÕð %r)   c                 óè   • U R                  U5      (       a  g U R                  U5        SnU R                  R                  U R                  U/S9  U R
                  (       a  U R                  U5        g g )Nz7(OA;CIOI;RPWP;3f78c3e5-f79a-46bd-a0b8-9d18116ddc79;;PS)rŠ   rŒ   rŽ   s      r*   Úoperation_81ÚDomainUpdate.operation_81  s`   € Ø×Ñ˜b×!Ñ!ØØ×Ñ˜bÔ!àGˆà�‰×)Ñ)¨$¯.©.ÀCÀ5Ð)ÑIà×$×$Ø�O‰O˜BÕð %r)   c                 óp  • U R                  U5      (       a  g U R                  U5        [        U R                  5      n[	        U5      R                  S5      nS[        U R                  5      -  nU R                  R                  SU< SU< 3SS/S9  U R                  (       a  U R                  U5        g g )NÚutf8úCN=Managed Service Accounts,%súdn: z™
changetype: add
objectClass: container
description: Default container for managed service accounts
showInAdvancedViewOnly: FALSE
nTSecurityDescriptor:: rƒ   r„   r…   )rx   r€   r   r<   r   ÚdecoderT   r6   r/   rS   r2   r}   )rC   re   Ú
descriptorÚmanagedservice_descrÚmanaged_service_dns        r*   Úoperation_75ÚDomainUpdate.operation_75'  s­   € Ø×Ñ˜b×!Ñ!ØØ×Ñ˜bÔ!ä<¸T¿_¹_ÓMˆ
Ü(¨Ó4×;Ñ;¸FÓCÐØ=Ü�—‘Óñ Ðð 	�
‰
×Òó
 !3Ò4Hð Jð *3°MÐ(Bð 	ñ 	Dð ×$×$Ø�O‰O˜BÕð %r)   c                 ó:  • U R                  U5      (       a  g U R                  U5        S[        U R                  5      -  nU R                  R                  S[        U R                  5      < SU< S3SS/S9  U R                  (       a  U R                  U5        g g )Nrš   r›   zl
changetype: modify
add: otherWellKnownObjects
otherWellKnownObjects: B:32:1EB93889E40C45DF9F0C64D23BBB6237:Ú
rƒ   r„   r…   ©rx   r€   rT   r6   r/   rS   r2   r}   )rC   re   rŸ   s      r*   Úoperation_76ÚDomainUpdate.operation_76=  s–   € Ø×Ñ˜b×!Ñ!ØØ×Ñ˜bÔ!à=Ü�—‘Óñ Ðð 	�
‰
×Òô ˆ4�>‰>ÖÓ.ð	 0ð <EØ;Hð;Jð	 	ñ 	Kð ×$×$Ø�O‰O˜BÕð %r)   c                 óþ   • U R                  U5      (       a  g U R                  U5        U R                  R                  S[	        U R
                  5      -  SS/S9  U R                  (       a  U R                  U5        g g )NzFdn: CN=PSPs,CN=System,%s
objectClass: top
objectClass: msImaging-PSPs
rƒ   r„   r…   )rx   r€   r/   r{   rT   r6   r2   r}   r|   s     r*   Úoperation_77ÚDomainUpdate.operation_77P  sz   € Ø×Ñ˜b×!Ñ!ØØ×Ñ˜bÔ!à�
‰
×Ñð ô 
ˆ$�.‰.Óñð &/°Ð$>ð 	ñ 	@ð
 ×$×$Ø�O‰O˜BÕð %r)   c                 óV  • U R                  U5      (       a  g U R                  U5        S[        U R                  5      -  nSnUS-  nUS-  nUS-  nUS-  nUS-  nUS-  nS	U< S
U< S3nU R                  R                  U5        U R                  (       a  U R                  U5        g g )Nú
CN=Keys,%szO:DAzD:z&(A;CI;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;EA)z&(A;CI;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)z&(A;CI;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY)z&(A;CI;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DD)z&(A;CI;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;ED)ú
dn: z…
objectClass: container
description: Default container for key credential objects
ShowInAdvancedViewOnly: TRUE
nTSecurityDescriptor: r£   )rx   r€   rT   r6   r/   r{   r2   r}   )rC   re   Úkeys_dnÚsddlÚldifs        r*   Úoperation_82ÚDomainUpdate.operation_82r  s¸   € Ø×Ñ˜b×!Ñ!ØØ×Ñ˜bÔ!à¤ T§^¡^Ó!4Ñ4ˆàˆØ�‰ˆØÐ8Ñ8ˆØÐ8Ñ8ˆØÐ8Ñ8ˆØÐ8Ñ8ˆØÐ8Ñ8‰ó “ðˆð 	�
‰
×Ñ˜DÔ!à×$×$Ø�O‰O˜BÕð %r)   c                 ó  • U R                  U5      (       a  g U R                  U5        S[        U R                  5      -  nS/nUS/-  nU R                  R                  X#S9  U R                  (       a  U R                  U5        g g )Nr«   z&(A;CI;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;KA)ú&(A;CI;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;EK)rŠ   )rx   r€   rT   r6   r   r�   r2   r}   )rC   re   r­   Úacess       r*   Úoperation_83ÚDomainUpdate.operation_83–  s|   € Ø×Ñ˜b×!Ñ!ØØ×Ñ˜bÔ!à¤ T§^¡^Ó!4Ñ4ˆà9Ð:ˆØÐ9Ð:Ñ:ˆà�‰×)Ñ)¨'Ð)ÑAà×$×$Ø�O‰O˜BÕð %r)   c                 ó<  • U R                  U5      (       a  g U R                  U5        S[        U R                  5      -  nS[        U R                  5      < SU< S3nU R                  R                  U5        U R                  (       a  U R                  U5        g g )Nr«   r¬   zl
changetype: modify
add: otherWellKnownObjects
otherWellKnownObjects: B:32:683A24E2E8164BD3AF86AC3C2CF3F981:r£   r¤   )rC   re   r­   r¯   s       r*   Úoperation_84ÚDomainUpdate.operation_84«  s|   € Ø×Ñ˜b×!Ñ!ØØ×Ñ˜bÔ!à¤ T§^¡^Ó!4Ñ4‰ô ˆ4�>‰>Ö›Gð%ˆð 	�
‰
×Ñ˜tÔ$à×$×$Ø�O‰O˜BÕð %r)   c                 ó   • U R                  U5      (       a  g U R                  U5        S/nUS[        U R                  5      -  /-  nU R                  R                  U R                  US9  U R                  (       a  U R                  U5        g g )Nz5(OA;CI;RPWP;5b47d60f-6090-40b2-9f37-2a4de88f3063;;KA)z9(OA;CI;RPWP;5b47d60f-6090-40b2-9f37-2a4de88f3063;;%s-527)rŠ   ©	rx   r€   rT   r<   r   r�   r6   r2   r}   ©rC   re   r´   s      r*   Úoperation_85ÚDomainUpdate.operation_85Ê  s†   € Ø×Ñ˜b×!Ñ!ØØ×Ñ˜bÔ!àHÐIˆàÐLÜ�T—_‘_Ó%ñ&ð 'ñ 	'ˆð 	�‰×)Ñ)¨$¯.©.À4Ð)ÑHà×$×$Ø�O‰O˜BÕð %r)   c                 óô   • U R                  U5      (       a  g U R                  U5        S/nUS/-  nU R                  R                  U R                  US9  U R
                  (       a  U R                  U5        g g )NzY(OA;CIIO;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;PS)zY(OA;CIIO;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;CO)rŠ   rŒ   r¼   s      r*   Úoperation_86ÚDomainUpdate.operation_86á  so   € Ø×Ñ˜b×!Ñ!ØØ×Ñ˜bÔ!àlÐmˆØÐlÐmÑmˆà�‰×)Ñ)¨$¯.©.À4Ð)ÑHà×$×$Ø�O‰O˜BÕð %r)   c                 ó  • U R                  U5      (       a  g U R                  U5        S[        U R                  5      -  /nS/nU R                  R                  U R                  UUS9  U R                  (       a  U R                  U5        g g )Nz*(A;CI;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;%s-527)r³   ©Údel_acesr‹   r»   ©rC   re   rÄ   r‹   s       r*   Úoperation_87ÚDomainUpdate.operation_87÷  s‰   € Ø×Ñ˜b×!Ñ!ØØ×Ñ˜bÔ!ð AÜ˜Ÿ™Ó(ñ)ð *ˆà<Ð=ˆà�‰×)Ñ)¨$¯.©.Ø3;Ø3;ð 	*ñ 	=ð ×$×$Ø�O‰O˜BÕð %r)   c                 ó"  • U R                  U5      (       a  g U R                  U5        U R                  (       a  SnOSnSU R                   SU S3nU R                  R                  U5        U R                  (       a  U R                  U5        g g )NÚTRUEÚFALSEr¬   zr
changetype: modify
add: msDS-ExpirePasswordsOnSmartCardOnlyAccounts
msDS-ExpirePasswordsOnSmartCardOnlyAccounts: r£   )rx   r€   r1   r6   r/   rS   r2   r}   )rC   re   Úexpire_valuer¯   s       r*   Úoperation_88ÚDomainUpdate.operation_88  sŒ   € Ø×Ñ˜b×!Ñ!ØØ×Ñ˜bÔ!à××Ø!‰Là"ˆLðØ	‡^�^Ðð .ð /;¨^ð <ð	ˆð 	�
‰
×Ñ˜tÔ$à×$×$Ø�O‰O˜BÕð %r)   c                 óð   • U R                  U5      (       a  g U R                  U5        S/nS/nU R                  R                  U R                  UUS9  U R
                  (       a  U R                  U5        g g )Nr³   z5(OA;CI;RPWP;5b47d60f-6090-40b2-9f37-2a4de88f3063;;EK)rÃ   rŒ   rÅ   s       r*   Úoperation_89ÚDomainUpdate.operation_89:  su   € Ø×Ñ˜b×!Ñ!ØØ×Ñ˜bÔ!ð
 =Ð=ˆØKÐLˆà�‰×)Ñ)¨$¯.©.Ø3;Ø3;ð 	*ñ 	=ð ×$×$Ø�O‰O˜BÕð %r)   )r2   r3   r5   r6   r<   r>   r0   r1   rB   r/   r8   r   )FFT)NF)r   r   )r$   r%   r&   r'   Ú__doc__rD   r]   rf   rP   rx   r}   r€   r‡   r�   r“   r–   r    r¥   r¨   r°   rµ   r¸   r½   rÀ   rÆ   rÌ   rÏ   r(   r#   r)   r*   r,   r,   [   s�   † Ù<à"'Ø"Ø&*ô"OðJ =AØ7<ô"5òH3ôò"ò(Eòdò ò
 ò
 ò
 ò" ò, ò& òD òH ò* ò> ò. ò, ò> õH r)   r,   )r@   Úbase64r   Úsambar   Úsamba.dcerpcr   Úsamba.descriptorr   Ú
samba.dsdbr   r   r	   r
   r   rO   rb   ro   rN   rQ   ri   Ú	Exceptionr"   Úobjectr,   r#   r)   r*   Ú<module>rÙ      sÏ   ðó& Ý Ý Ý !õ÷õ ð €
Ø€
ð 	/Ø.Ø.à.Ø.Ø.Ø.ð 	/ð 	/Ø.Ø.Ø.Ø.Ø.à.ñ5€
ð> ˜RØ Ø˜RØ Ø˜Rð"Ð ð ˜QØ Ø˜QØ Ø˜RðÐ ð €ô	˜Iô 	ôo �6õ o r)   