
    XfG0                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z
d dlZ
d dlZd dlmZmZmZmZ d dl
mZ d dlmZ d dlmZmZ 	 d dlZdZn# e$ r dZY nw xY w	 d dlZn# e$ r Y nw xY w ej        e          Zdee          d	ee          d
ee          fdZ! G d de"          Z# G d de
j$        j%                  Z& G d de&          Z' G d de&          Z(dS )    N)AnyIOListOptional)error)	framework)	constants
exceptionsTFnew_fporiginal_fpreturnc                 $      fd}| _          S )a  Really horrible solution for ensuring files aren't left open

    Args:
        new_fp: The file pointer constructed based on the original file pointer
        original_fp: The original file pointer that should be closed when the new file pointer is closed, but isn't
    c                  `                                       j                                        S N)close	__class__)r   r   s   X/home/panchajanya/Development/work/volatility3/volatility3/framework/layers/resources.pyr   zcascadeCloseFile.<locals>.close4   s,    %%f---    )r   )r   r   r   s   `` r   cascadeCloseFiler   ,   s0    . . . . . . FLMr   c            	           e Zd ZdZdZ	 	 	 ddeej                 deej	                 de
ddfdZd	ede
fd
Zedee         fd            Zdd	ededefdZdS )ResourceAccessorzMObject for opening URLs as files (downloading locally first if
    necessary)TNprogress_callbackcontextenable_cacher   c                 X   || _         || _        t          t          j        t
          j        j                            | _        || _	        | j
        rXt                              t          j        dd                    d | j        D                                   d| j        _
        dS dS )zhCreates a resource accessor.

        Note: context is an SSL context, not a volatility context
        zAvailable URL handlers: z, c                     g | ]	}|j         
S  )__name__).0xs     r   
<listcomp>z-ResourceAccessor.__init__.<locals>.<listcomp>S   s    5Y5Y5YQaj5Y5Y5Yr   FN)_progress_callback_contextlistr   class_subclassesurllibrequestBaseHandler	_handlers_enable_cachelist_handlersvolloglogr	   LOGLEVEL_VVVjoinr   )selfr   r   r   s       r   __init__zResourceAccessor.__init__B   s     #4i89STTUU) 	1JJ&\4995Y5Y$.5Y5Y5Y+Z+Z\\   ,1DN(((	1 	1r   urlc                     t           j                            |          }| j        o|j        |                                 vS )z3Determines whether a URLs contents should be cached)r&   parseurlparser*   scheme_non_cached_schemes)r0   r2   
parsed_urls      r   
uses_cachezResourceAccessor.uses_cacheW   s=    \**3//
 V:#4D<T<T<V<V#V	
r   c                  r    dg} t          j        t                    D ]}| |                                z  } | S )z,Returns the list of schemes not to be cachedfile)r   r%   VolatilityHandlernon_cached_schemes)resultclazzs     r   r7   z$ResourceAccessor._non_cached_schemes_   sC     /0ABB 	1 	1Ee..000FFr   rbmodec                    t           j                            t          j        j        | j                    t
          j        dk    rt           j                            |d          }|j	        dk    r|j
        s|j                            d          rvt           j                            |j	        dd|j
        z   |j        z   |j        |j        |j        f          }t"                              t&          j        d| d|            |}	 t           j                            || j                  }n# t.          j        $ r}|j        rt5          |j        d	         t6          j                  rgt"                              d
           t7          j                    }d|_        t6          j         |_!        t           j                            ||          }n||Y d}~n5d}~wtD          j#        $ r  t"          $                    d| d            w xY wtK          j&        |          5 }| '                    |          s(t           j                            || j                  }nd}	tP          j        )                    t&          j*        dtW          j,        t[          |d                    .                                z   dz             }
tP          j        /                    |
          st"          0                    d|
            	 |$                                1                    dd          }n# td          $ r d}Y nw xY wtg          |
d          5 }d	}|4                    |	          }|r|tk          |          z  }| j6        r:| 6                    |dz  to          |tq          |                    z  d|            |9                    |           |4                    |	          }|ddd           n# 1 swxY w Y   nt"          0                    d|
            tg          |
d          }ddd           n# 1 swxY w Y   d}tt          rd}|sd}tK          j;        td          tx                    5  t{          j>        |          }d}ddd           n# 1 swxY w Y   |r|j?        dk    r$t          t          jB        ||          |          }n^|j?        dk    r$t          t          jD        ||          |          }n/|j?        dk    r$t          t          jF        ||           |          }|j?        d!v r+|4                    d"           |G                    d	           nd}nd}||st           j                            |          }|j        }d}|s|H                    d#          }|dd         |d         }}d#)                    |          }|d$k    r$t          t          jB        ||          |          }nW|d%k    r$t          t          jD        ||          |          }n-|d&k    r%t          t          jF        ||           |          }nd}||t          d'          |S )(zReturns a file-like object for a particular URL opened in mode.

        If the file is remote, it will be downloaded and locally cached
        win32r;   )r6   z///z"UNC path detected, converted path z to )r   r   zDSSL certificate verification failed: attempting UNVERIFIED retrievalFNzNot accessing z in offline modei    data_raw_unicode_escapez.cachezCaching file at: zContent-Lengthwbd   zReading file zUsing already cached file at: r@   )rA   Tapplication/x-xzapplication/x-bzip2application/x-gzip)fileobjrA   )rJ   rK   rL      .xzbz2gzz'URL does not reference an openable file)Jr&   r'   install_openerbuild_openerr)   sysplatformr4   r5   r6   netlocpath
startswith
urlunparseparamsqueryfragmentr,   r-   r	   LOGLEVEL_VVVVurlopenr#   r   URLErrorargs
isinstancesslSSLCertVerificationErrorwarning
SSLContextcheck_hostname	CERT_NONEverify_moder
   OfflineExceptioninfo
contextlibclosingr9   osr/   
CACHE_PATHhashlibsha512bytes	hexdigestexistsdebuggetAttributeErroropenreadlenr"   maxintwrite	HAS_MAGICsuppressIOErrormagicdetect_from_fobj	mime_typer   lzmaLZMAFilerQ   BZ2FilegzipGzipFileseeksplit
ValueError)r0   r2   rA   r8   new_urlfpexcpnon_verifying_ctxcurfile
block_sizetemp_filenamecontent_length
cache_filecountblockIMPORTED_MAGICstopdetectedurl_pathurl_path_spliturl_path_list	extensions                         r   rx   zResourceAccessor.openh   sf   
 	%%fn&A4>&RSSS <7""..s6.BBJ  F**! +%/_%?%?%E%E +
 !,11")j//*/A")"("+	 	 

+KKK'KK   	''T]'CCBB~ 	 	 	y dilC,HII 	NN^   ),(8(8%7<%447M%1//=N/OOBBJ
	 BBBB
 * 	 	 	KK>>>>???	 ## )	9r ??3'' &9 .00dm0LL &
 "(nU30D%E%EFFPPRRS! ! w~~m44 SLL!D]!D!DEEE,)+7G)L)L) , , ,)+, mT22 8j ! "
 3 3# 8!SZZ/E#6 " $ 7 7$)CK#eS=P=P2Q2Q$Q$9C$9$9!" !" !" ',,U333$&GGJ$7$7E $ 88 8 8 8 8 8 8 8 8 8 8 8 8 8 8 LL!Q-!Q!QRRR }4888S)	9 )	9 )	9 )	9 )	9 )	9 )	9 )	9 )	9 )	9 )	9 )	9 )	9 )	9 )	9X  !	 D  (AA * *$5g>>H%)N* * * * * * * * * * * * * * *   )-???"2 M'488'# # "+/DDD"23;w3M3Mw"W"W!+/CCC"2 M'EEEw# #  ) .    QQ#D?   B  	 ..s33J!HD  !)!4!4+9#2#+>r@Ry88M22$$.t}Wd/K/KWUUGG%''.s{7D/I/I7SSGG$&&.gDAAA7 GG  D     ?FGGGs   
&D1 1H BG2H%CP;(L.-P;.L=:P;<L==P;BO5)P;5O9	9P;<O9	=2P;;P?P?6RR R)NNT)r@   )r   
__module____qualname____doc__r+   r   r	   ProgressCallbackrc   rf   boolr1   strr9   staticmethodr   r7   r   rx   r   r   r   r   r   <   s         M CG,0!	1 1#I$>?1 #.)1 	1
 
1 1 1 1*
c 
d 
 
 
 
 c    \] ] ]3 ]# ] ] ] ] ] ]r   r   c                   6    e Zd Zedee         fd            ZdS )r<   r   c                     g S r   r   clss    r   r=   z$VolatilityHandler.non_cached_schemes	  s    	r   N)r   r   r   classmethodr   r   r=   r   r   r   r<   r<     s=        49    [  r   r<   c                   z    e Zd ZdZedee         fd            Zede	j
        j        dee         fd            ZdS )
JarHandleraO  Handles the jar scheme for URIs.

    Reference used for the schema syntax:
    http://docs.netkernel.org/book/view/book:mod:reference/doc:layer1:schemes:jar

    Actual reference (found from https://www.w3.org/wiki/UriSchemes/jar) seemed not to return:
    http://developer.java.sun.com/developer/onlineTraining/protocolhandlers/
    r   c                     dgS )Njarr   r   s    r   r=   zJarHandler.non_cached_schemes  s	    wr   reqc                 $   | j         dk    r| j                            d          d         d                    | j                            d          dd                   }}|dk    r*t                              t          j        d|            dS |                    d          }t          |          dk    r*t                              t          j        d	|            dS |\  }}t          j
        |                              |          S dS )
z+Handles the request if it's the jar scheme.r   :rN      Nr;   zUnsupported jar subscheme !z5Path did not contain exactly one fragment indicator: )typefull_urlr   r/   r,   r-   r	   r.   rz   zipfileZipFilerx   )r   	subscheme	remainderzipsplitzippathfilepaths         r   default_openzJarHandler.default_open  s    8u#&<#5#5c#:#:1#=sxx""3''+@ @yI F""

*,T,T,T   t s++H8}}!!

*WIWW   t (GX?7++00:::tr   N)r   r   r   r   r   r   r   r=   r   r&   r'   Requestr   r   r   r   r   r   r   r     s          49    [ &.0 Xc]    \  r   r   c                   N    e Zd Zedej        j        dee         fd            Z	dS )OfflineHandlerr   r   c                 b    t           j        r"| j        dv rt          j        | j                  d S )N)httphttps)r	   OFFLINEr   r
   rj   r   )r   s    r   r   zOfflineHandler.default_open7  s2     	<->!>!>-cl;;;tr   N)
r   r   r   r   r&   r'   r   r   r   r   r   r   r   r   r   6  sI        &.0 Xc]    \  r   r   ))rQ   rl   r   rp   loggingr   rn   rc   rU   urllib.parser&   urllib.requestr   typingr   r   r   r   r   volatility3r   volatility3.frameworkr	   r
   r   r~   ImportErrorsmb.SMBHandlersmb	getLoggerr   r,   rr   r   objectr   r'   r(   r<   r   r   r   r   r   <module>r      sU  
 


         				 



 



          * * * * * * * * * * * *       ! ! ! ! ! ! 7 7 7 7 7 7 7 7LLLII   III	 	 	 	D	 
	8	$	$RY RY 2e9     I I I I Iv I I IX    2   % % % % %" % % %P    &     s$   A A#"A#'A, ,A43A4