28 #include "../base/openvas_hosts.h" 29 #include "../misc/openvas_server.h" 30 #include "../omp/xml.h" 35 #define G_LOG_DOMAIN "lib osp" 55 __attribute__((__format__(__printf__, 3, 4)));
70 const
char *cert, const
char *key)
74 if (port <= 0 || port > 65535)
78 if (!cert || !key || !cacert)
81 connection = g_malloc0(
sizeof (*connection));
83 (&connection->
session, host, port, cacert, cert, key);
84 if (connection->
socket == -1)
90 connection->
host = g_strdup (host);
91 connection->
port = port;
105 const char *fmt, ...)
112 if (!connection || !fmt || !response)
140 g_free (connection->
host);
158 char **d_name,
char **d_version,
char **p_name,
166 if (osp_send_command (connection, &entity,
"<get_version/>"))
171 goto err_get_version;
174 goto err_get_version;
179 goto err_get_version;
185 goto err_get_version;
188 goto err_get_version;
193 goto err_get_version;
199 goto err_get_version;
202 goto err_get_version;
207 goto err_get_version;
215 g_warning (
"Erroneous OSP <get_version/> response.");
249 ret = osp_send_command (connection, &entity,
"<delete_scan scan_id='%s'/>",
257 if (strcmp (status,
"200"))
275 char **report_xml,
int details,
char **error)
284 rc = osp_send_command
285 (connection, &entity,
"<get_scans scan_id='%s' details='%d'/>",
286 scan_id, details ? 1 : 0);
290 *error = g_strdup (
"Couldn't send get_scans command to scanner");
301 *error = g_strdup (text);
308 string = g_string_new (
"");
310 *report_xml = g_string_free (
string, FALSE);
331 rc = osp_send_command
332 (connection, &entity,
"<stop_scan scan_id='%s'/>", scan_id);
336 *error = g_strdup (
"Couldn't send stop_scan command to scanner");
352 *error = g_strdup (text);
359 option_concat_as_xml (gpointer key, gpointer value, gpointer pstr)
361 char *options_str, *tmp, *key_escaped, *value_escaped;
363 options_str = *(
char **) pstr;
365 key_escaped = g_markup_escape_text ((
char *) key, -1);
366 value_escaped = g_markup_escape_text ((
char *) value, -1);
367 tmp = g_strdup_printf (
"%s<%s>%s</%s>", options_str ?:
"", key_escaped,
368 value_escaped, key_escaped);
370 g_free (options_str);
371 g_free (key_escaped);
372 g_free (value_escaped);
373 *(
char **) pstr = tmp;
387 const char *ports, GHashTable *options,
const char *scan_id,
391 char *options_str = NULL;
399 g_hash_table_foreach (options, option_concat_as_xml, &options_str);
401 rc = osp_send_command (connection, &entity,
402 "<start_scan target='%s' ports='%s' scan_id='%s'>" 403 "<scanner_params>%s</scanner_params></start_scan>",
404 target, ports ?:
"", scan_id ?:
"", options_str ?:
"");
405 g_free (options_str);
409 *error = g_strdup (
"Couldn't send start_scan command to scanner");
425 *error = g_strdup (text);
438 osp_param_str_to_type (
const char *str)
441 if (!strcmp (str,
"integer"))
443 else if (!strcmp (str,
"string"))
445 else if (!strcmp (str,
"password"))
447 else if (!strcmp (str,
"file"))
449 else if (!strcmp (str,
"boolean"))
451 else if (!strcmp (str,
"ovaldef_file"))
453 else if (!strcmp (str,
"selection"))
455 else if (!strcmp (str,
"credential_up"))
479 return "ovaldef_file";
483 return "credential_up";
505 if (osp_send_command (connection, &entity,
"<get_scanner_details/>"))
520 child = entities->data;
532 *params = g_slist_append (*params, param);
637 g_free (param->
name);
638 g_free (param->
desc);
void osp_param_free(osp_param_t *param)
osp_param_t * osp_param_new(void)
int read_entity(gnutls_session_t *session, entity_t *entity)
Read an XML entity tree from the manager.
int osp_get_scanner_details(osp_connection_t *connection, char **desc, GSList **params)
const char * osp_param_type_str(const osp_param_t *param)
char * entity_text(entity_t entity)
Get the text an entity.
int osp_get_version(osp_connection_t *connection, char **s_name, char **s_version, char **d_name, char **d_version, char **p_name, char **p_version)
entities_t entities
Children.
int openvas_server_vsendf(gnutls_session_t *session, const char *fmt, va_list ap)
Send a string to the server.
const char * osp_param_name(const osp_param_t *param)
const char * osp_param_desc(const osp_param_t *param)
const char * entity_attribute(entity_t entity, const char *name)
Get an attribute of an entity.
entities_t next_entities(entities_t entities)
Return all the entities from an entities_t after the first.
int openvas_server_close(int socket, gnutls_session_t session)
Close a server connection and its socket.
void print_entity_to_string(entity_t entity, GString *string)
Print an XML entity tree to a GString, appending it if string is not.
int osp_stop_scan(osp_connection_t *connection, const char *scan_id, char **error)
int osp_delete_scan(osp_connection_t *connection, const char *scan_id)
int osp_param_mandatory(const osp_param_t *param)
int osp_start_scan(osp_connection_t *connection, const char *target, const char *ports, GHashTable *options, const char *scan_id, char **error)
void osp_connection_close(osp_connection_t *connection)
int osp_get_scan(osp_connection_t *connection, const char *scan_id, char **report_xml, int details, char **error)
const char * osp_param_id(const osp_param_t *param)
entity_t entity_child(entity_t entity, const char *name)
Get a child of an entity.
int openvas_get_host_type(const gchar *str_stripped)
Determines the host type in a buffer.
int openvas_server_open_with_cert(gnutls_session_t *session, const char *host, int port, const char *ca_mem, const char *pub_mem, const char *priv_mem)
Connect to the server using a given host, port and cert.
void free_entity(entity_t entity)
Free an entity, recursively.
const char * osp_param_default(const osp_param_t *param)
osp_connection_t * osp_connection_new(const char *, int, const char *, const char *, const char *)