CasperSecurity

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

o

쑛hk,�@s�dZddlZddlZddlZddlZddlmZddlmZm	Z	ddl
mZddlm
Z
mZmZddlmZddlmZd	Ze�e�Zdd
d�Zdd
�Zdefdd�Zdedededefdd�Zdd�Zdd�Z edkrqe �dSdS)aTQuery standardized instance metadata provided to machine, returning a JSON
structure.

Some instance-data values may be binary on some platforms, such as userdata and
vendordata. Attempt to decompress and decode UTF-8 any binary values.

Any binary values in the instance metadata will be base64-encoded and prefixed
with "ci-b64:" in the output. userdata and, where applicable, vendordata may
be provided to the machine gzip-compressed (and therefore as binary data).
query will attempt to decompress these to a string before emitting the JSON
output; if this fails, they are treated as binary.
�N)�EACCES)�
atomic_helper�util)�read_cfg_paths)�convert_jinja_instance_data�get_jinja_variable_alias�render_jinja_payload)�REDACT_SENSITIVE_VALUE)�JinjaSyntaxParsingException�querycCs�|s	tjttd�}|jdddddd�|jdd	td
t��d���d�|jd
ddddd�|jddtdd�|jddtdd�|jdtddd�|jddddddd�|jdd td!d"d#�|S)$a#Build or extend an arg parser for query utility.

    @param parser: Optional existing ArgumentParser instance representing the
        query subcommand which will be extended to support the args of
        this utility.

    @returns: ArgumentParser with proper argument configuration.
    )�prog�descriptionz-dz--debug�
store_trueFz+Add verbose messages during template render)�action�default�helpz-iz--instance-dataz,Path to instance-data.json file. Default is �
instance_data)�typerz-lz--list-keyszBList query keys available at the provided instance-data <varname>.z-uz--user-datazHPath to user-data file. Default is /var/lib/cloud/instance/user-data.txtz-vz
--vendor-datazLPath to vendor-data file. Default is /var/lib/cloud/instance/vendor-data.txt�varname�?z�A dot-delimited specific variable to query from instance-data. For example: v1.local_hostname. If the value is not JSON serializable, it will be base64-encoded and will contain the prefix "ci-b64:". )r�nargsrz-az--all�dump_allz Dump all available instance-data)rr�destrz-fz--format�formatz�Optionally specify a custom output format string. Any instance-data variable can be specified between double-curly braces. For example -f "{{ v2.cloud_name }}")rrr)�argparse�ArgumentParser�NAME�__doc__�add_argument�strr�get_runpath��parser�r#�5/usr/lib/python3/dist-packages/cloudinit/cmd/query.py�
get_parser&st	�
��	�
�	�	���r%cCs>tj|dd�}z|�d�WStytj|ddd�YSw)z�Attempt to return a string of user-data from ud_file_path

    Attempt to decode or decompress if needed.
    If unable to decode the content, raw bytes will be returned.

    @returns: String of uncompressed userdata if possible, otherwise bytes.
    T)�quietzutf-8F)r&�decode)r�load_binary_filer'�UnicodeDecodeError�decomp_gzip)�ud_file_path�bdatar#r#r$�
load_userdata~s�r-�returnc
Cs�t��}t�}|r|}n#|�d�}|dkr-|�d�}tj�|�r#|}nt�d||�|}n|}|r4|}ntj�|j	d�}|rA|}	ntj�|j	d�}	|�d�}
zt
�|�}Wn!tt
fyv}z|jtkrkt�d|��t�d	|��d
}~wwt
�|�}z
t
�t
�|
��}
Wn
tt
fy�d
}
Ynw|dkr�dt|f|d<dt|	f|d
<dt|
f|d<|St|�|d<t|	�|d
<|
|d<|S)a�Return a dict of merged instance-data, vendordata and userdata.

    The dict will contain supplemental userdata and vendordata keys sourced
    from default user-data and vendor-data files.

    Non-root users will have redacted INSTANCE_JSON_FILE content and redacted
    vendordata and userdata values.

    :raise: IOError/OSError on absence of instance-data.json file or invalid
        access perms.
    rr�instance_data_sensitivez4Missing root-readable %s. Using redacted %s instead.z
user-data.txtzvendor-data.txt�combined_cloud_configz$No read permission on '%s'. Try sudozMissing instance-data file: %sNz<%s> file:%s�userdata�
vendordata)�os�getuidrr �path�exists�LOG�warning�join�
instance_linkr�load_text_file�IOError�OSError�errnor�error�	load_jsonr	r-)r�	user_data�vendor_data�uid�paths�instance_data_fn�redacted_data_fn�sensitive_data_fn�user_data_fn�vendor_data_fn�combined_cloud_config_fn�
instance_json�er0r#r#r$�_read_instance_data�sv

�

���
��
�
�
��rM�jinja_vars_without_aliases�jinja_vars_with_aliasesr�	list_keysc
Cs�d}|}|�d�D]M}z||}Wn ty1}z|r#dj||d�}nd�|�}t|�|�d}~ww||vr;||}n|D]}	t|	�|krK||	}nq=|rR|d7}||7}q	|S)a�Return the value of the dot-delimited varname path in instance-data

    Split a dot-delimited jinja variable name path into components, walk the
    path components into the instance_data and look up a matching jinja
    variable name or cloud-init's underscore-delimited key aliases.

    :raises: ValueError when varname represents an invalid key name or path or
        if list-keys is provided by varname isn't a dict object.
    ��.z*instance-data '{key_path}' has no '{leaf}')�leaf�key_pathz Undefined instance-data key '{}'N)�split�KeyErrorr�
ValueErrorr)
rNrOrrP�walked_key_path�response�
key_path_partrL�msg�keyr#r#r$�(_find_instance_data_leaf_by_varname_path�s2�

��
�
r]c
Cs�t|j|j|j|jg�st�d�t���dSzt	|j
|j|j�}Wnt
tfy/YdSw|jrodj|jd�}zt|d||jrDdndd�}Wntyd}zt�d	t|��WYd
}~dSd
}~ww|rmt|�dSdSt|�}|jr�t|dd�}zt|||j|jd
�}Wnttfy�}zt�|�WYd
}~dSd
}~ww|jr�t|t�s�t�d|j�dSd�t|����}t|t�s�t�|�}t|�dS)z3Handle calls to 'cloud-init query' as a subcommand.zDExpected one of the options: --all, --format, --list-keys or varname�z## template: jinja
{fmt})�fmtzquery command lineTF)�payload�
payload_fnr�debugz#Failed to render templated data. %sNr)�include_key_aliases)rNrOrrPz+--list-keys provided but '%s' is not a dict�
)�anyrPrrrr7r?r%�
print_helprMrrArBr<r=rrbr
r�printrr]rVrW�
isinstance�dictr9�sorted�keysr�
json_dumps)�name�argsrr`�rendered_payloadrLrYrOr#r#r$�handle_argss|�
��
�����
�
��
�

rpcCst�}t�tt|����dS)z,Tool to query specific instance-data values.N)r%�sys�exitrpr�
parse_argsr!r#r#r$�mainKsrt�__main__)N)!rr�loggingr3rqr>r�	cloudinitrr�cloudinit.cmd.develr�!cloudinit.handlers.jinja_templaterrr�cloudinit.sourcesr	�cloudinit.templaterr
r�	getLogger�__name__r7r%r-rirMr�boolr]rprtr#r#r#r$�<module>s<


XP���
�+C
�
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