� �fc @ s/ 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 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 y e j j Z e j Z Wn e k r� e Z Z n Xe d k oe 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 � Z" e" d � � Z# d � Z$ d � Z% d S( i����N( t urllibt http_clientt mapt filter( t ResolutionErrort ExtractionErrort 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 /usr/local/share/certs/ca-root-nss.crt /etc/ssl/ca-bundle.pem ( t CertificateErrort match_hostname( R ( R R c B s e Z RS( ( t __name__t __module__( ( ( s: /usr/lib/python2.7/site-packages/setuptools/ssl_support.pyR 5 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: /usr/lib/python2.7/site-packages/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 rt d | d j t t | � � f � � n; t | � d k rKt 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&