h7 hUdZddlZddlZddlZddlZddlmZddlmZm Z m Z m Z m Z m Z mZmZmZddlmZmZmZmZddlmZmZddlmZmZmZddlmZdd lm Z!dd l"m#Z#dd l$m%Z%m&Z&m'Z'dd l(m)Z)dd l*m+Z+ddl,m-Z-m.Z.m/Z/ddl0m1Z1m2Z2ej3e4Z5e1j6re#hZ7eee%e8d<n!ddl9m:Z:m;Z;mefffdZ?Gdde-Z@Gdde.ZAdZBde e>ge e>ffdZCdZDdZEdZFdS) 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) itemgetter) AnyCallableDictIterableListOptionalSetTupleType)CoreMalwareMalwareScanIntensityGENERIC_SENSOR_SOCKET_PATH)MS_ON_DEMAND_SCANcheck_permission)ExitDetachedScanTypeMalwareScanResourceTypeQueuedScanState) MalwareScan)QueueSupervisorSync)AiBolitDetachedScan)DetachedOperation DetachedStatePROCESS_START_TIME) get_crontab)ValidationError)CommonEndpoints RootEndpointsbind)antivirus_modeget_abspath_from_user_dirABORTABLE_DETACHED_OPERATIONS)MDSDetachedCleanupMDSDetachedRestoreMDSDetachedScanqueuereturnc`i}g}|0tt|t|g}||d<tj|||fi|\} } | D]@} t jj| d<| d| dd| d<,| d| dz | d<Ai||n8d| |D} | r|| g}  D]]\}} | dd| d<n,ttj | dz | d<d| d<| d |i| ^fd | D}| |z}|D]b} | d  | d | d <| d | d | d<| d  | d| d <cfd|D}|r@t|D]0}|t#|j|j1| |d|fS)Npaths scan_statusstarted completeddurationcg|]\}}|Sr0).0scan_s [/opt/imunify360/venv/lib/python3.11/site-packages/imav/malwarelib/rpc/endpoints/ondemand.py z+_get_prepared_scan_list..xs)   T1D   )r*)scansscanidc(g|]}|dv |Sr8r0)r1r2 queued_scanss r4r5z+_get_prepared_scan_list..s.$x. *L*L*L*L*Lr6totaltotal_resourcescreatedc@g|]}|dcxkrknn|S)r>r0)r1usincetos r4r5z+_get_prepared_scan_list..s> = = =1!I,!>  GD! J  t{m , , ,;,"55D$;;Z.6!\ <          r6z status-usercKtt|}|jj|}||ndt jji}dd|dii}d|vr|d|dd<|S)N)rstatusrKprogress)rEr"r'findrrrGrH)rkrWrr2rresults r4ondemand_statusz%OnDemandUserEndpoints.ondemand_statuss,T2233z$$$$// KKMMMO39:  HfX&678   *0*.!s:::DDK:::r6)scan_ids)rerrrN) r'rlistrPr7rr8rrrrrr,)rkrr scans_to_stoprr2rs r4rzOnDemandEndpoints.ondemand_stopsz'4  C| C)NMM $**:*@!A!ABBM::M::: 8,,,!  D;,"55D$;;Z.6!\ <          r6rc@K|j}d|iS)NrK)r'r)rkrs r4rz!OnDemandEndpoints.ondemand_status,s$""$$  r6rcDKt||||||jjS)aCLI method to print list of scans. - Parses info about scans from DB - Updates info about scans in scan_queue and parses it :param since: scan start timestamp :param to: scan end timestamp :param limit: count of scans to print :param offset: offset of scans in DB to print :param order_by: name of column, by which sort data :return: (number of returned scans, list of data about scans) )r')r`r')rkrArBrTrUrVs r4rFzOnDemandEndpoints.ondemand_list1s1 ' 2ufhdj6F    r6r'r~FcK|s|std|r3|jjd|tj|dt |d{V|r5|jjd|tj|dt |d{VdSdS)Nr)r*ru prioritizer0)rr'r~rr}rry)rkr*rrrrs r4ondemand_queue_putz$OnDemandEndpoints.ondemand_queue_putEs  !E    $*.58%Y''           $*.5:%Y''            r6rrcVK|jjj}|s!|r|gng}|jn9|jj|}|j||D]6}|j|jtj||ud{V7dS)N)rerr) r'rrfind_allrrrrr)rkrrr;r2s r4ondemand_queue_removez'OnDemandEndpoints.ondemand_queue_remove]sz'4  (-9AL>>rL J      :+44X>>L J  h ' ' '   D$;;Z.6\)<          r6zcheck-detachedcKtdttD]}|t }|t jkr+tdtdS|t j kr+tdtdStddS)z Check if there are failed on-demand scans and start the agent so that we can handle aborted scans and proceed with the next scan in the queue z1Checking detached scan directory for failed scans) dir_lister) start_timez"Found failed scan. Waking up agentz$Finished scan found. Waking up agentzNo failed on-demand scans foundN) loggerinfo_active_detached_ops _list_dirget_detached_process_staterrABORTED_try_wake_up_agentFINISHED)rk detached_op_states r4ondemand_check_detachedz)OnDemandEndpoints.ondemand_check_detachedns  GHHH/9EEE ; ;K ;;-<F... @AAA"$$$/// BCCC"$$$0 KK9 : : : : :r6r)F)rrrrhr rboolrrr rLrrrErrFrr rrrrs@r4rrs***** T)['**+*. T)[&))t*)0 T)[(++!!,+! T)[&))15  sDc3h(( )   *) & T)['5114921. T)['844HT#Y4G54  T)["233;;43;;;;;r6rc#dK tj|Ed{VdS#t$rgcYSwxYwr)oslistdirFileNotFoundError)_dirs r4rrsW:d###########  s  //rc#hKtD]'}||jjD]}||V(dSr)r#DETACHED_DIR_CLS DETACHED_DIR)rdetached_op_cls_ids r4rrs\8'':o>KLL ' 'C!/#&& & & & & '''r6cn tjtjtj5}|tj|t|dddddS#1swxYwYdS#tttj f$rYdSwxYw)Ns+{"method": "MALWARE_CHECK_DETACHED_SCANS"} ) socketAF_UNIX SOCK_STREAM settimeoutr DEFAULT_SOCKET_TIMEOUTconnectrsendConnectionRefusedErrorrtimeout)ss r4rrs ]6>6+= > > D! LL4 5 5 5 II0 1 1 1 FFB C C C D D D D D D D D D D D D D D D D D D #$5v~ F     s5)BAB: BB  BB BB43B4c~|:tttj|dSdS)N,)rmaprErsplit)masks r4 _split_maskrs4 C 4::c??33444r6ct|}d|vr%t|d|d<d|vr%t|d|d<|S)N file_mask file_patterns ignore_maskexclude_patterns)dictrpop)rargss r4rrse  ??Dd +DHH[,A,A B B_#.txx /F/F#G#G  Kr6r)G__doc__loggingrrrMoperatorrtypingrrrrrr r r r defence360agent.contracts.configr rrr%defence360agent.contracts.permissionsrrimav.malwarelib.configrrrimav.malwarelib.modelr*imav.malwarelib.scan.queue_supervisor_syncrri&imav.malwarelib.scan.ai_bolit.detachedrimav.malwarelib.scan.detachedrrrimav.malwarelib.scan.crontabrdefence360agent.rpc_toolsr defence360agent.rpc_tools.lookuprrr defence360agent.utilsr!r" getLoggerrrenabledr#__annotations__!imav.malwarelib.scan.mds.detachedr$r%r&rLrEr`rbrrrrrrr0r6r4rs*                         .----- 544444555555 LKKKKKKK  8 $ $C!3t,='>#?  C!3t,='>#?@D;$;$/8;$ 3T#s(^$ $%;$;$;$;$BQ Q Q Q Q OQ Q Q hM;M;M;M;M; M;M;M;`'# 1E(F''''    555 r6