}g>dZddlZddlZddlZddlZddlmZmZddlm Z ddl m Z ddl m Z ddlmZddlmZdd lmZmZmZmZdd lmZdd lmZdd lmZmZdd lm Z ddl!m"Z"m#Z#ddl$m%Z%m&Z&ddl'm(Z(m)Z)ddl*m+Z+m,Z,m-Z-ddl.m/Z/ddl0m1Z1m2Z2ddl3m4Z4ddl5m6Z6ddl7m8Z8ddl9m:Z:ej;e<Z=e&e%e=j>e=j?Z@ddddddddddddd ZAGd!d"eZBGd#d$eBZCGd%d&eBZDe-ZEeCZFe(ejGd'(ZHe+jIjJeCe+jKjJeDiZLGd)d*ZMd+ZNdS),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)ABCabstractmethod) b64encode)cached_property)iglob)fsencodePath)ClassVarDequeListOptional)uuid4) inactivity)MalwareMalwareScanIntensity)g)antivirus_modecreate_task_and_log_exceptions)HOUR rate_limit)serialize_attr unserialize)MalwareScanResourceTypeMalwareScanTypeQueuedScanState)AiBolitDetachedScan)AVDExecutionErrorAppVersionDetector) DetachedScan)MDSDetachedScan)MalwareDatabaseScanner) panel_users)periodon_dropi intensity_cpu intensity_io intensity_ramii)lowmoderatehighc eZdZUeeed<eed<dZdej dddddddddd de de de e de e fd Zed Zeed Zd Zd ZdZdZdZdZdZdZedZdS)QueuedScanBase resource_type detached_scanN scanid scan_typecreatedstarted intensity home_dirsr(r)r* initiatorstater6r7r8r<c  ||_|rt|}n$tjtjtjd}|p|d| p|d| p|d| d|_|pg}|tjkrt||vr tj }|ptj |_ ||_|ptt!j|_| t$jnt%| |_||_d|_dS)Nr'r(r)r*)r(r)r*r;)pathINTENSITY_FALLBACKrCPUIORAMargsr ON_DEMANDr USERrhexr5r6inttimer7rqueuedr<r8 scanner_task)selfr>r5r6r7r8r9r:r(r)r*r;r<_intensity_fallbacks O/opt/imunify360/venv/lib/python3.11/site-packages/imav/malwarelib/scan/queue.py__init__zQueuedScanBase.__init__]s"  !3I!>  "6!9 4 7!5!9"" +3!/2(N,>~,N*3!/2"    O 1 1 1d4jjI6M6M',I+  "2#dikk"2"2 &+mO " "9O9O   c KdSNrKs rNstartzQueuedScanBase.starts  rPcdSrRrSrTs rNtotal_resourceszQueuedScanBase.total_resourcess  rPcJ|jr|jdSdSrRrJcancelrTs rNstopzQueuedScanBase.stop2   '   $ $ & & & & & ' 'rPc|jj|j|j|j|j|j|jjd|j}|jtj kr|j j |d<|j j |d<|S)N)statusr>r5r8r7r6r2phaseprogress)r<valuer>r5r8r7r6r2rCrrunningr3r_r`)rKresults rNr^zQueuedScanBase.statusszj&Ik||!/5   i   :0 0 0"06F7O!%!3!)rKothers rN__eq__zQueuedScanBase.__eq__s&  %"5 5 ( UZ' rPcXd|jj|j|jS)Nz<{}({!r}, scanid={})>)format __class__ __qualname__r>r5rTs rN__repr__zQueuedScanBase.__repr__s*&-- N 'DK   rPc ||j|j|j|j|j|j|jj|jjdS)N)r>r5r6r7r8rCr2r<) r>r5r6r7r8rCr2rar<rTs rNto_dictzQueuedScanBase.to_dicts@Ik||I!/5Z%   rPcx|diD] \}}|||< |di|S)NrCrS)popitems)clskwargsargras rN from_dictzQueuedScanBase.from_dictsL **VR006688  JCF3KKs}}V}}rP)__name__ __module__rrr r__annotations__r r<rrDstrrGrfloatrOrrUpropertyrWr[r^rhrkrnrs__hash__ru classmethodr|rSrPrNr1r1Xsy34444 E (2#'#0!0!0!  0!  0!%0!}0!0!0!0!d  ^   ^X '''  !!!      H    [rPr1ceZdZejZdejdddddddddddddddede de e ffdZ fdZ dZd Zed ZxZS) QueuedFileScanN)r5r6r7r8r9r:r(r)r* file_patternsexclude_patternsfollow_symlinks detect_elfr;r<r6r7r8c t||||||||| | || |j| pd| pd| pd|t |j|_dS)Nr4F)rrrr)superrOrCrjrr5r3)rKr>r5r6r7r8r9r:r(r)r*rrrrr;r<rLrqs rNrOzQueuedFileScan.__init__s*  '%'   '/4-5+4u!    1==rPc|t|t|j|_dSrR)rrkrr5r3rKr<rqs rNrkzQueuedFileScan.__setstate__s5 U###0==rPcKtj|_ddlm}|tjd}|j|jf|j|j |jd|j |_ | d{V}|2td|jtj|_n?tj|_|j dpt)|dd|d<|S) Nr)MalwareScannerT)sinkhooks)scan_idr6r8zScan cancelled for %sr; undefined)rHr8imav.malwarelib.scan.scannerrrrrUr>r5r6rCrJ async_waitloggerinforstoppedr<rbgetgetattr)rKrscanner scan_datas rNrUzQueuedFileScan.start s y{{ ?????? .afD999)GM I KnL   i   ",,........   KK/ ; ; ;(0DJJ(0DJ k**;4k:: k "rPcJ|jr|jdSdSrRrYrTs rNr[zQueuedFileScan.stop(r\rPc|jjSrRr3rWrTs rNrWzQueuedFileScan.total_resources,!11rP)r}r~rrrFILEr2rrDrrGrrrOrkrUr[rrW __classcell__rqs@rNrrs+0M (2#'%)>)>)>  )>  )>%)>)>)>)>)>)>V>>>>> :'''22X22222rPrceZdZejZdejddddddddf dede edede de e de ef fd Z fd Z ed e fd Zd Zdd ZxZS) QueuedDbScanNr>r5r6r7r8r9c t||||||||| | |  t|j|_dS)N) r>r5r6r7r8r9r:r(r)r*r<)rrOr!r5r3)rKr>r5r6r7r8r9r:r(r)r*r<rLrqs rNrOzQueuedDbScan.__init__4sa '%'  -T[99rPc|t|t|j|_dSrR)rrkr!r5r3rs rNrkzQueuedDbScan.__setstate__Ss3 U###,T[99rPreturnc|jjSrRrrTs rNrWzQueuedDbScan.total_resourcesWrrPc K|jdr|jdn|j}dt|D} tjd5t|d{Vdddn #1swxYwYt|j|jgfi|j |j |j d |jd{VdS#t$rZ}|jt$j|j|j |j|j|j|jd{VYd}~dSd}~wwxYw)Nz/**cFg|]}tt|SrS)rr).0ds rN z&QueuedDbScan._scan..cs&LLLa9Xa[[11LLLrPAVD_scan)r6r)r scan_pathr6 scan_startedcmdouterr)r>endswithrstriprrtracktaskrrUr"rCr6r5scanr8rr3handle_aborted_processrrcommandrr)rK apps_pathunglobbed_pathsexcs rN_scanzQueuedDbScan._scan[s- &*Y%7%7%=%= LDI  S ! ! !49 ML5;K;KLLL !!&&z22 B B(**00AAAAAAAAA B B B B B B B B B B B B B B B)  ).  d4<   ! ! ! ! ! ! ! ! !!   $;;V).!\KGG<              s=D7(B+ D+B//D2B/3D E' AE""E'cKtj|_ttj|j|_dSrR)rHr8rasyncioget_event_looprrJrTs rNrUzQueuedDbScan.startzs;y{{ :  " $ $dj  rPrN)r}r~rrrDBr2rrDrrrGrrOrkrrWrrUrrs@rNrr1s+.M !%(2#'#'::: :  :  :%:C=::::::>:::::2222X2!!!>        rPr _scans_info)r>attrceZdZedZedeefdZedZ e dde fdZ e dd Z d Zd Zdeefd Zdd ZdZddZedZdZdZdZdS) ScanQueuecHtjd|jDS)Nc3>K|]}|VdSrR)ru)ritems rN z(ScanQueue._scans_info..s* H HD H H H H H HrP) collectionsdeque_scansrTs rNrzScanQueue._scans_infos$ H HDK H H HHHHrPrcDtj}ttjtjD]f} t |d}|||?#t$r}td||Yd}~_d}~wwxYw|S)N)r>fallbackr2z%Can't get scan class for %s due to %s) rrrConfig SCANS_PATHSCAN_TYPE_CLASSESappendr| Exceptionthrottled_log_error)rKscans scan_inforyrs rNrzScanQueue._scanss!##$"[->    I ' /(BC S]]9556666   #;Y   s;A88 BBBc,|dSNr)peekrTs rN current_scanzScanQueue.current_scansyy||rPFr2c(Kdtd{VD|tjkrfd|D}nPtjr"|tjkrt |}n"td||rc|j r\|j }|j t||j |dS|j |dS)Nc8g|]}t|dS)homer )rusers rNrz!ScanQueue.put..s$HHHDT$v,''HHHrPc.g|]}t|fdiSr:)rrr>r: scan_argss rNrz!ScanQueue.put..s>222tFFyFIFF222rPzUnknown resource_type: {})r#rrrdisabledrdb_scans ValueErrorrprpopleft extendleftreversed appendleftextend)rKpathsr2 prioritizer scans_to_addrbr:s ` @rNputz ScanQueue.puts9IH+--4G4G4G4G4G4GHHH 38 8 822222!222LL  # P!8!;;;#E9i@@LL8?? NNOO O  -$+ -k))++G K " "8L#9#9 : : : K " "7 + + + + + K  | , , , , ,rPNct|dkrdS|p|j}|j||t dt|dS)NrzScans pending: %d)lenrrremover[rrrKrs rNrzScanQueue.removesg t99>> F(t( 4     'T33333rPc\d|cxkrt|krndS|j|SdS)Nrr)rKprioritys rNrzScanQueue.peeksB  $ $ $ $3t99 $ $ $ $ $ $;x( ( % $rPc*fd|jDS)Nc&g|] }|jv |SrS)r5)rrscan_idss rNrz&ScanQueue.find_all..s%HHH x0G0G0G0G0GrPr)rKrs `rNfind_allzScanQueue.find_allsHHHHHHHHrPc ~|jD]3tfd|DrcS4dS)Nc>g|]\}}t||kSrS)r)rkvrs rNrz"ScanQueue.find..s,EEEdaGD!$$)EEErP)rallrx)rKrzrs @rNfindzScanQueue.findsTK  DEEEEfllnnEEEFF   trPc:|jD]}|j|vr||_dSrR)rr5r<)rKrr^rs rNrjzScanQueue.updates2K $ $D{h&&#  $ $rPc#PK|jD]}|j|vr||jjfVdSrR)rr>r<ra)rKrrs rNget_scans_from_pathszScanQueue.get_scans_from_pathssEJ - -DyE!!DJ,,,,, - -rPcP|p|j}tjd|DS)Nc 3K|]D}|j|j|jj|j|j|jd|jd|jjd fVEdS)Nr) r> scan_statusr6r8r7errorrWtotal_maliciousr2) r5r>r<rar6r8r7rWr2)rrs rNrz+ScanQueue.scan_summaries..sz' '   I#':#3!%#|#|!'+';'(%)%7%=   ' ' ' ' ' ' rP)rr OrderedDict)rKrs rNscan_summarieszScanQueue.scan_summariessA$&' ' ' ' '    rPc*t|jSrR)listrrTs rNrzScanQueue.scanssDK   rPc2t|jdkSrrrTs rN__bool__zScanQueue.__bool__s4;!##rPc||jvSrRrrs rN __contains__zScanQueue.__contains__st{""rPc*t|jSrRrrTs rN__len__zScanQueue.__len__s4;rP)FrRr)r}r~rrrrrr r1rrserialize_scansrrrrrrrrjr rrrrrrSrPrNrrs IIXIn-_ X  --/---_-:444_4)))III 8 $$$$ ---     (!!X!$$$###     rPrc$fd|DS)Nc.g|]}t|fdiSr)rrs rNrzdb_scans..s;   AE T<r7s* ########%%%%%%222222222222******544444:9999999KKKKKKKK 766666======CCCCCC777777  8 $ $EjjfnEEE L       &|||||S|||~W2W2W2W2W2^W2W2W2tM M M M M >M M M b    .f&7mLLL &$l x x x x x x x x vrP