ó
    cÛ–i¾Ú  ã                   ó¾  • 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
  S SKJr  S SKJr  S SKrS SKrS SKrS SKJrJr  S SKrS S	KJrJr  S S
KJr  S SKJr  S SKJrJrJrJr  S SKJrJ r   S SK!J"r"J#r#J$r$  S SK!J%r%  S r& " S S5      r'S r(S r)S r*S r+S r,S r-S r.S r/S r0S r1S r2S r3S r4S  r5S! r6S" r7S# r8S$ r9S% r:S& r;S' r<S( r= " S) S*\5      r>S+ r? " S, S-\5      r@ " S. S/\5      rA " S0 S1\5      rB " S2 S3\5      rC " S4 S5\5      rD " S6 S7\5      rE " S8 S9\5      rF " S: S;\5      rG " S< S=\5      rH " S> S?\5      rI " S@ SA\5      rJ " SB SC\5      rKg)Dé    N)ÚWERRORError)Úwerror)Úpack)Ú	inet_ntopÚ	inet_pton)ÚAF_INET)ÚAF_INET6)Ú
ndr_unpackÚndr_pack)Ú	remove_dcÚdsdb_dns)ÚSamDB)Úsystem_session)ÚCommandÚCommandErrorÚOptionÚSuperCommand)ÚdnspÚ	dnsserver)Úrecord_from_stringÚDNSParseErrorÚflag_from_string)Údns_record_matchc                 ó¶   • U R                  5       S:X  a  Sn SU -  n [        R                  " X1U5      nU$ ! [         a  n[        SU < SU< 35      eS nAff = f)NÚ	localhostz	127.0.0.1zncacn_ip_tcp:%s[sign]zConnecting to DNS RPC server z failed with )Úlowerr   ÚRuntimeErrorr   )ÚserverÚlpÚcredsÚbinding_strÚdns_connÚes         Ú2/usr/lib/python3/dist-packages/samba/netcmd/dns.pyÚdns_connectr%   /   sc   € Ø‡|�|ƒ~˜Ó$ØˆØ)¨FÑ2€Kð[Ü×&Ò& {¸Ó>ˆð €Oøô ó [ÝËvÒWXÐYÓZÐZûð[ús   �6 ¶
AÁ AÁAc            
       ó    • \ rS rSrSr\R                  S\R                  S\R                  S\R                  S\R                  S0rS rS	 rS
rg)ÚDnsConnWrapperé;   a  A wrapper around a dnsserver.dnsserver connection that makes it
harder not to report friendly messages.

If, rather than

    dns_conn = dns_connect(server, lp, creds)

you use

    dns_conn = DnsConnWrapper(server, lp, creds)

then various common errors (for example, misspelled zones) on
common operations will raise CommandErrors that turn into
relatively nice messages (when compared to tracebacks).

In addition, if you provide a messages keyword argument, it will
override the defaults. Note that providing None will turn off the
default, letting the original exception shine through.

    messages = {
        werror.WERR_DNS_ERROR_ZONE_DOES_NOT_EXIST: (
            f'Zone {zone} does not exist and so could not be deleted.'),
        werror.WERR_DNS_ERROR_NAME_DOES_NOT_EXIST: None
    }
    res = dns_conn.DnssrvOperation2( # ...
                                    messages=messages)

This example changes the message for ZONE_DOES_NOT_EXIST and
avoids catching NAME_DOES_NOT_EXIST.

Only WERRORErrors are intercepted.
zCould not contact RPC serverzZone already existszThe record does not existzThe zone does not existzInsufficient permissionsc                 ó&   • [        XU5      U l        g ©N)r%   r"   )Úselfr   r   r    s       r$   Ú__init__ÚDnsConnWrapper.__init__e   s   € Ü# F°Ó6ˆ�ó    c                 ó\   ^ ^• [        T R                  U5      mUS;  a  T$ S S.UU 4S jjnU$ )N>   ÚDnssrvQuery2ÚDnssrvOperation2ÚDnssrvEnumRecords2ÚDnssrvUpdateRecord2ÚDnssrvComplexOperation2©Úmessagesc                 óô   >• U c  0 n  T" U6 $ ! [          a`  nUR                  u  p4X0;   a  Uc  e [        X    SU S3U5      eUTR                  ;   a  [        TR                  U    SU S3U5      ee S nAff = f)Nú [Ú])r   Úargsr   Údefault_messages)r6   r:   r#   ÚwerrÚerrstrÚattrr+   s        €€r$   ÚfÚ%DnsConnWrapper.__getattr__.<locals>.fr   sœ   ø€ ØÑØ�ðÙ˜T�{Ð"øÜó 	Ø Ÿv™v‘�ØÓ#Ø‘|àÜ&¨(©.Ð)9¸¸F¸8À1Ð'EÀqÓIÐIØ˜4×0Ñ0Ó0Ü&¨$×*?Ñ*?ÀÑ*EÐ)FÀbÈÈÐPQÐ'RÐTUÓVÐVØûð	ús   ˆ �
A7—AA2Á2A7)Úgetattrr"   )r+   Únamer?   r>   s   `  @r$   Ú__getattr__ÚDnsConnWrapper.__getattr__h   s;   ù€ Ü�t—}‘} dÓ+ˆØð 'ó 'ð ˆKà"÷ 	ñ 	ð" ˆr.   )r"   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   ÚWERR_DNS_ERROR_DS_UNAVAILABLEÚ"WERR_DNS_ERROR_ZONE_ALREADY_EXISTSÚ$WERR_DNS_ERROR_RECORD_DOES_NOT_EXISTÚ"WERR_DNS_ERROR_NAME_DOES_NOT_EXISTÚWERR_ACCESS_DENIEDr;   r,   rC   Ú__static_attributes__© r.   r$   r'   r'   ;   sX   † ñðD 	×,Ñ,Ð.LØ×1Ñ1Ð3HØ×3Ñ3Ð5PØ×1Ñ1Ð4MØ×!Ñ!Ð#=ðÐò7õr.   r'   c                 ó8   • U S:X  a  SnU$ U S:X  a  SnU$ SU -  nU$ )Nr   ÚFALSEé   ÚTRUEúUNKNOWN (0x%x)rP   )ÚflagÚrets     r$   Úbool_stringrX   †   s;   € ØˆqƒyØˆð
 €Jð	 
�‹Øˆð €Jð  Ñ%ˆØ€Jr.   c                 óZ   • S nU H  nU[        X5      :X  d  M  Un  O   U(       d  SU-  nU$ )NrU   ©rA   )ÚmoduleÚ	enum_defsÚvaluerW   r#   s        r$   Úenum_stringr^   �   s:   € Ø
€CÛˆØ”G˜FÓ&Õ&ØˆCÙñ ö Ø Ñ&ˆØ€Jr.   c                 óh   • SnU H   nU[        X5      -  (       d  M  USU-  -  nM"     U(       d  SnU$ )NÚ z%s ÚNONErZ   )r[   Úbitmap_defsr]   rW   Úbs        r$   Úbitmap_stringrd   ›   s>   € Ø
€CÛˆØ”7˜6Ó%×%Ñ%Ø�5˜1‘9ÑŠCñ ö ØˆØ€Jr.   c                 ó*   • / SQn[        [        X5      $ )N)ÚDNS_BOOT_METHOD_UNINITIALIZEDÚDNS_BOOT_METHOD_FILEÚDNS_BOOT_METHOD_REGISTRYÚDNS_BOOT_METHOD_DIRECTORY©r^   r   )Úboot_methodr\   s     r$   Úboot_method_stringrl   ¥   s   € òJ€Iä”y )Ó9Ð9r.   c                 ó*   • / SQn[        [        X5      $ )N)ÚDNS_ALLOW_RFC_NAMES_ONLYÚDNS_ALLOW_NONRFC_NAMESÚDNS_ALLOW_MULTIBYTE_NAMESÚDNS_ALLOW_ALL_NAMESrj   )Ú
check_flagr\   s     r$   Úname_check_flag_stringrs   «   s   € òE€Iä”y )Ó8Ð8r.   c                 ó*   • / SQn[        [        X5      $ )N)ÚDNS_ZONE_TYPE_CACHEÚDNS_ZONE_TYPE_PRIMARYÚDNS_ZONE_TYPE_SECONDARYÚDNS_ZONE_TYPE_STUBÚDNS_ZONE_TYPE_FORWARDERÚDNS_ZONE_TYPE_SECONDARY_CACHE©r^   r   )Ú	zone_typer\   s     r$   Úzone_type_stringr}   ±   s   € òM€Iô ”t˜YÓ2Ð2r.   c                 ó*   • / SQn[        [        X5      $ )N)ÚDNS_ZONE_UPDATE_OFFÚDNS_ZONE_UPDATE_UNSECUREÚDNS_ZONE_UPDATE_SECUREr{   )Úzone_updater\   s     r$   Úzone_update_stringrƒ   ¸   s   € ò+€Iä”t˜YÓ4Ð4r.   c                 ó*   • / SQn[        [        X5      $ )N)ÚDNS_ZONE_SECSECURE_NO_SECURITYÚDNS_ZONE_SECSECURE_NS_ONLYÚDNS_ZONE_SECSECURE_LIST_ONLYÚDNS_ZONE_SECSECURE_NO_XFERrj   )Úsecurityr\   s     r$   Úzone_secondary_security_stringrŠ   ¾   s   € òO€Iä”y )Ó6Ð6r.   c                 ó*   • / SQn[        [        X5      $ )N)ÚDNS_ZONE_NOTIFY_OFFÚDNS_ZONE_NOTIFY_ALL_SECONDARIESÚDNS_ZONE_NOTIFY_LIST_ONLYrj   )Únotify_levelr\   s     r$   Úzone_notify_level_stringr�   Ä   s   € ò.€Iä”y )Ó:Ð:r.   c                 ó*   • / SQn[        [        X5      $ )N)ÚDNS_DP_AUTOCREATEDÚDNS_DP_LEGACYÚDNS_DP_DOMAIN_DEFAULTÚDNS_DP_FOREST_DEFAULTÚDNS_DP_ENLISTEDÚDNS_DP_DELETED©rd   r   )Údp_flagsrb   s     r$   Údp_flags_stringrš   Ê   s   € òQ€Käœ KÓ:Ð:r.   c                 ó*   • / SQn[        [        X5      $ )N)	ÚDNS_RPC_ZONE_PAUSEDÚDNS_RPC_ZONE_SHUTDOWNÚDNS_RPC_ZONE_REVERSEÚDNS_RPC_ZONE_AUTOCREATEDÚDNS_RPC_ZONE_DSINTEGRATEDÚDNS_RPC_ZONE_AGINGÚDNS_RPC_ZONE_UPDATE_UNSECUREÚDNS_RPC_ZONE_UPDATE_SECUREÚDNS_RPC_ZONE_READONLYr˜   )Úflagsrb   s     r$   Úzone_flags_stringr¦   Ð   s   € ò,€Kô
 œ KÓ7Ð7r.   c           	      óÄ   • / nU (       d  U$ [        U R                  5       H;  n[        [        [	        SU R
                  U   5      5      nUR                  U5        M=     U$ )NÚI)ÚrangeÚ	AddrCountr   r   r   Ú	AddrArrayÚappend)ÚarrayrW   ÚiÚaddrs       r$   Úip4_array_stringr°   Ù   sQ   € Ø
€CÞØˆ
Ü�5—?‘?Ö#ˆÜœ¤$ s¨E¯O©O¸AÑ,>Ó"?Ó@ˆØ�
‰
�4Öñ $ð €Jr.   c                 ó  • / nU (       d  U$ [        U R                  5       HÚ  nU R                  U   R                  S   S:X  aB  [        R
                  " S/U R                  U   R                  SS Q76 n[        [        U5      nOdU R                  U   R                  S   S:X  aB  [        R
                  " S/U R                  U   R                  SS Q76 n[        [        U5      nOS	nUR                  U5        MÜ     U$ )
Nr   é   Ú4Bé   é   é   Ú16Bé   ÚUNKNOWN)
r©   rª   r«   ÚMaxSaÚstructr   r   r   r	   r¬   )r­   rW   r®   Úxr¯   s        r$   Údns_addr_array_stringr½   ã   sÜ   € Ø
€CÞØˆ
Ü�5—?‘?Ö#ˆØ�?‰?˜1Ñ×#Ñ# AÑ&¨$Ó.Ü—’˜DÐA 5§?¡?°1Ñ#5×#;Ñ#;¸A¸aÐ#@ÒAˆAÜœW aÓ(‰DØ�_‰_˜QÑ×%Ñ% aÑ(¨DÓ0Ü—’˜EÐC E§O¡O°AÑ$6×$<Ñ$<¸Q¸rÐ$BÒCˆAÜœX qÓ)‰DàˆDØ�
‰
�4Öñ $ð €Jr.   c                 ób   •  [        U 5      $ ! [         a  n[        UR                  6 eS nAff = fr*   )r   r   r   r:   )Úrec_typer#   s     r$   Údns_type_flagrÀ   ô   s1   € ð$Ü Ó)Ð)øÜó $Ü˜AŸF™FÐ#Ð#ûð$ús   ‚
 �
.—)©.c                 óÎ   • U R                  5       nUS:X  a  [        R                  nU$ US:X  a  [        R                  nU$ US:X  a  [        R                  nU$ [        SU -  5      e)NÚW2KÚDOTNETÚLONGHORNzUnknown client version %s)Úupperr   ÚDNS_CLIENT_VERSION_W2KÚDNS_CLIENT_VERSION_DOTNETÚDNS_CLIENT_VERSION_LONGHORNr   )Úcli_versionÚversionÚclient_versions      r$   Údns_client_versionrÌ   û   sx   € Ø×ÑÓ!€GØ�%ÓÜ"×9Ñ9ˆð Ðð 
�HÓ	Ü"×<Ñ<ˆð
 Ðð	 
�JÓ	Ü"×>Ñ>ˆð Ðô Ð6¸ÑDÓEÐEr.   c                 óþ  • U R                  SUR                  -  5        U R                  S[        UR                  5      -  5        U R                  S[	        UR
                  5      -  5        U R                  S[	        UR                  5      -  5        U R                  S[	        UR                  5      -  5        U R                  SUR                  -  5        U R                  SUR                  -  5        U[        R                  :w  av  U R                  S[        UR                  5      -  5        U R                  S	[        UR                  5      -  5        U R                  S
[        UR                  5      -  5        OuU R                  S[!        UR                  5      -  5        U R                  S	[!        UR                  5      -  5        U R                  S
[!        UR                  5      -  5        U R                  SUR"                  -  5        U R                  SUR$                  -  5        U R                  SUR&                  -  5        U R                  SUR(                  -  5        U R                  S[+        UR,                  5      -  5        U R                  SUR.                  -  5        U R                  SUR0                  -  5        U R                  SUR2                  -  5        U R                  SUR4                  -  5        U R                  SUR6                  -  5        U R                  SUR8                  -  5        U R                  SUR:                  -  5        U R                  SUR<                  -  5        U R                  S[	        UR>                  5      -  5        U R                  S[	        UR@                  5      -  5        U R                  S[	        URB                  5      -  5        U R                  S[	        URD                  5      -  5        U R                  S[	        URF                  5      -  5        U R                  S[	        URH                  5      -  5        U R                  S[	        URJ                  5      -  5        U R                  S[	        URL                  5      -  5        U R                  S [	        URN                  5      -  5        U R                  S![	        URP                  5      -  5        U R                  S"[	        URR                  5      -  5        U R                  S#[	        URT                  5      -  5        U R                  S$[	        URV                  5      -  5        U[        RX                  :w  Ga­  U R                  S%URZ                  -  5        U R                  S&[!        UR\                  5      -  5        U R                  S'UR^                  -  5        U R                  S(UR`                  -  5        U R                  S)URb                  -  5        U R                  S*URd                  -  5        U R                  S+URf                  -  5        U R                  S,URh                  -  5        U R                  S-URj                  -  5        U R                  S.URl                  -  5        U R                  S/URn                  -  5        U R                  S0URp                  -  5        U R                  S1URr                  -  5        U R                  S2URt                  -  5        U[        R                  :X  a(  U R                  S3[	        URv                  5      -  5        g g )4Nz%  dwVersion                   : 0x%x
z#  fBootMethod                 : %s
z#  fAdminConfigured            : %s
ú#  fAllowUpdate                : %s
z#  fDsAvailable                : %s
z#  pszServerName               : %s
z#  pszDsContainer              : %s
z#  aipServerAddrs              : %s
z#  aipListenAddrs              : %s
z#  aipForwarders               : %s
z#  dwLogLevel                  : %d
z#  dwDebugLevel                : %d
z#  dwForwardTimeout            : %d
z%  dwRpcPrototol               : 0x%x
z#  dwNameCheckFlag             : %s
z#  cAddressAnswerLimit         : %d
z#  dwRecursionRetry            : %d
z#  dwRecursionTimeout          : %d
z#  dwMaxCacheTtl               : %d
z#  dwDsPollingInterval         : %d
z#  dwScavengingInterval        : %d
z#  dwDefaultRefreshInterval    : %d
z#  dwDefaultNoRefreshInterval  : %d
z#  fAutoReverseZones           : %s
z#  fAutoCacheUpdate            : %s
z#  fRecurseAfterForwarding     : %s
z#  fForwardDelegations         : %s
z#  fNoRecursion                : %s
z#  fSecureResponses            : %s
z#  fRoundRobin                 : %s
z#  fLocalNetPriority           : %s
z#  fBindSecondaries            : %s
z#  fWriteAuthorityNs           : %s
z#  fStrictFileParsing          : %s
z#  fLooseWildcarding           : %s
z#  fDefaultAgingState          : %s
ú%  dwRpcStructureVersion       : 0x%x
z#  aipLogFilter                : %s
z#  pwszLogFilePath             : %s
z#  pszDomainName               : %s
z#  pszForestName               : %s
z#  pszDomainDirectoryPartition : %s
z#  pszForestDirectoryPartition : %s
z%  dwLocalNetPriorityNetMask   : 0x%x
z#  dwLastScavengeTime          : %d
z#  dwEventLogLevel             : %d
z#  dwLogFileMaxSize            : %d
z#  dwDsForestVersion           : %d
z#  dwDsDomainVersion           : %d
z#  dwDsDsaVersion              : %d
z#  fReadOnlyDC                 : %s
)<ÚwriteÚ	dwVersionrl   ÚfBootMethodrX   ÚfAdminConfiguredÚfAllowUpdateÚfDsAvailableÚpszServerNameÚpszDsContainerr   ÚDNSSRV_TYPEID_SERVER_INFOr°   ÚaipServerAddrsÚaipListenAddrsÚaipForwardersr½   Ú
dwLogLevelÚdwDebugLevelÚdwForwardTimeoutÚdwRpcProtocolrs   ÚdwNameCheckFlagÚcAddressAnswerLimitÚdwRecursionRetryÚdwRecursionTimeoutÚdwMaxCacheTtlÚdwDsPollingIntervalÚdwScavengingIntervalÚdwDefaultRefreshIntervalÚdwDefaultNoRefreshIntervalÚfAutoReverseZonesÚfAutoCacheUpdateÚfRecurseAfterForwardingÚfForwardDelegationsÚfNoRecursionÚfSecureResponsesÚfRoundRobinÚfLocalNetPriorityÚfBindSecondariesÚfWriteAuthorityNsÚfStrictFileParsingÚfLooseWildcardingÚfDefaultAgingStateÚDNSSRV_TYPEID_SERVER_INFO_W2KÚdwRpcStructureVersionÚaipLogFilterÚpwszLogFilePathÚpszDomainNameÚpszForestNameÚpszDomainDirectoryPartitionÚpszForestDirectoryPartitionÚdwLocalNetPriorityNetMaskÚdwLastScavengeTimeÚdwEventLogLevelÚdwLogFileMaxSizeÚdwDsForestVersionÚdwDsDomainVersionÚdwDsDsaVersionÚfReadOnlyDC)ÚoutfÚtypeidÚ
serverinfos      r$   Úprint_serverinfor	    sñ  € Ø‡J�JÐ7¸*×:NÑ:NÑNÔOØ‡J�JÐ5Ô8JÈ:×KaÑKaÓ8bÑbÔcØ‡J�JÐ5¼ÀJ×D_ÑD_Ó8`Ñ`ÔaØ‡J�JÐ5¼ÀJ×D[ÑD[Ó8\Ñ\Ô]Ø‡J�JÐ5¼ÀJ×D[ÑD[Ó8\Ñ\Ô]Ø‡J�JÐ5¸
×8PÑ8PÑPÔQØ‡J�JÐ5¸
×8QÑ8QÑQÔRà”×4Ñ4Ó4Ø�
‰
Ð9Ü# J×$=Ñ$=Ó>ñ?ô 	@à�
‰
Ð9Ü# J×$=Ñ$=Ó>ñ?ô 	@à�
‰
Ð9Ü# J×$<Ñ$<Ó=ñ>õ 	?ð 	�
‰
Ð9Ü(¨×)BÑ)BÓCñDô 	Eà�
‰
Ð9Ü(¨×)BÑ)BÓCñDô 	Eà�
‰
Ð9Ü(¨×)AÑ)AÓBñCô 	Dð 	‡J�JÐ5¸
×8MÑ8MÑMÔNØ‡J�JÐ5¸
×8OÑ8OÑOÔPØ‡J�JÐ5¸
×8SÑ8SÑSÔTØ‡J�JÐ7¸*×:RÑ:RÑRÔSØ‡J�JÐ5Ô8NÈz×OiÑOiÓ8jÑjÔkØ‡J�JÐ5¸
×8VÑ8VÑVÔWØ‡J�JÐ5¸
×8SÑ8SÑSÔTØ‡J�JÐ5¸
×8UÑ8UÑUÔVØ‡J�JÐ5¸
×8PÑ8PÑPÔQØ‡J�JÐ5¸
×8VÑ8VÑVÔWØ‡J�JÐ5¸
×8WÑ8WÑWÔXØ‡J�JÐ5¸
×8[Ñ8[Ñ[Ô\Ø‡J�JÐ5¸
×8]Ñ8]Ñ]Ô^Ø‡J�JÐ5¼ÀJ×D`ÑD`Ó8aÑaÔbØ‡J�JÐ5¼ÀJ×D_ÑD_Ó8`Ñ`ÔaØ‡J�JÐ5¼ÀJ×DfÑDfÓ8gÑgÔhØ‡J�JÐ5¼ÀJ×DbÑDbÓ8cÑcÔdØ‡J�JÐ5¼ÀJ×D[ÑD[Ó8\Ñ\Ô]Ø‡J�JÐ5¼ÀJ×D_ÑD_Ó8`Ñ`ÔaØ‡J�JÐ5¼ÀJ×DZÑDZÓ8[Ñ[Ô\Ø‡J�JÐ5¼ÀJ×D`ÑD`Ó8aÑaÔbØ‡J�JÐ5¼ÀJ×D_ÑD_Ó8`Ñ`ÔaØ‡J�JÐ5¼ÀJ×D`ÑD`Ó8aÑaÔbØ‡J�JÐ5¼ÀJ×DaÑDaÓ8bÑbÔcØ‡J�JÐ5¼ÀJ×D`ÑD`Ó8aÑaÔbØ‡J�JÐ5¼ÀJ×DaÑDaÓ8bÑbÔcà”×8Ñ8Ô8Ø�
‰
Ð;¸j×>^Ñ>^Ñ^Ô_Ø�
‰
Ð9Ô<QÐR\×RiÑRiÓ<jÑjÔkØ�
‰
Ð9¸J×<VÑ<VÑVÔWØ�
‰
Ð9¸J×<TÑ<TÑTÔUØ�
‰
Ð9¸J×<TÑ<TÑTÔUØ�
‰
Ð9¸J×<bÑ<bÑbÔcØ�
‰
Ð9¸J×<bÑ<bÑbÔcà�
‰
Ð;¸j×>bÑ>bÑbÔcØ�
‰
Ð9¸J×<YÑ<YÑYÔZØ�
‰
Ð9¸J×<VÑ<VÑVÔWØ�
‰
Ð9¸J×<WÑ<WÑWÔXØ�
‰
Ð9¸J×<XÑ<XÑXÔYØ�
‰
Ð9¸J×<XÑ<XÑXÔYØ�
‰
Ð9¸J×<UÑ<UÑUÔVà”×4Ñ4Ó4Ø�
‰
Ð9¼KÈ
×H^ÑH^Ó<_Ñ_Õ`ð 5r.   c                 ó4  • U R                  SUR                  -  5        U R                  S[        UR                  5      -  5        U R                  S[	        UR
                  5      -  5        U R                  S[        UR                  5      -  5        U R                  S[	        UR                  5      -  5        U R                  S[	        UR                  5      -  5        U R                  S[	        UR                  5      -  5        U R                  S[	        UR                  5      -  5        U R                  S	UR                  -  5        U[        R                  :w  a(  U R                  S
[        UR                   5      -  5        O'U R                  S
[#        UR                   5      -  5        U R                  S[%        UR&                  5      -  5        U R                  S[)        UR*                  5      -  5        U[        R                  :w  aO  U R                  S[        UR,                  5      -  5        U R                  S[        UR.                  5      -  5        ONU R                  S[#        UR,                  5      -  5        U R                  S[#        UR.                  5      -  5        U R                  S[	        UR0                  5      -  5        U R                  S[	        UR2                  5      -  5        U R                  S[	        UR4                  5      -  5        U R                  SUR6                  -  5        U R                  SUR8                  -  5        U R                  SUR:                  -  5        U[        R                  :w  a(  U R                  S[        UR<                  5      -  5        O'U R                  S[#        UR<                  5      -  5        U[        R>                  :w  Ga\  U R                  SUR@                  -  5        U R                  SURB                  -  5        U R                  SURD                  -  5        U[        R                  :w  a(  U R                  S[        URF                  5      -  5        O'U R                  S[#        URF                  5      -  5        U R                  S[I        URJ                  5      -  5        U R                  SURL                  -  5        U R                  SURN                  -  5        U R                  SURP                  -  5        U R                  SURR                  -  5        U[        R                  :X  a²  U R                  S[	        URT                  5      -  5        U R                  S [	        URV                  5      -  5        U R                  S![	        URX                  5      -  5        U R                  S"URZ                  -  5        U R                  S#UR\                  -  5        g g )$Nú#  pszZoneName                 : %s
z#  dwZoneType                  : %s
z#  fReverse                    : %s
rÎ   z#  fPaused                     : %s
z#  fShutdown                   : %s
z#  fAutoCreated                : %s
z#  fUseDatabase                : %s
z#  pszDataFile                 : %s
z#  aipMasters                  : %s
z#  fSecureSecondaries          : %s
z#  fNotifyLevel                : %s
z#  aipSecondaries              : %s
z#  aipNotify                   : %s
z#  fUseWins                    : %s
z#  fUseNbstat                  : %s
z#  fAging                      : %s
z#  dwNoRefreshInterval         : %d
z#  dwRefreshInterval           : %d
z#  dwAvailForScavengeTime      : %d
z#  aipScavengeServers          : %s
rÏ   z#  dwForwarderTimeout          : %d
z#  fForwarderSlave             : %d
z#  aipLocalMasters             : %s
ú#  dwDpFlags                   : %s
ú#  pszDpFqdn                   : %s
z#  pwszZoneDn                  : %s
z#  dwLastSuccessfulSoaCheck    : %d
z#  dwLastSuccessfulXfr         : %d
z#  fQueuedForBackgroundLoad    : %s
z#  fBackgroundLoadInProgress   : %s
z#  fReadOnlyZone               : %s
z#  dwLastXfrAttempt            : %d
z#  dwLastXfrResult             : %d
)/rÐ   ÚpszZoneNamer}   Ú
dwZoneTyperX   ÚfReverserƒ   rÔ   ÚfPausedÚ	fShutdownÚfAutoCreatedÚfUseDatabaseÚpszDataFiler   ÚDNSSRV_TYPEID_ZONE_INFOr°   Ú
aipMastersr½   rŠ   ÚfSecureSecondariesr�   ÚfNotifyLevelÚaipSecondariesÚ	aipNotifyÚfUseWinsÚ
fUseNbstatÚfAgingÚdwNoRefreshIntervalÚdwRefreshIntervalÚdwAvailForScavengeTimeÚaipScavengeServersÚDNSSRV_TYPEID_ZONE_INFO_W2Kr÷   ÚdwForwarderTimeoutÚfForwarderSlaveÚaipLocalMastersrš   Ú	dwDpFlagsÚ	pszDpFqdnÚ
pwszZoneDnÚdwLastSuccessfulSoaCheckÚdwLastSuccessfulXfrÚfQueuedForBackgroundLoadÚfBackgroundLoadInProgressÚfReadOnlyZoneÚdwLastXfrAttemptÚdwLastXfrResult)r  r  Úzoneinfos      r$   Úprint_zoneinfor2  P  sç  € Ø‡J�JÐ5¸×8LÑ8LÑLÔMØ‡J�JÐ5Ô8HÈ×I\ÑI\Ó8]Ñ]Ô^Ø‡J�JÐ5¼ÀH×DUÑDUÓ8VÑVÔWØ‡J�JÐ5Ô8JÈ8×K`ÑK`Ó8aÑaÔbØ‡J�JÐ5¼ÀH×DTÑDTÓ8UÑUÔVØ‡J�JÐ5¼ÀH×DVÑDVÓ8WÑWÔXØ‡J�JÐ5¼ÀH×DYÑDYÓ8ZÑZÔ[Ø‡J�JÐ5¼ÀH×DYÑDYÓ8ZÑZÔ[Ø‡J�JÐ5¸×8LÑ8LÑLÔMØ”×2Ñ2Ó2Ø�
‰
Ð9Ü# H×$7Ñ$7Ó8ñ9õ 	:ð 	�
‰
Ð9Ü(¨×)<Ñ)<Ó=ñ>ô 	?à‡J�JÐ5Ô8VÐW_×WrÑWrÓ8sÑsÔtØ‡J�JÐ5Ô8PÐQY×QfÑQfÓ8gÑgÔhØ”×2Ñ2Ó2Ø�
‰
Ð9Ü# H×$;Ñ$;Ó<ñ=ô 	>à�
‰
Ð9Ü# H×$6Ñ$6Ó7ñ8õ 	9ð 	�
‰
Ð9Ü(¨×)@Ñ)@ÓAñBô 	Cà�
‰
Ð9Ü(¨×);Ñ);Ó<ñ=ô 	>à‡J�JÐ5¼ÀH×DUÑDUÓ8VÑVÔWØ‡J�JÐ5¼ÀH×DWÑDWÓ8XÑXÔYØ‡J�JÐ5¼ÀHÇOÁOÓ8TÑTÔUØ‡J�JÐ5¸×8TÑ8TÑTÔUØ‡J�JÐ5¸×8RÑ8RÑRÔSØ‡J�JÐ5¸×8WÑ8WÑWÔXØ”×2Ñ2Ó2Ø�
‰
Ð9Ü# H×$?Ñ$?Ó@ñAõ 	Bð 	�
‰
Ð9Ü(¨×)DÑ)DÓEñFô 	Gð ”×6Ñ6Ô6Ø�
‰
Ð;¸h×>\Ñ>\Ñ\Ô]Ø�
‰
Ð9¸H×<WÑ<WÑWÔXØ�
‰
Ð9¸H×<TÑ<TÑTÔUØ”Y×6Ñ6Ó6Ø�J‰JÐ=Ü'¨×(@Ñ(@ÓAñBõ Cð �J‰JÐ=Ü,¨X×-EÑ-EÓFñGô Hà�
‰
Ð9¼OÈH×L^ÑL^Ó<_Ñ_Ô`Ø�
‰
Ð9¸H×<NÑ<NÑNÔOØ�
‰
Ð9¸H×<OÑ<OÑOÔPØ�
‰
Ð9¸H×<]Ñ<]Ñ]Ô^Ø�
‰
Ð9¸H×<XÑ<XÑXÔYà”×2Ñ2Ó2Ø�
‰
Ð9¼KÈ×HiÑHiÓ<jÑjÔkØ�
‰
Ð9¼KÈ×HjÑHjÓ<kÑkÔlØ�
‰
Ð9¼KÈ×H^ÑH^Ó<_Ñ_Ô`Ø�
‰
Ð9¸H×<UÑ<UÑUÔVØ�
‰
Ð9¸H×<TÑ<TÑTÕUð 3r.   c                 óÌ  • U R                  SUR                  -  5        U R                  S[        UR                  5      -  5        U R                  S[	        UR
                  5      -  5        U R                  SUR                  -  5        U[        R                  :w  aF  U R                  S[        UR                  5      -  5        U R                  SUR                  -  5        g g )Nr  z#  Flags                       : %s
z#  ZoneType                    : %s
z#  Version                     : %s
r  r  )rÐ   r  r¦   ÚFlagsr}   ÚZoneTypeÚVersionr   ÚDNSSRV_TYPEID_ZONE_W2Krš   r'  r(  )r  r  Úzones      r$   Ú
print_zoner9  ‘  s¬   € Ø‡J�JÐ5¸×8HÑ8HÑHÔIØ‡J�JÐ5Ô8IÈ$Ï*É*Ó8UÑUÔVØ‡J�JÐ5Ô8HÈÏÉÓ8WÑWÔXØ‡J�JÐ5¸¿¹ÑDÔEà”×1Ñ1Ó1Ø�
‰
Ð9¼OÈDÏNÉNÓ<[Ñ[Ô\Ø�
‰
Ð9¸D¿N¹NÑJÕKð 2r.   c                 ó    • U R                  SUR                  -  5        UR                   H   nU R                  S5        [        XU5        M"     g )Nz  %d zone(s) found
Ú
)rÐ   ÚdwZoneCountÚ	ZoneArrayr9  )r  r  Úzonesr8  s       r$   Úprint_enumzonesr?  œ  s>   € Ø‡J�JÐ%¨×(9Ñ(9Ñ9Ô:Ø—”ˆØ�
‰
�4ÔÜ�4 Ö&ò  r.   c                 ó¦  • UR                   [        R                  :X  a  SUR                  -  nGOèUR                   [        R                  :X  a  SUR                  -  nGO¹UR                   [        R
                  :X  a  SUR                  R                  -  nGO€UR                   [        R                  :X  a  SUR                  R                  -  nGOGUR                   [        R                  :X  a  SUR                  R                  -  nGOUR                   [        R                  :X  a®  SUR                  R                  UR                  R                  UR                  R                  UR                  R                  UR                  R                  UR                  R                  R                  UR                  R                   R                  4-  nGOBUR                   [        R"                  :X  a:  SUR                  R$                  R                  UR                  R&                  4-  nOêUR                   [        R(                  :X  ad  SUR                  R*                  R                  UR                  R,                  UR                  R.                  UR                  R0                  4-  nOhUR                   [        R2                  :X  aH  UR                  R                   Vs/ s H  nS	UR                  -  PM     nnS
SR5                  U5      -  nOSnU R7                  SX!R8                  UR:                  UR<                  4-  5        g s  snf )NzA: %szAAAA: %szPTR: %szNS: %sz	CNAME: %szKSOA: serial=%d, refresh=%d, retry=%d, expire=%d, minttl=%d, ns=%s, email=%szMX: %s (%d)zSRV: %s (%d, %d, %d)z"%s"zTXT: %sÚ,z	Unknown: z%    %s (flags=%x, serial=%d, ttl=%d)
)ÚwTyper   Ú
DNS_TYPE_AÚdataÚDNS_TYPE_AAAAÚDNS_TYPE_PTRÚstrÚDNS_TYPE_NSÚDNS_TYPE_CNAMEÚDNS_TYPE_SOAÚ
dwSerialNoÚ	dwRefreshÚdwRetryÚdwExpireÚdwMinimumTtlÚNamePrimaryServerÚZoneAdministratorEmailÚDNS_TYPE_MXÚnameExchangeÚwPreferenceÚDNS_TYPE_SRVÚ
nameTargetÚwPortÚ	wPriorityÚwWeightÚDNS_TYPE_TXTÚjoinrÐ   ÚdwFlagsÚdwSerialÚdwTtlSeconds)r  ÚrecÚmesgrB   Úslists        r$   Úprint_dns_recordrb  £  sN  € Ø
‡y�y”D—O‘OÓ#Ø˜#Ÿ(™(Ñ#ŠØ	�‰”d×(Ñ(Ó	(Ø˜SŸX™XÑ&ŠØ	�‰”d×'Ñ'Ó	'Ø˜CŸH™HŸL™LÑ)ŠØ	�‰”d×&Ñ&Ó	&Ø˜3Ÿ8™8Ÿ<™<Ñ(ŠØ	�‰”d×)Ñ)Ó	)Ø˜cŸh™hŸl™lÑ+ŠØ	�‰”d×'Ñ'Ó	'Ø\Ø—H‘H×'Ñ'Ø—H‘H×&Ñ&Ø—H‘H×$Ñ$Ø—H‘H×%Ñ%Ø—H‘H×)Ñ)Ø—H‘H×.Ñ.×2Ñ2Ø—H‘H×3Ñ3×7Ñ7ð`9ñ 9Šð 
�‰”d×&Ñ&Ó	&Ø §¡× 5Ñ 5× 9Ñ 9¸3¿8¹8×;OÑ;OÐPÑP‰Ø	�‰”d×'Ñ'Ó	'Ø%¨¯©×)<Ñ)<×)@Ñ)@À#Ç(Á(Ç.Á.Ø),¯©×);Ñ);¸S¿X¹X×=MÑ=Mð)Oñ O‰à	�‰”d×'Ñ'Ó	'Ø/2¯x©x¯|ª|Ó<ª| t�˜$Ÿ(™(Ô"©|ˆÐ<Ø˜3Ÿ8™8 E›?Ñ*‰àˆØ‡J�JÐ7Ø—k‘k 3§<¡<°×1AÑ1Að;Cñ Cõ Dùò	 =s   Ë&Mc                 óä   • UR                    H`  nU R                  SUR                  R                  UR                  UR
                  4-  5        UR                   H  n[        X5        M     Mb     g )Nz#  Name=%s, Records=%d, Children=%d
)r_  rÐ   ÚdnsNodeNamerG  ÚwRecordCountÚdwChildCountÚrecordsrb  )r  rg  r_  Údns_recs       r$   Úprint_dnsrecordsri  Å  s`   € Ø�{Œ{ˆØ�
‰
Ð9Ø—O‘O×'Ñ'Ø×$Ñ$Ø×$Ñ$ð=&ñ &ô 	'ð —{”{ˆGÜ  Ö/ó #ò r.   c                 óh   •  [        X5      nU$ ! [         a  n[        UR                  6 S eS nAff = fr*   )r   r   r   r:   )Úrecord_typerD  r_  r#   s       r$   Údata_to_dns_recordrl  Ð  s;   € ð.Ü  Ó3ˆð €Jøô ó .Ü˜AŸF™FÐ#¨Ð-ûð.ús   ‚ �
1™,¬1c            	       ó”   • \ rS rSrSrSrS/r\R                  \R                  \R                  S.r\" SSSS	/ S
QSS9/r  SS jrSrg)Úcmd_serverinfoiÙ  zQuery for Server information.ú%prog <server> [options]r   ©Ú	sambaoptsÚversionoptsÚcredoptsú--client-versionúClient VersionÚlonghornúw2k|dotnet|longhorn©Úw2kÚdotnetrv  Úcli_ver©ÚhelpÚdefaultÚmetavarÚchoicesÚdestNc                 ó  • UR                  5       U l        UR                  U R                  5      U l        [	        XR                  U R                  5      n[        U5      nUR                  USUS S5      u  p‰[        U R                  X‰5        g )Nr   Ú
ServerInfo)	Úget_loadparmr   Úget_credentialsr    r'   rÌ   r0   r	  r  )
r+   r   r{  rq  rs  rr  r"   rË   r  Úress
             r$   ÚrunÚcmd_serverinfo.runì  sr   € à×(Ñ(Ó*ˆŒØ×-Ñ-¨d¯g©gÓ6ˆŒ
Ü! &¯'©'°4·:±:Ó>ˆä+¨GÓ4ˆà×+Ñ+¨N¸A¸vØ,0°,ó@‰ˆä˜Ÿ™ FÕ0r.   ©r    r   ©NNN©rE   rF   rG   rH   rI   ÚsynopsisÚ
takes_argsÚoptionsÚSambaOptionsÚVersionOptionsÚCredentialsOptionsÚtakes_optiongroupsr   Útakes_optionsr‡  rO   rP   r.   r$   rn  rn  Ù  sg   † Ù'à)€Hà�€Jð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐñ 	Ð!Ð(8Ø!Ð+@Ú4¸9ñ	Fð€Mð =AØ÷
1r.   rn  c           
      ó´   • U  HR  u  p4pVSUR                  5       -   n[        UU SU SU S3SUS9nUR                  U5        UR                  X5Xg45        MT     g)z$Generate options for cmd_zoneoptionsz--r8   Ú-r9   Úint)r}  Útyper�  N)r   r   r¬   )	Útabler“  Úinteger_propertiesÚkÚdocÚ_minÚ_maxÚoÚopts	            r$   Ú_add_integer_optionsr   ù  sl   € ã#Ñˆ�Ø�1—7‘7“9ÑˆÜ�aØ!˜U " T F¨!¨D¨6°Ð3Ø Øñˆð 	×Ñ˜SÔ!Ø×!Ñ! 1¨DÐ"4Ö5ò $r.   c                   ó
  • \ rS rSrSrSrSS/r\R                  \R                  \R                  S.r\" SSS	S
/ SQSS9\" SSSS9\" SSSS9\" SSSS9\" SSSSS9/r/ r\" / SQ\\5             S$S jrS rS  rS! rS" rS#rg)%Úcmd_zoneoptionsi  zChange zone aging options.ú%prog <server> <zone> [options]r   r8  rp  rt  ru  rv  rw  rx  r{  r|  z--mark-old-records-staticz
YYYY-MM-DDz0Make records older than this (YYYY-MM-DD) static)r  r}  z--mark-records-static-regexÚREGEXPz4Make records matching this regular expression staticz--mark-records-dynamic-regexz5Make records matching this regular expression dynamicz-nz	--dry-runÚ
store_truez,Don't change anything, say what would happen)Úactionr}  ))ÚAgingzEnable record agingr   rS   )ÚNoRefreshIntervalz3Aging no refresh interval in hours (0: use default)r   é0V )ÚRefreshIntervalz0Aging refresh interval in hours (0: use default)r   r©  Nc                 óÄ  • UR                  5       U l        UR                  U R                  5      U l        [	        XR                  U R                  5      n[        U5      n[        R                  nU R                   HÎ  u  nnnnUR                  U5      c  M  X¿   nUb  UU:  a  [        U SU 35      eUb  UU:”  a  [        U SU 35      e[        R                  " 5       nUUl        UUl        U(       a  [        SU SU SU 3U R                  S9  M›   UR!                  USUUSSUU5        [        S
U SU 3U R                  S9  MÐ     SnUU	U
4 H  nUc  M  US-  nM     US:”  a  [        S5      eUb  U R%                  XUU5        U	b  U R'                  UUU	U5        U
b  U R)                  UUU
U5        g g ! ["         a  n[        S	U SU 35      S eS nAff = f)Nz must be at least z can't exceed z
would set z to z for ©Úfiler   ÚResetDwordPropertyzCould not set zSet rS   z(Multiple --mark-* options will not work
)r„  r   r…  r    r'   rÌ   r   ÚDNSSRV_TYPEID_NAME_AND_PARAMr™  Úgetr   ÚDNS_RPC_NAME_AND_PARAMÚdwParamÚpszNodeNameÚprintr  r1   r   Úmark_old_records_staticÚmark_records_static_regexÚmark_records_dynamic_regex)r+   r   r8  r{  rq  rs  rr  Údry_runrµ  r¶  r·  Úkwargsr"   rË   Únap_typerš  rœ  r�  rž  ÚvÚ
name_paramr#   Ún_mark_optionsr¼   s                           r$   r‡  Úcmd_zoneoptions.run5  s+  € ð ×(Ñ(Ó*ˆŒØ×-Ñ-¨d¯g©gÓ6ˆŒ
Ü! &¯'©'°4·:±:Ó>ˆä+¨GÓ4ˆÜ×9Ñ9ˆà $× 7Ô 7ÑˆAˆt�T˜1Ø�z‰z˜!‹}Ñ$ÙØ‘	ˆAØÑ A¨£HÜ" a SÐ(:¸4¸&Ð#AÓBÐBØÑ A¨£HÜ" a S¨°t°fÐ#=Ó>Ð>ä"×9Ò9Ó;ˆJØ!"ˆJÔØ%&ˆJÔ"ÞÜ˜
 1 # T¨!¨¨E°$°Ð8¸t¿y¹yÒIÙð
JØ×)Ñ)¨.Ø*+Ø*0Ø*.Ø*+Ø*>Ø*2Ø*4ô6ô �D˜˜˜4 ˜sÐ#¨$¯)©)Ô4ñ7 !8ð@ ˆØ)Ø+Ø,ó.ˆAð ‹}Ø !Ñ#’ñ	.ð ˜AÓÜÐJÓKÐKà"Ñ.Ø×(Ñ(¨Ø)@Ø)0ô2ð %Ñ0Ø×*Ñ*¨6Ø+/Ø+DØ+2ô4ð
 &Ñ1Ø×+Ñ+¨FØ,0Ø,FØ,3õ5ð 2øô; ó JÜ" ^°A°3°d¸1¸#Ð#>Ó?ÀTÐIûðJús   ÄF>Æ>
GÇGÇGc                 óÎ   • [        SU-  [        5       U R                  U R                  S9nSU SUR	                  5        3nUR                  U[        R                  SSS/S9nX54$ )	Nú	ldap://%s©ÚurlÚsession_infoÚcredentialsr   zDC=z#,CN=MicrosoftDNS,DC=DomainDNSZones,z/(&(objectClass=dnsNode)(!(dNSTombstoned=TRUE)))Ú	dnsRecordrB   )ÚbaseÚscopeÚ
expressionÚattrs)r   r   r    r   Úget_default_basednÚsearchÚldbÚSCOPE_SUBTREE)r+   r   Ú	zone_nameÚsamdbÚzone_dnÚnodess         r$   Ú_get_dns_nodesÚcmd_zoneoptions._get_dns_nodes~  s€   € Ü˜+¨Ñ.Ü#1Ó#3Ø"&§*¡*°·±ñ:ˆð ˜˜Ð#FØ×.Ñ.Ó0Ð1ð3ˆð —‘ 'Ü#&×#4Ñ#4ð*Dà$/°Ð#8ð	 ð :ˆð
 ˆ|Ðr.   c                 ó²  •  [         R                  " US5      n[         R                  " U5      n[
        R                  " [        U5      5      nU R                  X5      u  pšU
 GHO  nSU;  a  M  [        US   5      nSn[        U5       H\  u  pï[        [        R                  U5      nUR                  U:  d  M1  UR                  S:w  d  MC  SUl        [        U5      XÎ'   US-  nM^     US:X  a  M�  US   S   R!                  5       nU(       a,  [#        SU S	[%        U5       S
U SU S3	U R&                  S9  MØ  [(        R*                  R-                  U	UR.                  US.[(        R0                  5      nU	R3                  U5        [#        SU S	[%        U5       S
U SU S3	U R&                  S9  GMR     g ! [         a  n[	        SU S35      eS nAff = f)Nz%Y-%m-%dzInvalid date z: should be YYY-MM-DDrÅ  r   rS   rB   úwould make Ú/ú records static on Ú.r¬  ©ÚdnrÅ  úmade )ÚtimeÚstrptimeÚmktimeÚ
ValueErrorr   r   Úunix_to_dns_timestampr–  rÒ  ÚlistÚ	enumerater
   r   ÚDnssrvRpcRecordÚdwTimeStampr   Údecoder´  Úlenr  rÌ  ÚMessageÚ	from_dictrÚ  ÚFLAG_MOD_REPLACEÚmodify)r+   r   rÎ  Údate_stringr¸  ÚtsÚtr#   Ú	thresholdrÏ  rÑ  ÚnodeÚvaluesÚchangesr®   r»  r_  rB   Úmsgs                      r$   rµ  Ú'cmd_zoneoptions.mark_old_records_static�  sÅ  € ð	SÜ—’˜{¨JÓ7ˆBÜ—’˜B“ˆAô ×2Ò2´3°q³6Ó:ˆ	à×*Ñ*¨6Ó=‰ˆäˆDØ $Ó&Ùä˜$˜{Ñ+Ó,ˆFØˆGÜ! &Ö)‘�Ü ¤×!5Ñ!5°qÓ9�Ø—?‘? YÕ.°3·?±?ÀaÕ3GØ&'�C”OÜ (¨£�F‘IØ˜q‘L’Gñ *ð ˜!‹|Ùà˜‘< ‘?×)Ñ)Ó+ˆDæÜ˜ G 9¨A¬c°&«k¨]ð ;Ø ˜6  9 +¨Qð0Ø6:·i±iòAáä—+‘+×'Ñ'¨Ø/3¯w©wØ6<ñ)*ô ),×(<Ñ(<ó	>ˆCð
 �L‰L˜ÔÜ�E˜'˜ !¤C¨£K =Ð0CØ�F˜!˜I˜; að)Ø/3¯y©yõ:ò; øô ó 	SÜ ¨{¨mÐ;PÐQÓRÐRûð	Sús   ‚-F8 Æ8
GÇGÇGc                 ó0  • [         R                  " U5      nU R                  X5      u  pgU GHf  nUS   S   R                  5       n	UR	                  U	5      (       d  M2  SU;  a  M:  [        US   5      n
[        U
5      S:X  a  MY  Sn[        U
5       HJ  u  pÍ[        [        R                  U5      nUR                  S:w  d  M1  SUl        [        U5      X¬'   US-  nML     US:X  a  M¼  U(       a,  [        SU S[        U
5       SU	 SU S3	U R                  S	9  Mï  [        R                   R#                  UUR$                  U
S
.[        R&                  5      nUR)                  U5        [        SU S[        U
5       SU	 SU S3	U R                  S	9  GMi     g)z>Make the records of nodes with matching names static.
        rB   r   rÅ  rS   rÕ  rÖ  r×  rØ  r¬  rÙ  rÛ  N)ÚreÚcompilerÒ  rå  rË  rá  ræ  râ  r
   r   rã  rä  r   r´  r  rÌ  rç  rè  rÚ  ré  rê  )r+   r   rÎ  Úregexr¸  ÚrrÏ  rÑ  rï  rB   rð  rñ  r®   r»  r_  rò  s                   r$   r¶  Ú)cmd_zoneoptions.mark_records_static_regex·  sˆ  € ô �JŠJ�uÓˆØ×*Ñ*¨6Ó=‰ˆäˆDØ˜‘< ‘?×)Ñ)Ó+ˆDØ—8‘8˜D—>‘>ÙØ $Ó&Ùä˜$˜{Ñ+Ó,ˆFÜ�6‹{˜aÓÙàˆGÜ! &Ö)‘�Ü ¤×!5Ñ!5°qÓ9�Ø—?‘? aÕ'Ø&'�C”OÜ (¨£�F‘IØ˜q‘L’Gñ *ð ˜!‹|ÙæÜ˜ G 9¨A¬c°&«k¨]ð ;Ø ˜6  9 +¨Qð0Ø6:·i±iòAáä—+‘+×'Ñ'¨Ø/3¯w©wØ6<ñ)*ô ),×(<Ñ(<ó	>ˆCð
 �L‰L˜ÔÜ�E˜'˜ !¤C¨£K =Ð0CØ�F˜!˜I˜; að)Ø/3¯y©yõ:òC r.   c                 ó  • [         R                  " U5      nU R                  X5      u  pg[        R                  " 5       n[        R
                  " [        U5      5      n	[        R                  [        R                  [        R                  1n
U GHz  nUS   S   R                  5       nUR                  U5      (       d  M2  SU;  a  M:  [        US   5      n[        U5      S:X  a  MY  Sn[        U5       H]  u  nn[!        [        R"                  U5      nUR$                  U
;   d  M2  UR&                  S:X  d  MD  U	Ul        [)        U5      Xß'   US-  nM_     US:X  a  MÏ  U(       a-  [+        SU S[        U5       SU SU S3	U R,                  S	9  GM  [.        R0                  R3                  UUR4                  US
.[.        R6                  5      nUR9                  U5        [+        SU S[        U5       SU SU S3	U R,                  S	9  GM}     g)z‹Make the records of nodes with matching names dynamic, with a
current timestamp. In this case we only adjust the A, AAAA,
and TXT records.
rB   r   rÅ  rS   rÕ  rÖ  z records dynamic on rØ  r¬  rÙ  rÛ  N)rõ  rö  rÒ  rÜ  r   rà  r–  r   rC  rE  rZ  rå  rË  rá  ræ  râ  r
   rã  rB  rä  r   r´  r  rÌ  rç  rè  rÚ  ré  rê  )r+   r   rÎ  r÷  r¸  rø  rÏ  rÑ  ÚnowÚdns_timestampÚsafe_wtypesrï  rB   rð  rñ  r®   r»  r_  rò  s                      r$   r·  Ú*cmd_zoneoptions.mark_records_dynamic_regexá  sÖ  € ô
 �JŠJ�uÓˆØ×*Ñ*¨6Ó=‰ˆÜ�iŠi‹kˆÜ ×6Ò6´s¸3³xÓ@ˆä�O‰OÜ×ÑÜ×Ñð
ˆô ˆDØ˜‘< ‘?×)Ñ)Ó+ˆDØ—8‘8˜D—>‘>ÙØ $Ó&Ùä˜$˜{Ñ+Ó,ˆFÜ�6‹{˜aÓÙàˆGÜ! &Ö)‘��1Ü ¤×!5Ñ!5°qÓ9�Ø—9‘9 Õ+°·±À1Õ0DØ&3�C”OÜ (¨£�F‘IØ˜q‘L’Gñ *ð ˜!‹|ÙæÜ˜ G 9¨A¬c°&«k¨]ð ;Ø ˜6  9 +¨Qð0Ø6:·i±iòAâä—+‘+×'Ñ'¨Ø/3¯w©wØ6<ñ)*ô ),×(<Ñ(<ó	>ˆCð
 �L‰L˜ÔÜ�E˜'˜ !¤C¨£K =Ð0DØ�F˜!˜I˜; að)Ø/3¯y©yõ:òC r.   r‰  )NNNFNNN)rE   rF   rG   rH   rI   rŒ  r�  rŽ  r�  r�  r‘  r’  r   r“  r™  r   r‡  rÒ  rµ  r¶  r·  rO   rP   r.   r$   r¢  r¢    sò   † Ù$à0€Hà˜FÐ#€Jð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐñ 	Ð!Ð(8Ø!Ð+@Ú4¸9ñ	Fñ 	Ð*°LØFñ	HáÐ,°hØJñ	LáÐ-°xØKñ	Máˆt�[¨ØBñ	Dð€Mð Ðñ ò 	ð 'Ø+ô-ð CGØ&+Ø$(Ø&*Ø'+ô	F5òRò(:òT(:õT1:r.   r¢  c            	       ó–   • \ rS rSrSrSrSS/r\R                  \R                  \R                  S.r\" SSS	S
/ SQSS9/r  SS jrSrg)Úcmd_zoneinfoi  zQuery for zone information.r£  r   r8  rp  rt  ru  rv  rw  rx  r{  r|  Nc                 ó  • UR                  5       U l        UR                  U R                  5      U l        [	        XR                  U R                  5      n[        U5      nUR                  USXS5      u  pš[        U R                  Xš5        g )Nr   ÚZoneInfo)	r„  r   r…  r    r'   rÌ   r0   r2  r  )r+   r   r8  r{  rq  rs  rr  r"   rË   r  r†  s              r$   r‡  Úcmd_zoneinfo.run(  so   € à×(Ñ(Ó*ˆŒØ×-Ñ-¨d¯g©gÓ6ˆŒ
Ü! &¯'©'°4·:±:Ó>ˆä+¨GÓ4ˆà×+Ñ+¨N¸A¸vØ,6ó8‰ˆä�t—y‘y &Õ.r.   r‰  rŠ  r‹  rP   r.   r$   r   r     sk   † Ù%à0€Hà˜FÐ#€Jð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐñ 	Ð!Ð(8Ø!Ð+@Ú4¸9ñ	Fð€Mð CGØ÷
/r.   r   c                   ó  • \ rS rSrSrSrS/r\R                  \R                  \R                  S.r\" SSSS	/ S
QSS9\" SSSSS9\" SSSSS9\" SSSSS9\" SSSSS9\" SSSSS9\" SSSS S9\" S!S"SS#S9\" S$S%SS&S9/	r   S*S( jrS)rg')+Úcmd_zonelisti5  zQuery for zones.ro  r   rp  rt  ru  rv  rw  rx  r{  r|  z	--primaryzList primary zones (default)r¥  Úprimary©r}  r¦  r�  z--secondaryzList secondary zonesÚ	secondaryú--cachezList cached zonesÚcachez--autoz List automatically created zonesÚautoz	--forwardzList forward zonesÚforwardz	--reversezList reverse zonesÚreversez--dszList directory integrated zonesÚdsz--non-dszList non-directory zonesÚnondsNc           	      ó|  • SnU(       a  U[         R                  -  nU(       a  U[         R                  -  nU(       a  U[         R                  -  nU(       a  U[         R                  -  nU(       a  U[         R
                  -  nU(       a  U[         R                  -  nU	(       a  U[         R                  -  nU
(       a  U[         R                  -  nUS:X  a  [         R                  nUR                  5       U l
        UR                  U R                  5      U l        [        XR                  U R                  5      n[        U5      nUR                  USUS S[         R                   U5      u  nnU[         R"                  :X  a  [         R$                  nO[         R&                  n[)        U R*                  UU5        g )Nr   Ú	EnumZones)r   ÚDNS_ZONE_REQUEST_PRIMARYÚDNS_ZONE_REQUEST_SECONDARYÚDNS_ZONE_REQUEST_CACHEÚDNS_ZONE_REQUEST_AUTOÚDNS_ZONE_REQUEST_FORWARDÚDNS_ZONE_REQUEST_REVERSEÚDNS_ZONE_REQUEST_DSÚDNS_ZONE_REQUEST_NON_DSr„  r   r…  r    r'   rÌ   r4   ÚDNSSRV_TYPEID_DWORDrÆ   r7  ÚDNSSRV_TYPEID_ZONEr?  r  )r+   r   r{  r  r  r
  r  r  r  r  r  rq  rs  rr  Úrequest_filterr"   rË   r  r†  s                      r$   r‡  Úcmd_zonelist.runX  s[  € ð ˆæØœi×@Ñ@Ñ@ˆNÞØœi×BÑBÑBˆNÞØœi×>Ñ>Ñ>ˆNÞØœi×=Ñ=Ñ=ˆNÞØœi×@Ñ@Ñ@ˆNÞØœi×@Ñ@Ñ@ˆNÞØœi×;Ñ;Ñ;ˆNÞØœi×?Ñ?Ñ?ˆNà˜QÓÜ&×?Ñ?ˆNà×(Ñ(Ó*ˆŒØ×-Ñ-¨d¯g©gÓ6ˆŒ
Ü! &¯'©'°4·:±:Ó>ˆä+¨GÓ4ˆà×6Ñ6°~Ø78¸&À$Ø7BÜ7@×7TÑ7TØ7Eó	G‰ˆ�ð œY×=Ñ=Ó=Ü×5Ñ5‰Fä×1Ñ1ˆFÜ˜Ÿ	™	 6¨3Õ/r.   r‰  )FFFFFFFFNNNr‹  rP   r.   r$   r  r  5  sý   † Ùà)€Hà�€Jð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐñ 	Ð!Ð(8Ø!Ð+@Ú4¸9ñ	Fñ 	ˆ{Ð!?Ø"¨ñ	4áˆ}Ð#9Ø"¨ñ	6áˆyÐ2Ø"¨ñ	2áˆxÐ@Ø"¨ñ	1áˆ{Ð!5Ø"¨ñ	4áˆ{Ð!5Ø"¨ñ	4áˆvÐ=Ø"¨ñ	/áˆzÐ :Ø"¨ñ	2ð%€Mð, JOØFKØ7;÷)0r.   r  c            
       ó°   • \ rS rSrSrSrSS/r\R                  \R                  \R                  S.r\" SSS	S
/ SQSS9\" SSSSSS/SS9/r   SS jrSrg)Úcmd_zonecreatei„  zCreate a zone.r£  r   r8  rp  rt  ru  rv  rw  rx  r{  r|  z--dns-directory-partitionz†Specify the naming context for the new zone, which affects the replication scope (domain or forest wide replication, default: domain).Údomainzdomain|forestÚforestÚdns_dpNc                 óÞ  • UR                  5       U l        UR                  U R                  5      U l        [	        XR                  U R                  5      nUR                  5       n[        R                  n	US:X  a  [        R                  n	[        U5      n
U
[        R                  :X  aV  [        R                  n[        R                  " 5       nX,l        [        R                  Ul        SUl        SUl        SUl        OËU
[        R(                  :X  a\  [        R*                  n[        R,                  " 5       nX,l        [        R                  Ul        SUl        SUl        SUl        Xœl        O[[        R0                  n[        R2                  " 5       nX,l        [        R                  Ul        SUl        SUl        SUl        Xœl        UR5                  U
SUS SSUU5        [        R6                  n[        R8                  " 5       nSUl        [        R<                  Ul        [@        RB                  SU S30nUR5                  U
SXSSUXÞS	9	  U RD                  RG                  S
U-  5        g )Nr!  r   rS   Ú
ZoneCreateÚAllowUpdatezZone "z" already exists.r®  r5   zZone %s created successfully
)$r„  r   r…  r    r'   r   r   r”   r•   rÌ   rÆ   ÚDNSSRV_TYPEID_ZONE_CREATE_W2KÚDNS_RPC_ZONE_CREATE_INFO_W2Kr  r   rv   r  r  ÚfDsIntegratedÚfLoadExistingrÇ   Ú DNSSRV_TYPEID_ZONE_CREATE_DOTNETÚDNS_RPC_ZONE_CREATE_INFO_DOTNETr'  ÚDNSSRV_TYPEID_ZONE_CREATEÚ!DNS_RPC_ZONE_CREATE_INFO_LONGHORNr1   r¯  r±  r³  r�   r²  r   rK   r  rÐ   )r+   r   r8  r{  r"  rq  rs  rr  r"   Údns_directorypartitionrË   r  Úzone_create_infoÚname_and_paramr6   s                  r$   r‡  Úcmd_zonecreate.runŸ  s(  € ð ×(Ñ(Ó*ˆŒØ×-Ñ-¨d¯g©gÓ6ˆŒ
Ü! &¯'©'°4·:±:Ó>ˆà�z‰z‹|ˆä!*×!@Ñ!@ÐØ�XÓÜ%.×%DÑ%DÐ"ä+¨GÓ4ˆØœY×=Ñ=Ó=Ü×<Ñ<ˆFÜ(×EÒEÓGÐØ+/Ô(Ü*.×*DÑ*DÐÔ'Ø&'ÐÔ#Ø-.ÐÔ*Ø-.ÐÕ*Øœy×BÑBÓBÜ×?Ñ?ˆFÜ(×HÒHÓJÐØ+/Ô(Ü*.×*DÑ*DÐÔ'Ø&'ÐÔ#Ø-.ÐÔ*Ø-.ÐÔ*Ø)?Õ&ä×8Ñ8ˆFÜ(×JÒJÓLÐØ+/Ô(Ü*.×*DÑ*DÐÔ'Ø&'ÐÔ#Ø-.ÐÔ*Ø-.ÐÔ*Ø)?Ô&à×!Ñ! .°!°V¸TØ"# \°6Ø"2ô	4ô ×7Ñ7ˆÜ"×9Ò9Ó;ˆØ%2ˆÔ"Ü!%×!<Ñ!<ˆÔô ×5Ñ5Ø˜˜Ð/Ð0ð
ˆð
 	×!Ñ! .°!°VØ"#Ð%9¸6Ø"0ð 	"ñ 	Eð 	�	‰	�‰Ð8¸4Ñ?Õ@r.   r‰  rŠ  r‹  rP   r.   r$   r  r  „  s“   † Ùà0€Hà˜FÐ#€Jð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐñ 	Ð!Ð(8Ø!Ð+@Ú4¸9ñ	Fñ 	Ð*ð5ð  Ø&Ø  (Ð+Øñ	ð	€Mð& ØØ÷@Ar.   r  c                   óz   • \ rS rSrSrSrSS/r\R                  \R                  \R                  S.r  S
S jrS	rg)Úcmd_zonedeleteiâ  zDelete a zone.r£  r   r8  rp  Nc                 óš  • UR                  5       U l        UR                  U R                  5      U l        [	        XR                  U R                  5      nUR                  5       n[        R                  SU S30nUR                  [        R                  SXSS[        R                  S US9	nU R                  R                  SU-  5        g )NúZone z, does not exist and so could not be deleted.r   ÚDeleteZoneFromDsr5   zZone %s deleted successfully
)r„  r   r…  r    r'   r   r   Ú"WERR_DNS_ERROR_ZONE_DOES_NOT_EXISTr1   r   rÈ   ÚDNSSRV_TYPEID_NULLr  rÐ   )	r+   r   r8  rq  rs  rr  r"   r6   r†  s	            r$   r‡  Úcmd_zonedelete.runï  s¸   € ð ×(Ñ(Ó*ˆŒØ×-Ñ-¨d¯g©gÓ6ˆŒ
Ü! &¯'©'°4·:±:Ó>ˆà�z‰z‹|ˆô ×5Ñ5Ø˜�vÐIÐJð
ˆð ×'Ñ'¬	×(MÑ(MØ()¨6¸Ð<NÜ(1×(DÑ(DØ(,°xð (ð Aˆð
 	�	‰	�‰Ð8¸4Ñ?Õ@r.   r‰  rŠ  ©rE   rF   rG   rH   rI   rŒ  r�  rŽ  r�  r�  r‘  r’  r‡  rO   rP   r.   r$   r3  r3  â  sG   † Ùà0€Hà˜FÐ#€Jð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐð :>Ø÷Ar.   r3  c                   óò   • \ rS rSrSrSr/ SQr\R                  \R                  \R                  S.r\" SSSS	S
9\" SSSSS
9\" SSSSS
9\" SSSSS
9\" SSSSS
9\" SSSSS
9\" SSSSS
9/r    S S jrSrg)!Ú	cmd_queryi  zQuery a name.zO%prog <server> <zone> <name> <A|AAAA|PTR|CNAME|MX|NS|SOA|SRV|TXT|ALL> [options])r   r8  rB   Úrtyperp  z--authorityz&Search authoritative records (default)r¥  Ú	authorityr  r	  zSearch cached recordsr
  z--gluezSearch glue recordsÚgluez--rootzSearch root hintsÚrootz--additionalzList additional recordsÚ
additionalz--no-childrenzDo not list childrenÚno_childrenz--only-childrenzList only childrenÚonly_childrenNc                 ó"  • [        U5      nUR                  S5      S:w  a  U R                  R                  SU-  5        SnU(       a  U[        R
                  -  nU(       a  U[        R                  -  nU(       a  U[        R                  -  nU(       a  U[        R                  -  nU	(       a  U[        R                  -  nU
(       a  U[        R                  -  nU(       a  U[        R                  -  nUS:X  a  [        R
                  nU[        R                  :X  aI  U R                  R                  S5        U R                  R                  S5        U[        R
                  -  nUR                  5       U l        UR                  U R                  5      U l        [!        XR                  U R                  5      n["        R$                  S0nUR'                  [        R(                  SXUS UUS S US9u  nn[+        U R                  U5        g )	NÚ*éÿÿÿÿz-use "@" to dump entire domain, looking up %s
r   z>Specify either --authority or --root along with --additional.
zAssuming --authority.
úRecord or zone does not exist.r5   )rÀ   Úfindr  rÐ   r   ÚDNS_RPC_VIEW_AUTHORITY_DATAÚDNS_RPC_VIEW_CACHE_DATAÚDNS_RPC_VIEW_GLUE_DATAÚDNS_RPC_VIEW_ROOT_HINT_DATAÚDNS_RPC_VIEW_ADDITIONAL_DATAÚDNS_RPC_VIEW_NO_CHILDRENÚDNS_RPC_VIEW_ONLY_CHILDRENr„  r   r…  r    r'   r   rM   r2   rÈ   ri  )r+   r   r8  rB   r=  r>  r
  r?  r@  rA  rB  rC  rq  rs  rr  rk  Úselect_flagsr"   r6   Úbuflenr†  s                        r$   r‡  Úcmd_query.run#  s¯  € ô $ EÓ*ˆà�9‰9�S‹>˜RÓØ�I‰I�O‰OÐLØ ñ!ô "ð ˆÞØœI×AÑAÑAˆLÞØœI×=Ñ=Ñ=ˆLÞØœI×<Ñ<Ñ<ˆLÞØœI×AÑAÑAˆLÞØœI×BÑBÑBˆLÞØœI×>Ñ>Ñ>ˆLÞØœI×@Ñ@Ñ@ˆLà˜1ÓÜ$×@Ñ@ˆLàœ9×AÑAÓAØ�I‰I�O‰OÐ]Ô^Ø�I‰I�O‰OÐ5Ô6ØœI×AÑAÑAˆLà×(Ñ(Ó*ˆŒØ×-Ñ-¨d¯g©gÓ6ˆŒ
Ü! &¯'©'°4·:±:Ó>ˆô ×5Ñ5Ø0ð
ˆð ×1Ñ1Ü×1Ñ1°1°fÀDØ�+˜|¨T°4Øð 2ð ‰ˆ�ô
 	˜Ÿ™ CÕ(r.   r‰  )
FFFFFFFNNNr‹  rP   r.   r$   r<  r<    sÖ   † ÙðE€Hò 5€Jð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐñ 	ˆ}Ð#KØ"¨ñ	6áˆyÐ6Ø"¨ñ	2áˆxÐ3Ø"¨ñ	1áˆxÐ1Ø"¨ñ	1áˆ~Ð$=Ø"¨ñ	7áˆÐ%;Ø"¨ñ	8áÐ Ð';Ø"¨ñ	:ð€Mð" EJØBGØ:>Ø÷/)r.   r<  c                   óz   • \ rS rSrSrSrSS/r\R                  \R                  \R                  S.r  S
S jrS	rg)Úcmd_roothintsiU  zQuery root hints.z!%prog <server> [<name>] [options]r   zname?rp  Nc                 óŽ  • [         R                  n[        R                  [        R                  -  nUR                  5       U l        UR                  U R                  5      U l        [        XR                  U R                  5      nUR                  [        R                  SUSUS XgS S 5
      u  pš[        U R                  U
5        g )Nr   z..RootHints)r   rH  r   rL  rM  r„  r   r…  r    r'   r2   rÈ   ri  r  )r+   r   rB   rq  rs  rr  rk  rP  r"   rQ  r†  s              r$   r‡  Úcmd_roothints.runb  sž   € ä×&Ñ&ˆÜ!×=Ñ=Ü!×>Ñ>ñ?ˆð ×(Ñ(Ó*ˆŒØ×-Ñ-¨d¯g©gÓ6ˆŒ
Ü! &¯'©'°4·:±:Ó>ˆà×1Ñ1Ü×1Ñ1°1°f¸mØ�$˜°4¸ó?‰ˆô 	˜Ÿ™ CÕ(r.   r‰  )rØ  NNNr:  rP   r.   r$   rT  rT  U  sG   † Ùà2€Hà˜GÐ$€Jð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐð >BØ÷)r.   rT  c                   óz   • \ rS rSrSrSr/ SQr\R                  \R                  \R                  S.r  S	S jrSrg)
Úcmd_add_recordir  a(  Add a DNS record

For each type data contents are as follows:
  A      ipv4_address_string
  AAAA   ipv6_address_string
  PTR    fqdn_string
  CNAME  fqdn_string
  NS     fqdn_string
  MX     "fqdn_string preference"
  SRV    "fqdn_string port priority weight"
  TXT    "'string1' 'string2' ..."
úD%prog <server> <zone> <name> <A|AAAA|PTR|CNAME|NS|MX|SRV|TXT> <data>©r   r8  rB   r=  rD  rp  Nc	                 ó,  • UR                  5       S;  a  [        SU-  5      e[        U5      n	[        X•5      n
UR	                  5       U l        UR                  U R
                  5      U l        [        XR
                  U R                  5      n[        R                  " 5       nX¬l        [        R                  SU SU 3[        R                  SU SU S30nUR                  [        R                   SXX<S US9  U R"                  R%                  S	5        g )
N©ÚAÚAAAAÚPTRÚCNAMEÚNSÚMXÚSRVÚTXTz)Adding record of type %s is not supportedz5Zone does not exist; record could not be added. zone[ú] name[z7Record already exists; record could not be added. zone[r9   r   r5   zRecord added successfully
©rÅ   r   rÀ   rl  r„  r   r…  r    r'   r   ÚDNS_RPC_RECORD_BUFr_  r   rM   Ú$WERR_DNS_ERROR_RECORD_ALREADY_EXISTSr3   rÈ   r  rÐ   )r+   r   r8  rB   r=  rD  rq  rs  rr  rk  r_  r"   Úadd_rec_bufr6   s                 r$   r‡  Úcmd_add_record.runŠ  s  € ð �;‰;‹=Ð WÓWÜÐJÈUÑRÓSÐSä# EÓ*ˆÜ  Ó3ˆà×(Ñ(Ó*ˆŒØ×-Ñ-¨d¯g©gÓ6ˆŒ
Ü! &¯'©'°4·:±:Ó>ˆä×2Ò2Ó4ˆØŒô ×5Ñ5ðØ�v˜W T Fð,ä×7Ñ7ðØ�v˜W T F¨!ð-ð
ˆð 	×$Ñ$¤Y×%JÑ%JØ%&¨°dÈØ.6ð 	%ñ 	8ð 	�	‰	�‰Ð5Õ6r.   r‰  rŠ  r:  rP   r.   r$   rX  rX  r  sG   † ñð V€Hâ<€Jð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐð >BØ'+÷7r.   rX  c                   óx   • \ rS rSrSrSr/ SQr\R                  \R                  \R                  S.r S	S jrSrg)
Úcmd_update_recordi©  aq  Update a DNS record

For each type data contents are as follows:
  A      ipv4_address_string
  AAAA   ipv6_address_string
  PTR    fqdn_string
  CNAME  fqdn_string
  NS     fqdn_string
  MX     "fqdn_string preference"
  SOA    "fqdn_dns fqdn_email serial refresh retry expire minimumttl"
  SRV    "fqdn_string port priority weight"
  TXT    "'string1' 'string2' ..."
zU%prog <server> <zone> <name> <A|AAAA|PTR|CNAME|NS|MX|SOA|SRV|TXT> <olddata> <newdata>)r   r8  rB   r=  ÚolddataÚnewdatarp  Nc
                 ó  • UR                  5       nUS;  a  [        SU-  5      e US:X  a  [        [        U5        OUS:X  a  [        [        U5        [        U5      n[        X¶5      nUR                  5       U l	        UR                  U R                  5      U l        [        XR                  U R                  5      n [        UR                  XX;U5      nU(       d  [        S5      eUR"                  Ul        UR$                  Ul        UR&                  Ul        UR(                  Ul        [*        R,                  " 5       nXÏl        [*        R,                  " 5       nUUl        [0        R2                  SU S	30nUR5                  [*        R6                  S
UUUUUUS9  U R8                  R;                  S5        g ! [
         a  n
[        SU SU
< 35      eS n
A
ff = f! [         a  n
[        U
R                   6 S eS n
A
ff = f)N)	r]  r^  r_  r`  ra  rb  ÚSOArc  rd  z+Updating record of type %s is not supportedr]  r^  zbad data for z: rG  r5  z- does not exist; record could not be updated.r   r5   zRecord updated successfully
)rÅ   r   r   r   r	   ÚOSErrorrÀ   rl  r„  r   r…  r    r'   r   r"   r   r:   r\  r]  r^  rä  r   rg  r_  r   rM   r3   rÈ   r  rÐ   )r+   r   r8  rB   r=  rm  rn  rq  rs  rr  r#   rk  r_  r"   Ú	rec_matchri  Údel_rec_bufr6   s                     r$   r‡  Úcmd_update_record.runÂ  sà  € ð —‘“ˆØÐVÓVÜÐLÈuÑTÓUÐUð	?Ø˜‹|Üœ' 7Õ+Ø˜&“Üœ( GÔ,ô $ EÓ*ˆÜ  Ó6ˆà×(Ñ(Ó*ˆŒØ×-Ñ-¨d¯g©gÓ6ˆŒ
Ü! &¯'©'°4·:±:Ó>ˆð	2Ü(¨×):Ñ):¸FØ)-¸GóEˆIö
 ÜÐ?Ó@Ð@ð  ×'Ñ'ˆŒØ ×)Ñ)ˆŒØ$×1Ñ1ˆÔØ#×/Ñ/ˆŒä×2Ò2Ó4ˆØŒä×2Ò2Ó4ˆØ#ˆŒô ×5Ñ5Ø˜�vÐJÐKð
ˆð
 	×$Ñ$¤Y×%JÑ%JØ%&Ø%+Ø%)Ø%)Ø%0Ø%0Ø.6ð 	%ñ 	8ð 	�	‰	�‰Ð7Õ8øô[ ó 	?Ü ¨u¨g°R¸±uÐ=Ó>Ð>ûð	?ûô ó 	2Ü §¡Ð'¨TÐ1ûð	2ús4   ¦F: ½F: Â?G Æ:
GÇGÇGÇ
H Ç(G;Ç;H r‰  rŠ  r:  rP   r.   r$   rl  rl  ©  sC   † ñð g€HâJ€Jð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐð 8<÷99r.   rl  c                   óv   • \ rS rSrSrSr/ SQr\R                  \R                  \R                  S.rS	S jrSrg)
Úcmd_delete_recordiþ  a+  Delete a DNS record

For each type data contents are as follows:
  A      ipv4_address_string
  AAAA   ipv6_address_string
  PTR    fqdn_string
  CNAME  fqdn_string
  NS     fqdn_string
  MX     "fqdn_string preference"
  SRV    "fqdn_string port priority weight"
  TXT    "'string1' 'string2' ..."
rY  rZ  rp  Nc	                 ó0  • UR                  5       S;  a  [        SU-  5      e[        U5      n	[        X•5      n
UR	                  5       U l        UR                  U R
                  5      U l        [        XR
                  U R                  5      n[        R                  " 5       nX¬l        [        R                  SU SU 3[        R                  SU SU S30nUR                  [        R                   SUUUS UUS9  U R"                  R%                  S	5        g )
Nr\  z+Deleting record of type %s is not supportedz7Zone does not exist; record could not be deleted. zone[re  z9Record already exists; record could not be deleted. zone[r9   r   r5   zRecord deleted successfully
rf  )r+   r   r8  rB   r=  rD  rq  rs  rr  rk  r_  r"   rs  r6   s                 r$   r‡  Úcmd_delete_record.run  s  € à�;‰;‹=Ð WÓWÜÐLÈuÑTÓUÐUä# EÓ*ˆÜ  Ó3ˆà×(Ñ(Ó*ˆŒØ×-Ñ-¨d¯g©gÓ6ˆŒ
Ü! &¯'©'°4·:±:Ó>ˆä×2Ò2Ó4ˆØŒô ×5Ñ5ðØ�v˜W T Fð,ä×7Ñ7ðØ�v˜W T F¨!ð-ð
ˆð 	×$Ñ$¤Y×%JÑ%JØ%&Ø%+Ø%)Ø%)Ø%)Ø%0Ø.6ð 	%ñ 	8ð 	�	‰	�‰Ð7Õ8r.   r‰  rŠ  r:  rP   r.   r$   rv  rv  þ  s>   † ñð V€Hâ<€Jð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐ÷ 9r.   rv  c                   óž   • \ rS rSrSrSrSS/r\R                  \R                  \R                  S.r\" SSS	S
S9\" SSSS
S9/r  SS jrSrg)Úcmd_cleanup_recordi9  aD  Cleanup DNS records for a DNS host.

example:

    samba-tool dns cleanup dc1 dc1.samdom.test.site -U USER%PASSWORD

NOTE: This command in many cases will only mark the `dNSTombstoned` attr
as `TRUE` on the DNS records. Querying will no longer return results but
there may still be some placeholder entries in the database.
z%prog <server> <dnshostname>r   Údnshostnamerp  z-vz	--verbosez
Be verboser¥  )r}  r¦  z-qz--quietzBe quietNc                 ó¼   • UR                  5       nUR                  U5      n	U R                  XgS9n
[        SU-  [	        5       X˜S9n[
        R                  " XºUSS9  g )N)ÚverboseÚquietrÀ  rÁ  T)Úignore_no_name)r„  r…  Ú
get_loggerr   r   r   Úremove_dns_references)r+   r   r{  rq  rs  rr  r}  r~  r   r    ÚloggerrÏ  s               r$   r‡  Úcmd_cleanup_record.runT  sa   € à×#Ñ#Ó%ˆØ×(Ñ(¨Ó,ˆà—‘¨�Ð>ˆä˜+¨Ñ.Ü#1Ó#3Ø"'ñ0ˆô 	×'Ò'¨°{Ø7;ó	=r.   rP   )NNNFFr‹  rP   r.   r$   rz  rz  9  sq   † ñ	ð .€Hà˜MÐ*€Jð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐñ 	ˆt�[ |¸LÑIÙˆt�Y Z¸ÑEð€Mð
 AEØ38÷=r.   rz  c                   ó  • \ rS rSrSr0 r\" 5       \S'   \" 5       \S'   \" 5       \S'   \	" 5       \S'   \
" 5       \S'   \" 5       \S'   \" 5       \S	'   \" 5       \S
'   \" 5       \S'   \" 5       \S'   \" 5       \S'   \" 5       \S'   Srg)Úcmd_dnsic  z%Domain Name Service (DNS) management.r  Úzoneoptionsr1  ÚzonelistÚ
zonecreateÚ
zonedeleteÚqueryÚ	roothintsÚaddÚupdateÚdeleteÚcleanuprP   N)rE   rF   rG   rH   rI   Úsubcommandsrn  r¢  r   r  r  r3  r<  rT  rX  rl  rv  rz  rO   rP   r.   r$   r…  r…  c  s¢   † Ù/à€KÙ .Ó 0€K�ÑÙ!0Ó!2€K�ÑÙ*›n€K�
ÑÙ*›n€K�
ÑÙ .Ó 0€K�ÑÙ .Ó 0€K�ÑÙ$›;€K�ÑÙ,›€K�ÑÙ'Ó)€K�ÑÙ-Ó/€K�ÑÙ-Ó/€K�ÑÙ/Ó1€K�	Ôr.   r…  )LÚsamba.getoptÚgetoptrŽ  Úsambar   r   r»   r   Úsocketr   r   r   r	   rÜ  rÌ  Ú	samba.ndrr
   r   rõ  r   r   Úsamba.samdbr   Ú
samba.authr   Úsamba.netcmdr   r   r   r   Úsamba.dcerpcr   r   Úsamba.dnsserverr   r   r   r   r%   r'   rX   r^   rd   rl   rs   r}   rƒ   rŠ   r�   rš   r¦   r°   r½   rÀ   rÌ   r	  r2  r9  r?  rb  ri  rl  rn  r   r¢  r   r  r  r3  r<  rT  rX  rl  rv  rz  r…  rP   r.   r$   Ú<module>r›     sŽ  ðõ$ Ý Ý Ý ß 'Ý Ý Û Û Û 
ß *Û 	ç %Ý Ý %÷ó ÷ )ç OÑ OÝ ,ò	÷Hñ HòVòòò:ò9ò3ò5ò7ò;ò;ò8òòò"$ò
òEaòP>VòBLò'òDòD0òô1�Wô 1ò@	6ôM:�gô M:ô`/�7ô /ô@L0�7ô L0ô^[A�Wô [Aô|A�Wô AôDN)�ô N)ôb)�Gô )ô:47�Wô 47ônR9˜ô R9ôj89˜ô 89ôv'=˜ô '=ôT2ˆlõ 2r.   