bgLdZddlmZddlZdZGddeZd dZd ZdS) zHThe match_hostname() function from Python 3.2, essential when using SSL.)absolute_importNz3.2.2ceZdZdS)CertificateErrorN)__name__ __module__ __qualname__U/opt/cloudlinux/venv/lib64/python3.11/site-packages/raven/utils/ssl_match_hostname.pyrr sDr rchg}|sdS|d}|d}|d}||krtdt|z|s*||kS|dkr|dn|ds|dr(|tj|n;|tj| dd |d d D])}|tj|*tj d d |zdztj }| |S)zhMatching according to RFC 6125, section 6.4.3 http://tools.ietf.org/html/rfc6125#section-6.4.3 F.r*z,too many wildcards in certificate DNS name: z[^.]+zxn--z\*z[^.]*r Nz\Az\.z\Z)splitcountrreprlowerappend startswithreescapereplacecompilejoin IGNORECASEmatch) dnhostname max_wildcardspatspartsleftmost wildcardsfragpats r _dnsname_matchr&s D u HHTNNEQxHs##I=   :T"XX EGG G .xxzzX^^---- 3 G   V $ $A(;(;F(C(CA BIh''(((( BIh''//w??@@@abb %% BIdOO$$$$ *UUZZ---5r} E EC 99X  r c z|stdg}|dd}|D]3\}}|dkr(t||rdS||4|sP|ddD]9}|D]4\}}|dkr)t||rdS||5:t |dkr;t d |d d tt|t |dkrt d |d |d t d)a)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. zempty or no certificatesubjectAltNamer DNSNsubject commonNamer z hostname z doesn't match either of z, z doesn't match rz=no appropriate commonName or subjectAltName fields were found) ValueErrorgetr&rlenrrmapr)certrdnsnamessankeyvaluesubs r match_hostnamer6@s 42333H ((#R ( (C## U %<<eX..  OOE " " "  +88Ir** + +C! + + U,&&%eX66OOE***  + 8}}q$))Ch$7$7888 :    X!  .6hh D    K   r )r ) __doc__ __future__rr __version__r,rr&r6r r r r:sNN&&&&&&       z   ////d( ( ( ( ( r