Skip to content

Commit 417e558

Browse files
committed
[Change] JSON list schema 1.1: scanner/host blocks, renames, quar_enabled, sig_version parity
[New] _lmd_render_json_list top-level scanner {name, version, sig_version} and host {hostname, host_id} blocks mirror the per-scan JSON schema so consumers can parse invariants once instead of per-entry. [Change] active[]/stopped[] field renames for per-scan JSON parity: hashtype → hash_type, hits → total_hits, elapsed → elapsed_seconds. Schema is unreleased (v2.x) so no deprecation shim needed. [New] active[]/stopped[] add quarantine_enabled (boolean) from scan.meta; total_cleaned + total_quarantined emitted as null (not 0) to signal "not yet determined" mid-scan. [New] stopped[] adds engine + sig_version for parity with active[]. [New] reports[] adds sig_version + quarantine_enabled; null for pre-bump 9-field index rows and legacy plaintext sessions. [Change] scan.meta schema: new quarantine_enabled field written by _lifecycle_write_meta from global \$quarantine_hits; parser case added to _lifecycle_read_meta. [Change] session.index schema bumped 9→11 fields (sig_version + quarantine_enabled as fields 10/11). _session_index_append variadic on trailing args (9-arg calls default to "-" / "0"). _session_index_rebuild emits 11 fields from TSV headers. JSON and text readers tolerate old 8/9-field rows via the existing backward-compat shim. [New] tests/31-json-report.bats: 9 new cases (38-46) for scanner/ host blocks, schema-1.1 renames, quarantine_enabled boolean, null post-scan counters, sig_version parity, 9-field backward-compat. [Change] tests/40-session-index.bats: append test updated for 11-field schema; new test covers default fields 10/11 when caller omits them.
1 parent c33e1d1 commit 417e558

File tree

7 files changed

+534
-41
lines changed

7 files changed

+534
-41
lines changed

CHANGELOG

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,23 @@ v2.0.1 | Mar 25 2026:
137137
elapsed_seconds, null when inputs missing); field ordering normalized
138138
across all three arrays (identity → process → location → time →
139139
config → metrics)
140+
[Change] --json-report list schema 1.1: top-level scanner block ({name, version,
141+
sig_version}) and host block ({hostname, host_id}) mirror per-scan
142+
JSON schema; field renames for parity with per-scan JSON — hashtype
143+
→ hash_type, hits → total_hits, elapsed → elapsed_seconds; active[]/
144+
stopped[] add quarantine_enabled (boolean, from scan.meta) and null
145+
total_cleaned/total_quarantined (post-scan actions not yet determined
146+
mid-scan); stopped[] adds engine + sig_version parity with active[];
147+
reports[] adds sig_version + quarantine_enabled (null for pre-bump
148+
rows and legacy plaintext sessions)
149+
[Change] scan.meta: new quarantine_enabled field written by _lifecycle_write_meta
150+
from $quarantine_hits; _lifecycle_read_meta parses into
151+
_meta_quarantine_enabled
152+
[Change] session.index schema bumped 9→11 fields (sig_version + quarantine_enabled
153+
appended as fields 10 + 11); _session_index_append accepts 11 args
154+
(9-arg calls default fields 10-11 to "-" and "0"); _session_index_rebuild
155+
emits 11 fields from TSV session headers; readers tolerate old 8/9-field
156+
rows via existing backward-compat shim
140157
[Change] lmd_lifecycle.sh: remove dead stage_started meta-schema parser case
141158
and initializer (no code ever wrote stage_started to any meta file)
142159
[Change] lmd_scan.sh, lmd_quarantine.sh: remove unused local variables (_total

CHANGELOG.RELEASE

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,23 @@ v2.0.1 | Mar 25 2026:
137137
elapsed_seconds, null when inputs missing); field ordering normalized
138138
across all three arrays (identity → process → location → time →
139139
config → metrics)
140+
[Change] --json-report list schema 1.1: top-level scanner block ({name, version,
141+
sig_version}) and host block ({hostname, host_id}) mirror per-scan
142+
JSON schema; field renames for parity with per-scan JSON — hashtype
143+
→ hash_type, hits → total_hits, elapsed → elapsed_seconds; active[]/
144+
stopped[] add quarantine_enabled (boolean, from scan.meta) and null
145+
total_cleaned/total_quarantined (post-scan actions not yet determined
146+
mid-scan); stopped[] adds engine + sig_version parity with active[];
147+
reports[] adds sig_version + quarantine_enabled (null for pre-bump
148+
rows and legacy plaintext sessions)
149+
[Change] scan.meta: new quarantine_enabled field written by _lifecycle_write_meta
150+
from $quarantine_hits; _lifecycle_read_meta parses into
151+
_meta_quarantine_enabled
152+
[Change] session.index schema bumped 9→11 fields (sig_version + quarantine_enabled
153+
appended as fields 10 + 11); _session_index_append accepts 11 args
154+
(9-arg calls default fields 10-11 to "-" and "0"); _session_index_rebuild
155+
emits 11 fields from TSV session headers; readers tolerate old 8/9-field
156+
rows via existing backward-compat shim
140157
[Change] lmd_lifecycle.sh: remove dead stage_started meta-schema parser case
141158
and initializer (no code ever wrote stage_started to any meta file)
142159
[Change] lmd_scan.sh, lmd_quarantine.sh: remove unused local variables (_total

files/internals/lmd_alert.sh

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,27 @@ _lmd_render_json_legacy() {
703703
# _lmd_render_json_list — render all session reports as JSON array (index-first, legacy fallback)
704704
# shellcheck disable=SC2154
705705
_lmd_render_json_list() {
706-
printf '{\n "version": "1.0",\n "type": "report_list",\n "active": ['
706+
# Top-level scanner + host blocks mirror per-scan JSON schema (see
707+
# _lmd_render_json at line 449). Single source of truth for invariants
708+
# that consumers would otherwise duplicate per-entry.
709+
local _jl_hostname _jl_hostid _jl_scanner_ver _jl_sigs_ver
710+
_jl_hostname=$(hostname)
711+
_jl_hostname=$(_json_escape_string "${_jl_hostname:--}")
712+
_jl_hostid="${hostid:--}"
713+
[ "$_jl_hostid" = "-" ] && _jl_hostid="null" || _jl_hostid="\"$_jl_hostid\""
714+
_jl_scanner_ver="${lmd_version:--}"
715+
[ "$_jl_scanner_ver" = "-" ] && _jl_scanner_ver="null" || _jl_scanner_ver="\"$_jl_scanner_ver\""
716+
# Installed sig version (what this LMD would scan with if a new scan started
717+
# now); per-entry sig_version remains the version active at that scan's time.
718+
if [ -f "$sigdir/maldet.sigs.ver" ]; then
719+
IFS= read -r _jl_sigs_ver < "$sigdir/maldet.sigs.ver"
720+
fi
721+
[ -z "${_jl_sigs_ver:-}" ] && _jl_sigs_ver="null" || _jl_sigs_ver="\"$_jl_sigs_ver\""
722+
printf '{\n "version": "1.1",\n "type": "report_list",\n'
723+
printf ' "scanner": {"name": "Linux Malware Detect", "version": %s, "sig_version": %s},\n' \
724+
"$_jl_scanner_ver" "$_jl_sigs_ver"
725+
printf ' "host": {"hostname": "%s", "host_id": %s},\n' "$_jl_hostname" "$_jl_hostid"
726+
printf ' "active": ['
707727

708728
# Enumerate active scans for the "active" array
709729
local _first_active=1 _jl_meta_file _jl_scanid _jl_state
@@ -738,12 +758,16 @@ _lmd_render_json_list() {
738758
local _jl_workers="${_meta_workers:-0}"; [ "$_jl_workers" = "-" ] && _jl_workers=0
739759
local _jl_prog_pos="${_meta_progress_pos:-0}"; [ "$_jl_prog_pos" = "-" ] && _jl_prog_pos=0
740760
local _jl_prog_total="${_meta_progress_total:-0}"; [ "$_jl_prog_total" = "-" ] && _jl_prog_total=0
741-
local _jl_eta
761+
local _jl_eta _jl_quar_bool
742762
_jl_eta=$(_lifecycle_compute_eta "${_meta_engine:-}" "$_jl_elapsed" "$_jl_prog_pos" "$_jl_prog_total")
743-
printf '\n {"scan_id": "%s", "state": "%s", "pid": %s, "ppid": %s, "path": "%s", "started": "%s", "started_epoch": %s, "elapsed": %s, "engine": "%s", "hashtype": "%s", "workers": %s, "sig_version": "%s", "total_files": %s, "hits": %s, "eta": %s, "progress": {"position": %s, "total": %s}}' \
763+
# quarantine_enabled: boolean matching per-scan JSON jbool() convention
764+
if [ "${_meta_quarantine_enabled:-0}" = "1" ]; then _jl_quar_bool="true"; else _jl_quar_bool="false"; fi
765+
# total_cleaned/total_quarantined are post-scan actions; emit null to
766+
# signal "not yet determined" (not zero, which implies "no action taken")
767+
printf '\n {"scan_id": "%s", "state": "%s", "pid": %s, "ppid": %s, "path": "%s", "started": "%s", "started_epoch": %s, "elapsed_seconds": %s, "engine": "%s", "hash_type": "%s", "workers": %s, "sig_version": "%s", "quarantine_enabled": %s, "total_files": %s, "total_hits": %s, "total_cleaned": null, "total_quarantined": null, "eta": %s, "progress": {"position": %s, "total": %s}}' \
744768
"$_jl_scanid" "$_jl_state" "$_jl_pid" "$_jl_ppid" "$_jl_path" \
745769
"$_jl_started_hr" "$_jl_started_ep" "$_jl_elapsed" \
746-
"$_jl_engine" "$_jl_hashtype" "$_jl_workers" "$_jl_sig" \
770+
"$_jl_engine" "$_jl_hashtype" "$_jl_workers" "$_jl_sig" "$_jl_quar_bool" \
747771
"$_jl_files" "$_jl_hits" \
748772
"$_jl_eta" "$_jl_prog_pos" "$_jl_prog_total"
749773
;;
@@ -763,11 +787,13 @@ _lmd_render_json_list() {
763787
_lifecycle_read_meta "$_jl_stopped_sid" || continue
764788
[ "$_first_stopped" != "1" ] && printf ","
765789
_first_stopped=0
766-
local _jl_sp _jl_sstage _jl_shr _jl_shashtype
790+
local _jl_sp _jl_sstage _jl_shr _jl_shashtype _jl_sengine _jl_ssig
767791
_jl_sp=$(_json_escape_string "$_meta_path")
768792
_jl_sstage=$(_json_escape_string "${_meta_stage:--}")
769793
_jl_shr=$(_json_escape_string "${_meta_stopped_hr:-unknown}")
770794
_jl_shashtype=$(_json_escape_string "${_meta_hashtype:--}")
795+
_jl_sengine=$(_json_escape_string "${_meta_engine:--}")
796+
_jl_ssig=$(_json_escape_string "${_meta_sig_version:--}")
771797
local _jl_sstarted_hr _jl_sstarted_ep _jl_sstopped_ep
772798
_jl_sstarted_hr=$(_json_escape_string "${_meta_started_hr:--}")
773799
_jl_sstarted_ep="${_meta_started:-0}"
@@ -779,11 +805,13 @@ _lmd_render_json_list() {
779805
local _jl_shits="${_meta_hits:-0}"; [ "$_jl_shits" = "-" ] && _jl_shits=0
780806
local _jl_selapsed="${_meta_elapsed:-0}"; [ "$_jl_selapsed" = "-" ] && _jl_selapsed=0
781807
local _jl_sworkers="${_meta_workers:-0}"; [ "$_jl_sworkers" = "-" ] && _jl_sworkers=0
782-
printf '\n {"scan_id": "%s", "stage": "%s", "ppid": %s, "path": "%s", "started": "%s", "started_epoch": %s, "stopped_hr": "%s", "stopped_epoch": %s, "elapsed": %s, "hashtype": "%s", "workers": %s, "total_files": %s, "hits": %s}' \
808+
local _jl_squar_bool
809+
if [ "${_meta_quarantine_enabled:-0}" = "1" ]; then _jl_squar_bool="true"; else _jl_squar_bool="false"; fi
810+
printf '\n {"scan_id": "%s", "stage": "%s", "ppid": %s, "path": "%s", "started": "%s", "started_epoch": %s, "stopped_hr": "%s", "stopped_epoch": %s, "elapsed_seconds": %s, "engine": "%s", "hash_type": "%s", "workers": %s, "sig_version": "%s", "quarantine_enabled": %s, "total_files": %s, "total_hits": %s, "total_cleaned": null, "total_quarantined": null}' \
783811
"$_jl_stopped_sid" "$_jl_sstage" "$_jl_sppid" "$_jl_sp" \
784812
"$_jl_sstarted_hr" "$_jl_sstarted_ep" \
785813
"$_jl_shr" "$_jl_sstopped_ep" "$_jl_selapsed" \
786-
"$_jl_shashtype" "$_jl_sworkers" \
814+
"$_jl_sengine" "$_jl_shashtype" "$_jl_sworkers" "$_jl_ssig" "$_jl_squar_bool" \
787815
"$_jl_sfiles" "$_jl_shits"
788816
fi
789817
done
@@ -812,8 +840,12 @@ _lmd_render_json_list() {
812840
if [ -f "$_index_file" ]; then
813841
local _ix_scanid _ix_epoch _ix_started_hr _ix_elapsed
814842
local _ix_tot_files _ix_tot_hits _ix_tot_cl _ix_tot_quar _ix_path
843+
local _ix_sig_version _ix_quar_enabled
844+
# Schema v1 is 9 fields; v1.1 appends sig_version + quarantine_enabled.
845+
# Missing trailing fields read as empty — handled per-field below.
815846
while IFS=$'\t' read -r _ix_scanid _ix_epoch _ix_started_hr _ix_elapsed \
816-
_ix_tot_files _ix_tot_hits _ix_tot_cl _ix_tot_quar _ix_path; do
847+
_ix_tot_files _ix_tot_hits _ix_tot_cl _ix_tot_quar _ix_path \
848+
_ix_sig_version _ix_quar_enabled; do
817849
case "$_ix_scanid" in "#"*|"") continue ;; esac
818850
# Backward compat: old 8-field index has path in field 8 (no quar field)
819851
if [ -z "$_ix_path" ] && [ -n "$_ix_tot_quar" ]; then
@@ -846,6 +878,21 @@ _lmd_render_json_list() {
846878
fi
847879
if [ "$_ix_elapsed" = "-" ]; then printf '"elapsed_seconds": null, '
848880
else printf '"elapsed_seconds": %s, ' "$_ix_elapsed"; fi
881+
# sig_version / quarantine_enabled — v1.1 fields; null when absent
882+
# (pre-bump entries or rebuilds from TSVs lacking the data)
883+
if [ -z "$_ix_sig_version" ] || [ "$_ix_sig_version" = "-" ]; then
884+
printf '"sig_version": null, '
885+
else
886+
_json_escape_var "$_ix_sig_version"
887+
printf '"sig_version": "%s", ' "$_JSON_ESC_OUT"
888+
fi
889+
if [ -z "$_ix_quar_enabled" ] || [ "$_ix_quar_enabled" = "-" ]; then
890+
printf '"quarantine_enabled": null, '
891+
elif [ "$_ix_quar_enabled" = "1" ]; then
892+
printf '"quarantine_enabled": true, '
893+
else
894+
printf '"quarantine_enabled": false, '
895+
fi
849896
if [ "$_ix_tot_files" = "-" ]; then printf '"total_files": null, '
850897
else printf '"total_files": %s, ' "$_ix_tot_files"; fi
851898
if [ "$_ix_tot_hits" = "-" ]; then printf '"total_hits": null, '
@@ -901,6 +948,10 @@ _lmd_render_json_list() {
901948
fi
902949
if [ -z "$scan_et" ]; then printf '"elapsed_seconds": null, '
903950
else printf '"elapsed_seconds": %s, ' "$scan_et"; fi
951+
# sig_version / quarantine_enabled not recoverable from plaintext
952+
# session headers — legacy format predates both. Null is honest.
953+
printf '"sig_version": null, '
954+
printf '"quarantine_enabled": null, '
904955
if [ -z "$tot_files" ]; then printf '"total_files": null, '
905956
else printf '"total_files": %s, ' "$tot_files"; fi
906957
if [ -z "$tot_hits" ]; then printf '"total_hits": null, '

files/internals/lmd_lifecycle.sh

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ _lifecycle_write_meta() {
2727
local _options="$1"
2828
local _meta_file="$sessdir/scan.meta.$_scanid"
2929
local _tmp_file="$_meta_file.tmp"
30-
local _started _started_hr _sig_ver
30+
local _started _started_hr _sig_ver _quar_enabled
3131

3232
_started=$(command date +%s)
3333
_started_hr=$(command date "+%b %d %Y %H:%M:%S %z")
@@ -39,6 +39,7 @@ _lifecycle_write_meta() {
3939
_sig_ver="unknown"
4040
fi
4141
[ -z "$_sig_ver" ] && _sig_ver="unknown"
42+
_quar_enabled="${quarantine_hits:-0}"
4243

4344
# ns_pid: namespace PID used for temp file grouping ($$ — always the
4445
# top-level shell PID, even in background forks). Separate from pid
@@ -58,6 +59,7 @@ hashtype=$_hashtype
5859
stages=$_stages
5960
sig_version=$_sig_ver
6061
options=$_options
62+
quarantine_enabled=$_quar_enabled
6163
state=running
6264
EOF
6365

@@ -98,6 +100,7 @@ _lifecycle_read_meta() {
98100
_meta_stages=""
99101
_meta_sig_version=""
100102
_meta_options=""
103+
_meta_quarantine_enabled=""
101104
_meta_state=""
102105
_meta_stage=""
103106
_meta_progress_pos=""
@@ -127,6 +130,7 @@ _lifecycle_read_meta() {
127130
stages) _meta_stages="$_value" ;;
128131
sig_version) _meta_sig_version="$_value" ;;
129132
options) _meta_options="$_value" ;;
133+
quarantine_enabled) _meta_quarantine_enabled="$_value" ;;
130134
state) _meta_state="$_value" ;;
131135
stage) _meta_stage="$_value" ;;
132136
progress_pos) _meta_progress_pos="$_value" ;;
@@ -513,22 +517,27 @@ _lifecycle_render_tsv_active() {
513517
return 0
514518
}
515519

516-
# _session_index_append scanid epoch started_hr elapsed total_files total_hits total_cleaned total_quarantined path — append to session.index
520+
# _session_index_append scanid epoch started_hr elapsed total_files total_hits total_cleaned total_quarantined path sig_version quarantine_enabled — append to session.index
521+
# Schema v1 fields 1-9 are legacy; fields 10-11 added for JSON schema 1.1 consumer parity.
522+
# Readers MUST tolerate missing trailing fields (old entries, pre-bump rebuilds).
517523
_session_index_append() {
518524
local _scanid="$1" _epoch="$2" _started_hr="$3" _elapsed="$4"
519525
local _total_files="$5" _total_hits="$6" _total_cleaned="$7"
520526
local _total_quar="$8" _path="$9"
527+
shift 9
528+
local _sig_version="${1:--}" _quar_enabled="${2:-0}"
521529
local _index_file="$sessdir/session.index"
522530

523531
if [ ! -f "$_index_file" ]; then
524532
printf '#LMD_INDEX:v1\n' > "$_index_file"
525533
fi
526534

527535
# Atomic append (< PIPE_BUF)
528-
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
536+
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
529537
"$_scanid" "$_epoch" "$_started_hr" "$_elapsed" \
530538
"$_total_files" "$_total_hits" "$_total_cleaned" \
531-
"$_total_quar" "$_path" >> "$_index_file"
539+
"$_total_quar" "$_path" \
540+
"$_sig_version" "$_quar_enabled" >> "$_index_file"
532541
}
533542

534543
# _session_index_rebuild — rebuild session.index from session.tsv.* (flock-gated, atomic .tmp+mv)
@@ -537,9 +546,10 @@ _session_index_rebuild() {
537546
local _tmp_file="$_index_file.tmp"
538547
local _tsv_file _rid
539548
local _r_scanid _r_started_hr _r_elapsed _r_tot_files _r_tot_hits _r_tot_cl _r_path _r_epoch
549+
local _r_sig_ver _r_quar
540550
# Throwaway variables for TSV fields we do not use
541551
local _r_fmt _r_alert_type _r_hostname _r_days _r_end_hr _r_fl_et
542-
local _r_scanner_ver _r_sig_ver _r_hashtype _r_engine _r_quar _r_hostid
552+
local _r_scanner_ver _r_hashtype _r_engine _r_hostid
543553

544554
# Flock to prevent concurrent rebuilds
545555
(
@@ -563,10 +573,11 @@ _session_index_rebuild() {
563573
# Count quarantined hits: lines where field 3 (quarpath) is non-empty and not "-"
564574
local _r_tot_quar
565575
_r_tot_quar=$(awk -F'\t' '!/^#/ && $3 != "" && $3 != "-" { n++ } END { print n+0 }' "$_tsv_file")
566-
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
576+
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
567577
"$_r_scanid" "$_r_epoch" "$_r_started_hr" "${_r_elapsed:--}" \
568578
"${_r_tot_files:--}" "${_r_tot_hits:--}" "${_r_tot_cl:--}" \
569579
"$_r_tot_quar" "${_r_path:--}" \
580+
"${_r_sig_ver:--}" "${_r_quar:-0}" \
570581
>> "$_tmp_file"
571582
done
572583

files/internals/lmd_session.sh

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,8 +336,12 @@ view_report() {
336336
# Fast path: read completed scans from session.index (O(1) vs O(n) per-file)
337337
local _ix_scanid _ix_epoch _ix_started_hr _ix_elapsed
338338
local _ix_tot_files _ix_tot_hits _ix_tot_cl _ix_tot_quar _ix_path
339+
# v1.1 trailing fields read-through (unused by text renderer but
340+
# named so they don't spill into _ix_path on newer 11-field rows)
341+
local _ix_sig_version _ix_quar_enabled
339342
while IFS=$'\t' read -r _ix_scanid _ix_epoch _ix_started_hr _ix_elapsed \
340-
_ix_tot_files _ix_tot_hits _ix_tot_cl _ix_tot_quar _ix_path; do
343+
_ix_tot_files _ix_tot_hits _ix_tot_cl _ix_tot_quar _ix_path \
344+
_ix_sig_version _ix_quar_enabled; do
341345
# Skip header and empty lines
342346
case "$_ix_scanid" in "#"*|"") continue ;; esac
343347
# Backward compat: old 8-field index has path in field 8 (no quar field)
@@ -700,10 +704,17 @@ _scan_finalize_session() {
700704
local _tot_quar
701705
_tot_quar=$(awk -F'\t' '!/^#/ && $3 != "" && $3 != "-" { n++ } END { print n+0 }' "$nsess_hits")
702706

707+
# Resolve sig_version + quarantine_enabled for v1.1 index schema (fields 10-11).
708+
# sig_version: prefer runtime $sig_version; fall back to on-disk sigs.ver sentinel.
709+
local _idx_sig_ver _idx_quar_en
710+
_idx_sig_ver="${sig_version:-$(cat "$sigdir/maldet.sigs.ver" 2>/dev/null || echo "-")}" # safe: sigs.ver may be absent on fresh install
711+
_idx_quar_en="${quarantine_hits:-0}"
712+
703713
# Append to session index (non-hook scans only)
704714
_session_index_append "$_sid" "${scan_start:-0}" \
705715
"${scan_start_hr:--}" "${scan_et:--}" \
706-
"${tot_files:--}" "${tot_hits:--}" "${tot_cl:--}" "$_tot_quar" "${hrspath:--}"
716+
"${tot_files:--}" "${tot_hits:--}" "${tot_cl:--}" "$_tot_quar" "${hrspath:--}" \
717+
"$_idx_sig_ver" "$_idx_quar_en"
707718

708719
# Remove in-flight scan_session — all data now in nsess_hits
709720
command rm -f "$scan_session"

0 commit comments

Comments
 (0)