OpenVAS Scanner  22.7.9
table_driven_lsc.h File Reference
#include <glib.h>
Include dependency graph for table_driven_lsc.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

gchar * make_table_driven_lsc_info_json_str (const char *, const char *, const char *, const char *, const char *)
 Build a json object with data necessary to start a table drive LSC. More...
 
gchar * get_status_of_table_driven_lsc_from_json (const char *, const char *, const char *, int)
 Get the status of table driven lsc from json object. More...
 

Function Documentation

◆ get_status_of_table_driven_lsc_from_json()

gchar* get_status_of_table_driven_lsc_from_json ( const char *  scan_id,
const char *  host_ip,
const char *  json,
int  len 
)

Get the status of table driven lsc from json object.

Checks for the corresponding status inside the JSON. If the status does not belong the the scan or host, NULL is returned instead. NULL is also returned if message JSON cannot be parsed correctly. Return value has to be freed by caller.

Parameters
scan_idid of scan
host_ipip of host
jsonjson to get information from
lenlength of json
Returns
gchar* Status of table driven lsc or NULL

Definition at line 145 of file table_driven_lsc.c.

148 {
149  JsonParser *parser;
150  JsonReader *reader = NULL;
151 
152  GError *err = NULL;
153  gchar *ret = NULL;
154 
155  parser = json_parser_new ();
156  if (!json_parser_load_from_data (parser, json, len, &err))
157  {
158  goto cleanup;
159  }
160 
161  reader = json_reader_new (json_parser_get_root (parser));
162 
163  // Check for Scan ID
164  if (!json_reader_read_member (reader, "scan_id"))
165  {
166  goto cleanup;
167  }
168  if (g_strcmp0 (json_reader_get_string_value (reader), scan_id))
169  {
170  goto cleanup;
171  }
172  json_reader_end_member (reader);
173 
174  // Check Host IP
175  if (!json_reader_read_member (reader, "host_ip"))
176  {
177  goto cleanup;
178  }
179  if (g_strcmp0 (json_reader_get_string_value (reader), host_ip))
180  {
181  goto cleanup;
182  }
183  json_reader_end_member (reader);
184 
185  // Check Status
186  if (!json_reader_read_member (reader, "status"))
187  {
188  goto cleanup;
189  }
190  ret = g_strdup (json_reader_get_string_value (reader));
191 
192  json_reader_end_member (reader);
193 
194 cleanup:
195  if (reader)
196  g_object_unref (reader);
197  g_object_unref (parser);
198  if (err != NULL)
199  {
200  g_warning ("%s: Unable to parse json. Reason: %s", __func__,
201  err->message);
202  }
203  return ret;
204 }

References len, and scan_id.

Referenced by run_table_driven_lsc().

Here is the caller graph for this function:

◆ make_table_driven_lsc_info_json_str()

gchar* make_table_driven_lsc_info_json_str ( const char *  scan_id,
const char *  ip_str,
const char *  hostname,
const char *  os_release,
const char *  package_list 
)

Build a json object with data necessary to start a table drive LSC.

JSON result consists of scan_id, message type, host ip, hostname, port together with proto, OID, result message and uri.

Parameters
scan_idScan Id.
ip_strIP string of host.
hostnameName of host.
os_releaseOS release
package_listThe installed package list in the target system to be evaluated
Returns
JSON string on success. Must be freed by caller. NULL on error.

Definition at line 72 of file table_driven_lsc.c.

76 {
77  JsonBuilder *builder;
78  JsonGenerator *gen;
79  JsonNode *root;
80  gchar *json_str;
81 
82  /* Build the message in json format to be published. */
83  builder = json_builder_new ();
84 
85  json_builder_begin_object (builder);
86 
87  json_builder_set_member_name (builder, "message_id");
88  builder = json_builder_add_string_value (builder, gvm_uuid_make ());
89 
90  json_builder_set_member_name (builder, "group_id");
91  builder = json_builder_add_string_value (builder, gvm_uuid_make ());
92 
93  json_builder_set_member_name (builder, "message_type");
94  builder = json_builder_add_string_value (builder, "scan.start");
95 
96  json_builder_set_member_name (builder, "created");
97  builder = json_builder_add_int_value (builder, time (NULL));
98 
99  json_builder_set_member_name (builder, "scan_id");
100  builder = json_builder_add_string_value (builder, scan_id);
101 
102  json_builder_set_member_name (builder, "host_ip");
103  json_builder_add_string_value (builder, ip_str);
104 
105  json_builder_set_member_name (builder, "host_name");
106  json_builder_add_string_value (builder, hostname);
107 
108  json_builder_set_member_name (builder, "os_release");
109  json_builder_add_string_value (builder, os_release);
110 
111  add_packages_str_to_list (builder, package_list);
112 
113  json_builder_end_object (builder);
114 
115  gen = json_generator_new ();
116  root = json_builder_get_root (builder);
117  json_generator_set_root (gen, root);
118  json_str = json_generator_to_data (gen, NULL);
119 
120  json_node_free (root);
121  g_object_unref (gen);
122  g_object_unref (builder);
123 
124  if (json_str == NULL)
125  g_warning ("%s: Error while creating JSON.", __func__);
126 
127  return json_str;
128 }

References add_packages_str_to_list(), hostname, and scan_id.

Referenced by run_table_driven_lsc().

Here is the call graph for this function:
Here is the caller graph for this function:
len
uint8_t len
Definition: nasl_packet_forgery.c:1
hostname
const char * hostname
Definition: pluginlaunch.c:68
scan_id
const char * scan_id
Definition: scan_id.c:10
add_packages_str_to_list
static JsonBuilder * add_packages_str_to_list(JsonBuilder *builder, const gchar *packages)
Split the package list string and creates a json array.
Definition: table_driven_lsc.c:35