B
    18\
                 @   s   d dl Z d dlZd dlZd dlZdd Zedkreejdk r^ej	dejd    e
d x<ejdd D ]*Zed\ZZejj	eeee qnW e
d  dS )	    Nc          	      s   dd  d fdd	}t jdrpt }t|d}|d |  z d| ||f \}}W d t	| X n d	| |f \}}|d
krt
d||f ||}|std| |f |S )Nc             S   s>   ddl m}m}m} || ||dd}| }|j }||fS )Nr   )PopenPIPESTDOUTT)stdoutstderrshell)
subprocessr   r   r   waitr   read)cmdr   r   r   procstatusoutput r   d/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Tools/scripts/get-remote-certificate.pysubproc   s
    
z)fetch_server_certificate.<locals>.subprocc       	   	      s   t d| t jt jB }|sd S t }t|d}||dd  |	  z`|pXt } d||f \}}|dkrt
d||f t|d}| }|	  t| |S t| X d S )	NsC   ^([-]+BEGIN CERTIFICATE[-]+[\r]*\n.*[\r]*^[-]+END CERTIFICATE[-]+)$wb      
zopenssl x509 -in "%s" -out "%s"r   z1OpenSSL x509 failed with status %s and output: %rrb)research	MULTILINEDOTALLtempfilemktempopenwritegroupcloseRuntimeErrorr
   osunlink)	Zcertfile_contentsoutfilemtnfpZtn2r   r   data)r   r   r   strip_to_x509_cert   s*    


z4fetch_server_certificate.<locals>.strip_to_x509_certwinwzquit
z3openssl s_client -connect "%s:%s" -showcerts < "%s"z8openssl s_client -connect "%s:%s" -showcerts < /dev/nullr   z4OpenSSL connect failed with status %s and output: %rz.Invalid response received from server at %s:%s)N)sysplatform
startswithr   r   r   r   r   r!   r"   r    
ValueError)hostportr(   Ztfiler&   r   r   Zcerttextr   )r   r   fetch_server_certificate   s.    

r1   __main__   z:Usage:  %s HOSTNAME:PORTNUMBER [, HOSTNAME:PORTNUMBER...]
r   :)r   r!   r+   r   r1   __name__lenargvr   r   exitargsplitr/   r0   r   bufferintr   r   r   r   <module>	   s   <
