hQ?dZddlZddlZddlZddlZddlmZmZddlm Z ddl m Z ddl m Z ddlmZddlmZmZmZmZdd lmZdd lmZdd lmZmZdd lmZdd 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)cached_property)iglobfsencodePath)ClassVarDequeListOptional)uuid4) inactivity)MalwareMalwareScanIntensity)g) HostingPanel)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+ initiatorstater7r8r9r=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 USERrhexr6r7inttimer8rqueuedr=r9 scanner_task)selfr?r6r7r8r9r:r;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 KdSNrLs rOstartzQueuedScanBase.starts  rQcdSrSrTrUs rOtotal_resourceszQueuedScanBase.total_resourcess  rQcJ|jr|jdSdSrSrKcancelrUs rOstopzQueuedScanBase.stop2   '   $ $ & & & & & ' 'rQc|jj|j|j|j|j|j|jjd|j}|jtj kr|j j |d<|j j |d<|S)N)statusr?r6r9r8r7r3phaseprogress)r=valuer?r6r9r8r7r3rDrrunningr4r`ra)rLresults rOr_zQueuedScanBase.statusszj&Ik||!/5   i   :0 0 0"06F7O!%!3!)format __class__ __qualname__r?r6rUs rO__repr__zQueuedScanBase.__repr__s*&-- N 'DK   rQc ||j|j|j|j|j|j|jj|jjdS)N)r?r6r7r8r9rDr3r=) r?r6r7r8r9rDr3rbr=rUs rOto_dictzQueuedScanBase.to_dicts@Ik||I!/5Z%   rQcx|diD] \}}|||< |di|S)NrDrT)popitems)clskwargsargrbs rO from_dictzQueuedScanBase.from_dictsL **VR006688  JCF3KKs}}V}}rQ)__name__ __module__rsr r__annotations__r!r=rrEstrrHrfloatrPrrVpropertyrXr\r_rirlrort__hash__rv classmethodr}rTrQrOr2r2Xsy34444 E (2#'#0!0!0!  0!  0!%0!}0!0!0!0!d  ^   ^X '''  !!!      H    [rQr2ceZdZejZdejdddddddddddddddede de e ffdZ fdZ dZd Zed ZxZS) QueuedFileScanN)r6r7r8r9r:r;r)r*r+ file_patternsexclude_patternsfollow_symlinks detect_elfr<r=r7r8r9c t||||||||| | || |j| pd| pd| pd|t |j|_dS)Nr5F)rrrr)superrPrDrkrr6r4)rLr?r6r7r8r9r:r;r)r*r+rrrrr<r=rMrrs rOrPzQueuedFileScan.__init__s*  '%'   '/4-5+4u!    1==rQc|t|t|j|_dSrS)rrlrr6r4rLr=rrs rOrlzQueuedFileScan.__setstate__s5 U###0==rQcKtj|_ddlm}|tjd}|j|jf|j|j |jd|j |_ | d{V}|2td|jtj|_n?tj|_|j dpt)|dd|d<|S) Nr)MalwareScannerT)sinkhooks)scan_idr7r9zScan cancelled for %sr< undefined)rIr9imav.malwarelib.scan.scannerrrrrVr?r6r7rDrK async_waitloggerinforstoppedr=rcgetgetattr)rLrscanner scan_datas rOrVzQueuedFileScan.start s y{{ ?????? .afD999)GM I KnL   i   ",,........   KK/ ; ; ;(0DJJ(0DJ k**;4k:: k "rQcJ|jr|jdSdSrSrZrUs rOr\zQueuedFileScan.stop(r]rQc|jjSrSr4rXrUs rOrXzQueuedFileScan.total_resources,!11rQ)r~rrsrFILEr3rrErrHrrrPrlrVr\rrX __classcell__rrs@rOrrs+0M (2#'%)>)>)>  )>  )>%)>)>)>)>)>)>V>>>>> :'''22X22222rQrceZdZejZdejddddddddf dede edede de e de ef fd Z fd Z ed e fd Zd Zdd ZxZS) QueuedDbScanNr?r6r7r8r9r:c t||||||||| | |  t|j|_dS)N) r?r6r7r8r9r:r;r)r*r+r=)rrPr"r6r4)rLr?r6r7r8r9r:r;r)r*r+r=rMrrs rOrPzQueuedDbScan.__init__4sa '%'  -T[99rQc|t|t|j|_dSrS)rrlr"r6r4rs rOrlzQueuedDbScan.__setstate__Ss3 U###,T[99rQreturnc|jjSrSrrUs rOrXzQueuedDbScan.total_resourcesWrrQc K|jdr|jdn|j}i} td{V}n2#t $r%}t d|Yd}~nd}~wwxYwdt|D} tj d5t ||d{Vdddn #1swxYwYt|j|jgfi|j|j|jd|jd{VdS#t($rZ}|jt.j|j|j|j|j|j|jd{VYd}~dSd}~wwxYw)Nz/**z-Can't get docroots, run AVD anyway. Error: %sc,g|]}t|SrTr).0ds rO z&QueuedDbScan._scan..isAAA18A;;AAArQAVD_scan)r7r)r scan_pathr7 scan_startedcmdouterr)r?endswithrstripr list_docroots Exceptionrerrorrrtracktaskr rVr#rDr7r6scanr9rr4handle_aborted_processrrcommandrr)rL apps_path doc_rootsexcunglobbed_pathss rO_scanzQueuedDbScan._scan[s &*Y%7%7%=%= LDI  S ! ! !49   O*nn::<<<<<<<:::::2222X2#!#!#!J        rQr _scans_info)r?attrceZdZedZedeefdZedZ e dde fdZ e dd Z d Zd Zdeefd Zdd ZdZddZedZdZdZdZdS) ScanQueuecHtjd|jDS)Nc3>K|]}|VdSrS)rv)ritems rO z(ScanQueue._scans_info..s* H HD H H H H H HrQ) collectionsdeque_scansrUs rOrzScanQueue._scans_infos$ H HDK H H HHHHrQrcDtj}ttjtjD]f} t |d}|||?#t$r}td||Yd}~_d}~wwxYw|S)N)r?fallbackr3z%Can't get scan class for %s due to %s) rrrConfig SCANS_PATHSCAN_TYPE_CLASSESappendr}rthrottled_log_error)rLscans scan_inforzrs rOrzScanQueue._scanss!##$"[->    I ' /(BC S]]9556666   #;Y   s;A88 BBBc,|dSNr)peekrUs rO current_scanzScanQueue.current_scansyy||rQFr3c(Kdtd{VD|tjkrfd|D}nPtjr"|tjkrt |}n"td||rc|j r\|j }|j t||j |dS|j |dS)Nc8g|]}t|dS)homer )rusers rOrz!ScanQueue.put..s$HHHDT$v,''HHHrQc.g|]}t|fdiSr;)rrr?r; scan_argss rOrz!ScanQueue.put..s>222tFFyFIFF222rQzUnknown resource_type: {})r$rrrdisabledrdb_scans ValueErrorrqrpopleft extendleftreversed appendleftextend)rLpathsr3 prioritizer scans_to_addrcr;s ` @rOputz ScanQueue.puts9IH+--4G4G4G4G4G4GHHH 38 8 822222!222LL  # P!8!;;;#E9i@@LL8?? NNOO O  -$+ -k))++G K " "8L#9#9 : : : K " "7 + + + + + K  | , , , , ,rQNct|dkrdS|p|j}|j||t dt|dS)NrzScans pending: %d)lenrrremover\rrrLrs rOrzScanQueue.removesg t99>> F(t( 4     'T33333rQc\d|cxkrt|krndS|j|SdS)Nrr)rLprioritys rOrzScanQueue.peeksB  $ $ $ $3t99 $ $ $ $ $ $;x( ( % $rQc*fd|jDS)Nc&g|] }|jv |SrT)r6)rrscan_idss rOrz&ScanQueue.find_all..s%HHH x0G0G0G0G0GrQr)rLrs `rOfind_allzScanQueue.find_allsHHHHHHHHrQc ~|jD]3tfd|DrcS4dS)Nc>g|]\}}t||kSrT)r)rkvrs rOrz"ScanQueue.find..s,EEEdaGD!$$)EEErQ)rallry)rLr{rs @rOfindzScanQueue.findsTK  DEEEEfllnnEEEFF   trQc:|jD]}|j|vr||_dSrS)rr6r=)rLrr_rs rOrkzScanQueue.updates2K $ $D{h&&#  $ $rQc#PK|jD]}|j|vr||jjfVdSrS)rr?r=rb)rLrrs rOget_scans_from_pathszScanQueue.get_scans_from_pathssEJ - -DyE!!DJ,,,,, - -rQcP|p|j}tjd|DS)Nc 3K|]D}|j|j|jj|j|j|jd|jd|jjd fVEdS)Nr) r? scan_statusr7r9r8rrXtotal_maliciousr3) r6r?r=rbr7r9r8rXr3)rrs rOrz+ScanQueue.scan_summaries..sz' '   I#':#3!%#|#|!'+';'(%)%7%=   ' ' ' ' ' ' rQ)rr OrderedDict)rLrs rOscan_summarieszScanQueue.scan_summariessA$&' ' ' ' '    rQc*t|jSrS)listrrUs rOrzScanQueue.scanssDK   rQc2t|jdkSrrrUs rO__bool__zScanQueue.__bool__s4;!##rQc||jvSrSrrs rO __contains__zScanQueue.__contains__st{""rQc*t|jSrSrrUs rO__len__zScanQueue.__len__ s4;rQ)FrSr)r~rrsrrrr r2rrserialize_scansrrrrrrr rkr rrrrrrTrQrOrrs IIXIn-_ X  --/---_-:444_4)))III 8 $$$$ ---     (!!X!$$$###     rQrc$fd|DS)Nc.g|]}t|fdiSr)rrs rOrzdb_scans..s;   AE T<r:s* ########%%%%%%222222222222******544444DDDDDD:9999999KKKKKKKK 766666======CCCCCC777777  8 $ $EjjfnEEE L       &|||||S|||~W2W2W2W2W2^W2W2W2tS S S S S >S S S n    .f&7mLLL &$l x x x x x x x x vrQ