CasperSecurity

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

o

쑛hc;�@sddlZddlZddlZddlZddlmZmZmZddlm	Z	ddl
mZe�e
�ZdZgd�ZGdd�dej�ZGd	d
�d
e�Zdd�Zd
d�Zdd�Zddeddfdd�Zdd�ZGdd�de�ZGdd�de�ZeejffeejejffgZdd�Ze
dkr�dd�Z e �dSdS)�N)�sources�
url_helper�util)�KlibcNetworkConfigSource)�NetworkConfigSourcez
2012-03-01))�meta-data/instance-idrFF)�meta-data/local-hostnamerFF)�meta-data/public-keysr	FT)zmeta-data/vendor-data�vendor-dataTT)�	user-datarTTc@sheZdZdZdZdZdZdZdZdd�Z	e
dd	��Zd
d�Zdd
�Z
dd�Zdd�Zdd�Zdd�ZdS)�DataSourceMAASz�
    DataSourceMAAS reads instance information from MAAS.
    Given a config metadata_url, and oauth tokens, it expects to find
    files under the root named:
      instance-id
      user-data
      hostname
      vendor-data
    �MAASN�x�2cCs:tj�||||�d|_tj�|jd�|_t|j	�|_
dS)N�maas)r�
DataSource�__init__�base_url�os�path�join�seed_dir�get_id_from_ds_cfg�ds_cfg�id_hash)�self�sys_cfg�distro�paths�r�B/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceMAAS.pyr2szDataSourceMAAS.__init__cCs|js	t|j�|_|jS�N)�
_oauth_helper�get_oauth_helperr�rrrr �oauth_helper8szDataSourceMAAS.oauth_helpercCstj�|�}d||jfS)Nz%s [%s])rr�__str__r)r�rootrrr r&>szDataSourceMAAS.__str__c
Cs�|j}z
|�|jt|j��WdStyYnty-}z	t�d|j|��d}~ww|�dd�}|s8dSz|�	|�sAWdS|�|t
||jj|j
dd��WdStyct�td|�YdSw)NTz%s was malformed: %s�metadata_urlF�)�read_file_or_urlr�retriesz$Failed fetching metadata from url %s)r�	_set_datar�read_maas_seed_dir�MAASSeedDirNone�MAASSeedDirMalformed�LOG�warning�get�wait_for_metadata_service�read_maas_seed_urlr%�readurlr�	Exceptionr�logexc)r�mcfg�exc�urlrrr �	_get_dataBs>��
��	�zDataSourceMAAS._get_datac
Csp||_|\}}}||_||_|r6z	t�|�|_WdSty5}zt�d|�d|_WYd}~dSd}~wwdS)Nz"Invalid content in vendor-data: %s)	r�userdata_raw�metadatar�convert_vendordata�vendordata_raw�
ValueErrorr0r1)rr:�data�ud�md�vd�errr r,is
���zDataSourceMAAS._set_datacCs
d|jS)z/Return the subplatform metadata source details.z
seed-dir (%s))rr$rrr �_get_subplatformvs
zDataSourceMAAS._get_subplatformcCs�|��}|jdkrdSt��}|�d�}d|tf}|g}|jj||j|jd�\}}|r6t	�
d|�t
|�St	�d|tt��|��t
|�S)NrF�/z%s/%s/meta-data/instance-id)�urls�max_wait�timeoutzUsing metadata source: '%s'z(Giving up on md from %s after %i seconds)�get_url_params�max_wait_seconds�time�	monotonic�rstrip�
MD_VERSIONr%�wait_for_url�timeout_secondsr0�debug�critical�int�bool)rr:�
url_params�	starttime�	check_urlrH�	_responserrr r3zs*


���z(DataSourceMAAS.wait_for_metadata_servicecCs0|jdurdSt�|d|jfi�}|jt|�kS)alocally check if the current system is the same instance.

        MAAS doesn't provide a real instance-id, and if it did, it is
        still only available over the network.  We need to check based
        only on local resources.  So compute a hash based on Oauth tokens.NF�
datasource)rr�get_cfg_by_path�dsnamer)rr�ncfgrrr �check_instance_id�s
z DataSourceMAAS.check_instance_id)�__name__�
__module__�__qualname__�__doc__r]rr"�url_max_wait�url_timeoutr�propertyr%r&r;r,rFr3r_rrrr rs 

'
rcs0eZdZejejejejfZ�fdd�Z	�Z
S)�DataSourceMAASLocalcs,t���st�d�dSt�d�t���S)NzNo initramfs applicable configFz!Found initramfs applicable config)r�
is_applicabler0rS�superr;r$��	__class__rr r;�s




zDataSourceMAASLocal._get_data)r`rarbr�CMD_LINE�
SYSTEM_CFG�DS�	INITRAMFS�network_config_sourcesr;�
__classcell__rrrjr rg�s�rgcs*d}t�fdd�|D��}tjdi|��S)z�Return an oauth helper instance for values in cfg.

    @raises ValueError from OauthUrlHelper if some required fields have
    true-ish values but others do not.)�consumer_key�consumer_secret�	token_key�token_secretcsg|]	}|��|�f�qSr�r2)�.0�r��cfgrr �
<listcomp>�sz$get_oauth_helper.<locals>.<listcomp>Nr)�dictr�OauthUrlHelper)rz�keys�kwargsrryr r#�sr#cs4d}d��fdd�|D��}dt�|�d����S)z;Given a config, generate a unique identifier for this node.)rrrtru�csg|]}��|d��qS)�rv)rw�f�rrr r{�sz&get_id_from_ds_cfg.<locals>.<listcomp>zv1:zutf-8)r�hashlib�sha256�encode�	hexdigest)r�fields�idstrrr�r r�srcCsD|�d�r|dd�}tj�|�rt�|�std��td|dd�S)N�file://�z%s: not a directoryz	file://%s)�version)�
startswithrr�isdir�listdirr.r4)�seed_drrr r-�s

r-cCs|durtj}|�d�r|dd�}i}tD]n\}}}	}
|dur'd||f}nd|||f}z,t�|�}|||||d�}
|
��rQ|	rH|
j||<nt�|
j�||<nt	�
d||
j�Wqtjy�}z|jdkrs|
sst
d	||f�|�|jdkrz|�WYd}~qd}~wwt||�S)
a�
    Read the maas datasource at seed_url.
      read_file_or_url is a method that should provide an interface
      like util.read_file_or_url

    Expected format of seed_url is are the following files:
      * <seed_url>/<version>/meta-data/instance-id
      * <seed_url>/<version>/meta-data/local-hostname
      * <seed_url>/<version>/user-data
    If version is None, then <version>/ will not be used.
    NrG���z%s/%sz%s/%s/%s)r+rJ�ssl_detailsz4Fetching from %s resulted in an invalid http code %si�zMissing required %s: %s)rr*�endswith�	DS_FIELDSr�fetch_ssl_details�ok�contents�
decode_binaryr0r1�code�UrlErrorr/�check_seed_contents)�seed_urlr*rJr�rr+rCr�	_dictname�binary�optionalr:r��resprErrr r4�sJ

���
��
���
r4c
Cs�i}g}tD]5\}}}}||vr|s|�|�qd|vr5|�d�\}}	}
||vr,i||<|||||
<q||||<q|sDtd|��|rNtd||f��d}|�d�rkt�}tj|�d�|td�}||urktd��|�d�|�d	�|fS)
z�Validate if dictionary content valid as a return for a datasource.
    Either return a (userdata, metadata, vendordata) tuple or
    Raise MAASSeedDirMalformed or MAASSeedDirNone
    rGz%s: no data files foundz%s: missing files %sNr
)�default�allowedz%vendor-data was not loadable as yaml.r�	meta-data)	r��append�	partitionr.r/r2�objectr�	load_yaml)
�content�seed�ret�missing�spath�dpath�_binaryr��top�_�p�vd_data�errrrr r�	s4

�r�c@�eZdZdS)r.N�r`rarbrrrr r.0�r.c@r�)r/Nr�rrrr r/4r�r/cCst�|t�Sr!)r�list_from_depends�datasources)�dependsrrr �get_datasource_list@sr��__main__csddl}ddl}ddl}|jdd�}|jddddd�|jd	d
ddd�|jdd
d
dd�|jddddd�|jddddd�|jdddtd�|jddd�}dD]\}}|j||d�}|jddddd�qQ|��}|j	|j
|j|jd �}	|j
dur�d!D] }
d"|
d#}tj�|�r�t�|tj�r�|j�d$|�||_
q||j
r�t�|j
�}d%|vr�|d%d&}|	��D]}
|
|vr�|	|
dur�||
|	|
<q�|jdur�d'|vr�|d'|_|jdur�|j�d(�|�d)�t|	���fd*d+���fd,d-�����fd.d/��|jd0k�rc|j�d1|j��j}|jdd2k�s|j�d3��r't|j�\}}}n
t|j|j |d4d5�\}}}t!d6�t!|du�r@d7n|�"��t!d8�|�|�t!d9�|�|du�r^d7�dS|�dS|jd:k�rp�|j�dS|jd;k�r�|j�#d2��s�d<|j|_�|j�dSdS)=z�
        Call with single argument of directory or http or https url.
        If url is given additional arguments are allowed, which will be
        interpreted as consumer_key, token_key, token_secret, consumer_secret
        rNzInteract with MAAS DS)�descriptionz--config�filezspecify DS config file)�metavar�helpr�z--ckey�keyzthe consumer key to auth withz--tkeyzthe token key to auth withz--csec�secretzthe consumer secret (likely '')r�z--tseczthe token secret to auth withz--apiverr�z the apiver to use ( can be used)�subcommands�subcmd)�title�dest))�crawlzcrawl the datasource)r2zdo a single GET of provided url)�
check-seedzread and verify seed at url)r�r:zthe datasource url�?)r��nargsr�)rrrtrurs)�91_kernel_cmdline_url�90_dpkg_maasz/etc/cloud/cloud.cfg.d/z.cfgzUsed config in %s.
r[r
r(z)Must provide a url or a config with url.
r)cs�j|dd�jS)Nr))r+)r5r��r:)r%rr �geturl�szmain.<locals>.geturlcstd|�|���f�dS)Nz== %s ==
%s
)�print�decoder�)r�rr �printurl�szmain.<locals>.printurlcsv|�d�r5�|�����D]%}|�d�r�d||f�q
|dkr*�d|df�q
�d||f�q
dS�|�dS)NrGz%s%sr�z
meta-data/)r�r��
splitlines)r:�line)r�r�r�rr r��s

�	zmain.<locals>.crawlr�zChecking seed at %s
rGr��)r�r*r+z=== user-data ===zN/Az=== meta-data ===z=== vendor-data ===r2r�z%s/)$�argparse�pprint�sys�ArgumentParser�add_argumentrP�add_subparsers�
add_parser�
parse_args�ckey�tkey�tsec�csec�configrr�exists�access�R_OK�stderr�writer�	read_confr~r:�exitr#r�r5r�r-r4�apiverr�r�r�)r�r�r��parser�subcmds�namer�r��args�creds�fname�fpathrzr�r5�userdatar=rDr)r�r�r%r�r �mainFs���������
��



�
"�r�)!r��loggingrrM�	cloudinitrrr�cloudinit.net.cmdliner�cloudinit.sourcesr�	getLoggerr`r0rPr�rrrgr#rr-r4r�r6r.r/�DEP_FILESYSTEM�DEP_NETWORKr�r�r�rrrr �<module>sF


	
�:'
�
��
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