HEX
Server: LiteSpeed
System: Linux shams.tasjeel.ae 5.14.0-611.5.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 11 08:09:09 EST 2025 x86_64
User: infowars (1469)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: //usr/lib/python3.9/site-packages/ipalib/install/__pycache__/dnsforwarders.cpython-39.opt-1.pyc
a

}�fv�
@s:dZddlZddlZddlZddlZddlZddlmZddlm	Z	e�
e�Zhd�Z
dZdZdZd	ZdZd
Zdd�Zd
d�dd�Zd
d�dd�Zdd�Zedk�r6ddlmZede��ede���ed�eedd��ed�zeedd��Wn.e�y(Zzee�WYdZ[n
dZ[00ede��dS)z+DNS forwarder and systemd-resolve1 helpers
�N)�paths)�get_ipa_resolver>z /run/systemd/resolve/resolv.confz/lib/systemd/resolv.confz%/run/systemd/resolve/stub-resolv.confz/usr/lib/systemd/resolv.confzorg.freedesktop.resolve1z/org/freedesktop/resolve1z org.freedesktop.resolve1.Managerzorg.freedesktop.DBus.Properties�cCsNzt�tj�}Wnty$YdS0tj�tj�tj�tj�|��}|t	vS)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.9/site-packages/ipalib/install/dnsforwarders.py�detect_resolve1_resolv_conf%s�rF��with_ifindexcCs�t��}z0|�tt�}t�|t�}|�td�}W|�	�n
|�	�0g}|D]x\}}}}	}
|	dvsL|
rhqL|t
jkr�t�
t|��}n|t
jkrLt�t|��}nqL|r�t|�}|�||f�qL|�|�qL|S)zlGet list of DNS nameservers from systemd-resolved

    :return: list of tuples (ifindex, ipaddress_obj)
    ZDNSEx>r�5)�dbusZ	SystemBusZ
get_object�_DBUS_RESOLVE1_NAME�_DBUS_RESOLVE1_PATHZ	Interface�_DBUS_PROPERTY_IFZGet�_DBUS_RESOLVE1_MANAGER_IF�close�socketZAF_INET�	ipaddress�IPv4Address�bytesZAF_INET6�IPv6Address�int�append)rZbusZresolve1Zprop_ifZdns_prop�results�ifindex�afZdns_arr�portZsninameZdnsiprrr�get_resolve1_nameservers6s(

r&cCs>g}t�jD],}t�|�}|r.|�t|f�q|�|�q|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�
ip_addressr!�IFINDEX_GLOBAL)rr"Z
nameserverrrr�get_dnspython_nameservers[s
r*cCs�t�rt�d�tdd�}nt�dtj�tdd�}t�d|�g}t�}|D]:\}}||vr`qN|�|�|t	ksN|j
rzqN|�t|��qNt�d|�|S)zSGet list of unique, non-loopback DNS nameservers

    :return: list of strings
    z:systemd-resolved detected, fetching nameservers from D-BusTrz)systemd-resolved not detected, parsing %szDetected nameservers: %rzUse nameservers %r)
r�logger�debugr&rrr*�set�add�IFINDEX_LOOPBACK�is_loopbackr!�str)r'�result�seenr#�iprrr�get_nameserversls*��

r5�__main__)�pprintzsystemd-resolved detected:zInterfaces:zdnspython nameservers:Tzresolve1 nameservers:znameservers:)�__doc__rZloggingrrrZipaplatform.pathsrZipapython.dnsutilrZ	getLogger�__name__r+r
rrrrr)r/rr&r*r5r7�printZif_nameindex�	Exception�errrr�<module>s>
%#