σ
(TQc           @@ s  d  Z  d d l m Z m Z d d l Z d d l m Z m Z m Z m	 Z	 m
 Z
 m Z e	 rΎ d Z d d l m Z d d l m Z d d	 l m Z e
 sd d
 l m Z d d l m Z qnQ d Z d d l m Z d d l Z d Z e sd d
 l m Z d d l m Z n  y d d l Z Wn e k
 r8d Z n Xd Z d d  Z d e r]e j n e f d     YZ  d e f d     YZ! d   Z" d   Z# d S(   s*   Defused xmlrpclib

Also defuses gzip bomb
i    (   t   print_functiont   absolute_importNi   (   t   DTDForbiddent   EntitiesForbiddent   ExternalReferenceForbiddent   PY3t   PY31t   PY26s   xmlrpc.client(   t   ExpatParser(   t   client(   t   server(   t   gzip_decode(   t   GzipDecodedResponset	   xmlrpclibi   i   c         C@ sβ   t  s t  n  | d k r$ t } n  t j |   } t  j d d d |  } y2 | d k  ri | j   } n | j | d  } Wn t k
 r t	 d   n X| j
   | j
   | d k rή t |  | k rή t	 d   n  | S(	   sr   gzip encoded data -> unencoded data

    Decode data using the gzip content encoding as described in RFC 1952
    t   modet   rbt   fileobji    i   s   invalid datas#   max gzipped payload length exceededN(   t   gzipt   NotImplementedErrort   Nonet   MAX_DATAt   iot   BytesIOt   GzipFilet   readt   IOErrort
   ValueErrort   closet   len(   t   datat   limitt   ft   gzft   decoded(    (    s5   /usr/lib/python2.7/dist-packages/defusedxml/xmlrpc.pyt   defused_gzip_decode.   s"    		

t   DefusedGzipDecodedResponsec           B@ s,   e  Z d  Z d d  Z d   Z d   Z RS(   sh   a file-like object to decode a response encoded with the gzip
    method, as described in RFC 1952.
    c         C@ sΠ   t  s t  n  | d  k	 r! | n t |  _ } | d k  rR | j   } d  |  _ n | j | d  } d |  _ | d k r t |  | k r t d   n  t	 j
 |  |  _ t  j j |  d d d |  j d  S(   Ni    i   s   max payload length exceededR   R   R   (   R   R   R   R   R   R   t
   readlengthR   R   R   R   t   stringioR   t   __init__(   t   selft   responseR   R   (    (    s5   /usr/lib/python2.7/dist-packages/defusedxml/xmlrpc.pyR&   K   s    		c         C@ s   |  j  d k r |  j  |  j } t | | d  } t j j |  |  } |  j t |  7_ |  j |  j  k r} t d   n  | St j j |  |  Sd  S(   Ni    i   s   max payload length exceeded(   R   R$   t   minR   R   R   R   R   (   R'   t   nt   leftR   (    (    s5   /usr/lib/python2.7/dist-packages/defusedxml/xmlrpc.pyR   \   s    c         C@ s!   t  j j |   |  j j   d  S(   N(   R   R   R   R%   (   R'   (    (    s5   /usr/lib/python2.7/dist-packages/defusedxml/xmlrpc.pyR   h   s    N(   t   __name__t
   __module__t   __doc__R   R&   R   R   (    (    (    s5   /usr/lib/python2.7/dist-packages/defusedxml/xmlrpc.pyR#   G   s   	t   DefusedExpatParserc           B@ s>   e  Z e e e d   Z d   Z d   Z d   Z d   Z RS(   c         C@ s   t  j |  |  | |  _ | |  _ | |  _ |  j } |  j rL |  j | _ n  |  j rp |  j | _	 |  j
 | _ n  |  j r |  j | _ n  d  S(   N(   R   R&   t
   forbid_dtdt   forbid_entitiest   forbid_externalt   _parsert   defused_start_doctype_declt   StartDoctypeDeclHandlert   defused_entity_declt   EntityDeclHandlert   defused_unparsed_entity_declt   UnparsedEntityDeclHandlert#   defused_external_entity_ref_handlert   ExternalEntityRefHandler(   R'   t   targetR0   R1   R2   t   parser(    (    s5   /usr/lib/python2.7/dist-packages/defusedxml/xmlrpc.pyR&   n   s    							c         C@ s   t  | | |   d  S(   N(   R   (   R'   t   namet   sysidt   pubidt   has_internal_subset(    (    s5   /usr/lib/python2.7/dist-packages/defusedxml/xmlrpc.pyR4   }   s    c         C@ s   t  | | | | | |   d  S(   N(   R   (   R'   R>   t   is_parameter_entityt   valuet   baseR?   R@   t   notation_name(    (    s5   /usr/lib/python2.7/dist-packages/defusedxml/xmlrpc.pyR6      s    c         C@ s   t  | d  | | | |   d  S(   N(   R   R   (   R'   R>   RD   R?   R@   RE   (    (    s5   /usr/lib/python2.7/dist-packages/defusedxml/xmlrpc.pyR8      s    c         C@ s   t  | | | |   d  S(   N(   R   (   R'   t   contextRD   R?   R@   (    (    s5   /usr/lib/python2.7/dist-packages/defusedxml/xmlrpc.pyR:      s    (	   R,   R-   t   Falset   TrueR&   R4   R6   R8   R:   (    (    (    s5   /usr/lib/python2.7/dist-packages/defusedxml/xmlrpc.pyR/   m   s   			c           C@ sA   t  t _ t s t r d  St t _ t t _ t	 r= t t	 _ n  d  S(   N(
   R/   t   xmlrpc_clientt
   FastParserR   R   R#   R   R"   R   t   xmlrpc_server(    (    (    s5   /usr/lib/python2.7/dist-packages/defusedxml/xmlrpc.pyt   monkey_patch   s    			c           C@ sA   d  t _ t s t r d  St t _ t t _ t	 r= t t	 _ n  d  S(   N(
   R   RI   RJ   R   R   t   _OrigGzipDecodedResponseR   t   _orig_gzip_decodeR   RK   (    (    (    s5   /usr/lib/python2.7/dist-packages/defusedxml/xmlrpc.pyt   unmonkey_patch   s    			i x  i  ΰ($   R.   t
   __future__R    R   R   t   commonR   R   R   R   R   R   t
   __origin__t   xmlrpc.clientR   t   xmlrpcR	   RI   R
   RK   R   RN   R   RM   R   R   R   t   ImportErrorR   R"   R   t   objectR#   R/   RL   RO   (    (    (    s5   /usr/lib/python2.7/dist-packages/defusedxml/xmlrpc.pyt   <module>	   s8   .
%&"	
