HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //proc/1233/root/usr/lib/python3/dist-packages/samba/netcmd/__pycache__/dns.cpython-310.pyc
o

�/a���@s�ddlmZddlmZddlmZddlmZddlm	Z	m
Z
ddlmZddlmZddlZddl
Z
ddlZddlmZmZddlZdd	lmZmZdd
lmZddlmZddlmZmZmZmZdd
lmZm Z ddl!m"Z"m#Z#m$Z$ddl!m%Z%dd�Z&dd�Z'dd�Z(dd�Z)dd�Z*dd�Z+dd�Z,dd�Z-d d!�Z.d"d#�Z/d$d%�Z0d&d'�Z1d(d)�Z2d*d+�Z3d,d-�Z4d.d/�Z5d0d1�Z6d2d3�Z7d4d5�Z8d6d7�Z9d8d9�Z:d:d;�Z;d<d=�Z<Gd>d?�d?e�Z=d@dA�Z>GdBdC�dCe�Z?GdDdE�dEe�Z@GdFdG�dGe�ZAGdHdI�dIe�ZBGdJdK�dKe�ZCGdLdM�dMe�ZDGdNdO�dOe�ZEGdPdQ�dQe�ZFGdRdS�dSe�ZGGdTdU�dUe�ZHGdVdW�dWe�ZIGdXdY�dYe�ZJdS)Z�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
CsV|��dkrd}d|}z
t�|||�}W|Sty*}ztd||f��d}~ww)N�	localhostz	127.0.0.1zncacn_ip_tcp:%s[sign]z.Connecting to DNS RPC server %s failed with %s)�lowerr�RuntimeErrorr)�server�lp�creds�binding_str�dns_conn�e�r"�2/usr/lib/python3/dist-packages/samba/netcmd/dns.py�dns_connect/s���r$cCs,|dkrd}|S|dkrd}|Sd|}|S)Nr�FALSE��TRUE�UNKNOWN (0x%x)r")�flag�retr"r"r#�bool_string;s��r+cCs4d}|D]
}|t||�kr|}nq|sd|}|S)Nr(��getattr)�module�	enum_defs�valuer*r!r"r"r#�enum_stringEs�r1cCs4d}|D]}|t||�@r|d|7}q|sd}|S)N�z%s �NONEr,)r.�bitmap_defsr0r*�br"r"r#�
bitmap_stringPs�r6cC�gd�}tt||�S)N)�DNS_BOOT_METHOD_UNINITIALIZED�DNS_BOOT_METHOD_FILE�DNS_BOOT_METHOD_REGISTRY�DNS_BOOT_METHOD_DIRECTORY�r1r)�boot_methodr/r"r"r#�boot_method_stringZ�r>cCr7)N)�DNS_ALLOW_RFC_NAMES_ONLY�DNS_ALLOW_NONRFC_NAMES�DNS_ALLOW_MULTIBYTE_NAMES�DNS_ALLOW_ALL_NAMESr<)�
check_flagr/r"r"r#�name_check_flag_string`r?rEcCr7)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�r1r)�	zone_typer/r"r"r#�zone_type_stringfsrNcCr7)N)�DNS_ZONE_UPDATE_OFF�DNS_ZONE_UPDATE_UNSECURE�DNS_ZONE_UPDATE_SECURErL)�zone_updater/r"r"r#�zone_update_stringmr?rScCr7)N)�DNS_ZONE_SECSECURE_NO_SECURITY�DNS_ZONE_SECSECURE_NS_ONLY�DNS_ZONE_SECSECURE_LIST_ONLY�DNS_ZONE_SECSECURE_NO_XFERr<)�securityr/r"r"r#�zone_secondary_security_stringsr?rYcCr7)N)�DNS_ZONE_NOTIFY_OFF�DNS_ZONE_NOTIFY_ALL_SECONDARIES�DNS_ZONE_NOTIFY_LIST_ONLYr<)�notify_levelr/r"r"r#�zone_notify_level_stringyr?r^cCr7)N)�DNS_DP_AUTOCREATED�
DNS_DP_LEGACY�DNS_DP_DOMAIN_DEFAULT�DNS_DP_FOREST_DEFAULT�DNS_DP_ENLISTED�DNS_DP_DELETED�r6r)�dp_flagsr4r"r"r#�dp_flags_stringr?rgcCr7)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_READONLYre)�flagsr4r"r"r#�zone_flags_string�srrcCs@g}|s|St|j�D]}tttd|j|��}|�|�q|S)N�I)�range�	AddrCountrrr�	AddrArray�append)�arrayr*�i�addrr"r"r#�ip4_array_string�sr{cCs�g}|s|St|j�D]K}|j|jddkr.tjdg|j|jdd��R�}tt|�}n#|j|jddkrOtjdg|j|jdd��R�}tt|�}nd	}|�	|�q|S)
Nr��4B����16B��UNKNOWN)
rtrurv�MaxSa�structrrrrrw)rxr*ry�xrzr"r"r#�dns_addr_array_string�s""r�c
Cs.zt|�WSty}zt|j��d}~ww�N)rrr�args)�rec_typer!r"r"r#�
dns_type_flag�s

��r�cCsJ|��}|dkr
tj}|S|dkrtj}|S|dkrtj}|Std|��)N�W2K�DOTNET�LONGHORNzUnknown client version %s)�upperr�DNS_CLIENT_VERSION_W2K�DNS_CLIENT_VERSION_DOTNET�DNS_CLIENT_VERSION_LONGHORNr)�cli_version�version�client_versionr"r"r#�dns_client_version�s���r�cCs�|�d|j�|�dt|j��|�dt|j��|�dt|j��|�dt|j��|�d|j�|�d|j	�|t
jkrd|�dt|j
��|�d	t|j��|�d
t|j��n|�dt|j
��|�d	t|j��|�d
t|j��|�d|j�|�d|j�|�d
|j�|�d|j�|�dt|j��|�d|j�|�d|j�|�d|j�|�d|j�|�d|j�|�d|j�|�d|j�|�d|j�|�dt|j��|�dt|j ��|�dt|j!��|�dt|j"��|�dt|j#��|�dt|j$��|�dt|j%��|�dt|j&��|�d t|j'��|�d!t|j(��|�d"t|j)��|�d#t|j*��|�d$t|j+��|t
j,k�r�|�d%|j-�|�d&t|j.��|�d'|j/�|�d(|j0�|�d)|j1�|�d*|j2�|�d+|j3�|�d,|j4�|�d-|j5�|�d.|j6�|�d/|j7�|�d0|j8�|�d1|j9�|�d2|j:�|t
jk�r�|�d3t|j;��dSdS)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�	dwVersionr>�fBootMethodr+�fAdminConfigured�fAllowUpdate�fDsAvailable�
pszServerName�pszDsContainerr�DNSSRV_TYPEID_SERVER_INFOr{�aipServerAddrs�aipListenAddrs�
aipForwardersr��
dwLogLevel�dwDebugLevel�dwForwardTimeout�
dwRpcProtocolrE�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�
serverinfor"r"r#�print_serverinfo�s�
�������r�cCs:|�d|j�|�dt|j��|�dt|j��|�dt|j��|�dt|j��|�dt|j	��|�dt|j
��|�dt|j��|�d	|j�|t
jkrf|�d
t|j��n
|�d
t|j��|�dt|j��|�dt|j��|t
jkr�|�d
t|j��|�dt|j��n|�d
t|j��|�dt|j��|�dt|j��|�dt|j��|�dt|j��|�d|j�|�d|j�|�d|j�|t
jkr�|�dt|j��n
|�dt|j��|t
jk�re|�d|j �|�d|j!�|�d|j"�|t
jk�r1|�dt|j#��n
|�dt|j#��|�dt$|j%��|�d|j&�|�d|j'�|�d|j(�|�d|j)�|t
jk�r�|�dt|j*��|�d t|j+��|�d!t|j,��|�d"|j-�|�d#|j.�dSdS)$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��pszZoneNamerN�
dwZoneTyper+�fReverserSr��fPaused�	fShutdown�fAutoCreated�fUseDatabase�pszDataFiler�DNSSRV_TYPEID_ZONE_INFOr{�
aipMastersr�rY�fSecureSecondariesr^�fNotifyLevel�aipSecondaries�	aipNotify�fUseWins�
fUseNbstat�fAging�dwNoRefreshInterval�dwRefreshInterval�dwAvailForScavengeTime�aipScavengeServers�DNSSRV_TYPEID_ZONE_INFO_W2Kr��dwForwarderTimeout�fForwarderSlave�aipLocalMastersrg�	dwDpFlags�	pszDpFqdn�
pwszZoneDn�dwLastSuccessfulSoaCheck�dwLastSuccessfulXfr�fQueuedForBackgroundLoad�fBackgroundLoadInProgress�
fReadOnlyZone�dwLastXfrAttempt�dwLastXfrResult)r�r��zoneinfor"r"r#�print_zoneinfos�
��
����
�����r�cCs~|�d|j�|�dt|j��|�dt|j��|�d|j�|tjkr=|�dt	|j
��|�d|j�dSdS)Nr�z#  Flags                       : %s
z#  ZoneType                    : %s
z#  Version                     : %s
r�r�)r�r�rr�FlagsrN�ZoneType�Versionr�DNSSRV_TYPEID_ZONE_W2Krgr�r�)r�r��zoner"r"r#�
print_zoneFs
�rcCs6|�d|j�|jD]
}|�d�t|||�qdS)Nz  %d zone(s) found
�
)r��dwZoneCount�	ZoneArrayr)r�r��zonesr�r"r"r#�print_enumzonesQs


�rcCsh|jtjkrd|j}n�|jtjkrd|j}n�|jtjkr%d|jj}n|jtjkr2d|jj}nr|jtjkr?d|jj}ne|jtj	krad|jj
|jj|jj|jj
|jj|jjj|jjjf}nC|jtjkrsd|jjj|jjf}n1|jtjkr�d|jjj|jj|jj|jjf}n|jtjkr�d	d
�|jjD�}dd�|�}nd
}|�d||j|j|jf�dS)NzA: %szAAAA: %szPTR: %szNS: %sz	CNAME: %szKSOA: serial=%d, refresh=%d, retry=%d, expire=%d, minttl=%d, ns=%s, email=%szMX: %s (%d)zSRV: %s (%d, %d, %d)cSsg|]}d|j�qS)z"%s")�str)�.0�namer"r"r#�
<listcomp>rsz$print_dns_record.<locals>.<listcomp>zTXT: %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�slistr"r"r#�print_dns_recordXsB���r*cCsB|jD]}|�d|jj|j|jf�|jD]}t||�qqdS)Nz#  Name=%s, Records=%d, Children=%d
)r'r��dnsNodeNamer�wRecordCount�dwChildCount�recordsr*)r�r.r'�dns_recr"r"r#�print_dnsrecordszs
�
��r0c
Cs6zt||�}W|Sty}zt|j�d�d}~wwr�)rrrr�)�record_typer
r'r!r"r"r#�data_to_dns_record�s���r2c@sTeZdZdZdZdgZejejej	d�Z
eddddgd	�d
d�gZ		dd
d�Z
dS)�cmd_serverinfozQuery for Server information.�%prog <server> [options]r��	sambaopts�versionopts�credopts�--client-version�Client Version�longhorn�w2k|dotnet|longhorn��w2k�dotnetr;�cli_ver��help�default�metavar�choices�destNc
CsX|��|_|�|j�|_t||j|j�}t|�}|�|d|dd�\}}	t|j||	�dS)Nr�
ServerInfo)	�get_loadparmr�get_credentialsrr$r��DnssrvQuery2r�r�)
�selfrr@r6r8r7r r�r��resr"r"r#�run�s

�zcmd_serverinfo.run�NNN��__name__�
__module__�__qualname__�__doc__�synopsis�
takes_args�options�SambaOptions�VersionOptions�CredentialsOptions�takes_optiongroupsr�
takes_optionsrMr"r"r"r#r3�s ����r3c		Cs`|D]+\}}}}d|��}t||�d|�d|�d�d|d�}|�|�|�||||f�qdS)z$Generate options for cmd_zoneoptionsz--z [�-�]�int)rB�typerFN)rrrw)	�tabler[�integer_properties�k�doc�_min�_max�o�optr"r"r#�_add_integer_options�s�
�rhc
@s�eZdZdZdZddgZejejej	d�Z
edddd	gd
�dd�ed
ddd�edddd�edddd�eddddd�gZgZ
egd�ee
�					d(dd�Zd d!�Zd"d#�Zd$d%�Zd&d'�ZdS))�cmd_zoneoptionszChange zone aging options.�%prog <server> <zone> [options]rr�r5r9r:r;r<r=r@rAz--mark-old-records-staticz
YYYY-MM-DDz0Make records older than this (YYYY-MM-DD) static)rDrBz--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)�actionrB))�AgingzEnable record agingrr&)�NoRefreshIntervalz3Aging no refresh interval in hours (0: use default)r�0V)�RefreshIntervalz0Aging refresh interval in hours (0: use default)rrpNFcKs�|��|_|�|j�|_t||j|j�}t|�}
tj}|jD]�\}}}}|�	|�dur,q||}|durA||krAt
|�d|����|durR||krRt
|�d|����t��}||_||_
|rotd|�d|�d|��|jd�qz|�|
d||dd||�Wnty�}zt
d	|�d|���d�d}~wwtd
|�d|��|jd�qd}||	|
fD]
}|dur�|d7}q�|dkr�t
d��|dur�|�||||�|	dur�|�|||	|�|
dur�|�|||
|�dSdS)
Nz must be at least z can't exceed z
would set z to z for ��filer�ResetDwordPropertyzCould not set zSet r&z(Multiple --mark-* options will not work
)rHrrIrr$r�r�DNSSRV_TYPEID_NAME_AND_PARAMra�getr�DNS_RPC_NAME_AND_PARAM�dwParam�pszNodeName�printr��DnssrvOperation2r�mark_old_records_static�mark_records_static_regex�mark_records_dynamic_regex)rKrr�r@r6r8r7�dry_runr|r}r~�kwargsr r��nap_typerbrdrerf�v�
name_paramr!�n_mark_optionsr�r"r"r#rM�s|
 ���������zcmd_zoneoptions.runcCsNtd|t�|j|jd�}d|�d|����}|j|tjdddgd�}||fS)	N�	ldap://%s��url�session_info�credentialsrzDC=z#,CN=MicrosoftDNS,DC=DomainDNSZones,z/(&(objectClass=dnsNode)(!(dNSTombstoned=TRUE)))�	dnsRecordr)�base�scope�
expression�attrs)r
rrr�get_default_basedn�search�ldb�
SCOPE_SUBTREE)rKr�	zone_name�samdb�zone_dn�nodesr"r"r#�_get_dns_nodes3s���zcmd_zoneoptions._get_dns_nodescCsrz
t�|d�}t�|�}Wnty!}ztd|�d���d}~wwt�t|��}|�||�\}	}
|
D]�}d|vr:q3t	|d�}d}
t
|�D]!\}}ttj
|�}|j|krg|jdkrgd|_t|�||<|
d7}
qF|
dkrmq3|dd��}|r�td|
�d	t|��d
|�d|�d�	|jd�q3tj�|	|j|d
�tj�}|	�|�td|
�d	t|��d
|�d|�d�	|jd�q3dS)Nz%Y-%m-%dz
Invalid date z: should be YYY-MM-DDr�rr&r�would make �/� records static on �.rr��dnr��made )�time�strptime�mktime�
ValueErrorrr�unix_to_dns_timestampr^r��list�	enumerater	r�DnssrvRpcRecord�dwTimeStampr
�decoderz�lenr�r��Message�	from_dictr��FLAG_MOD_REPLACE�modify)rKrr��date_stringr�ts�tr!�	thresholdr�r��node�values�changesryr�r'r�msgr"r"r#r|Bs`��������
����z'cmd_zoneoptions.mark_old_records_staticcCs:t�|�}|�||�\}}|D]�}|dd��}	|�|	�sqd|vr$qt|d�}
t|
�dkr1qd}t|
�D]\}}
tt	j
|
�}|jdkrSd|_t|�|
|<|d7}q7|dkrYq|rrt
d|�dt|
��d|	�d|�d�	|jd	�qtj�||j|
d
�tj�}|�|�t
d|�dt|
��d|	�d|�d�	|jd	�qdS)
z>Make the records of nodes with matching names static.
        rrr�r&r�r�r�r�rrr�r�N)�re�compiler�r�r�r�r�r�r	rr�r�r
rzr�r�r�r�r�r�r�)rKrr��regexr�rr�r�r�rr�r�ryr�r'r�r"r"r#r}lsZ


������
����z)cmd_zoneoptions.mark_records_static_regexcCsjt�|�}|�||�\}}t��}t�t|��}	tjtj	tj
h}
|D]�}|dd��}|�|�s2q"d|vr7q"t
|d�}
t|
�dkrDq"d}t|
�D]!\}}ttj|�}|j|
vrk|jdkrk|	|_t|�|
|<|d7}qJ|dkrqq"|r�td|�dt|
��d|�d|�d�	|jd	�q"tj�||j|
d
�tj�}|�|�td|�dt|
��d|�d|�d�	|jd	�q"dS)
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.
        rrr�r&r�r�z records dynamic on r�rrr�r�N)r�r�r�r�rr�r^rrrr"r�r�r�r�r�r	r�rr�r
rzr�r�r�r�r�r�r�)rKrr�r�rr�r�r��now�
dns_timestamp�safe_wtypesr�rr�r�ryr�r'r�r"r"r#r~�sf
�
������
����z*cmd_zoneoptions.mark_records_dynamic_regex)NNNFNNN)rPrQrRrSrTrUrVrWrXrYrZrr[rarhrMr�r|r}r~r"r"r"r#ri�sP�������
�

�I**ric@�VeZdZdZdZddgZejejej	d�Z
edddd	gd
�dd�gZ	
	
ddd�Z
d
S)�cmd_zoneinfozQuery for zone information.rjrr�r5r9r:r;r<r=r@rANcCsX|��|_|�|j�|_t||j|j�}t|�}|�|d||d�\}	}
t|j|	|
�dS)Nr�ZoneInfo)	rHrrIrr$r�rJr�r�)rKrr�r@r6r8r7r r�r�rLr"r"r#rM�s
�zcmd_zoneinfo.runrNrOr"r"r"r#r��� ����r�c@s�eZdZdZdZdgZejejej	d�Z
eddddgd	�d
d�edd
ddd�eddddd�eddddd�eddddd�eddddd�eddddd�ed d!dd"d�ed#d$dd%d�g	Z	&	&	'd*d(d)�Z
d'S)+�cmd_zonelistzQuery for zones.r4rr5r9r:r;r<r=r@rAz	--primaryzList primary zones (default)rl�primary�rBrmrFz--secondaryzList secondary zones�	secondary�--cachezList cached zones�cachez--autoz List automatically created zones�autoz	--forwardzList forward zones�forwardz	--reversezList reverse zones�reversez--dszList directory integrated zones�dsz--non-dszList non-directory zones�nondsFNc	Cs�d}|r	|tjO}|r|tjO}|r|tjO}|r|tjO}|r%|tjO}|r,|tjO}|	r3|tjO}|
r:|tjO}|dkrAtj}|�	�|_
|�|j
�|_t
||j
|j�}t|�}|�|d|ddtj|�\}}|tjkrptj}ntj}t|j||�dS)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_DSrHrrIrr$r��DnssrvComplexOperation2�DNSSRV_TYPEID_DWORDr�r��DNSSRV_TYPEID_ZONErr�)rKrr@r�r�r�r�r�r�r�r�r6r8r7�request_filterr r�r�rLr"r"r#rM
sB








�
zcmd_zonelist.run)FFFFFFFFNNNrOr"r"r"r#r��sR������������r�c@r�)�cmd_zonecreatezCreate a zone.rjrr�r5r9r:r;r<r=r@rANc
Cs�|��|_|�|j�|_t||j|j�}|��}t|�}|tjkr9tj	}	t�
�}
||
_tj
|
_d|
_d|
_d|
_n<|tjkrZtj}	t��}
||
_tj
|
_d|
_d|
_d|
_tj|
_ntj}	t��}
||
_tj
|
_d|
_d|
_d|
_tj|
_|�|d|ddd|	|
�}tj}	t��}d|_tj|_z|�|d||dd|	|�}Wnty�}
z|
j dt!j"kr�|j#�$d�|
�d}
~
ww|j#�$d|�dS)Nrr&�
ZoneCreate�AllowUpdatertzZone already exists.zZone %s created successfully
)%rHrrIrr$rr�rr��DNSSRV_TYPEID_ZONE_CREATE_W2K�DNS_RPC_ZONE_CREATE_INFO_W2Kr�rrGr�r��
fDsIntegrated�
fLoadExistingr�� DNSSRV_TYPEID_ZONE_CREATE_DOTNET�DNS_RPC_ZONE_CREATE_INFO_DOTNETrar��DNSSRV_TYPEID_ZONE_CREATE�!DNS_RPC_ZONE_CREATE_INFO_LONGHORNr{rurwryrQrxrr�r�"WERR_DNS_ERROR_ZONE_ALREADY_EXISTSr�r�)rKrr�r@r6r8r7r r�r��zone_create_inforL�name_and_paramr!r"r"r#rMLsd



����zcmd_zonecreate.runrNrOr"r"r"r#r�9r�r�c@s<eZdZdZdZddgZejejej	d�Z
		d	dd�ZdS)
�cmd_zonedeletezDelete a zone.rjrr�r5Nc	
Cs�|��|_|�|j�|_t||j|j�}|��}z|�tjd||ddtj	d�}Wnt
yB}z|jdtj
kr<td��|�d}~ww|j�d|�dS)Nr�DeleteZoneFromDsz0Zone does not exist and so could not be deleted.zZone %s deleted successfully
)rHrrIrr$rr{rr��DNSSRV_TYPEID_NULLrr�r�"WERR_DNS_ERROR_ZONE_DOES_NOT_EXISTrr�r�)	rKrr�r6r8r7r rLr!r"r"r#rM�s"

���zcmd_zonedelete.runrN�rPrQrRrSrTrUrVrWrXrYrZrMr"r"r"r#r�����r�c@s�eZdZdZdZgd�Zejejej	d�Z
eddddd	�ed
dddd	�ed
dddd	�eddddd	�eddddd	�eddddd	�eddddd	�gZ				d dd�Z
dS)!�	cmd_queryz
Query a name.zO%prog <server> <zone> <name> <A|AAAA|PTR|CNAME|MX|NS|SOA|SRV|TXT|ALL> [options])rr�r�rtyper5z--authorityz&Search authoritative records (default)rl�	authorityr�r�zSearch cached recordsr�z--gluezSearch glue records�gluez--rootzSearch root hints�rootz--additionalzList additional records�
additionalz
--no-childrenzDo not list children�no_childrenz--only-childrenzList only children�
only_childrenFNcCsZt|�}|�d�dkr|j�d|�d}|r|tjO}|r#|tjO}|r*|tjO}|r1|tjO}|	r8|tj	O}|
r?|tj
O}|rF|tjO}|dkrMtj}|tj	krc|j�d�|j�d�|tjO}|��|_
|
�|j
�|_t||j
|j�}z|�tjd|||d||dd�
\}}Wnty�}z|jdtjkr�td��|�d}~wwt|j|�dS)N�*���z-use "@" to dump entire domain, looking up %s
rz>Specify either --authority or --root along with --additional.
zAssuming --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_CHILDRENrHrrIrr$�DnssrvEnumRecords2r�rr�r�"WERR_DNS_ERROR_NAME_DOES_NOT_EXISTrr0)rKrr�rr�r�r�r�r�r�r�r�r6r8r7r1�select_flagsr �buflenrLr!r"r"r#rM�sR�










���z
cmd_query.run)
FFFFFFFNNNrOr"r"r"r#r��sF����������r�c@s<eZdZdZdZddgZejejej	d�Z
		d
dd	�ZdS)�
cmd_roothintszQuery root hints.z!%prog <server> [<name>] [options]rzname?r5r�NcCsltj}tjtjB}|��|_|�|j�|_t	||j|j�}|�
tjd|d|d||dd�
\}	}
t|j
|
�dS)Nrz..RootHints)rrrr�r�rHrrIrr$rr�r0r�)rKrrr6r8r7r1rr rrLr"r"r#rMs�

�zcmd_roothints.run)r�NNNr�r"r"r"r#r�r�rc@s<eZdZdZdZgd�Zejejej	d�Z
		ddd�ZdS)	�cmd_add_recordakAdd 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>�rr�rr�r
r5Nc	
Cs�|��dvrtd|��t|�}	t|	|�}
|��|_|�|j�|_t||j|j�}t	�
�}|
|_z|�t	j
d||||d�Wn.tyl}
z"|
jdtjkrVtd||f��|
jdtjkrftd||f��|
�d}
~
ww|j�d�dS)N��A�AAAA�PTR�CNAME�NS�MX�SRV�TXTz)Adding record of type %s is not supportedrzAZone does not exist; record could not be added. zone[%s] name[%s]zBRecord already exist; record could not be added. zone[%s] name[%s]zRecord added successfully
)r�rr�r2rHrrIrr$r�DNS_RPC_RECORD_BUFr'�DnssrvUpdateRecord2r�rr�rr�$WERR_DNS_ERROR_RECORD_ALREADY_EXISTSr�r�)rKrr�rr�r
r6r8r7r1r'r �add_rec_bufr!r"r"r#rM.s,

���zcmd_add_record.runrNr�r"r"r"r#rs
��rc@s:eZdZdZdZgd�Zejejej	d�Z
	ddd�ZdS)	�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>)rr�rr��olddata�newdatar5Nc

Cs�|��}|dvrtd|��z|dkrtt|�n	|dkr"tt|�Wnty9}
z
td|�d|
����d}
~
wwt|�}t||�}|��|_	|�
|j	�|_t||j	|j�}
zt
|
|||||�}Wntyt}
zt|
j�d�d}
~
ww|s{td��|j|_|j|_|j|_|j|_t��}||_t��}||_z|
�tjd|||||�Wnty�}
z|
jdtjkr�td	��|
�d}
~
ww|j�d
�dS)N)	r	r
rrr
r�SOArrz+Updating record of type %s is not supportedr	r
z
bad data for z: r�rz1Zone does not exist; record could not be updated.zRecord updated successfully
)r�rrrr�OSErrorr�r2rHrrIrr$rrr�r$r%r&r�rrr'rr�rrrr�r�)rKrr�rr�rrr6r8r7r!r1r'r �	rec_matchr�del_rec_bufr"r"r#rMdsh
���

������zcmd_update_record.runrNr�r"r"r"r#rKs��rc@s8eZdZdZdZgd�Zejejej	d�Z
ddd�ZdS)	�cmd_delete_recordanDelete 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' ..."
    rrr5Nc	
Cs�|��dvrtd|��t|�}	t|	|�}
|��|_|�|j�|_t||j|j�}t	�
�}|
|_z|�t	j
d|||d|�Wn.tyl}
z"|
jdtjkrVtd||f��|
jdtjkrftd||f��|
�d}
~
ww|j�d�dS)Nrz+Deleting record of type %s is not supportedrzCZone does not exist; record could not be deleted. zone[%s] name[%s]zERecord does not exist; record could not be deleted. zone[%s] name[%s]zRecord deleted successfully
)r�rr�r2rHrrIrr$rrr'rr�rr�rr�$WERR_DNS_ERROR_RECORD_DOES_NOT_EXISTr�r�)rKrr�rr�r
r6r8r7r1r'r rr!r"r"r#rM�s6

���zcmd_delete_record.runrNr�r"r"r"r#r�s
�rc@s\eZdZdZdZddgZejejej	d�Z
edddd	d
�eddd
d	d
�gZ		ddd�Z
dS)�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�dnshostnamer5z-vz	--verbosez
Be verboserl)rBrmz-qz--quietzBe quietNFcCsL|��}|�|�}	|j||d�}
td|t�|	|d�}tj||
|dd�dS)N)�verbose�quietr�r�T)�ignore_no_name)rHrI�
get_loggerr
rr�remove_dns_references)rKrrr6r8r7r r!rr�loggerr�r"r"r#rM�s
�

�zcmd_cleanup_record.run)NNNFFrOr"r"r"r#r�s���rc@s�eZdZdZiZe�ed<e�ed<e�ed<e�ed<e	�ed<e
�ed<e�ed<e�ed	<e
�ed
<e�ed<e�ed<e�ed
<dS)�cmd_dnsz%Domain Name Service (DNS) management.r��zoneoptionsr��zonelist�
zonecreate�
zonedelete�query�	roothints�add�update�delete�cleanupN)rPrQrRrS�subcommandsr3rir�r�r�r�r�rrrrrr"r"r"r#r&s










r&)K�samba.getopt�getoptrV�sambarrr�r�socketrrrrr�r��	samba.ndrr	r
r�rr�samba.samdbr
�
samba.authr�samba.netcmdrrrr�samba.dcerpcrr�samba.dnsserverrrrrr$r+r1r6r>rErNrSrYr^rgrrr{r�r�r�r�r�rrr*r0r2r3rhrir�r�r�r�r�rrrrrr&r"r"r"r#�<module>st

	

HA"	  OM"Q5T9*