OpenVAS Scanner  22.7.9
table_driven_lsc.c
Go to the documentation of this file.
1 /* SPDX-FileCopyrightText: 2023 Greenbone AG
2  *
3  * SPDX-License-Identifier: GPL-2.0-or-later
4  */
5 
11 #include "table_driven_lsc.h"
12 
13 #include <gvm/util/mqtt.h> // for mqtt_reset
14 #include <gvm/util/uuidutils.h> // for gvm_uuid_make
15 #include <json-glib/json-glib.h>
16 
17 #undef G_LOG_DOMAIN
18 
21 #define G_LOG_DOMAIN "lib misc"
22 
34 static JsonBuilder *
35 add_packages_str_to_list (JsonBuilder *builder, const gchar *packages)
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 }
55 
71 gchar *
72 make_table_driven_lsc_info_json_str (const char *scan_id, const char *ip_str,
73  const char *hostname,
74  const char *os_release,
75  const char *package_list)
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 }
129 
144 gchar *
146  const char *host_ip, const char *json,
147  int len)
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 }
table_driven_lsc.h
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.
Definition: table_driven_lsc.c:72
len
uint8_t len
Definition: nasl_packet_forgery.c:1
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.
Definition: table_driven_lsc.c:145
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