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
21#define G_LOG_DOMAIN "lib misc"
22
34static JsonBuilder *
35add_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
71gchar *
72make_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
144gchar *
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
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 * hostname
Definition: pluginlaunch.c:68
const char * scan_id
Definition: scan_id.c:10
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.
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.