OpenVAS Scanner 22.7.9
table_driven_lsc.c File Reference
#include "table_driven_lsc.h"
#include <gvm/util/mqtt.h>
#include <gvm/util/uuidutils.h>
#include <json-glib/json-glib.h>
Include dependency graph for table_driven_lsc.c:

Go to the source code of this file.

Macros

#define G_LOG_DOMAIN   "lib misc"
 GLib logging domain.
 

Functions

static JsonBuilder * add_packages_str_to_list (JsonBuilder *builder, const gchar *packages)
 Split the package list string and creates a json array.
 
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.
 
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.
 

Macro Definition Documentation

◆ G_LOG_DOMAIN

#define G_LOG_DOMAIN   "lib misc"

GLib logging domain.

Definition at line 21 of file table_driven_lsc.c.

Function Documentation

◆ add_packages_str_to_list()

static JsonBuilder * add_packages_str_to_list ( JsonBuilder *  builder,
const gchar *  packages 
)
static

Split the package list string and creates a json array.

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

Parameters
[in/out]builder The Json builder to add the array to.
[in]packagesThe installed package list as string
Returns
JSON builder including the package list as array.

Definition at line 35 of file table_driven_lsc.c.

36{
37 gchar **package_list = NULL;
38
39 json_builder_set_member_name (builder, "package_list");
40 json_builder_begin_array (builder);
41
42 package_list = g_strsplit (packages, "\n", 0);
43 if (package_list && package_list[0])
44 {
45 int i;
46 for (i = 0; package_list[i]; i++)
47 json_builder_add_string_value (builder, package_list[i]);
48 }
49
50 json_builder_end_array (builder);
51 g_strfreev (package_list);
52
53 return builder;
54}

Referenced by make_table_driven_lsc_info_json_str().

Here is the caller graph for this function:

◆ 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
194cleanup:
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}
uint8_t len
const char * scan_id
Definition: scan_id.c:10

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}
const char * hostname
Definition: pluginlaunch.c:68
static JsonBuilder * add_packages_str_to_list(JsonBuilder *builder, const gchar *packages)
Split the package list string and creates a json array.

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: