CasperSecurity

Current Path : /snap/core20/current/usr/share/python3/debpython/__pycache__/
Upload File :
Current File : //snap/core20/current/usr/share/python3/debpython/__pycache__/interpreter.cpython-38.pyc

U

�zk^�4�@sxddlZddlZddlZddlmZmZddlmZddlm	Z	e�
dej�Ze�
dej�Z
e�e�ZGdd�d�ZdS)	�N)�join�split)�execute)�Versionz�
    (?:\#!\s*){0,1}  # shebang prefix
    (?P<path>
        .*?/bin/.*?)?
    (?P<name>
        python|pypy)
    (?P<version>
        \d[\.\d]*)?
    (?P<debug>
        -dbg)?
    (?P<options>.*)
    a-
    (?P<name>.*?)
    (?:\.
        (?P<stableabi>abi\d+)
     |(?:\.
        (?P<soabi>
            (?P<impl>cpython|pypy)
            -
            (?P<ver>\d{2})
            (?P<flags>[a-z]*?)
        )
        (?:
            -(?P<multiarch>[^/]*?)
        )?
    ))?
    (?P<debug>_d)?
    \.so$c@s�eZdZdZdZdZdZdZdZiZ	d)dd�Z
dd	�Zd
d�Zdd
�Z
dd�Zedd��Zd*dd�Zd+dd�Zd,dd�Zd-dd�Zd.dd�Zd/dd�Zd0dd�Zd1d d!�Zd2d"d#�Zd3d$d%�Zd4d'd(�ZdS)5�InterpreterN�pythonF�cpython�cCs�t�}|d=|d=t|t�rF|��D]}	||	dkr$t||	�||	<q$nR|r�|�dd���rl|slt|�|d<n,|�|��	�D]\}	}
||	dkrz|
||	<qz|�	�D]\}	}
t
||	|
�q�dS)N�self�value�.��version)�locals�
isinstancer�keys�getattr�replace�isdigitr�parse�items�setattr)r
r�path�namer�debug�impl�optionsZparams�key�valr	r	�+/usr/share/python3/debpython/interpreter.py�__init__Es

zInterpreter.__init__cCs�|dkrJ|rJ|�d�r"d|jd<n|�d�r6d|jd<d|krbd|jd<n|d	krb|dk	rbt|�}|d
kr�|dkr�tt|�|j|<n
||j|<dS)Nrrrr�pypyz-dbgTrr)rrrr)�
startswith�__dict__rrr)r
rrr	r	r�__setattr__Zs


zInterpreter.__setattr__cCs8|jpd}||�|j�7}|jr4|dd�|j�7}|S)Nr
� )r�_vstrrrr)r
�resultr	r	r�__repr__js

zInterpreter.__repr__cCs|�|j�S)N)r&r)r
r	r	r�__str__qszInterpreter.__str__cCsF|jdkr|jS|r@t|�|jkr@|jr2d�|�S|jt|�S|jS)Nr!zpython{}-dbg)rr�strr�format�r
rr	r	rr&ts

zInterpreter._vstrcCs:t�|�}|siS|��}d|kr6t|d���|d<|S)a�Return dict with parsed shebang

        >>> sorted(Interpreter.parse('pypy').items())
        [('debug', None), ('name', 'pypy'), ('options', ()), ('path', None), ('version', None)]
        >>> sorted(Interpreter.parse('/usr/bin/python3.3-dbg').items())
        [('debug', '-dbg'), ('name', 'python'), ('options', ()), ('path', '/usr/bin/'), ('version', '3.3')]
        >>> sorted(Interpreter.parse('#! /usr/bin/pypy --foo').items())
        [('debug', None), ('name', 'pypy'), ('options', ('--foo',)), ('path', '/usr/bin/'), ('version', None)]
        >>> sorted(Interpreter.parse('#! /usr/bin/python3.2').items())
        [('debug', None), ('name', 'python'), ('options', ()), ('path', '/usr/bin/'), ('version', '3.2')]
        >>> sorted(Interpreter.parse('/usr/bin/python3.2-dbg --foo --bar').items())
        [('debug', '-dbg'), ('name', 'python'), ('options', ('--foo', '--bar')), ('path', '/usr/bin/'), ('version', '3.2')]
        r)�
SHEBANG_RE�search�	groupdict�tupler)Zshebangr'r	r	rr~s
zInterpreter.parsecCsnt|p
|j�}|jdkrd}n0|td�>r4d|}n|td�>rJd|}nd}|rZd|}|rjd	||f}|S)
a�Return path to site-packages directory.

        Note that returned path is not the final location of .py files

        >>> i = Interpreter('python')
        >>> i.sitedir(version='3.1')
        '/usr/lib/python3/dist-packages/'
        >>> i.sitedir(version='2.5')
        '/usr/lib/python2.5/site-packages/'
        >>> i.sitedir(version=Version('2.7'))
        '/usr/lib/python2.7/dist-packages/'
        >>> i.sitedir(version='3.1', gdb=True, package='python3-foo')
        'debian/python3-foo/usr/lib/debug/usr/lib/python3/dist-packages/'
        >>> i.sitedir(version=Version('3.2'))
        '/usr/lib/python3/dist-packages/'
        >>> Interpreter('pypy').sitedir(version='2.0')
        '/usr/lib/pypy/dist-packages/'
        r!z/usr/lib/pypy/dist-packages/�2.6z /usr/lib/python%s/site-packages/z3.0z /usr/lib/python%s/dist-packages/z/usr/lib/python3/dist-packages/z/usr/lib/debug%szdebian/%s%s)rrr)r
Zgdb�packagerrr	r	r�sitedir�s


zInterpreter.sitedircCsvt|p
|j�}d|jkrdnd}|td�kr4||St|�\}}|�d�sR|d7}t|dd|dd	�|�|�|f�S)
a�Given path to a .py file, return path to its .pyc/.pyo file.

        This function is inspired by Python 3.2's imp.cache_from_source.

        :param fpath: path to file name
        :param version: Python version

        >>> i = Interpreter('python')
        >>> i.cache_file('foo.py', Version('3.1'))
        'foo.pyc'
        >>> i.cache_file('bar/foo.py', '3.2')
        'bar/__pycache__/foo.cpython-32.pyc'
        z-O�o�c�3.1z.py�__pycache__z
%s.%s.py%sN���)rrrr�endswithr�	magic_tag)r
ZfpathrZ	last_char�fdir�fnamer	r	r�
cache_file�s
�zInterpreter.cache_filecCs~t|p
|j�}|�|�\}}|�dd�d}|rP|d�|�7}|rP|d�|�7}|jrt|jdkrt|td�>rt|d7}d	�|�S)
z5Return extension name with soname and multiarch tags.r�rz.{}z-{}r�3Z_dz{}.so)rr�_get_configrr+rr)r
rr�soabi�	multiarchr'r	r	r�ext_file�s
�zInterpreter.ext_filecCs<t|p
|j�}|jdkr(|td�>r(dS|�d|�}t|�S)zReturn magic number.rr?r
z"import imp; print(imp.get_magic()))rrr�_execute�eval)r
rr'r	r	r�magic_number�s
zInterpreter.magic_numbercCs4t|p
|j�}|jdkr(|td�>r(dS|�d|�S)z�Return Python magic tag (used in __pycache__ dir to tag files).

        >>> i = Interpreter('python')
        >>> i.magic_tag(version='3.2')
        'cpython-32'
        r�3.2r
z import imp; print(imp.get_tag()))rrrrDr,r	r	rr:�szInterpreter.magic_tagcCsJt|p
|j�}z|�|�\}}Wn$tk
rDtjddd�YdSX|S)zReturn multiarch tag.zcannot get multiarchT��exc_infor
�rrr@�	Exception�logr�r
rrArBr	r	rrB�szInterpreter.multiarchcCs4t|p
|j�}|jdkr0|td�?r0d�|j�SdS)NrrGzabi{})rrrr+�majorr,r	r	r�	stableabiszInterpreter.stableabicCsJt|p
|j�}z|�|�\}}Wn$tk
rDtjddd�YdSX|S)z�Return SOABI flag (used to in .so files).

        >>> i = Interpreter('python')
        >>> i.soabi(version=Version('3.3'))
        'cpython-33m'
        zcannot get soabiTrHr
rJrMr	r	rrA	szInterpreter.soabic	Cs�t|p
|j�}d|kr(|�dd�\}}nd}t�|�}|s>dS|��}|drRdSt||d�}|dr�d�|dd	|dd�|_|js�|d
s�d|dp�dkr�d
|_z|�	�\}}Wn$t
k
r�tjdd
d�YdSX|d}|jdk�r|jd?�r|�
d��r|dd�}|d�s&|�rbd�||d�p8|�}|d�sL|�rbd�||d�p^|�}|d7}||k�rxdSt||�S)a�Return extension file name if file can be renamed.

        >>> i = Interpreter('python')
        >>> i.check_extname('foo.so', version='3.3') # doctest: +ELLIPSIS
        'foo.cpython-33m-....so'
        >>> i.check_extname('foo.abi3.so', version='3.3')
        >>> i.check_extname('foo/bar/bazmodule.so', version='3.3') # doctest: +ELLIPSIS
        'foo/bar/baz.cpython-33m-....so'
        �/r>r
NrO)rZverz{}.{}rr�d�flagsTzcannot get soabi/multiarchrHrrrG�modulei����rArBz{}-{}z.so)rr�rsplit�
EXTFILE_REr.r/rr+rr@rKrLrr9r)	r
r<rr;�info�irArBr'r	r	r�
check_extnames>

$
zInterpreter.check_extnamecCs�t|p
|j�}|jdksB|jdkrH|d?r2|d>sB|d?sB|dkrHd}nd}|d7}|�||��d	�}ztjd
|d<Wntk
r�YnX|S)Nr!rr1r?r6zimport sysconfig as s;z%from distutils import sysconfig as s;zOprint("__SEP__".join(i or "" for i in s.get_config_vars("SOABI", "MULTIARCH")))Z__SEP__ZDEB_HOST_MULTIARCHr>)rrrrDr�os�environ�KeyError)r
r�cmdZ	conf_varsr	r	rr@Ks&����zInterpreter._get_configTcCs�t|p
|j�}d�|�|�|�dd��}|rD||jjkrD|jj|St|�}|ddkrzt�	|d�t
d�||d���|d��}t|�dkr�|d}|r�||jj|<|S)	Nz
{} -c '{}'�'�
returncoder�stderrz{} failed with status code {}�stdoutr>)
rrr+r&r�	__class__�_cacherrLrrK�
splitlines�len)r
Zcommandr�cache�outputr'r	r	rrD^szInterpreter._execute)NNNNNNN)FNN)N)N)N)N)N)N)N)N)N)NT)�__name__�
__module__�__qualname__rrrrrrrbr r$r(r)r&�staticmethodrr3r=rCrFr:rBrOrArXr@rDr	r	r	rr<s:�



&







1
r)ZloggingrY�re�os.pathrrZ	debpythonrZdebpython.versionr�compile�VERBOSEr-rUZ	getLoggerrgrLrr	r	r	r�<module>s��

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