OpenVAS Scanner  22.7.9
plugutils.c File Reference

Plugin-specific stuff. More...

#include "plugutils.h"
#include "kb_cache.h"
#include "network.h"
#include "scan_id.h"
#include "support.h"
#include <errno.h>
#include <gvm/base/hosts.h>
#include <gvm/base/networking.h>
#include <gvm/base/prefs.h>
#include <gvm/util/mqtt.h>
#include <gvm/util/nvticache.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <unistd.h>
Include dependency graph for plugutils.c:

Go to the source code of this file.

Macros

#define G_LOG_DOMAIN   "lib misc"
 GLib logging domain. More...
 
#define MAX_CANDIDATES   16
 

Functions

const char * plug_current_vhost (void)
 
static int plug_fork_child (kb_t kb)
 Spawns a new child process. Setups everything that is needed for a new process. Child must be handled by caller. More...
 
void plug_set_dep (struct script_infos *args, const char *depname)
 
static void host_add_port_proto (struct script_infos *args, int portnum, char *proto)
 
static int unscanned_ports_as_closed (port_protocol_t ptype)
 Report state of preferences "unscanned_closed". More...
 
int kb_get_port_state_proto (kb_t kb, int portnum, char *proto)
 
static int host_get_port_state_proto (struct script_infos *args, int portnum, char *proto)
 
int host_get_port_state (struct script_infos *plugdata, int portnum)
 
int host_get_port_state_udp (struct script_infos *plugdata, int portnum)
 
static int check_duplicated_vhost (struct script_infos *args, const char *hostname)
 Check for duplicated vhosts before inserting a new one. More...
 
int plug_add_host_fqdn (struct script_infos *args, const char *hostname, const char *source)
 
char * plug_get_host_fqdn (struct script_infos *args)
 
GSList * plug_get_host_fqdn_list (struct script_infos *args)
 
char * plug_get_host_source (struct script_infos *args, const char *hostname)
 
struct in6_addr * plug_get_host_ip (struct script_infos *args)
 
char * plug_get_host_ip_str (struct script_infos *desc)
 
static const char * msg_type_to_str (msg_t type)
 Return string representation of the given msg_t. More...
 
int check_kb_inconsistency (kb_t main_kb)
 Check if the current main kb corresponds to the original scan main kb. @description Compares the scan id in get_scan_id, set at the beginning of the scan, with the one found in the main kb. Therefore it is mandatory that the global main_kb variable to be set. It helps to detect that the kb was not taken by another task/scan, and that the current plugins does not stores results in a wrong kb. More...
 
static int check_kb_inconsistency_log (void)
 calls check_kb_inconsistency and logs as debug when local scan_id is missing. More...
 
int kb_item_push_str_with_main_kb_check (kb_t kb, const char *name, const char *value)
 Check if the current kb corresponds to the original scanid, if it matches it kb_item_push_str. @description Compares the scan id in get_scan_id, set at the beginning of the scan, with the one found in the main kb. Therefore it is mandatory that the global main_kb variable to be set. It helps to detect that the kb was not taken by another task/scan, and that the current plugins does not stores results in a wrong kb. More...
 
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. @description Compares the scan id in get_scan_id, set at the beginning of the scan, with the one found in the main kb. Therefore it is mandatory that the global main_kb variable to be set. It helps to detect that the kb was not taken by another task/scan, and that the current plugins does not stores results in a wrong kb. More...
 
int kb_item_add_str_unique_with_main_kb_check (kb_t kb, const char *name, const char *value, size_t len, int pos)
 Check if the current kb corresponds to the original scanid, if it matches it call kb_item_add_str_unique. @description Compares the scan id in get_scan_id, set at the beginning of the scan, with the one found in the main kb. Therefore it is mandatory that the global main_kb variable to be set. It helps to detect that the kb was not taken by another task/scan, and that the current plugins does not stores results in a wrong kb. More...
 
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. @description Compares the scan id in get_scan_id, set at the beginning of the scan, with the one found in the main kb. Therefore it is mandatory that the global main_kb variable to be set. It helps to detect that the kb was not taken by another task/scan, and that the current plugins does not stores results in a wrong kb. More...
 
int kb_item_add_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_add_int. @description Compares the scan id in get_scan_id, add at the beginning of the scan, with the one found in the main kb. Therefore it is mandatory that the global main_kb variable to be set. It helps to detect that the kb was not taken by another task/scan, and that the current plugins does not stores results in a wrong kb. More...
 
int kb_item_add_int_unique_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_add_int_unique. @description Compares the scan id in get_scan_id, add at the beginning of the scan, with the one found in the main kb. Therefore it is mandatory that the global main_kb variable to be set. It helps to detect that the kb was not taken by another task/scan, and that the current plugins does not stores results in a wrong kb. More...
 
static void proto_post_wrapped (const char *oid, struct script_infos *desc, int port, const char *proto, const char *action, msg_t msg_type, const char *uri)
 Post a security message (e.g. LOG, NOTE, WARNING ...). More...
 
void proto_post_alarm (const char *oid, struct script_infos *desc, int port, const char *proto, const char *action, const char *uri)
 
void post_alarm (const char *oid, struct script_infos *desc, int port, const char *action, const char *uri)
 
void proto_post_log (const char *oid, struct script_infos *desc, int port, const char *proto, const char *action, const char *uri)
 Post a log message. More...
 
void post_log (const char *oid, struct script_infos *desc, int port, const char *action)
 Post a log message about a tcp port. More...
 
void post_log_with_uri (const char *oid, struct script_infos *desc, int port, const char *action, const char *uri)
 Post a log message about a tcp port with a uri. More...
 
void proto_post_error (const char *oid, struct script_infos *desc, int port, const char *proto, const char *action, const char *uri)
 
void post_error (const char *oid, struct script_infos *desc, int port, const char *action, const char *uri)
 
char * get_plugin_preference (const char *oid, const char *name, int pref_id)
 Get the a plugins preference. More...
 
const char * get_plugin_preference_fname (struct script_infos *desc, const char *filename)
 Get the file name of a plugins preference that is of type "file". More...
 
char * get_plugin_preference_file_content (struct script_infos *desc, const char *identifier)
 Get the file contents of a plugins preference that is of type "file". More...
 
long get_plugin_preference_file_size (struct script_infos *desc, const char *identifier)
 Get the file size of a plugins preference that is of type "file". More...
 
void plug_set_key_len (struct script_infos *args, char *name, int type, const void *value, size_t len)
 
void plug_set_key (struct script_infos *args, char *name, int type, const void *value)
 
void plug_set_key_len_volatile (struct script_infos *args, char *name, int type, const void *value, int expire, size_t len)
 Set volatile key with expire. More...
 
void plug_set_key_volatile (struct script_infos *args, char *name, int type, const void *value, int expire)
 Set volatile key with expire. More...
 
void plug_replace_key_len (struct script_infos *args, char *name, int type, void *value, size_t len)
 
void plug_replace_key (struct script_infos *args, char *name, int type, void *value)
 
void scanner_add_port (struct script_infos *args, int port, char *proto)
 
kb_t plug_get_kb (struct script_infos *args)
 
static void plug_get_key_sigchld (int s)
 
static void sig_n (int signo, void(*fnc)(int))
 
void * plug_get_key (struct script_infos *args, char *name, int *type, size_t *len, int single)
 Get values from a kb under the given key name. More...
 
unsigned int plug_get_host_open_port (struct script_infos *desc)
 
void plug_set_port_transport (struct script_infos *args, int port, int tr)
 
int plug_get_port_transport (struct script_infos *args, int port)
 
static void plug_set_ssl_item (struct script_infos *args, char *item, char *itemfname)
 
void plug_set_ssl_cert (struct script_infos *args, char *cert)
 
void plug_set_ssl_key (struct script_infos *args, char *key)
 
void plug_set_ssl_pem_password (struct script_infos *args, char *key)
 
void plug_set_ssl_CA_file (struct script_infos *args, char *key)
 

Variables

int global_nasl_debug = 0
 
gvm_vhost_t * current_vhost = NULL
 

Detailed Description

Plugin-specific stuff.

Definition in file plugutils.c.

Macro Definition Documentation

◆ G_LOG_DOMAIN

#define G_LOG_DOMAIN   "lib misc"

GLib logging domain.

Definition at line 35 of file plugutils.c.

◆ MAX_CANDIDATES

#define MAX_CANDIDATES   16

Function Documentation

◆ check_duplicated_vhost()

static int check_duplicated_vhost ( struct script_infos args,
const char *  hostname 
)
static

Check for duplicated vhosts before inserting a new one.

Parameters
argsscript info structure
hostnamehostname to check
Returns
0 if the vhosts was still not added. -1 if the vhosts already exists.

Definition at line 164 of file plugutils.c.

165 {
166  GSList *vhosts = NULL;
167  kb_t host_kb = NULL;
168  struct kb_item *current_vhosts = NULL;
169 
170  /* Check for duplicate vhost value in args. */
171  vhosts = args->vhosts;
172  while (vhosts)
173  {
174  gvm_vhost_t *tmp = vhosts->data;
175 
176  if (!strcmp (tmp->value, hostname))
177  {
178  g_warning ("%s: Value '%s' exists already", __func__, hostname);
179  return -1;
180  }
181  vhosts = vhosts->next;
182  }
183 
184  /* Check for duplicate vhost value already added by other forked child of the
185  * same plugin. */
186  host_kb = args->key;
187  current_vhosts = kb_item_get_all (host_kb, "internal/vhosts");
188  if (!current_vhosts)
189  return 0;
190 
191  while (current_vhosts)
192  {
193  if (!strcmp (current_vhosts->v_str, hostname))
194  {
195  g_warning ("%s: Value '%s' exists already", __func__, hostname);
196  kb_item_free (current_vhosts);
197 
198  return -1;
199  }
200  current_vhosts = current_vhosts->next;
201  }
202 
203  kb_item_free (current_vhosts);
204  return 0;
205 }

References host_kb, hostname, script_infos::key, and script_infos::vhosts.

Referenced by plug_add_host_fqdn().

Here is the caller graph for this function:

◆ check_kb_inconsistency()

int check_kb_inconsistency ( kb_t  main_kb)

Check if the current main kb corresponds to the original scan main kb. @description Compares the scan id in get_scan_id, set at the beginning of the scan, with the one found in the main kb. Therefore it is mandatory that the global main_kb variable to be set. It helps to detect that the kb was not taken by another task/scan, and that the current plugins does not stores results in a wrong kb.

Parameters
main_kbCurrent main kb.
Returns
0 on success, -1 on missing global scan_id, -2 on missing current_scan_id, -3 when inconsistent.

Definition at line 387 of file plugutils.c.

388 {
389  const char *original_scan_id;
390  char *current_scan_id;
391 
392  original_scan_id = get_scan_id ();
393  if (original_scan_id == NULL)
394  return -1;
395  current_scan_id = kb_item_get_str (main_kb, ("internal/scanid"));
396  if (current_scan_id == NULL)
397  return -2;
398 
399  if (!g_strcmp0 (original_scan_id, current_scan_id))
400  {
401  g_free (current_scan_id);
402  return 0;
403  }
404 
405  g_warning ("KB inconsitency. %s writing into %s KB", original_scan_id,
406  current_scan_id);
407  g_free (current_scan_id);
408  return -3;
409 }

References get_scan_id(), and main_kb.

Referenced by attack_host(), check_kb_inconsistency_log(), and set_scan_status().

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

◆ check_kb_inconsistency_log()

static int check_kb_inconsistency_log ( void  )
static

calls check_kb_inconsistency and logs as debug when local scan_id is missing.

@description Compares the scan id in get_scan_id, set at the beginning of the scan, with the one found in the main kb. Therefore it is mandatory that the global main_kb variable to be set. It helps to detect that the kb was not taken by another task/scan, and that the current plugins does not stores results in a wrong kb.

Returns
0 on success, -1 on inconsistency.

Definition at line 426 of file plugutils.c.

427 {
428  char *current_scan_id;
429  kb_t kb = get_main_kb ();
430  int result = check_kb_inconsistency (kb);
431  switch (result)
432  {
433  case -3:
434  current_scan_id = kb_item_get_str (kb, ("internal/scanid"));
435  g_warning (
436  "%s: scan_id (%s) does not match global scan_id (%s); abort to "
437  "prevent data corruption",
438  __func__, current_scan_id, get_scan_id ());
439  g_free (current_scan_id);
440  _exit (1);
441  break;
442  case -1:
443  // a call without global scan id can happen in e.g. nasl-lint or
444  // openvas-nasl calls
445  break;
446  case -2:
447  g_warning (
448  "%s: No internal/scanid found; abort to prevent data corruption.",
449  __func__);
450  _exit (1);
451  break;
452  default:
453  {
454  // nothing
455  }
456  }
457  return 0;
458 }

References check_kb_inconsistency(), get_main_kb(), and get_scan_id().

Referenced by kb_item_add_int_unique_with_main_kb_check(), kb_item_add_int_with_main_kb_check(), kb_item_add_str_unique_with_main_kb_check(), kb_item_push_str_with_main_kb_check(), kb_item_set_int_with_main_kb_check(), and kb_item_set_str_with_main_kb_check().

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

◆ get_plugin_preference()

char* get_plugin_preference ( const char *  oid,
const char *  name,
int  pref_id 
)

Get the a plugins preference.

Search in the preferences set by the client. If it is not present, search in redis cache for the default.

Parameters
[in]oidScript OID to get the preference from
[in]nameName of the preference to get
[in]pref_idId of the preferences to get
Returns
script preference on success, Null otherwise.

Definition at line 743 of file plugutils.c.

744 {
745  GHashTable *prefs;
746  GHashTableIter iter;
747  char *cname = NULL, *retval = NULL;
748  void *itername, *itervalue;
749  char prefix[1024], suffix[1024];
750 
751  prefs = preferences_get ();
752  if (!prefs || !nvticache_initialized () || !oid || (!name && pref_id < 0))
753  return NULL;
754 
755  g_hash_table_iter_init (&iter, prefs);
756 
757  if (pref_id >= 0)
758  {
759  snprintf (prefix, sizeof (prefix), "%s:%d:", oid, pref_id);
760  while (g_hash_table_iter_next (&iter, &itername, &itervalue))
761  {
762  if (g_str_has_prefix (itername, prefix))
763  {
764  retval = g_strdup (itervalue);
765  break;
766  }
767  }
768  }
769  else
770  {
771  cname = g_strdup (name);
772  g_strchomp (cname);
773  snprintf (prefix, sizeof (prefix), "%s:", oid);
774  snprintf (suffix, sizeof (suffix), ":%s", cname);
775  /* NVT preferences received in OID:PrefID:PrefType:PrefName form */
776  while (g_hash_table_iter_next (&iter, &itername, &itervalue))
777  {
778  if (g_str_has_prefix (itername, prefix)
779  && g_str_has_suffix (itername, suffix))
780  {
781  retval = g_strdup (itervalue);
782  break;
783  }
784  }
785  }
786 
787  /* If no value set by the user, get the default one. */
788  if (!retval)
789  {
790  GSList *nprefs, *tmp;
791 
792  tmp = nprefs = nvticache_get_prefs (oid);
793  while (tmp)
794  {
795  if ((cname && !strcmp (cname, nvtpref_name (tmp->data)))
796  || (pref_id >= 0 && pref_id == nvtpref_id (tmp->data)))
797  {
798  if (!strcmp (nvtpref_type (tmp->data), "radio"))
799  {
800  char **opts =
801  g_strsplit (nvtpref_default (tmp->data), ";", -1);
802 
803  retval = g_strdup (opts[0]);
804  g_strfreev (opts);
805  }
806  else
807  retval = g_strdup (nvtpref_default (tmp->data));
808 
809  break;
810  }
811  tmp = tmp->next;
812  }
813  g_slist_free_full (nprefs, (void (*) (void *)) nvtpref_free);
814  }
815  if (cname)
816  g_free (cname);
817  return retval;
818 }

References name, oid, and prefix().

Referenced by plugin_do_run(), plugin_run_find_service(), plugin_timeout(), script_get_preference(), script_get_preference_file_content(), script_get_preference_file_location(), and user_agent_create().

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

◆ get_plugin_preference_file_content()

char* get_plugin_preference_file_content ( struct script_infos desc,
const char *  identifier 
)

Get the file contents of a plugins preference that is of type "file".

As files sent to the scanner (e.g. as plugin preference) are stored in a hash table with an identifier supplied by the client as the key, the contents have to be looked up here.

Parameters
identifierIdentifier that was supplied by the client when the file was uploaded.
Returns
Contents of the file identified by identifier, NULL if not found or setup broken.

Definition at line 886 of file plugutils.c.

888 {
889  struct scan_globals *globals = desc->globals;
890  GHashTable *trans;
891 
892  if (!globals)
893  return NULL;
894 
895  trans = globals->files_translation;
896  if (!trans)
897  return NULL;
898 
899  return g_hash_table_lookup (trans, identifier);
900 }

References scan_globals::files_translation, and script_infos::globals.

Referenced by get_plugin_preference_fname(), and script_get_preference_file_content().

Here is the caller graph for this function:

◆ get_plugin_preference_file_size()

long get_plugin_preference_file_size ( struct script_infos desc,
const char *  identifier 
)

Get the file size of a plugins preference that is of type "file".

Files sent to the scanner (e.g. as plugin preference) are stored in a hash table with an identifier supplied by the client as the key. The size of the file is stored in a separate hash table with the same identifier as key, which can be looked up here.

Parameters
identifierIdentifier that was supplied by the client when the file was uploaded.
Returns
Size of the file identified by identifier, -1 if not found or setup broken.

Definition at line 917 of file plugutils.c.

919 {
920  struct scan_globals *globals = desc->globals;
921  GHashTable *trans;
922  gchar *filesize_str;
923 
924  if (!globals)
925  return -1;
926 
927  trans = globals->files_size_translation;
928  if (!trans)
929  return -1;
930 
931  filesize_str = g_hash_table_lookup (trans, identifier);
932  if (filesize_str == NULL)
933  return -1;
934 
935  return atol (filesize_str);
936 }

References scan_globals::files_size_translation, and script_infos::globals.

Referenced by get_plugin_preference_fname(), and script_get_preference_file_content().

Here is the caller graph for this function:

◆ get_plugin_preference_fname()

const char* get_plugin_preference_fname ( struct script_infos desc,
const char *  filename 
)

Get the file name of a plugins preference that is of type "file".

As files sent to the server (e.g. as plugin preference) are stored at pseudo-random locations with different names, the "real" file name has to be looked up in a hashtable.

Returns
Filename on disc for filename, NULL if not found or setup broken.

Definition at line 831 of file plugutils.c.

832 {
833  const char *content;
834  long contentsize = 0;
835  gint tmpfile;
836  gchar *tmpfilename;
837  GError *error = NULL;
838 
839  content = get_plugin_preference_file_content (desc, filename);
840  if (content == NULL)
841  {
842  return NULL;
843  }
844  contentsize = get_plugin_preference_file_size (desc, filename);
845  if (contentsize <= 0)
846  return NULL;
847 
848  tmpfile =
849  g_file_open_tmp ("openvas-file-upload.XXXXXX", &tmpfilename, &error);
850  if (tmpfile == -1)
851  {
852  g_message ("get_plugin_preference_fname: Could not open temporary"
853  " file for %s: %s",
854  filename, error->message);
855  g_error_free (error);
856  return NULL;
857  }
858  close (tmpfile);
859 
860  if (!g_file_set_contents (tmpfilename, content, contentsize, &error))
861  {
862  g_message ("get_plugin_preference_fname: could set contents of"
863  " temporary file for %s: %s",
864  filename, error->message);
865  g_error_free (error);
866  return NULL;
867  }
868 
869  return tmpfilename;
870 }

References get_plugin_preference_file_content(), and get_plugin_preference_file_size().

Referenced by plugin_run_find_service(), and script_get_preference_file_location().

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

◆ host_add_port_proto()

static void host_add_port_proto ( struct script_infos args,
int  portnum,
char *  proto 
)
static

Definition at line 75 of file plugutils.c.

76 {
77  char port_s[255];
78  snprintf (port_s, sizeof (port_s), "Ports/%s/%d", proto, portnum);
79  plug_set_key (args, port_s, ARG_INT, (void *) 1);
80 }

References ARG_INT, and plug_set_key().

Referenced by scanner_add_port().

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

◆ host_get_port_state()

int host_get_port_state ( struct script_infos plugdata,
int  portnum 
)

Definition at line 144 of file plugutils.c.

145 {
146  return (host_get_port_state_proto (plugdata, portnum, "tcp"));
147 }

References host_get_port_state_proto().

Referenced by get_port_state(), and open_sock_tcp().

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

◆ host_get_port_state_proto()

static int host_get_port_state_proto ( struct script_infos args,
int  portnum,
char *  proto 
)
static

Definition at line 138 of file plugutils.c.

139 {
140  return kb_get_port_state_proto (args->key, portnum, proto);
141 }

References kb_get_port_state_proto(), and script_infos::key.

Referenced by host_get_port_state(), and host_get_port_state_udp().

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

◆ host_get_port_state_udp()

int host_get_port_state_udp ( struct script_infos plugdata,
int  portnum 
)

Definition at line 150 of file plugutils.c.

151 {
152  return (host_get_port_state_proto (plugdata, portnum, "udp"));
153 }

References host_get_port_state_proto().

Referenced by get_udp_port_state().

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

◆ kb_get_port_state_proto()

int kb_get_port_state_proto ( kb_t  kb,
int  portnum,
char *  proto 
)
Parameters
protoProtocol (udp/tcp). If NULL, "tcp" will be used.

Definition at line 100 of file plugutils.c.

101 {
102  char port_s[255], *kbstr;
103  const char *prange = prefs_get ("port_range");
104  port_protocol_t port_type;
105  array_t *port_ranges;
106 
107  if (!proto)
108  proto = "tcp";
109  if (!strcmp (proto, "udp"))
110  {
111  port_type = PORT_PROTOCOL_UDP;
112  kbstr = "Host/udp_scanned";
113  }
114  else
115  {
116  port_type = PORT_PROTOCOL_TCP;
117  kbstr = "Host/scanned";
118  }
119 
120  /* Check that we actually scanned the port */
121  if (kb_item_get_int (kb, kbstr) <= 0)
122  return unscanned_ports_as_closed (port_type);
123 
124  port_ranges = port_range_ranges (prange);
125  if (!port_in_port_ranges (portnum, port_type, port_ranges))
126  {
127  array_free (port_ranges);
128  return unscanned_ports_as_closed (port_type);
129  }
130  array_free (port_ranges);
131 
132  /* Ok, we scanned it. What is its state ? */
133  snprintf (port_s, sizeof (port_s), "Ports/%s/%d", proto, portnum);
134  return kb_item_get_int (kb, port_s) > 0;
135 }

References unscanned_ports_as_closed().

Referenced by get_closed_ports(), and host_get_port_state_proto().

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

◆ kb_item_add_int_unique_with_main_kb_check()

int kb_item_add_int_unique_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_add_int_unique. @description Compares the scan id in get_scan_id, add at the beginning of the scan, with the one found in the main kb. Therefore it is mandatory that the global main_kb variable to be set. It helps to detect that the kb was not taken by another task/scan, and that the current plugins does not stores results in a wrong kb.

Parameters
kbKb where to store the item into.
namekey for the given value.
valueto store under key within kb.
Returns
0 on success, -1 on inconsistency.

Definition at line 602 of file plugutils.c.

603 {
604  int result = check_kb_inconsistency_log ();
605  return result == 0 ? kb_item_add_int_unique (kb, name, value) : -1;
606 }

References check_kb_inconsistency_log(), and name.

Referenced by set_kb_readable().

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

◆ kb_item_add_int_with_main_kb_check()

int kb_item_add_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_add_int. @description Compares the scan id in get_scan_id, add at the beginning of the scan, with the one found in the main kb. Therefore it is mandatory that the global main_kb variable to be set. It helps to detect that the kb was not taken by another task/scan, and that the current plugins does not stores results in a wrong kb.

Parameters
kbKb where to store the item into.
namekey for the given value.
valueto store under key within kb.
Returns
0 on success, -1 on inconsistency.

Definition at line 578 of file plugutils.c.

579 {
580  int result = check_kb_inconsistency_log ();
581  return result == 0 ? kb_item_add_int (kb, name, value) : -1;
582 }

References check_kb_inconsistency_log(), and name.

Here is the call graph for this function:

◆ kb_item_add_str_unique_with_main_kb_check()

int kb_item_add_str_unique_with_main_kb_check ( kb_t  kb,
const char *  name,
const char *  value,
size_t  len,
int  pos 
)

Check if the current kb corresponds to the original scanid, if it matches it call kb_item_add_str_unique. @description Compares the scan id in get_scan_id, set at the beginning of the scan, with the one found in the main kb. Therefore it is mandatory that the global main_kb variable to be set. It helps to detect that the kb was not taken by another task/scan, and that the current plugins does not stores results in a wrong kb.

Parameters
kbKb where to store the item into.
namekey for the given value.
valueto store under key within kb.
Returns
0 on success, -1 on inconsistency.

Definition at line 528 of file plugutils.c.

531 {
532  int result = check_kb_inconsistency_log ();
533  return result == 0 ? kb_item_add_str_unique (kb, name, value, len, pos) : -1;
534 }

References check_kb_inconsistency_log(), len, and name.

Here is the call graph for this function:

◆ kb_item_push_str_with_main_kb_check()

int kb_item_push_str_with_main_kb_check ( kb_t  kb,
const char *  name,
const char *  value 
)

Check if the current kb corresponds to the original scanid, if it matches it kb_item_push_str. @description Compares the scan id in get_scan_id, set at the beginning of the scan, with the one found in the main kb. Therefore it is mandatory that the global main_kb variable to be set. It helps to detect that the kb was not taken by another task/scan, and that the current plugins does not stores results in a wrong kb.

Parameters
kbKb where to store the item into.
namekey for the given value.
valueto store under key within kb.
Returns
0 on success, -1 on inconsistency.

Definition at line 478 of file plugutils.c.

480 {
481  int result = check_kb_inconsistency_log ();
482  return result == 0 ? kb_item_push_str (kb, name, value) : -1;
483 }

References check_kb_inconsistency_log(), and name.

Referenced by attack_host(), comm_send_status(), comm_send_status_host_dead(), host_set_time(), message_to_client(), open_sock_tcp(), proto_post_wrapped(), and update_running_processes().

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

◆ kb_item_set_int_with_main_kb_check()

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. @description Compares the scan id in get_scan_id, set at the beginning of the scan, with the one found in the main kb. Therefore it is mandatory that the global main_kb variable to be set. It helps to detect that the kb was not taken by another task/scan, and that the current plugins does not stores results in a wrong kb.

Parameters
kbKb where to store the item into.
namekey for the given value.
valueto store under key within kb.
Returns
0 on success, -1 on inconsistency.

Definition at line 554 of file plugutils.c.

555 {
556  int result = check_kb_inconsistency_log ();
557  return result == 0 ? kb_item_set_int (kb, name, value) : -1;
558 }

References check_kb_inconsistency_log(), and name.

Referenced by check_host_still_alive(), open_sock_tcp(), and overwrite_openvas_prefs_with_prefs_from_client().

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

◆ kb_item_set_str_with_main_kb_check()

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. @description Compares the scan id in get_scan_id, set at the beginning of the scan, with the one found in the main kb. Therefore it is mandatory that the global main_kb variable to be set. It helps to detect that the kb was not taken by another task/scan, and that the current plugins does not stores results in a wrong kb.

Parameters
kbKb where to store the item into.
namekey for the given value.
valueto store under key within kb.
Returns
0 on success, -1 on inconsistency.

Definition at line 503 of file plugutils.c.

505 {
506  int result = check_kb_inconsistency_log ();
507  return result == 0 ? kb_item_set_str (kb, name, value, len) : -1;
508 }

References check_kb_inconsistency_log(), len, and name.

Referenced by attack_start(), overwrite_openvas_prefs_with_prefs_from_client(), and set_scan_status().

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

◆ msg_type_to_str()

static const char* msg_type_to_str ( msg_t  type)
static

Return string representation of the given msg_t.

Parameters
msgmsg_t to transform
Returns
string representation of the given msg_t if successful, else NULL.

Definition at line 335 of file plugutils.c.

336 {
337  gchar *type_str;
338 
339  switch (type)
340  {
341  case ERRMSG:
342  type_str = "ERRMSG";
343  break;
344  case HOST_START:
345  type_str = "HOST_START";
346  break;
347  case HOST_END:
348  type_str = "HOST_END";
349  break;
350  case LOG:
351  type_str = "LOG";
352  break;
353  case HOST_DETAIL:
354  type_str = "HOST_DETAIL";
355  break;
356  case ALARM:
357  type_str = "ALARM";
358  break;
359  case DEADHOST:
360  type_str = "DEADHOST";
361  break;
362  default:
363  return NULL;
364  break;
365  }
366 
367  return type_str;
368 }

References ALARM, DEADHOST, ERRMSG, HOST_DETAIL, HOST_END, HOST_START, and LOG.

Referenced by proto_post_wrapped().

Here is the caller graph for this function:

◆ plug_add_host_fqdn()

int plug_add_host_fqdn ( struct script_infos args,
const char *  hostname,
const char *  source 
)

Definition at line 208 of file plugutils.c.

210 {
211  gvm_vhost_t *vhost;
212  char **excluded;
213 
214  if (!prefs_get_bool ("expand_vhosts") || !hostname || !source)
215  return -1;
216 
217  if (check_duplicated_vhost (args, hostname))
218  return -1;
219 
220  /* Check for excluded vhost value. */
221  if (prefs_get ("exclude_hosts"))
222  {
223  char **tmp = excluded = g_strsplit (prefs_get ("exclude_hosts"), ",", 0);
224 
225  while (*tmp)
226  {
227  if (!strcmp (g_strstrip (*tmp), hostname))
228  {
229  g_strfreev (excluded);
230  return -1;
231  }
232  tmp++;
233  }
234  g_strfreev (excluded);
235  }
236  vhost = gvm_vhost_new (g_strdup (hostname), g_strdup (source));
237  args->vhosts = g_slist_prepend (args->vhosts, vhost);
238  return 0;
239 }

References check_duplicated_vhost(), hostname, and script_infos::vhosts.

Referenced by add_hostname().

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

◆ plug_current_vhost()

const char* plug_current_vhost ( void  )

Definition at line 47 of file plugutils.c.

48 {
49  return current_vhost->value;
50 }

References current_vhost.

Referenced by nasl_end_denial(), and open_sock_tcp().

Here is the caller graph for this function:

◆ plug_fork_child()

static int plug_fork_child ( kb_t  kb)
static

Spawns a new child process. Setups everything that is needed for a new process. Child must be handled by caller.

Parameters
kbfor redis connection
Returns
int 0 for the child process, 1 for the parent process and -1 on failure

Definition at line 1089 of file plugutils.c.

1090 {
1091  pid_t pid;
1092 
1093  // TODO change forking to official channels
1094  if ((pid = fork ()) == 0)
1095  {
1096  sig_n (SIGTERM, _exit);
1097  mqtt_reset ();
1098  kb_lnk_reset (kb);
1099  kb_lnk_reset (get_main_kb ());
1100  nvticache_reset ();
1101  srand48 (getpid () + getppid () + time (NULL));
1102  return 0;
1103  }
1104  else if (pid < 0)
1105  {
1106  g_warning ("%s(): fork() failed (%s)", __func__, strerror (errno));
1107  return -1;
1108  }
1109  else
1110  // the parent waits for the spawned process to finish to prevent DDOS on a
1111  // host when multiple vhosts got spawned
1112  waitpid (pid, NULL, 0);
1113  return 1;
1114 }

References get_main_kb(), pid, and sig_n().

Referenced by plug_get_host_fqdn(), and plug_get_key().

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

◆ plug_get_host_fqdn()

char* plug_get_host_fqdn ( struct script_infos args)

Definition at line 242 of file plugutils.c.

243 {
244  GSList *vhosts = args->vhosts;
245 
246  if (!args->vhosts)
247  return addr6_as_str (args->ip);
248 
249  /* Workaround for rapid growth of forked processes ie. http_get() calls
250  * within foreach() loops. */
251  if (current_vhost)
252  return g_strdup (current_vhost->value);
253  while (vhosts)
254  {
255  int ret = plug_fork_child (args->key);
256 
257  if (ret == 0)
258  {
259  current_vhost = vhosts->data;
260  return g_strdup (current_vhost->value);
261  }
262  else if (ret == -1)
263  return NULL;
264  vhosts = vhosts->next;
265  }
266  _exit (0);
267 }

References current_vhost, script_infos::ip, script_infos::key, plug_fork_child(), and script_infos::vhosts.

Referenced by _http_req(), get_hostname(), open_stream_connection_ext(), plug_get_host_source(), plugin_do_run(), retry_stream_connection(), and socket_negotiate_ssl().

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

◆ plug_get_host_fqdn_list()

GSList* plug_get_host_fqdn_list ( struct script_infos args)

Definition at line 270 of file plugutils.c.

271 {
272  GSList *results = NULL, *vhosts = args->vhosts;
273 
274  if (!args->vhosts)
275  results = g_slist_prepend (results, addr6_as_str (args->ip));
276 
277  while (vhosts)
278  {
279  gvm_vhost_t *vhost = vhosts->data;
280 
281  results = g_slist_prepend (results, g_strdup (vhost->value));
282  vhosts = vhosts->next;
283  }
284  return results;
285 }

References script_infos::ip, and script_infos::vhosts.

Referenced by get_hostnames().

Here is the caller graph for this function:

◆ plug_get_host_ip()

◆ plug_get_host_ip_str()

char* plug_get_host_ip_str ( struct script_infos desc)

Definition at line 322 of file plugutils.c.

323 {
324  return addr6_as_str (plug_get_host_ip (desc));
325 }

References plug_get_host_ip().

Referenced by nasl_snmpv1v2c_get(), nasl_snmpv3_get_action(), open_sock_tcp(), and socket_negotiate_ssl().

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

◆ plug_get_host_open_port()

unsigned int plug_get_host_open_port ( struct script_infos desc)

Don't always return the first open port, otherwise we might get bitten by OSes doing active SYN flood countermeasures. Also, avoid returning 80 and 21 as open ports, as many transparent proxies are acting for these...

Definition at line 1220 of file plugutils.c.

1221 {
1222  kb_t kb = plug_get_kb (desc);
1223  struct kb_item *res, *k;
1224  int open21 = 0, open80 = 0;
1225 #define MAX_CANDIDATES 16
1226  u_short candidates[MAX_CANDIDATES];
1227  int num_candidates = 0;
1228 
1229  k = res = kb_item_get_pattern (kb, "Ports/tcp/*");
1230  if (res == NULL)
1231  return 0;
1232  else
1233  {
1234  int ret;
1235  char *s;
1236 
1237  for (;;)
1238  {
1239  s = res->name + sizeof ("Ports/tcp/") - 1;
1240  ret = atoi (s);
1241  if (ret == 21)
1242  open21 = 1;
1243  else if (ret == 80)
1244  open80 = 1;
1245  else
1246  {
1247  candidates[num_candidates++] = ret;
1248  if (num_candidates >= MAX_CANDIDATES)
1249  break;
1250  }
1251  res = res->next;
1252  if (res == NULL)
1253  break;
1254  }
1255 
1256  kb_item_free (k);
1257  if (num_candidates != 0)
1258  return candidates[lrand48 () % num_candidates];
1259  else if (open21)
1260  return 21;
1261  else if (open80)
1262  return 80;
1263  }
1264 
1265  /* Not reachable */
1266  return 0;
1267 }

References MAX_CANDIDATES, and plug_get_kb().

Referenced by get_host_open_port(), nasl_start_denial(), nasl_tcp_ping(), and nasl_tcp_v6_ping().

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

◆ plug_get_host_source()

char* plug_get_host_source ( struct script_infos args,
const char *  hostname 
)

Definition at line 288 of file plugutils.c.

289 {
290  if (!args->vhosts)
291  return g_strdup ("IP-address");
292 
293  if (hostname)
294  {
295  GSList *vhosts = args->vhosts;
296 
297  /* Search for source of specified hostname/vhost. */
298  while (vhosts)
299  {
300  gvm_vhost_t *vhost = vhosts->data;
301 
302  if (!strcmp (vhost->value, hostname))
303  return g_strdup (vhost->source);
304  vhosts = vhosts->next;
305  }
306  return NULL;
307  }
308  /* Call plug_get_host_fqdn() to set current_vhost (and fork, in case of
309  * multiple vhosts.) */
310  if (!current_vhost)
311  g_free (plug_get_host_fqdn (args));
312  return g_strdup (current_vhost->source);
313 }

References current_vhost, hostname, plug_get_host_fqdn(), and script_infos::vhosts.

Referenced by get_hostname_source().

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

◆ plug_get_kb()

◆ plug_get_key()

void* plug_get_key ( struct script_infos args,
char *  name,
int *  type,
size_t *  len,
int  single 
)

Get values from a kb under the given key name.

Parameters
[in]argsThe script infos where to get the kb from.
[in]nameKey name to search in the kb.
[in/out]type If 1 is given, the answer is forced to be KB_TYPE_INT type. Otherwise it returns the fetched type.
[in]lenDesired string length to be returned.
[in]singleIn case of a list, fetch only the last element
Returns
Null if no result, or a void pointer to the result in success.

Definition at line 1129 of file plugutils.c.

1131 {
1132  kb_t kb = args->key;
1133  struct kb_item *res = NULL, *res_list;
1134 
1135  if (type != NULL && *type != KB_TYPE_INT)
1136  *type = -1;
1137 
1138  if (kb == NULL)
1139  return NULL;
1140 
1141  if (single && type != NULL && *type != KB_TYPE_INT)
1142  res = kb_item_get_single (kb, name, KB_TYPE_UNSPEC);
1143  else if (type != NULL && *type == KB_TYPE_INT)
1144  res = kb_item_get_single (kb, name, KB_TYPE_INT);
1145  else
1146  res = kb_item_get_all (kb, name);
1147 
1148  if (res == NULL)
1149  return NULL;
1150 
1151  if (!res->next) /* No fork - good */
1152  {
1153  void *ret;
1154  if (res->type == KB_TYPE_INT)
1155  {
1156  if (type != NULL)
1157  *type = KB_TYPE_INT;
1158  ret = g_memdup2 (&res->v_int, sizeof (res->v_int));
1159  }
1160  else
1161  {
1162  if (type != NULL)
1163  *type = KB_TYPE_STR;
1164  if (len)
1165  *len = res->len;
1166 
1167  ret = g_malloc0 (res->len + 1);
1168  memcpy (ret, res->v_str, res->len + 1);
1169  }
1170  kb_item_free (res);
1171  return ret;
1172  }
1173 
1174  /* More than one value - we will fork() then */
1175  sig_n (SIGCHLD, plug_get_key_sigchld);
1176  res_list = res;
1177  while (res)
1178  {
1179  int pret = plug_fork_child (kb);
1180 
1181  if (pret == 0)
1182  {
1183  /* Forked child. */
1184  void *ret;
1185 
1186  if (res->type == KB_TYPE_INT)
1187  {
1188  if (type != NULL)
1189  *type = KB_TYPE_INT;
1190  ret = g_memdup2 (&res->v_int, sizeof (res->v_int));
1191  }
1192  else
1193  {
1194  if (type != NULL)
1195  *type = KB_TYPE_STR;
1196  if (len)
1197  *len = res->len;
1198 
1199  ret = g_malloc0 (res->len + 1);
1200  memcpy (ret, res->v_str, res->len + 1);
1201  }
1202  kb_item_free (res_list);
1203  return ret;
1204  }
1205  else if (pret == -1)
1206  return NULL;
1207  res = res->next;
1208  }
1209  kb_item_free (res_list);
1210  _exit (0);
1211 }

References script_infos::key, len, name, plug_fork_child(), plug_get_key_sigchld(), and sig_n().

Referenced by banner_grab(), get_kb_item(), get_ssh_port(), nasl_open_sock_kdc(), and plugin_do_run().

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

◆ plug_get_key_sigchld()

static void plug_get_key_sigchld ( int  s)
static

Definition at line 1061 of file plugutils.c.

1062 {
1063  int status;
1064  (void) s;
1065 
1066  wait (&status);
1067 }

Referenced by plug_get_key().

Here is the caller graph for this function:

◆ plug_get_port_transport()

int plug_get_port_transport ( struct script_infos args,
int  port 
)

Definition at line 1288 of file plugutils.c.

1289 {
1290  char s[256];
1291  int trp;
1292 
1293  snprintf (s, sizeof (s), "Transports/TCP/%d", port);
1294  trp = kb_item_get_int (plug_get_kb (args), s);
1295  if (trp >= 0)
1296  return trp;
1297  else
1298  return OPENVAS_ENCAPS_IP; /* Change this to 0 for ultra smart SSL
1299  negotiation, at the expense of possibly
1300  breaking stuff */
1301 }

References OPENVAS_ENCAPS_IP, and plug_get_kb().

Referenced by get_port_transport(), and open_stream_auto_encaps_ext().

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

◆ plug_replace_key()

◆ plug_replace_key_len()

void plug_replace_key_len ( struct script_infos args,
char *  name,
int  type,
void *  value,
size_t  len 
)

Definition at line 1020 of file plugutils.c.

1022 {
1023  kb_t kb = plug_get_kb (args);
1024 
1025  if (name == NULL || value == NULL)
1026  return;
1027 
1028  if (type == ARG_STRING)
1029  kb_item_set_str (kb, name, value, len);
1030  else if (type == ARG_INT)
1031  kb_item_set_int (kb, name, GPOINTER_TO_SIZE (value));
1032  if (global_nasl_debug == 1)
1033  {
1034  if (type == ARG_STRING)
1035  g_message ("replace key %s -> %s", name, (char *) value);
1036  else if (type == ARG_INT)
1037  g_message ("replace key %s -> %d", name,
1038  (int) GPOINTER_TO_SIZE (value));
1039  }
1040 }

References ARG_INT, ARG_STRING, global_nasl_debug, len, name, and plug_get_kb().

Referenced by plug_replace_key(), and replace_kb_item().

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

◆ plug_set_dep()

void plug_set_dep ( struct script_infos args,
const char *  depname 
)

Definition at line 55 of file plugutils.c.

56 {
57  nvti_t *n = args->nvti;
58  gchar *old = nvti_dependencies (n);
59  gchar *new;
60 
61  if (!depname)
62  return;
63 
64  if (old)
65  {
66  new = g_strdup_printf ("%s, %s", old, depname);
67  nvti_set_dependencies (n, new);
68  g_free (new);
69  }
70  else
71  nvti_set_dependencies (n, depname);
72 }

References script_infos::nvti.

Referenced by script_dependencies().

Here is the caller graph for this function:

◆ plug_set_key()

void plug_set_key ( struct script_infos args,
char *  name,
int  type,
const void *  value 
)

Definition at line 962 of file plugutils.c.

964 {
965  plug_set_key_len (args, name, type, value, 0);
966 }

References name, and plug_set_key_len().

Referenced by banner_grab(), host_add_port_proto(), mark_unknown_svc(), mark_wrapped_svc(), plug_set_port_transport(), plug_set_ssl_item(), plugin_do_run(), plugin_run_openvas_tcp_scanner(), plugin_run_synscan(), register_service(), scan(), set_kb_item(), and simple_register_host_detail().

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

◆ plug_set_key_len()

void plug_set_key_len ( struct script_infos args,
char *  name,
int  type,
const void *  value,
size_t  len 
)

Definition at line 939 of file plugutils.c.

941 {
942  kb_t kb = plug_get_kb (args);
943  int pos = 0; // Append the item on the right position of the list
944 
945  if (name == NULL || value == NULL)
946  return;
947 
948  if (type == ARG_STRING)
949  kb_item_add_str_unique (kb, name, value, len, pos);
950  else if (type == ARG_INT)
951  kb_item_add_int_unique (kb, name, GPOINTER_TO_SIZE (value));
952  if (global_nasl_debug == 1)
953  {
954  if (type == ARG_STRING)
955  g_message ("set key %s -> %s", name, (char *) value);
956  else if (type == ARG_INT)
957  g_message ("set key %s -> %d", name, (int) GPOINTER_TO_SIZE (value));
958  }
959 }

References ARG_INT, ARG_STRING, global_nasl_debug, len, name, and plug_get_kb().

Referenced by plug_set_key(), and set_kb_item().

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

◆ plug_set_key_len_volatile()

void plug_set_key_len_volatile ( struct script_infos args,
char *  name,
int  type,
const void *  value,
int  expire,
size_t  len 
)

Set volatile key with expire.

Parameters
argsScript infos.
nameKey name.
typeKey type.
valueKey value.
expireKey expire in seconds.
lenLen of value.

Definition at line 979 of file plugutils.c.

981 {
982  kb_t kb = plug_get_kb (args);
983  int pos = 0; // Append the item on the right position of the list
984 
985  if (name == NULL || value == NULL || expire == -1)
986  return;
987 
988  if (type == ARG_STRING)
989  kb_add_str_unique_volatile (kb, name, value, expire, len, pos);
990  else if (type == ARG_INT)
991  kb_add_int_unique_volatile (kb, name, GPOINTER_TO_SIZE (value),
992  GPOINTER_TO_SIZE (expire));
993  if (global_nasl_debug == 1)
994  {
995  if (type == ARG_STRING)
996  g_message ("set volatile key %s -> %s", name, (char *) value);
997  else if (type == ARG_INT)
998  g_message ("set volatile key %s -> %d", name,
999  (int) GPOINTER_TO_SIZE (value));
1000  }
1001 }

References ARG_INT, ARG_STRING, global_nasl_debug, len, name, and plug_get_kb().

Referenced by plug_set_key_volatile(), and set_kb_item_volatile().

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

◆ plug_set_key_volatile()

void plug_set_key_volatile ( struct script_infos args,
char *  name,
int  type,
const void *  value,
int  expire 
)

Set volatile key with expire.

Parameters
argsScript infos.
nameKey name.
typeKey type.
valueKey value.
expireKey expire in seconds.

Definition at line 1013 of file plugutils.c.

1015 {
1016  plug_set_key_len_volatile (args, name, type, value, expire, 0);
1017 }

References name, and plug_set_key_len_volatile().

Referenced by set_kb_item_volatile().

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

◆ plug_set_port_transport()

void plug_set_port_transport ( struct script_infos args,
int  port,
int  tr 
)
Todo:
Those brain damaged functions should probably be in another file They are use to remember who speaks SSL or not

Definition at line 1275 of file plugutils.c.

1276 {
1277  char s[256];
1278 
1279  snprintf (s, sizeof (s), "Transports/TCP/%d", port);
1280  plug_set_key (args, s, ARG_INT, GSIZE_TO_POINTER (tr));
1281 }

References ARG_INT, and plug_set_key().

Referenced by open_stream_auto_encaps_ext(), and plugin_do_run().

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

◆ plug_set_ssl_CA_file()

void plug_set_ssl_CA_file ( struct script_infos args,
char *  key 
)
Todo:
Also, all plug_set_ssl*-functions set values that are only accessed in network.c:open_stream_connection under specific conditions. Check whether these conditions can actually occur. Document the functions on the way.

Definition at line 1334 of file plugutils.c.

1335 {
1336  plug_set_ssl_item (args, "CA", key);
1337 }

References plug_set_ssl_item().

Referenced by plugin_run_find_service().

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

◆ plug_set_ssl_cert()

void plug_set_ssl_cert ( struct script_infos args,
char *  cert 
)

Definition at line 1312 of file plugutils.c.

1313 {
1314  plug_set_ssl_item (args, "cert", cert);
1315 }

References plug_set_ssl_item().

Referenced by plugin_run_find_service().

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

◆ plug_set_ssl_item()

static void plug_set_ssl_item ( struct script_infos args,
char *  item,
char *  itemfname 
)
static

Definition at line 1304 of file plugutils.c.

1305 {
1306  char s[256];
1307  snprintf (s, sizeof (s), "SSL/%s", item);
1308  plug_set_key (args, s, ARG_STRING, itemfname);
1309 }

References ARG_STRING, and plug_set_key().

Referenced by plug_set_ssl_CA_file(), plug_set_ssl_cert(), plug_set_ssl_key(), and plug_set_ssl_pem_password().

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

◆ plug_set_ssl_key()

void plug_set_ssl_key ( struct script_infos args,
char *  key 
)

Definition at line 1318 of file plugutils.c.

1319 {
1320  plug_set_ssl_item (args, "key", key);
1321 }

References plug_set_ssl_item().

Referenced by plugin_run_find_service().

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

◆ plug_set_ssl_pem_password()

void plug_set_ssl_pem_password ( struct script_infos args,
char *  key 
)

Definition at line 1324 of file plugutils.c.

1325 {
1326  plug_set_ssl_item (args, "password", key);
1327 }

References plug_set_ssl_item().

Referenced by plugin_run_find_service().

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

◆ post_alarm()

void post_alarm ( const char *  oid,
struct script_infos desc,
int  port,
const char *  action,
const char *  uri 
)

Definition at line 680 of file plugutils.c.

682 {
683  proto_post_alarm (oid, desc, port, "tcp", action, uri);
684 }

References oid, and proto_post_alarm().

Referenced by mark_fssniffer(), mark_netbus_server(), mark_sub7_server(), mark_wild_shell(), and security_message().

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

◆ post_error()

void post_error ( const char *  oid,
struct script_infos desc,
int  port,
const char *  action,
const char *  uri 
)

Definition at line 724 of file plugutils.c.

726 {
727  proto_post_error (oid, desc, port, "tcp", action, uri);
728 }

References oid, and proto_post_error().

Referenced by error_message().

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

◆ post_log()

void post_log ( const char *  oid,
struct script_infos desc,
int  port,
const char *  action 
)

Post a log message about a tcp port.

Definition at line 700 of file plugutils.c.

702 {
703  proto_post_log (oid, desc, port, "tcp", action, NULL);
704 }

References oid, and proto_post_log().

Referenced by mark_acap_server(), mark_adsgone(), mark_auth_server(), mark_avotus_mm_server(), mark_BitTorrent_server(), mark_chargen_server(), mark_citrix_server(), mark_cvslockserver(), mark_cvspserver(), mark_cvsupserver(), mark_dameware_server(), mark_dictd_server(), mark_direct_connect_hub(), mark_echo_server(), mark_eggdrop_server(), mark_ens_server(), mark_exchg_routing_server(), mark_finger_server(), mark_ftp_server(), mark_fw1(), mark_giop_server(), mark_gnocatan_server(), mark_gnome14_server(), mark_gnuserv(), mark_gopher_server(), mark_http_proxy(), mark_http_server(), mark_imap_server(), mark_interscan_viruswall(), mark_ircxpro_admin_server(), mark_iss_realsecure(), mark_jabber_server(), mark_linuxconf(), mark_LISa_server(), mark_listserv_server(), mark_locked_adsubtract_server(), mark_lpd_server(), mark_lyskom_server(), mark_mldonkey(), mark_mon_server(), mark_mongodb(), mark_msdtc_server(), mark_mysql(), mark_nagiosd_server(), mark_nntp_server(), mark_ofa_express_server(), mark_pblocald_server(), mark_pbmaster_server(), mark_ph_server(), mark_pnsclient(), mark_pop3pw_server(), mark_pop_server(), mark_postgresql(), mark_ppp_daemon(), mark_psybnc(), mark_quicktime_streaming_server(), mark_remote_nc_server(), mark_rmserver(), mark_rsync(), mark_shoutcast_server(), mark_smppd_server(), mark_smtp_server(), mark_smux_server(), mark_snpp_server(), mark_socks_proxy(), mark_spamd_server(), mark_sphinxql(), mark_ssh_server(), mark_stonegate_auth_server(), mark_tcpmux_server(), mark_teamspeak2_server(), mark_telnet_server(), mark_time_server(), mark_unknown_svc(), mark_upsmon_server(), mark_uucp_server(), mark_veritas_backup(), mark_vmware_auth(), mark_vtun_server(), mark_websm_server(), mark_whois_plus2_server(), mark_wrapped_svc(), mark_zebra_server(), and plugin_do_run().

Here is the call graph for this function:

◆ post_log_with_uri()

void post_log_with_uri ( const char *  oid,
struct script_infos desc,
int  port,
const char *  action,
const char *  uri 
)

Post a log message about a tcp port with a uri.

Definition at line 710 of file plugutils.c.

712 {
713  proto_post_log (oid, desc, port, "tcp", action, uri);
714 }

References oid, and proto_post_log().

Referenced by log_message().

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

◆ proto_post_alarm()

void proto_post_alarm ( const char *  oid,
struct script_infos desc,
int  port,
const char *  proto,
const char *  action,
const char *  uri 
)

Definition at line 673 of file plugutils.c.

675 {
676  proto_post_wrapped (oid, desc, port, proto, action, ALARM, uri);
677 }

References ALARM, oid, and proto_post_wrapped().

Referenced by post_alarm(), and security_message().

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

◆ proto_post_error()

void proto_post_error ( const char *  oid,
struct script_infos desc,
int  port,
const char *  proto,
const char *  action,
const char *  uri 
)

Definition at line 717 of file plugutils.c.

719 {
720  proto_post_wrapped (oid, desc, port, proto, action, ERRMSG, uri);
721 }

References ERRMSG, oid, and proto_post_wrapped().

Referenced by error_message(), and post_error().

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

◆ proto_post_log()

void proto_post_log ( const char *  oid,
struct script_infos desc,
int  port,
const char *  proto,
const char *  action,
const char *  uri 
)

Post a log message.

Definition at line 690 of file plugutils.c.

692 {
693  proto_post_wrapped (oid, desc, port, proto, action, LOG, uri);
694 }

References LOG, oid, and proto_post_wrapped().

Referenced by log_message(), post_log(), and post_log_with_uri().

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

◆ proto_post_wrapped()

static void proto_post_wrapped ( const char *  oid,
struct script_infos desc,
int  port,
const char *  proto,
const char *  action,
msg_t  msg_type,
const char *  uri 
)
static

Post a security message (e.g. LOG, NOTE, WARNING ...).

Parameters
oidThe oid of the NVT
descThe script infos where to get settings.
portPort number related to the issue.
protoProtocol related to the issue (tcp or udp).
actionThe actual result text
msg_typeThe message type.
uriLocation like file path or webservice URL.

Definition at line 620 of file plugutils.c.

623 {
624  const char *hostname = "";
625  char *buffer, *data, port_s[16] = "general";
626  char ip_str[INET6_ADDRSTRLEN];
627  GError *err = NULL;
628  GString *action_str;
629  gsize length;
630 
631  /* Should not happen, just to avoid trouble stop here if no NVTI found */
632  if (!oid)
633  return;
634 
635  if (action == NULL)
636  action_str = g_string_new ("");
637  else
638  {
639  action_str = g_string_new (action);
640  g_string_append (action_str, "\n");
641  }
642 
643  if (port > 0)
644  snprintf (port_s, sizeof (port_s), "%d", port);
645  if (current_vhost)
646  hostname = current_vhost->value;
647  else if (desc->vhosts)
648  hostname = ((gvm_vhost_t *) desc->vhosts->data)->value;
649  addr6_to_str (plug_get_host_ip (desc), ip_str);
650  buffer = g_strdup_printf ("%s|||%s|||%s|||%s/%s|||%s|||%s|||%s",
651  msg_type_to_str (msg_type), ip_str,
652  hostname ? hostname : " ", port_s, proto, oid,
653  action_str->str, uri ? uri : "");
654  /* Convert to UTF-8 before sending to Manager. */
655  data = g_convert (buffer, -1, "UTF-8", "ISO_8859-1", NULL, &length, &err);
656  if (!data)
657  {
658  g_warning ("%s: Error converting to UTF-8: %s\nOriginal string: %s",
659  __func__, err->message, buffer);
660  g_free (buffer);
661  g_string_free (action_str, TRUE);
662  return;
663  }
664 
665  kb_item_push_str_with_main_kb_check (get_main_kb (), "internal/results",
666  data);
667  g_free (data);
668  g_free (buffer);
669  g_string_free (action_str, TRUE);
670 }

References current_vhost, get_main_kb(), hostname, kb_item_push_str_with_main_kb_check(), length, msg_type_to_str(), oid, plug_get_host_ip(), and script_infos::vhosts.

Referenced by proto_post_alarm(), proto_post_error(), and proto_post_log().

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

◆ scanner_add_port()

void scanner_add_port ( struct script_infos args,
int  port,
char *  proto 
)

Definition at line 1049 of file plugutils.c.

1050 {
1051  host_add_port_proto (args, port, proto);
1052 }

References host_add_port_proto().

Referenced by banner_grab(), nasl_scanner_add_port(), sendpacket(), and v6_sendpacket().

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

◆ sig_n()

static void sig_n ( int  signo,
void(*)(int)  fnc 
)
static

Definition at line 1070 of file plugutils.c.

1071 {
1072  struct sigaction sa;
1073 
1074  sa.sa_handler = fnc;
1075  sa.sa_flags = 0;
1076  sigemptyset (&sa.sa_mask);
1077  sigaction (signo, &sa, (struct sigaction *) 0);
1078 }

Referenced by plug_fork_child(), and plug_get_key().

Here is the caller graph for this function:

◆ unscanned_ports_as_closed()

static int unscanned_ports_as_closed ( port_protocol_t  ptype)
static

Report state of preferences "unscanned_closed".

Returns
0 if pref is "yes", 1 otherwise.

Definition at line 88 of file plugutils.c.

89 {
90  if (ptype == PORT_PROTOCOL_UDP)
91  return (prefs_get_bool ("unscanned_closed_udp") ? 0 : 1);
92 
93  return (prefs_get_bool ("unscanned_closed") ? 0 : 1);
94 }

Referenced by kb_get_port_state_proto().

Here is the caller graph for this function:

Variable Documentation

◆ current_vhost

gvm_vhost_t* current_vhost = NULL

◆ global_nasl_debug

int global_nasl_debug = 0
check_duplicated_vhost
static int check_duplicated_vhost(struct script_infos *args, const char *hostname)
Check for duplicated vhosts before inserting a new one.
Definition: plugutils.c:164
plug_set_key_len_volatile
void plug_set_key_len_volatile(struct script_infos *args, char *name, int type, const void *value, int expire, size_t len)
Set volatile key with expire.
Definition: plugutils.c:979
script_infos::ip
struct in6_addr * ip
Definition: scanneraux.h:37
check_kb_inconsistency
int check_kb_inconsistency(kb_t main_kb)
Check if the current main kb corresponds to the original scan main kb. @description Compares the scan...
Definition: plugutils.c:387
get_scan_id
const char * get_scan_id()
Definition: scan_id.c:22
OPENVAS_ENCAPS_IP
@ OPENVAS_ENCAPS_IP
Definition: network.h:31
plug_get_host_ip
struct in6_addr * plug_get_host_ip(struct script_infos *args)
Definition: plugutils.c:316
scan_globals::files_size_translation
GHashTable * files_size_translation
Definition: scanneraux.h:21
plug_get_kb
kb_t plug_get_kb(struct script_infos *args)
Definition: plugutils.c:1055
plug_fork_child
static int plug_fork_child(kb_t)
Spawns a new child process. Setups everything that is needed for a new process. Child must be handled...
Definition: plugutils.c:1089
script_infos::key
kb_t key
Definition: scanneraux.h:32
msg_type_to_str
static const char * msg_type_to_str(msg_t type)
Return string representation of the given msg_t.
Definition: plugutils.c:335
main_kb
kb_t main_kb
Definition: kb_cache.c:15
plug_get_host_fqdn
char * plug_get_host_fqdn(struct script_infos *args)
Definition: plugutils.c:242
script_infos::nvti
nvti_t * nvti
Definition: scanneraux.h:33
HOST_START
@ HOST_START
Definition: plugutils.h:78
get_plugin_preference_file_content
char * get_plugin_preference_file_content(struct script_infos *desc, const char *identifier)
Get the file contents of a plugins preference that is of type "file".
Definition: plugutils.c:886
plug_replace_key_len
void plug_replace_key_len(struct script_infos *args, char *name, int type, void *value, size_t len)
Definition: plugutils.c:1020
host_add_port_proto
static void host_add_port_proto(struct script_infos *args, int portnum, char *proto)
Definition: plugutils.c:75
proto_post_wrapped
static void proto_post_wrapped(const char *oid, struct script_infos *desc, int port, const char *proto, const char *action, msg_t msg_type, const char *uri)
Post a security message (e.g. LOG, NOTE, WARNING ...).
Definition: plugutils.c:620
name
const char * name
Definition: nasl_init.c:411
ERRMSG
@ ERRMSG
Definition: plugutils.h:77
LOG
@ LOG
Definition: plugutils.h:80
plug_set_key_len
void plug_set_key_len(struct script_infos *args, char *name, int type, const void *value, size_t len)
Definition: plugutils.c:939
scan_globals::files_translation
GHashTable * files_translation
Definition: scanneraux.h:20
sig_n
static void sig_n(int signo, void(*fnc)(int))
Definition: plugutils.c:1070
oid
const char * oid
Definition: nasl_builtin_find_service.c:51
kb_get_port_state_proto
int kb_get_port_state_proto(kb_t kb, int portnum, char *proto)
Definition: plugutils.c:100
proto_post_error
void proto_post_error(const char *oid, struct script_infos *desc, int port, const char *proto, const char *action, const char *uri)
Definition: plugutils.c:717
script_infos::globals
struct scan_globals * globals
Definition: scanneraux.h:30
current_vhost
gvm_vhost_t * current_vhost
Definition: plugutils.c:43
host_get_port_state_proto
static int host_get_port_state_proto(struct script_infos *args, int portnum, char *proto)
Definition: plugutils.c:138
pid
static pid_t pid
Definition: nasl_cmd_exec.c:39
plug_get_key_sigchld
static void plug_get_key_sigchld(int s)
Definition: plugutils.c:1061
len
uint8_t len
Definition: nasl_packet_forgery.c:1
HOST_END
@ HOST_END
Definition: plugutils.h:79
prefix
static void prefix(int n, int i)
Definition: nasl_tree.c:222
scan_globals
Definition: scanneraux.h:19
unscanned_ports_as_closed
static int unscanned_ports_as_closed(port_protocol_t ptype)
Report state of preferences "unscanned_closed".
Definition: plugutils.c:88
host_kb
static kb_t host_kb
Definition: attack.c:289
HOST_DETAIL
@ HOST_DETAIL
Definition: plugutils.h:81
check_kb_inconsistency_log
static int check_kb_inconsistency_log(void)
calls check_kb_inconsistency and logs as debug when local scan_id is missing.
Definition: plugutils.c:426
proto_post_log
void proto_post_log(const char *oid, struct script_infos *desc, int port, const char *proto, const char *action, const char *uri)
Post a log message.
Definition: plugutils.c:690
ARG_INT
#define ARG_INT
Definition: plugutils.h:20
script_infos::vhosts
GSList * vhosts
Definition: scanneraux.h:38
DEADHOST
@ DEADHOST
Definition: plugutils.h:83
hostname
const char * hostname
Definition: pluginlaunch.c:68
ALARM
@ ALARM
Definition: plugutils.h:82
global_nasl_debug
int global_nasl_debug
Definition: plugutils.c:38
plug_set_key
void plug_set_key(struct script_infos *args, char *name, int type, const void *value)
Definition: plugutils.c:962
proto_post_alarm
void proto_post_alarm(const char *oid, struct script_infos *desc, int port, const char *proto, const char *action, const char *uri)
Definition: plugutils.c:673
get_plugin_preference_file_size
long get_plugin_preference_file_size(struct script_infos *desc, const char *identifier)
Get the file size of a plugins preference that is of type "file".
Definition: plugutils.c:917
kb_item_push_str_with_main_kb_check
int kb_item_push_str_with_main_kb_check(kb_t kb, const char *name, const char *value)
Check if the current kb corresponds to the original scanid, if it matches it kb_item_push_str....
Definition: plugutils.c:478
get_main_kb
kb_t get_main_kb(void)
gets the main_kb. @description returns the previously set main_kb; when asserts are enabled it will a...
Definition: kb_cache.c:41
plug_set_ssl_item
static void plug_set_ssl_item(struct script_infos *args, char *item, char *itemfname)
Definition: plugutils.c:1304
ARG_STRING
#define ARG_STRING
Definition: plugutils.h:19
length
u_short length
Definition: nasl_packet_forgery.c:4
MAX_CANDIDATES
#define MAX_CANDIDATES