3 n`h@sddlmZdddddddgZdd lZdd lmZmZdd lZdd lZdd l Z dd l Z dd l Z dd l Tdd l Z dd lmZdd lmZdd lTdd lTdd lTdd lTdd lTdd lTdd lTddlmZddZGdddeZGdddeZGdddeZGdddee j Z!GdddeZ"GdddeZ#GdddeZ$Gddde%e&e'ejZ(ej)e(GdddejZ*ej)e*d S))print_function AnalyzeThreadAnalyzePluginReportReceiverTestPluginReportReceiverSETroubleshootDatabaseSETroubleshootDatabaseLocalLogfileAnalyzerN)GObjectGLib)*) cmp_to_key) get_config)validate_database_doccCs||k||kS)N)xyrr/usr/lib/python3.6/analyze.py4src@s<eZdZddZddZddZddZd d Zd d Zd S)PluginStatisticscCs0|j|_d|_d|_d|_d|_d|_d|_dS)N) analysis_idnameanalyze_start_timeanalyze_end_timeanalyze_elapsed_timereport_start_timereport_end_timereport_elapsed_time)selfpluginrrr__init__=szPluginStatistics.__init__cCsRt|j}|jdkr"d|j|fSt|j|j}t|j}d|j|||fSdS)Nz%s: %s elapsedz5%s: %s elapsed, %s analyze elapsed, %s report elapsed)format_elapsed_timerrrrr)rrZtotal_elapsed_timerrrr__str__Fs   zPluginStatistics.__str__cCstj|_dS)N)timer)rrrr analyze_startRszPluginStatistics.analyze_startcCstj|_|j|j|_dS)N)r#rrr)rrrr analyze_endUs zPluginStatistics.analyze_endcCstj|_dS)N)r#r)rrrr report_startYszPluginStatistics.report_startcCstj|_|j|j|_dS)N)r#rrr)rrrr report_end\s zPluginStatistics.report_endN) __name__ __module__ __qualname__r r"r$r%r&r'rrrrr;s   rc@s<eZdZddZddZddZddZd d Zd d Zd S)AnalyzeStatisticscCs(||_d|_g|_d|_d|_d|_dS)N) num_plugins cur_plugincalled_plugins start_timeend_time elapsed_time)rr,rrrr es zAnalyzeStatistics.__init__cCsPd}d}t|j}|jdk r8t|j}|r8t|j|}d||j|||jfS)NzB%d/%d plugins in %s elapsed, avg plugin %s elapsed, plugins=[ %s ])lenr.r1r!r,called_plugins_to_string)rr1Zavg_plugin_timeZn_calledrrrr"ms    zAnalyzeStatistics.__str__cCsdjdd|jDS)N cSsg|] }t|qSr)str).0rrrr {sz>AnalyzeStatistics.called_plugins_to_string..)joinr.)rrrrr3zsz*AnalyzeStatistics.called_plugins_to_stringcCstj|_dS)N)r#r/)rrrrstart}szAnalyzeStatistics.startcCstj|_|j|j|_dS)N)r#r0r/r1)rrrrends zAnalyzeStatistics.endcCs&t||_|jj|j|jjdS)N)rr-r.appendr$)rrrrr new_plugins zAnalyzeStatistics.new_pluginN) r(r)r*r r"r3r9r:r<rrrrr+cs  r+c@s.eZdZddZddZddZd dd Zd S) rcCst|_tdt|jdS)NzNumber of Plugins = %d)Z load_pluginsplugins log_debugr2)rrrrr szAnalyze.__init__cCst}|r|j|S)N)Z SEEnvironmentupdate)rquery_environment environmentrrrget_environmentszAnalyze.get_environmentcCs$t|j|j|j|j|j|jd}|S)N)hostaccessscontexttcontexttclasstpath)ZSEFaultSignaturerCrDrErFrGrH)ravcrAsigrrr get_signatures zAnalyze.get_signatureTcCstd||j|j|j}ddlm}|jjdk rD|jjjt |j|j |j |j |j |j|j|j|j|j|j|j||||jjt|jj|jdd}x |jD]}y|j|}|dk rD|jdkrtddS|jdk o|jdkr|jdks|jd kr|j|_t|tr8x(|D]} |jj| q Wn |jj|Wqtk r} zVt | t!j"d t#j#t#j$d |j%t!j&\} } } td j't(j)| |jj*|WYdd} ~ XqXqW|j+|dS) Nzanalyze_avc() avc=%sr)TemplateZyellow) audit_eventsourcespathrHZ src_rpm_listZ tgt_rpm_listrErFrGportrCrJrA line_numberslast_seen_datelocal_idlevelZwhitez!plugin level white, not reportingZredZgreen)filezPlugin Exception %s r4),r>r?rBr@stringrLrMrQsortZSEFaultSignatureInforNrOrHZsrc_rpmsZtgt_rpmsrErFrGrPrCrK TimeStampZ timestamp generate_idr=analyzerT isinstancelistZ plugin_listr; ExceptionprintsysstderrsyslogLOG_ERRrexc_infor8 traceback format_tbremovereport_problem)rrIreport_receiverr@rArLsiginforZreportreZv1Zv2Zv3rrr analyze_avcsZ            "zAnalyze.analyze_avcN)T)r(r)r*r rBrKrlrrrrrs c@seZdZdddZddZdS)r cCs&tjj|tj|||_||_dS)N) threadingThreadr rqueuetimeout)rrprqrrrr s  zAnalyzeThread.__init__cCsxy6|jj\}}tjtjdtjd|j||Wnftk rl}ztjtjd|WYdd}~Xn4t k r}ztjtjd|WYdd}~XnXtjtjdj |j tj|j qWdS)Nz)AnalyzeThread.run(): Cancel pending alarmrz!Exception during AVC analysis: %sz,AnalyzeThread.run(): Set alarm timeout to {}) rpgetraZ LOG_DEBUGsignalalarmrlr]rb ValueErrorformatrq)rrIrhrkrrrruns "$zAnalyzeThread.runN)rm)r(r)r*r rwrrrrrs c@s$eZdZddZddZddZdS)rcCs ||_dS)N)database)rrxrrrr szPluginReportReceiver.__init__cCsy0|jj|j}|j||jj|tdWnLtk r|}z0|jtkrjtd|j |_ |jj |}nWYdd}~XnX|S)Nzsignature found in databaseznot in database yet) rxlookup_signaturerJZ update_mergemodify_siginfor> ProgramErrorerrnoERR_NO_SIGNATURE_MATCHrRfirst_seen_date add_siginfo)rriZdatabase_siginforkrrrrgs    z#PluginReportReceiver.report_problemcCs |jjjS)N)rxsigsZgenerate_local_id)rrrrrYsz PluginReportReceiver.generate_idN)r(r)r*r rgrYrrrrrscs$eZdZfddZddZZS)rcstt|j|dS)N)superrr )rrx) __class__rrr sz!TestPluginReportReceiver.__init__cCstd|jjdS)NzAnalysis Result: %s)r^rJr)rrirrrrgsz'TestPluginReportReceiver.report_problem)r(r)r*r rg __classcell__rr)rrrs c@seZdZd2ddZddZddZdd Zd d Zd3d dZd4ddZ ddZ ddZ ddZ ddZ ddZddZddZdd Zd!d"Zd5d#d$Zd%d&Zd'd(Zd)d*Zd6d,d-Zd.d/Zd0d1ZdS)7rNcCs||_d|_t|||j|_tj|_d|_d|_d|_ d|_ d|_ t ddt |_d|_t dd}|dk r|j}|rt||_td|jj|jj|jjf|jdS) NFrrx max_alerts max_alert_agezr friendly_nameload)rrrrrrrrr $s$   zSETroubleshootDatabase.__init__cCs|jp |jsdS|jjjtddd|jrt}||j8}d}x$|jjD]}|j|kr^P|d7}qNW|dkrtd|j|j ftd|jjdjj |jj|djj ftd |jj|jj |jjdjj fd d |jjd|D}x|D]}|j |d d qW|jrt |jj|j}|dkrdd |jjd|D}td|t ||fx|D]}|j |d d qxWdS)NFcSst|j|jS)N)cmprR)abrrrr?sz.SETroubleshootDatabase.prune..)keyrz5prune by age: max_alert_age=%s min_time_to_survive=%szprune by age: pruning [%s - %s]zprune by age: keeping [%s - %s]cSsg|] }|jqSr)rJ)r6rirrrr7Osz0SETroubleshootDatabase.prune..T)prunecSsg|] }|jqSr)rJ)r6rirrrr7Vsz*prune first %d alerts, len(sigs=%d sigs=%s) rrrsignature_listrWr rXrRr>rvdelete_signaturer2)rZmin_time_to_surviveZkeeprirrJrrrr:s2     0,   zSETroubleshootDatabase.prunecCs ||_dS)N)r)rrrrr set_notify[sz!SETroubleshootDatabase.set_notifycCs6x0|jjD]$}|j|jkr |j}|j|_||_q WdS)N)rrrRr~)rriZtmprrrvalidate^s  zSETroubleshootDatabase.validatecCsht|_|jdkrdStjj|jrTtj|j}|tdkrT|jj|jdt rTd|_ |j |j dS)NrrT) SEFaultSignatureSetrrospathexistsstatST_SIZEZ read_xml_filerrrr)r stat_inforrrrfs   zSETroubleshootDatabase.loadFcCsj|jdkrdStd|j|jf|s.|j|jjd|jd|_d|_|jdk rftj |jd|_dS)Nz'writing database (%s) modified_count=%srTr) rr>rrrZ write_xmlrrr Z source_remove)rrrrrsaveus   zSETroubleshootDatabase.savecCs`|jd7_|jdkrdS|j|jks0|j r<|j|n |jdkr\tj|jd|j |_dS)Nri) rrrrrrr Z timeout_addrauto_save_callback)rrrrr mark_modifieds    z$SETroubleshootDatabase.mark_modifiedcCs td|j|jf|jdS)Nz)auto_save database (%s) modified_count=%sF)r>rrr)rrrrrsz)SETroubleshootDatabase.auto_save_callbackcCs:|jdkrdStjj|jr6td|jtj|jdS)Nzdeleting database (%s))rrrrr>rf)rrrrrfs  zSETroubleshootDatabase.removecCs|jjdS)N)racquire)rrrrrszSETroubleshootDatabase.acquirecCs|jjdS)N)rrelease)rrrrrszSETroubleshootDatabase.releasecCsd}|jj|}tdt|djdd|Dft|dkrHttt|dkrxtdt|djdd|Df|dj}|S)Nz1lookup_signature: found %d matches with scores %s,cSsg|]}d|jqS)z%.2f)score)r6rrrrr7sz;SETroubleshootDatabase.lookup_signature..rrcSsg|]}d|jqS)z%.2f)r)r6rrrrr7s)rZmatch_signaturesr>r2r8r{r}ri)rrJriZmatchesrrrrys $  $ z'SETroubleshootDatabase.lookup_signaturecCs2|jj|}|dkr.td|ttd||S)Nzlookup_local_id: %s not foundzid (%s) not found)rlookup_local_idr>r{ZERR_SIGNATURE_ID_NOT_FOUND)rrSrirrrrs   z&SETroubleshootDatabase.lookup_local_idcCs.|jj|}|jr"|jjd|j|j|S)Nadd)rrrsignatures_updatedrSr)rrirrrrs  z"SETroubleshootDatabase.add_siginfocCs|jS)N)r)rrrrget_propertiessz%SETroubleshootDatabase.get_propertiescCs8td||dkr|jSt}|j|}|j||S)Nzquery_alerts: criteria=%sr )r>rrrr)rZcriteriarrirrr query_alertss   z#SETroubleshootDatabase.query_alertscCstd|y|j|}Wn:tk rT}z|jtkrBtddSWYdd}~XnX|jj||jrx|jjd|j |j |dS)Nzdelete_signature: sig=%szSignature not found!delete) r>ryr{r|r}rZremove_siginforrrSr)rrJrrirkrrrrs   z'SETroubleshootDatabase.delete_signaturecCs"|jr|jjd|j|jdS)NZmodify)rrrSr)rrirrrrzsz%SETroubleshootDatabase.modify_siginfocCshtd||fy|j|}Wn:tk rX}z|jtkrFtddSWYdd}~XnX|j|}|S)Nz)evaluate_alert_filter: username=%s sig=%szSignature not found!ignore)r>ryr{r|r}Zevaluate_filter_for_user)rrJusernamerirkactionrrrevaluate_alert_filters  z,SETroubleshootDatabase.evaluate_alert_filtercCstd||||fy|j|}Wn:tk r\}z|jtkrJtddSWYdd}~XnX|j|}|j|||j|dS)Nz2set_user_data: username=%s item=%s data=%s sig= %szSignature not found!)r>ryr{r|r}Z get_user_dataZ update_itemrz)rrJritemdatarirkZ user_datarrr set_user_datas   z$SETroubleshootDatabase.set_user_datacCsxtd|||fy|j|}Wn:tk rZ}z|jtkrHtddSWYdd}~XnX|j||||j|dS)Nz.set_filter: username=%s filter_type=%s sig= %szSignature not found!)r>ryr{r|r}Zupdate_user_filterrz)rrJrZ filter_typerrirkrrr set_filters z!SETroubleshootDatabase.set_filtercCs|jjj||_|jdS)N)rusersadd_useruserr)rrrrrrszSETroubleshootDatabase.add_usercCs|jjj|S)N)rrget_user)rrrrrrszSETroubleshootDatabase.get_user)N)F)F)F)r)r(r)r*r rrrrrrrrfrrryrrrrrrzrrrrrrrrrr"s. !     c@s^eZdZejjdejejffejjdejejejffdZ ddZ ddZ ddZ d d Z dS) rN)rz async-errorcCs,tjj|tj|||_|jj|dS)N)r r RpcManagerxr)rrxrrrr %s  z$SETroubleshootDatabaseLocal.__init__cCs|jj|dS)N)rxr)rrrrrr+sz&SETroubleshootDatabaseLocal.set_notifycGstd|jj|jdjdd|D|f|j|}t|j|jd}|dkrdtt d|j|jjfy(|||_ d|_ |j dk r|j g|_ Wn6tk r}z|j |j g|_ d|_ WYdd}~XnX|j dk rtj|j|dS)Nz%s emit %s(%s) id=%srcSsg|] }t|qSr)r5)r6argrrrr7/sz8SETroubleshootDatabaseLocal.emit_rpc..z'method %s not found in base class of %sZ method_returnZ error_return)r>rr(methodr8Zasync_rpc_cachegetattrrxr{ZERR_METHOD_NOT_FOUNDZ return_argsZ return_typer|strerrorr idle_addZprocess_async_return)rZrpc_idtypeZrpc_defargsZ async_rpcfuncrkrrremit_rpc.s *    z$SETroubleshootDatabaseLocal.emit_rpccCs"td||f|jd||dS)Nz4signatures_updated() database local: type=%s item=%sr)r>emit)rrrrrrrAsz.SETroubleshootDatabaseLocal.signatures_updated)r(r)r*r SignalFlagsRUN_LAST TYPE_PYOBJECTZ TYPE_STRINGZTYPE_INT __gsignals__r rrrrrrrrs c@sneZdZejjdejffejjdejffdZdddZ dddZ ddZ d d Z d d Z d dZddZdS)r N)progressz state-changedcCsftjj|td|jj|f||_d|_d|_d|_d|_ d|_ d|_ d|_ d|_ d|_d|_dS)Nz%s.__init__(%s))r r r>rr( logfile_pathrUfileno read_size record_readerrecord_receiveranalyzerrh idle_proc_idr|r)rrrrrr Rs zLogfileAnalyzer.__init__cCsT|dk r||_td|jj|jfy2tj|j}|t|_t|j|_ |j j |_ WnRt k r}z6t j t j d|jj|jf|j|_|j|_|WYdd}~XnXd|_d|_d|_d|_d|_|jd|jtjj|j}dtjj|d|_td||jd|_ttj|_t|_ t!|_"t#d d t$sDt%|j|_&n t'|j|_&d S) Nz %s.open(%s)z %s.open(): %srgFrzfile: %s)rZtestrZT)(rr>rr(rrr file_sizeopenrUrEnvironmentErrorrarbrr| n_bytes_readZ line_count record_countr cancelledrrbasenamesplitextrrrxZAuditRecordReaderZ TEXT_FORMATrZAuditRecordReceiverrrrrboolrrhr)rrrrkZlogfile_basenamerrrrfs:     zLogfileAnalyzer.opencs6td|jj|jf|jtjfdd|_dS)Nz %s.run(%s)cstS)N)nextr)task_generatorrrrsz%LogfileAnalyzer.run..T)r>rr(rUtaskr rr)rr)rrrwszLogfileAnalyzer.runcCs|jdk r&tj|j|j}d|_d|_|j|jkrdddl}d|j|j|jf}t ||j |_||_ |j dk rx|j j D]}|j|qzW|js|jdddS)NrzFfailed to read complete file, %d bytes read out of total %d bytes (%s)rg?)rUrreadrrrrr|rr>ZEIOrrcloseavc_event_handlerrr)rnew_dataZErrnorrMrrrrs    zLogfileAnalyzer.closeccsx|jddxR|jr`y8tj|j|jjd}|dkrNtd|j|jWn|t k r}z0|j |_ |j |_ |j|jdddVWYdd}~Xn2t k r}zt d|tjd WYdd}~XnX|jt|7_|jd krt|jt|j|_|jd |jxF|jj|D]6\}}}}}|j|||||d V|jrdVqWd VqW|jdddVdS) Nz state-changedZrunningzutf-8rz EOF on %sZstoppedFr4)rUrrT)rrrrrdecoder>rrrr|rrur^r_r`rr2rfloatrrfeednew_audit_record_handlerr)rrrk record_typeevent_id body_textfields line_numberrrrrs6    "    zLogfileAnalyzer.taskcCsHtd||jrD|j rD|jdkrDt|}|jj||jddS)Nz"avc_event_handler() audit_event=%srF)r>Zis_avcZ is_grantedZ num_recordsZAVCrrlrh)rrMrIrrrrs z!LogfileAnalyzer.avc_event_handlerc Cstd|||f|jd7_t|||||}xT|jj|D]D}y|j|Wq>tk r}zt|tj dWYdd}~Xq>Xq>WdS)z"called to enter a new audit recordzBnew_audit_record_handler() record_type=%s event_id=%s body_text=%sr)rUN) r>rZ AuditRecordrrrrur^r_r`) rrrrrrZ audit_recordrMrkrrrrsz(LogfileAnalyzer.new_audit_record_handler)N)N)r(r)r*r rrZ TYPE_FLOATrrr rrwrrrrrrrrr Js  $)+Z __future__r__all__raZ gi.repositoryr r rrsr#rnrdrr_ functoolsr Zsetroubleshoot.configrZsetroubleshoot.avc_auditZsetroubleshoot.errcodeZsetroubleshoot.rpcZsetroubleshoot.rpc_interfacesZsetroubleshoot.signatureZsetroubleshoot.utilZsetroubleshoot.audit_dataZsetroubleshoot.xml_serializerrobjectrr+rrorrrrrZSETroubleshootDatabaseInterfaceZ%SETroubleshootDatabaseNotifyInterfacerZ type_registerr rrrrsV    ()W x )