
    =OOf<                     v   d Z ddlmZmZmZmZmZ ddlmZ ddl	m
Z
mZmZmZmZ 	 ddlZ	 dd	lmZmZ 	 ddlmZmZ dZddlmZ  G d de      Zd Zy# e$ r  ee      r	 e
ed        ed      w xY w# e$ r  dd
lmZ ddlmZ  ee      r	 e
ed       Y fw xY w# e$ r dZ ee      r	 e
ed       Y yw xY w)
   )LDAPSSLNotSupportedErrorLDAPSSLConfigurationErrorLDAPCertificateErrorstart_tls_exception_factoryLDAPStartTLSError   )SEQUENCE_TYPES)loglog_enabledERRORBASICNETWORK    Nz,SSL not supported in this Python interpreter)match_hostnameCertificateError)r   )r   zusing tls_backport)create_default_contextPurposeTFzSSLContext unavailable)pathc                   d    e Zd ZdZddej
                  dddddddddfdZd Zd Zd	dZ	d Z
d Zy)
Tlsa  
    tls/ssl configuration for Server object
    Starting from python 2.7.9 and python 3.4 uses the SSLContext object
    that tries to read the CAs defined at system level
    ca_certs_path and ca_certs_data are valid only when using SSLContext
    local_private_key_password is valid only when using SSLContext
    ssl_options is valid only when using SSLContext
    sni is the server name for Server Name Indication (when available)
    Nc                 H   |g }|| _         |t        j                  t        j                  t        j                  fv r|| _        n-|r+t        t              rt        t        d|       t        d      |rt        j                  |      r|| _        n4|r+t        t              rt        t        d|       t        d      d | _        |r#t        rt        j                  |      r|| _        nf|r0t        s*t        t              rt        t        d       t        d      |r+t        t              rt        t        d|       t        d      d | _        |	rt        r|	| _        n3|	r*t        t              rt        t        d       t        d      d | _        |
rt        r|
| _        n3|
r*t        t              rt        t        d	       t        d
      d | _        || _        || _        || _        || _        || _        || _        t        t0              rt        t0        d| z         y y )Nzinvalid validate parameter <%s>zinvalid validate parameterzinvalid CA public key file <%s>zinvalid CA public key filez8cannot use CA public keys path, SSLContext not availablez invalid CA public keys path <%s>zinvalid CA public keys pathz,cannot use CA data, SSLContext not availablez?cannot use local private key password, SSLContext not availablezBcannot use local private key password, SSLContext is not availablezinstantiated Tls: <%r>)ssl_optionsssl	CERT_NONECERT_OPTIONALCERT_REQUIREDvalidater   r   r   r   r   existsca_certs_fileuse_ssl_contextca_certs_pathr   ca_certs_dataprivate_key_passwordversionprivate_key_filecertificate_filevalid_namescipherssnir   )selflocal_private_key_filelocal_certificate_filer   r%   r   r    r(   r"   r#   local_private_key_passwordr)   r*   s                O/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/ldap3/core/tls.py__init__zTls.__init__F   s    K&s'8'8#:K:KLL$DM5!E<hG+,HIIT[[7!.D5!E<mL+,HII!%D_]1K!.D?5!EUV*+eff5!E=}M+,IJJ!%D_!.D5!EIJ*+YZZ!%D%/(BD%'5!E\]*+opp(,D% 6 6&u/$67     c                    dt        | j                        z   d| j                  rdndz   d| j                  rdndz   d| j                  rdndz   d| j
                  rdndz   d| j                  rdndz   d	| j                  rdndz   d
t        | j                        z   dt        | j                        z   dt        | j                        z   dt        | j                        z   g}dj                  |      S )Nz
protocol: zclient private key: zpresent znot presentzclient certificate: zprivate key password: zCA certificates file: zCA certificates path: zCA certificates data: zverify mode: zvalid names: z	ciphers: zsni: z - )strr%   r&   r'   r$   r    r"   r#   r   r(   r)   r*   join)r+   ss     r/   __str__zTls.__str__   s    3t||,,"D4I4Ij}]"D4I4Ij}]$d6O6O
Ubc$d6H6H
m\$d6H6H
m\$d6H6H
m\c$--00c$"2"233#dll++c$((m#
 zz!}r1   c                 z   | j                   dndj                  |       }|| j                  dndj                  |       z  }|| j                  dndj                  |       z  }|| j                  dndj                  |       z  }|| j
                  dndj                  |       z  }|| j                  dndj                  |       z  }|| j                  dndj                  |       z  }|| j                  dnd	j                  |       z  }|| j                  dnd
j                  |       z  }d|dd  z   dz   }|S )N z/, local_private_key_file={0.private_key_file!r}z/, local_certificate_file={0.certificate_file!r}z, validate={0.validate!r}z, version={0.version!r}z#, ca_certs_file={0.ca_certs_file!r}z#, ca_certs_path={0.ca_certs_path!r}z#, ca_certs_data={0.ca_certs_data!r}z, ciphers={0.ciphers!r}z, sni={0.sni!r}zTls(r	   ))
r&   formatr'   r   r%   r    r"   r#   r)   r*   )r+   rs     r/   __repr__zTls.__repr__   sO   ''/B5f5m5mnr5s	4((0R6g6n6nos6tt	4==(R.I.P.PQU.VV	4<<'R-F-M-Md-SS	4%%-R3X3_3_`d3ee	4%%-R3X3_3_`d3ee	4%%-R3X3_3_`d3ee	4<<'R-F-M-Md-SS	488#R):)A)A$)GGQqrUNS r1   c                    t         r| j                  <t        t        j                  | j
                  | j                  | j                        }nt        j                  | j                        }| j
                  s| j                  s| j                  r2|j                  | j
                  | j                  | j                         n<| j                  t        j                  k7  r|j                  t        j                         | j                  r2|j                  | j                  | j                   | j"                         d|_        | j                  |_        | j(                  D ]  }|xj*                  |z  c_         | j,                  r	 |j/                  | j,                         | j2                  r*|j5                  |j6                  d|| j2                        }n|j5                  |j6                  d|      }t9        t:              r:t=        t:        d|       n'| j                  %t?        t        d      rt        j@                  | _        | j,                  re	 t        j4                  |j6                  | j                   | j                  d| j                  | j                  | j
                  || j,                  		      }| j,                  sYt        j4                  |j6                  | j                   | j                  d| j                  | j                  | j
                  |
      }t9        t:              rt=        t:        d|       |re| j                  t        jD                  k(  s| j                  t        jF                  k(  r+t%        |jH                  jJ                  | jL                         |_        y# t        j0                  $ r Y #w xY w# t        j0                  $ r  tB        $ r d| _        Y 4w xY w)z3
        Adds TLS to the connection socket
        N)purposecafilecapathcadata)keyfilepasswordF)server_sidedo_handshake_on_connectserver_hostname)rD   rE   z1socket wrapped with SSL using SSLContext for <%s>PROTOCOL_SSLv23)rB   certfilerD   	cert_reqsssl_versionca_certsrE   r)   )rB   rH   rD   rI   rJ   rK   rE   z socket wrapped with SSL for <%s>)'r!   r%   r   r   SERVER_AUTHr    r"   r#   r   
SSLContextload_verify_locationsr   r   load_default_certsr'   load_cert_chainr&   r$   check_hostnameverify_moder   optionsr)   set_ciphersSSLErrorr*   wrap_socketsocketr   r   r   hasattrrG   	TypeErrorr   r   serverhostr(   )r+   
connectiondo_handshakessl_contextoptionwrapped_sockets         r/   rV   zTls.wrap_socket   s9    ||#4W=P=P<@<N<N<@<N<N<@<N<NP
 "nnT\\:%%););t?Q?Q55d6H6H$J\J\^b^p^pq]]cmm32273F3FG$$++D,A,A4K`K`ko  lE  lE+  F).K&&*mmK#** .##v-#. ||++DLL9 xx!,!8!89J9JX]  xD  VZ  V^  V^!8  "_!,!8!89J9JX]  xD!8  "E7#GPR\]||#5F(G"22||(%(__Z5F5F=A=R=R>B>S>SAF?C}}AE>B>P>PMY=A\\&KN <<!$1B1B9=9N9N:>:O:O=B;?===A\\:>:L:LIU"W 7#G?LT]]c.?.??4==TWTeTeCe>:+<+<+A+A4CSCST*
[ || 0 ||   (#'DL(s%   
N2 A$O 2O	O	#O32O3c                    |j                   j                  ry|j                  r|j                  r"|j                  j
                  s|j                  r!t        t              rt        t        d|        yd|_
        t        t              rt        t        d|       |j                  j                  sd|_        |j                  d      }|j                  j                  sX|j                  |      }|dk7  r!t        t              rt        t        d|       yt        t              rt        t        d|       y|j                   d	   d
vr`dt#        |j                   d	         z   |_        t        t              rt        t        d|j$                  |       t'        |j$                        t        t              rt        t        d|       | j)                  |      S )NFz;can't start tls because operations are in progress for <%s>Tzstarting tls for <%s>z1.3.6.1.4.1.1466.20037)NNztls started for <%s>ztls not started for <%s>description)successzstartTLS failed - z%s for <%s>)rZ   r   tls_started_executing_deferredstrategy_outstandingsasl_in_progressr   r   r   starting_tlsr   sync_awaiting_for_async_start_tlsextendedget_responseresultr3   
last_errorr   
_start_tls)r+   r\   rn   responses       r/   	start_tlszTls.start_tls   s{     "":+I+IjNaNaNnNnr|  sN  sN5!EXZ^_"&
u.
;""''7;J4$$%=>""''!..v6H<'u%5zBu%9:F  /{B(<s:CTCTUbCc?d(d
%u%}j.C.CZP'
(=(=>>5!E1:>??:..r1   c                    	 | j                  |d       	 d|_        |j                  r|j                  xj                  dz  c_        d|_        y# t        $ r^}dt        |      z   |_        t	        t
              rt        t
        d|j                  |        t        |      |j                        d }~ww xY w# d|_        w xY w)NT)r]   zwrap socket error: z*error <%s> wrapping socket for TLS in <%s>Fr   )rV   	Exceptionr3   ro   r   r   r   r   ri   usage_usagewrapped_socketsrd   )r+   r\   es      r/   rp   zTls._start_tls  s    	,Zd; ',J#--2-!%
  	H$9CF$BJ!5!EGI^I^`jk0-a01F1FGG		H ',J#s$   A 	B7AB22B77B: :	C)F)__name__
__module____qualname____doc__r   r   r0   r6   r<   rV   rr   rp    r1   r/   r   r   ;   sT     )-(,--!#!##,0F8P HT#/Jr1   r   c                 N   | j                         }t        t              rt        t        d| |       |r|gt	        |t
              r|n|gz   }n|g}|D ]Y  }|s|dk(  r!t        t              rt        t        d        y 	 t        ||       t        t              rt        t        d|        y  t        t              rt        t        d       t        d|dt        |      d      # t        $ r2}t        t              rt        t        t        |             Y d }~d }~ww xY w)	Nzcertificate found for %s: %s*zcertificate matches * wildcardz"certificate matches host name <%s>z"hostname doesn't match certificatezcertificate z doesn't match any name in  )getpeercertr   r   r   
isinstancer
   r   r   r3   r   r   )sockserver_nameadditional_namesserver_certificate
host_names	host_namerx   s          r/   rQ   rQ   +  s   ))+7G3T;MN!]*EUWe:f&6m}l~
!]
 %	#7#G=>	%-y97#GA9M%" 5E78
Qcehisetu
vv   	%7#GSV$	%s    ,C))	D$2(DD$)r|   
exceptionsr   r   r   r   r   r8   r
   	utils.logr   r   r   r   r   r   ImportErrorr   r   utils.tls_backportr   r   r!   osr   objectr   rQ   r}   r1   r/   <module>r      s   2 R  R  ? ?S)4-3O m& m`wU  S5EAB
"#Q
RRS  )535E'(	)  -O5E+,-s-   A A5 
B A25"BBB87B8