diff --git a/src/gmp.c b/src/gmp.c
index 492c39920..6af525ea6 100644
--- a/src/gmp.c
+++ b/src/gmp.c
@@ -4698,9 +4698,6 @@ gmp_xml_handle_start_element (/* unused */ GMarkupParseContext* context,
GError **error)
{
gmp_parser_t *gmp_parser = (gmp_parser_t*) user_data;
- int (*write_to_client) (const char *, void*)
- = (int (*) (const char *, void*)) gmp_parser->client_writer;
- void* write_to_client_data = (void*) gmp_parser->client_writer_data;
g_debug (" XML start: %s (%i)", element_name, client_state);
@@ -4717,11 +4714,11 @@ gmp_xml_handle_start_element (/* unused */ GMarkupParseContext* context,
{
/** @todo If a real GMP command, return STATUS_ERROR_MUST_AUTH. */
if (send_to_client
- (XML_ERROR_SYNTAX ("gmp",
+ (gmp_parser,
+ error,
+ XML_ERROR_SYNTAX ("gmp",
"Only command GET_VERSION is"
- " allowed before AUTHENTICATE"),
- write_to_client,
- write_to_client_data))
+ " allowed before AUTHENTICATE")))
{
error_send_to_client (error);
return;
@@ -6047,13 +6044,9 @@ gmp_xml_handle_start_element (/* unused */ GMarkupParseContext* context,
}
else
{
- if (send_to_client (XML_ERROR_SYNTAX ("gmp", "Bogus command name"),
- write_to_client,
- write_to_client_data))
- {
- error_send_to_client (error);
- return;
- }
+ if (send_to_client (gmp_parser, error,
+ XML_ERROR_SYNTAX ("gmp", "Bogus command name")))
+ return;
g_set_error (error,
G_MARKUP_ERROR,
G_MARKUP_ERROR_UNKNOWN_ELEMENT,
@@ -7997,23 +7990,21 @@ gmp_xml_handle_start_element (/* unused */ GMarkupParseContext* context,
* @param[in] skip_cert_refs If true, exclude CERT refs.
* @param[in] skip_tags If true, exclude tags.
* @param[in] lean If true, send fewer details.
- * @param[in] write_to_client Function to write to client.
- * @param[in] write_to_client_data Argument to \p write_to_client.
+ * @param[in] gmp_parser GMP Parser.
+ * @param[in] error Error.
*
* @return TRUE if out of space in to_client buffer, else FALSE.
*/
static gboolean
send_nvt (iterator_t *nvts, int details, int preferences, int pref_count,
const char *timeout, config_t config, int skip_cert_refs,
- int skip_tags, int lean,
- int (*write_to_client) (const char *, void*),
- void* write_to_client_data)
+ int skip_tags, int lean, gmp_parser_t *gmp_parser, GError **error)
{
gchar *msg;
msg = get_nvt_xml (nvts, details, pref_count, preferences, timeout, config,
0, skip_cert_refs, skip_tags, lean);
- if (send_to_client (msg, write_to_client, write_to_client_data))
+ if (send_to_client (gmp_parser, error, msg))
{
g_free (msg);
return TRUE;
@@ -10950,11 +10941,8 @@ buffer_aggregate_xml (GString *xml, iterator_t* aggregate, const gchar* type,
("delete_" G_STRINGIFY (type), \
G_STRINGIFY (type), \
delete_ ## type ## _data-> type ## _id, \
- gmp_parser)) \
- { \
- error_send_to_client (error); \
- return; \
- } \
+ gmp_parser, error)) \
+ return; \
log_event_fail (G_STRINGIFY(type), capital, \
delete_ ## type ## _data-> type ## _id, \
"deleted"); \
@@ -11266,20 +11254,14 @@ handle_get_alerts (gmp_parser_t *gmp_parser, GError **error)
case 1:
if (send_find_error_to_client ("get_alerts", "alert",
get_alerts_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_alerts", "filter", get_alerts_data->get.filt_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -11622,11 +11604,8 @@ handle_get_assets (gmp_parser_t *gmp_parser, GError **error)
}
else
{
- if (send_find_error_to_client ("get_assets", "type",
- get_assets_data->type, gmp_parser))
- {
- error_send_to_client (error);
- }
+ send_find_error_to_client ("get_assets", "type",
+ get_assets_data->type, gmp_parser, error);
get_assets_data_reset (get_assets_data);
set_client_state (CLIENT_AUTHENTIC);
return;
@@ -11640,20 +11619,14 @@ handle_get_assets (gmp_parser_t *gmp_parser, GError **error)
case 1:
if (send_find_error_to_client ("get_assets", "type",
get_assets_data->type,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_assets", "filter", get_assets_data->get.filt_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -11678,14 +11651,10 @@ handle_get_assets (gmp_parser_t *gmp_parser, GError **error)
asset = get_iterator_resource (&assets);
/* Assets are currently always writable. */
if (send_get_common ("asset", &get_assets_data->get, &assets,
- gmp_parser->client_writer,
- gmp_parser->client_writer_data,
+ gmp_parser, error,
asset_iterator_writable (&assets),
asset_iterator_in_use (&assets)))
- {
- error_send_to_client (error);
- return;
- }
+ return;
result = g_string_new ("");
@@ -11901,20 +11870,14 @@ handle_get_configs (gmp_parser_t *gmp_parser, GError **error)
case 1:
if (send_find_error_to_client
("get_configs", "config", get_configs_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_configs", "filter", get_configs_data->get.filt_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL (XML_INTERNAL_ERROR ("get_configs"));
@@ -12203,8 +12166,9 @@ handle_get_credentials (gmp_parser_t *gmp_parser, GError **error)
INIT_GET (credential, Credential);
- ret = init_credential_iterator (&credentials,
- &get_credentials_data->get);
+ ret = init_credential_iterator_format (&credentials,
+ &get_credentials_data->get,
+ format);
if (ret)
{
switch (ret)
@@ -12213,21 +12177,15 @@ handle_get_credentials (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("get_credentials",
"credential",
get_credentials_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 2:
if (send_find_error_to_client ("get_credentials",
"filter",
get_credentials_data->get.filt_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -12242,7 +12200,7 @@ handle_get_credentials (gmp_parser_t *gmp_parser, GError **error)
SEND_GET_START("credential");
while (1)
{
- const char *private_key, *public_key, *login, *type, *cert;
+ const char *login, *type, *cert;
gchar *formats_xml;
ret = get_next (&credentials, &get_credentials_data->get,
@@ -12256,8 +12214,6 @@ handle_get_credentials (gmp_parser_t *gmp_parser, GError **error)
}
SEND_GET_COMMON (credential, &get_credentials_data->get, &credentials);
- private_key = credential_iterator_private_key (&credentials);
- public_key = credential_iterator_public_key (&credentials);
login = credential_iterator_login (&credentials);
type = credential_iterator_type (&credentials);
cert = credential_iterator_certificate (&credentials);
@@ -12336,6 +12292,10 @@ handle_get_credentials (gmp_parser_t *gmp_parser, GError **error)
case CREDENTIAL_FORMAT_KEY:
{
+ const char *public_key;
+
+ public_key = credential_iterator_public_key (&credentials);
+
if (public_key && strcmp (public_key, ""))
{
SENDF_TO_CLIENT_OR_FAIL
@@ -12344,8 +12304,9 @@ handle_get_credentials (gmp_parser_t *gmp_parser, GError **error)
else
{
char *pub;
- const char *pass;
+ const char *pass, *private_key;
+ private_key = credential_iterator_private_key (&credentials);
pass = credential_iterator_password (&credentials);
pub = gvm_ssh_public_from_private (private_key, pass);
SENDF_TO_CLIENT_OR_FAIL
@@ -12945,20 +12906,14 @@ handle_get_filters (gmp_parser_t *gmp_parser, GError **error)
case 1:
if (send_find_error_to_client ("get_filters", "filter",
get_filters_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_filters", "filter",
- get_filters_data->get.filt_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_filters_data->get.filt_id, gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -13051,20 +13006,14 @@ handle_get_groups (gmp_parser_t *gmp_parser, GError **error)
case 1:
if (send_find_error_to_client ("get_groups", "group",
get_groups_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_groups", "filter", get_groups_data->get.filt_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -13195,12 +13144,9 @@ handle_get_info (gmp_parser_t *gmp_parser, GError **error)
else
{
if (send_find_error_to_client ("get_info", "type",
- get_info_data->type,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_info_data->type,
+ gmp_parser, error))
+ return;
get_info_data_reset (get_info_data);
set_client_state (CLIENT_AUTHENTIC);
return;
@@ -13251,11 +13197,8 @@ handle_get_info (gmp_parser_t *gmp_parser, GError **error)
}
else
{
- if (send_find_error_to_client ("get_info", "type",
- get_info_data->type, gmp_parser))
- {
- error_send_to_client (error);
- }
+ send_find_error_to_client ("get_info", "type",
+ get_info_data->type, gmp_parser, error);
return;
}
@@ -13272,20 +13215,15 @@ handle_get_info (gmp_parser_t *gmp_parser, GError **error)
get_info_data->name
? get_info_data->name
: get_info_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_info", "filter", get_info_data->get.filt_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -13307,12 +13245,8 @@ handle_get_info (gmp_parser_t *gmp_parser, GError **error)
/* Info's are currently always read only */
if (send_get_common ("info", &get_info_data->get, &info,
- gmp_parser->client_writer,
- gmp_parser->client_writer_data, 0, 0))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error, 0, 0))
+ return;
SENDF_TO_CLIENT_OR_FAIL ("%s",
update_time);
@@ -13483,11 +13417,9 @@ handle_get_info (gmp_parser_t *gmp_parser, GError **error)
else if (g_strcmp0 ("nvt", get_info_data->type) == 0)
{
if (send_nvt (&info, 1, 1, -1, NULL, 0, 0, 0, 0,
- gmp_parser->client_writer,
- gmp_parser->client_writer_data))
+ gmp_parser, error))
{
cleanup_iterator (&info);
- error_send_to_client (error);
return;
}
}
@@ -13561,11 +13493,8 @@ handle_get_notes (gmp_parser_t *gmp_parser, GError **error)
{
if (send_find_error_to_client ("get_notes",
"task", get_notes_data->task_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
else if (get_notes_data->nvt_oid
&& find_nvt (get_notes_data->nvt_oid, &nvt))
@@ -13574,11 +13503,8 @@ handle_get_notes (gmp_parser_t *gmp_parser, GError **error)
{
if (send_find_error_to_client ("get_notes", "NVT",
get_notes_data->nvt_oid,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
else
{
@@ -13597,20 +13523,14 @@ handle_get_notes (gmp_parser_t *gmp_parser, GError **error)
case 1:
if (send_find_error_to_client ("get_notes", "note",
get_notes_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_notes", "filter",
- get_notes_data->get.filt_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_notes_data->get.filt_id, gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -13725,12 +13645,9 @@ handle_get_nvts (gmp_parser_t *gmp_parser, GError **error)
else if (get_nvts_data->nvt_oid && nvt == 0)
{
if (send_find_error_to_client ("get_nvts", "NVT",
- get_nvts_data->nvt_oid,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_nvts_data->nvt_oid,
+ gmp_parser, error))
+ return;
}
else if (get_nvts_data->config_id
&& get_nvts_data->preferences_config_id)
@@ -13748,11 +13665,8 @@ handle_get_nvts (gmp_parser_t *gmp_parser, GError **error)
{
if (send_find_error_to_client
("get_nvts", "config", get_nvts_data->config_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
else if (get_nvts_data->preferences_config_id
&& find_config_with_permission
@@ -13766,12 +13680,9 @@ handle_get_nvts (gmp_parser_t *gmp_parser, GError **error)
{
if (send_find_error_to_client
("get_nvts", "config",
- get_nvts_data->preferences_config_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_nvts_data->preferences_config_id,
+ gmp_parser, error))
+ return;
}
else
{
@@ -13828,12 +13739,11 @@ handle_get_nvts (gmp_parser_t *gmp_parser, GError **error)
get_nvts_data->skip_cert_refs,
get_nvts_data->skip_tags,
get_nvts_data->lean,
- gmp_parser->client_writer,
- gmp_parser->client_writer_data))
+ gmp_parser,
+ error))
{
free (timeout);
cleanup_iterator (&nvts);
- error_send_to_client (error);
return;
}
free (timeout);
@@ -13844,11 +13754,9 @@ handle_get_nvts (gmp_parser_t *gmp_parser, GError **error)
while (next (&nvts))
{
if (send_nvt (&nvts, 0, 0, -1, NULL, 0, 0, 0, 0,
- gmp_parser->client_writer,
- gmp_parser->client_writer_data))
+ gmp_parser, error))
{
cleanup_iterator (&nvts);
- error_send_to_client (error);
return;
}
SEND_TO_CLIENT_OR_FAIL ("");
@@ -13955,11 +13863,8 @@ handle_get_overrides (gmp_parser_t *gmp_parser, GError **error)
{
if (send_find_error_to_client ("get_overrides", "task",
get_overrides_data->task_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
else if (get_overrides_data->nvt_oid
&& find_nvt (get_overrides_data->nvt_oid, &nvt))
@@ -13968,11 +13873,8 @@ handle_get_overrides (gmp_parser_t *gmp_parser, GError **error)
{
if (send_find_error_to_client ("get_overrides",
"NVT", get_overrides_data->nvt_oid,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
else
{
@@ -13992,20 +13894,14 @@ handle_get_overrides (gmp_parser_t *gmp_parser, GError **error)
case 1:
if (send_find_error_to_client
("get_overrides", "override",
- get_overrides_data->get.id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_overrides_data->get.id, gmp_parser, error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_overrides", "filter",
- get_overrides_data->get.filt_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_overrides_data->get.filt_id, gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -14065,20 +13961,15 @@ handle_get_permissions (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("get_permissions",
"permission",
get_permissions_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_permissions", "filter",
- get_permissions_data->get.filt_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_permissions_data->get.filt_id, gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -14181,20 +14072,15 @@ handle_get_port_lists (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("get_port_lists",
"port_list",
get_port_lists_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_port_lists", "filter",
- get_port_lists_data->get.filt_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_port_lists_data->get.filt_id, gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -14345,11 +14231,8 @@ handle_get_preferences (gmp_parser_t *gmp_parser, GError **error)
{
if (send_find_error_to_client ("get_preferences", "NVT",
get_preferences_data->nvt_oid,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
else if (get_preferences_data->config_id
&& find_config_with_permission (get_preferences_data->config_id,
@@ -14360,11 +14243,8 @@ handle_get_preferences (gmp_parser_t *gmp_parser, GError **error)
{
if (send_find_error_to_client ("get_preferences", "config",
get_preferences_data->config_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
else
{
@@ -14533,11 +14413,8 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error)
{
if (send_find_error_to_client ("get_reports", "report format",
get_reports_data->format_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
get_reports_data_reset (get_reports_data);
set_client_state (CLIENT_AUTHENTIC);
return;
@@ -14562,11 +14439,8 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error)
{
if (send_find_error_to_client ("get_reports", "filter",
get_reports_data->get.filt_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
get_reports_data_reset (get_reports_data);
set_client_state (CLIENT_AUTHENTIC);
return;
@@ -14578,11 +14452,8 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error)
{
if (send_find_error_to_client ("get_reports", "report",
get_reports_data->report_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
get_reports_data_reset (get_reports_data);
set_client_state (CLIENT_AUTHENTIC);
return;
@@ -14594,11 +14465,8 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error)
{
if (send_find_error_to_client ("get_reports", "report",
get_reports_data->delta_report_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
get_reports_data_reset (get_reports_data);
set_client_state (CLIENT_AUTHENTIC);
return;
@@ -14702,20 +14570,14 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error)
case 1:
if (send_find_error_to_client ("get_reports", "report",
get_reports_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_reports", "filter",
- get_reports_data->get.filt_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_reports_data->get.filt_id, gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -14865,7 +14727,6 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error)
&& strcmp
(get_reports_data->format_id,
"5057e5cc-b825-11e4-9d0e-28d24461215b"),
- send_to_client,
gmp_parser->client_writer,
gmp_parser->client_writer_data,
get_reports_data->alert_id,
@@ -14881,11 +14742,8 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error)
case 1:
if (send_find_error_to_client
("get_reports", "alert",
- get_reports_data->alert_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_reports_data->alert_id, gmp_parser, error))
+ return;
/* Close the connection with the client, as part of the
* response may have been sent before the error
* occurred. */
@@ -14899,11 +14757,8 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error)
case 2:
if (send_find_error_to_client
("get_reports", "filter",
- get_reports_data->get.filt_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_reports_data->get.filt_id, gmp_parser, error))
+ return;
/* This error always occurs before anything is sent
* to the client, so the connection can stay up. */
if (request_report == 0)
@@ -14962,11 +14817,8 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error)
{
if (send_find_error_to_client
("get_reports", "filter",
- get_reports_data->get.filt_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_reports_data->get.filt_id, gmp_parser, error))
+ return;
/* This error always occurs before anything is sent
* to the client, so the connection can stay up. */
if (request_report == 0)
@@ -15306,20 +15158,15 @@ handle_get_report_formats (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("get_report_formats",
"report_format",
get_report_formats_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_report_formats", "filter",
- get_report_formats_data->get.filt_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_report_formats_data->get.filt_id, gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -15832,15 +15679,13 @@ handle_get_resource_names (gmp_parser_t *gmp_parser, GError **error)
if (select_resource_iterator(get_resource_names_data, &init_resource_iterator))
{
- if (send_find_error_to_client ("get_resource_names", "type",
- get_resource_names_data->type, gmp_parser))
- {
- error_send_to_client (error);
- }
+ send_find_error_to_client ("get_resource_names", "type",
+ get_resource_names_data->type, gmp_parser,
+ error);
get_resource_names_data_reset (get_resource_names_data);
set_client_state (CLIENT_AUTHENTIC);
return;
- };
+ }
ret = init_resource_iterator (&resource, &get_resource_names_data->get);
if (ret)
@@ -15850,20 +15695,14 @@ handle_get_resource_names (gmp_parser_t *gmp_parser, GError **error)
case 1:
if (send_find_error_to_client ("get_resource_names", "type",
get_resource_names_data->type,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_resource_names", "filter", get_resource_names_data->get.filt_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -15989,12 +15828,9 @@ handle_get_results (gmp_parser_t *gmp_parser, GError **error)
else if (get_results_data->get.id && result == 0)
{
if (send_find_error_to_client ("get_results", "result",
- get_results_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_results_data->get.id,
+ gmp_parser, error))
+ return;
}
else if (get_results_data->task_id
&& find_task_with_permission (get_results_data->task_id,
@@ -16004,12 +15840,9 @@ handle_get_results (gmp_parser_t *gmp_parser, GError **error)
else if (get_results_data->task_id && task == 0)
{
if (send_find_error_to_client ("get_results", "task",
- get_results_data->task_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_results_data->task_id,
+ gmp_parser, error))
+ return;
}
else
{
@@ -16140,21 +15973,14 @@ handle_get_results (gmp_parser_t *gmp_parser, GError **error)
if (send_get_end ("result", &get_results_data->get, count, filtered,
resource_count ("result", &get_results_data->get),
- gmp_parser->client_writer,
- gmp_parser->client_writer_data))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
else if (send_get_end_no_counts ("result",
&get_results_data->get,
- gmp_parser->client_writer,
- gmp_parser->client_writer_data))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
}
get_results_data_reset (get_results_data);
@@ -16182,21 +16008,15 @@ handle_get_roles (gmp_parser_t *gmp_parser, GError **error)
{
case 1:
if (send_find_error_to_client ("get_roles", "role",
- get_roles_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_roles_data->get.id,
+ gmp_parser, error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_roles", "filter", get_roles_data->get.filt_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -16264,20 +16084,14 @@ handle_get_scanners (gmp_parser_t *gmp_parser, GError **error)
case 1:
if (send_find_error_to_client
("get_scanners", "scanners", get_scanners_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- break;
- }
+ gmp_parser, error))
+ break;
break;
case 2:
if (send_find_error_to_client
("get_scanners", "filter", get_scanners_data->get.filt_id,
- gmp_parser))
- {
- error_send_to_client (error);
- break;
- }
+ gmp_parser, error))
+ break;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL (XML_INTERNAL_ERROR ("get_scanners"));
@@ -16545,20 +16359,15 @@ handle_get_schedules (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("get_schedules",
"schedule",
get_schedules_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_schedules", "filter",
- get_schedules_data->get.filt_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_schedules_data->get.filt_id, gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -16673,11 +16482,8 @@ handle_create_schedule (gmp_parser_t *gmp_parser, GError **error)
case 2:
if (send_find_error_to_client ("create_schedule", "schedule",
create_schedule_data->copy,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("schedule", "Schedule", NULL, "created");
break;
case 99:
@@ -16828,12 +16634,9 @@ handle_modify_schedule (gmp_parser_t *gmp_parser, GError **error)
break;
case 1:
if (send_find_error_to_client ("modify_schedule", "schedule",
- modify_schedule_data->schedule_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ modify_schedule_data->schedule_id,
+ gmp_parser, error))
+ return;
log_event_fail ("schedule", "Schedule",
modify_schedule_data->schedule_id,
"modified");
@@ -17038,20 +16841,14 @@ handle_get_system_reports (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("get_system_reports",
"system report",
get_system_reports_data->name,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_system_reports", "slave",
- get_system_reports_data->slave_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_system_reports_data->slave_id, gmp_parser, error))
+ return;
break;
case 4:
SEND_TO_CLIENT_OR_FAIL
@@ -17174,20 +16971,14 @@ handle_get_tags (gmp_parser_t *gmp_parser, GError **error)
case 1:
if (send_find_error_to_client ("get_tags",
"tag", get_tags_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_tags", "filter", get_tags_data->get.filt_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
default:
SEND_TO_CLIENT_OR_FAIL
@@ -17281,20 +17072,15 @@ handle_get_targets (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("get_targets",
"target",
get_targets_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_targets", "filter",
- get_targets_data->get.filt_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_targets_data->get.filt_id, gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -17341,147 +17127,163 @@ handle_get_targets (gmp_parser_t *gmp_parser, GError **error)
snmp_credential = target_iterator_snmp_credential (&targets);
ssh_elevate_credential
= target_iterator_ssh_elevate_credential (&targets);
+
ssh_credential_available = 1;
- if (get_targets_data->get.trash
- && target_iterator_ssh_trash (&targets))
+ if (ssh_credential)
{
- ssh_name = trash_credential_name (ssh_credential);
- ssh_uuid = trash_credential_uuid (ssh_credential);
- ssh_credential_available
- = trash_credential_readable (ssh_credential);
- }
- else if (ssh_credential)
- {
- credential_t found;
-
- ssh_name = credential_name (ssh_credential);
- ssh_uuid = credential_uuid (ssh_credential);
- if (find_credential_with_permission
- (ssh_uuid,
- &found,
- "get_credentials"))
- abort ();
- ssh_credential_available = (found > 0);
+ if (get_targets_data->get.trash
+ && target_iterator_ssh_trash (&targets))
+ {
+ ssh_name = trash_credential_name (ssh_credential);
+ ssh_uuid = trash_credential_uuid (ssh_credential);
+ ssh_credential_available
+ = trash_credential_readable (ssh_credential);
+ }
+ else
+ {
+ credential_t found;
+
+ ssh_name = credential_name (ssh_credential);
+ ssh_uuid = credential_uuid (ssh_credential);
+ if (find_credential_with_permission (ssh_uuid,
+ &found,
+ "get_credentials"))
+ abort ();
+ ssh_credential_available = (found > 0);
+ }
}
else
{
ssh_name = NULL;
ssh_uuid = NULL;
}
+
smb_credential_available = 1;
- if (get_targets_data->get.trash
- && target_iterator_smb_trash (&targets))
+ if (smb_credential)
{
- smb_name = trash_credential_name (smb_credential);
- smb_uuid = trash_credential_uuid (smb_credential);
- smb_credential_available
- = trash_credential_readable (smb_credential);
- }
- else if (smb_credential)
- {
- credential_t found;
-
- smb_name = credential_name (smb_credential);
- smb_uuid = credential_uuid (smb_credential);
- if (find_credential_with_permission
- (smb_uuid,
- &found,
- "get_credentials"))
- abort ();
- smb_credential_available = (found > 0);
+ if (get_targets_data->get.trash
+ && target_iterator_smb_trash (&targets))
+ {
+ smb_name = trash_credential_name (smb_credential);
+ smb_uuid = trash_credential_uuid (smb_credential);
+ smb_credential_available
+ = trash_credential_readable (smb_credential);
+ }
+ else
+ {
+ credential_t found;
+
+ smb_name = credential_name (smb_credential);
+ smb_uuid = credential_uuid (smb_credential);
+ if (find_credential_with_permission (smb_uuid,
+ &found,
+ "get_credentials"))
+ abort ();
+ smb_credential_available = (found > 0);
+ }
}
else
{
smb_name = NULL;
smb_uuid = NULL;
}
+
esxi_credential_available = 1;
- if (get_targets_data->get.trash
- && target_iterator_esxi_trash (&targets))
+ if (esxi_credential)
{
- esxi_name
- = trash_credential_name (esxi_credential);
- esxi_uuid
- = trash_credential_uuid (esxi_credential);
- esxi_credential_available
- = trash_credential_readable (esxi_credential);
- }
- else if (esxi_credential)
- {
- credential_t found;
-
- esxi_name = credential_name (esxi_credential);
- esxi_uuid = credential_uuid (esxi_credential);
- if (find_credential_with_permission
- (esxi_uuid,
- &found,
- "get_credentials"))
- abort ();
- esxi_credential_available = (found > 0);
+ if (get_targets_data->get.trash
+ && target_iterator_esxi_trash (&targets))
+ {
+ esxi_name
+ = trash_credential_name (esxi_credential);
+ esxi_uuid
+ = trash_credential_uuid (esxi_credential);
+ esxi_credential_available
+ = trash_credential_readable (esxi_credential);
+ }
+ else
+ {
+ credential_t found;
+
+ esxi_name = credential_name (esxi_credential);
+ esxi_uuid = credential_uuid (esxi_credential);
+ if (find_credential_with_permission (esxi_uuid,
+ &found,
+ "get_credentials"))
+ abort ();
+ esxi_credential_available = (found > 0);
+ }
}
else
{
esxi_name = NULL;
esxi_uuid = NULL;
}
+
snmp_credential_available = 1;
- if (get_targets_data->get.trash
- && target_iterator_snmp_trash (&targets))
+ if (snmp_credential)
{
- snmp_name
- = trash_credential_name (snmp_credential);
- snmp_uuid
- = trash_credential_uuid (snmp_credential);
- snmp_credential_available
- = trash_credential_readable (snmp_credential);
- }
- else if (snmp_credential)
- {
- credential_t found;
-
- snmp_name = credential_name (snmp_credential);
- snmp_uuid = credential_uuid (snmp_credential);
- if (find_credential_with_permission
- (snmp_uuid,
- &found,
- "get_credentials"))
- abort ();
- snmp_credential_available = (found > 0);
+ if (get_targets_data->get.trash
+ && target_iterator_snmp_trash (&targets))
+ {
+ snmp_name
+ = trash_credential_name (snmp_credential);
+ snmp_uuid
+ = trash_credential_uuid (snmp_credential);
+ snmp_credential_available
+ = trash_credential_readable (snmp_credential);
+ }
+ else
+ {
+ credential_t found;
+
+ snmp_name = credential_name (snmp_credential);
+ snmp_uuid = credential_uuid (snmp_credential);
+ if (find_credential_with_permission (snmp_uuid,
+ &found,
+ "get_credentials"))
+ abort ();
+ snmp_credential_available = (found > 0);
+ }
}
else
{
snmp_name = NULL;
snmp_uuid = NULL;
}
+
ssh_elevate_credential_available = 1;
- if (get_targets_data->get.trash
- && target_iterator_ssh_elevate_trash (&targets))
+ if (ssh_elevate_credential)
{
- ssh_elevate_name
- = trash_credential_name (ssh_elevate_credential);
- ssh_elevate_uuid
- = trash_credential_uuid (ssh_elevate_credential);
- ssh_elevate_credential_available
- = trash_credential_readable (ssh_elevate_credential);
- }
- else if (ssh_elevate_credential)
- {
- credential_t found;
-
- ssh_elevate_name = credential_name (ssh_elevate_credential);
- ssh_elevate_uuid = credential_uuid (ssh_elevate_credential);
- if (find_credential_with_permission
- (ssh_elevate_uuid,
- &found,
- "get_credentials"))
- abort ();
- ssh_elevate_credential_available = (found > 0);
+ if (get_targets_data->get.trash
+ && target_iterator_ssh_elevate_trash (&targets))
+ {
+ ssh_elevate_name
+ = trash_credential_name (ssh_elevate_credential);
+ ssh_elevate_uuid
+ = trash_credential_uuid (ssh_elevate_credential);
+ ssh_elevate_credential_available
+ = trash_credential_readable (ssh_elevate_credential);
+ }
+ else
+ {
+ credential_t found;
+
+ ssh_elevate_name = credential_name (ssh_elevate_credential);
+ ssh_elevate_uuid = credential_uuid (ssh_elevate_credential);
+ if (find_credential_with_permission (ssh_elevate_uuid,
+ &found,
+ "get_credentials"))
+ abort ();
+ ssh_elevate_credential_available = (found > 0);
+ }
}
else
{
ssh_elevate_name = NULL;
ssh_elevate_uuid = NULL;
}
+
port_list_uuid = target_iterator_port_list_uuid (&targets);
port_list_name = target_iterator_port_list_name (&targets);
port_list_trash = target_iterator_port_list_trash (&targets);
@@ -17744,15 +17546,764 @@ get_task_schedule_xml (task_t task)
schedule_in_trash);
}
- xml_string_append (xml,
- ""
- "%d"
- "",
- task_schedule_periods (task));
+ xml_string_append (xml,
+ ""
+ "%d"
+ "",
+ task_schedule_periods (task));
+
+ return g_string_free (xml, FALSE);
+}
+
+
+/**
+ * @brief Send single task with schedules only, for GET_TASKS.
+ *
+ * @param[in] gmp_parser GMP parser.
+ * @param[in] error Error parameter.
+ * @param[in] tasks Task iterator.
+ *
+ * @return 1 if error, else 0.
+ */
+static int
+get_tasks_send_schedules_only (gmp_parser_t *gmp_parser,
+ GError **error,
+ iterator_t *tasks)
+{
+ task_t index;
+ gchar *task_schedule_xml;
+
+ if (sendf_to_client (gmp_parser,
+ error,
+ ""
+ "%s",
+ get_iterator_uuid (tasks),
+ get_iterator_name (tasks)))
+ return 1;
+
+ index = get_iterator_resource (tasks);
+ task_schedule_xml = get_task_schedule_xml (index);
+ if (send_to_client (gmp_parser, error, task_schedule_xml))
+ return 1;
+ g_free (task_schedule_xml);
+
+ if (send_to_client (gmp_parser, error, ""))
+ return 1;
+
+ return 0;
+}
+
+/**
+ * @brief Get current report XML.
+ *
+ * @param[in] running_report Report.
+ *
+ * @return XMl.
+ */
+static gchar *
+get_current_report_xml (report_t running_report)
+{
+ gchar *current_report;
+
+ if (running_report)
+ {
+ gchar *timestamp;
+ char *scan_start, *scan_end, *current_report_id;
+
+ current_report_id = report_uuid (running_report);
+
+ if (report_timestamp (current_report_id, ×tamp))
+ g_error ("%s: GET_TASKS: error getting timestamp"
+ " of report, aborting",
+ __func__);
+
+ scan_start = scan_start_time_uuid (current_report_id),
+ scan_end = scan_end_time_uuid (current_report_id),
+
+ current_report = g_strdup_printf (""
+ ""
+ ""
+ "%s"
+ ""
+ ""
+ "%s"
+ ""
+ ""
+ "%s"
+ ""
+ ""
+ "",
+ current_report_id,
+ timestamp,
+ scan_start,
+ scan_end);
+ free (current_report_id);
+ free (scan_start);
+ free (scan_end);
+ g_free (timestamp);
+ }
+ else
+ current_report = g_strdup ("");
+
+ return current_report;
+}
+
+/**
+ * @brief Get last report XML.
+ *
+ * @param[in] last_report_id ID of last report.
+ *
+ * @return XMl.
+ */
+static gchar *
+get_last_report_xml_trash (const char *last_report_id)
+{
+ gchar *last_report, *timestamp;
+ char *scan_start, *scan_end;
+
+ if (report_timestamp (last_report_id, ×tamp))
+ g_error ("%s: GET_TASKS: error getting timestamp for"
+ " last report, aborting",
+ __func__);
+
+ scan_start = scan_start_time_uuid (last_report_id);
+ scan_end = scan_end_time_uuid (last_report_id);
+
+ last_report = g_strdup_printf (""
+ ""
+ "%s"
+ "%s"
+ "%s"
+ ""
+ "",
+ last_report_id,
+ timestamp,
+ scan_start,
+ scan_end);
+
+ free (scan_start);
+ free (scan_end);
+ g_free (timestamp);
+ return last_report;
+}
+
+/**
+ * @brief Get last report XML.
+ *
+ * @param[in] tasks Task iterator.
+ * @param[in] last_report_id ID of last report.
+ * @param[in] holes Count of holes.
+ * @param[in] infos Count of infos.
+ * @param[in] logs Count of logs.
+ * @param[in] warnings Count of warnings.
+ * @param[in] severity Severity.
+ *
+ * @return XMl.
+ */
+static gchar *
+get_last_report_xml (iterator_t *tasks, const char *last_report_id,
+ int holes, int infos, int logs, int warnings,
+ int false_positives, double severity)
+{
+ gchar *last_report, *timestamp;
+ char *scan_start, *scan_end;
+
+ if (report_timestamp (last_report_id, ×tamp))
+ g_error ("%s: GET_TASKS: error getting timestamp for"
+ " last report, aborting",
+ __func__);
+
+ scan_start = scan_start_time_uuid (last_report_id);
+ scan_end = scan_end_time_uuid (last_report_id);
+
+ if (strcmp (task_iterator_usage_type (tasks), "audit") == 0)
+ {
+ int compliance_yes, compliance_no, compliance_incomplete;
+
+ report_compliance_by_uuid (last_report_id,
+ &compliance_yes,
+ &compliance_no,
+ &compliance_incomplete);
+
+ last_report
+ = g_strdup_printf (""
+ ""
+ "%s"
+ "%s"
+ "%s"
+ ""
+ "%d"
+ "%d"
+ "%d"
+ ""
+ ""
+ "",
+ last_report_id,
+ timestamp,
+ scan_start,
+ scan_end,
+ compliance_yes,
+ compliance_no,
+ compliance_incomplete);
+ }
+ else
+ last_report
+ = g_strdup_printf (""
+ ""
+ "%s"
+ "%s"
+ "%s"
+ ""
+ "%i"
+ "%i"
+ "%i"
+ "%i"
+ ""
+ "%i"
+ ""
+ ""
+ ""
+ "%1.1f"
+ ""
+ ""
+ "",
+ last_report_id,
+ timestamp,
+ scan_start,
+ scan_end,
+ holes,
+ infos,
+ logs,
+ warnings,
+ false_positives,
+ severity);
+ free (scan_start);
+ free (scan_end);
+ g_free (timestamp);
+
+ return last_report;
+}
+
+/**
+ * @brief Send observers XML.
+ *
+ * @param[in] gmp_parser GMP parser.
+ * @param[in] error Error parameter.
+ * @param[in] index Task.
+ *
+ * @return 1 if error, else 0.
+ */
+static int
+get_tasks_send_observers (gmp_parser_t *gmp_parser,
+ GError **error,
+ task_t index)
+{
+ char *owner, *observers;
+ iterator_t groups, roles;
+
+ owner = task_owner_name (index);
+ observers = task_observers (index);
+
+ if (sendf_to_client (gmp_parser, error,
+ "%s",
+ ((owner == NULL)
+ || (strcmp (owner,
+ current_credentials.username)))
+ ? ""
+ : observers))
+ {
+ free (owner);
+ free (observers);
+ return 1;
+ }
+ free (owner);
+ free (observers);
+
+ init_task_group_iterator (&groups, index);
+ while (next (&groups))
+ if (sendf_to_client (gmp_parser, error,
+ ""
+ "%s"
+ "",
+ task_group_iterator_uuid (&groups),
+ task_group_iterator_name (&groups)))
+ {
+ cleanup_iterator (&groups);
+ return 1;
+ }
+ cleanup_iterator (&groups);
+
+ init_task_role_iterator (&roles, index);
+ while (next (&roles))
+ if (sendf_to_client (gmp_parser, error,
+ ""
+ "%s"
+ "",
+ task_role_iterator_uuid (&roles),
+ task_role_iterator_name (&roles)))
+ {
+ cleanup_iterator (&roles);
+ return 1;
+ }
+ cleanup_iterator (&roles);
+
+ if (send_to_client (gmp_parser, error,
+ ""))
+ return 1;
+
+ return 0;
+}
+
+/**
+ * @brief Send alerts XML.
+ *
+ * @param[in] gmp_parser GMP parser.
+ * @param[in] error Error parameter.
+ * @param[in] index Task.
+ *
+ * @return 1 if error, else 0.
+ */
+static int
+get_tasks_send_alerts (gmp_parser_t *gmp_parser, GError **error, task_t index)
+{
+ iterator_t alerts;
+
+ init_task_alert_iterator (&alerts, index);
+ while (next (&alerts))
+ {
+ alert_t found;
+
+ if (find_alert_with_permission (task_alert_iterator_uuid (&alerts),
+ &found,
+ "get_alerts"))
+ abort ();
+
+ if (sendf_to_client (gmp_parser, error,
+ ""
+ "%s",
+ task_alert_iterator_uuid (&alerts),
+ task_alert_iterator_name (&alerts))
+ || send_to_client (gmp_parser, error,
+ found ? "" : ""))
+ {
+ cleanup_iterator (&alerts);
+ return 1;
+ }
+ }
+ cleanup_iterator (&alerts);
+ return 0;
+}
+
+/**
+ * @brief Send preferences.
+ *
+ * @param[in] gmp_parser GMP parser.
+ * @param[in] error Error parameter.
+ * @param[in] index Task.
+ *
+ * @return 1 if error, else 0.
+ */
+static int
+get_tasks_send_prefs (gmp_parser_t *gmp_parser, GError **error, task_t index)
+{
+ gchar *in_assets, *max_checks, *max_hosts;
+ gchar *auto_delete, *auto_delete_data, *assets_apply_overrides;
+ gchar *assets_min_qod;
+
+ in_assets = task_preference_value (index, "in_assets");
+ assets_apply_overrides = task_preference_value
+ (index, "assets_apply_overrides");
+ assets_min_qod = task_preference_value (index, "assets_min_qod");
+ max_checks = task_preference_value (index, "max_checks");
+ max_hosts = task_preference_value (index, "max_hosts");
+ auto_delete = task_preference_value (index, "auto_delete");
+ auto_delete_data = task_preference_value (index, "auto_delete_data");
+
+#define PREF(name, scanner_name) \
+ "" \
+ "" name "" \
+ "" scanner_name "" \
+ "%s" \
+ ""
+
+ if (sendf_to_client (gmp_parser, error,
+ ""
+ PREF("Maximum concurrently executed NVTs per host",
+ "max_checks")
+ PREF("Maximum concurrently scanned hosts",
+ "max_hosts")
+ PREF("Add results to Asset Management",
+ "in_assets")
+ PREF("Apply Overrides when adding Assets",
+ "assets_apply_overrides")
+ PREF("Min QOD when adding Assets",
+ "assets_min_qod")
+ PREF("Auto Delete Reports",
+ "auto_delete")
+ PREF("Auto Delete Reports Data",
+ "auto_delete_data")
+ "",
+ max_checks ? max_checks : "4",
+ max_hosts ? max_hosts : "20",
+ in_assets ? in_assets : "yes",
+ assets_apply_overrides ? assets_apply_overrides : "yes",
+ assets_min_qod
+ ? assets_min_qod
+ : G_STRINGIFY (MIN_QOD_DEFAULT),
+ auto_delete ? auto_delete : "0",
+ auto_delete_data ? auto_delete_data : "0"))
+ return 1;
+
+#undef PREF
+
+ g_free (in_assets);
+ g_free (max_checks);
+ g_free (max_hosts);
+
+ return 0;
+}
+
+/**
+ * @brief Send single task for GET_TASKS.
+ *
+ * @param[in] gmp_parser GMP parser.
+ * @param[in] error Error parameter.
+ * @param[in] tasks Task iterator.
+ * @param[in] apply_overrides Whether to apply overrides.
+ * @param[in] min_qod Minimum QOD.
+ *
+ * @return 1 if error, else 0.
+ */
+static int
+get_tasks_send_task (gmp_parser_t *gmp_parser,
+ GError **error,
+ iterator_t *tasks,
+ int apply_overrides,
+ int min_qod)
+{
+ task_t index;
+ target_t target;
+ scanner_t scanner;
+ const char *first_report_id, *last_report_id;
+ char *config_name, *config_uuid, *task_target_uuid, *task_target_name;
+ char *task_scanner_uuid, *task_scanner_name;
+ gchar *progress_xml, *task_schedule_xml, *config_name_escaped;
+ gchar *task_target_name_escaped, *task_scanner_name_escaped;
+ gchar *last_report, *second_last_report_id, *current_report, *response;
+ report_t running_report;
+ int target_in_trash, scanner_in_trash, task_scanner_type;
+ int holes, infos, logs, warnings, holes_2, infos_2, warnings_2;
+ int false_positives, target_available, config_available, scanner_available;
+ double severity, severity_2;
+
+ holes = infos = logs = warnings = false_positives = 0;
+ holes_2 = infos_2 = warnings_2 = 0;
+ severity = severity_2 = 0;
+ index = get_iterator_resource (tasks);
+ target = task_target (index);
+
+ if (send_get_common ("task", &get_tasks_data->get, tasks,
+ gmp_parser, error,
+ get_tasks_data->get.trash
+ ? trash_task_writable (index)
+ : task_writable (index),
+ get_tasks_data->get.trash
+ ? trash_task_in_use (index)
+ : task_in_use (index)))
+ return 1;
+
+ target_in_trash = task_target_in_trash (index);
+
+ running_report = 0;
+ if ((target == 0)
+ && (task_iterator_run_status (tasks)
+ == TASK_STATUS_RUNNING))
+ progress_xml = g_strdup_printf
+ ("%i",
+ task_upload_progress (index));
+ else
+ {
+ running_report = task_iterator_current_report (tasks);
+ progress_xml
+ = g_strdup_printf ("%i", report_progress (running_report));
+ }
+
+ current_report = get_current_report_xml (running_report);
+
+ first_report_id = task_iterator_first_report (tasks);
+ if (first_report_id && (get_tasks_data->get.trash == 0))
+ {
+ // TODO Could skip this count for tasks page.
+ if (report_counts (first_report_id,
+ &holes_2, &infos_2, &logs,
+ &warnings_2, &false_positives,
+ &severity_2, apply_overrides, min_qod))
+ g_error ("%s: GET_TASKS: error getting counts for"
+ " first report, aborting",
+ __func__);
+ }
+
+ second_last_report_id = task_second_last_report_id (index);
+ if (second_last_report_id && (get_tasks_data->get.trash == 0))
+ {
+ /* If the first report is the second last report then skip
+ * doing the count again. */
+ if (((first_report_id == NULL)
+ || (strcmp (second_last_report_id, first_report_id)))
+ && report_counts (second_last_report_id,
+ &holes_2, &infos_2,
+ &logs, &warnings_2,
+ &false_positives, &severity_2,
+ apply_overrides, min_qod))
+ g_error ("%s: GET_TASKS: error getting counts for"
+ " second report, aborting",
+ __func__);
+ }
+
+ last_report_id = task_iterator_last_report (tasks);
+ if (get_tasks_data->get.trash && last_report_id)
+ last_report = get_last_report_xml_trash (last_report_id);
+ else if (last_report_id)
+ {
+ /* If the last report is the first report or the second
+ * last report, then reuse the counts from before. */
+ if ((first_report_id == NULL)
+ || (second_last_report_id == NULL)
+ || (strcmp (last_report_id, first_report_id)
+ && strcmp (last_report_id,
+ second_last_report_id)))
+ {
+ if (report_counts
+ (last_report_id,
+ &holes, &infos, &logs,
+ &warnings, &false_positives, &severity,
+ apply_overrides, min_qod))
+ g_error ("%s: GET_TASKS: error getting counts for"
+ " last report, aborting",
+ __func__);
+ }
+ else
+ {
+ holes = holes_2;
+ infos = infos_2;
+ warnings = warnings_2;
+ severity = severity_2;
+ }
+
+ last_report = get_last_report_xml (tasks, last_report_id, holes, infos,
+ logs, warnings, false_positives,
+ severity);
+ }
+ else
+ last_report = g_strdup ("");
+
+ g_free (second_last_report_id);
+
+ config_name = task_config_name (index);
+ config_uuid = task_config_uuid (index);
+ target_available = 1;
+ if (target_in_trash)
+ {
+ task_target_uuid = trash_target_uuid (target);
+ task_target_name = trash_target_name (target);
+ target_available = trash_target_readable (target);
+ }
+ else if (target)
+ {
+ target_t found;
+ task_target_uuid = target_uuid (target);
+ task_target_name = target_name (target);
+ if (find_target_with_permission (task_target_uuid,
+ &found,
+ "get_targets"))
+ g_error ("%s: GET_TASKS: error finding task target,"
+ " aborting",
+ __func__);
+ target_available = (found > 0);
+ }
+ else
+ {
+ task_target_uuid = NULL;
+ task_target_name = NULL;
+ }
+
+ config_available = 1;
+ if (task_config_in_trash (index))
+ config_available = trash_config_readable_uuid (config_uuid);
+ else if (config_uuid)
+ {
+ config_t found;
+ if (find_config_with_permission (config_uuid,
+ &found,
+ "get_configs"))
+ g_error ("%s: GET_TASKS: error finding task config,"
+ " aborting",
+ __func__);
+ config_available = (found > 0);
+ }
+
+ scanner_available = 1;
+ scanner = task_iterator_scanner (tasks);
+ if (scanner)
+ {
+ scanner_in_trash = task_scanner_in_trash (index);
+
+ task_scanner_uuid = scanner_uuid (scanner);
+ task_scanner_name = scanner_name (scanner);
+ task_scanner_type = scanner_type (scanner);
+ if (scanner_in_trash)
+ scanner_available = trash_scanner_readable (scanner);
+ else
+ {
+ scanner_t found;
+
+ if (find_scanner_with_permission
+ (task_scanner_uuid, &found, "get_scanners"))
+ g_error ("%s: GET_TASKS: error finding"
+ " task scanner, aborting",
+ __func__);
+ scanner_available = (found > 0);
+ }
+ }
+ else
+ {
+ /* Container tasks have no associated scanner. */
+ task_scanner_uuid = g_strdup ("");
+ task_scanner_name = g_strdup ("");
+ task_scanner_type = 0;
+ scanner_in_trash = 0;
+ }
+
+ config_name_escaped
+ = config_name
+ ? g_markup_escape_text (config_name, -1)
+ : NULL;
+ task_target_name_escaped
+ = task_target_name
+ ? g_markup_escape_text (task_target_name, -1)
+ : NULL;
+ task_scanner_name_escaped
+ = task_scanner_name
+ ? g_markup_escape_text (task_scanner_name, -1)
+ : NULL;
+
+ task_schedule_xml = get_task_schedule_xml (index);
+
+ response = g_strdup_printf
+ ("%i"
+ "%s"
+ ""
+ "%s"
+ "%i"
+ "%s"
+ ""
+ ""
+ "%s"
+ "%i"
+ "%s"
+ ""
+ "%s"
+ ""
+ "%s"
+ "%d"
+ "%i"
+ "%s"
+ ""
+ "%s"
+ ""
+ ""
+ "%u%u"
+ ""
+ "%s"
+ "%s" // Schedule XML
+ "%s%s",
+ get_tasks_data->get.trash
+ ? 0
+ : task_alterable (index),
+ task_iterator_usage_type (tasks),
+ config_uuid ?: "",
+ config_name_escaped ?: "",
+ task_config_in_trash (index),
+ config_available ? "" : "",
+ task_target_uuid ?: "",
+ task_target_name_escaped ?: "",
+ target_in_trash,
+ target_available ? "" : "",
+ task_iterator_hosts_ordering (tasks)
+ ? task_iterator_hosts_ordering (tasks)
+ : "",
+ task_scanner_uuid,
+ task_scanner_name_escaped,
+ task_scanner_type,
+ scanner_in_trash,
+ scanner_available ? "" : "",
+ task_iterator_run_status_name (tasks),
+ progress_xml,
+ task_iterator_total_reports (tasks),
+ task_iterator_finished_reports (tasks),
+ get_tasks_data->get.trash
+ ? ""
+ : task_iterator_trend_counts
+ (tasks, holes, warnings, infos, severity,
+ holes_2, warnings_2, infos_2, severity_2),
+ task_schedule_xml,
+ current_report,
+ last_report);
+ g_free (config_name);
+ g_free (config_uuid);
+ g_free (config_name_escaped);
+ free (task_target_name);
+ free (task_target_uuid);
+ g_free (task_target_name_escaped);
+ g_free (progress_xml);
+ g_free (current_report);
+ g_free (last_report);
+ g_free (task_schedule_xml);
+ g_free (task_scanner_uuid);
+ g_free (task_scanner_name);
+ g_free (task_scanner_name_escaped);
+ if (send_to_client (gmp_parser, error, response))
+ {
+ g_free (response);
+ cleanup_iterator (tasks);
+ return 1;
+ }
+ g_free (response);
- return g_string_free (xml, FALSE);
-}
+ if (get_tasks_send_observers (gmp_parser, error, index))
+ goto cleanup_exit;
+
+ if (get_tasks_send_alerts (gmp_parser, error, index))
+ goto cleanup_exit;
+
+ if ((get_tasks_data->get.details
+ || get_tasks_data->get.id)
+ && sendf_to_client (gmp_parser, error,
+ ""
+ "%d"
+ "",
+ task_average_scan_duration (index)))
+ goto cleanup_exit;
+
+ if (get_tasks_data->get.details
+ /* The detailed version. */
+ && sendf_to_client (gmp_parser, error,
+ "%i",
+ task_result_count (index, min_qod)))
+ goto cleanup_exit;
+
+ if (get_tasks_send_prefs (gmp_parser, error, index))
+ goto cleanup_exit;
+ if (send_to_client (gmp_parser, error, ""))
+ goto cleanup_exit;
+
+ return 0;
+
+ cleanup_exit:
+ cleanup_iterator (tasks);
+ return 1;
+}
/**
* @brief Handle end of GET_TASKS element.
@@ -17792,20 +18343,15 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("get_tasks",
"task",
get_tasks_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_tasks", "filter", get_tasks_data->get.filt_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -17842,36 +18388,6 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error)
while (1)
{
- task_t index;
- gchar *progress_xml;
- target_t target;
- scanner_t scanner;
- const char *first_report_id, *last_report_id;
- char *config_name, *config_uuid;
- gchar *config_name_escaped;
- char *task_target_uuid, *task_target_name;
- gchar *task_target_name_escaped;
- gchar *task_schedule_xml;
- char *task_scanner_uuid, *task_scanner_name;
- gchar *task_scanner_name_escaped;
- gchar *last_report;
- gchar *second_last_report_id;
- gchar *current_report;
- report_t running_report;
- char *owner, *observers;
- int target_in_trash, scanner_in_trash;
- int holes = 0, infos = 0, logs = 0, warnings = 0;
- int holes_2 = 0, infos_2 = 0, warnings_2 = 0;
- int false_positives = 0, task_scanner_type;
- int target_available, config_available;
- int scanner_available;
- double severity = 0, severity_2 = 0;
- gchar *response;
- iterator_t alerts, groups, roles;
- gchar *in_assets, *max_checks, *max_hosts;
- gchar *auto_delete, *auto_delete_data, *assets_apply_overrides;
- gchar *assets_min_qod;
-
ret = get_next (&tasks, &get_tasks_data->get, &first, &count,
init_task_iterator);
if (ret == 1)
@@ -17882,580 +18398,16 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error)
return;
}
- index = get_iterator_resource (&tasks);
- target = task_target (index);
-
- task_schedule_xml = get_task_schedule_xml (index);
-
if (get_tasks_data->schedules_only)
{
- SENDF_TO_CLIENT_OR_FAIL (""
- "%s",
- get_iterator_uuid (&tasks),
- get_iterator_name (&tasks));
-
- SEND_TO_CLIENT_OR_FAIL (task_schedule_xml);
- g_free (task_schedule_xml);
-
- SENDF_TO_CLIENT_OR_FAIL ("");
-
+ if (get_tasks_send_schedules_only (gmp_parser, error, &tasks))
+ return;
}
else
{
- SEND_GET_COMMON (task, &get_tasks_data->get, &tasks);
- target_in_trash = task_target_in_trash (index);
- if ((target == 0)
- && (task_iterator_run_status (&tasks)
- == TASK_STATUS_RUNNING))
- {
- progress_xml = g_strdup_printf
- ("%i",
- task_upload_progress (index));
- running_report = 0;
- }
- else
- {
- int progress;
-
- running_report = task_iterator_current_report (&tasks);
- progress
- = report_progress (running_report);
- progress_xml
- = g_strdup_printf ("%i", progress);
- }
-
- if (running_report)
- {
- gchar *timestamp;
- char *scan_start, *scan_end, *current_report_id;
-
- current_report_id = report_uuid (running_report);
-
- if (report_timestamp (current_report_id, ×tamp))
- g_error ("%s: GET_TASKS: error getting timestamp"
- " of report, aborting",
- __func__);
-
- scan_start = scan_start_time_uuid (current_report_id),
- scan_end = scan_end_time_uuid (current_report_id),
-
- current_report = g_strdup_printf (""
- ""
- ""
- "%s"
- ""
- ""
- "%s"
- ""
- ""
- "%s"
- ""
- ""
- "",
- current_report_id,
- timestamp,
- scan_start,
- scan_end);
- free (current_report_id);
- free (scan_start);
- free (scan_end);
- g_free (timestamp);
- }
- else
- current_report = g_strdup ("");
-
- first_report_id = task_iterator_first_report (&tasks);
- if (first_report_id && (get_tasks_data->get.trash == 0))
- {
- // TODO Could skip this count for tasks page.
- if (report_counts (first_report_id,
- &holes_2, &infos_2, &logs,
- &warnings_2, &false_positives,
- &severity_2, apply_overrides, min_qod))
- g_error ("%s: GET_TASKS: error getting counts for"
- " first report, aborting",
- __func__);
- }
-
- second_last_report_id = task_second_last_report_id (index);
- if (second_last_report_id && (get_tasks_data->get.trash == 0))
- {
- /* If the first report is the second last report then skip
- * doing the count again. */
- if (((first_report_id == NULL)
- || (strcmp (second_last_report_id, first_report_id)))
- && report_counts (second_last_report_id,
- &holes_2, &infos_2,
- &logs, &warnings_2,
- &false_positives, &severity_2,
- apply_overrides, min_qod))
- g_error ("%s: GET_TASKS: error getting counts for"
- " second report, aborting",
- __func__);
- }
-
- last_report_id = task_iterator_last_report (&tasks);
- if (get_tasks_data->get.trash && last_report_id)
- {
- gchar *timestamp;
- char *scan_start, *scan_end;
-
- if (report_timestamp (last_report_id, ×tamp))
- g_error ("%s: GET_TASKS: error getting timestamp for"
- " last report, aborting",
- __func__);
-
- scan_start = scan_start_time_uuid (last_report_id);
- scan_end = scan_end_time_uuid (last_report_id);
-
- last_report = g_strdup_printf (""
- ""
- "%s"
- "%s"
- "%s"
- ""
- "",
- last_report_id,
- timestamp,
- scan_start,
- scan_end);
-
- free (scan_start);
- free (scan_end);
- g_free (timestamp);
- }
- else if (last_report_id)
- {
- gchar *timestamp;
- char *scan_start, *scan_end;
-
- /* If the last report is the first report or the second
- * last report, then reuse the counts from before. */
- if ((first_report_id == NULL)
- || (second_last_report_id == NULL)
- || (strcmp (last_report_id, first_report_id)
- && strcmp (last_report_id,
- second_last_report_id)))
- {
- if (report_counts
- (last_report_id,
- &holes, &infos, &logs,
- &warnings, &false_positives, &severity,
- apply_overrides, min_qod))
- g_error ("%s: GET_TASKS: error getting counts for"
- " last report, aborting",
- __func__);
- }
- else
- {
- holes = holes_2;
- infos = infos_2;
- warnings = warnings_2;
- severity = severity_2;
- }
-
- if (report_timestamp (last_report_id, ×tamp))
- g_error ("%s: GET_TASKS: error getting timestamp for"
- " last report, aborting",
- __func__);
-
- scan_start = scan_start_time_uuid (last_report_id);
- scan_end = scan_end_time_uuid (last_report_id);
-
- if (strcmp (task_iterator_usage_type (&tasks), "audit") == 0)
- {
- int compliance_yes, compliance_no, compliance_incomplete;
-
- report_compliance_by_uuid (last_report_id,
- &compliance_yes,
- &compliance_no,
- &compliance_incomplete);
-
- last_report
- = g_strdup_printf (""
- ""
- "%s"
- "%s"
- "%s"
- ""
- "%d"
- "%d"
- "%d"
- ""
- ""
- "",
- last_report_id,
- timestamp,
- scan_start,
- scan_end,
- compliance_yes,
- compliance_no,
- compliance_incomplete);
- }
- else
- last_report
- = g_strdup_printf (""
- ""
- "%s"
- "%s"
- "%s"
- ""
- "%i"
- "%i"
- "%i"
- "%i"
- ""
- "%i"
- ""
- ""
- ""
- "%1.1f"
- ""
- ""
- "",
- last_report_id,
- timestamp,
- scan_start,
- scan_end,
- holes,
- infos,
- logs,
- warnings,
- false_positives,
- severity);
- free (scan_start);
- free (scan_end);
- g_free (timestamp);
- }
- else
- last_report = g_strdup ("");
-
- g_free (second_last_report_id);
-
- owner = task_owner_name (index);
- observers = task_observers (index);
- config_name = task_config_name (index);
- config_uuid = task_config_uuid (index);
- target_available = 1;
- if (target_in_trash)
- {
- task_target_uuid = trash_target_uuid (target);
- task_target_name = trash_target_name (target);
- target_available = trash_target_readable (target);
- }
- else if (target)
- {
- target_t found;
- task_target_uuid = target_uuid (target);
- task_target_name = target_name (target);
- if (find_target_with_permission (task_target_uuid,
- &found,
- "get_targets"))
- g_error ("%s: GET_TASKS: error finding task target,"
- " aborting",
- __func__);
- target_available = (found > 0);
- }
- else
- {
- task_target_uuid = NULL;
- task_target_name = NULL;
- }
- config_available = 1;
- if (task_config_in_trash (index))
- config_available = trash_config_readable_uuid (config_uuid);
- else if (config_uuid)
- {
- config_t found;
- if (find_config_with_permission (config_uuid,
- &found,
- "get_configs"))
- g_error ("%s: GET_TASKS: error finding task config,"
- " aborting",
- __func__);
- config_available = (found > 0);
- }
- scanner_available = 1;
- scanner = task_iterator_scanner (&tasks);
- if (scanner)
- {
- scanner_in_trash = task_scanner_in_trash (index);
-
- task_scanner_uuid = scanner_uuid (scanner);
- task_scanner_name = scanner_name (scanner);
- task_scanner_type = scanner_type (scanner);
- if (scanner_in_trash)
- scanner_available = trash_scanner_readable (scanner);
- else
- {
- scanner_t found;
-
- if (find_scanner_with_permission
- (task_scanner_uuid, &found, "get_scanners"))
- g_error ("%s: GET_TASKS: error finding"
- " task scanner, aborting",
- __func__);
- scanner_available = (found > 0);
- }
- }
- else
- {
- /* Container tasks have no associated scanner. */
- task_scanner_uuid = g_strdup ("");
- task_scanner_name = g_strdup ("");
- task_scanner_type = 0;
- scanner_in_trash = 0;
- }
-
- config_name_escaped
- = config_name
- ? g_markup_escape_text (config_name, -1)
- : NULL;
- task_target_name_escaped
- = task_target_name
- ? g_markup_escape_text (task_target_name, -1)
- : NULL;
- task_scanner_name_escaped
- = task_scanner_name
- ? g_markup_escape_text (task_scanner_name, -1)
- : NULL;
-
- response = g_strdup_printf
- ("%i"
- "%s"
- ""
- "%s"
- "%i"
- "%s"
- ""
- ""
- "%s"
- "%i"
- "%s"
- ""
- "%s"
- ""
- "%s"
- "%d"
- "%i"
- "%s"
- ""
- "%s"
- ""
- ""
- "%u%u"
- ""
- "%s"
- "%s" // Schedule XML
- "%s%s",
- get_tasks_data->get.trash
- ? 0
- : task_alterable (index),
- task_iterator_usage_type (&tasks),
- config_uuid ?: "",
- config_name_escaped ?: "",
- task_config_in_trash (index),
- config_available ? "" : "",
- task_target_uuid ?: "",
- task_target_name_escaped ?: "",
- target_in_trash,
- target_available ? "" : "",
- task_iterator_hosts_ordering (&tasks)
- ? task_iterator_hosts_ordering (&tasks)
- : "",
- task_scanner_uuid,
- task_scanner_name_escaped,
- task_scanner_type,
- scanner_in_trash,
- scanner_available ? "" : "",
- task_iterator_run_status_name (&tasks),
- progress_xml,
- task_iterator_total_reports (&tasks),
- task_iterator_finished_reports (&tasks),
- get_tasks_data->get.trash
- ? ""
- : task_iterator_trend_counts
- (&tasks, holes, warnings, infos, severity,
- holes_2, warnings_2, infos_2, severity_2),
- task_schedule_xml,
- current_report,
- last_report);
- g_free (config_name);
- g_free (config_uuid);
- g_free (config_name_escaped);
- free (task_target_name);
- free (task_target_uuid);
- g_free (task_target_name_escaped);
- g_free (progress_xml);
- g_free (current_report);
- g_free (last_report);
- g_free (task_schedule_xml);
- g_free (task_scanner_uuid);
- g_free (task_scanner_name);
- g_free (task_scanner_name_escaped);
- if (send_to_client (response,
- gmp_parser->client_writer,
- gmp_parser->client_writer_data))
- {
- g_free (response);
- cleanup_iterator (&tasks);
- error_send_to_client (error);
- cleanup_iterator (&tasks);
- return;
- }
- g_free (response);
-
- SENDF_TO_CLIENT_OR_FAIL
- ("%s",
- ((owner == NULL)
- || (strcmp (owner,
- current_credentials.username)))
- ? ""
- : observers);
- free (owner);
- free (observers);
-
- init_task_group_iterator (&groups, index);
- while (next (&groups))
- SENDF_TO_CLIENT_OR_FAIL
- (""
- "%s"
- "",
- task_group_iterator_uuid (&groups),
- task_group_iterator_name (&groups));
- cleanup_iterator (&groups);
-
- init_task_role_iterator (&roles, index);
- while (next (&roles))
- SENDF_TO_CLIENT_OR_FAIL
- (""
- "%s"
- "",
- task_role_iterator_uuid (&roles),
- task_role_iterator_name (&roles));
- cleanup_iterator (&roles);
-
- SENDF_TO_CLIENT_OR_FAIL ("");
-
- init_task_alert_iterator (&alerts, index);
- while (next (&alerts))
- {
- alert_t found;
-
- if (find_alert_with_permission (task_alert_iterator_uuid
- (&alerts),
- &found,
- "get_alerts"))
- abort ();
-
- SENDF_TO_CLIENT_OR_FAIL
- (""
- "%s",
- task_alert_iterator_uuid (&alerts),
- task_alert_iterator_name (&alerts));
-
- if (found)
- SENDF_TO_CLIENT_OR_FAIL
- ("");
- else
- SENDF_TO_CLIENT_OR_FAIL
- (""
- "");
- }
- cleanup_iterator (&alerts);
-
- if (get_tasks_data->get.details
- || get_tasks_data->get.id)
- {
- SENDF_TO_CLIENT_OR_FAIL (""
- "%d"
- "",
- task_average_scan_duration (index));
- }
-
- if (get_tasks_data->get.details)
- {
- /* The detailed version. */
-
- SENDF_TO_CLIENT_OR_FAIL ("%i",
- task_result_count (index, min_qod));
- }
-
- in_assets = task_preference_value (index, "in_assets");
- assets_apply_overrides = task_preference_value
- (index, "assets_apply_overrides");
- assets_min_qod = task_preference_value (index, "assets_min_qod");
- max_checks = task_preference_value (index, "max_checks");
- max_hosts = task_preference_value (index, "max_hosts");
- auto_delete = task_preference_value (index, "auto_delete");
- auto_delete_data = task_preference_value (index, "auto_delete_data");
-
- SENDF_TO_CLIENT_OR_FAIL
- (""
- ""
- ""
- "Maximum concurrently executed NVTs per host"
- ""
- "max_checks"
- "%s"
- ""
- ""
- ""
- "Maximum concurrently scanned hosts"
- ""
- "max_hosts"
- "%s"
- ""
- ""
- ""
- "Add results to Asset Management"
- ""
- "in_assets"
- "%s"
- ""
- ""
- ""
- "Apply Overrides when adding Assets"
- ""
- "assets_apply_overrides"
- "%s"
- ""
- ""
- ""
- "Min QOD when adding Assets"
- ""
- "assets_min_qod"
- "%s"
- ""
- ""
- ""
- "Auto Delete Reports"
- ""
- "auto_delete"
- "%s"
- ""
- ""
- ""
- "Auto Delete Reports Data"
- ""
- "auto_delete_data"
- "%s"
- ""
- ""
- "",
- max_checks ? max_checks : "4",
- max_hosts ? max_hosts : "20",
- in_assets ? in_assets : "yes",
- assets_apply_overrides ? assets_apply_overrides : "yes",
- assets_min_qod
- ? assets_min_qod
- : G_STRINGIFY (MIN_QOD_DEFAULT),
- auto_delete ? auto_delete : "0",
- auto_delete_data ? auto_delete_data : "0");
-
- g_free (in_assets);
- g_free (max_checks);
- g_free (max_hosts);
+ if (get_tasks_send_task (gmp_parser, error, &tasks, apply_overrides,
+ min_qod))
+ return;
}
count++;
@@ -18493,20 +18445,15 @@ handle_get_users (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("get_users",
"user",
get_users_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_users", "filter", get_users_data->get.filt_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -18643,20 +18590,15 @@ handle_get_vulns (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("get_vulns",
"vuln",
get_vulns_data->get.id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
break;
case 2:
if (send_find_error_to_client
("get_vulns", "filter",
- get_vulns_data->get.filt_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ get_vulns_data->get.filt_id, gmp_parser, error))
+ return;
break;
case -1:
SEND_TO_CLIENT_OR_FAIL
@@ -18761,11 +18703,9 @@ handle_create_scanner (gmp_parser_t *gmp_parser, GError **error)
goto create_scanner_leave;
case 2:
if (send_find_error_to_client ("create_scanner", "scanner",
- create_scanner_data->copy, gmp_parser))
- {
- error_send_to_client (error);
- goto create_scanner_leave;
- }
+ create_scanner_data->copy, gmp_parser,
+ error))
+ goto create_scanner_leave;
log_event_fail ("scanner", "Scanner", NULL, "created");
goto create_scanner_leave;
case 98:
@@ -18857,11 +18797,8 @@ handle_create_scanner (gmp_parser_t *gmp_parser, GError **error)
case 3:
if (send_find_error_to_client ("create_scanner", "credential",
create_scanner_data->credential_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("scanner", "Scanner", NULL, "created");
break;
case 4:
@@ -18944,11 +18881,8 @@ handle_modify_scanner (gmp_parser_t *gmp_parser, GError **error)
case 1:
if (send_find_error_to_client ("modify_scanner", "scanner",
modify_scanner_data->scanner_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("scanner", "Scanner", modify_scanner_data->scanner_id,
"modified");
break;
@@ -18974,11 +18908,8 @@ handle_modify_scanner (gmp_parser_t *gmp_parser, GError **error)
case 5:
if (send_find_error_to_client ("create_scanner", "credential",
modify_scanner_data->credential_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("scanner", "Scanner", modify_scanner_data->scanner_id,
"modified");
break;
@@ -19193,9 +19124,6 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
GError **error)
{
gmp_parser_t *gmp_parser = (gmp_parser_t*) user_data;
- int (*write_to_client) (const char *, void*)
- = (int (*) (const char *, void*)) gmp_parser->client_writer;
- void* write_to_client_data = (void*) gmp_parser->client_writer_data;
g_debug (" XML end: %s", element_name);
@@ -19344,11 +19272,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
("delete_asset",
"asset",
delete_asset_data->asset_id,
- gmp_parser))
- {
- error_send_to_client (error);
+ gmp_parser,
+ error))
return;
- }
log_event_fail ("asset", "Asset",
delete_asset_data->asset_id,
"deleted");
@@ -19419,11 +19345,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
if (send_find_error_to_client
("delete_report", "report",
delete_report_data->report_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("report", "Report",
delete_report_data->report_id,
"deleted");
@@ -19504,11 +19427,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 3: /* Failed to find task. */
if (send_find_error_to_client
("delete_task", "task", delete_task_data->task_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 4:
SENDF_TO_CLIENT_OR_FAIL(
@@ -19584,11 +19504,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
delete_user_data->user_id
? delete_user_data->user_id
: delete_user_data->name,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
log_event_fail ("user", "User", delete_user_data->user_id,
"deleted");
break;
@@ -19611,11 +19529,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 6:
if (send_find_error_to_client ("delete_user", "inheriting user",
delete_user_data->inheritor_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 7:
SEND_TO_CLIENT_OR_FAIL
@@ -20060,13 +19975,10 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
gchar *base64;
base64 = g_base64_encode ((guchar*) output, output_len);
- if (send_to_client (base64,
- write_to_client,
- write_to_client_data))
+ if (send_to_client (gmp_parser, error, base64))
{
g_free (output);
g_free (base64);
- error_send_to_client (error);
return;
}
g_free (base64);
@@ -20074,12 +19986,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
else
{
/* Special case the XML schema, bah. */
- if (send_to_client (output,
- write_to_client,
- write_to_client_data))
+ if (send_to_client (gmp_parser, error, output))
{
g_free (output);
- error_send_to_client (error);
return;
}
}
@@ -20092,11 +20001,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
assert (help_data->format);
if (send_find_error_to_client ("help", "schema_format",
- help_data->format, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ help_data->format, gmp_parser,
+ error))
+ return;
break;
default:
SEND_TO_CLIENT_OR_FAIL (XML_INTERNAL_ERROR ("help"));
@@ -20262,11 +20169,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 2:
if (send_find_error_to_client ("create_alert", "alert",
create_alert_data->copy,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("alert", "Alert", NULL, "created");
break;
case 99:
@@ -20358,11 +20262,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 3:
if (send_find_error_to_client ("create_alert", "filter",
create_alert_data->filter_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("alert", "Alert", NULL, "created");
break;
case 4:
@@ -20712,11 +20613,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
if (send_find_error_to_client ("create_credential",
"credential",
create_credential_data->copy,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("credential", "Credential", NULL, "created");
break;
case 99:
@@ -20968,11 +20866,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 2:
if (send_find_error_to_client ("create_filter", "filter",
create_filter_data->copy,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("filter", "Filter", NULL, "created");
break;
case 99:
@@ -21079,11 +20974,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 2:
if (send_find_error_to_client ("create_group", "group",
create_group_data->copy,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("group", "Group", NULL, "created");
break;
case 4:
@@ -21201,11 +21093,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 2:
if (send_find_error_to_client ("create_note", "note",
create_note_data->copy,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("note", "Note", NULL, "created");
break;
case 99:
@@ -21249,11 +21138,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
{
if (send_find_error_to_client ("create_note", "task",
create_note_data->task_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
else if (create_note_data->result_id
&& find_result_with_permission (create_note_data->result_id,
@@ -21264,11 +21150,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
{
if (send_find_error_to_client ("create_note", "result",
create_note_data->result_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
else switch (create_note (create_note_data->active,
create_note_data->nvt_oid,
@@ -21294,11 +21177,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
if (send_find_error_to_client ("create_note", "nvt",
create_note_data->nvt_oid,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 2:
SEND_TO_CLIENT_OR_FAIL
@@ -21365,11 +21245,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 2:
if (send_find_error_to_client ("create_override", "override",
create_override_data->copy,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("override", "Override", NULL, "created");
break;
case 99:
@@ -21420,11 +21297,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
{
if (send_find_error_to_client ("create_override", "task",
create_override_data->task_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
else if (create_override_data->result_id
&& find_result_with_permission (create_override_data->result_id,
@@ -21435,11 +21309,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
{
if (send_find_error_to_client ("create_override", "result",
create_override_data->result_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
else switch (create_override (create_override_data->active,
create_override_data->nvt_oid,
@@ -21467,11 +21338,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
if (send_find_error_to_client ("create_override", "nvt",
create_override_data->nvt_oid,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 2:
SEND_TO_CLIENT_OR_FAIL
@@ -21546,11 +21414,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
if (send_find_error_to_client ("create_permission",
"permission",
create_permission_data->copy,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("permission", "Permission", NULL, "created");
break;
case 99:
@@ -21597,21 +21462,15 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 2:
if (send_find_error_to_client
("create_permission", "subject",
- create_permission_data->subject_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ create_permission_data->subject_id, gmp_parser, error))
+ return;
log_event_fail ("permission", "Permission", NULL, "created");
break;
case 3:
if (send_find_error_to_client
- ("create_permission", "resource",
- create_permission_data->resource_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ ("create_permission", "resource",
+ create_permission_data->resource_id, gmp_parser, error))
+ return;
log_event_fail ("permission", "Permission", NULL, "created");
break;
case 5:
@@ -21712,11 +21571,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 3:
if (send_find_error_to_client
("create_port_range", "port_range",
- create_port_range_data->port_list_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ create_port_range_data->port_list_id, gmp_parser, error))
+ return;
log_event_fail ("port_range", "Port Range", NULL, "created");
break;
case 4:
@@ -21819,11 +21675,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
log_event_fail ("report", "Report", NULL, "created");
if (send_find_error_to_client
("create_report", "task",
- create_report_data->task_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ create_report_data->task_id, gmp_parser, error))
+ return;
break;
case -5:
SEND_TO_CLIENT_OR_FAIL
@@ -22098,11 +21951,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 2:
if (send_find_error_to_client ("create_role", "role",
create_role_data->copy,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("role", "Role", NULL, "created");
break;
case 4:
@@ -22242,11 +22092,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 2:
if (send_find_error_to_client ("create_tag", "tag",
create_tag_data->copy,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("tag", "Tag", NULL, "created");
break;
case 99:
@@ -22317,9 +22164,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
if (send_find_error_to_client ("create_tag", "resource",
error_extra,
- gmp_parser))
+ gmp_parser, error))
{
- error_send_to_client (error);
g_free (error_extra);
return;
}
@@ -22402,11 +22248,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 2:
if (send_find_error_to_client ("create_target", "target",
create_target_data->copy,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("target", "Target", NULL, "created");
break;
case 99:
@@ -22465,11 +22308,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
create_target_data->ssh_credential_id
? create_target_data->ssh_credential_id
: create_target_data->ssh_lsc_credential_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
else if (create_target_data->ssh_elevate_credential_id
&& find_credential_with_permission
@@ -22499,11 +22339,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
create_target_data->smb_credential_id
? create_target_data->smb_credential_id
: create_target_data->smb_lsc_credential_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
else if (create_target_data->esxi_credential_id
&& find_credential_with_permission
@@ -22527,11 +22364,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
create_target_data->esxi_credential_id
? create_target_data->esxi_credential_id
: create_target_data->esxi_lsc_credential_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
else if (create_target_data->snmp_credential_id
&& find_credential_with_permission
@@ -22545,11 +22379,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
if (send_find_error_to_client
("create_target", "Credential",
create_target_data->snmp_credential_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
}
/* Create target from host string. */
else switch (create_target
@@ -22609,11 +22440,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
log_event_fail ("target", "Target", NULL, "created");
if (send_find_error_to_client
("create_target", "port_list",
- create_target_data->port_list_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ create_target_data->port_list_id, gmp_parser, error))
+ return;
break;
case 7:
SEND_TO_CLIENT_OR_FAIL
@@ -22795,11 +22623,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 2:
if (send_find_error_to_client ("create_task", "task",
create_task_data->copy,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("task", "Task", NULL, "created");
break;
case 99:
@@ -23008,11 +22833,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
break;
case 1:
if (send_find_error_to_client
- ("create_task", "group", fail_group_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ ("create_task", "group", fail_group_id, gmp_parser,
+ error))
+ return;
log_event_fail ("task", "Task", NULL, "created");
goto create_task_fail;
case -1:
@@ -23033,10 +22856,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
}
if (create_task_data->scanner_id && scanner == 0)
{
- if (send_find_error_to_client ("create_task", "scanner",
- create_task_data->scanner_id,
- gmp_parser))
- error_send_to_client (error);
+ send_find_error_to_client ("create_task", "scanner",
+ create_task_data->scanner_id,
+ gmp_parser, error);
goto create_task_fail;
}
if ((scanner == 0) || (scanner_type (scanner) != SCANNER_TYPE_CVE))
@@ -23050,10 +22872,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
}
if (config == 0)
{
- if (send_find_error_to_client ("create_task", "config",
- create_task_data->config_id,
- gmp_parser))
- error_send_to_client (error);
+ send_find_error_to_client ("create_task", "config",
+ create_task_data->config_id,
+ gmp_parser, error);
goto create_task_fail;
}
@@ -23074,10 +22895,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
}
if (target == 0)
{
- if (send_find_error_to_client ("create_task", "target",
- create_task_data->target_id,
- gmp_parser))
- error_send_to_client (error);
+ send_find_error_to_client ("create_task", "target",
+ create_task_data->target_id,
+ gmp_parser, error);
goto create_task_fail;
}
@@ -23201,12 +23021,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 2:
if (send_find_error_to_client ("create_user", "user",
create_user_data->copy,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
- log_event_fail ("user", "User", NULL, "created");
+ gmp_parser, error))
+ return;
+ log_event_fail ("user", "User", NULL, "created");
break;
case 99:
SEND_TO_CLIENT_OR_FAIL
@@ -23256,20 +23073,14 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
}
case 1:
if (send_find_error_to_client
- ("create_user", "group", fail_group_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ ("create_user", "group", fail_group_id, gmp_parser, error))
+ return;
log_event_fail ("user", "User", NULL, "created");
break;
case 2:
if (send_find_error_to_client
- ("create_user", "role", fail_role_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ ("create_user", "role", fail_role_id, gmp_parser, error))
+ return;
log_event_fail ("user", "User", NULL, "created");
break;
case 3:
@@ -23416,11 +23227,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
if (send_find_error_to_client ("modify_alert", "alert",
modify_alert_data->alert_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("alert", "Alert", modify_alert_data->alert_id,
"modified");
break;
@@ -23441,11 +23249,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 4:
if (send_find_error_to_client ("modify_alert", "filter",
modify_alert_data->filter_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("alert", "Alert", modify_alert_data->alert_id,
"modified");
break;
@@ -23781,11 +23586,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
if (send_find_error_to_client ("modify_asset", "asset",
modify_asset_data->asset_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("asset", "Asset", modify_asset_data->asset_id,
"modified");
break;
@@ -24001,11 +23803,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
if (send_find_error_to_client
("modify_credential", "credential",
modify_credential_data->credential_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("credential", "Credential",
modify_credential_data->credential_id,
"modified");
@@ -24139,11 +23938,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
if (send_find_error_to_client ("modify_filter", "filter",
modify_filter_data->filter_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("filter", "Filter",
modify_filter_data->filter_id, "modified");
break;
@@ -24224,11 +24020,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
if (send_find_error_to_client ("modify_group", "group",
modify_group_data->group_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("group", "Group",
modify_group_data->group_id, "modified");
break;
@@ -24354,33 +24147,24 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 5:
if (send_find_error_to_client ("modify_note", "note",
modify_note_data->note_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("note", "Note", modify_note_data->note_id,
"modified");
break;
case 6:
if (send_find_error_to_client ("modify_note", "task",
modify_note_data->task_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("note", "Note", modify_note_data->note_id,
"modified");
break;
case 7:
if (send_find_error_to_client ("modify_note", "result",
modify_note_data->result_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("note", "Note", modify_note_data->note_id,
"modified");
break;
@@ -24486,11 +24270,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 5:
if (send_find_error_to_client ("modify_override", "override",
modify_override_data->override_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("override", "Override",
modify_override_data->override_id,
"modified");
@@ -24498,11 +24279,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 6:
if (send_find_error_to_client ("modify_override", "task",
modify_override_data->task_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("override", "Override",
modify_override_data->override_id,
"modified");
@@ -24510,11 +24288,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 7:
if (send_find_error_to_client ("modify_override", "result",
modify_override_data->result_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("override", "Override",
modify_override_data->override_id,
"modified");
@@ -24603,11 +24378,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 2:
if (send_find_error_to_client
("modify_permission", "subject",
- modify_permission_data->subject_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ modify_permission_data->subject_id, gmp_parser, error))
+ return;
log_event_fail ("permission", "Permission",
modify_permission_data->permission_id,
"modified");
@@ -24615,11 +24387,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 3:
if (send_find_error_to_client
("modify_permission", "resource",
- modify_permission_data->resource_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ modify_permission_data->resource_id, gmp_parser, error))
+ return;
log_event_fail ("permission", "Permission",
modify_permission_data->permission_id,
"modified");
@@ -24721,11 +24490,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
if (send_find_error_to_client ("modify_port_list", "port_list",
modify_port_list_data->port_list_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("port_list", "Port List",
modify_port_list_data->port_list_id,
"modified");
@@ -24790,11 +24556,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
if (send_find_error_to_client
("modify_report_format", "report_format",
modify_report_format_data->report_format_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("report_format", "Report Format",
modify_report_format_data->report_format_id,
"modified");
@@ -24811,11 +24574,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 3:
if (send_find_error_to_client
("modify_report_format", "report format param",
- modify_report_format_data->param_name, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ modify_report_format_data->param_name, gmp_parser, error))
+ return;
log_event_fail ("report_format", "Report Format",
modify_report_format_data->report_format_id,
"modified");
@@ -24877,11 +24637,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
if (send_find_error_to_client ("modify_role", "role",
modify_role_data->role_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("role", "Role",
modify_role_data->role_id, "modified");
break;
@@ -25063,11 +24820,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
if (send_find_error_to_client ("modify_tag", "tag",
modify_tag_data->tag_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("tag", "Tag", modify_tag_data->tag_id,
"modified");
break;
@@ -25089,10 +24843,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
break;
case 4:
if (send_find_error_to_client ("modify_tag", "resource",
- error_extra,
- gmp_parser))
+ error_extra,
+ gmp_parser, error))
{
- error_send_to_client (error);
g_free (error_extra);
return;
}
@@ -25221,11 +24974,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
"modified");
if (send_find_error_to_client
("modify_target", "port_list",
- modify_target_data->port_list_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ modify_target_data->port_list_id, gmp_parser, error))
+ return;
break;
case 7:
log_event_fail ("target", "Target",
@@ -25236,11 +24986,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
modify_target_data->ssh_credential_id
? modify_target_data->ssh_credential_id
: modify_target_data->ssh_lsc_credential_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 8:
log_event_fail ("target", "Target",
@@ -25251,11 +24998,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
modify_target_data->smb_credential_id
? modify_target_data->smb_credential_id
: modify_target_data->smb_lsc_credential_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 9:
log_event_fail ("target", "Target",
@@ -25263,11 +25007,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
"modified");
if (send_find_error_to_client
("modify_target", "target", modify_target_data->target_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 10:
SEND_TO_CLIENT_OR_FAIL
@@ -25330,11 +25071,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
modify_target_data->esxi_credential_id
? modify_target_data->esxi_credential_id
: modify_target_data->esxi_lsc_credential_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 17:
log_event_fail ("target", "Target",
@@ -25343,11 +25081,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
if (send_find_error_to_client
("modify_target", "Credential",
modify_target_data->snmp_credential_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 18:
SEND_TO_CLIENT_OR_FAIL
@@ -25388,11 +25123,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
if (send_find_error_to_client
("modify_target", "Credential",
modify_target_data->ssh_elevate_credential_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 23:
SEND_TO_CLIENT_OR_FAIL
@@ -25513,11 +25245,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
if (send_find_error_to_client ("modify_task", "Task",
modify_task_data->task_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
default:
case -1:
@@ -25541,11 +25270,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
if (send_find_error_to_client ("modify_task", "Task",
modify_task_data->task_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
default:
case -1:
@@ -25592,11 +25318,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
if (send_find_error_to_client ("modify_task", "Task",
modify_task_data->task_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 2:
SEND_TO_CLIENT_OR_FAIL
@@ -25607,20 +25330,14 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 3:
if (send_find_error_to_client
("modify_task", "scanner",
- modify_task_data->scanner_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ modify_task_data->scanner_id, gmp_parser, error))
+ return;
break;
case 4:
if (send_find_error_to_client
("modify_task", "config",
- modify_task_data->config_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ modify_task_data->config_id, gmp_parser, error))
+ return;
break;
case 5:
SEND_TO_CLIENT_OR_FAIL
@@ -25639,11 +25356,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
break;
case 8:
if (send_find_error_to_client ("modify_task", "alert",
- fail_alert_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ fail_alert_id, gmp_parser,
+ error))
+ return;
log_event_fail ("task", "Task",
modify_task_data->task_id,
"modified");
@@ -25659,11 +25374,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
break;
case 10:
if (send_find_error_to_client ("modify_task", "group",
- fail_group_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ fail_group_id, gmp_parser,
+ error))
+ return;
log_event_fail ("task", "Task",
modify_task_data->task_id,
"modified");
@@ -25671,11 +25384,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 11:
if (send_find_error_to_client
("modify_task", "schedule",
- modify_task_data->schedule_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ modify_task_data->schedule_id, gmp_parser, error))
+ return;
log_event_fail ("task", "Task",
modify_task_data->task_id,
"modified");
@@ -25683,11 +25393,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 12:
if (send_find_error_to_client
("modify_task", "target",
- modify_task_data->target_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ modify_task_data->target_id, gmp_parser, error))
+ return;
log_event_fail ("task", "Task",
modify_task_data->task_id,
"modified");
@@ -25830,21 +25537,16 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
break;
case 1:
if (send_find_error_to_client
- ("modify_user", "group", fail_group_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ ("modify_user", "group", fail_group_id, gmp_parser,
+ error))
+ return;
break;
case 2:
if (send_find_error_to_client
("modify_user", "user",
modify_user_data->user_id ?: modify_user_data->name,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 3:
SEND_TO_CLIENT_OR_FAIL (XML_OK ("modify_user"));
@@ -25858,11 +25560,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
break;
case 5:
if (send_find_error_to_client
- ("modify_user", "role", fail_role_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ ("modify_user", "role", fail_role_id, gmp_parser,
+ error))
+ return;
break;
case 6:
SEND_TO_CLIENT_OR_FAIL
@@ -25961,23 +25661,19 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
break;
case 2:
if (send_find_error_to_client ("move_task",
- "Task",
- move_task_data->task_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ "Task",
+ move_task_data->task_id,
+ gmp_parser,
+ error))
+ return;
break;
case 3:
if (send_find_error_to_client ("move_task",
- "Slave",
- move_task_data->slave_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ "Slave",
+ move_task_data->slave_id,
+ gmp_parser,
+ error))
+ return;
break;
case 4:
SEND_TO_CLIENT_OR_FAIL
@@ -26035,11 +25731,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
if (send_find_error_to_client
("test_alert", "alert", test_alert_data->alert_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 99:
SEND_TO_CLIENT_OR_FAIL
@@ -26078,10 +25771,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
"",
script_message);
- if (send_to_client (msg, gmp_parser->client_writer,
- gmp_parser->client_writer_data))
+ if (send_to_client (gmp_parser, error, msg))
{
- error_send_to_client (error);
g_free (msg);
return;
}
@@ -26127,11 +25818,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
break;
case 2:
if (send_find_error_to_client ("restore", "resource",
- restore_data->id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ restore_data->id, gmp_parser,
+ error))
+ return;
break;
case 3:
SEND_TO_CLIENT_OR_FAIL
@@ -26184,12 +25873,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
"",
report_id);
free (report_id);
- if (send_to_client (msg,
- write_to_client,
- write_to_client_data))
+ if (send_to_client (gmp_parser, error, msg))
{
g_free (msg);
- error_send_to_client (error);
return;
}
g_free (msg);
@@ -26225,11 +25911,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 3: /* Find failed. */
if (send_find_error_to_client
("resume_task", "task", resume_task_data->task_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 99:
SEND_TO_CLIENT_OR_FAIL
@@ -26334,13 +26017,10 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
response ? "" : "",
response ? response : "",
response ? "" : "");
- if (send_to_client (msg,
- write_to_client,
- write_to_client_data))
+ if (send_to_client (gmp_parser, error, msg))
{
g_free (msg);
g_free (response);
- error_send_to_client (error);
return;
}
g_free (msg);
@@ -26375,12 +26055,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
command_error ? command_error : "Internal Error");
if (command_error)
g_free (command_error);
- if (send_to_client (msg,
- write_to_client,
- write_to_client_data))
+ if (send_to_client (gmp_parser, error, msg))
{
g_free (msg);
- error_send_to_client (error);
return;
}
g_free (msg);
@@ -26455,12 +26132,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
"",
report_id ?: "0");
g_free (report_id);
- if (send_to_client (msg,
- write_to_client,
- write_to_client_data))
+ if (send_to_client (gmp_parser, error, msg))
{
g_free (msg);
- error_send_to_client (error);
return;
}
g_free (msg);
@@ -26479,11 +26153,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 3: /* Find failed. */
if (send_find_error_to_client ("start_task", "task",
start_task_data->task_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 99:
SEND_TO_CLIENT_OR_FAIL
@@ -26575,11 +26246,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 3: /* Find failed. */
if (send_find_error_to_client ("stop_task", "task",
stop_task_data->task_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 99:
SEND_TO_CLIENT_OR_FAIL
@@ -26618,11 +26286,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
if (send_find_error_to_client
("verify_report_format", "report format",
verify_report_format_data->report_format_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 99:
SEND_TO_CLIENT_OR_FAIL
@@ -26660,11 +26325,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context,
case 1:
if (send_find_error_to_client
("verify_scanner", "scanner",
- verify_scanner_data->scanner_id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ verify_scanner_data->scanner_id, gmp_parser, error))
+ return;
break;
case 2:
SEND_TO_CLIENT_OR_FAIL
diff --git a/src/gmp_base.c b/src/gmp_base.c
index e8a1f6276..e762f68a4 100644
--- a/src/gmp_base.c
+++ b/src/gmp_base.c
@@ -125,12 +125,48 @@ buffer_xml_append_printf (GString *buffer, const char *format, ...)
* @return TRUE if send to client failed, else FALSE.
*/
gboolean
-send_to_client (const char* msg,
- int (*user_send_to_client) (const char*, void*),
- void* user_send_to_client_data)
+send_to_client (gmp_parser_t *parser, GError** error, const char* msg)
{
- if (user_send_to_client && msg)
- return user_send_to_client (msg, user_send_to_client_data);
+ if (parser
+ && parser->client_writer
+ && msg
+ && parser->client_writer (msg, parser->client_writer_data))
+ {
+ error_send_to_client (error);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/**
+ * @brief Send a response message to the client.
+ *
+ * @param[in] gmp_parser GMP parser.
+ * @param[in] error Error.
+ * @param[in] format Format string.
+ *
+ * @return TRUE if error, else FALSE.
+ */
+gboolean
+sendf_to_client (gmp_parser_t *parser, GError **error, const char *format, ...)
+{
+ if (format)
+ {
+ va_list args;
+ gchar *msg;
+
+ va_start (args, format);
+ msg = g_markup_vprintf_escaped (format, args);
+ va_end (args);
+
+ if (parser->client_writer (msg, parser->client_writer_data))
+ {
+ g_free (msg);
+ error_send_to_client (error);
+ return TRUE;
+ }
+ g_free (msg);
+ }
return FALSE;
}
@@ -141,12 +177,14 @@ send_to_client (const char* msg,
* @param[in] type Resource type.
* @param[in] id Resource ID.
* @param[in] gmp_parser GMP Parser.
+ * @param[in] error Error.
*
* @return TRUE if out of space in to_client, else FALSE.
*/
gboolean
-send_find_error_to_client (const char* command, const char* type,
- const char* id, gmp_parser_t *gmp_parser)
+send_find_error_to_client (const char *command, const char *type,
+ const char *id, gmp_parser_t *gmp_parser,
+ GError **error)
{
gchar *msg;
gboolean ret;
@@ -155,8 +193,7 @@ send_find_error_to_client (const char* command, const char* type,
STATUS_ERROR_MISSING
"\" status_text=\"Failed to find %s '%s'\"/>",
command, type, id);
- ret = send_to_client (msg, gmp_parser->client_writer,
- gmp_parser->client_writer_data);
+ ret = send_to_client (gmp_parser, error, msg);
g_free (msg);
return ret;
}
diff --git a/src/gmp_base.h b/src/gmp_base.h
index f9d25c965..8e0d0caf3 100644
--- a/src/gmp_base.h
+++ b/src/gmp_base.h
@@ -44,11 +44,14 @@ void
buffer_xml_append_printf (GString *, const char *, ...);
gboolean
-send_to_client (const char *, int (*) (const char *, void *), void *);
+send_to_client (gmp_parser_t *, GError **, const char *);
+
+gboolean
+sendf_to_client (gmp_parser_t *, GError **, const char *, ...);
gboolean
send_find_error_to_client (const char *, const char *, const char *,
- gmp_parser_t *);
+ gmp_parser_t *, GError **);
void
error_send_to_client (GError **);
@@ -70,11 +73,9 @@ internal_error_send_to_client (GError **);
do \
{ \
gchar *msg = g_markup_printf_escaped (format, ##args); \
- if (send_to_client (msg, gmp_parser->client_writer, \
- gmp_parser->client_writer_data)) \
+ if (send_to_client (gmp_parser, error, msg)) \
{ \
g_free (msg); \
- error_send_to_client (error); \
return err_ret; \
} \
g_free (msg); \
@@ -94,11 +95,9 @@ internal_error_send_to_client (GError **);
do \
{ \
gchar *msg = g_markup_printf_escaped (format, ##args); \
- if (send_to_client (msg, gmp_parser->client_writer, \
- gmp_parser->client_writer_data)) \
+ if (send_to_client (gmp_parser, error, msg)) \
{ \
g_free (msg); \
- error_send_to_client (error); \
return; \
} \
g_free (msg); \
@@ -113,16 +112,12 @@ internal_error_send_to_client (GError **);
*
* @param[in] msg The message, a string.
*/
-#define SEND_TO_CLIENT_OR_FAIL(msg) \
- do \
- { \
- if (send_to_client (msg, gmp_parser->client_writer, \
- gmp_parser->client_writer_data)) \
- { \
- error_send_to_client (error); \
- return; \
- } \
- } \
+#define SEND_TO_CLIENT_OR_FAIL(msg) \
+ do \
+ { \
+ if (send_to_client (gmp_parser, error, msg)) \
+ return; \
+ } \
while (0)
void
diff --git a/src/gmp_configs.c b/src/gmp_configs.c
index f7d550dd4..30f940228 100644
--- a/src/gmp_configs.c
+++ b/src/gmp_configs.c
@@ -572,11 +572,8 @@ create_config_run (gmp_parser_t *gmp_parser, GError **error)
case 2:
if (send_find_error_to_client ("create_config", "config",
entity_text (copy),
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("config", "Config", NULL, "created");
break;
case 99:
@@ -1042,11 +1039,9 @@ modify_config_run (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("modify_config",
"config",
config_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
log_event_fail ("config", "Scan Config", config_id, "modified");
return;
default:
diff --git a/src/gmp_delete.c b/src/gmp_delete.c
index f15a34a05..b4f8caecd 100644
--- a/src/gmp_delete.c
+++ b/src/gmp_delete.c
@@ -139,11 +139,8 @@ delete_run (gmp_parser_t *gmp_parser, GError **error)
break;
case 2:
if (send_find_error_to_client
- (delete.command, delete.type, delete.id, gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ (delete.command, delete.type, delete.id, gmp_parser, error))
+ return;
log_event_fail (delete.type, delete.type_capital,
delete.id,
"deleted");
diff --git a/src/gmp_get.c b/src/gmp_get.c
index 3793a49d6..b1821a241 100644
--- a/src/gmp_get.c
+++ b/src/gmp_get.c
@@ -261,15 +261,14 @@ get_next (iterator_t *resources, get_data_t *get, int *first, int *count,
/**
* @brief Send start of GET response.
*
+ * @param[in] gmp_parser GMP Parser.
+ * @param[in] error Error.
* @param[in] type Type.
- * @param[in] write_to_client Function that sends to clients.
- * @param[in] write_to_client_data Data for write_to_client.
*
* @return 0 success, 1 send to client failed.
*/
int
-send_get_start (const char *type, int (*write_to_client) (const char*, void*),
- void* write_to_client_data)
+send_get_start (gmp_parser_t *gmp_parser, GError **error, const char *type)
{
gchar *msg;
@@ -285,7 +284,7 @@ send_get_start (const char *type, int (*write_to_client) (const char*, void*),
type);
- if (send_to_client (msg, write_to_client, write_to_client_data))
+ if (send_to_client (gmp_parser, error, msg))
{
g_free (msg);
return 1;
@@ -309,8 +308,8 @@ send_get_start (const char *type, int (*write_to_client) (const char*, void*),
*/
int
send_get_common (const char *type, get_data_t *get, iterator_t *iterator,
- int (*write_to_client) (const char *, void*),
- void* write_to_client_data, int writable, int in_use)
+ gmp_parser_t *gmp_parser, GError **error, int writable,
+ int in_use)
{
GString *buffer;
const char *tag_type;
@@ -453,7 +452,7 @@ send_get_common (const char *type, get_data_t *get, iterator_t *iterator,
}
}
- if (send_to_client (buffer->str, write_to_client, write_to_client_data))
+ if (send_to_client (gmp_parser, error, buffer->str))
{
g_string_free (buffer, TRUE);
return 1;
@@ -550,8 +549,8 @@ buffer_get_filter_xml (GString *msg, const char* type,
* @param[in] count Page count.
* @param[in] filtered Filtered count.
* @param[in] full Full count.
- * @param[in] write_to_client Function that sends to clients.
- * @param[in] write_to_client_data Data for write_to_client.
+ * @param[in] gmp_parser GMP Parser.
+ * @param[in] error Error.
*
* @return 0 success, 1 sending to client failed, 2 failed to allocate filter
* term.
@@ -559,8 +558,7 @@ buffer_get_filter_xml (GString *msg, const char* type,
static int
send_get_end_internal (const char *type, get_data_t *get, int get_counts,
int count, int filtered, int full,
- int (*write_to_client) (const char *, void*),
- void* write_to_client_data)
+ gmp_parser_t *gmp_parser, GError **error)
{
gchar *sort_field, *filter;
int first, max, sort_order;
@@ -685,7 +683,7 @@ send_get_end_internal (const char *type, get_data_t *get, int get_counts,
g_free (sort_field);
g_free (filter);
- if (send_to_client (msg->str, write_to_client, write_to_client_data))
+ if (send_to_client (gmp_parser, error, msg->str))
{
g_string_free (msg, TRUE);
return 1;
@@ -702,19 +700,18 @@ send_get_end_internal (const char *type, get_data_t *get, int get_counts,
* @param[in] count Page count.
* @param[in] filtered Filtered count.
* @param[in] full Full count.
- * @param[in] write_to_client Function that sends to clients.
- * @param[in] write_to_client_data Data for write_to_client.
+ * @param[in] gmp_parser GMP Parser.
+ * @param[in] error Error.
*
* @return 0 success, 1 sending to client failed, 2 failed to allocate filter
* term.
*/
int
send_get_end (const char *type, get_data_t *get, int count, int filtered,
- int full, int (*write_to_client) (const char *, void*),
- void* write_to_client_data)
+ int full, gmp_parser_t *gmp_parser, GError **error)
{
return send_get_end_internal (type, get, 1, count, filtered, full,
- write_to_client, write_to_client_data);
+ gmp_parser, error);
}
/**
@@ -722,17 +719,15 @@ send_get_end (const char *type, get_data_t *get, int count, int filtered,
*
* @param[in] type Type.
* @param[in] get GET data.
- * @param[in] write_to_client Function that sends to clients.
- * @param[in] write_to_client_data Data for write_to_client.
+ * @param[in] gmp_parser GMP Parser.
+ * @param[in] error Error.
*
* @return 0 success, 1 sending to client failed, 2 failed to allocate filter
* term.
*/
int
send_get_end_no_counts (const char *type, get_data_t *get,
- int (*write_to_client) (const char *, void*),
- void* write_to_client_data)
+ gmp_parser_t *gmp_parser, GError **error)
{
- return send_get_end_internal (type, get, 0, 0, 0, 0, write_to_client,
- write_to_client_data);
+ return send_get_end_internal (type, get, 0, 0, 0, 0, gmp_parser, error);
}
diff --git a/src/gmp_get.h b/src/gmp_get.h
index e1c724e04..df65bab51 100644
--- a/src/gmp_get.h
+++ b/src/gmp_get.h
@@ -19,6 +19,7 @@
#ifndef _GVMD_GMP_GET_H
#define _GVMD_GMP_GET_H
+#include "gmp_base.h"
#include "manage_get.h"
void
@@ -60,7 +61,7 @@ get_next (iterator_t *, get_data_t *, int *, int *,
int (*) (iterator_t *, const get_data_t *));
int
-send_get_start (const char *, int (*) (const char *, void *), void *);
+send_get_start (gmp_parser_t *, GError **, const char *);
/**
* @brief Send start of GET response to client, returning on fail.
@@ -68,21 +69,17 @@ send_get_start (const char *, int (*) (const char *, void *), void *);
* @param[in] type Type of resource.
* @param[in] get GET data.
*/
-#define SEND_GET_START(type) \
- do \
- { \
- if (send_get_start (type, gmp_parser->client_writer, \
- gmp_parser->client_writer_data)) \
- { \
- error_send_to_client (error); \
- return; \
- } \
- } \
+#define SEND_GET_START(type) \
+ do \
+ { \
+ if (send_get_start (gmp_parser, error, type)) \
+ return; \
+ } \
while (0)
int
-send_get_common (const char *, get_data_t *, iterator_t *,
- int (*) (const char *, void *), void *, int, int);
+send_get_common (const char *, get_data_t *, iterator_t *, gmp_parser_t *,
+ GError **, int, int);
/**
* @brief Send common part of GET response to client, returning on fail.
@@ -95,18 +92,14 @@ send_get_common (const char *, get_data_t *, iterator_t *,
do \
{ \
if (send_get_common ( \
- G_STRINGIFY (type), get, iterator, gmp_parser->client_writer, \
- gmp_parser->client_writer_data, \
+ G_STRINGIFY (type), get, iterator, gmp_parser, error, \
(get)->trash \
? trash_##type##_writable (get_iterator_resource (iterator)) \
: type##_writable (get_iterator_resource (iterator)), \
(get)->trash \
? trash_##type##_in_use (get_iterator_resource (iterator)) \
: type##_in_use (get_iterator_resource (iterator)))) \
- { \
- error_send_to_client (error); \
- return; \
- } \
+ return; \
} \
while (0)
@@ -122,15 +115,11 @@ send_get_common (const char *, get_data_t *, iterator_t *,
#define SEND_GET_COMMON_NO_TRASH(type, get, iterator) \
do \
{ \
- if (send_get_common (G_STRINGIFY (type), get, iterator, \
- gmp_parser->client_writer, \
- gmp_parser->client_writer_data, \
+ if (send_get_common (G_STRINGIFY (type), get, iterator, gmp_parser, \
+ error, \
type##_writable (get_iterator_resource (iterator)), \
type##_in_use (get_iterator_resource (iterator)))) \
- { \
- error_send_to_client (error); \
- return; \
- } \
+ return; \
} \
while (0)
@@ -139,12 +128,11 @@ buffer_get_filter_xml (GString *, const char *, const get_data_t *,
const char *, const char *);
int
-send_get_end (const char *, get_data_t *, int, int, int,
- int (*) (const char *, void *), void *);
+send_get_end (const char *, get_data_t *, int, int, int, gmp_parser_t *,
+ GError **);
int
-send_get_end_no_counts (const char *, get_data_t *,
- int (*) (const char *, void *), void *);
+send_get_end_no_counts (const char *, get_data_t *, gmp_parser_t *, GError **);
/**
* @brief Send end of GET response to client, returning on fail.
@@ -152,17 +140,13 @@ send_get_end_no_counts (const char *, get_data_t *,
* @param[in] type Type of resource.
* @param[in] get GET data.
*/
-#define SEND_GET_END(type, get, count, filtered) \
- do \
- { \
- if (send_get_end (type, get, count, filtered, \
- resource_count (type, get), gmp_parser->client_writer, \
- gmp_parser->client_writer_data)) \
- { \
- error_send_to_client (error); \
- return; \
- } \
- } \
+#define SEND_GET_END(type, get, count, filtered) \
+ do \
+ { \
+ if (send_get_end (type, get, count, filtered, \
+ resource_count (type, get), gmp_parser, error)) \
+ return; \
+ } \
while (0)
#endif /* not _GVMD_GMP_GET_H */
diff --git a/src/gmp_port_lists.c b/src/gmp_port_lists.c
index a89b2cd30..cdba72d9d 100644
--- a/src/gmp_port_lists.c
+++ b/src/gmp_port_lists.c
@@ -334,11 +334,9 @@ create_port_list_run (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("create_port_list",
"port_list",
entity_text (copy),
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
log_event_fail ("port_list", "Port List", NULL, "created");
break;
case 99:
diff --git a/src/gmp_report_formats.c b/src/gmp_report_formats.c
index 37ccdce1d..208a828d9 100644
--- a/src/gmp_report_formats.c
+++ b/src/gmp_report_formats.c
@@ -330,11 +330,9 @@ create_report_format_run (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("create_report_format",
"report_format",
entity_text (copy),
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
log_event_fail ("report_format", "Report Format", NULL, "created");
break;
case 99:
diff --git a/src/gmp_tickets.c b/src/gmp_tickets.c
index 4e3358c06..89d31a035 100644
--- a/src/gmp_tickets.c
+++ b/src/gmp_tickets.c
@@ -130,9 +130,9 @@ get_tickets_run (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("get_tickets",
"ticket",
get_tickets_data.get.id,
- gmp_parser))
+ gmp_parser,
+ error))
{
- error_send_to_client (error);
get_tickets_reset ();
return;
}
@@ -140,9 +140,8 @@ get_tickets_run (gmp_parser_t *gmp_parser, GError **error)
case 2:
if (send_find_error_to_client
("get_tickets", "filter",
- get_tickets_data.get.filt_id, gmp_parser))
+ get_tickets_data.get.filt_id, gmp_parser, error))
{
- error_send_to_client (error);
get_tickets_reset ();
return;
}
@@ -419,11 +418,8 @@ create_ticket_run (gmp_parser_t *gmp_parser, GError **error)
case 2:
if (send_find_error_to_client ("create_ticket", "ticket",
entity_text (copy),
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
log_event_fail ("ticket", "Ticket", NULL, "created");
break;
case 99:
@@ -525,20 +521,14 @@ create_ticket_run (gmp_parser_t *gmp_parser, GError **error)
case 1:
log_event_fail ("ticket", "Ticket", NULL, "created");
if (send_find_error_to_client ("create_ticket", "user", user_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 2:
log_event_fail ("ticket", "Ticket", NULL, "created");
if (send_find_error_to_client ("create_ticket", "result", result_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 98:
SEND_TO_CLIENT_OR_FAIL
@@ -747,20 +737,14 @@ modify_ticket_run (gmp_parser_t *gmp_parser, GError **error)
case 2:
log_event_fail ("ticket", "Ticket", ticket_id, "modified");
if (send_find_error_to_client ("modify_ticket", "ticket", ticket_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 3:
log_event_fail ("ticket", "Ticket", ticket_id, "modified");
if (send_find_error_to_client ("modify_ticket", "user", user_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser, error))
+ return;
break;
case 4:
SEND_TO_CLIENT_OR_FAIL
diff --git a/src/gmp_tls_certificates.c b/src/gmp_tls_certificates.c
index fb2be18d6..8a4ca918b 100644
--- a/src/gmp_tls_certificates.c
+++ b/src/gmp_tls_certificates.c
@@ -162,9 +162,9 @@ get_tls_certificates_run (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("get_tls_certificates",
"tls_certificate",
get_tls_certificates_data.get.id,
- gmp_parser))
+ gmp_parser,
+ error))
{
- error_send_to_client (error);
get_tls_certificates_reset ();
return;
}
@@ -172,9 +172,8 @@ get_tls_certificates_run (gmp_parser_t *gmp_parser, GError **error)
case 2:
if (send_find_error_to_client
("get_tls_certificates", "filter",
- get_tls_certificates_data.get.filt_id, gmp_parser))
+ get_tls_certificates_data.get.filt_id, gmp_parser, error))
{
- error_send_to_client (error);
get_tls_certificates_reset ();
return;
}
@@ -472,11 +471,9 @@ create_tls_certificate_run (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("create_tls_certificate",
"tls_certificate",
entity_text (copy),
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
log_event_fail ("tls_certificate",
"TLS Certificate",
NULL,
@@ -775,11 +772,9 @@ modify_tls_certificate_run (gmp_parser_t *gmp_parser, GError **error)
if (send_find_error_to_client ("modify_tls_certificate",
"TLS certificate",
tls_certificate_id,
- gmp_parser))
- {
- error_send_to_client (error);
- return;
- }
+ gmp_parser,
+ error))
+ return;
break;
case 3:
SEND_TO_CLIENT_OR_FAIL
diff --git a/src/manage.h b/src/manage.h
index 30e0642bb..97368bfc2 100644
--- a/src/manage.h
+++ b/src/manage.h
@@ -1641,9 +1641,6 @@ manage_report (report_t, report_t, const get_data_t *, report_format_t,
int
manage_send_report (report_t, report_t, report_format_t, const get_data_t *,
int, int, int, int, int, int,
- gboolean (*) (const char *,
- int (*) (const char*, void*),
- void*),
int (*) (const char *, void*), void *, const char *,
const gchar *);
@@ -2185,6 +2182,10 @@ init_credential_iterator_one (iterator_t*, credential_t);
int
init_credential_iterator (iterator_t*, const get_data_t *);
+int
+init_credential_iterator_format (iterator_t*, const get_data_t *,
+ credential_format_t);
+
const char*
credential_iterator_login (iterator_t*);
diff --git a/src/manage_sql.c b/src/manage_sql.c
index 7f5182670..b37740bac 100644
--- a/src/manage_sql.c
+++ b/src/manage_sql.c
@@ -30398,10 +30398,7 @@ manage_send_report (report_t report, report_t delta_report,
report_format_t report_format, const get_data_t *get,
int notes_details, int overrides_details, int result_tags,
int ignore_pagination, int lean, int base64,
- gboolean (*send) (const char *,
- int (*) (const char *, void*),
- void*),
- int (*send_data_1) (const char *, void*), void *send_data_2,
+ int (*send) (const char *, void*), void *send_data,
const char *alert_id,
const gchar* prefix)
{
@@ -30512,7 +30509,7 @@ manage_send_report (report_t report, report_t delta_report,
return -1;
}
- if (prefix && send (prefix, send_data_1, send_data_2))
+ if (prefix && send (prefix, send_data))
{
fclose (stream);
g_warning ("%s: send prefix error", __func__);
@@ -30557,7 +30554,7 @@ manage_send_report (report_t report, report_t delta_report,
chunk64 = g_base64_encode ((guchar*) chunk,
MANAGE_SEND_REPORT_CHUNK_SIZE
- left);
- if (send (chunk64, send_data_1, send_data_2))
+ if (send (chunk64, send_data))
{
g_free (chunk64);
fclose (stream);
@@ -30570,7 +30567,7 @@ manage_send_report (report_t report, report_t delta_report,
else
{
chunk[MANAGE_SEND_REPORT_CHUNK_SIZE - left] = '\0';
- if (send (chunk, send_data_1, send_data_2))
+ if (send (chunk, send_data))
{
fclose (stream);
g_warning ("%s: send error", __func__);
@@ -36808,114 +36805,110 @@ delete_credential (const char *credential_id, int ultimate)
/**
* @brief LSC Credential iterator columns.
*/
-#define CREDENTIAL_ITERATOR_COLUMNS \
+#define CREDENTIAL_ITERATOR_COLUMNS_TABLE(table, lean) \
{ \
- GET_ITERATOR_COLUMNS (credentials), \
+ GET_ITERATOR_COLUMNS (table), \
/* public generic data */ \
{ "type", NULL, KEYWORD_TYPE_STRING }, \
{ "allow_insecure", NULL, KEYWORD_TYPE_INTEGER }, \
/* public type specific data */ \
- { "(SELECT value FROM credentials_data" \
- " WHERE credential = credentials.id AND type = 'username')", \
+ { "(SELECT value FROM " table "_data" \
+ " WHERE credential = " table ".id AND type = 'username')", \
"login", \
KEYWORD_TYPE_STRING \
}, \
- { "(SELECT value FROM credentials_data" \
- " WHERE credential = credentials.id AND type = 'certificate')", \
+ { "(SELECT value FROM " table "_data" \
+ " WHERE credential = " table ".id AND type = 'certificate')", \
NULL, \
KEYWORD_TYPE_STRING }, \
- { "(SELECT value FROM credentials_data" \
- " WHERE credential = credentials.id AND type = 'auth_algorithm')", \
+ { "(CASE" \
+ " WHEN type = 'snmp'" \
+ " THEN (SELECT value FROM " table "_data" \
+ " WHERE credential = " table ".id AND type = 'auth_algorithm')" \
+ " ELSE ''" \
+ " END)", \
NULL, \
KEYWORD_TYPE_STRING }, \
- { "(SELECT value FROM credentials_data" \
- " WHERE credential = credentials.id AND type = 'privacy_algorithm')", \
+ { "(CASE" \
+ " WHEN type = 'snmp'" \
+ " THEN (SELECT value FROM " table "_data" \
+ " WHERE credential = " table ".id AND type = 'privacy_algorithm')" \
+ " ELSE ''" \
+ " END)", \
NULL, \
KEYWORD_TYPE_STRING }, \
- { "(SELECT value FROM credentials_data" \
- " WHERE credential = credentials.id AND type = 'public_key')", \
+ /* Only one used by credential_iterator_formats_xml (excl login, type) */ \
+ { "(SELECT value FROM " table "_data" \
+ " WHERE credential = " table ".id AND type = 'public_key')", \
NULL, \
KEYWORD_TYPE_STRING }, \
/* private data */ \
- { "(SELECT value FROM credentials_data" \
- " WHERE credential = credentials.id AND type = 'secret')", \
+ { "(CASE" \
+ " WHEN " lean \
+ " THEN ''" \
+ " ELSE (SELECT value FROM " table "_data" \
+ " WHERE credential = " table ".id AND type = 'secret')" \
+ " END)", \
"secret", \
KEYWORD_TYPE_STRING }, \
- { "(SELECT value FROM credentials_data" \
- " WHERE credential = credentials.id AND type = 'password')", \
+ { "(CASE" \
+ " WHEN " lean \
+ " THEN ''" \
+ " ELSE (SELECT value FROM " table "_data" \
+ " WHERE credential = " table ".id AND type = 'password')" \
+ " END)", \
"password", \
KEYWORD_TYPE_STRING }, \
- { "(SELECT value FROM credentials_data" \
- " WHERE credential = credentials.id AND type = 'private_key')", \
+ { "(CASE" \
+ " WHEN " lean \
+ " THEN ''" \
+ " ELSE (SELECT value FROM " table "_data" \
+ " WHERE credential = " table ".id AND type = 'private_key')" \
+ " END)", \
"private_key", \
KEYWORD_TYPE_STRING }, \
- { "(SELECT value FROM credentials_data" \
- " WHERE credential = credentials.id AND type = 'community')", \
+ { "(CASE" \
+ " WHEN " lean \
+ " THEN ''" \
+ " ELSE (SELECT value FROM " table "_data" \
+ " WHERE credential = " table ".id AND type = 'community')" \
+ " END)", \
"community", \
KEYWORD_TYPE_STRING }, \
- { "(SELECT value FROM credentials_data" \
- " WHERE credential = credentials.id AND type = 'privacy_password')", \
+ { "(CASE" \
+ " WHEN " lean \
+ " THEN ''" \
+ " ELSE (SELECT value FROM " table "_data" \
+ " WHERE credential = " table ".id AND type = 'privacy_password')" \
+ " END)", \
"privacy_password", \
KEYWORD_TYPE_STRING }, \
{ NULL, NULL, KEYWORD_TYPE_UNKNOWN } \
}
+/**
+ * @brief LSC Credential iterator columns.
+ */
+#define CREDENTIAL_ITERATOR_COLUMNS \
+ CREDENTIAL_ITERATOR_COLUMNS_TABLE("credentials", "FALSE")
+
/**
* @brief LSC Credential iterator columns for trash case.
*/
-#define CREDENTIAL_ITERATOR_TRASH_COLUMNS \
- { \
- GET_ITERATOR_COLUMNS (credentials_trash), \
- /* public generic data */ \
- { "type", NULL, KEYWORD_TYPE_STRING }, \
- { "allow_insecure", NULL, KEYWORD_TYPE_INTEGER }, \
- /* public type specific data */ \
- { "(SELECT value FROM credentials_trash_data" \
- " WHERE credential = credentials_trash.id AND type = 'username')", \
- "login", \
- KEYWORD_TYPE_STRING }, \
- { "(SELECT value FROM credentials_trash_data" \
- " WHERE credential = credentials_trash.id AND type = 'certificate')", \
- NULL, \
- KEYWORD_TYPE_STRING }, \
- { "(SELECT value FROM credentials_trash_data" \
- " WHERE credential = credentials_trash.id" \
- " AND type = 'auth_algorithm')", \
- NULL, \
- KEYWORD_TYPE_STRING }, \
- { "(SELECT value FROM credentials_trash_data" \
- " WHERE credential = credentials_trash.id" \
- " AND type = 'privacy_algorithm')", \
- NULL, \
- KEYWORD_TYPE_STRING }, \
- { "(SELECT value FROM credentials_data" \
- " WHERE credential = credentials_trash.id AND type = 'public_key')", \
- NULL, \
- KEYWORD_TYPE_STRING }, \
- /* private data */ \
- { "(SELECT value FROM credentials_trash_data" \
- " WHERE credential = credentials_trash.id AND type = 'secret')", \
- "secret", \
- KEYWORD_TYPE_STRING }, \
- { "(SELECT value FROM credentials_trash_data" \
- " WHERE credential = credentials_trash.id AND type = 'password')", \
- "password", \
- KEYWORD_TYPE_STRING }, \
- { "(SELECT value FROM credentials_trash_data" \
- " WHERE credential = credentials_trash.id AND type = 'private_key')", \
- "private_key", \
- KEYWORD_TYPE_STRING }, \
- { "(SELECT value FROM credentials_trash_data" \
- " WHERE credential = credentials_trash.id AND type = 'community')", \
- "community", \
- KEYWORD_TYPE_STRING }, \
- { "(SELECT value FROM credentials_trash_data" \
- " WHERE credential = credentials_trash.id" \
- " AND type = 'privacy_password')", \
- "privacy_password", \
- KEYWORD_TYPE_STRING }, \
- { NULL, NULL, KEYWORD_TYPE_UNKNOWN } \
- }
+#define CREDENTIAL_ITERATOR_TRASH_COLUMNS \
+ CREDENTIAL_ITERATOR_COLUMNS_TABLE("credentials_trash", "FALSE")
+
+/**
+ * @brief LSC Credential iterator columns.
+ */
+#define CREDENTIAL_ITERATOR_LEAN_COLUMNS \
+ CREDENTIAL_ITERATOR_COLUMNS_TABLE("credentials", "TRUE")
+
+/**
+ * @brief LSC Credential iterator columns for trash case.
+ */
+#define CREDENTIAL_ITERATOR_LEAN_TRASH_COLUMNS \
+ CREDENTIAL_ITERATOR_COLUMNS_TABLE("credentials_trash", "TRUE")
/**
* @brief Count number of LSC Credentials.
@@ -37403,6 +37396,47 @@ init_credential_iterator (iterator_t* iterator, const get_data_t *get)
TRUE);
}
+/**
+ * @brief Initialise a Credential iterator, where the format is known.
+ *
+ * @param[in] iterator Iterator.
+ * @param[in] get GET data.
+ * @param[in] format Credential format.
+ *
+ * @return 0 success, 1 failed to find filter, 2 failed to find
+ * filter (filt_id), -1 error.
+ */
+int
+init_credential_iterator_format (iterator_t* iterator, const get_data_t *get,
+ credential_format_t format)
+{
+ static const char *filter_columns[] = CREDENTIAL_ITERATOR_FILTER_COLUMNS;
+ static column_t columns[] = CREDENTIAL_ITERATOR_COLUMNS;
+ static column_t trash_columns[] = CREDENTIAL_ITERATOR_TRASH_COLUMNS;
+ static column_t lean_columns[] = CREDENTIAL_ITERATOR_LEAN_COLUMNS;
+ static column_t lean_trash_columns[] = CREDENTIAL_ITERATOR_LEAN_TRASH_COLUMNS;
+ column_t *actual_columns, *actual_trash_columns;
+
+ actual_columns = columns;
+ actual_trash_columns = trash_columns;
+ if (format == CREDENTIAL_FORMAT_NONE)
+ {
+ actual_columns = lean_columns;
+ actual_trash_columns = lean_trash_columns;
+ }
+
+ return init_get_iterator (iterator,
+ "credential",
+ get,
+ actual_columns,
+ actual_trash_columns,
+ filter_columns,
+ 0,
+ NULL,
+ NULL,
+ TRUE);
+}
+
/**
* @brief Get possibly encrypted data from credentials.
*
@@ -37736,34 +37770,32 @@ credential_iterator_format_available (iterator_t* iterator,
{
const char *type, *login, *private_key;
+ if (format == CREDENTIAL_FORMAT_NONE)
+ return TRUE;
+
+ if (format == CREDENTIAL_FORMAT_ERROR)
+ return FALSE;
+
type = credential_iterator_type (iterator);
login = credential_iterator_login (iterator);
+
+ if (format == CREDENTIAL_FORMAT_EXE
+ && strcasecmp (type, "up") == 0)
+ return validate_credential_username_for_format (login, format);
+
+ if (format == CREDENTIAL_FORMAT_PEM
+ && strcasecmp (type, "cc") == 0)
+ return validate_credential_username_for_format (login, format);
+
private_key = credential_iterator_private_key (iterator);
- switch (format)
- {
- case CREDENTIAL_FORMAT_NONE:
- return TRUE;
- case CREDENTIAL_FORMAT_KEY:
- case CREDENTIAL_FORMAT_RPM:
- case CREDENTIAL_FORMAT_DEB:
- if (strcasecmp (type, "usk") == 0 && private_key)
- return validate_credential_username_for_format (login, format);
- else
- return FALSE;
- case CREDENTIAL_FORMAT_EXE:
- if (strcasecmp (type, "up") == 0)
- return validate_credential_username_for_format (login, format);
- else
- return FALSE;
- case CREDENTIAL_FORMAT_PEM:
- if (strcasecmp (type, "cc") == 0)
- return validate_credential_username_for_format (login, format);
- else
- return FALSE;
- case CREDENTIAL_FORMAT_ERROR:
- return FALSE;
- }
+ if ((format == CREDENTIAL_FORMAT_KEY
+ || format == CREDENTIAL_FORMAT_RPM
+ || format == CREDENTIAL_FORMAT_DEB)
+ && strcasecmp (type, "usk") == 0
+ && private_key)
+ return validate_credential_username_for_format (login, format);
+
return FALSE;
}