v2?stdZddlZddlZddlZddlZddlmZmZmZm Z m Z ddl m Z ddl mZddlmZddlmZdd lmZmZmZmZejeZGd d ZdS) u  This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program.  If not, see . Copyright © 2019 Cloud Linux Software Inc. This software is also available under ImunifyAV commercial license, see N)DictIteratorListOptionalTuple)ScanFailedError)Core) MessageType)AiBolit) DirectAiBolitPrepareFileList ScanResult event_hookceZdZddZdZdZdZdZdZd Z d Z d Z d Z d Z deedeeeeeeffdZdS)MalwareScannerNFc|p tj|_||_||_d|_d|_tj|_ ||_d|_ d|_ tj |_ dSN)ConfigTMPDIR_tmpdir_sink_hooksaibolit_taskasyncioget_event_loop_loop _current_task_future_resultLock _is_running)selftmpdirsinkhookss Q/opt/imunify360/venv/lib/python3.11/site-packages/imav/malwarelib/scan/scanner.py__init__zMalwareScanner.__init__'sg.     +--  !""<>>ctj|_|j|j|g|Ri||_|jSr)rFuturer r create_task_startr)r#pathargskwargss r'startzMalwareScanner.start4sM%n..Z++KDK,Nt,N,N,Nv,N,NOO zr)c|jtjd|j|j|jSNzNeed to start action)r r exceptionsInvalidStateErrorrrun_until_completeresultr#s r'waitzMalwareScanner.wait9sQ   &$667MNN N %%d&9:::"))+++r)cK|jtjd|jd{V|jSr3)r rr4r5r7r8s r' async_waitzMalwareScanner.async_wait@sW   &$667MNN N!!!!!!!!"))+++r)cd|r|jdSdSr)statusrcancelr8s r'stopzMalwareScanner.stopGs6 ;;== J         r)c4|jSr)r"lockedr8s r'r=zMalwareScanner.statusKs&&(((r)cp|jrdS|j|dSr)r done set_result)r#r7s r'_try_set_resultzMalwareScanner._try_set_resultNs;   # # % %  F &&v.....r)cp|jrdS|j|dSr)r rC set_exception)r# exceptions r'_try_set_exceptionz!MalwareScanner._try_set_exceptionSs;   # # % %  F )))44444r)cK|j4d{V |j}|jrt|j|}||g|Ri|d{V}||nQ#t j$r|dYn+t$r}| |Yd}~nd}~wwxYwdddd{VdS#1d{VswxYwYdSr) r" _execute_scanrrrrErCancelledError ExceptionrI)r#r.r/r0 execute_scanr7es r'r-zMalwareScanner._startXs# - - - - - - - - -#1 ;H#9:dj#9#9,#G#GL+|DB4BBB6BBBBBBBB $$V,,,, ) + + +$$T***** + + +''******** + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -sFC =A%C %$B3 C  B3B.)C .B33C  CCcK|jr tj}|jj|d<t |t rG|j|d<|j|d<|j |d<|j |d<|j |d<|j |d<|j |d<nt||d<|j|d{VdS#t j$rt$$rt&d YdSwxYwdS) NrH return_codecommandouterrmessager.scan_idz*Exception while sending ScanFailed message)rr ScanFailed __class____name__ isinstancerrQrRrSrTrUr.rVstrprocess_messagerrLrMloggerrH)r#rOmsgs r'_send_scan_failed_messagez(MalwareScanner._send_scan_failed_messagefs4 : O O!,..#$;#7K a11 ,)*C &%&YC N!"CJ!"CJ%&YC N"#&CK%&YC NN%(VVC Nj0055555555555)    O O O  !MNNNNNN O' O OsB0B==3C43C4c|Ktdt|trtnt }||j}tj|d<||j}||g|Ri|d{V}t|tsJ| rdntj}| || r| S|j r|j jr|j j|_|S)Nz Scan started begin_time)end_time)r]inforZr[r rrtime _run_aibolitr is_detachedset_start_stopto_dict_initialrcmdr/to_dict) r#r.r/r0files_providerprepare_file_listrNr7rbs r'rKzMalwareScanner._execute_scan}sB N###(c22 GMM +N4<88#y{{|(():;; #|D:4:::6::::::::&*-----!--//@44TY[[x000      $))++ +| / 0 /"l. >>## #r)filereturnc~Kg}d}t|_|jj} ||_ ||fi|d{V}n#tj$rt $rH}||d{Vt dg}|j }Yd}~n`d}~wt$rP}||d{Vt dg}t|}Yd}~nd}~wwxYwtj|\}} ||d|_n #d|_wxYw||fS)z :param file: file with list of files, that should be scanned :param scan_options: some options for the scan :return: parse report iterator and error Nz%Scan failed with ScanFailed exceptionz#Scan failed with ordinary exception)r rscanrrrLrr_r]rHrUrMrepr itertoolsteeappend) r#rm scan_options iteratorserrorrpiteratorrOr7_s r'rezMalwareScanner._run_aibolits yy |  &!%D  !%d!;!;l!;!;;;;;;;)   " " " "44Q777777777  !HIII    44Q777777777  !FGGGQ  " h//IFA   V $ $ $!%D  D  % % % %%sDD/?D/C8>BD/ C8(AC3.D/3C88/D// D8)NNF)rY __module__ __qualname__r(r1r9r;r?r=rErIr-r_rKrr[rrrrrer)r'rr&s * * * * ,,,,,,   )))/// 555 - - -OOO.$$$0& SM& tHTN#Xc]2 3& & & & & & r)r)__doc__rrrloggingrdtypingrrrrrimav.malwarelib.scanr defence360agent.contracts.configr r"defence360agent.contracts.messagesr ai_bolit.scannerr scan_resultr rrr getLoggerrYr]rr|r)r'rs* 88888888888888000000;;;;;;::::::%%%%%%OOOOOOOOOOOO  8 $ $U U U U U U U U U U r)