HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: //lib/python3.6/site-packages/ipalib/install/__pycache__/dnsforwarders.cpython-36.pyc
3

�d[ev�@s<dZddlZddlZddlZddlZddlZddlmZddlm	Z	ej
e�ZddddhZ
d	Zd
ZdZdZdZd
Zdd�Zdd�dd�Zdd�dd�Zdd�Zedk�r8ddlmZede��edej��ed�eedd��ed�yeedd��Wn,ek
�r*Zzee�WYddZ[XnXede��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CsNytjtj�}Wntk
r$dSXtjjtjjtjjtj�|��}|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%srF)�with_ifindexcCs�tj�}z(|jtt�}tj|t�}|jtd�}Wd|j	�Xg}x�|D]x\}}}}	}
|	dksF|
rbqF|t
jkr|tj
t|��}n|t
jkrFtjt|��}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>rr)�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)rZbusZresolve1Zprop_ifZdns_prop�results�ifindexZafZdns_arrZportZsninameZdnsiprrr�get_resolve1_nameservers6s(


r!cCsBg}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�nameserversrZ
ip_addressr�IFINDEX_GLOBAL)rrZ
nameserverrrr�get_dnspython_nameservers[s
r$cCs�t�rtjd�tdd�}ntjdtj�tdd�}tjd|�g}t�}xB|D]:\}}||krbqP|j|�|t	ksP|j
r|qP|jt|��qPWtjd|�|S)zSGet list of unique, non-loopback DNS nameservers

    :return: list of strings
    z:systemd-resolved detected, fetching nameservers from D-BusT)rz)systemd-resolved not detected, parsing %szDetected nameservers: %rzUse nameservers %r)
r�logger�debugr!rrr$�set�add�IFINDEX_LOOPBACKZis_loopbackr�str)r"�result�seenr Ziprrr�get_nameserversls&


r-�__main__)�pprintzsystemd-resolved detected:zInterfaces:zdnspython nameservers:Tzresolve1 nameservers:znameservers:)�__doc__rZloggingrrrZipaplatform.pathsrZipapython.dnsutilrZ	getLogger�__name__r%r
rrrrr#r)rr!r$r-r/�printZif_nameindex�	Exception�errrr�<module>sD
%#