o
    vf                     @   s<   d Z ddlZddlZdZdd Zdd Zdd	 Zd
d ZdS )z:Python sys.excepthook hook to generate apport crash dumps.    Nz/etc/default/apportc                  C   sd   ddl } z#tt}| }W d   n1 sw   Y  | d|| jdu W S  ty1   Y dS w )z4Return whether Apport should generate crash reports.r   Nz^\s*enabled\s*=\s*0\s*$T)reopenCONFIGreadsearchMIOError)r   fconf r   4/usr/lib/python3/dist-packages/apport_python_hook.pyenabled   s   

r   c                 C   sx  z.| t fv rW trt| || dS dS z	ddl}|j W n ty4   Y W tr2t| || dS dS w t sFW trDt| || dS dS z
ddlm} | W n ty_   ddl	m} Y nw ddl
}ddl}ddlm}m} ztjtjt tjd }	W n/ tttfy   ztdt  }	W n ty   Y Y W trt| || dS dS w Y nw t|	tjrtj|	sW trt| || dS dS ||	sW trt| || dS dS ddl}
|
j  }t!|dr|" }|dkrW trt| || dS dS |dkrt#|| n||d	< | tkr'|j$dur't%|j$|d	< | }|j&| |||d
 |' ( |d< |j)ddgd |*  |	|d< d|v r\t%t+t,|	j-|d< z	dtj |d< W n
 tyo   Y nw |. rW trt| || dS dS |/dd|	}t0 }dtj12dd||f }d}tj3|r|
j45|rt6|d}||d }W d   n	1 sw   Y  |dkrW trt| || dS dS t7| nW trt| || dS dS |rt%||d< t8t6|tj9tj:B tj;B dd}|<| W d   n	1 sw   Y  W tr.t| || dS dS tr;t| || w w )z1Catch an uncaught exception and make a traceback.Nr   )StringIO)likely_packagedget_recent_crashesz/proc/%i/exeget_dbus_namez"org.freedesktop.DBus.Error.NoReplyz)org.freedesktop.DBus.Error.ServiceUnknown_PythonExceptionQualifier)file	Traceback
PYTHONPATH
PYTHONHOME)extraenvExecutablePathExecutableTimestampz%r
PythonArgs/_z%s/%s.%i.crashAPPORT_REPORT_DIRz
/var/crashrb   CrashCounteri  wb)=KeyboardInterruptsys__excepthook__apt_pkgDATEImportErrorr   	cStringIOr   ior   	tracebackapport.fileutilsr   r   ospathrealpathjoingetcwdargv	TypeErrorAttributeError
IndexErrorreadlinkgetpidOSErroraccessX_OKisfileapport.reportreportReporthasattrr   dbus_service_unknown_analysiserrnostrprint_exceptiongetvaluestripadd_proc_infoadd_user_infointstatst_mtimecheck_ignoredsubgetuidenvirongetexists	fileutilsseen_reportr   unlinkfdopenO_WRONLYO_CREATO_EXCLwrite)exc_typeexc_objexc_tbr%   r   r   r*   r   r   binaryapportprnametb_filemangled_programuserpr_filenamecrash_counterr	   r   r   r   apport_excepthook"   s   
n
ea$N	IE

9





rd   c              
   C   s  ddl m } dd l}dd l}zddlm}m}m} |||f W n ty2   ddlm}m}m} Y nw |d| 	 }|sLt
jrLt
jd| 	   d S |d}	g }
|dD ]M}|d d}|j|d	d
 z%|dd|	kr|dd}|jdd|g|jddk}|
|||f W qW ||fy   t
jrt
jd|| 	 f  Y qWw |
sd|	 |d< d S d|d< |
D ]\}}}|d  d|||rdndf 7  < qd S )Nr   )glob)ConfigParserNoSectionErrorNoOptionErrorz/name\s+(\S+)\s+was not provided by any .servicez/Error: cannot parse D-BUS name from exception: r   z%/usr/share/dbus-1/*services/*.service)interpolationzUTF-8)encodingzD-BUS ServiceNameExecpidofz-sx)stdoutz"Invalid D-BUS .service file %s: %szno service file providing DbusErrorAnalysiszprovided byz %s (%s is %srunning) znot )re   
subprocessr   configparserrf   rg   rh   r'   r   get_dbus_messager#   stderrrW   groupr   rN   callPIPEappend)rY   r<   re   rq   r   rf   rg   rh   m	dbus_nameservicesr	   cpexerunningservicer   r   r   r?      sV   


r?   c                   C   s
   t t_dS )zInstall the python apport hook.N)rd   r#   
excepthookr   r   r   r   install   s   
r   )__doc__r,   r#   r   r   rd   r?   r   r   r   r   r   <module>   s     .