CasperSecurity

Current Path : /lib/python3/dist-packages/cloudinit/sources/__pycache__/
Upload File :
Current File : //lib/python3/dist-packages/cloudinit/sources/__pycache__/DataSourceLXD.cpython-310.pyc

o

쑛h�D�	@sHdZddlZddlZddlZddlZddlZddlmZmZddl	m
Z
ddlmZm
Z
mZmZmZmZmZddlZddlmZddlmZddlmZdd	lmZmZmZmZmZdd
l m!Z!e�"e#�Z$dZ%dZ&d
Z'ddddddd�Z(de)fdd�Z*	d9deee)de
e)effdd�Z+Gdd�de�Z,Gdd�de�Z-Gdd�de�Z.de)de/fdd �Z0Gd!d"�d"ej1�Z2	#d:d$ej3d%e)d&e4fd'd(�Z5	#d:d$ej3d%e)d&e4dej6fd)d*�Z7Gd+d,�d,e�Z8Gd-d.�d.�Z9e&e8j:fd/e)d0e8de/fd1d2�Z;e2ej<ffgZ=d3d4�Z>e#d5k�r"ddl?Z?d6Z@e?jAe@d7�ZBeB�C�eDe�Ee;e8j:d8���dSdS);a�Datasource for LXD, reads /dev/lxd/sock representation of instance data.

Notes:
 * This datasource replaces previous NoCloud datasource for LXD.
 * Older LXD images may not have updates for cloud-init so NoCloud may
   still be detected on those images.
 * Detect LXD datasource when /dev/lxd/sock is an active socket file.
 * Info on dev-lxd API: https://documentation.ubuntu.com/lxd/en/latest/dev-lxd/
�N)�Flag�auto)�JSONDecodeError)�Any�Dict�List�Optional�Tuple�Union�cast)�HTTPAdapter)�HTTPConnection)�HTTPConnectionPool)�
atomic_helper�sources�subp�
url_helper�util)�find_fallback_nicz
/dev/lxd/sockz1.0z
http://lxd�	user-data�network-config�vendor-data)�cloud-init.user-datazcloud-init.network-config�cloud-init.vendor-data�user.user-datazuser.network-config�user.vendor-data�returnc
Cs�d}t�d�rIz
t�dg�\}}Wntjy,}zt�d|�|WYd}~Sd}~ww|��dvrIt��dd}|dkrAdS|d	krGd
SdS|S)N�eth0zsystemd-detect-virtzHUnable to run systemd-detect-virt: %s. Rendering default network config.)�kvm�qemu�uname��ppc64le�enp0s5�s390x�enc9�enp5s0)r�which�ProcessExecutionError�LOG�warning�stripr�system_info)�default_name�	virt_type�_�err�arch�r2�A/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceLXD.py�_get_fallback_interface_name/s(
���r4�nicscCsFt�}|rt�d|�n	t�}t�d|�dd|ddd�gd�gd	�S)
zCReturn network config V1 dict representing instance network config.zCLXD datasource generating network from discovered active device: %szVLXD datasource generating network from systemd-detect-virt platform default device: %s��physical�dhcpr)�type�control)r9�name�subnets)�version�config)rr)�debugr4)r5�primary_nicr2r2r3�generate_network_configIs$��
���rAc�$eZdZ�fdd�Zdd�Z�ZS)�SocketHTTPConnectioncst��d�||_d|_dS�N�	localhost)�super�__init__�socket_path�sock��selfrH��	__class__r2r3rGps
zSocketHTTPConnection.__init__cCs$t�tjtj�|_|j�|j�dS�N)�socket�AF_UNIX�SOCK_STREAMrI�connectrH�rKr2r2r3rRuszSocketHTTPConnection.connect)�__name__�
__module__�__qualname__rGrR�
__classcell__r2r2rLr3rCosrCcrB)�SocketConnectionPoolcs||_t��d�dSrD)rHrFrGrJrLr2r3rG{szSocketConnectionPool.__init__cCs
t|j�SrN)rCrHrSr2r2r3�	_new_conns
zSocketConnectionPool._new_conn)rTrUrVrGrYrWr2r2rLr3rXzsrXc@s"eZdZddd�Z	ddd�ZdS)�LXDSocketAdapterNcCstt�SrN)rX�LXD_SOCKET_PATH)rK�url�proxiesr2r2r3�get_connection�szLXDSocketAdapter.get_connectioncCs|�|j|�SrN)r^r\)rK�request�verifyr]�certr2r2r3�get_connection_with_tls_context�sz0LXDSocketAdapter.get_connection_with_tls_contextrN)NN)rTrUrVr^rbr2r2r2r3rZ�s
�rZ�
metadata_typec
Csxt|t�r|S|dur
iSzt�|�}Wnty+}zt�dj||d��|�d}~ww|dur:t�dj||d���|S)a6Convert raw instance data from str, bytes, YAML to dict

    :param metadata_type: string, one of as: meta-data, vendor-data, user-data
        network-config

    :param metadata_value: str, bytes or dict representing or instance-data.

    :raises: InvalidMetaDataError on invalid instance-data content.
    NzAInvalid {md_type}. Expected str, bytes or dict but found: {value})�md_type�valuez:Invalid {md_type} format. Expected YAML but found: {value})�
isinstance�dictr�	load_yaml�AttributeErrorr�InvalidMetaDataException�format)rc�metadata_value�parsed_metadata�excr2r2r3�_raw_instance_data_to_dict�s.

�������rocs�eZdZUdZejZeee	fe
d<ejZeeee	fe
d<ej
jdZee	dfe
d<dZded	d
f�fdd�Zed	efd
d��Zd	efdd�Zd	e	fdd�Zd	e	fdd�Zed	efdd��Z�ZS)�
DataSourceLXD�LXD�_network_config�_crawled_metadata)�user.meta-datarrrr.�sensitive_metadata_keysT�ci_pkl_versionrNcst��|�d|_dS)NT)rF�	_unpickle�skip_hotplug_detect)rKrvrLr2r3rw�s
zDataSourceLXD._unpicklecCsBtj�t�st�dt�dSt�t�t�j	�st�dt�dSdS)z@Check platform environment to report if this datasource may run.z%s does not exist.Fz%s is not a socketT)
�os�path�existsr[r)r*�stat�S_ISSOCK�lstat�st_moder2r2r2r3�	ds_detect�szDataSourceLXD.ds_detectcCs�t�|_td|j�d��|_|j�di�}|�di�}|r&|j�td|��d|jvr1|jd|_d|jvr?td|jd�|_d|jvrJ|jd|_dS)z=Crawl LXD socket API instance data and return True on success�	meta-datar>rtrrrT)	�
read_metadatarsro�get�metadata�update�userdata_rawrr�vendordata_raw)rKr>�
user_metadatar2r2r3�	_get_data�s&��


�
zDataSourceLXD._get_datacCsdjttd�S)z.Return subplatform details for this datasourcez"LXD socket API v. {ver} ({socket}))�verrO)rk�LXD_SOCKET_API_VERSIONr[rSr2r2r3�_get_subplatform�s�zDataSourceLXD._get_subplatformcCsBttjd�}|�di�}t|t�st�|�}|�d�|j�d�kS)z%Return True if instance_id unchanged.��
metadata_keysr�zinstance-id)	r��MetaDataKeys�	META_DATAr�rfrgrrhr�)rK�sys_cfg�response�mdr2r2r3�check_instance_id�s


zDataSourceLXD.check_instance_idcCs�|jtjkr?|jtjkr|��t|jt�r?|j�d�r(t�	d�|jd|_n|j�d�r?dd�|jd�
�D�}t|�|_|jtjkrNt�	d�t�|_tt|j�S)z�Network config read from LXD socket config/user.network-config.

        If none is present, then we generate fallback configuration.
        rz,LXD datasource using provided network config�devicescSs g|]\}}|ddkr|�qS)r9�nicr2)�.0�k�vr2r2r3�
<listcomp>s
�z0DataSourceLXD.network_config.<locals>.<listcomp>z8LXD datasource generating network config using fallback.)
rrr�UNSETrsr�rfrgr�r)r?�itemsrAr)rKr�r2r2r3�network_config�s(
��
�zDataSourceLXD.network_config)rTrUrV�dsnamerr�rrr
r�str�__annotations__rsr�
DataSourcerur	rx�intrw�staticmethod�boolr�r�r�r��propertyrgr�rWr2r2rLr3rp�s"
��
rpT�sessionr\�do_raisec
Csrt|||�}|jst�d||j|j�d��iSz|��WSty8}zt	�
dj||j�d�d��|�d}~ww)N�Skipping %s on [HTTP:%d]:%s�utf-8zFUnable to process LXD config at {url}. Expected JSON but found: {resp})r\�resp)�_do_request�okr)r?�status_code�content�decode�jsonrrrjrk)r�r\r��url_responsernr2r2r3�_get_json_responses,
�
�����r�cCs�tddd�D]}|�|�}d|jkr!t�d�t�d|j||�qt�d|j|�|r?|js?t	�
dj|j||j�
d	�d
���|S)N�r���i�g�������?z,[GET] [HTTP:%d] %s, retrying %d more time(s)z[GET] [HTTP:%d] %sz3Invalid HTTP response [{code}] from {route}: {resp}r�)�code�router�)�ranger�r��time�sleepr)r*r?r�rrjrkr�r�)r�r\r��retriesr�r2r2r3r�,s*


�

��r�c@s0eZdZe�Ze�Ze�Ze�ZeeBeBZdS)r�N)	rTrUrVr�NONE�CONFIG�DEVICESr��ALLr2r2r2r3r�Isr�c@sDeZdZefdefdd�Zdejdefdd�Z	de
defd	d
�ZdS)�_MetaDataReader�api_versioncCs||_t�t|j�|_dSrN)r�r�combine_url�LXD_URL�_version_url)rKr�r2r2r3rGRsz_MetaDataReader.__init__r�rc

Cs�dii}t�|jd�}t||�}t|�D]L}t�t|�}t||dd�}|j�d�}|j	s6t
�d||j|�q|�
d�d}	||d|	<|	tvr`t|	|vrT||t|	<qt
�d|	|	�d	d
d��q|S)a�Iterate on LXD API config items. Promoting CONFIG_KEY_ALIASES

        Any CONFIG_KEY_ALIASES which affect cloud-init behavior are promoted
        as top-level configuration keys: user-data, network-data, vendor-data.

        LXD's cloud-init.* config keys override any user.* config keys.
        Log debug messages if any user.* keys are overridden by the related
        cloud-init.* key.
        r>F�r�r�r��/r�z,Ignoring LXD config %s in favor of %s value.�userz
cloud-initr6)rr�r�r��sortedr�r�r�r�r�r)r?r��
rpartition�CONFIG_KEY_ALIASESr*�replace)
rKr�r>�
config_url�
config_routes�config_route�config_route_url�config_route_response�
response_text�cfg_keyr2r2r3�_process_configVs:

����z_MetaDataReader._process_configr�cCs�t���T}|�|jt��d|ji}tj|vr)t�	|jd�}t
||�j�d�|d<tj
|vr6|�|�|��tj|vrOt�	|jd�}t||dd�}|rO||d<|Wd�S1s[wYdS)N�_metadata_api_versionr�r�r�Fr�)�requests�Session�mountr�rZr�r�r�rr�r�r�r�r�r�r�r�r�)rKr�r�r��md_router\r�r2r2r3�__call__�s*


���

$�z_MetaDataReader.__call__N)rTrUrVr�r�rGr�r�rgr�r�r�r2r2r2r3r�Qs6r�r�r�cCst|d�|d�S)a/Fetch metadata from the /dev/lxd/socket routes.

    Perform a number of HTTP GETs on known routes on the devlxd socket API.
    Minimally all containers must respond to <LXD_SOCKET_API_VERSION>/meta-data
    when the LXD configuration setting `security.devlxd` is true.

    When `security.devlxd` is false, no /dev/lxd/socket file exists. This
    datasource will return False from `ds_detect` in that case.

    Perform a GET of <LXD_SOCKET_API_VERSION>/config` and walk all `user.*`
    configuration keys, storing all keys and values under a dict key
        LXD_SOCKET_API_VERSION: config {...}.

    In the presence of the following optional user config keys,
    create top level aliases:
      - user.user-data -> user-data
      - user.vendor-data -> vendor-data
      - user.network-config -> network-config

    :param api_version:
        LXD API version to operated with.
    :param metadata_keys:
        Instance of `MetaDataKeys` indicating what keys to fetch.
    :return:
        A dict with the following optional keys: meta-data, user-data,
        vendor-data, network-config, network_mode, devices.

        Below <LXD_SOCKET_API_VERSION> is a dict representation of all raw
        configuration keys and values provided to the container surfaced by
        the socket under the /1.0/config/ route.
    )r�r�)r�)r�r�r2r2r3r��s#�r�cCst�|t�SrN)r�list_from_depends�datasources)�dependsr2r2r3�get_datasource_list�sr��__main__z*Query LXD metadata and emit a JSON object.)�descriptionr�rN)T)F�__doc__�loggingryrOr|r��enumrr�json.decoderr�typingrrrrr	r
rr��requests.adaptersr�urllib3.connectionr
�urllib3.connectionpoolr�	cloudinitrrrrr�
cloudinit.netr�	getLoggerrTr)r[r�r�r�r�r4rArCrXrZrgror�rpr�r�r��Responser�r�r�r�r��DEP_FILESYSTEMr�r��argparser��ArgumentParser�parser�
parse_args�print�
json_dumpsr2r2r2r3�<module>s�
$
�
�
�

�&	j���
�����
�R���
�
*�
��
Hacker Blog, Shell İndir, Sql İnjection, XSS Attacks, LFI Attacks, Social Hacking, Exploit Bot, Proxy Tools, Web Shell, PHP Shell, Alfa Shell İndir, Hacking Training Set, DDoS Script, Denial Of Service, Botnet, RFI Attacks, Encryption
Telegram @BIBIL_0DAY