OpenVAS Scanner 23.43.1
openvas.c File Reference
#include "openvas.h"
#include "../misc/kb_cache.h"
#include "../misc/plugutils.h"
#include "../misc/scan_id.h"
#include "../misc/vendorversion.h"
#include "attack.h"
#include "debug_utils.h"
#include "pluginlaunch.h"
#include "processes.h"
#include "sighand.h"
#include "utils.h"
#include <bsd/unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <gcrypt.h>
#include <glib.h>
#include <gnutls/gnutls.h>
#include <grp.h>
#include <gvm/base/logging.h>
#include <gvm/base/nvti.h>
#include <gvm/base/prefs.h>
#include <gvm/base/version.h>
#include <gvm/util/kb.h>
#include <gvm/util/mqtt.h>
#include <gvm/util/nvticache.h>
#include <gvm/util/uuidutils.h>
#include <netdb.h>
#include <pwd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/un.h>
#include <sys/wait.h>
#include <unistd.h>
#include "../misc/network.h"
Include dependency graph for openvas.c:

Go to the source code of this file.

Data Structures

struct  openvas_option

Macros

#define G_LOG_DOMAIN   "sd main"
 GLib log domain.
#define PROCTITLE_WAITING   "openvas: Waiting for incoming connections"
#define PROCTITLE_LOADING   "openvas: Loading Handler"
#define PROCTITLE_RELOADING   "openvas: Reloading"
#define PROCTITLE_SERVING   "openvas: Serving %s"

Functions

static void set_default_openvas_prefs ()
 Set the prefs from the openvas_defaults array.
static void my_gnutls_log_func (int level, const char *text)
static void set_globals_from_preferences (void)
static void handle_termination_signal (int sig)
static void init_signal_handlers (void)
 Initializes main scanner process' signal handlers.
static int overwrite_openvas_prefs_with_prefs_from_client (struct scan_globals *globals)
 Read the scan preferences from redis.
static int init_logging ()
 Init logging.
static void gcrypt_init (void)
static void check_tls ()
 Check TLS.
static void openvas_print_start_msg ()
 Print start message.
static int stop_single_task_scan (void)
 Search in redis the process ID of a running scan and sends it the kill signal SIGUSR1, which will stop the scan. To find the process ID, it uses the scan_id passed with the –scan-stop option.
static void send_message_to_client_and_finish_scan (const char *msg)
 Send a failure message and set the scan as finished.
static int attack_network_init (struct scan_globals *globals, const gchar *config_file)
 Set up data needed for attack_network().
int openvas (int argc, char *argv[], char *env[])
 openvas.

Variables

int global_max_hosts = 15
int global_max_checks = 10
int global_min_memory = 0
int global_max_sysload = 0
GSList * log_config = NULL
 Logging parameters, as passed to setup_log_handlers.
static volatile int termination_signal = 0
static openvas_option openvas_defaults []
 Default values for scanner options. Must be NULL terminated.

Detailed Description

OpenVAS main module, runs the scanner.

Definition in file openvas.c.

Macro Definition Documentation

◆ G_LOG_DOMAIN

#define G_LOG_DOMAIN   "sd main"

GLib log domain.

Definition at line 73 of file openvas.c.

◆ PROCTITLE_LOADING

#define PROCTITLE_LOADING   "openvas: Loading Handler"

Definition at line 76 of file openvas.c.

◆ PROCTITLE_RELOADING

#define PROCTITLE_RELOADING   "openvas: Reloading"

Definition at line 77 of file openvas.c.

◆ PROCTITLE_SERVING

#define PROCTITLE_SERVING   "openvas: Serving %s"

Definition at line 78 of file openvas.c.

◆ PROCTITLE_WAITING

#define PROCTITLE_WAITING   "openvas: Waiting for incoming connections"

Definition at line 75 of file openvas.c.

Function Documentation

◆ attack_network_init()

int attack_network_init ( struct scan_globals * globals,
const gchar * config_file )
static

Set up data needed for attack_network().

Parameters
globalsscan_globals needed for client preference handling.
config_fileUsed for config preference handling.
Returns
0 on success, 1 otherwise.

Definition at line 410 of file openvas.c.

411{
412 const char *mqtt_server_uri;
413 const char *openvasd_server_uri;
414
416 prefs_config (config_file);
418
419 if (prefs_get ("vendor_version") != NULL)
420 vendor_version_set (prefs_get ("vendor_version"));
421 check_tls ();
423
424 if (plugins_cache_init ())
425 {
426 g_message ("Failed to initialize nvti cache.");
428 "ERRMSG||| ||| ||| ||| |||NVTI cache initialization failed");
429 nvticache_reset ();
430 return 1;
431 }
432 nvticache_reset ();
433
434 /* Init Notus communication */
435 openvasd_server_uri = prefs_get ("openvasd_server");
436 if (openvasd_server_uri)
437 {
438 g_message ("%s: LSC via openvasd", __func__);
439 prefs_set ("openvasd_lsc_enabled", "yes");
440 }
441 else
442 {
443 mqtt_server_uri = prefs_get ("mqtt_server_uri");
444 if (mqtt_server_uri)
445 {
446#ifdef AUTH_MQTT
447 const char *mqtt_user = prefs_get ("mqtt_user");
448 const char *mqtt_pass = prefs_get ("mqtt_pass");
449 if ((mqtt_init_auth (mqtt_server_uri, mqtt_user, mqtt_pass)) != 0)
450#else
451 if ((mqtt_init (mqtt_server_uri)) != 0)
452#endif
453 {
454 g_message ("%s: INIT MQTT: FAIL", __func__);
456 "ERRMSG||| ||| ||| ||| |||MQTT initialization failed");
457 }
458 else
459 {
460 g_message ("%s: INIT MQTT: SUCCESS", __func__);
461 prefs_set ("mqtt_enabled", "yes");
462 }
463 }
464 else
465 {
466 g_message ("%s: Neither openvasd_server nor mqtt_server_uri given, "
467 "LSC disabled",
468 __func__);
469 }
470 }
471
473
474 /* Make process a group leader, to make it easier to cleanup forked
475 * processes & their children. */
476 setpgid (0, 0);
477
479 {
480 g_warning ("No preferences found for the scan %s", globals->scan_id);
481 return 1;
482 }
483
484 return 0;
485}
static void openvas_print_start_msg()
Print start message.
Definition openvas.c:333
static void set_globals_from_preferences(void)
Definition openvas.c:134
static int overwrite_openvas_prefs_with_prefs_from_client(struct scan_globals *globals)
Read the scan preferences from redis.
Definition openvas.c:200
static void set_default_openvas_prefs()
Set the prefs from the openvas_defaults array.
Definition openvas.c:121
static void send_message_to_client_and_finish_scan(const char *msg)
Send a failure message and set the scan as finished.
Definition openvas.c:387
static void init_signal_handlers(void)
Initializes main scanner process' signal handlers.
Definition openvas.c:178
static void check_tls()
Check TLS.
Definition openvas.c:312
int plugins_cache_init(void)
Main function for nvticache initialization without loading the plugins.
Definition pluginload.c:348
char * scan_id
Definition scanneraux.h:22
void vendor_version_set(const gchar *version)
Set vendor version.

References check_tls(), init_signal_handlers(), openvas_print_start_msg(), overwrite_openvas_prefs_with_prefs_from_client(), plugins_cache_init(), scan_globals::scan_id, send_message_to_client_and_finish_scan(), set_default_openvas_prefs(), set_globals_from_preferences(), and vendor_version_set().

Referenced by openvas().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ check_tls()

void check_tls ( )
static

Check TLS.

Definition at line 312 of file openvas.c.

313{
314#if GNUTLS_VERSION_NUMBER < 0x030300
315 if (openvas_SSL_init () < 0)
316 g_message ("Could not initialize openvas SSL!");
317#endif
318
319 if (prefs_get ("debug_tls") != NULL && atoi (prefs_get ("debug_tls")) > 0)
320 {
321 g_warning ("TLS debug is enabled and should only be used with care, "
322 "since it may reveal sensitive information in the scanner "
323 "logs and might make openvas fill your disk rather quickly.");
324 gnutls_global_set_log_function (my_gnutls_log_func);
325 gnutls_global_set_log_level (atoi (prefs_get ("debug_tls")));
326 }
327}
int openvas_SSL_init()
Initializes SSL support.
Definition network.c:341
static void my_gnutls_log_func(int level, const char *text)
Definition openvas.c:128

References my_gnutls_log_func(), and openvas_SSL_init().

Referenced by attack_network_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gcrypt_init()

void gcrypt_init ( void )
static

Definition at line 297 of file openvas.c.

298{
299 if (gcry_control (GCRYCTL_ANY_INITIALIZATION_P))
300 return;
301 gcry_check_version (NULL);
302 gcry_control (GCRYCTL_SUSPEND_SECMEM_WARN);
303 gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0);
304 gcry_control (GCRYCTL_RESUME_SECMEM_WARN);
305 gcry_control (GCRYCTL_INITIALIZATION_FINISHED);
306}

Referenced by openvas().

Here is the caller graph for this function:

◆ handle_termination_signal()

void handle_termination_signal ( int sig)
static

Definition at line 168 of file openvas.c.

169{
170 termination_signal = sig;
172}
static volatile int termination_signal
Definition openvas.c:94
void procs_terminate_childs(void)
This function terminates all processes spawned with create_process. Calls terminate_child for each pr...
Definition processes.c:113

References procs_terminate_childs(), and termination_signal.

Referenced by init_signal_handlers().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ init_logging()

int init_logging ( )
static

Init logging.

Returns
0 on success, -1 on error.

Definition at line 273 of file openvas.c.

274{
275 static gchar *log_config_file_name = NULL;
276 int err;
277
278 log_config_file_name =
279 g_build_filename (OPENVAS_SYSCONF_DIR, "openvas_log.conf", NULL);
280 if (g_file_test (log_config_file_name, G_FILE_TEST_EXISTS))
281 log_config = load_log_configuration (log_config_file_name);
282 err = setup_log_handlers (log_config);
283 if (err)
284 {
285 g_warning ("%s: Can not open or create log file or directory. "
286 "Please check permissions of log files listed in %s.",
287 __func__, log_config_file_name);
288 g_free (log_config_file_name);
289 return -1;
290 }
291 g_free (log_config_file_name);
292
293 return 0;
294}
GSList * log_config
Logging parameters, as passed to setup_log_handlers.
Definition openvas.c:92

References log_config.

Referenced by openvas().

Here is the caller graph for this function:

◆ init_signal_handlers()

void init_signal_handlers ( void )
static

Initializes main scanner process' signal handlers.

Definition at line 178 of file openvas.c.

179{
183 openvas_signal (SIGCHLD, sighand_chld);
184}
static void handle_termination_signal(int sig)
Definition openvas.c:168
void(*)(int) openvas_signal(int signum, void(*handler)(int))
Definition sighand.c:79
void sighand_chld(int sig)
Definition sighand.c:95

References handle_termination_signal(), openvas_signal, and sighand_chld().

Referenced by attack_network_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ my_gnutls_log_func()

void my_gnutls_log_func ( int level,
const char * text )
static

Definition at line 128 of file openvas.c.

129{
130 g_message ("(%d) %s", level, text);
131}

Referenced by check_tls(), and main().

Here is the caller graph for this function:

◆ openvas()

int openvas ( int argc,
char * argv[],
char * env[] )

openvas.

Parameters
argcArgument count.
argvArgument vector.

Definition at line 493 of file openvas.c.

494{
495 int err;
496
497 setproctitle_init (argc, argv, env);
498 gcrypt_init ();
499
500 static gboolean display_version = FALSE;
501 static gchar *config_file = NULL;
502 static gchar *scan_id = NULL;
503 static gchar *stop_scan_id = NULL;
504 static gboolean print_specs = FALSE;
505 static gboolean print_sysconfdir = FALSE;
506 static gboolean update_vt_info = FALSE;
507 GError *error = NULL;
508 GOptionContext *option_context;
509 static GOptionEntry entries[] = {
510 {"version", 'V', 0, G_OPTION_ARG_NONE, &display_version,
511 "Display version information", NULL},
512 {"config-file", 'c', 0, G_OPTION_ARG_FILENAME, &config_file,
513 "Configuration file", "<filename>"},
514 {"cfg-specs", 's', 0, G_OPTION_ARG_NONE, &print_specs,
515 "Print configuration settings", NULL},
516 {"sysconfdir", 'y', 0, G_OPTION_ARG_NONE, &print_sysconfdir,
517 "Print system configuration directory (set at compile time)", NULL},
518 {"update-vt-info", 'u', 0, G_OPTION_ARG_NONE, &update_vt_info,
519 "Updates VT info into redis store from VT files", NULL},
520 {"scan-start", '\0', 0, G_OPTION_ARG_STRING, &scan_id,
521 "ID of scan to start. ID and related data must be stored into redis "
522 "before.",
523 "<string>"},
524 {"scan-stop", '\0', 0, G_OPTION_ARG_STRING, &stop_scan_id,
525 "ID of scan to stop", "<string>"},
526
527 {NULL, 0, 0, 0, NULL, NULL, NULL}};
528
529 option_context =
530 g_option_context_new ("- Open Vulnerability Assessment Scanner");
531 g_option_context_add_main_entries (option_context, entries, NULL);
532 if (!g_option_context_parse (option_context, &argc, &argv, &error))
533 {
534 g_print ("%s\n\n", error->message);
535 return EXIT_SUCCESS;
536 }
537 g_option_context_free (option_context);
538
539 /* --sysconfdir */
540 if (print_sysconfdir)
541 {
542 g_print ("%s\n", SYSCONFDIR);
543 return EXIT_SUCCESS;
544 }
545
546 /* --version */
547 if (display_version)
548 {
549 printf ("OpenVAS %s\n", OPENVAS_VERSION);
550#ifdef OPENVAS_GIT_REVISION
551 printf ("GIT revision %s\n", OPENVAS_GIT_REVISION);
552#endif
553 printf ("gvm-libs %s\n", gvm_libs_version ());
554 printf ("Most new code since 2005: (C) 2024 Greenbone AG\n");
555 printf (
556 "Nessus origin: (C) 2004 Renaud Deraison <deraison@nessus.org>\n");
557 printf ("License GPLv2: GNU GPL version 2\n");
558 printf (
559 "This is free software: you are free to change and redistribute it.\n"
560 "There is NO WARRANTY, to the extent permitted by law.\n\n");
561 return EXIT_SUCCESS;
562 }
563
564 /* Switch to UTC so that OTP times are always in UTC. */
565 if (setenv ("TZ", "utc 0", 1) == -1)
566 {
567 g_print ("%s\n\n", strerror (errno));
568 return EXIT_SUCCESS;
569 }
570 tzset ();
571
572#ifdef LOG_REFERENCES_AVAILABLE
573 if (scan_id)
574 set_log_reference (scan_id);
575 if (stop_scan_id)
576 set_log_reference (stop_scan_id);
577#endif // LOG_REFERENCES_AVAILABLE
578 if (init_logging () != 0)
579 return EXIT_FAILURE;
580
581 if (!init_sentry ())
582 {
583 g_message ("Sentry is enabled. This can log sensitive information.");
584 }
585
586 /* Config file location */
587 if (!config_file)
588 config_file = OPENVAS_CONF;
589
590 if (update_vt_info)
591 {
593 prefs_config (config_file);
595 err = plugins_init ();
596 nvticache_reset ();
597 gvm_close_sentry ();
598 return err ? EXIT_FAILURE : EXIT_SUCCESS;
599 }
600
601 /* openvas --scan-stop */
602 if (stop_scan_id)
603 {
605 prefs_config (config_file);
606 if (plugins_cache_init ())
607 {
608 g_message ("Failed to initialize nvti cache. Not possible to "
609 "stop the scan");
610 nvticache_reset ();
611 gvm_close_sentry ();
612 return EXIT_FAILURE;
613 }
614 nvticache_reset ();
615
616 set_scan_id (g_strdup (stop_scan_id));
617 err = stop_single_task_scan ();
618 gvm_close_sentry ();
619#ifdef LOG_REFERENCES_AVAILABLE
620 free_log_reference ();
621#endif // LOG_REFERENCES_AVAILABLE
622 return err ? EXIT_FAILURE : EXIT_SUCCESS;
623 }
624
625 /* openvas --scan-start */
626 if (scan_id)
627 {
628 int attack_error = 0;
629 struct scan_globals *globals;
630 set_scan_id (g_strdup (scan_id));
631 globals = g_malloc0 (sizeof (struct scan_globals));
632 globals->scan_id = g_strdup (get_scan_id ());
633
634 if (attack_network_init (globals, config_file) != 0)
635 {
636 destroy_scan_globals (globals);
637 return EXIT_FAILURE;
638 }
639 attack_error = attack_network (globals);
640
641 gvm_close_sentry ();
642 destroy_scan_globals (globals);
643#ifdef LOG_REFERENCES_AVAILABLE
644 free_log_reference ();
645#endif // LOG_REFERENCES_AVAILABLE
646
647 if (attack_error)
648 {
649 g_warning ("Scan ending with FAILURE status");
650 return EXIT_FAILURE;
651 }
652 return EXIT_SUCCESS;
653 }
654
655 if (print_specs)
656 {
658 prefs_config (config_file);
659 prefs_dump ();
660 gvm_close_sentry ();
661 }
662
663 return EXIT_SUCCESS;
664}
int attack_network(struct scan_globals *globals)
Attack a whole network. return 0 on successes, -1 if there was a critical error.
Definition attack.c:1169
int init_sentry(void)
Init sentry.
Definition debug_utils.c:23
static int attack_network_init(struct scan_globals *globals, const gchar *config_file)
Set up data needed for attack_network().
Definition openvas.c:410
static int init_logging()
Init logging.
Definition openvas.c:273
static void gcrypt_init(void)
Definition openvas.c:297
static int stop_single_task_scan(void)
Search in redis the process ID of a running scan and sends it the kill signal SIGUSR1,...
Definition openvas.c:352
int plugins_init(void)
main function for loading all the plugins
Definition pluginload.c:372
const char * scan_id
Definition scan_id.c:10
int set_scan_id(const char *new_scan_id)
Definition scan_id.c:13
const char * get_scan_id()
Definition scan_id.c:22
void destroy_scan_globals(struct scan_globals *globals)
Definition scanneraux.c:14

References attack_network(), attack_network_init(), destroy_scan_globals(), gcrypt_init(), get_scan_id(), init_logging(), init_sentry(), plugins_cache_init(), plugins_init(), scan_globals::scan_id, scan_id, set_default_openvas_prefs(), set_globals_from_preferences(), set_scan_id(), and stop_single_task_scan().

Referenced by main().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ openvas_print_start_msg()

void openvas_print_start_msg ( )
static

Print start message.

Definition at line 333 of file openvas.c.

334{
335#ifdef OPENVAS_GIT_REVISION
336 g_message ("openvas %s (GIT revision %s) started", OPENVAS_VERSION,
337 OPENVAS_GIT_REVISION);
338#else
339 g_message ("openvas %s started", OPENVAS_VERSION);
340#endif
341}

Referenced by attack_network_init().

Here is the caller graph for this function:

◆ overwrite_openvas_prefs_with_prefs_from_client()

int overwrite_openvas_prefs_with_prefs_from_client ( struct scan_globals * globals)
static

Read the scan preferences from redis.

Adds preferences to the global_prefs. If preference already exists in global_prefs they will be overwritten by prefs from client.

Parameters
globalsScan ID of globals used as key to find the corresponding KB where to take the preferences from. Globals also used for file upload.
Returns
0 on success, -1 if the kb is not found or no prefs are found in the kb.

Definition at line 200 of file openvas.c.

201{
202 char key[1024];
203 kb_t kb;
204 struct kb_item *res = NULL;
205
206 g_debug ("Start loading scan preferences.");
207 if (!globals->scan_id)
208 return -1;
209
210 snprintf (key, sizeof (key), "internal/%s/scanprefs", globals->scan_id);
211
212 kb = kb_find (prefs_get ("db_address"), key);
213 if (!kb)
214 return -1;
215 // 2022-10-19: currently internal/%s/scanprefs are set by ospd which is the
216 // main_kb in our context
217 set_main_kb (kb);
218
219 res = kb_item_get_all (kb, key);
220 if (!res)
221 return -1;
222
223 while (res)
224 {
225 gchar **pref = g_strsplit (res->v_str, "|||", 2);
226 if (pref[0])
227 {
228 gchar **pref_name = g_strsplit (pref[0], ":", 3);
229 if (pref_name[1] && pref_name[2] && !strncmp (pref_name[2], "file", 4)
230 && strcmp (pref[1], ""))
231 {
232 char *file_uuid = gvm_uuid_make ();
233 int ret;
234 prefs_set (pref[0], file_uuid);
235 ret = store_file (globals, pref[1], file_uuid);
236 if (ret)
237 g_debug ("Load preference: Failed to upload file "
238 "for nvt %s preference.",
239 pref_name[0]);
240
241 g_free (file_uuid);
242 }
243 else if (is_scanner_only_pref (pref[0]))
244 g_warning ("%s is a scanner only preference. It can not be written "
245 "by the client and will be ignored.",
246 pref_name[0]);
247 else
248 prefs_set (pref[0], pref[1] ? pref[1] : "");
249 g_strfreev (pref_name);
250 }
251
252 g_strfreev (pref);
253 res = res->next;
254 }
255 kb_del_items (kb, key);
256 snprintf (key, sizeof (key), "internal/%s", globals->scan_id);
257 kb_item_set_str_with_main_kb_check (kb, key, "ready", 0);
258 kb_item_set_int_with_main_kb_check (kb, "internal/ovas_pid", getpid ());
259 kb_lnk_reset (kb);
260
261 g_debug ("End loading scan preferences.");
262
263 kb_item_free (res);
264 return 0;
265}
void set_main_kb(kb_t kb)
sets the shared database between ospd and openvas as a main_kb for further usage. @description this s...
Definition kb_cache.c:27
int kb_item_set_str_with_main_kb_check(kb_t kb, const char *name, const char *value, size_t len)
Check if the current kb corresponds to the original scanid, if it matches it call kb_item_set_str....
Definition plugutils.c:558
int kb_item_set_int_with_main_kb_check(kb_t kb, const char *name, int value)
Check if the current kb corresponds to the original scanid, if it matches it call kb_item_set_int....
Definition plugutils.c:609
int is_scanner_only_pref(const char *pref)
Definition utils.c:238
int store_file(struct scan_globals *globals, const char *file, const char *file_hash)
Stores a file type preference in a hash table.
Definition utils.c:104

References is_scanner_only_pref(), kb_item_set_int_with_main_kb_check(), kb_item_set_str_with_main_kb_check(), scan_globals::scan_id, set_main_kb(), and store_file().

Referenced by attack_network_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ send_message_to_client_and_finish_scan()

void send_message_to_client_and_finish_scan ( const char * msg)
static

Send a failure message and set the scan as finished.

Parameters
msgMessage to send to the client.

Definition at line 387 of file openvas.c.

388{
389 char key[1024];
390 kb_t kb;
391
392 // We get the main kb. It is still not set as global at this point.
393 snprintf (key, sizeof (key), "internal/%s/scanprefs", get_scan_id ());
394 kb = kb_find (prefs_get ("db_address"), key);
395 kb_item_push_str (kb, "internal/results", msg);
396 snprintf (key, sizeof (key), "internal/%s", get_scan_id ());
397 kb_item_set_str (kb, key, "finished", 0);
398 kb_lnk_reset (kb);
399}

References get_scan_id().

Referenced by attack_network_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_default_openvas_prefs()

void set_default_openvas_prefs ( )
static

Set the prefs from the openvas_defaults array.

Definition at line 121 of file openvas.c.

122{
123 for (int i = 0; openvas_defaults[i].option != NULL; i++)
124 prefs_set (openvas_defaults[i].option, openvas_defaults[i].value);
125}
#define option
static openvas_option openvas_defaults[]
Default values for scanner options. Must be NULL terminated.
Definition openvas.c:109

References openvas_defaults, and option.

Referenced by attack_network_init(), and openvas().

Here is the caller graph for this function:

◆ set_globals_from_preferences()

void set_globals_from_preferences ( void )
static

Definition at line 134 of file openvas.c.

135{
136 const char *str;
137
138 if ((str = prefs_get ("max_hosts")) != NULL)
139 {
140 global_max_hosts = atoi (str);
141 if (global_max_hosts <= 0)
142 global_max_hosts = 15;
143 }
144
145 if ((str = prefs_get ("max_checks")) != NULL)
146 {
147 global_max_checks = atoi (str);
148 if (global_max_checks <= 0)
150 }
151
152 if ((str = prefs_get ("max_sysload")) != NULL)
153 {
154 global_max_sysload = atoi (str);
155 if (global_max_sysload <= 0)
157 }
158
159 if ((str = prefs_get ("min_free_mem")) != NULL)
160 {
161 global_min_memory = atoi (str);
162 if (global_min_memory <= 0)
164 }
165}
int global_max_sysload
Definition openvas.c:87
int global_min_memory
Definition openvas.c:86
int global_max_checks
Definition openvas.c:84
int global_max_hosts
Definition openvas.c:83

References global_max_checks, global_max_hosts, global_max_sysload, and global_min_memory.

Referenced by attack_network_init(), and openvas().

Here is the caller graph for this function:

◆ stop_single_task_scan()

int stop_single_task_scan ( void )
static

Search in redis the process ID of a running scan and sends it the kill signal SIGUSR1, which will stop the scan. To find the process ID, it uses the scan_id passed with the –scan-stop option.

Returns
0 on success, 1 otherwise.

Definition at line 352 of file openvas.c.

353{
354 char key[1024];
355 kb_t kb;
356 int pid;
357
358 if (!get_scan_id ())
359 return 1;
360
361 snprintf (key, sizeof (key), "internal/%s", get_scan_id ());
362 kb = kb_find (prefs_get ("db_address"), key);
363 if (!kb)
364 return 1;
365
366 pid = kb_item_get_int (kb, "internal/ovas_pid");
367
368 /* Only send the signal if the pid is a positive value.
369 Since kb_item_get_int() will return -1 if the key does
370 not exist.
371 Warning: killing with -1 pid will send the signal system wide.
372 */
373 if (pid <= 0)
374 return 1;
375
376 /* Send the signal to the process group. */
377 killpg (pid, SIGUSR1);
378 return 0;
379}
static pid_t pid

References get_scan_id(), and pid.

Referenced by openvas().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ global_max_checks

int global_max_checks = 10

Definition at line 84 of file openvas.c.

Referenced by get_max_checks_number(), and set_globals_from_preferences().

◆ global_max_hosts

int global_max_hosts = 15

Globals that should not be touched (used in utils module).

Definition at line 83 of file openvas.c.

Referenced by get_max_hosts_number(), and set_globals_from_preferences().

◆ global_max_sysload

int global_max_sysload = 0

Definition at line 87 of file openvas.c.

Referenced by check_sysload(), and set_globals_from_preferences().

◆ global_min_memory

int global_min_memory = 0

Definition at line 86 of file openvas.c.

Referenced by check_memory(), and set_globals_from_preferences().

◆ log_config

GSList* log_config = NULL

Logging parameters, as passed to setup_log_handlers.

Definition at line 92 of file openvas.c.

Referenced by init_logging().

◆ openvas_defaults

openvas_option openvas_defaults[]
static
Initial value:
= {
{"plugins_folder", OPENVAS_NVT_DIR},
{"include_folders", OPENVAS_NVT_DIR},
{"plugins_timeout", G_STRINGIFY (NVT_TIMEOUT)},
{"scanner_plugins_timeout", G_STRINGIFY (SCANNER_NVT_TIMEOUT)},
{"db_address", KB_PATH_DEFAULT},
{NULL, NULL}}

Default values for scanner options. Must be NULL terminated.

Only include options which are dependent on CMake variables. Empty options must be "\0", not NULL, to match the behavior of prefs_init.

Definition at line 109 of file openvas.c.

109 {
110 {"plugins_folder", OPENVAS_NVT_DIR},
111 {"include_folders", OPENVAS_NVT_DIR},
112 {"plugins_timeout", G_STRINGIFY (NVT_TIMEOUT)},
113 {"scanner_plugins_timeout", G_STRINGIFY (SCANNER_NVT_TIMEOUT)},
114 {"db_address", KB_PATH_DEFAULT},
115 {NULL, NULL}};

Referenced by set_default_openvas_prefs().

◆ termination_signal

volatile int termination_signal = 0
static

Definition at line 94 of file openvas.c.

Referenced by handle_termination_signal().