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.
 

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.
 
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.
 
int store_file (struct scan_globals *globals, const char *file, const char *file_hash)
 Stores a file type preference in a hash table.
 
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}
GHashTable * files_size_translation
Definition: scanneraux.h:21

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}
GHashTable * files_translation
Definition: scanneraux.h:20

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}
int global_max_checks
Definition: openvas.c:84

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}
int global_max_hosts
Definition: openvas.c:83

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}
static pid_t pid
Definition: nasl_cmd_exec.c:39

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}
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
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

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