ó
ò¦Yc           @   s  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 d  d l m	 Z	 y d  d l
 Z
 Wn e k
 r— d Z
 n Xd d d d d g Z d	 j ƒ  j ƒ  Z e Z Z xm d
 d d g f d d d g f f D]G \ Z Z x8 e D]0 Z y d e e f d UWqe k
 r0qXqWqî We
 d k	 oTe e e f k Z y d  d l m Z Wn5 e k
 r¢e e d e ƒ  ƒ Z e d d „ Z n Xd  d l m Z m Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d d „ Z  d a! d „  Z" d „  Z# d S(   iÿÿÿÿN(   t   ResolutionErrort   ExtractionError(   t   urllib2t   VerifyingHTTPSHandlert   find_ca_bundlet   is_availablet
   cert_pathst
   opener_forsÄ   
/etc/pki/tls/certs/ca-bundle.crt
/etc/ssl/certs/ca-certificates.crt
/usr/share/ssl/certs/ca-bundle.crt
/usr/local/share/certs/ca-root.crt
/etc/ssl/cert.pem
/System/Library/OpenSSL/certs/cert.pem
t   HTTPSHandlerR   s   urllib.requestt   HTTPSConnectiont   httplibs   http.clients   from %s import %s(   t   create_connectiont   _GLOBAL_DEFAULT_TIMEOUTc         C   sþ   |  \ } } d } xÍ t j | | d t j ƒ D]° } | \ } } }	 }
 } d } y\ t j | | |	 ƒ } | t k	 rƒ | j | ƒ n  | r™ | j | ƒ n  | j | ƒ | SWq. t k
 rÝ t	 } | d k	 rÞ | j
 ƒ  qÞ q. Xq. W| rî ‚  n t d ƒ ‚ d S(   sˆ  Connect to *address* and return the socket object.

        Convenience function.  Connect to *address* (a 2-tuple ``(host,
        port)``) and return the socket object.  Passing the optional
        *timeout* parameter will set the timeout on the socket instance
        before attempting to connect.  If no *timeout* is supplied, the
        global default timeout setting returned by :func:`getdefaulttimeout`
        is used.  If *source_address* is set it must be a tuple of (host, port)
        for the socket to bind as a source address before making the connection.
        An host of '' or port 0 tells the OS to use the default.
        i    s!   getaddrinfo returns an empty listN(   t   Nonet   sockett   getaddrinfot   SOCK_STREAMR   t
   settimeoutt   bindt   connectt   errort   Truet   close(   t   addresst   timeoutt   source_addresst   hostt   portt   errt   rest   aft   socktypet   protot	   canonnamet   sat   sock(    (    s:   /usr/lib/python2.7/site-packages/setuptools/ssl_support.pyR   0   s(    "(   t   CertificateErrort   match_hostnamec           B   s    e  Z d  Z d „  Z d „  Z RS(   s=   Simple verifying handler: no auth, subclasses, timeouts, etc.c         C   s   | |  _  t j |  ƒ d  S(   N(   t	   ca_bundleR   t   __init__(   t   selfR&   (    (    s:   /usr/lib/python2.7/site-packages/setuptools/ssl_support.pyR'   q   s    	c            s   ˆ  j  ‡  f d †  | ƒ S(   Nc            s   t  |  ˆ  j |  S(   N(   t   VerifyingHTTPSConnR&   (   R   t   kw(   R(   (    s:   /usr/lib/python2.7/site-packages/setuptools/ssl_support.pyt   <lambda>w   s    (   t   do_open(   R(   t   req(    (   R(   s:   /usr/lib/python2.7/site-packages/setuptools/ssl_support.pyt
   https_openu   s    (   t   __name__t
   __module__t   __doc__R'   R.   (    (    (    s:   /usr/lib/python2.7/site-packages/setuptools/ssl_support.pyR   n   s   	R)   c           B   s    e  Z d  Z d „  Z d „  Z RS(   s@   Simple verifying connection: no auth, subclasses, timeouts, etc.c         K   s    t  j |  | |  | |  _ d  S(   N(   R	   R'   R&   (   R(   R   R&   R*   (    (    s:   /usr/lib/python2.7/site-packages/setuptools/ssl_support.pyR'   }   s    c         C   sé   t  |  j |  j f t |  d d  ƒ ƒ } t |  d ƒ rg t |  d d  ƒ rg | |  _ |  j ƒ  |  j } n	 |  j } t	 j
 | d t	 j d |  j ƒ|  _ y t |  j j ƒ  | ƒ Wn4 t k
 rä |  j j t j ƒ |  j j ƒ  ‚  n Xd  S(   NR   t   _tunnelt   _tunnel_hostt	   cert_reqst   ca_certs(   R   R   R   t   getattrR   t   hasattrR#   R2   R3   t   sslt   wrap_sockett   CERT_REQUIREDR&   R%   t   getpeercertR$   t   shutdownR   t	   SHUT_RDWRR   (   R(   R#   t   actual_host(    (    s:   /usr/lib/python2.7/site-packages/setuptools/ssl_support.pyR      s    $!	
	(   R/   R0   R1   R'   R   (    (    (    s:   /usr/lib/python2.7/site-packages/setuptools/ssl_support.pyR)   {   s   	c         C   s   t  j t |  p t ƒ  ƒ ƒ j S(   s@   Get a urlopen() replacement that uses ca_bundle for verification(   R   t   build_openerR   R   t   open(   R&   (    (    s:   /usr/lib/python2.7/site-packages/setuptools/ssl_support.pyR   œ   s    c             st   t  d  k	 r t  j Sy d d l m ‰  Wn t k
 r; d  SXd ˆ  f ‡  f d †  ƒ  Y}  |  d d d g ƒ a  t  j S(   Niÿÿÿÿ(   t   CertFilet
   MyCertFilec              s   e  Z d d ‡  f d  † Z RS(   c            sL   ˆ  j  |  ƒ x | D] } |  j | ƒ q W|  j | ƒ t j |  j ƒ d  S(   N(   R'   t   addstoret   addcertst   atexitt   registerR   (   R(   t   storest   certst   store(   RA   (    s:   /usr/lib/python2.7/site-packages/setuptools/ssl_support.pyR'   ±   s
    (    (    (   R/   R0   R'   (    (   RA   (    s:   /usr/lib/python2.7/site-packages/setuptools/ssl_support.pyRB   °   s   RG   t   CAt   ROOT(   t	   _wincertsR   t   namet   wincertstoreRA   t   ImportError(   RB   (    (   RA   s:   /usr/lib/python2.7/site-packages/setuptools/ssl_support.pyt   get_win_certfile¦   s    c          C   ss   t  j d k r t ƒ  Sx$ t D] }  t  j j |  ƒ r |  Sq Wy t j d d ƒ SWn t t	 t
 f k
 rn d SXd S(   s*   Return an existing CA bundle path, or Nonet   ntt   certifis
   cacert.pemN(   t   osRM   RP   R   t   patht   isfilet   pkg_resourcest   resource_filenameRO   R    R   R   (   t	   cert_path(    (    s:   /usr/lib/python2.7/site-packages/setuptools/ssl_support.pyR   ¼   s    ($   t   sysRS   R   RE   t   reRV   R    R   t   setuptools.compatR   R8   RO   R   t   __all__t   stript   splitR   t   objectR   R	   t   whatt   wheret   moduleR   R   R6   R   t   backports.ssl_match_hostnameR$   R%   R   R)   R   RL   RP   R   (    (    (    s:   /usr/lib/python2.7/site-packages/setuptools/ssl_support.pyt   <module>   sB   <
	

$!	