ó
ÓnùWc           @   sN  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
 r$qõ Xqõ Wqâ We	 d k	 oHe e e f k Z y d  d l	 m Z m Z WnU e
 k
 r¼y$ d  d l m Z d  d l m Z Wq½e
 k
 r¸d Z d Z q½Xn Xe sÜd e f d „  ƒ  YZ n  e súd d „ Z d „  Z n  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   CertificateErrort   match_hostname(   R   (   R   R   c           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s=   /var/www/html/venv/build/setuptools/setuptools/ssl_support.pyR   8   s   i   c   
      C   sR  g  } |  s t  S|  j d ƒ } | d } | d } | j d ƒ } | | k rg t d t |  ƒ ƒ ‚ n  | sƒ |  j ƒ  | j ƒ  k S| d k rŸ | j d ƒ nY | j d ƒ s½ | j d ƒ rÖ | j t j	 | ƒ ƒ n" | j t j	 | ƒ j
 d d	 ƒ ƒ x$ | D] } | j t j	 | ƒ ƒ qÿ Wt j d
 d j | ƒ d t j ƒ }	 |	 j | ƒ S(   sp   Matching according to RFC 6125, section 6.4.3

        http://tools.ietf.org/html/rfc6125#section-6.4.3
        t   .i    i   t   *s,   too many wildcards in certificate DNS name: s   [^.]+s   xn--s   \*s   [^.]*s   \As   \.s   \Z(   t   Falset   splitt   countR   t   reprt   lowert   appendt
   startswitht   ret   escapet   replacet   compilet   joint
   IGNORECASEt   match(
   t   dnt   hostnamet   max_wildcardst   patst   partst   leftmostt	   remaindert	   wildcardst   fragt   pat(    (    s=   /var/www/html/venv/build/setuptools/setuptools/ssl_support.pyt   _dnsname_match<   s*    

"&c         C   s[  |  s t  d ƒ ‚ n  g  } |  j d d ƒ } xC | D]; \ } } | d k r4 t | | ƒ r_ d S| j | ƒ q4 q4 W| sß xc |  j d d ƒ D]L } xC | D]; \ } } | d k r™ t | | ƒ rÄ d S| j | ƒ q™ q™ WqŒ Wn  t | ƒ d k rt d | d	 j t t | ƒ ƒ f ƒ ‚ n; t | ƒ d k rKt d
 | | d f ƒ ‚ n t d ƒ ‚ d S(   s=  Verify that *cert* (in decoded format as returned by
        SSLSocket.getpeercert()) matches the *hostname*.  RFC 2818 and RFC 6125
        rules are followed, but IP addresses are not accepted for *hostname*.

        CertificateError is raised on failure. On success, the function
        returns nothing.
        s   empty or no certificatet   subjectAltNamet   DNSNt   subjectt
   commonNamei   s&   hostname %r doesn't match either of %ss   , s   hostname %r doesn't match %ri    s=   no appropriate commonName or subjectAltName fields were found(    (    (	   t
   ValueErrort   getR)   R   t   lenR   R   t   mapR   (   t   certR    t   dnsnamest   sant   keyt   valuet   sub(    (    s=   /var/www/html/venv/build/setuptools/setuptools/ssl_support.pyR   p   s.    %c           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   selfR8   (    (    s=   /var/www/html/venv/build/setuptools/setuptools/ssl_support.pyR9   œ   s    	c            s   ˆ  j  ‡  f d †  | ƒ S(   Nc            s   t  |  ˆ  j |  S(   N(   t   VerifyingHTTPSConnR8   (   t   hostt   kw(   R:   (    s=   /var/www/html/venv/build/setuptools/setuptools/ssl_support.pyt   <lambda>¢   s    (   t   do_open(   R:   t   req(    (   R:   s=   /var/www/html/venv/build/setuptools/setuptools/ssl_support.pyt
   https_open    s    (   R   R   t   __doc__R9   RA   (    (    (    s=   /var/www/html/venv/build/setuptools/setuptools/ssl_support.pyR   ™   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	   R9   R8   (   R:   R<   R8   R=   (    (    s=   /var/www/html/venv/build/setuptools/setuptools/ssl_support.pyR9   ¨   s    c         C   sÝ   t  j |  j |  j f t |  d d  ƒ ƒ } t |  d ƒ ra t |  d d  ƒ ra | |  _ |  j ƒ  n  t	 j
 | d t	 j d |  j ƒ|  _ y t |  j j ƒ  |  j ƒ Wn4 t k
 rØ |  j j t  j ƒ |  j j ƒ  ‚  n Xd  S(   Nt   source_addresst   _tunnelt   _tunnel_hostt	   cert_reqst   ca_certs(   t   sockett   create_connectionR<   t   portt   getattrt   Nonet   hasattrt   sockRD   t   sslt   wrap_sockett   CERT_REQUIREDR8   R   t   getpeercertR   t   shutdownt	   SHUT_RDWRt   close(   R:   RN   (    (    s=   /var/www/html/venv/build/setuptools/setuptools/ssl_support.pyt   connect¬   s    $!	(   R   R   RB   R9   RV   (    (    (    s=   /var/www/html/venv/build/setuptools/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(   R8   (    (    s=   /var/www/html/venv/build/setuptools/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(   R9   t   addstoret   addcertst   atexitt   registerRU   (   R:   t   storest   certst   store(   RY   (    s=   /var/www/html/venv/build/setuptools/setuptools/ssl_support.pyR9   Ô   s
    (    (    (   R   R   R9   (    (   RY   (    s=   /var/www/html/venv/build/setuptools/setuptools/ssl_support.pyRZ   Ó   s   R_   t   CAt   ROOT(   t	   _wincertsRL   t   namet   wincertstoreRY   t   ImportError(   RZ   (    (   RY   s=   /var/www/html/venv/build/setuptools/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   osRe   Rh   R   t   patht   isfilet   pkg_resourcest   resource_filenameRg   R    R   RL   (   t	   cert_path(    (    s=   /var/www/html/venv/build/setuptools/setuptools/ssl_support.pyR   ß   s    ("   Rk   RH   R]   R   Rn   R    R   t   setuptools.compatR   RO   Rg   RL   t   __all__t   stripR   R   t   objectR   R	   t   whatt   wheret   moduleR   R   R   t   backports.ssl_match_hostnameR.   R)   R   R;   R   Rd   Rh   R   (    (    (    s=   /var/www/html/venv/build/setuptools/setuptools/ssl_support.pyt   <module>   sV   
	

4)	