File: //lib/python3.6/site-packages/ipalib/install/__pycache__/dnsforwarders.cpython-36.opt-1.pyc
3
�d[ev � @ s< d Z ddlZddlZddlZddlZddlZddlmZ ddlm Z ej
e�ZddddhZ
d Zd
ZdZdZdZd
Zdd� Zdd�dd�Zdd�dd�Zdd� Zedk�r8ddlmZ ede� � edej� � ed� eedd�� ed� yeedd�� W n, ek
�r* Z zee� W Y ddZ[X nX ede� � dS ) z+DNS forwarder and systemd-resolve1 helpers
� N)�paths)�get_ipa_resolverz%/run/systemd/resolve/stub-resolv.confz /run/systemd/resolve/resolv.confz/lib/systemd/resolv.confz/usr/lib/systemd/resolv.confzorg.freedesktop.resolve1z/org/freedesktop/resolve1z org.freedesktop.resolve1.Managerzorg.freedesktop.DBus.Properties� c C sN yt jtj�} W n tk
r$ dS X t jjt jjt jjtj�| ��} | t kS )zbDetect if /etc/resolv.conf is managed by systemd-resolved
See man(5) NetworkManager.conf
F)
�os�readlinkr �RESOLV_CONF�OSError�path�normpath�join�dirname�_SYSTEMD_RESOLV_CONF)�dest� r �#/usr/lib/python3.6/dnsforwarders.py�detect_resolve1_resolv_conf% s r F)�with_ifindexc C s� t j� }z(|jtt�}t j|t�}|jtd�}W d|j � X g }x�|D ]x\}}}} }
| dksF|
rbqF|t
jkr|tj
t|��}n|t
jkrFtjt|��}nqF| r�t|�}|j||f� qF|j|� qFW |S )zlGet list of DNS nameservers from systemd-resolved
:return: list of tuples (ifindex, ipaddress_obj)
ZDNSExNr �5 > r r )�dbusZ SystemBusZ
get_object�_DBUS_RESOLVE1_NAME�_DBUS_RESOLVE1_PATHZ Interface�_DBUS_PROPERTY_IFZGet�_DBUS_RESOLVE1_MANAGER_IF�close�socketZAF_INET� ipaddressZIPv4Address�bytesZAF_INET6ZIPv6Address�int�append)r ZbusZresolve1Zprop_ifZdns_prop�results�ifindexZafZdns_arrZportZsninameZdnsipr r r �get_resolve1_nameservers6 s(
r! c C sB g }x8t � jD ],}tj|�}| r0|jt|f� q|j|� qW |S )z�Get list of DNS nameservers from dnspython
On Linux dnspython parses /etc/resolv.conf for us
:return: list of tuples (ifindex, ipaddress_obj)
)r �nameserversr Z
ip_addressr �IFINDEX_GLOBAL)r r Z
nameserverr r r �get_dnspython_nameservers[ s
r$ c C s� t � rtjd� tdd�} ntjdtj� tdd�} tjd| � g }t� }xB| D ]:\}}||krbqP|j|� |t ksP|j
r|qP|jt|�� qPW tjd|� |S )zSGet list of unique, non-loopback DNS nameservers
:return: list of strings
z:systemd-resolved detected, fetching nameservers from D-BusT)r z)systemd-resolved not detected, parsing %szDetected nameservers: %rzUse nameservers %r)
r �logger�debugr! r r r$ �set�add�IFINDEX_LOOPBACKZis_loopbackr �str)r"