192
207
cfg_list, CFG_PARM_DB_LAST_UPDATE,
211
CFGItemListSetValueI(
212
cfg_list, CFG_PARM_SCAN_CPU_PRIORITY,
215
CFGItemListSetValueI(
216
cfg_list, CFG_PARM_SCAN_REPORT_ALL_OBJECTS,
219
CFGItemListSetValueL(
220
cfg_list, CFG_PARM_SCAN_MAX_FILES,
223
CFGItemListSetValueL(
224
cfg_list, CFG_PARM_SCAN_MAX_FILE_SIZE,
225
10l * 1048576l, FALSE
227
CFGItemListSetValueL(
228
cfg_list, CFG_PARM_SCAN_MAX_RECURSIONS,
231
CFGItemListSetValueL(
232
cfg_list, CFG_PARM_SCAN_MAX_MAIL_RECURSIONS,
235
CFGItemListSetValueL(
236
cfg_list, CFG_PARM_SCAN_MAX_COMPRESSION_RATIO,
196
240
CFGItemListSetValueI(
197
241
cfg_list, CFG_PARM_WIN_X,
286
330
core_struct *core;
288
332
/* Initialize the globals */
333
avscan_reload = NULL;
289
334
avscan_scan_stop_count = NULL;
291
336
/* Set up the signal callbacks */
292
338
signal(SIGINT, MainSignalCB);
293
341
signal(SIGTERM, MainSignalCB);
294
344
signal(SIGSEGV, MainSignalCB);
295
signal(SIGSTOP, MainSignalCB);
296
signal(SIGCONT, MainSignalCB);
297
347
signal(SIGPIPE, MainSignalCB);
299
350
/* Get the current working directory */
300
351
cwd = g_get_current_dir();
341
392
else if(!g_strcasecmp(arg, "--scan"))
343
394
/* Do scan procedure and return */
395
gboolean reload = FALSE;
344
396
gint status, stop_count = 0;
345
397
gchar *db_path = NULL;
346
398
GList *path_list = NULL;
347
399
gboolean recursive = FALSE,
348
400
executables_only = FALSE,
349
401
ignore_links = FALSE;
402
scanner_opts_struct scanner_opts;
404
#define DELETE_LOCALS { \
405
if(path_list != NULL) { \
406
g_list_foreach(path_list, (GFunc)g_free, NULL); \
407
g_list_free(path_list); \
351
413
/* Set the stop count pointer for the signal callback */
414
avscan_reload = &reload;
352
415
avscan_scan_stop_count = &stop_count;
417
scanner_opts.flags = 0;
418
scanner_opts.max_files = 1000l;
419
scanner_opts.max_file_size_bytes = 10l * 1048576l;
420
scanner_opts.max_recursions = 5l;
421
scanner_opts.max_mail_recursions = 64l;
422
scanner_opts.max_compression_ratio = 200l;
423
scanner_opts.cpu_priority = SCANNER_CPU_PRIORITY_HIGH;
354
426
/* Collect subsequent arguments */
355
427
for(i++; i < argc; i++)
397
475
ignore_links = TRUE;
477
/* Report All Objects */
478
else if(!g_strcasecmp(arg, "--report-all-objects") ||
479
!g_strcasecmp(arg, "--report_all_objects")
482
scanner_opts.flags |= SCANNER_FLAG_REPORT_ALL_OBJECTS;
485
else if(!g_strcasecmp(arg, "--max-files") ||
486
!g_strcasecmp(arg, "--max_files")
490
arg = (i < argc) ? argv[i] : NULL;
493
scanner_opts.max_files = ATOL(arg);
498
"%s: Requires argument.\n",
506
else if(!g_strcasecmp(arg, "--max-file-size") ||
507
!g_strcasecmp(arg, "--max_file_size")
511
arg = (i < argc) ? argv[i] : NULL;
514
scanner_opts.max_file_size_bytes = ATOL(arg);
519
"%s: Requires argument.\n",
527
else if(!g_strcasecmp(arg, "--max-recursions") ||
528
!g_strcasecmp(arg, "--max_recursions")
532
arg = (i < argc) ? argv[i] : NULL;
535
scanner_opts.max_recursions = ATOL(arg);
540
"%s: Requires argument.\n",
547
/* Max Mail Recursions */
548
else if(!g_strcasecmp(arg, "--max-mail-recursions") ||
549
!g_strcasecmp(arg, "--max_mail_recursions")
553
arg = (i < argc) ? argv[i] : NULL;
556
scanner_opts.max_mail_recursions = ATOL(arg);
561
"%s: Requires argument.\n",
568
/* Max Compression Ratio */
569
else if(!g_strcasecmp(arg, "--max-compression-ratio") ||
570
!g_strcasecmp(arg, "--max_compression_ratio")
574
arg = (i < argc) ? argv[i] : NULL;
577
scanner_opts.max_compression_ratio = ATOL(arg);
582
"%s: Requires argument.\n",
590
else if(!g_strcasecmp(arg, "--cpu-priority") ||
591
!g_strcasecmp(arg, "--cpu_priority")
595
arg = (i < argc) ? argv[i] : NULL;
598
scanner_cpu_priority p = SCANNER_CPU_PRIORITY_LOWEST;
599
if(!g_strcasecmp(arg, "highest"))
600
p = SCANNER_CPU_PRIORITY_HIGHEST;
601
else if(!g_strcasecmp(arg, "high"))
602
p = SCANNER_CPU_PRIORITY_HIGH;
603
else if(!g_strcasecmp(arg, "medium"))
604
p = SCANNER_CPU_PRIORITY_MEDIUM;
605
else if(!g_strcasecmp(arg, "low"))
606
p = SCANNER_CPU_PRIORITY_LOW;
607
else if(!g_strcasecmp(arg, "lowest"))
608
p = SCANNER_CPU_PRIORITY_LOWEST;
612
"%s: Invalid value, valid values are; highest, high, medium, low, lowest.\n",
618
scanner_opts.cpu_priority = p;
623
"%s: Requires argument.\n",
399
630
/* All else assume path */
400
631
else if((*arg != '-') && (*arg != '+'))
404
635
g_strconcat(cwd, G_DIR_SEPARATOR_S, arg, NULL);
405
636
path_list = g_list_append(path_list, path);
638
/* Unsupported argument? */
639
else if((*arg == '-') || (*arg == '+'))
642
"%s: Unsupported argument.\n",
409
/* Do scan procedure */
650
/* Do the scan procedure */
410
651
status = AVScanOP(
411
652
db_path, /* Database Path */
412
653
path_list, /* Paths to objects to scan */
413
recursive, /* Recursive */
414
executables_only, /* Executables Only */
415
ignore_links, /* Ignore Links */
657
avscan_reload, avscan_scan_stop_count,
419
661
/* Unset the stop count pointer */
662
avscan_reload = NULL;
420
663
avscan_scan_stop_count = NULL;
422
g_list_foreach(path_list, (GFunc)g_free, NULL);
423
g_list_free(path_list);
673
#define DELETE_CORE_LIBS { \
675
/* Endeavour Mark II context */ \
676
if(core->edv_ctx != NULL) { \
677
EDVContextDelete(core->edv_ctx); \
678
core->edv_ctx = NULL; \
683
#define DELETE_CORE_LIBS { }
686
#define DELETE_CORE_SHUTDOWN { \
690
if(core->win != NULL) { \
691
g_list_foreach(core->win, (GFunc)WinDelete, NULL); \
692
g_list_free(core->win); \
697
GDK_CURSOR_DESTROY(core->busy_cur); \
698
GDK_CURSOR_DESTROY(core->passive_busy_cur); \
701
GDK_PIXMAP_UNREF(core->scan_item_pixmap); \
702
GDK_BITMAP_UNREF(core->scan_item_mask); \
703
GDK_PIXMAP_UNREF(core->file_infected_pixmap); \
704
GDK_BITMAP_UNREF(core->file_infected_mask); \
705
GDK_PIXMAP_UNREF(core->folder_closed_pixmap); \
706
GDK_BITMAP_UNREF(core->folder_closed_mask); \
707
GDK_PIXMAP_UNREF(core->folder_opened_pixmap); \
708
GDK_BITMAP_UNREF(core->folder_opened_mask); \
709
GDK_PIXMAP_UNREF(core->db_item_pixmap); \
710
GDK_BITMAP_UNREF(core->db_item_mask); \
712
/* Configuration List */ \
713
CFGItemListDeleteList(core->cfg_list); \
717
g_free(core->prog_name); \
718
g_free(core->prog_path); \
719
g_free(core->prog_data_dir); \
721
g_free(core->title); \
722
g_free(core->geometry); \
728
/* Shutdown dialogs */ \
730
FileBrowserShutdown(); \
432
735
/* Initialize GTK as needed */
433
736
if(!initialized_gtk)
678
/* Skip GUI arguments that have a an argument */
1004
/* Report All Objects */
1005
else if(!g_strcasecmp(arg, "--report-all-objects") ||
1006
!g_strcasecmp(arg, "--report_all_objects")
1009
CFGItemListSetValueL(
1010
cfg_list, CFG_PARM_SCAN_REPORT_ALL_OBJECTS,
1014
/* Do Not Report All Objects */
1015
else if(!g_strcasecmp(arg, "--no-report-all-objects") ||
1016
!g_strcasecmp(arg, "--no-report_all_objects")
1019
CFGItemListSetValueL(
1020
cfg_list, CFG_PARM_SCAN_REPORT_ALL_OBJECTS,
1025
else if(!g_strcasecmp(arg, "--max-files") ||
1026
!g_strcasecmp(arg, "--max_files")
1030
arg = (i < argc) ? argv[i] : NULL;
1033
CFGItemListSetValueL(
1034
cfg_list, CFG_PARM_SCAN_MAX_FILES,
1041
"%s: Requires argument.\n",
1045
DELETE_CORE_SHUTDOWN
1050
else if(!g_strcasecmp(arg, "--max-file-size") ||
1051
!g_strcasecmp(arg, "--max_file_size")
1055
arg = (i < argc) ? argv[i] : NULL;
1058
CFGItemListSetValueL(
1059
cfg_list, CFG_PARM_SCAN_MAX_FILE_SIZE,
1066
"%s: Requires argument.\n",
1070
DELETE_CORE_SHUTDOWN
1074
/* Max Recursions */
1075
else if(!g_strcasecmp(arg, "--max-recursions") ||
1076
!g_strcasecmp(arg, "--max_recursions")
1080
arg = (i < argc) ? argv[i] : NULL;
1083
CFGItemListSetValueL(
1084
cfg_list, CFG_PARM_SCAN_MAX_RECURSIONS,
1091
"%s: Requires argument.\n",
1095
DELETE_CORE_SHUTDOWN
1099
/* Max Mail Recursions */
1100
else if(!g_strcasecmp(arg, "--max-mail-recursions") ||
1101
!g_strcasecmp(arg, "--max_mail_recursions")
1105
arg = (i < argc) ? argv[i] : NULL;
1108
CFGItemListSetValueL(
1109
cfg_list, CFG_PARM_SCAN_MAX_MAIL_RECURSIONS,
1116
"%s: Requires argument.\n",
1120
DELETE_CORE_SHUTDOWN
1124
/* Max Compression Ratio */
1125
else if(!g_strcasecmp(arg, "--max-compression-ratio") ||
1126
!g_strcasecmp(arg, "--max_compression_ratio")
1130
arg = (i < argc) ? argv[i] : NULL;
1133
CFGItemListSetValueL(
1134
cfg_list, CFG_PARM_SCAN_MAX_COMPRESSION_RATIO,
1141
"%s: Requires argument.\n",
1145
DELETE_CORE_SHUTDOWN
1150
else if(!g_strcasecmp(arg, "--cpu-priority") ||
1151
!g_strcasecmp(arg, "--cpu_priority")
1155
arg = (i < argc) ? argv[i] : NULL;
1158
scanner_cpu_priority p = SCANNER_CPU_PRIORITY_LOWEST;
1159
if(!g_strcasecmp(arg, "highest"))
1160
p = SCANNER_CPU_PRIORITY_HIGHEST;
1161
else if(!g_strcasecmp(arg, "high"))
1162
p = SCANNER_CPU_PRIORITY_HIGH;
1163
else if(!g_strcasecmp(arg, "medium"))
1164
p = SCANNER_CPU_PRIORITY_MEDIUM;
1165
else if(!g_strcasecmp(arg, "low"))
1166
p = SCANNER_CPU_PRIORITY_LOW;
1167
else if(!g_strcasecmp(arg, "lowest"))
1168
p = SCANNER_CPU_PRIORITY_LOWEST;
1172
"%s: Invalid value, valid values are; highest, high, medium, low, lowest.\n",
1176
DELETE_CORE_SHUTDOWN
1179
CFGItemListSetValueI(
1180
cfg_list, CFG_PARM_SCAN_CPU_PRIORITY,
1187
"%s: Requires argument.\n",
1191
DELETE_CORE_SHUTDOWN
1195
/* Skip GUI arguments that have an argument */
679
1196
else if(!g_strcasecmp(arg, "--geometry") ||
680
1197
!g_strcasecmp(arg, "-geometry") ||
681
1198
!g_strcasecmp(arg, "--fn") ||
760
1283
CFGFileSave(path, cfg_list);
764
/* Begin deleting core */
765
g_list_foreach(core->win, (GFunc)WinDelete, NULL);
766
g_list_free(core->win);
770
GDK_CURSOR_DESTROY(core->busy_cur);
771
GDK_CURSOR_DESTROY(core->passive_busy_cur);
774
GDK_PIXMAP_UNREF(core->scan_item_pixmap);
775
GDK_BITMAP_UNREF(core->scan_item_mask);
776
GDK_PIXMAP_UNREF(core->file_infected_pixmap);
777
GDK_BITMAP_UNREF(core->file_infected_mask);
778
GDK_PIXMAP_UNREF(core->folder_closed_pixmap);
779
GDK_BITMAP_UNREF(core->folder_closed_mask);
780
GDK_PIXMAP_UNREF(core->folder_opened_pixmap);
781
GDK_BITMAP_UNREF(core->folder_opened_mask);
782
GDK_PIXMAP_UNREF(core->db_item_pixmap);
783
GDK_BITMAP_UNREF(core->db_item_mask);
785
/* Configuration List */
786
CFGItemListDeleteList(core->cfg_list);
789
/* Endeavour Mark II context */
790
EDVContextDelete(core->edv_ctx);
793
g_free(core->prog_name);
794
g_free(core->prog_path);
795
g_free(core->prog_data_dir);
798
g_free(core->geometry);
804
/* Shutdown dialogs */
805
FileBrowserShutdown();
1286
DELETE_CORE_SHUTDOWN
1290
#undef DELETE_CORE_SHUTDOWN
1291
#undef DELETE_CORE_LIBS