ó
    úÛ–iÈ  ã                   ó6  • S r SSKrSSKrSSKrSSKrSSKrSSKJr  SSKrSSK	r	SSK
Jr  SSKJr  SSKJrJr  SSK	Jr  SSKJrJrJr  SS	KJrJrJrJr  SS
KJrJrJrJrJ r 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 r.S r/ " S S\R`                  5      r1 " S S\R`                  5      r2 " S S\R`                  5      r3 " S S\R`                  5      r4 " S S\R`                  5      r5 " S S\R`                  5      r6 " S S\R`                  5      r7 " S S\Rp                  5      r9 " S  S!\Rp                  5      r: " S" S#\Rp                  5      r; " S$ S%\Rp                  5      r< " S& S'\Rp                  5      r= " S( S)\Rp                  5      r> " S* S+\Rp                  5      r?S, r@S- rASKS. jrBS/ rCS0 rDS1 rES2 rFS3 rGS4 rHS5 rIS6 rJS7 rKS8 rLS9 rMS: rNS; rOS< rPS= rQS> rRS? rSS@ rTSA rUSB rVSC rWSD rXSE rYSF rZSG\(SG4SH jr[SSS\(4SI jr\  SLSJ jr]g)MzDNS-related provisioningé    N)Ú	b64encode)Útdb_copy)Úmdb_copy)Úndr_packÚ
ndr_unpack)Ú
setup_file)ÚdnspÚmiscÚsecurity)ÚDS_DOMAIN_FUNCTION_2000ÚDS_DOMAIN_FUNCTION_2003ÚDS_DOMAIN_FUNCTION_2016ÚDS_GUID_USERS_CONTAINER)Úget_deletedobjects_descriptorÚget_domain_descriptorÚ'get_domain_delete_protected1_descriptorÚ'get_domain_delete_protected2_descriptorÚget_dns_partition_descriptorÚ'get_dns_forest_microsoft_dns_descriptorÚ'get_dns_domain_microsoft_dns_descriptor)Ú
setup_pathÚsetup_add_ldifÚsetup_modify_ldifÚ	setup_ldbÚ	FILL_FULLÚFILL_SUBDOMAIN)Úget_default_backend_store)Ú
get_stringc                 óž   • U R                  U[        R                  S/S9n[        [	        [
        R                  US   S   S   5      5      nU$ )NÚ
objectGUID©ÚbaseÚscopeÚattrsr   )ÚsearchÚldbÚ
SCOPE_BASEÚstrr   r
   ÚGUID)ÚsamdbÚdomaindnÚresÚ
domainguids       Ú:/usr/lib/python3/dist-packages/samba/provision/sambadns.pyÚget_domainguidr/   ?   sE   € Ø
�,‰,˜H¬C¯N©NÀ<À.ˆ,Ð
Q€CÜ”Z¤§	¡	¨3¨q©6°,Ñ+?ÀÑ+BÓCÓD€JØÐó    c                 óè   • SU R                  [        R                  " U U5      [        5      -  nU R	                  U[        R
                  S/S9n[        [        R                  US   S   S   5      nU$ )NzCN=DnsAdmins,%sÚ	objectSidr!   r   )	Úget_wellknown_dnr&   ÚDnr   r%   r'   r   r   Údom_sid)r*   r+   Úbase_dnr,   Údnsadmins_sids        r.   Úget_dnsadmins_sidr8   E   sn   € Ø %×"8Ñ"8¼¿ºÀØ,4ó:6Ü7Nó#Pñ P€Gà
�,‰,˜G¬3¯>©>À+Àˆ,Ð
O€CÜœx×/Ñ/°°Q±¸Ñ1DÀQÑ1GÓH€MØÐr0   c                   óF   ^ • \ rS rSrSS\R
                  4U 4S jjrSrU =r$ )ÚARecordéV   é   é„  c                 ó|   >• [         TU ]  5         [        R                  U l        X@l        X l        X0l        Xl        g ©N)	ÚsuperÚ__init__r	   Ú
DNS_TYPE_AÚwTypeÚrankÚdwSerialÚdwTtlSecondsÚdata)ÚselfÚip_addrÚserialÚttlrD   Ú	__class__s        €r.   rA   ÚARecord.__init__X   s.   ø€ Ü‰ÑÔÜ—_‘_ˆŒ
ØŒ	ØŒØÔØ�	r0   ©rG   rE   rF   rD   rC   ©	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r	   ÚDNS_RANK_ZONErA   Ú__static_attributes__Ú__classcell__©rL   s   @r.   r:   r:   V   s   ø† à'(¨c¸×8JÑ8J÷ õ r0   r:   c                   óF   ^ • \ rS rSrSS\R
                  4U 4S jjrSrU =r$ )Ú
AAAARecordéa   r<   r=   c                 ó|   >• [         TU ]  5         [        R                  U l        X@l        X l        X0l        Xl        g r?   )	r@   rA   r	   ÚDNS_TYPE_AAAArC   rD   rE   rF   rG   )rH   Úip6_addrrJ   rK   rD   rL   s        €r.   rA   ÚAAAARecord.__init__c   s0   ø€ Ü‰ÑÔÜ×'Ñ'ˆŒ
ØŒ	ØŒØÔØ�	r0   rN   rO   rW   s   @r.   rY   rY   a   s   ø† à()¨s¸×9KÑ9K÷ õ r0   rY   c                   óF   ^ • \ rS rSrSS\R
                  4U 4S jjrSrU =r$ )ÚCNAMERecordél   r<   r=   c                 ó|   >• [         TU ]  5         [        R                  U l        X@l        X l        X0l        Xl        g r?   )	r@   rA   r	   ÚDNS_TYPE_CNAMErC   rD   rE   rF   rG   )rH   ÚcnamerJ   rK   rD   rL   s        €r.   rA   ÚCNAMERecord.__init__n   s0   ø€ Ü‰ÑÔÜ×(Ñ(ˆŒ
ØŒ	ØŒØÔØ�	r0   rN   rO   rW   s   @r.   r`   r`   l   s   ø† à%&¨C°d×6HÑ6H÷ õ r0   r`   c                   óF   ^ • \ rS rSrSS\R
                  4U 4S jjrSrU =r$ )ÚNSRecordéw   r<   r=   c                 ó|   >• [         TU ]  5         [        R                  U l        X@l        X l        X0l        Xl        g r?   )	r@   rA   r	   ÚDNS_TYPE_NSrC   rD   rE   rF   rG   )rH   Ú
dns_serverrJ   rK   rD   rL   s        €r.   rA   ÚNSRecord.__init__y   s0   ø€ Ü‰ÑÔÜ×%Ñ%ˆŒ
ØŒ	ØŒØÔØ�	r0   rN   rO   rW   s   @r.   rg   rg   w   s   ø† à*+°¸4×;MÑ;M÷ õ r0   rg   c                   óN   ^ • \ rS rSrSSSSSS\R
                  4U 4S jjrSrU =r$ )	Ú	SOARecordé‚   r<   r=   iX  i€Q i  c
                 óú   >• [         TU ]  5         [        R                  U l        X�l        X0l        X€l        [        R                  " 5       n
X:l	        XJl
        XZl        Xjl        Xl        X*l        Xzl        X l        g r?   )r@   rA   r	   ÚDNS_TYPE_SOArC   rD   rE   rF   ÚsoarJ   ÚrefreshÚretryÚexpireÚmnameÚrnameÚminimumrG   )rH   rv   rw   rJ   rs   rt   ru   rx   rK   rD   rr   rL   s              €r.   rA   ÚSOARecord.__init__„   s^   ø€ ä‰ÑÔÜ×&Ñ&ˆŒ
ØŒ	ØŒØÔÜ�hŠh‹jˆØŒ
ØŒØŒ	ØŒ
ØŒ	ØŒ	ØŒØ�	r0   rN   rO   rW   s   @r.   rn   rn   ‚   s#   ø† à,-°sÀ#Ø t°¸D×<NÑ<N÷õ r0   rn   c                   óJ   ^ • \ rS rSrSSSS\R
                  4U 4S jjrSrU =r$ )Ú	SRVRecordé–   r   éd   r<   r=   c                 óÖ   >• [         T	U ]  5         [        R                  U l        Xpl        XPl        X`l        [        R                  " 5       nXl	        X(l
        X8l        XHl        X€l        g r?   )r@   rA   r	   ÚDNS_TYPE_SRVrC   rD   rE   rF   ÚsrvÚ
nameTargetÚwPortÚ	wPriorityÚwWeightrG   )
rH   ÚtargetÚportÚpriorityÚweightrJ   rK   rD   r€   rL   s
            €r.   rA   ÚSRVRecord.__init__˜   sO   ø€ ä‰ÑÔÜ×&Ñ&ˆŒ
ØŒ	ØŒØÔÜ�hŠh‹jˆØŒØŒ	Ø ŒØŒØ�	r0   rN   rO   rW   s   @r.   r{   r{   –   s   ø† à./¸ÀAÈ3Ø×(Ñ(÷õ r0   r{   c                   óF   ^ • \ rS rSrSS\R
                  4U 4S jjrSrU =r$ )Ú	TXTRecordé§   r<   r=   c                 óÒ   >• [         TU ]  5         [        R                  U l        X@l        X l        X0l        [        R                  " 5       n[        U5      Ul
        Xl        XPl        g r?   )r@   rA   r	   ÚDNS_TYPE_TXTrC   rD   rE   rF   Ústring_listÚlenÚcountr(   rG   )rH   ÚslistrJ   rK   rD   Ú
stringlistrL   s         €r.   rA   ÚTXTRecord.__init__©   sO   ø€ Ü‰ÑÔÜ×&Ñ&ˆŒ
ØŒ	ØŒØÔÜ×%Ò%Ó'ˆ
Ü˜u›:ˆ
ÔØŒØ�	r0   rN   rO   rW   s   @r.   r‹   r‹   §   s   ø† à%&¨C°d×6HÑ6H÷ 	õ 	r0   r‹   c                   óB   ^ • \ rS rSr\R
                  4U 4S jjrSrU =r$ )ÚTypePropertyéµ   c                 ót   >• [         TU ]  5         SU l        SU l        [        R
                  U l        Xl        g ©Nr<   )r@   rA   ÚwDataLengthÚversionr	   ÚDSPROPERTY_ZONE_TYPEÚidrG   )rH   Ú	zone_typerL   s     €r.   rA   ÚTypeProperty.__init__·   s/   ø€ Ü‰ÑÔØˆÔØˆŒÜ×+Ñ+ˆŒØ�	r0   ©rG   r�   r›   rš   )	rP   rQ   rR   rS   r	   ÚDNS_ZONE_TYPE_PRIMARYrA   rU   rV   rW   s   @r.   r–   r–   µ   s   ø† à!%×!;Ñ!;÷ õ r0   r–   c                   óB   ^ • \ rS rSr\R
                  4U 4S jjrSrU =r$ )ÚAllowUpdatePropertyé¿   c                 ót   >• [         TU ]  5         SU l        SU l        [        R
                  U l        Xl        g r™   )r@   rA   rš   r›   r	   ÚDSPROPERTY_ZONE_ALLOW_UPDATEr�   rG   )rH   Úallow_updaterL   s     €r.   rA   ÚAllowUpdateProperty.__init__Á   s/   ø€ Ü‰ÑÔØˆÔØˆŒÜ×3Ñ3ˆŒØ �	r0   r    )	rP   rQ   rR   rS   r	   ÚDNS_ZONE_UPDATE_SECURErA   rU   rV   rW   s   @r.   r£   r£   ¿   s   ø† à$(×$?Ñ$?÷ !õ !r0   r£   c                   ó,   ^ • \ rS rSrSU 4S jjrSrU =r$ )ÚSecureTimePropertyéÉ   c                 ót   >• [         TU ]  5         SU l        SU l        [        R
                  U l        Xl        g r™   )r@   rA   rš   r›   r	   ÚDSPROPERTY_ZONE_SECURE_TIMEr�   rG   )rH   Úsecure_timerL   s     €r.   rA   ÚSecureTimeProperty.__init__Ë   s/   ø€ Ü‰ÑÔØˆÔØˆŒÜ×2Ñ2ˆŒØ�	r0   r    ©r   ©rP   rQ   rR   rS   rA   rU   rV   rW   s   @r.   r«   r«   É   s   ø† ÷ õ  r0   r«   c                   ó,   ^ • \ rS rSrSU 4S jjrSrU =r$ )ÚNorefreshIntervalPropertyéÓ   c                 ót   >• [         TU ]  5         SU l        SU l        [        R
                  U l        Xl        g r™   )r@   rA   rš   r›   r	   Ú"DSPROPERTY_ZONE_NOREFRESH_INTERVALr�   rG   )rH   Únorefresh_intervalrL   s     €r.   rA   Ú"NorefreshIntervalProperty.__init__Õ   s/   ø€ Ü‰ÑÔØˆÔØˆŒÜ×9Ñ9ˆŒØ&�	r0   r    r±   r²   rW   s   @r.   r´   r´   Ó   s   ø† ÷'õ 'r0   r´   c                   ó,   ^ • \ rS rSrSU 4S jjrSrU =r$ )ÚRefreshIntervalPropertyéÝ   c                 ót   >• [         TU ]  5         SU l        SU l        [        R
                  U l        Xl        g r™   )r@   rA   rš   r›   r	   Ú DSPROPERTY_ZONE_REFRESH_INTERVALr�   rG   )rH   Úrefresh_intervalrL   s     €r.   rA   Ú RefreshIntervalProperty.__init__ß   s/   ø€ Ü‰ÑÔØˆÔØˆŒÜ×7Ñ7ˆŒØ$�	r0   r    r±   r²   rW   s   @r.   r»   r»   Ý   ó   ø† ÷%õ %r0   r»   c                   ó,   ^ • \ rS rSrSU 4S jjrSrU =r$ )ÚAgingStatePropertyéç   c                 ót   >• [         TU ]  5         SU l        SU l        [        R
                  U l        Xl        g r™   )r@   rA   rš   r›   r	   ÚDSPROPERTY_ZONE_AGING_STATEr�   rG   )rH   Úaging_enabledrL   s     €r.   rA   ÚAgingStateProperty.__init__é   s/   ø€ Ü‰ÑÔØˆÔØˆŒÜ×2Ñ2ˆŒØ!�	r0   r    r±   r²   rW   s   @r.   rÃ   rÃ   ç   s   ø† ÷"õ "r0   rÃ   c                   ó,   ^ • \ rS rSrSU 4S jjrSrU =r$ )ÚAgingEnabledTimePropertyéñ   c                 ót   >• [         TU ]  5         SU l        SU l        [        R
                  U l        Xl        g r™   )r@   rA   rš   r›   r	   Ú"DSPROPERTY_ZONE_AGING_ENABLED_TIMEr�   rG   )rH   Únext_cycle_hoursrL   s     €r.   rA   Ú!AgingEnabledTimeProperty.__init__ó   s/   ø€ Ü‰ÑÔØˆÔØˆŒÜ×9Ñ9ˆŒØ$�	r0   r    r±   r²   rW   s   @r.   rÊ   rÊ   ñ   rÁ   r0   rÊ   c                 ó¢  • SU-  nSU-  n[        U5      n	[        U5      n
[        U [        S5      U[	        U	5      R                  S5      S.5        U[        :w  a1  [        U [        S5      U[	        U	5      R                  S5      S.5        [        [        R                  " 5       5      n[        R                  " X5      R                  5       R                  5       n[        U5      n[        U5      n[        U [        S5      UUUUU[	        U
5      R                  S5      [	        U5      R                  S5      [	        U5      R                  S5      S.5        [!        U [        S5      UUUS	.5        U[        :w  aÒ  [        [        R                  " 5       5      n[        R                  " X5      R                  5       R                  5       n[        U [        S5      UUUUU[	        U
5      R                  S5      [	        U5      R                  S5      [	        U5      R                  S5      S.5        [!        U [        S5      UUUS	.5        g g )
NzDC=DomainDnsZones,%szDC=ForestDnsZones,%sz"provision_dnszones_partitions.ldifÚutf8)ÚZONE_DNÚSECDESCzprovision_dnszones_add.ldif)rÒ   Ú	ZONE_GUIDÚZONE_DNSÚCONFIGDNÚSERVERDNÚDELETEDOBJECTS_DESCRIPTORÚLOSTANDFOUND_DESCRIPTORÚINFRASTRUCTURE_DESCRIPTORzprovision_dnszones_modify.ldif)rÖ   r×   rÒ   )r   r   r   r   r   Údecoder   r(   ÚuuidÚuuid4r&   r4   Úcanonical_ex_strÚstripr   r   r   )r*   Ú	domainsidr+   ÚforestdnÚconfigdnÚserverdnÚ
fill_levelÚdomainzone_dnÚforestzone_dnÚ
descriptorÚdeletedobjects_descÚdomainzone_guidÚdomainzone_dnsÚprotected1_descÚprotected2_descÚforestzone_guidÚforestzone_dnss                    r.   Úsetup_dns_partitionsrï   û   s  € à*¨XÑ5€MØ*¨XÑ5€MÜ-¨iÓ8€JÜ7¸	ÓBÐä�5œ*Ð%IÓJØ Ü˜ZÓ(×/Ñ/°Ó7ñMô ð ”^Ó#Ü�uœjÐ)MÓNØ$Ü  Ó,×3Ñ3°FÓ;ñQ
ô 	ô
 œ$Ÿ*š*›,Ó'€OÜ—V’V˜EÓ1×BÑBÓD×JÑJÓL€Nä=¸iÓH€OÜ=¸iÓH€OÜ�5œ*Ð%BÓCØ Ø$Ø"ØØÜ%.Ð/BÓ%C×%JÑ%JÈ6Ó%RÜ#,¨_Ó#=×#DÑ#DÀVÓ#LÜ%.¨Ó%?×%FÑ%FÀvÓ%Nñ	Fô 	ô �eœZÐ(HÓIØØØ ñLô ð ”^Ó#ÜœdŸjšj›lÓ+ˆÜŸš Ó5×FÑFÓH×NÑNÓPˆä�uœjÐ)FÓGØ$Ø(Ø&Ø Ø Ü)2Ð3FÓ)G×)NÑ)NÈvÓ)VÜ'0°Ó'A×'HÑ'HÈÓ'PÜ)2°?Ó)C×)JÑ)JÈ6Ó)Rñ	J
ô 		ô 	˜%¤Ð,LÓ!MØ Ø Ø$ñP
õ 	ð $r0   c                 ó4   • [        U [        S5      SU05        g )Nzprovision_dns_accounts_add.ldifÚDOMAINDN)r   r   )r*   r+   s     r.   Úadd_dns_accountsrò   6  s   € Ü�5œ*Ð%FÓGØ�HðJõ r0   c           	      ó:  • S[        U5      0nUSL a  [        UUS9nO
[        UUS9n[        R                  " [        R
                  " U SU< SU< 35      5      nSS/US'   [        R                  " U[        R                  S	5      US	'   U R                  U5        g )
NÚ	DnsAdminsT)Úname_mapzCN=MicrosoftDNS,Ú,ÚtopÚ	containerÚobjectClassÚnTSecurityDescriptor)	r(   r   r   r&   ÚMessager4   ÚMessageElementÚFLAG_MOD_ADDÚadd)	r*   r+   ÚprefixÚ
domain_sidr7   Úforestrõ   Úsd_valÚmsgs	            r.   Úadd_dns_containerr  <  sœ   € ØœS Ó/Ð0€HØ�‚~Ü8¸ØBJñL‰ô 9¸ØBJñLˆô �+Š+”c—f’f™U»vÂxÐ$PÓQÓ
R€CØ Ð-€CˆÑä×Ò˜6¤3×#3Ñ#3Ø1ó	3ð ÐÑð 
‡I�Iˆc…Nr0   c                 óþ  • 0 nSUS'   SUS'   SUS'   SUS'   S	US
'   SUS'   SUS'   SUS'   SUS'   SUS'   SUS'   SUS'   SUS'   0 nSUS'   SUS'   SUS'   SUS'   SUS
'   S US'   S!US'   S"US'   S#US'   S$US'   S%US'   S&US'   S'US'   S(U< S)U< 3n[         R                  " [         R                  " X5      5      n/ nUR                  [	        [        [        R                  S*95      5        UR                  [	        [        [        R                  S+95      5        UR                  [	        [        5       5      5        UR                  [	        [        5       5      5        UR                  [	        [        5       5      5        UR                  [	        [        5       5      5        UR                  [	        [        5       5      5        S,S-/US.'   [         R                  " S/[         R                   S05      US0'   [         R                  " U[         R                   S15      US1'   U R#                  U5        / nU H5  n	UR                  [	        [%        U	S2S2[        R&                  S395      5        M7     [         R                  " [         R                  " U S4U-  5      5      nS,S5/US.'   [         R                  " U[         R                   S65      US6'   U R#                  U5        U H�  n	[	        [)        X9   S2S2[        R&                  S395      /n[         R                  " [         R                  " U S7U	< S)U< 35      5      nS,S5/US.'   [         R                  " U[         R                   S65      US6'   U R#                  U5        MŸ     g )8Nz
198.41.0.4za.root-servers.netz192.228.79.201zb.root-servers.netz192.33.4.12zc.root-servers.netz199.7.91.13zd.root-servers.netz192.203.230.10ze.root-servers.netz192.5.5.241zf.root-servers.netz192.112.36.4zg.root-servers.netz198.97.190.53zh.root-servers.netz192.36.148.17zi.root-servers.netz192.58.128.30zj.root-servers.netz193.0.14.129zk.root-servers.netz199.7.83.42zl.root-servers.netz202.12.27.33zm.root-servers.netz2001:503:ba3e::2:30z2001:500:84::bz2001:500:2::cz2001:500:2d::dz2001:500:a8::ez2001:500:2f::fz2001:500:12::d0dz2001:500:1::53z2001:7fe::53z2001:503:c27::2:30z2001:7fd::1z2001:500:9f::42z2001:dc3::35z"DC=RootDNSServers,CN=MicrosoftDNS,rö   )rž   )r§   r÷   ÚdnsZonerù   ÚZoneÚcnÚdNSPropertyr   )rJ   rK   rD   zDC=@,%sÚdnsNodeÚ	dnsRecordúDC=)r&   rû   r4   Úappendr   r–   r	   ÚDNS_ZONE_TYPE_CACHEr£   ÚDNS_ZONE_UPDATE_OFFr«   r´   r»   rÃ   rÊ   rü   rý   rþ   rg   ÚDNS_RANK_ROOT_HINTr:   )
r*   r+   rÿ   ÚrootserversÚrootservers_v6Úcontainer_dnr  ÚpropsÚrecordÚrservers
             r.   Úadd_rootserversr  M  s]  € à€KØ(4€KÐ$Ñ%Ø(8€KÐ$Ñ%Ø(5€KÐ$Ñ%Ø(5€KÐ$Ñ%Ø(8€KÐ$Ñ%Ø(5€KÐ$Ñ%Ø(6€KÐ$Ñ%Ø(7€KÐ$Ñ%Ø(7€KÐ$Ñ%Ø(7€KÐ$Ñ%Ø(6€KÐ$Ñ%Ø(5€KÐ$Ñ%Ø(6€KÐ$Ñ%à€NØ+@€NÐ'Ñ(Ø+;€NÐ'Ñ(Ø+:€NÐ'Ñ(Ø+;€NÐ'Ñ(Ø+;€NÐ'Ñ(Ø+;€NÐ'Ñ(Ø+=€NÐ'Ñ(Ø+;€NÐ'Ñ(Ø+9€NÐ'Ñ(Ø+?€NÐ'Ñ(Ø+8€NÐ'Ñ(Ø+<€NÐ'Ñ(Ø+9€NÐ'Ò(ã@FÊÐQ€Lô �+Š+”c—f’f˜UÓ1Ó
2€CØ€EØ	‡L�L”œ,´×1IÑ1IÑJÓKÔLØ	‡L�L”Ô-¼4×;SÑ;SÑTÓUÔVØ	‡L�L”Ô,Ó.Ó/Ô0Ø	‡L�L”Ô3Ó5Ó6Ô7Ø	‡L�L”Ô1Ó3Ó4Ô5Ø	‡L�L”Ô,Ó.Ó/Ô0Ø	‡L�L”Ô2Ó4Ó5Ô6Ø Ð+€CˆÑÜ×"Ò" 6¬3×+;Ñ+;¸TÓB€Cˆ�IÜ×+Ò+¨E´3×3CÑ3CÀ]ÓS€CˆÑØ	‡I�Iˆc„Nð €FÛˆØ�‰”hœx¨¸¸qÄt×G^ÑG^Ñ_Ó`Öañ ô �+Š+”c—f’f˜U I°Ñ$<Ó=Ó
>€CØ Ð+€CˆÑÜ×)Ò)¨&´#×2BÑ2BÀKÓP€CˆÑØ	‡I�Iˆc„Nó ˆÜœ7 ;Ñ#7ÀÀqÌt×OfÑOfÑgÓhÐiˆô �kŠkœ#Ÿ&š&¡³gº|Ð(LÓMÓNˆØ# YÐ/ˆˆMÑÜ×-Ò-¨f´c×6FÑ6FÈÓTˆˆKÑØ�	‰	�#Žò r0   c                 ó:  • U< SU< 3n/ n[        USU-  5      n	UR                  [        U	5      5        [        U5      n
UR                  [        U
5      5        Ub%  [	        U5      nUR                  [        U5      5        Ub%  [        U5      nUR                  [        U5      5        [        R                  " [        R                  " X< SU< 35      5      nSS/US'   [        R                  " U[        R                  S5      US'   U R                  U5        g )NÚ.zhostmaster.%srö   r÷   r
  rù   r  )rn   r  r   rg   r:   rY   r&   rû   r4   rü   rý   rþ   )r*   r  rÿ   ÚhostnameÚ	dnsdomainÚhostipÚhostip6Úfqdn_hostnameÚ
at_recordsÚat_soa_recordÚat_ns_recordÚat_a_recordÚat_aaaa_recordr  s                 r.   Úadd_at_recordr$  ”  sò   € ã'ªÐ3€Mà€Jô ˜m¨_¸yÑ-HÓI€MØ×Ñ”h˜}Ó-Ô.ô ˜MÓ*€LØ×Ñ”h˜|Ó,Ô-àÑä˜f“oˆØ×Ñœ( ;Ó/Ô0àÑä# GÓ,ˆØ×Ñœ( >Ó2Ô3ä
�+Š+”c—f’f˜Uªv²|Ð$DÓEÓ
F€CØ Ð+€CˆÑÜ×)Ò)¨*´c×6FÑ6FÈÓT€CˆÑØ	‡I�Iˆc…Nr0   c                 ó  • [        X45      n[        R                  " [        R                  " X< SU< 35      5      nSS/US'   [        R                  " [        U5      [        R                  S5      US'   U R                  U5        g ©Nrö   r÷   r
  rù   r  )r{   r&   rû   r4   rü   r   rý   rþ   )r*   r  rÿ   Úhostr†   Ú
srv_recordr  s          r.   Úadd_srv_recordr)  ²  si   € Ü˜4Ó&€JÜ
�+Š+”c—f’f˜Uªv²|Ð$DÓEÓ
F€CØ Ð+€CˆÑÜ×)Ò)¬(°:Ó*>Ä×@PÑ@PÐR]Ó^€CˆÑØ	‡I�Iˆc…Nr0   c                 ó  • [        U5      n[        R                  " [        R                  " X< SU< 35      5      nSS/US'   [        R                  " [        U5      [        R                  S5      US'   U R                  U5        g r&  )rg   r&   rû   r4   rü   r   rý   rþ   ©r*   r  rÿ   r'  Ú	ns_recordr  s         r.   Úadd_ns_recordr-  º  sh   € Ü˜“€IÜ
�+Š+”c—f’f˜Uªv²|Ð$DÓEÓ
F€CØ Ð+€CˆÑÜ×)Ò)¬(°9Ó*=¼s×?OÑ?OÐQ\Ó]€CˆÑØ	‡I�Iˆc…Nr0   c                 ó*  • [        U[        R                  S9n[        R                  " [        R
                  " X< SU< 35      5      nSS/US'   [        R                  " [        U5      [        R                  S5      US'   U R                  U5        g )N)rD   rö   r÷   r
  rù   r  )
rg   r	   ÚDNS_RANK_NS_GLUEr&   rû   r4   rü   r   rý   rþ   r+  s         r.   Úadd_ns_glue_recordr0  Â  sq   € Ü˜¤D×$9Ñ$9Ñ:€IÜ
�+Š+”c—f’f˜Uªv²|Ð$DÓEÓ
F€CØ Ð+€CˆÑÜ×)Ò)¬(°9Ó*=¼s×?OÑ?OÐQ\Ó]€CˆÑØ	‡I�Iˆc…Nr0   c                 ó  • [        U5      n[        R                  " [        R                  " X< SU< 35      5      nSS/US'   [        R                  " [        U5      [        R                  S5      US'   U R                  U5        g r&  )r`   r&   rû   r4   rü   r   rý   rþ   )r*   r  rÿ   r'  Úcname_recordr  s         r.   Úadd_cname_recordr3  Ê  si   € Ü˜tÓ$€LÜ
�+Š+”c—f’f˜Uªv²|Ð$DÓEÓ
F€CØ Ð+€CˆÑÜ×)Ò)¬(°<Ó*@Ä#×BRÑBRÐT_Ó`€CˆÑØ	‡I�Iˆc…Nr0   c                 ó¬  • / nU(       a%  [        U5      nUR                  [        U5      5        U(       a%  [        U5      nUR                  [        U5      5        U(       as  [        R
                  " [        R                  " X< SU< 35      5      nSS/US'   [        R                  " U[        R                  S5      US'   U R                  U5        g g r&  )
r:   r  r   rY   r&   rû   r4   rü   rý   rþ   )	r*   r  rÿ   r  r  Úhost_recordsÚa_recordÚaaaa_recordr  s	            r.   Úadd_host_recordr8  Ò  s¥   € Ø€LÞÜ˜6“?ˆØ×ÑœH XÓ.Ô/ÞÜ  Ó)ˆØ×ÑœH [Ó1Ô2ÞÜ�kŠkœ#Ÿ&š& ²6º<Ð(HÓIÓJˆØ# YÐ/ˆˆMÑÜ×-Ò-¨l¼C×<LÑ<LÈkÓZˆˆKÑØ�	‰	�#�ð	 r0   c                 ó|  • SU-  n[         R                  R                  Xd5      n/ nUR                  [	        [        5       5      5        UR                  [	        [        5       5      5        UR                  [	        [        5       5      5        UR                  [	        [        SS95      5        UR                  [	        [        SS95      5        UR                  [	        [        5       5      5        UR                  [	        [        5       5      5        [        R                  " [        R                  " U SU< SU< SU< 35      5      n	SS	/U	S
'   [        R                  " [	        U5      [        R                   S5      U	S'   [        R                  " U[        R                   S5      U	S'   U R#                  U	5        g )Na{  O:SYG:BAD:AI(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;CC;;;AU)(A;;RPLCLORC;;;WD)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;CI;RPWPCRCCDCLCRCWOWDSDDTSW;;;ED)(A;CIID;RPWPCRCCDCLCRCWOWDSDDTSW;;;%s)(A;CIID;RPWPCRCCDCLCRCWOWDSDDTSW;;;ED)(OA;CIID;RPWPCR;91e647de-d96f-4b70-9557-d63ff4f3ccd8;;PS)(A;CIID;RPWPCRCCDCLCLORCWOWDSDDTSW;;;EA)(A;CIID;LC;;;RU)(A;CIID;RPWPCRCCLCLORCWOWDSDSW;;;BA)S:AIé¨   )r¸   )r¿   r  ú,CN=MicrosoftDNS,rö   r÷   r  rù   rú   ÚntSecurityDescriptorr	  )r   rç   Ú	from_sddlr  r   r–   r£   r«   r´   r»   rÃ   rÊ   r&   rû   r4   rü   rý   rþ   )
r*   r+   rÿ   r  rà   r7   ÚsddlÚsecr  r  s
             r.   Úadd_domain_recordr@  á  sM  € ðð ñ€Dô ×
Ñ
×
'Ñ
'¨Ó
8€CØ€EØ	‡L�L”œ,›.Ó)Ô*Ø	‡L�L”Ô-Ó/Ó0Ô1Ø	‡L�L”Ô,Ó.Ó/Ô0Ø	‡L�L”Ô3ÀsÑKÓLÔMØ	‡L�L”Ô1À3ÑGÓHÔIØ	‡L�L”Ô,Ó.Ó/Ô0Ø	‡L�L”Ô2Ó4Ó5Ô6Ü
�+Š+”c—f’f™UÃYÓPVÒX`Ð$aÓbÓ
c€CØ Ð+€CˆÑä×Òœ8 C›=Ü×+Ñ+Ø1ó	3ð ÐÑô ×+Ò+¨E´3×3CÑ3CÀ]ÓS€CˆÑØ	‡I�Iˆc…Nr0   c                 ó¢   • [         R                  " [         R                  " U SU< SU< SU< 35      5      nSS/US'   U R                  U5        g )Nú
DC=_msdcs.r;  rö   r÷   r  rù   )r&   rû   r4   rþ   )r*   rá   rÿ   Ú	dnsforestr  s        r.   Úadd_msdcs_recordrD    sF   € ä
�+Š+”c—f’f™UÛ%.³ºð%Bó Có D€Cà Ð+€CˆÑØ	‡I�Iˆc…Nr0   c           	      óv  • U< SU< 3n[         R                  " U SU< SU< SU< 35      n	[        X	SXTXg5        [        X	SU-  UU5        [	        X	SUS5        [	        X	S	U-  US5        [	        X	S
US5        [	        X	SUS5        [	        X	SUS5        [	        X	SUS5        [	        X	SU-  US5        [	        X	SUS5        [	        X	SU-  US5        [        X	SU5        [	        X	SU-  US5        [	        X	SU-  US5        [	        X	SUS5        [	        X	SUS5        [        X	SUU5        [        X	SUU5        g )Nr  r  r;  rö   úDC=@úDC=%szDC=_kerberos._tcpéX   zDC=_kerberos._tcp.%s._siteszDC=_kerberos._udpzDC=_kpasswd._tcpiÐ  zDC=_kpasswd._udpzDC=_ldap._tcpé…  zDC=_ldap._tcp.%s._siteszDC=_gc._tcpéÄ  zDC=_gc._tcp.%s._sitesz	DC=_msdcsz&DC=_ldap._tcp.%s._sites.DomainDnsZonesz&DC=_ldap._tcp.%s._sites.ForestDnsZoneszDC=_ldap._tcp.DomainDnsZoneszDC=_ldap._tcp.ForestDnsZonesúDC=DomainDnsZonesúDC=ForestDnsZones)r&   r4   r$  r8  r)  r0  )
r*   r+   rÿ   Úsiter  r  r  r  r  Údomain_container_dns
             r.   Úadd_dc_domain_recordsrO    s°  € ó  (ªÐ3€Mô Ÿ&š&¡Û"+«V²Xð)?ó @Ðô �%¨f°hØô#ô �E°¸(Ñ0BÀFØôô �5Ð/BØ  "ô&ô �5Ð/LØñ0Ø&¨ô,ô �5Ð/BØ  "ô&ô �5Ð/AØ  #ô'ô �5Ð/AØ  #ô'ô �5¨ÀØôô �5Ð/HØñ0Ø&¨ô-ô �5¨}¸mØôô �5Ð/FÈÑ/MØ  $ô(ô �u°;ÀÔNô �5Ø;¸dÑBÀMØôô
 �5Ø;¸dÑBÀMØôô
 �5Ð/MØ  #ô'ô �5Ð/MØ  #ô'ô �EÐ0CÀVØôô �EÐ0CÀVØõr0   c
           	      ó¬  • U< SU< 3n
[         R                  " U SU< SU< SU< 35      n[        XSXTS S 5        [        XSU
S5        [        XSU-  U
S5        [        XS	U
S
5        [        XSU-  U
S
5        [        XSU-  U
S5        [        XSU
S5        [        XSU
S
5        [	        XSXg5        [        XSU-  U
S
5        [        XSU	-  U
5        g )Nr  rB  r;  rö   rF  zDC=_kerberos._tcp.dcrH  zDC=_kerberos._tcp.%s._sites.dczDC=_ldap._tcp.dcrI  zDC=_ldap._tcp.%s._sites.dczDC=_ldap._tcp.%s._sites.gcrJ  zDC=_ldap._tcp.gczDC=_ldap._tcp.pdczDC=gczDC=_ldap._tcp.%s.domainsrG  )r&   r4   r$  r)  r8  r3  )r*   rá   rÿ   rM  rC  r  r  r  r-   Úntdsguidr  Úforest_container_dns               r.   Úadd_dc_msdcs_recordsrS  h  s!  € ó  (ªÐ3€Mô Ÿ&š&¡Û"+«V²Xð)?ó @Ðô �%¨f°hØ˜ôô �5Ð/EØ  "ô&ô �5Ø3°dÑ:¸MÈ2ôOô �5Ð/AØ  #ô'ô �5Ð/KØñ0Ø&¨ô-ô �5Ð/KØñ0Ø&¨ô.ô �5Ð/AØ  $ô(ô �5Ð/BØ  #ô'ô �E°¸ÔIô �5Ø-°
Ñ:¸MÈ3ôPô �U°¸8Ñ1CØ"õ$r0   c	                 ó  •  [         R                  " [         R                  R                  X&5      5        [         R                  " [         R                  R                  X65      5        Uc  Sn[        U [        S5      UUU[        UR                  S5      5      R                  S5      [        U5      UR                  UR                  R                  5       < SUR                  R                  5       < 3S.5        g! [         a     N¡f = f)z¥Add DNS specific bits to a secrets database.

:param secretsdb: Ldb Handle to the secrets database
:param names: Names shortcut
:param machinepass: Machine password
Nr<   zsecrets_dns.ldifzutf-8rÑ   r  )ÚREALMÚ	DNSDOMAINÚ
DNS_KEYTABÚDNSPASS_B64ÚKEY_VERSION_NUMBERÚHOSTNAMEÚDNSNAME)ÚosÚunlinkÚpathÚjoinÚOSErrorr   r   r   ÚencoderÛ   r(   r  ÚnetbiosnameÚlowerr  )	Ú	secretsdbÚnamesÚprivate_dirÚbinddns_dirÚrealmr  Údns_keytab_pathÚdnspassÚkey_version_numbers	            r.   Úsecretsdb_setup_dnsrl  �  sÐ   € ðÜ
�	Š	”"—'‘'—,‘,˜{Ó<Ô=Ü
�	Š	”"—'‘'—,‘,˜{Ó<Ô=ð Ñ!ØÐô ˆiœÐ$6Ó7ØØ"Ø)Ü$ W§^¡^°GÓ%<Ó=×DÑDÀVÓLÜ"%Ð&8Ó"9ØŸ™à×!Ñ!×'Ñ'Ö)¨5¯?©?×+@Ñ+@Õ+BðDñ	:õ 	øô ó Ùðús   ‚A&C= Ã=
D
Ä	D
c                 óî  • [         R                  R                  UR                  5      n [        R
                  " US5        [         R                  " US5        UR                  b;   [         R                  " USUR                  5        [         R                  " US5        gg! [         a     Nlf = f! [         a8    S[         R                  ;  a!  U R                  SX!R                  4-  5         g gf = f)zl(Re)create the DNS directory and chown it to bind.

:param logger: Logger object
:param paths: paths object
Téø  NéÿÿÿÿÚSAMBA_SELFTESTú!Failed to chown %s to bind gid %u)r\  r^  ÚdirnameÚdnsÚshutilÚrmtreer`  ÚmkdirÚbind_gidÚchownÚchmodÚenvironÚerror)ÚloggerÚpathsÚdns_dirs      r.   Úcreate_dns_dirr  ¼  sÉ   € ô �g‰g�o‰o˜eŸi™iÓ(€GðÜ�Š�g˜tÔ$ô ‡H‚HˆW�eÔà‡~�~Ñ!ð	.Ü�HŠH�W˜b %§.¡.Ô1ä�HŠH�W˜eÕ$ð	 "øô ó Ùðûô ó 	.Ø¤r§z¡zÓ1Ø—‘Ð@ØŸ^™^ðD-ñ -ö .ñ 2ð	.ús#   «B" Á'9B2 Â"
B/Â.B/Â2=C4Ã3C4c           	      óú  • [         R                  R                  UR                  UR                  5      n[         R                  R                  UR
                  UR                  5      n[         R                  R                  U5      (       aé  [         R                  R                  U5      (       a   [         R                  " U5         [         R                  " X#5        UR                  b‰   [         R                  " UR
                  S5        [         R                  " UR
                  SUR                  5         [         R                  " US
5        [         R                  " USUR                  5        ggg! [         a-  nU R                  SU< SUR                  < 35         SnANáSnAff = f! [         a2  nU R                  SU< SU< SUR                  < 35         SnAGN	SnAff = f! [         a>    S[         R                  ;  a'  U R!                  S	UR
                  UR                  5         Nýf = f! [         a5    S[         R                  ;  a  U R!                  S	X1R                  5         g gf = f)z\Create link for BIND to DNS keytab

:param logger: Logger object
:param paths: paths object
zFailed to remove z: NzFailed to create link z -> rn  ro  rp  rq  i   )r\  r^  r_  rf  Ú
dns_keytabrg  Úisfiler]  r`  r{  ÚstrerrorÚlinkrw  ry  rx  rz  Úinfo)r|  r}  Úprivate_dns_keytab_pathÚbind_dns_keytab_pathÚes        r.   Úcreate_dns_dir_keytab_linkr‰  Ö  sî  € ô !Ÿg™gŸl™l¨5×+<Ñ+<¸e×>NÑ>NÓOÐÜŸ7™7Ÿ<™<¨×(9Ñ(9¸5×;KÑ;KÓLÐä	‡w�w‡~�~Ð-×.Ñ.Ü�7‰7�>‰>Ð.×/Ñ/ðAÜ—	’	Ð.Ô/ð	VÜ�GŠGÐ+ÔBð �>‰>Ñ%ðCÜ—’˜×*Ñ*¨EÔ2Ü—’˜×*Ñ*¨B°·±Ô?ð
FÜ—’Ð-¨uÔ5Ü—’Ð-¨r°5·>±>ÕBð &ð! /øô ó AØ—’Û2°A·J³Jð@÷ Añ AûðAûô ó 	VØ�LŠLÛ1Ó3GÈÏËðU÷ Vò Vûð	Vûô ó CØ#¬2¯:©:Ó5Ø—K‘KÐ CØ %× 1Ñ 1°5·>±>ôCùðCûô ó FØ#¬2¯:©:Ó5Ø—K‘KÐ CØ 4·n±nöFñ 6ðFúsV   Â2E7 Ã	F1 Ã-AG0 Ä;9H; Å7
F.Æ#F)Æ)F.Æ1
G-Æ;'G(Ç(G-Ç0AH8È7H8È;:I:É9I:c
                 ó~  • [        U[        5      (       d   eUb  SU-   n
US-   U-   nSU-   nOSn
SnSnUb  SU-   nUS-   U-   nSU-   nOSnSnSn[        [        S	5      UR                  UUUUUU[
        R                  " S
5      U	UU
UUUS.5        UR                  bO   [        R                  " UR                  SUR                  5        [        R                  " UR                  S5        gg! [         aC    S[        R                  ;  a,  U R                  SUR                  UR                  4-  5         g gf = f)ap  Write out a DNS zone file, from the info in the current database.

:param paths: paths object
:param dnsdomain: DNS Domain name
:param domaindn: DN of the Domain
:param hostip: Local IPv4 IP
:param hostip6: Local IPv6 IP
:param hostname: Local hostname
:param realm: Realm name
:param domainguid: GUID of the domain.
:param ntdsguid: GUID of the hosts nTDSDSA record.
Nz            IN AAAA    z        IN AAAA    z#gc._msdcs               IN AAAA    Ú z            IN A    z        IN A    z gc._msdcs               IN A    zprovision.zonez%Y%m%d%H)rZ  rV  rU  ÚHOSTIP_BASE_LINEÚHOSTIP_HOST_LINEÚ
DOMAINGUIDÚ
DATESTRINGÚDEFAULTSITEÚNTDSGUIDÚHOSTIP6_BASE_LINEÚHOSTIP6_HOST_LINEÚGC_MSDCS_IP_LINEÚGC_MSDCS_IP6_LINEro  i´  rp  rq  )Ú
isinstancer(   r   r   rs  ÚtimeÚstrftimerw  r\  rx  ry  r`  rz  r{  )r|  r}  r  r  r  r  rh  r-   rQ  rM  Úhostip6_base_lineÚhostip6_host_lineÚgc_msdcs_ip6_lineÚhostip_base_lineÚhostip_host_lineÚgc_msdcs_ip_lines                   r.   Úcreate_zone_filerŸ     si  € ô �j¤#×&Ñ&Ð&Ð&àÑØ5¸Ñ?ÐØ$Ð'<Ñ<¸wÑFÐØAÀGÑKÑàÐØÐØÐàÑØ1°FÑ:ÐØ#Ð&8Ñ8¸6ÑAÐØ=ÀÑFÑàÐØÐØÐäŒzÐ*Ó+¨U¯Y©YØ Ø"ØØ 0Ø 0Ø$ÜŸ-š-¨
Ó3ØØ Ø!2Ø!2Ø 0Ø!2ñ9ô ð  ‡~�~Ñ!ð	0Ü�HŠH�U—Y‘Y  E§N¡NÔ3ä�HŠH�U—Y‘Y Õ&ð	 "øô
 ó 	0Ø¤r§z¡zÓ1Ø—‘Ð@Ø—I‘I˜uŸ~™~ðD/ñ /ö 0ñ 2ð	0ús   Â AC/ Ã/AD<Ä;D<c           	      ó*  • UR                   n[        R                  R                  US5      n[        R                  R	                  UR
                  5      n[        R                  R                  US5      n	0 n
U R                  S[        R                  SS/S9nUS   S    H1  n[        U5      R                  S5      u  pÞXêUR                  5       '   M3     [        5       nSUS   ;   a  [        US   S   S   5      nUR                  R                  5       n[        R                  R                  XŠU   5      n [        R                  " U	5        [        US5      R!                  5         U< S	U< 3n["        R$                  " U5      nU R                  S
[        R                  S9nUR'                  US   5        SU-  n[)        [+        U5      5      R-                  S5      n[/        U[1        S5      UR                  U[        U5      US.5        [/        U[1        S5      S5        U
U	 SUR                  R                  5       -  nSUR6                  R                  5       -  nU
U   nU
R9                  U5      nSn [        R:                  " [        R                  R                  UU5      [        R                  R                  U	U5      5        [        R:                  " [        R                  R                  UU5      [        R                  R                  UU5      5        US:X  aY  [        R:                  " [        R                  R                  UUS-   5      [        R                  R                  UUS-   5      5        U(       a²  [        R:                  " [        R                  R                  UU5      [        R                  R                  UU5      5        US:X  aY  [        R:                  " [        R                  R                  UUS-   5      [        R                  R                  UUS-   5      5        U
U	 U(       a  U
U	  [?        [        R                  R                  US5      [        R                  R                  US5      5        U
 HŸ  nX­   nUS:X  aJ  [A        [        R                  R                  UU5      [        R                  R                  UU5      5        MW  [?        [        R                  R                  UU5      [        R                  R                  UU5      5        M¡     URB                  bÿ   [        RD                  " U5       Hã  u  nnn U H\  n![        R                  R                  UU!5      n"[        RF                  " U"SURB                  5        [        RH                  " U"S5        M^     U  Ht  n#U#RK                  S5      (       d  M  [        R                  R                  UU#5      n$[        RF                  " U$SURB                  5        [        RH                  " U$S5        Mv     Må     gS[        RL                  ;  a  URO                  S5        gg! [2         a  nUR5                  SU 35        e SnAff = f! [<         a  nUR5                  SU 35        e SnAff = f! [2         a  nUR5                  SU 35        e SnAff = f! [<         a*    S[        RL                  ;  a  UR5                  S5         g gf = f) zRCreate a copy of samdb and give write permissions to named for dns partitions
    z	sam.ldb.dz
@PARTITIONÚ	partitionÚbackendStorer!   r   Ú:Úwz://z
@INDEXLIST)r"   r#   zobjectGUID: %s
-rÑ   zprovision_basedn.ldif)rñ   rŽ  Ú	DOMAINSIDÚ
DESCRIPTORzprovision_basedn_options.ldifNz@Failed to setup database for BIND, AD based DNS cannot be used: zDC=DOMAINDNSZONES,%szDC=FORESTDNSZONES,%szmetadata.tdbÚmdbz-lockzsam.ldbro  rn  )z.ldbz.tdbzldb-locki°  rp  z9Failed to set permissions to sam.ldb* files, fix manuallyz\Unable to find group id for BIND,
                set permissions to sam.ldb* files manually)(rf  r\  r^  r_  rr  rs  r%   r&   r'   r(   ÚsplitÚupperr   r+   rv  ÚopenÚcloseÚsambaÚLdbrþ   r   r   rÛ   r   r   Ú	Exceptionr{  ÚrootdnÚgetr„  r`  r   r   rw  Úwalkrx  ry  Úendswithrz  Úwarning)%r*   r|  r}  re  rà   r-   rf  Ú
samldb_dirr~  Údns_samldb_dirÚpartfiler,   ÚtmpÚncÚfnameÚbackend_storer+   Údomainpart_fileÚdom_urlÚdom_ldbÚ	index_resÚdomainguid_lineÚdescrÚerrÚdomainzonednÚforestzonednÚdomainzone_fileÚforestzone_fileÚmetadata_fileÚpfilerr  ÚdirsÚfilesÚdÚdpathÚfÚfpaths%                                        r.   Úcreate_samdb_copyrÎ  >  sš  € ð ×#Ñ#€KÜ—‘—‘˜k¨;Ó7€JÜ�g‰g�o‰o˜eŸi™iÓ(€GÜ—W‘W—\‘\ '¨;Ó7€Nð €HØ
�,‰,˜LÜ Ÿ^™^Ø)¨>Ð:ð ð <€Cð �1‰v�kÔ"ˆÜ˜#“h—n‘n SÓ)‰ˆØ$�—‘“Óñ #ô .Ó/€MØ˜˜Q™ÓÜ˜C ™F >Ñ2°1Ñ5Ó6ˆð �~‰~×#Ñ#Ó%€HÜ—g‘g—l‘l 7°XÑ,>Ó?€OðÜ
�Š�Ô Üˆ_˜cÓ"×(Ñ(Ô*ó  -ªoÐ>ˆÜ—)’)˜GÓ$ˆð —L‘L l¼#¿.¹.�LÐIˆ	Ø�‰�I˜a‘LÔ!à-°
Ñ:ˆÜÔ/°	Ó:Ó;×BÑBÀ6ÓJˆÜ�w¤
Ð+BÓ CØŸ™Ø)Ü˜Y›Øñ	F!ô 	"ô
 	�wÜ!Ð"AÓBÀDô	Jð 	�Ðð *¨E¯N©N×,@Ñ,@Ó,BÑB€LØ)¨E¯L©L×,>Ñ,>Ó,@Ñ@€Là˜|Ñ,€OØ—l‘l <Ó0€Oà"€MðÜ
�Š”—‘—‘˜Z¨Ó7Ü—‘—‘˜^¨]Ó;ô	=ä
�Š”—‘—‘˜[¨/Ó:Ü—‘—‘˜W oÓ6ô	8à˜EÓ!ô �GŠG”B—G‘G—L‘L ¨oÀÑ.GÓHÜ—G‘G—L‘L ¨/¸GÑ*CÓDôFæÜ�GŠG”B—G‘G—L‘L ¨oÓ>Ü—G‘G—L‘L ¨/Ó:ô<à Ó%ô —’œŸ™Ÿ™ [°/ÀGÑ2KÓLÜŸ™Ÿ™ W¨oÀÑ.GÓHôJð 	�ÐÞØ�\Ð"ðÜ”—‘—‘˜k¨9Ó5Ü—‘—‘˜g yÓ1ô	3ãˆBØ‘LˆEØ Ó%ÜœŸ™Ÿ™ k°5Ó9ÜŸ™Ÿ™ g¨uÓ5ö7ô œŸ™Ÿ™ k°5Ó9ÜŸ™Ÿ™ g¨uÓ5ö7ñ ð ‡~�~Ñ!ð	QÜ(*¯ª°Ö(8Ñ$�˜˜uÛ�AÜŸG™GŸL™L¨°!Ó4�EÜ—H’H˜U B¨¯©Ô7Ü—H’H˜U EÖ*ñ ó �AØ—z‘zÐ">×?Ó?Ü "§¡§¡¨W°aÓ 8˜ÜŸš ¨¨E¯N©NÔ;ÜŸš ¨Ö.ó	 ò )9ð ¤2§:¡:Ó-Ø�N‰Nð >õ ?ð .øôi ó Ø�‰ØNÈsÈeÐTô	VàûðûôP ó Ø�‰ØNÈsÈeÐTô	Vàûðûô* ó Ø�‰ØNÈsÈeÐTô	Vàûðûô$ ó 	QØ¤r§z¡zÓ1Ø—‘ØOöQñ 2ð	Qúse   Ä:C-Y) É=F>Z Ñ	C-Z7 ÕB[ × A![ Ù)
ZÙ3ZÚZÚ
Z4ÚZ/Ú/Z4Ú7
[Û[Û[Û/\Ü\c                 ó„   • [        [        S5      U R                  S5        [        [        S5      U R                  S5        g)z Write out a dns_update_list fileÚdns_update_listNÚspn_update_list)r   r   rÐ  rÑ  )r}  s    r.   Úcreate_dns_update_listrÒ  Æ  s4   € ô ŒzÐ+Ó,¨e×.CÑ.CÀTÔJÜŒzÐ+Ó,¨e×.CÑ.CÀTÕJr0   c                 óê  • SSK Jn  US:X  a‰  [        [        S5      U R                  UUU R
                  SSR                  UR                  S5      SS 5      -   U R                  U R                  S	.5        [        [        S
5      U R                  5        gUS:X  Ga×  [        R                  " S/S[        R                  [        R                  SS9R                  5       S   n[        U5      nSnSnSn	Sn
SnSnSnSnUR                  5       R!                  S5      S:w  a  SnGOýUR                  5       R!                  S5      S:w  a  SnGOÖUR                  5       R!                  S5      S:w  a  Sn	GO¯UR                  5       R!                  S5      S:w  a  Sn
GOˆUR                  5       R!                  S5      S:w  a  SnGOaUR                  5       R!                  S5      S:w  a  SnGO:UR                  5       R!                  S5      S:w  a  SnGOUR                  5       R!                  S5      S:w  d#  UR                  5       R!                  S5      S:w  a  SnOÊUR                  5       R!                  S5      S:w  a  U" S5      eUR                  5       R!                  S5      S:w  a  U" S5      eUR                  5       R!                  S5      S:w  a  U" S5      eUR                  5       R!                  S 5      S:w  a  U" S5      eUR#                  S!U R                  -  5        [        [        S"5      U R                  U R                  [$        R&                  R)                  5       UUU	U
UUUUS#.
5        gg)$aC  Write out a file containing zone statements suitable for inclusion in a
named.conf file (including GSS-TSIG configuration).

:param paths: all paths
:param realm: Realm name
:param dnsdomain: DNS Domain name
:param dns_backend: DNS backend type
:param keytab_name: File name of DNS keytab file
:param logger: Logger object
r   )ÚProvisioningErrorÚBIND9_FLATFILEz
named.confz*.r  r<   N)rV  rU  Ú	ZONE_FILEÚREALM_WCÚ
NAMED_CONFÚNAMED_CONF_UPDATEznamed.conf.updateÚ	BIND9_DLZznamed -VT)ÚshellÚstdoutÚstderrÚcwdÚ#zBIND 9.8ro  r‹  zBIND 9.9z	BIND 9.10z	BIND 9.11z	BIND 9.12z	BIND 9.14z	BIND 9.16z	BIND 9.18z	BIND 9.20zBIND 9.7z&DLZ option incompatible with BIND 9.7.z	BIND_9.13z/Only stable/esv releases of BIND are supported.z	BIND_9.15z	BIND_9.17z0BIND version unknown, please modify %s manually.znamed.conf.dlz)
rØ  Ú
MODULESDIRÚBIND9_8ÚBIND9_9ÚBIND9_10ÚBIND9_11ÚBIND9_12ÚBIND9_14ÚBIND9_16ÚBIND9_18)Úsamba.provisionrÔ  r   r   Ú	namedconfrs  r_  r¨  Únamedconf_updateÚ
subprocessÚPopenÚPIPEÚSTDOUTÚcommunicater   r©  Úfindr³  r¬  ÚparamÚmodules_dir)r}  rh  r  Údns_backendr|  rÔ  Ú	bind_infoÚbind9_8Úbind9_9Úbind9_10Úbind9_11Úbind9_12Úbind9_14Úbind9_16Úbind9_18s                  r.   Úcreate_named_confrþ  Î  s	  € õ" 2àÐ&Ó&Ü”:˜lÓ+¨U¯_©_Ø!*Ø"Ø!&§¡Ø $ s§x¡x°·±¸CÓ0@ÀÀÐ0DÓ'EÑ EØ"'§/¡/Ø).×)?Ñ)?ñ?ô 	ô 	”:Ð1Ó2°E×4JÑ4JÕKà	˜Ô	#Ü×$Ò$ j \¸Ü,6¯O©OÜ,6×,=Ñ,=Ø),ñ.÷ /:©k«m¸Añ?ˆ	ô ˜yÓ)ˆ	ØˆØˆØˆØˆØˆØˆØˆØˆØ�?‰?Ó×!Ñ! *Ó-°Ó3ØŠGØ�_‰_Ó×#Ñ# JÓ/°2Ó5ØŠGØ�_‰_Ó×#Ñ# KÓ0°BÓ6ØŠHØ�_‰_Ó×#Ñ# KÓ0°BÓ6ØŠHØ�_‰_Ó×#Ñ# KÓ0°BÓ6ØŠHØ�_‰_Ó×#Ñ# KÓ0°BÓ6ØŠHØ�_‰_Ó×#Ñ# KÓ0°BÓ6ØŠHØ�_‰_Ó×#Ñ# KÓ0°BÓ6Ø�_‰_Ó×#Ñ# KÓ0°BÓ6Ø‰HØ�_‰_Ó×#Ñ# JÓ/°2Ó5Ù#Ð$LÓMÐMØ�_‰_Ó×#Ñ# KÓ0°BÓ6Ù#Ð$UÓVÐVØ�_‰_Ó×#Ñ# KÓ0°BÓ6Ù#Ð$UÓVÐVØ�_‰_Ó×#Ñ# KÓ0°BÓ6Ù#Ð$UÓVÐVà�N‰NÐMÐPU×P_ÑP_Ñ_Ô`Ü”:Ð.Ó/°·±Ø"'§/¡/Ü"'§+¡+×"9Ñ"9Ó";Ø&Ø&Ø (Ø (Ø (Ø (Ø (Ø (ñCõ 	ðS 
$r0   c                 óx   • [        [        S5      U UUUU[        R                  R	                  XE5      US.5        g)aF  Write out a file containing zone statements suitable for inclusion in a
named.conf file (including GSS-TSIG configuration).

:param path: Path of the new named.conf file.
:param realm: Realm name
:param dnsdomain: DNS Domain name
:param binddns_dir: Path to bind dns directory
:param keytab_name: File name of DNS keytab file
z	named.txt)rV  r[  rU  rW  ÚDNS_KEYTAB_ABSÚPRIVATE_DIRN)r   r   r\  r^  r_  )r^  rh  r  Údnsnamerg  Úkeytab_names         r.   Úcreate_named_txtr  $  s9   € ô Œz˜+Ó&¨Ø"ØØØ%Ü Ÿg™gŸl™l¨;ÓDØ&ñ/õ r0   c                 ó   • U S;   $ )N)rÕ  rÚ  ÚSAMBA_INTERNALÚNONE© )rô  s    r.   Úis_valid_dns_backendr	  9  s   € ØÐSÑSÐSr0   c                 ó<   • [         U s=:*  =(       a	    [        :*  $ s  $ r?   )r   r   )Úos_levels    r.   Úis_valid_os_levelr  =  s   € Ü" h×IÓIÔ2IÑIÐIÑIÐIr0   c                 ó6   • [        XSX5        [        XS5        g ©Nz	CN=System)r  r  )r*   rà   rá   r7   s       r.   Úcreate_dns_legacyr  A  s   € ä�e {°IÔMä�E [Õ1r0   c	           
      ó>   • [        XSX1U5        [        XSXCXVU5        g r  )r@  rO  )	r*   rà   rá   r  rM  r  r  r  r7   s	            r.   Úfill_dns_data_legacyr  H  s*   € ô �e {°IØ#ô%ô ˜%¨;¸Ø"¨Gõ5r0   c           	      ó–   • [        XX4UR                  UR                  U5        [        XSUU5        U[        :w  a  [        XSUUSS9  g g )NrK  rL  T)r  )rï   râ   rã   r  r   )r*   rà   re  r+   rá   r7   rä   s          r.   Úcreate_dns_partitionsr  S  sU   € ô ˜¨8ØŸ™¨¯©¸ôEô �eÐ':¸IØ#ô%à”^Ó#Ü˜%Ð+>À	Ø'°ó	6ð $r0   Tc                 óÒ   • U(       a  [        XS5        [        XSUX5        U(       a  [        XSUXWX‰5        U[        :w  a&  [	        XSU5        U(       a  [        XSUXgX‰X«5
        ggg)aR  Fill data in various AD partitions

:param samdb: LDB object connected to sam.ldb file
:param domainsid: Domain SID (as dom_sid object)
:param site: Site name to create hostnames in
:param domaindn: DN of the domain
:param forestdn: DN of the forest
:param dnsdomain: DNS name of the domain
:param dnsforest: DNS name of the forest
:param hostname: Host name of this DC
:param hostip: IPv4 addresses
:param hostip6: IPv6 addresses
:param domainguid: Domain GUID
:param ntdsguid: NTDS GUID
:param dnsadmins_sid: SID for DnsAdmins group
:param autofill: Create DNS records (using fixed template)
rK  rL  N)r  r@  rO  r   rD  rS  )r*   rà   rM  r+   rá   r  rC  r  r  r  r-   rQ  r7   Úautofillrä   Úadd_roots                   r.   Úfill_dns_data_partitionsr  a  s   € ö0 Ü˜Ð)<Ô=ô �eÐ':¸IØô0ö Ü˜eÐ/BÀDØ'°6ô	Dð ”^Ó#ô 	˜Ð*=¸yÔIö Ü  Ð2EÀtØ!*°fØ!+õ7ð ð $r0   c                 ó`  • [        U5      (       d  [        SU-  5      e[        U5      (       d  [        SU-  5      eUS:X  a  UR                  S5        gUR                  S5        [	        XR
                  5        UR
                  nU R                  5       R                  5       nUR                  R                  5       nUnUR                  nUR                  R                  5       n[        X5      n[        X5      nU R                  5          UR                  SU-  5        [        XR                   UU5        U["        :X  a/  UR                  SU-  5        [%        XR                   X½UUX‰U5	        OqUS	;   ak  U[&        :¼  aa  UR                  S
5        [)        XR                   X+UUU
5        UR                  S5        [+        XR                   XûUXÞUX‰UUR,                  UU
S9  U R/                  5         UR3                  S5      (       a  [5        XX#UXVX÷UU	S9  gg!   U R1                  5         e = f)a¼  Provision DNS information (assuming GC role)

:param samdb: LDB object connected to sam.ldb file
:param secretsdb: LDB object connected to secrets.ldb file
:param names: Names shortcut
:param paths: Paths shortcut
:param logger: Logger object
:param dns_backend: Type of DNS backend
:param os_level: Functional level (treated as os level)
:param dnspass: Password for bind's DNS account
:param hostip: IPv4 address
:param hostip6: IPv6 address
úInvalid dns backend: %rúInvalid os level: %rr  z'No DNS backend set, not configuring DNSNzAdding DNS accountsz%Creating CN=MicrosoftDNS,CN=System,%sz'Populating CN=MicrosoftDNS,CN=System,%s)r  rÚ  z5Creating DomainDnsZones and ForestDnsZones partitionsz7Populating DomainDnsZones and ForestDnsZones partitions)rä   ÚBIND9_)rM  rj  r  r  )r	  r®  r  r…  rò   r+   Úget_root_basednÚget_linearizedr  rc  Úsitenamerb  r8   r/   Útransaction_startr  rà   r   r  r   r  r  rQ  Útransaction_commitÚtransaction_cancelÚ
startswithÚsetup_bind9_dns)r*   rd  re  r}  r|  rô  r  rj  r  r  rä   r+   rá   r  rC  rM  r  r7   r-   s                      r.   Úsetup_ad_dnsr$  ‘  s  € ô"   ×,Ñ,ÜÐ1°KÑ?Ó@Ð@ä˜X×&Ñ&ÜÐ.°Ñ9Ó:Ð:à�fÓØ�‰Ð=Ô>Øð ‡K�KÐ%Ô&Ü�UŸN™NÔ+ð" �~‰~€HØ×$Ñ$Ó&×5Ñ5Ó7€Hà—‘×%Ñ%Ó'€IØ€Ià�>‰>€Dà× Ñ ×&Ñ&Ó(€Hä% eÓ6€MÜ Ó0€Jà	×ÑÔð#à�‰Ð;¸hÑFÔGÜ˜%§¡°(¸MÔJàÔ.Ó.à�K‰KÐAÀHÑLÔMÜ  ¯©¸ÈdØ!)¨6¸MõKð Ð;Ó;ØÔ3Ó3ð �K‰KÐOÔPÜ! %¯©¸%È8Ø"/°ô=ð �K‰KÐQÔRÜ$ U¯O©O¸TÈXØ%.¸8ÀVØ%/°·±ÀØ0:ò<ð 	× Ñ Ô"à×Ñ˜h×'Ñ'Ü˜¨%¸Ø#°DÐRXØ 'ó	)ð (øðØ× Ñ Ô"Øús   ÄCH ÈH-c                 ó¸  • [        U5      (       a  UR                  S5      (       d  [        SU-  5      e[        U5      (       d  [        SU-  5      eUR                  n[        X5      n[        XUR                  UR                  UR                  UR                  UR                  UUS9	  [        XC5        [        XC5        US:X  a8  [        XCUUR                  U	X¢R                  UR                  UUR                   S9
  US:X  a"  U["        :¼  a  [%        XUX"R&                  U5        [)        X2R                  UR                  UUS9  [+        UR,                  UR                  UR                  UR                  < S	UR                  < 3UR                  UR                  S
9  UR/                  SUR0                  5        UR/                  SUR,                  5        g)aö  Provision DNS information (assuming BIND9 backend in DC role)

:param samdb: LDB object connected to sam.ldb file
:param secretsdb: LDB object connected to secrets.ldb file
:param names: Names shortcut
:param paths: Paths shortcut
:param logger: Logger object
:param dns_backend: Type of DNS backend
:param os_level: Functional level (treated as os level)
:param site: Site to create hostnames in
:param dnspass: Password for bind's DNS account
:param hostip: IPv4 address
:param hostip6: IPv6 address
r  r  r  )rh  r  ri  rj  rk  rÕ  )rM  r  r  r  r  rh  r-   rQ  rÚ  )rh  r  rô  r|  r  )rh  r  r  rg  r  z9See %s for an example configuration include file for BINDz@and %s for further documentation required for secure DNS updatesN)r	  r"  r®  r  r+   r/   rl  rf  rg  rh  r  r�  r  r‰  rŸ  r  rQ  r   rÎ  rà   rþ  r  Únamedtxtr…  rê  )r*   rd  re  r}  r|  rô  r  rM  rj  r  r  rk  r+   r-   s                 r.   r#  r#  ó  s‘  € ô$ ! ×-Ñ-Ø×"Ñ" 8×,Ñ,ÜÐ1°KÑ?Ó@Ð@ä˜X×&Ñ&ÜÐ.°Ñ9Ó:Ð:à�~‰~€Hä Ó0€Jä˜	Ø×)Ñ)Ø×)Ñ)Ø#Ÿk™kØ"'§/¡/Ø(-×(8Ñ(8À'Ø+=ò?ô �6Ô!Ü˜vÔ-àÐ&Ó&Ü˜¨TØ#(§?¡?¸6Ø!(·>±>Ø$Ÿ{™{°zØ"'§.¡.ò		2ð �kÓ! hÔ2IÓ&IÜ˜%¨Ø§¡°*ô	>ô �e§;¡;Ø %§¡¸[Ø#ò%ô �U—^‘^Ø Ÿ;™;°%·/±/Ø(-¯¬¸¿»ÐHØ!&×!2Ñ!2Ø!&×!1Ñ!1ò	3ð
 ‡K�KÐKØ—‘ô!à
‡K�Kð Ø Ÿ>™>õ+r0   )F)NNNNN)^Ú__doc__r\  rÜ   rt  r—  r&   Úbase64r   rì  r¬  Úsamba.tdb_utilr   Úsamba.mdb_utilr   Ú	samba.ndrr   r   r   Úsamba.dcerpcr	   r
   r   Ú
samba.dsdbr   r   r   r   Úsamba.descriptorr   r   r   r   r   r   r   Úsamba.provision.commonr   r   r   r   r   r   Úsamba.samdbr   Úsamba.commonr   r/   r8   ÚDnssrvRpcRecordr:   rY   r`   rg   rn   r{   r‹   ÚDnsPropertyr–   r£   r«   r´   r»   rÃ   rÊ   rï   rò   r  r  r$  r)  r-  r0  r3  r8  r@  rD  rO  rS  rl  r  r‰  rŸ  rÎ  rÒ  rþ  r  r	  r  r  r  r  r  r$  r#  r  r0   r.   Ú<module>r4     s1  ðñ* ã 	Û Û Û Û 
Ý Û Û Ý #Ý #ß *Ý ß -Ñ -÷ó ÷÷ ñ ÷÷ õ 2Ý #òòô"ˆd×"Ñ"ô ô�×%Ñ%ô ô�$×&Ñ&ô ôˆt×#Ñ#ô ô�×$Ñ$ô ô(�×$Ñ$ô ô"�×$Ñ$ô ô�4×#Ñ#ô ô!˜$×*Ñ*ô !ô ˜×)Ñ)ô  ô' × 0Ñ 0ô 'ô%˜d×.Ñ.ô %ô"˜×)Ñ)ô "ô%˜t×/Ñ/ô %ò8òvôò"DòNò<òòòòòòDòZòz2$òjò>.ò4'FòT;0ò|E?òPKòSòlò*TòJò2ò5ò6ð  LPØ(1¸Dô-7ðb 15¸TÈ4Ø%ô_)ðF LPØ59õ?+r0   