OpenVAS Scanner  22.7.9
utils.c File Reference

A bunch of miscellaneous functions, mostly file conversions. More...

#include "utils.h"
#include "../misc/plugutils.h"
#include "../misc/scanneraux.h"
#include <errno.h>
#include <gvm/base/prefs.h>
#include <gvm/boreas/cli.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/wait.h>
Include dependency graph for utils.c:

Go to the source code of this file.

Macros

#define G_LOG_DOMAIN   "sd main"
 GLib log domain. More...
 

Functions

static void files_add_translation (struct scan_globals *globals, const char *file_hash, char *contents)
 Adds a 'translation' entry for a file sent by the client. More...
 
static void files_add_size_translation (struct scan_globals *globals, const char *file_hash, const long filesize)
 Adds a 'content size' entry for a file sent by the client. More...
 
int store_file (struct scan_globals *globals, const char *file, const char *file_hash)
 Stores a file type preference in a hash table. More...
 
int get_max_hosts_number (void)
 
int get_max_checks_number (void)
 
int process_alive (pid_t pid)
 
int data_left (int soc)
 
void wait_for_children1 (void)
 
int is_scanner_only_pref (const char *pref)
 

Variables

int global_max_hosts
 
int global_max_checks
 

Detailed Description

A bunch of miscellaneous functions, mostly file conversions.

Definition in file utils.c.

Macro Definition Documentation

◆ G_LOG_DOMAIN

#define G_LOG_DOMAIN   "sd main"

GLib log domain.

Definition at line 33 of file utils.c.

Function Documentation

◆ data_left()

int data_left ( int  soc)

Definition at line 208 of file utils.c.

209 {
210  int data = 0;
211  ioctl (soc, FIONREAD, &data);
212  return data;
213 }

◆ files_add_size_translation()

static void files_add_size_translation ( struct scan_globals globals,
const char *  file_hash,
const long  filesize 
)
static

Adds a 'content size' entry for a file sent by the client.

Files sent by the client are stored in memory on the server side. Because they may be binary we need to store the size of the uploaded file as well. This function sets up a mapping from the original name sent by the client to the file size.

Parameters
globalsGlobal struct.
file_hashhash to reference the file.
filesizeSize of the file in bytes.

Definition at line 75 of file utils.c.

77 {
78  GHashTable *trans = globals->files_size_translation;
79  gchar *filesize_str = g_strdup_printf ("%ld", filesize);
80 
81  // Register the mapping table if none there yet
82  if (trans == NULL)
83  {
84  trans = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
85  globals->files_size_translation = trans;
86  }
87 
88  g_hash_table_insert (trans, g_strdup (file_hash), g_strdup (filesize_str));
89 }

References scan_globals::files_size_translation.

Referenced by store_file().

Here is the caller graph for this function:

◆ files_add_translation()

static void files_add_translation ( struct scan_globals globals,
const char *  file_hash,
char *  contents 
)
static

Adds a 'translation' entry for a file sent by the client.

Files sent by the client are stored in memory on the server side. In order to access these files, their original name ('local' to the client) can be 'translated' into the file contents of the in-memory copy of the file on the server side.

Parameters
globalsGlobal struct.
file_hashhash to reference the file.
contentsContents of the file.

Definition at line 48 of file utils.c.

50 {
51  GHashTable *trans = globals->files_translation;
52  // Register the mapping table if none there yet
53  if (trans == NULL)
54  {
55  trans = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
56  globals->files_translation = trans;
57  }
58 
59  g_hash_table_insert (trans, g_strdup (file_hash), contents);
60 }

References scan_globals::files_translation.

Referenced by store_file().

Here is the caller graph for this function:

◆ get_max_checks_number()

int get_max_checks_number ( void  )

Get the max number of plugins to launch against the remote host at the same time

Definition at line 165 of file utils.c.

166 {
167  int max_checks;
168  if (prefs_get ("max_checks"))
169  {
170  max_checks = atoi (prefs_get ("max_checks"));
171  if (max_checks <= 0)
172  {
173  g_debug ("Error ! max_hosts = %d -- check %s", max_checks,
174  (char *) prefs_get ("config_file"));
175  max_checks = global_max_checks;
176  }
177  else if (max_checks > global_max_checks)
178  {
179  g_debug ("Client tried to raise the maximum checks number - %d."
180  " Using %d. Change 'max_checks' in openvas.conf if you"
181  " believe this is incorrect",
182  max_checks, global_max_checks);
183  max_checks = global_max_checks;
184  }
185  }
186  else
187  max_checks = global_max_checks;
188  return (max_checks);
189 }

References global_max_checks.

Referenced by attack_network(), and pluginlaunch_init().

Here is the caller graph for this function:

◆ get_max_hosts_number()

int get_max_hosts_number ( void  )

Get the max number of hosts to test at the same time.

Definition at line 134 of file utils.c.

135 {
136  int max_hosts;
137  if (prefs_get ("max_hosts"))
138  {
139  max_hosts = atoi (prefs_get ("max_hosts"));
140  if (max_hosts <= 0)
141  {
142  g_debug ("Error ! max_hosts = %d -- check %s", max_hosts,
143  (char *) prefs_get ("config_file"));
144  max_hosts = global_max_hosts;
145  }
146  else if (max_hosts > global_max_hosts)
147  {
148  g_debug ("Client tried to raise the maximum hosts number - %d."
149  " Using %d. Change 'max_hosts' in openvas.conf if you"
150  " believe this is incorrect",
151  max_hosts, global_max_hosts);
152  max_hosts = global_max_hosts;
153  }
154  }
155  else
156  max_hosts = global_max_hosts;
157  return (max_hosts);
158 }

References global_max_hosts.

Referenced by attack_network().

Here is the caller graph for this function:

◆ is_scanner_only_pref()

int is_scanner_only_pref ( const char *  pref)

Definition at line 235 of file utils.c.

236 {
237  if (pref == NULL)
238  return 0;
239  if (!strcmp (pref, "config_file") || !strcmp (pref, "plugins_folder")
240  || !strcmp (
241  pref,
242  "kb_location") // old name of db_address, ignore from old conf's
243  || !strcmp (pref, "db_address") || !strcmp (pref, "negot_timeout")
244  || !strcmp (pref, "force_pubkey_auth")
245  || !strcmp (pref, "log_whole_attack")
246  || !strcmp (pref, "log_plugins_name_at_load")
247  || !strcmp (pref, "nasl_no_signature_check")
248  || !strcmp (pref, "vendor_version") || !strcmp (pref, "drop_privileges")
249  || !strcmp (pref, "nasl_drop_privileges_user")
250  || !strcmp (pref, "debug_tls") || !strcmp (pref, "min_free_mem")
251  || !strcmp (pref, "max_sysload")
252  /* Preferences starting with sys_ are scanner-side only. */
253  || !strncmp (pref, "sys_", 4))
254  return 1;
255  return 0;
256 }

Referenced by overwrite_openvas_prefs_with_prefs_from_client().

Here is the caller graph for this function:

◆ process_alive()

int process_alive ( pid_t  pid)

Determines if a process is alive - as reliably as we can

Definition at line 195 of file utils.c.

196 {
197  int i, ret;
198  if (pid == 0)
199  return 0;
200 
201  for (i = 0, ret = 1; (i < 10) && (ret > 0); i++)
202  ret = waitpid (pid, NULL, WNOHANG);
203 
204  return kill (pid, 0) == 0;
205 }

References pid.

Referenced by attack_host(), next_free_process(), and update_running_processes().

Here is the caller graph for this function:

◆ store_file()

int store_file ( struct scan_globals globals,
const char *  file,
const char *  file_hash 
)

Stores a file type preference in a hash table.

Parameters
globalsGlobal struct.
fileFile content.
file_hashhash to reference the file.
Returns
0 if successful, -1 in case of errors.

Definition at line 101 of file utils.c.

103 {
104  char *origname;
105  gchar *contents = NULL;
106 
107  size_t bytes = 0;
108 
109  if (!file_hash || *file_hash == '\0')
110  return -1;
111 
112  origname = g_strdup (file_hash);
113 
114  contents = (gchar *) g_base64_decode (file, &bytes);
115 
116  if (contents == NULL)
117  {
118  g_debug ("store_file: Failed to allocate memory for uploaded file.");
119  g_free (origname);
120  return -1;
121  }
122 
123  files_add_translation (globals, origname, contents);
124  files_add_size_translation (globals, origname, bytes);
125 
126  g_free (origname);
127  return 0;
128 }

References files_add_size_translation(), and files_add_translation().

Referenced by overwrite_openvas_prefs_with_prefs_from_client().

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

◆ wait_for_children1()

void wait_for_children1 ( void  )

Definition at line 216 of file utils.c.

217 {
218  int e, n = 0;
219  do
220  {
221  errno = 0;
222  e = waitpid (-1, NULL, WNOHANG);
223  n++;
224  }
225  while ((e > 0 || errno == EINTR) && n < 20);
226 }

Variable Documentation

◆ global_max_checks

int global_max_checks
extern

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
extern

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().

scan_globals::files_size_translation
GHashTable * files_size_translation
Definition: scanneraux.h:21
scan_globals::files_translation
GHashTable * files_translation
Definition: scanneraux.h:20
pid
static pid_t pid
Definition: nasl_cmd_exec.c:39
files_add_translation
static void files_add_translation(struct scan_globals *globals, const char *file_hash, char *contents)
Adds a 'translation' entry for a file sent by the client.
Definition: utils.c:48
global_max_hosts
int global_max_hosts
Definition: openvas.c:83
files_add_size_translation
static void files_add_size_translation(struct scan_globals *globals, const char *file_hash, const long filesize)
Adds a 'content size' entry for a file sent by the client.
Definition: utils.c:75
global_max_checks
int global_max_checks
Definition: openvas.c:84