
    b                        d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlZd dlZd dlZd dlmZmZ d dlZd d	lmZmZ d d
lmZ d dlmZ d dlmZmZmZmZ d dlmZm Z  d dl!m"Z"m#Z#m$Z$ d dl!m%Z% d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d  Z6d! Z7d" Z8d# Z9d$ Z:d% Z;d& Z< G d' d(e          Z=d) Z> G d* d+e          Z? G d, d-e          Z@ G d. d/e          ZA G d0 d1e          ZB G d2 d3e          ZC G d4 d5e          ZD G d6 d7e          ZE G d8 d9e          ZF G d: d;e          ZG G d< d=e          ZH G d> d?e          ZI G d@ dAe          ZJdS )B    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                     |                                  dk    rd} d| z  }	 t          j        |||          }n'# t          $ r}t          d| d|          d }~ww xY w|S )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%   /   s    ||~~$$)F2K[&{B>> [ [ [lvvvWXWXYZZZ[ Os   8 
AAAc                 4    | dk    rd}n| dk    rd}nd| z  }|S )Nr   FALSE   TRUEUNKNOWN (0x%x) )flagrets     r$   bool_stringr.   ;   s1    qyy	%J    c                 R    d }|D ]}|t          | |          k    r|} n|sd|z  }|S )Nr*   getattr)module	enum_defsvaluer-   r#   s        r$   enum_stringr6   E   sS    
C  GFA&&&&CE '  '&Jr/   c                 R    d}|D ]}|t          | |          z  r|d|z  z  }|sd}|S )N z%s NONEr1   )r3   bitmap_defsr5   r-   bs        r$   bitmap_stringr<   P   sN    
C  761%%% 	519C Jr/   c                 6    g d}t          t          ||           S )N)DNS_BOOT_METHOD_UNINITIALIZEDDNS_BOOT_METHOD_FILEDNS_BOOT_METHOD_REGISTRYDNS_BOOT_METHOD_DIRECTORYr6   r   )boot_methodr4   s     r$   boot_method_stringrD   Z   s(    J J JIy)[999r/   c                 6    g d}t          t          ||           S )N)DNS_ALLOW_RFC_NAMES_ONLYDNS_ALLOW_NONRFC_NAMESDNS_ALLOW_MULTIBYTE_NAMESDNS_ALLOW_ALL_NAMESrB   )
check_flagr4   s     r$   name_check_flag_stringrK   `   s(    E E EIy)Z888r/   c                 6    g d}t          t          ||           S )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r6   r   )	zone_typer4   s     r$   zone_type_stringrU   f   s*    M M MI tY	222r/   c                 6    g d}t          t          ||           S )N)DNS_ZONE_UPDATE_OFFDNS_ZONE_UPDATE_UNSECUREDNS_ZONE_UPDATE_SECURErS   )zone_updater4   s     r$   zone_update_stringr[   m   s%    + + +ItY444r/   c                 6    g d}t          t          ||           S )N)DNS_ZONE_SECSECURE_NO_SECURITYDNS_ZONE_SECSECURE_NS_ONLYDNS_ZONE_SECSECURE_LIST_ONLYDNS_ZONE_SECSECURE_NO_XFERrB   )securityr4   s     r$   zone_secondary_security_stringrb   s   s(    O O OIy)X666r/   c                 6    g d}t          t          ||           S )N)DNS_ZONE_NOTIFY_OFFDNS_ZONE_NOTIFY_ALL_SECONDARIESDNS_ZONE_NOTIFY_LIST_ONLYrB   )notify_levelr4   s     r$   zone_notify_level_stringrh   y   s%    . . .Iy)\:::r/   c                 6    g d}t          t          ||           S )N)DNS_DP_AUTOCREATEDDNS_DP_LEGACYDNS_DP_DOMAIN_DEFAULTDNS_DP_FOREST_DEFAULTDNS_DP_ENLISTEDDNS_DP_DELETEDr<   r   )dp_flagsr:   s     r$   dp_flags_stringrr      s(    Q Q QKK:::r/   c                 6    g d}t          t          ||           S )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_READONLYrp   )flagsr:   s     r$   zone_flags_stringr~      s'    , , ,K
 K777r/   c           	          g }| s|S t          | j                  D ]E}t          t          t	          d| j        |                             }|                    |           F|S )NI)range	AddrCountr   r   r   	AddrArrayappend)arrayr-   iaddrs       r$   ip4_array_stringr      sg    
C 
5?##  $sEOA,>"?"?@@

4Jr/   c                    g }| s|S t          | j                  D ]}| j        |         j        d         dk    r@t	          j        dg| j        |         j        dd         R  }t          t          |          }n^| j        |         j        d         dk    r@t	          j        dg| j        |         j        dd         R  }t          t          |          }nd	}|	                    |           |S )
Nr      4B         16B   UNKNOWN)
r   r   r   MaxSastructr   r   r   r	   r   )r   r-   r   xr   s        r$   dns_addr_array_stringr      s    
C 
5?## 	 	?1#A&$..DA5?1#5#;AaC#@AAAAWa((DD_Q%a(D00ECEOA$6$<QrT$BCCCAXq))DDD

4Jr/   c                 b    	 t          |           S # t          $ r}t          |j         d }~ww xY wN)r   r   r   args)rec_typer#   s     r$   dns_type_flagr      sA    $))) $ $ $AF##$s    
.).c                     |                                  }|dk    rt          j        }n8|dk    rt          j        }n%|dk    rt          j        }nt          d| z            |S )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      sl    !!G%"9	H		"<	J		">6DEEEr/   c                 N   |                      d|j        z             |                      dt          |j                  z             |                      dt	          |j                  z             |                      dt	          |j                  z             |                      dt	          |j                  z             |                      d|j        z             |                      d|j	        z             |t          j        k    r|                      dt          |j                  z             |                      d	t          |j                  z             |                      d
t          |j                  z             n~|                      dt!          |j                  z             |                      d	t!          |j                  z             |                      d
t!          |j                  z             |                      d|j        z             |                      d|j        z             |                      d|j        z             |                      d|j        z             |                      dt+          |j                  z             |                      d|j        z             |                      d|j        z             |                      d|j        z             |                      d|j        z             |                      d|j        z             |                      d|j        z             |                      d|j        z             |                      d|j        z             |                      dt	          |j                  z             |                      dt	          |j                   z             |                      dt	          |j!                  z             |                      dt	          |j"                  z             |                      dt	          |j#                  z             |                      dt	          |j$                  z             |                      dt	          |j%                  z             |                      dt	          |j&                  z             |                      d t	          |j'                  z             |                      d!t	          |j(                  z             |                      d"t	          |j)                  z             |                      d#t	          |j*                  z             |                      d$t	          |j+                  z             |t          j,        k    r|                      d%|j-        z             |                      d&t!          |j.                  z             |                      d'|j/        z             |                      d(|j0        z             |                      d)|j1        z             |                      d*|j2        z             |                      d+|j3        z             |                      d,|j4        z             |                      d-|j5        z             |                      d.|j6        z             |                      d/|j7        z             |                      d0|j8        z             |                      d1|j9        z             |                      d2|j:        z             |t          j        k    r,|                      d3t	          |j;                  z             d S d S )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	dwVersionrD   fBootMethodr.   fAdminConfiguredfAllowUpdatefDsAvailablepszServerNamepszDsContainerr   DNSSRV_TYPEID_SERVER_INFOr   aipServerAddrsaipListenAddrsaipForwardersr   
dwLogLeveldwDebugLeveldwForwardTimeoutdwRpcProtocolrK   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   JJ7*:NNOOOJJ58J:Ka8b8bbcccJJ5JD_8`8``aaaJJ5JD[8\8\\]]]JJ5JD[8\8\\]]]JJ5
8PPQQQJJ5
8QQRRR444

9#J$=>>? 	@ 	@ 	@

9#J$=>>? 	@ 	@ 	@

9#J$<==> 	? 	? 	? 	? 	

9()BCCD 	E 	E 	E

9()BCCD 	E 	E 	E

9()ABBC 	D 	D 	D 	JJ5
8MMNNNJJ5
8OOPPPJJ5
8SSTTTJJ7*:RRSSSJJ58NzOi8j8jjkkkJJ5
8VVWWWJJ5
8SSTTTJJ5
8UUVVVJJ5
8PPQQQJJ5
8VVWWWJJ5
8WWXXXJJ5
8[[\\\JJ5
8]]^^^JJ5JD`8a8aabbbJJ5JD_8`8``aaaJJ5JDf8g8gghhhJJ5JDb8c8ccdddJJ5JD[8\8\\]]]JJ5JD_8`8``aaaJJ5JDZ8[8[[\\\JJ5JD`8a8aabbbJJ5JD_8`8``aaaJJ5JD`8a8aabbbJJ5JDa8b8bbcccJJ5JD`8a8aabbbJJ5JDa8b8bbccc888

;j>^^___

9<QR\Ri<j<jjkkk

9J<VVWWW

9J<TTUUU

9J<TTUUU

9J<bbccc

9J<bbccc

;j>bbccc

9J<YYZZZ

9J<VVWWW

9J<WWXXX

9J<XXYYY

9J<XXYYY

9J<UUVVV444

9K
H^<_<__````` 54r/   c                    |                      d|j        z             |                      dt          |j                  z             |                      dt	          |j                  z             |                      dt          |j                  z             |                      dt	          |j                  z             |                      dt	          |j	                  z             |                      dt	          |j
                  z             |                      dt	          |j                  z             |                      d	|j        z             |t          j        k    r+|                      d
t          |j                  z             n*|                      d
t#          |j                  z             |                      dt%          |j                  z             |                      dt)          |j                  z             |t          j        k    rU|                      dt          |j                  z             |                      dt          |j                  z             nT|                      dt#          |j                  z             |                      dt#          |j                  z             |                      dt	          |j                  z             |                      dt	          |j                  z             |                      dt	          |j                  z             |                      d|j        z             |                      d|j        z             |                      d|j        z             |t          j        k    r+|                      dt          |j                  z             n*|                      dt#          |j                  z             |t          j        k    rZ|                      d|j         z             |                      d|j!        z             |                      d|j"        z             |t          j        k    r+|                      dt          |j#                  z             n*|                      dt#          |j#                  z             |                      dtI          |j%                  z             |                      d|j&        z             |                      d|j'        z             |                      d|j(        z             |                      d|j)        z             |t          j        k    r|                      dt	          |j*                  z             |                      d t	          |j+                  z             |                      d!t	          |j,                  z             |                      d"|j-        z             |                      d#|j.        z             d S d S )$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   pszZoneNamerU   
dwZoneTyper.   fReverser[   r   fPaused	fShutdownfAutoCreatedfUseDatabasepszDataFiler   DNSSRV_TYPEID_ZONE_INFOr   
aipMastersr   rb   fSecureSecondariesrh   fNotifyLevelaipSecondaries	aipNotifyfUseWins
fUseNbstatfAgingdwNoRefreshIntervaldwRefreshIntervaldwAvailForScavengeTimeaipScavengeServersDNSSRV_TYPEID_ZONE_INFO_W2Kr   dwForwarderTimeoutfForwarderSlaveaipLocalMastersrr   	dwDpFlags	pszDpFqdn
pwszZoneDndwLastSuccessfulSoaCheckdwLastSuccessfulXfrfQueuedForBackgroundLoadfBackgroundLoadInProgressfReadOnlyZonedwLastXfrAttemptdwLastXfrResult)r   r   zoneinfos      r$   print_zoneinfor    s   JJ58LLMMMJJ58HI\8]8]]^^^JJ5HDU8V8VVWWWJJ58J8K`8a8aabbbJJ5HDT8U8UUVVVJJ5HDV8W8WWXXXJJ5HDY8Z8ZZ[[[JJ5HDY8Z8ZZ[[[JJ58LLMMM222

9#H$7889 	: 	: 	: 	: 	

9()<==> 	? 	? 	?JJ58VW_Wr8s8sstttJJ58PQYQf8g8gghhh222

9#H$;<<= 	> 	> 	>

9#H$6778 	9 	9 	9 	9 	

9()@AAB 	C 	C 	C

9();<<= 	> 	> 	>JJ5HDU8V8VVWWWJJ5HDW8X8XXYYYJJ5HO8T8TTUUUJJ58TTUUUJJ58RRSSSJJ58WWXXX222

9#H$?@@A 	B 	B 	B 	B 	

9()DEEF 	G 	G 	G 666

;h>\\]]]

9H<WWXXX

9H<TTUUUY666JJ='(@AAB C C C C JJ=,X-EFFG H H H

9OHL^<_<__```

9H<NNOOO

9H<OOPPP

9H<]]^^^

9H<XXYYY222

9KHi<j<jjkkk

9KHj<k<kklll

9KH^<_<__```

9H<UUVVV

9H<TTUUUUU 32r/   c                    |                      d|j        z             |                      dt          |j                  z             |                      dt	          |j                  z             |                      d|j        z             |t          j        k    rI|                      dt          |j
                  z             |                      d|j        z             d S d S )Nr   z#  Flags                       : %s
z#  ZoneType                    : %s
z#  Version                     : %s
r   r   )r   r   r~   FlagsrU   ZoneTypeVersionr   DNSSRV_TYPEID_ZONE_W2Krr   r  r  )r   r   zones      r$   
print_zoner  F  s    JJ58HHIIIJJ58I$*8U8UUVVVJJ58H8W8WWXXXJJ5DEEE111

9ODN<[<[[\\\

9DNJKKKKK 21r/   c                     |                      d|j        z             |j        D ](}|                      d           t          | ||           )d S )Nz  %d zone(s) found

)r   dwZoneCount	ZoneArrayr  )r   r   zonesr  s       r$   print_enumzonesr  Q  s_    JJ%(99::: ' '

44&&&&' 'r/   c                 8   |j         t          j        k    rd|j        z  }n|j         t          j        k    rd|j        z  }n|j         t          j        k    rd|j        j        z  }n|j         t          j        k    rd|j        j        z  }n`|j         t          j        k    rd|j        j        z  }n:|j         t          j	        k    r]d|j        j
        |j        j        |j        j        |j        j        |j        j        |j        j        j        |j        j        j        fz  }n|j         t          j        k    r!d|j        j        j        |j        j        fz  }n|j         t          j        k    r7d|j        j        j        |j        j        |j        j        |j        j        fz  }nF|j         t          j        k    r/d	 |j        j        D             }d
d                    |          z  }nd}|                     d||j        |j        |j        fz             d S )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)c                 "    g | ]}d |j         z  S )z"%s")str).0names     r$   
<listcomp>z$print_dns_record.<locals>.<listcomp>r  s    <<<t$("<<<r/   zTXT: %s,z	Unknown: z%    %s (flags=%x, serial=%d, ttl=%d)
)wTyper   
DNS_TYPE_AdataDNS_TYPE_AAAADNS_TYPE_PTRr  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mesgslists       r$   print_dns_recordr@  X  s   
yDO###(#	d(	(	(SX&	d'	'	'CHL)	d&	&	&38<(	d)	)	)chl+	d'	'	'\H'H&H$H%H)H.2H37`9 9 
d&	&	& 5 938;OPP	d'	'	'%)<)@#(.),);SX=M)O O	d'	'	'<<sx|<<<388E??*JJ7ck3<1A;C C D D D D Dr/   c                     |j         D ]K}|                     d|j        j        |j        |j        fz             |j        D ]}t          | |           Ld S )Nz#  Name=%s, Records=%d, Children=%d
)r=  r   dnsNodeNamer  wRecordCountdwChildCountrecordsr@  )r   rE  r=  dns_recs       r$   print_dnsrecordsrG  z  s    { 0 0

9O'$$=& & 	' 	' 	' { 	0 	0G w////	00 0r/   c                 l    	 t          | |          }n!# t          $ r}t          |j         d d }~ww xY w|S r   )r   r   r   r   )record_typer#  r=  r#   s       r$   data_to_dns_recordrJ    sM    . d33 . . .AF#-. Js    
1,1c                   z    e Zd ZdZdZdgZej        ej        ej	        dZ
 eddddg d	d
          gZ	 	 ddZdS )cmd_serverinfozQuery for Server information.%prog <server> [options]r   	sambaoptsversionoptscredopts--client-versionClient Versionlonghornw2k|dotnet|longhornw2kdotnetrT  cli_verhelpdefaultmetavarchoicesdestNc                 .   |                                 | _        |                    | j                  | _        t	          || j        | j                  }t          |          }|                    |d|d d          \  }}	t          | j        ||	           d S )Nr   
ServerInfo)	get_loadparmr   get_credentialsr    r%   r   DnssrvQuery2r   r   )
selfr   rY  rO  rQ  rP  r"   r   r   ress
             r$   runzcmd_serverinfo.run  s    ((**--dg66
vtw
;;+G44++NAv,0,@ @FC00000r/   NNN__name__
__module____qualname____doc__synopsis
takes_argsoptionsSambaOptionsVersionOptionsCredentialsOptionstakes_optiongroupsr   takes_optionsrg  r+   r/   r$   rL  rL    s        '')HJ )-.  	!(8!+@4449	F 	F 	FM =A
1 
1 
1 
1 
1 
1r/   rL  c           
          | D ]h\  }}}}d|                                 z   }t          || d| d| dd|          }|                    |           |                    ||||f           idS )z$Generate options for cmd_zoneoptionsz--z [-]int)r[  typer_  N)r   r   r   )	tableru  integer_propertieskdoc_min_maxoopts	            r$   _add_integer_optionsr    s    # 6 63d17799a!33T33D333    	S!!!!!1dD!"455556 6r/   c            
       &   e Zd ZdZdZddgZej        ej        ej	        dZ
 edddd	g d
d           eddd           eddd           eddd           edddd          gZg Z eg dee           	 	 	 	 	 d#dZd Zd  Zd! Zd" ZdS )$cmd_zoneoptionszChange zone aging options.%prog <server> <zone> [options]r   r  rN  rR  rS  rT  rU  rV  rY  rZ  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   r(   )NoRefreshIntervalz3Aging no refresh interval in hours (0: use default)r   0V )RefreshIntervalz0Aging refresh interval in hours (0: use default)r   r  NFc                    |                                 | _        |                    | j                  | _        t	          || j        | j                  }t          |          }t          j        }| j        D ]\  }}}}|	                    |          ||         }|||k     rt          | d|           |||k    rt          | d|           t          j                    }||_        ||_        |r t          d| d| d| | j                   	 |                    |d||dd||           n(# t"          $ r}t          d	| d|           d d }~ww xY wt          d
| d| | j                   d}||	|
fD ]	}||dz  }
|dk    rt          d          ||                     ||||           |	|                     |||	|           |
|                     |||
|           d S d S )Nz must be at least z can't exceed z
would set z to z for filer   ResetDwordPropertyzCould not set zSet r(   z(Multiple --mark-* options will not work
)rb  r   rc  r    r%   r   r   DNSSRV_TYPEID_NAME_AND_PARAMr|  getr   DNS_RPC_NAME_AND_PARAMdwParampszNodeNameprintr   DnssrvOperation2r   mark_old_records_staticmark_records_static_regexmark_records_dynamic_regex)re  r   r  rY  rO  rQ  rP  dry_runr  r  r  kwargsr"   r   nap_typer}  r  r  r  v
name_paramr#   n_mark_optionsr   s                           r$   rg  zcmd_zoneoptions.run  s    ((**--dg66
vtw
;;+G449 $ 7 	5 	5AtT1zz!}}$q	AAHH"a#A#A4#A#ABBBAHH"a#=#=t#=#=>>>"9;;J!"J%&J" 8188!88$88tyIIII
J)).*+*0*.*+*>*2*46 6 6 6  J J J"#>A#>#>1#>#>??TIJ #####$)44444
 )+,. 	$ 	$A }!#AJKKK".(()@)02 2 2 %0**6+/+D+24 4 4
 &1++F,0,F,35 5 5 5 5 21s   D55
E?EEc                     t          d|z  t                      | j        | j                  }d| d|                                 }|                    |t          j        dddg          }||fS )	N	ldap://%surlsession_infocredentialsr   zDC=z#,CN=MicrosoftDNS,DC=DomainDNSZones,z/(&(objectClass=dnsNode)(!(dNSTombstoned=TRUE)))	dnsRecordr  )basescope
expressionattrs)r   r   r    r   get_default_basednsearchldbSCOPE_SUBTREE)re  r   	zone_namesamdbzone_dnnodess         r$   _get_dns_nodeszcmd_zoneoptions._get_dns_nodes3  s    +.#1#3#3"&*: : :3 3 3..003 3 '#&#4*D$/#8	  : :
 e|r/   c                    	 t          j        |d          }t          j        |          }n%# t          $ r}t	          d| d          d }~ww xY wt          j        t          |                    }|                     ||          \  }	}
|
D ]T}d|vrt          |d                   }d}t          |          D ]S\  }}t          t          j        |          }|j        |k     r)|j        dk    rd|_        t          |          ||<   |dz  }T|dk    r|d         d                                         }|r1t#          d| d	t%          |           d
| d| d	| j                   t(          j                            |	|j        |dt(          j                  }|	                    |           t#          d| d	t%          |           d
| d| d	| j                   Vd S )Nz%Y-%m-%dzInvalid date z: should be YYY-MM-DDr  r   r(   r  would make / records static on .r  dnr  made )timestrptimemktime
ValueErrorr   r   unix_to_dns_timestampry  r  list	enumerater
   r   DnssrvRpcRecorddwTimeStampr   decoder  lenr   r  Message	from_dictr  FLAG_MOD_REPLACEmodify)re  r   r  date_stringr  tstr#   	thresholdr  r  nodevalueschangesr   r  r=  r  msgs                      r$   r  z'cmd_zoneoptions.mark_old_records_staticB  st   	S{J77BBAA 	S 	S 	SQ{QQQRRR	S23q66::	**69==u 	: 	:D$&&${+,,FG!&)) ! !1 !5q99?Y..3?a3G3G&'CO (F1IqLG!||<?))++D  0G 0 0c&kk 0 0 0 0#,0 0 06:iA A A A+''/3w6<)* )* ),(<	> >C
 LL )' ) )CKK ) )) )%) ) )/3y: : : : :;	: 	:s   ), 
AA		Ac                 N   t          j        |          }|                     ||          \  }}|D ]s}|d         d                                         }	|                    |	          s9d|vr>t          |d                   }
t          |
          dk    rgd}t          |
          D ]H\  }}t          t          j
        |          }|j        dk    rd|_        t          |          |
|<   |dz  }I|dk    r|r1t          d| dt          |
           d|	 d| d	| j        	           t          j                            ||j        |
d
t          j                  }|                    |           t          d| dt          |
           d|	 d| d	| j        	           udS )z>Make the records of nodes with matching names static.
        r  r   r  r(   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  )re  r   r  regexr  rr  r  r  r  r  r  r   r  r=  r  s                   r$   r  z)cmd_zoneoptions.mark_records_static_regexl  s*    Ju**69==u "	: "	:D<?))++D88D>> $&&${+,,F6{{aG!&)) ! !1 !5q99?a''&'CO (F1IqLG!||  0G 0 0c&kk 0 0 0 0#,0 0 06:iA A A A+''/3w6<)* )* ),(<	> >C
 LL )' ) )CKK ) )) )%) ) )/3y: : : : :C"	: "	:r/   c                    t          j        |          }|                     ||          \  }}t          j                    }t	          j        t          |                    }	t          j        t          j	        t          j
        h}
|D ]}}|d         d                                         }|                    |          s9d|vr>t          |d                   }t          |          dk    rgd}t          |          D ]Q\  }}t!          t          j        |          }|j        |
v r)|j        dk    r|	|_        t)          |          ||<   |dz  }R|dk    r|r2t+          d| dt          |           d| d| d	| j        	           t.          j                            ||j        |d
t.          j                  }|                    |           t+          d| dt          |           d| d| d	| j        	           dS )zMake the records of nodes with matching names dynamic, with a
        current timestamp. In this case we only adjust the A, AAAA,
        and TXT records.
        r  r   r  r(   r  r  z records dynamic on r  r  r  r  N)r  r  r  r  r   r  ry  r   r"  r$  r8  r  r  r  r  r  r
   r  r!  r  r   r  r   r  r  r  r  r  r  )re  r   r  r  r  r  r  r  nowdns_timestampsafe_wtypesr  r  r  r  r   r  r=  r  s                      r$   r  z*cmd_zoneoptions.mark_records_dynamic_regex  sq   
 Ju**69==uikk 6s3xx@@O
  "	: "	:D<?))++D88D>> $&&${+,,F6{{aG!&)) ! !1 !5q999++10D0D&3CO (F1IqLG!||  0G 0 0c&kk 0 0 0 0#,0 0 06:iA A A A+''/3w6<)* )* ),(<	> >C
 LL )' ) )CKK ) )) )%) ) )/3y: : : : :C"	: "	:r/   )NNNFNNN)rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  r   ru  r|  r  rg  r  r  r  r  r+   r/   r$   r  r    s       $$0HF#J )-.  	!(8!+@4449	F 	F 	F 	*LF	H 	H 	H,hJ	L 	L 	L-xK	M 	M 	Mt[B	D 	D 	DM   	 	 	 '+- - - CG&+$(&*'+	F5 F5 F5 F5R  (: (: (:T(: (: (:T1: 1: 1: 1: 1:r/   r  c                   |    e Zd ZdZdZddgZej        ej        ej	        dZ
 edddd	g d
d          gZ	 	 ddZdS )cmd_zoneinfozQuery for zone information.r  r   r  rN  rR  rS  rT  rU  rV  rY  rZ  Nc                 .   |                                 | _        |                    | j                  | _        t	          || j        | j                  }t          |          }|                    |d||d          \  }	}
t          | j        |	|
           d S )Nr   ZoneInfo)	rb  r   rc  r    r%   r   rd  r  r   )re  r   r  rY  rO  rQ  rP  r"   r   r   rf  s              r$   rg  zcmd_zoneinfo.run  s    ((**--dg66
vtw
;;+G44++NAvt,68 8ty&#.....r/   rh  ri  r+   r/   r$   r  r    s        %%0HF#J )-.  	!(8!+@4449	F 	F 	FM CG
/ 
/ 
/ 
/ 
/ 
/r/   r  c                   \   e Zd ZdZdZdgZej        ej        ej	        dZ
 eddddg d	d
           edddd           edddd           edddd           edddd           edddd           edddd           ed d!dd"           ed#d$dd%          g	Z	 	 	 d)d(Zd'S )*cmd_zonelistzQuery for zones.rM  r   rN  rR  rS  rT  rU  rV  rY  rZ  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nondsFNc           	         d}|r|t           j        z  }|r|t           j        z  }|r|t           j        z  }|r|t           j        z  }|r|t           j        z  }|r|t           j        z  }|	r|t           j        z  }|
r|t           j        z  }|dk    rt           j        }|	                                | _
        |                    | j
                  | _        t          || j
        | j                  }t          |          }|                    |d|d dt           j        |          \  }}|t           j        k    rt           j        }nt           j        }t)          | j        ||           d S )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_DSrb  r   rc  r    r%   r   DnssrvComplexOperation2DNSSRV_TYPEID_DWORDr   r  DNSSRV_TYPEID_ZONEr  r   )re  r   rY  r  r  r  r  r  r  r  r  rO  rQ  rP  request_filterr"   r   r   rf  s                      r$   rg  zcmd_zonelist.run  s     	Ai@@N 	CiBBN 	?i>>N 	>i==N 	Ai@@N 	Ai@@N 	<i;;N 	@i??NQ&?N((**--dg66
vtw
;;+G4466~78&$7B7@7T7E	G G Y===5FF1F	63/////r/   )FFFFFFFFNNNri  r+   r/   r$   r  r    s       )HJ )-.  	!(8!+@4449	F 	F 	F 	{!?"	4 	4 	4}#9"	6 	6 	6y2"	2 	2 	2x@"	1 	1 	1{!5"	4 	4 	4{!5"	4 	4 	4v="	/ 	/ 	/z :"	2 	2 	2%M, JOFK7;)0 )0 )0 )0 )0 )0r/   r  c                   |    e Zd ZdZdZddgZej        ej        ej	        dZ
 edddd	g d
d          gZ	 	 ddZdS )cmd_zonecreatezCreate a zone.r  r   r  rN  rR  rS  rT  rU  rV  rY  rZ  Nc           
         |                                 | _        |                    | j                  | _        t	          || j        | j                  }|                                }t          |          }|t          j        k    rMt          j	        }	t          j
                    }
||
_        t          j        |
_        d|
_        d|
_        d|
_        n|t          j        k    r^t          j        }	t          j                    }
||
_        t          j        |
_        d|
_        d|
_        d|
_        t          j        |
_        n]t          j        }	t          j                    }
||
_        t          j        |
_        d|
_        d|
_        d|
_        t          j        |
_        |                    |d|d dd|	|
           t          j        }	t          j                    }d|_        t          j        |_        	 |                    |d||dd|	|           nI# t>          $ r<}|j         d         tB          j"        k    r| j#        $                    d           |d }~ww xY w| j#        $                    d|z             d S )Nr   r(   
ZoneCreateAllowUpdater  zZone already exists.zZone %s created successfully
)%rb  r   rc  r    r%   r   r   r   r   DNSSRV_TYPEID_ZONE_CREATE_W2KDNS_RPC_ZONE_CREATE_INFO_W2Kr   r   rN   r   r   fDsIntegratedfLoadExistingr    DNSSRV_TYPEID_ZONE_CREATE_DOTNETDNS_RPC_ZONE_CREATE_INFO_DOTNETrl   r  DNSSRV_TYPEID_ZONE_CREATE!DNS_RPC_ZONE_CREATE_INFO_LONGHORNr  r  r  r  rY   r  r   r   r   "WERR_DNS_ERROR_ZONE_ALREADY_EXISTSr   r   )re  r   r  rY  rO  rQ  rP  r"   r   r   zone_create_infoname_and_paramr#   s                r$   rg  zcmd_zonecreate.runL  sg    ((**--dg66
vtw
;;zz||+G44Y===<F(EGG+/(*.*D'&'#-.*-.**yBBB?F(HJJ+/(*.*D'&'#-.*-.*)2)H&&8F(JLL+/(*.*D'&'#-.*-.*)2)H&!!.!VT"#\6"2	4 	4 	4 7"9;;%2"!%!<	%%na&')=v&46 6 6 6  	 	 	vayFEEE	 6777G	
 		84?@@@@@s   3H 
I7IIrh  ri  r+   r/   r$   r  r  9  s        0HF#J )-.  	!(8!+@4449	F 	F 	FM CG7A 7A 7A 7A 7A 7Ar/   r  c                   T    e Zd ZdZdZddgZej        ej        ej	        dZ
	 	 ddZdS )	cmd_zonedeletezDelete a zone.r  r   r  rN  Nc           
         |                                 | _        |                    | j                  | _        t	          || j        | j                  }|                                }	 |                    t          j        d||ddt          j	        d           }n># t          $ r1}|j        d         t          j        k    rt          d          |d }~ww xY w| j                            d|z             d S )Nr   DeleteZoneFromDsz0Zone does not exist and so could not be deleted.zZone %s deleted successfully
)rb  r   rc  r    r%   r   r  r   r   DNSSRV_TYPEID_NULLr   r   r   "WERR_DNS_ERROR_ZONE_DOES_NOT_EXISTr   r   r   )	re  r   r  rO  rQ  rP  r"   rf  r#   s	            r$   rg  zcmd_zonedelete.run  s     ((**--dg66
vtw
;;zz||	++I,Q,-vtQ@R,5,H,02 2CC  	 	 	vayFEEE"#UVVVG	
 		84?@@@@@s   )0B 
C$,CCrh  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  rg  r+   r/   r$   r  r    sl        0HF#J )-.  :>A A A A A Ar/   r  c                       e Zd ZdZdZg dZej        ej        ej	        dZ
 edddd	           ed
ddd	           edddd	           edddd	           edddd	           edddd	           edddd	          gZ	 	 	 	 ddZdS ) 	cmd_queryzQuery a name.zO%prog <server> <zone> <name> <A|AAAA|PTR|CNAME|MX|NS|SOA|SRV|TXT|ALL> [options])r   r  r  rtyperN  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_childrenFNc                    t          |          }|                    d          dk    r| j                            d|z             d}|r|t          j        z  }|r|t          j        z  }|r|t          j        z  }|r|t          j        z  }|	r|t          j	        z  }|
r|t          j
        z  }|r|t          j        z  }|dk    rt          j        }|t          j	        k    rC| j                            d           | j                            d           |t          j        z  }|                                | _        |                    | j                  | _        t!          || j        | j                  }	 |                    t          j        d|||d ||d d 
  
        \  }}n># t&          $ r1}|j        d         t*          j        k    rt/          d          |d }~ww xY wt1          | j        |           d S )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.)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_CHILDRENrb  r   rc  r    r%   DnssrvEnumRecords2r   r   r   r   "WERR_DNS_ERROR_NAME_DOES_NOT_EXISTr   rG  )re  r   r  r  r  r  r  r  r  r  r  r  rO  rQ  rP  rI  select_flagsr"   buflenrf  r#   s                        r$   rg  zcmd_query.run  s    $E**99S>>RIOOL ! " " "  	BIAAL 	>I==L 	=I<<L 	BIAAL 	CIBBL 	?I>>L 	AI@@L1$@L9AAAIOO]^^^IOO5666IAAL((**--dg66
vtw
;;	"555q&$k<t= =KFCC  	 	 	vayFEEE"#CDDDG	
 	C(((((s   8+F$ $
G.,GG)
FFFFFFFNNNri  r+   r/   r$   r  r    sP       EH 544J )-.  	}#K"	6 	6 	6y6"	2 	2 	2x3"	1 	1 	1x1"	1 	1 	1~$="	7 	7 	7%;"	8 	8 	8 ';"	: 	: 	:M" EJBG:>/) /) /) /) /) /)r/   r  c                   T    e Zd ZdZdZddgZej        ej        ej	        dZ
	 	 d	dZdS )
cmd_roothintszQuery root hints.z!%prog <server> [<name>] [options]r   zname?rN  r  Nc                 v   t           j        }t          j        t          j        z  }|                                | _        |                    | j                  | _        t          || j        | j                  }|
                    t          j        d|d|d ||d d 
  
        \  }	}
t          | j        |
           d S )Nr   z..RootHints)r   r&  r   r$  r%  rb  r   rc  r    r%   r(  r   rG  r   )re  r   r  rO  rQ  rP  rI  r*  r"   r+  rf  s              r$   rg  zcmd_roothints.run  s    &!=!>? ((**--dg66
vtw
;;1111fm$\4? ? 	C(((((r/   )r  NNNr  r+   r/   r$   r-  r-    sg        2HG$J )-.  >B) ) ) ) ) )r/   r-  c                   T    e Zd ZdZdZg dZej        ej        ej	        dZ
	 	 ddZdS )cmd_add_recordak  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   r  r  r  r#  rN  Nc	           	         |                                 dvrt          d|z            t          |          }	t          |	|          }
|                                | _        |                    | j                  | _        t          || j        | j                  }t          j
                    }|
|_        	 |                    t          j        d||||d            nv# t          $ ri}|j        d         t           j        k    rt          d|d|d          |j        d         t           j        k    rt          d|d|d          |d }~ww xY w| j                            d           d S )	NAAAAAPTRCNAMENSMXSRVTXTz)Adding record of type %s is not supportedr   z5Zone does not exist; record could not be added. zone[] name[rx  z7Record already exists; record could not be added. zone[zRecord added successfully
)r   r   r   rJ  rb  r   rc  r    r%   r   DNS_RPC_RECORD_BUFr=  DnssrvUpdateRecord2r   r   r   r   r)  $WERR_DNS_ERROR_RECORD_ALREADY_EXISTSr   r   )re  r   r  r  r  r#  rO  rQ  rP  rI  r=  r"   add_rec_bufr#   s                 r$   rg  zcmd_add_record.run.  s    ;;== WWWJURSSS#E** d33((**--dg66
vtw
;;244	(()N)*FD$TS S S S 	 	 	vayFEEE"ljnjnjnptptpt#uvvvvayFGGG"llplplprvrvrv#wxxxG	 		566666   6%C 
E&A$E

Erh  r  r+   r/   r$   r0  r0    so          VH<<<J )-.  >B'+7 7 7 7 7 7r/   r0  c                   R    e Zd ZdZdZg dZej        ej        ej	        dZ
	 ddZdS )cmd_update_recorda  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   r  r  r  olddatanewdatarN  Nc
           	      T   |                                 }|dvrt          d|z            	 |dk    rt          t          |           n|dk    rt          t          |           n'# t
          $ r}
t          d| d|
          d }
~
ww xY wt          |          }t          ||          }|                                | _	        |
                    | j	                  | _        t          || j	        | j                  }	 t          ||||||          }n!# t          $ r}
t          |
j         d d }
~
ww xY w|st          d          |j        |_        |j        |_        |j        |_        |j        |_        t)          j                    }||_        t)          j                    }||_        	 |                    t(          j        d|||||           n># t2          $ r1}
|
j        d         t4          j        k    rt          d	          |
d }
~
ww xY w| j                            d
           d S )N)	r5  r6  r7  r8  r9  r:  SOAr;  r<  z+Updating record of type %s is not supportedr5  r6  zbad data for z: r  r   z1Zone does not exist; record could not be updated.zRecord updated successfully
)r   r   r   r   r	   OSErrorr   rJ  rb  r   rc  r    r%   r   r   r   r:  r;  r<  r  r   r>  r=  r?  r   r   r   r)  r   r   )re  r   r  r  r  rE  rF  rO  rQ  rP  r#   rI  r=  r"   	rec_matchrA  del_rec_bufs                    r$   rg  zcmd_update_record.rund  sf    VVVLuTUUU	?||'7++++&(G,,, 	? 	? 	?=u====>>>	? $E** g66((**--dg66
vtw
;;	2(64{)02 2II 	2 	2 	2'T1	2  	A?@@@  ' )$1#/244244#	(()N)*)/)-)-)4)46 6 6 6  	 	 	vayFEEE"#VWWWG	
 		788888sG   7A$ $
B.BB>D 
D1D,,D1*%G 
H,HHrh  r  r+   r/   r$   rD  rD  K  sk          gHJJJJ )-.  8<89 89 89 89 89 89r/   rD  c                   P    e Zd ZdZdZg dZej        ej        ej	        dZ
ddZdS )cmd_delete_recordan  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' ..."
    r1  r2  rN  Nc	           	         |                                 dvrt          d|z            t          |          }	t          |	|          }
|                                | _        |                    | j                  | _        t          || j        | j                  }t          j
                    }|
|_        	 |                    t          j        d|||d |           nv# t          $ ri}|j        d         t           j        k    rt          d|d|d          |j        d         t           j        k    rt          d|d|d          |d }~ww xY w| j                            d           d S )	Nr4  z+Deleting record of type %s is not supportedr   z7Zone does not exist; record could not be deleted. zone[r=  rx  z9Record does not exist; record could not be deleted. zone[zRecord deleted successfully
)r   r   r   rJ  rb  r   rc  r    r%   r   r>  r=  r?  r   r   r   r   r)  $WERR_DNS_ERROR_RECORD_DOES_NOT_EXISTr   r   )re  r   r  r  r  r#  rO  rQ  rP  rI  r=  r"   rK  r#   s                 r$   rg  zcmd_delete_record.run  s   ;;== WWWLuTUUU#E** d33((**--dg66
vtw
;;244	(()N)*)/)-)-)-)46 6 6 6  	 	 	vayFEEE"llplplprvrvrv#wxxxvayFGGG"lnrnrnrtxtxtx#yzzzG	 		788888rB  rh  r  r+   r/   r$   rM  rM    sf          VH<<<J )-. 9 9 9 9 9 9r/   rM  c                       e Zd ZdZdZddgZej        ej        ej	        dZ
 edddd	
           edddd	
          gZ	 	 ddZdS )cmd_cleanup_recorda\  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   dnshostnamerN  z-vz	--verbosez
Be verboser  )r[  r  z-qz--quietzBe quietNFc                     |                                 }|                    |          }	|                     ||          }
t          d|z  t	                      |	|          }t          j        ||
|d           d S )N)verbosequietr  r  T)ignore_no_name)rb  rc  
get_loggerr   r   r   remove_dns_references)re  r   rR  rO  rQ  rP  rT  rU  r   r    loggerr  s               r$   rg  zcmd_cleanup_record.run  s    ##%%((,,>>+.#1#3#3"'B0 0 0 	'v{7;	= 	= 	= 	= 	= 	=r/   )NNNFFri  r+   r/   r$   rQ  rQ    s        	 	 .HM*J )-.  	t[|LIIItYZEEEM
 AE38= = = = = =r/   rQ  c                   N   e Zd ZdZi Z e            ed<    e            ed<    e            ed<    e            ed<    e	            ed<    e
            ed<    e            ed<    e            ed	<    e            ed
<    e            ed<    e            ed<    e            ed<   dS )cmd_dnsz%Domain Name Service (DNS) management.r   zoneoptionsr  zonelist
zonecreate
zonedeletequery	roothintsaddupdatedeletecleanupN)rj  rk  rl  rm  subcommandsrL  r  r  r  r  r  r  r-  r0  rD  rM  rQ  r+   r/   r$   r[  r[    s        //K . 0 0K!0!2!2K*lnnK
*lnnK
 . 0 0K . 0 0K$9;;K,}K'))K--//K--//K//11K	r/   r[  )Ksamba.getoptgetoptrp  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.   r6   r<   rD   rK   rU   r[   rb   rh   rr   r~   r   r   r   r   r   r  r  r  r@  rG  rJ  rL  r  r  r  r  r  r  r  r-  r0  rD  rM  rQ  r[  r+   r/   r$   <module>rq     sr  $                         ' ' ' ' ' ' ' '               



 * * * * * * * * 				 % % % % % % % %       % % % % % %            ) ( ( ( ( ( ( ( O O O O O O O O O O , , , , , ,	 	 	      : : :9 9 93 3 35 5 57 7 7; ; ;; ; ;8 8 8    "$ $ $
 
 
Ea Ea EaP>V >V >VBL L L' ' 'D D DD0 0 0  1 1 1 1 1W 1 1 1@	6 	6 	6M: M: M: M: M:g M: M: M:`/ / / / /7 / / /@L0 L0 L0 L0 L07 L0 L0 L0^JA JA JA JA JAW JA JA JAZA A A A AW A A ADN) N) N) N) N) N) N) N)b) ) ) ) )G ) ) ):27 27 27 27 27W 27 27 27jQ9 Q9 Q9 Q9 Q9 Q9 Q9 Q9h69 69 69 69 69 69 69 69r'= '= '= '= '= '= '= '=T2 2 2 2 2l 2 2 2 2 2r/   