o vf@s<dZddlZddlZdZddZddZdd Zd d ZdS) z:Python sys.excepthook hook to generate apport crash dumps.Nz/etc/default/apportcCsdddl}z#tt }|}Wdn1swY|d||jduWSty1YdSw)z4Return whether Apport should generate crash reports.rNz^\s*enabled\s*=\s*0\s*$T)reopenCONFIGreadsearchMIOError)rfconfr 4/usr/lib/python3/dist-packages/apport_python_hook.pyenableds   r c Csxz.|tfvrWtrt|||dSdSz ddl}|jWnty4YWtr2t|||dSdSwtsFWtrDt|||dSdSz ddlm}|Wnty_ddl m}Ynwddl }ddl }ddl m }m}ztjtjttjd} Wn/tttfyz tdt} WntyYYWtrt|||dSdSwYnwt| tjrtj| sWtrt|||dSdS|| sWtrt|||dSdSddl} | j } t!|dr|"} | dkrWtrt|||dSdS| dkrt#|| n| | d <|tkr'|j$dur't%|j$| d <|} |j&|||| d | '(| d <| j)d d gd| *| | d<d| vr\t%t+t,| j-| d<z dtj| d<Wn tyoYnw| .rWtrt|||dSdS|/dd| }t0}dtj12dd||f}d}tj3|r| j45|rt6|d}||d}Wdn 1swY|dkrWtrt|||dSdSt7|nWtrt|||dSdS|rt%|| d<t8t6|tj9tj:Btj;Bdd }| <|Wdn 1swYWtr.t|||dSdStr;t|||ww)z1Catch an uncaught exception and make a traceback.Nr)StringIO)likely_packagedget_recent_crashesz /proc/%i/exe get_dbus_namez"org.freedesktop.DBus.Error.NoReplyz)org.freedesktop.DBus.Error.ServiceUnknown_PythonExceptionQualifier)file Traceback PYTHONPATH PYTHONHOME)extraenvExecutablePathExecutableTimestampz%r PythonArgs/_z%s/%s.%i.crashAPPORT_REPORT_DIRz /var/crashrb CrashCounteriwb)=KeyboardInterruptsys__excepthook__apt_pkgDATE ImportErrorr cStringIOrior tracebackapport.fileutilsrrospathrealpathjoingetcwdargv TypeErrorAttributeError IndexErrorreadlinkgetpidOSErroraccessX_OKisfile apport.reportreportReporthasattrrdbus_service_unknown_analysiserrnostrprint_exceptiongetvaluestrip add_proc_info add_user_infointstatst_mtime check_ignoredsubgetuidenvirongetexists fileutils seen_reportrunlinkfdopenO_WRONLYO_CREATO_EXCLwrite)exc_typeexc_objexc_tbr%rrr*rrbinaryapportprnametb_filemangled_programuser pr_filename crash_counterr r r r apport_excepthook"s n  ea  $ N IE   9           rdc Csddlm}ddl}ddl}zddlm}m}m}|||fWnty2ddlm}m}m}Ynw|d| }|sLt j rLt j d| dS| d} g} |dD]M} |dd} | j| d d z%| d d | kr| d d } |jdd| g|jddk}| | | |fWqW||fyt j rt j d| | fYqWw| sd| |d<dSd|d<| D]\}} }|dd|| |rdndf7<qdS)Nr)glob) ConfigParserNoSectionError NoOptionErrorz/name\s+(\S+)\s+was not provided by any .servicez/Error: cannot parse D-BUS name from exception: rz%/usr/share/dbus-1/*services/*.service) interpolationzUTF-8)encodingz D-BUS ServiceNameExecpidofz-sx)stdoutz"Invalid D-BUS .service file %s: %szno service file providing DbusErrorAnalysisz provided byz %s (%s is %srunning)znot )re subprocessr configparserrfrgrhr'rget_dbus_messager#stderrrWgrouprrNcallPIPEappend)rYr<rerqrrfrgrhm dbus_nameservicesr cpexerunningservicer r r r?sV        r?cCs tt_dS)zInstall the python apport hook.N)rdr# excepthookr r r r installs r)__doc__r,r#rr rdr?rr r r r s  .