Greenbone Vulnerability Management Libraries 22.18.1
|
API for Openvas Daemon communication. More...
#include "openvasd.h"
#include "../base/array.h"
#include "../base/networking.h"
#include "../util/json.h"
#include <cjson/cJSON.h>
#include <curl/curl.h>
#include <curl/easy.h>
#include <curl/multi.h>
#include <netinet/in.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
Go to the source code of this file.
Data Structures | |
struct | openvasd_curlm |
Wrapps a CURLM * handler and the custom header. More... | |
struct | openvasd_string |
Define a string struct for storing the response and the curl handler. More... | |
struct | openvasd_connector |
Struct holding the data for connecting with Openvasd. More... | |
struct | openvasd_param |
Struct holding options for Openvasd parameters. More... | |
struct | openvasd_credential |
Struct credential information for Openvasd. More... | |
struct | openvasd_target |
Struct holding target information. More... | |
struct | openvasd_vt_single |
Struct holding vt information. More... | |
Macros | |
#define | G_LOG_DOMAIN "libgvm ovd" |
GLib log domain. | |
#define | RESP_CODE_ERR -1 |
#define | RESP_CODE_OK 0 |
Typedefs | |
typedef struct openvasd_curlm | openvasd_curlm_t |
Wrapps a CURLM * handler and the custom header. | |
typedef struct openvasd_string * | openvasd_vt_stream_t |
typedef enum openvas_request_method | openvasd_req_method_t |
Enumerations | |
enum | openvas_request_method { POST , GET , HEAD , DELETE } |
Request methods. More... | |
Functions | |
static openvasd_curlm_t * | openvasd_curlm_handler_new (void) |
Allocate openvasd curl handler. | |
static void | openvasd_curlm_handler_close (openvasd_curlm_t *h) |
Cleanup an openvasd curl handler. | |
static openvasd_vt_stream_t | openvasd_vt_stream_new (void) |
Allocate the vt stream struct to hold the response and the curlm handler. | |
static void | openvasd_vt_stream_free (openvasd_vt_stream_t s) |
Cleanup the string struct to hold the response and the curl multiperform handler. | |
static void | openvasd_vt_stream_reset (openvasd_vt_stream_t s) |
Reinitialize the string struct to hold the response. | |
openvasd_connector_t | openvasd_connector_new (void) |
Initialize an openvasd connector. | |
openvasd_error_t | openvasd_connector_builder (openvasd_connector_t conn, openvasd_conn_opt_t opt, const void *val) |
Build a openvasd connector. | |
openvasd_error_t | openvasd_connector_free (openvasd_connector_t conn) |
Build a openvasd connector. | |
void | openvasd_response_cleanup (openvasd_resp_t resp) |
Free an openvasd response struct. | |
static size_t | response_callback_fn (void *ptr, size_t size, size_t nmemb, void *struct_string) |
Call back function to stored the response. | |
static struct curl_slist * | init_customheader (const gchar *apikey, gboolean contenttype) |
static CURL * | handler (openvasd_connector_t conn, openvasd_req_method_t method, gchar *path, gchar *data, struct curl_slist *customheader, gchar **err) |
Create a CURL handler. | |
static openvasd_resp_t | openvasd_send_request (CURL *curl, const gchar *header_name, openvasd_resp_t response) |
Send request. | |
openvasd_resp_t | openvasd_get_version (openvasd_connector_t conn) |
Request HEAD. | |
openvasd_resp_t | openvasd_get_vt_stream_init (openvasd_connector_t conn) |
Initialized an curl multiperform handler which allows fetch feed metadata chunk by chunk. | |
void | openvasd_reset_vt_stream (openvasd_connector_t conn) |
gchar * | openvasd_vt_stream_str (openvasd_connector_t conn) |
size_t | openvasd_vt_stream_len (openvasd_connector_t conn) |
int | openvasd_get_vt_stream (openvasd_connector_t conn) |
Get a new feed metadata chunk. | |
openvasd_resp_t | openvasd_get_vts (openvasd_connector_t conn) |
Get VT's metadata. | |
openvasd_resp_t | openvasd_start_scan (openvasd_connector_t conn, gchar *data) |
openvasd_resp_t | openvasd_stop_scan (openvasd_connector_t conn) |
openvasd_resp_t | openvasd_get_scan_results (openvasd_connector_t conn, long first, long last) |
openvasd_result_t | openvasd_result_new (unsigned long id, gchar *type, gchar *ip_address, gchar *hostname, gchar *oid, int port, gchar *protocol, gchar *message, gchar *detail_name, gchar *detail_value, gchar *detail_source_type, gchar *detail_source_name, gchar *detail_source_description) |
char * | openvasd_get_result_member_str (openvasd_result_t result, openvasd_result_member_string_t member) |
int | openvasd_get_result_member_int (openvasd_result_t result, openvasd_result_member_int_t member) |
void | openvasd_result_free (openvasd_result_t result) |
static int | parse_results (const gchar *body, GSList **results) |
int | openvasd_parsed_results (openvasd_connector_t conn, unsigned long first, unsigned long last, GSList **results) |
openvasd_resp_t | openvasd_get_scan_status (openvasd_connector_t conn) |
static int | get_member_value_or_fail (cJSON *reader, const gchar *member) |
Get the value from an object or error. | |
static int | openvasd_get_scan_progress_ext (openvasd_connector_t conn, openvasd_resp_t response) |
int | openvasd_get_scan_progress (openvasd_connector_t conn) |
static openvasd_status_t | get_status_code_from_openvas (const gchar *status_val) |
static int | parse_status (const gchar *body, openvasd_scan_status_t status_info) |
openvasd_scan_status_t | openvasd_parsed_scan_status (openvasd_connector_t conn) |
Return a struct with the general scan status. | |
openvasd_resp_t | openvasd_delete_scan (openvasd_connector_t conn) |
openvasd_resp_t | openvasd_get_health_alive (openvasd_connector_t conn) |
openvasd_resp_t | openvasd_get_health_ready (openvasd_connector_t conn) |
openvasd_resp_t | openvasd_get_health_started (openvasd_connector_t conn) |
openvasd_resp_t | openvasd_get_scan_preferences (openvasd_connector_t conn) |
static openvasd_param_t * | openvasd_param_new (char *id, gchar *name, gchar *defval, gchar *description, gchar *type, int mandatory) |
Create a new Openvasd parameter. | |
void | openvasd_param_free (openvasd_param_t *param) |
Free an Openvasd parameter. | |
char * | openvasd_param_id (openvasd_param_t *param) |
Get the parameter id. | |
char * | openvasd_param_name (openvasd_param_t *param) |
Get the parameter default. | |
char * | openvasd_param_desc (openvasd_param_t *param) |
Get the parameter description. | |
char * | openvasd_param_type (openvasd_param_t *param) |
Get the parameter type. | |
char * | openvasd_param_default (openvasd_param_t *param) |
Get the parameter default. | |
int | openvasd_param_mandatory (openvasd_param_t *param) |
If the parameter is mandatory. | |
int | openvasd_parsed_scans_preferences (openvasd_connector_t conn, GSList **params) |
static void | add_port_to_scan_json (gpointer range, gpointer p_array) |
static void | add_credential_to_scan_json (gpointer credentials, gpointer cred_array) |
static void | add_scan_preferences_to_scan_json (gpointer key, gpointer val, gpointer scan_prefs_array) |
static void | add_vts_to_scan_json (gpointer single_vt, gpointer vts_array) |
char * | openvasd_build_scan_config_json (openvasd_target_t *target, GHashTable *scan_preferences, GSList *vts) |
Build a json object with data necessary to start a scan. | |
openvasd_credential_t * | openvasd_credential_new (const gchar *type, const gchar *service, const gchar *port) |
Allocate and initialize a new Openvasd credential. | |
void | openvasd_credential_free (openvasd_credential_t *credential) |
Free an Openvasd credential. | |
void | openvasd_credential_set_auth_data (openvasd_credential_t *credential, const gchar *name, const gchar *value) |
Get authentication data from an Openvasd credential. | |
openvasd_target_t * | openvasd_target_new (const gchar *scanid, const gchar *hosts, const gchar *ports, const gchar *exclude_hosts, int reverse_lookup_unify, int reverse_lookup_only) |
Create a new Openvasd target. | |
void | openvasd_target_set_finished_hosts (openvasd_target_t *target, const gchar *finished_hosts) |
Set the finished hosts of an Openvasd target. | |
void | openvasd_target_free (openvasd_target_t *target) |
Free an Openvasd target, including all added credentials. | |
void | openvasd_target_add_alive_test_methods (openvasd_target_t *target, gboolean icmp, gboolean tcp_syn, gboolean tcp_ack, gboolean arp, gboolean consider_alive) |
Add alive test methods to Openvasd target. | |
void | openvasd_target_add_credential (openvasd_target_t *target, openvasd_credential_t *credential) |
Add a credential to an Openvasd target. | |
openvasd_vt_single_t * | openvasd_vt_single_new (const gchar *vt_id) |
Create a new single Openvasd VT. | |
void | openvasd_vt_single_free (openvasd_vt_single_t *vt_single) |
Free a single Openvasd VT, including all preference values. | |
void | openvasd_vt_single_add_value (openvasd_vt_single_t *vt_single, const gchar *name, const gchar *value) |
Add a preference value to an Openvasd VT. | |
API for Openvas Daemon communication.
#define G_LOG_DOMAIN "libgvm ovd" |
GLib log domain.
#define RESP_CODE_ERR -1 |
#define RESP_CODE_OK 0 |
typedef struct openvasd_curlm openvasd_curlm_t |
Wrapps a CURLM * handler and the custom header.
typedef enum openvas_request_method openvasd_req_method_t |
typedef struct openvasd_string* openvasd_vt_stream_t |
|
static |
|
static |
|
static |
|
static |
|
static |
Get the value from an object or error.
|
static |
|
static |
Create a CURL handler.
conn | struct holding the openvasd connector information |
method | request method (e.g. GET) |
path | Path to the resource (e.g. /vts) |
data | String containing the request body in json format (scan action, scan config) |
customheader | A CURL slist with custom headers. It is set in the handler and must be free after use with curl_slist_free_all(). |
resp | Structure holding the body response, filled by the callback function |
err | On error, this variable is filled with an error message in json format. |
|
static |
char * openvasd_build_scan_config_json | ( | openvasd_target_t * | target, |
GHashTable * | scan_preferences, | ||
GSList * | vts ) |
Build a json object with data necessary to start a scan.
JSON result consists of scan_id, message type, host ip, hostname, port, together with proto, OID, result message and uri.
target | target |
scan_preferences | Scan preferences to be added to the scan config |
vts | VTS collection to be added to the scan config. |
openvasd_error_t openvasd_connector_builder | ( | openvasd_connector_t | conn, |
openvasd_conn_opt_t | opt, | ||
const void * | val ) |
Build a openvasd connector.
Receive option name and value to build the openvasd connector
conn | struct holding the openvasd connector information |
opt | option to set |
val | value to set |
openvasd_error_t openvasd_connector_free | ( | openvasd_connector_t | conn | ) |
Build a openvasd connector.
Receive option name and value to build the openvasd connector
conn | struct holding the openvasd connector information |
openvasd_connector_t openvasd_connector_new | ( | void | ) |
Initialize an openvasd connector.
void openvasd_credential_free | ( | openvasd_credential_t * | credential | ) |
Free an Openvasd credential.
credential | The credential to free. |
openvasd_credential_t * openvasd_credential_new | ( | const gchar * | type, |
const gchar * | service, | ||
const gchar * | port ) |
Allocate and initialize a new Openvasd credential.
type | The credential type. |
service | The service the credential is for. |
port | The port. |
void openvasd_credential_set_auth_data | ( | openvasd_credential_t * | credential, |
const gchar * | name, | ||
const gchar * | value ) |
Get authentication data from an Openvasd credential.
credential | The credential to get the data from. |
name | The name of the data item to get. |
value | The authentication data or NULL to unset. |
|
static |
Cleanup an openvasd curl handler.
h | Openvasd curl handler to clean |
|
static |
Allocate openvasd curl handler.
openvasd_resp_t openvasd_delete_scan | ( | openvasd_connector_t | conn | ) |
openvasd_resp_t openvasd_get_health_alive | ( | openvasd_connector_t | conn | ) |
openvasd_resp_t openvasd_get_health_ready | ( | openvasd_connector_t | conn | ) |
openvasd_resp_t openvasd_get_health_started | ( | openvasd_connector_t | conn | ) |
int openvasd_get_result_member_int | ( | openvasd_result_t | result, |
openvasd_result_member_int_t | member ) |
char * openvasd_get_result_member_str | ( | openvasd_result_t | result, |
openvasd_result_member_string_t | member ) |
openvasd_resp_t openvasd_get_scan_preferences | ( | openvasd_connector_t | conn | ) |
int openvasd_get_scan_progress | ( | openvasd_connector_t | conn | ) |
|
static |
openvasd_resp_t openvasd_get_scan_results | ( | openvasd_connector_t | conn, |
long | first, | ||
long | last ) |
openvasd_resp_t openvasd_get_scan_status | ( | openvasd_connector_t | conn | ) |
openvasd_resp_t openvasd_get_version | ( | openvasd_connector_t | conn | ) |
Request HEAD.
conn | Connector struct with the data necessary for the connection |
int openvasd_get_vt_stream | ( | openvasd_connector_t | conn | ) |
Get a new feed metadata chunk.
This function must be call until the return value is 0, meaning there is no more data to fetch.
mhnd | Curl multiperfom for requesting the feed metadata |
openvasd_resp_t openvasd_get_vt_stream_init | ( | openvasd_connector_t | conn | ) |
Initialized an curl multiperform handler which allows fetch feed metadata chunk by chunk.
conn | Connector struct with the data necessary for the connection |
mhnd | The curl multiperform handler. It the caller doesn't provide it initialized, it will be initialized. The caller has to free it with openvasd_curlm_handler_close(). |
resp | The stringstream struct for the write callback function. |
openvasd_resp_t openvasd_get_vts | ( | openvasd_connector_t | conn | ) |
Get VT's metadata.
conn | Connector struct with the data necessary for the connection |
char * openvasd_param_default | ( | openvasd_param_t * | param | ) |
Get the parameter default.
param | Openvasd parameter |
char * openvasd_param_desc | ( | openvasd_param_t * | param | ) |
Get the parameter description.
param | Openvasd parameter |
void openvasd_param_free | ( | openvasd_param_t * | param | ) |
Free an Openvasd parameter.
param | Openvasd parameter to destroy. |
char * openvasd_param_id | ( | openvasd_param_t * | param | ) |
Get the parameter id.
param | Openvasd parameter |
int openvasd_param_mandatory | ( | openvasd_param_t * | param | ) |
If the parameter is mandatory.
param | Openvasd parameter |
char * openvasd_param_name | ( | openvasd_param_t * | param | ) |
Get the parameter default.
param | Openvasd parameter |
|
static |
Create a new Openvasd parameter.
char * openvasd_param_type | ( | openvasd_param_t * | param | ) |
Get the parameter type.
param | Openvasd parameter |
int openvasd_parsed_results | ( | openvasd_connector_t | conn, |
unsigned long | first, | ||
unsigned long | last, | ||
GSList ** | results ) |
openvasd_scan_status_t openvasd_parsed_scan_status | ( | openvasd_connector_t | conn | ) |
Return a struct with the general scan status.
conn | Openvasd connector data |
int openvasd_parsed_scans_preferences | ( | openvasd_connector_t | conn, |
GSList ** | params ) |
void openvasd_reset_vt_stream | ( | openvasd_connector_t | conn | ) |
void openvasd_response_cleanup | ( | openvasd_resp_t | resp | ) |
Free an openvasd response struct.
resp | Response to be freed |
void openvasd_result_free | ( | openvasd_result_t | result | ) |
openvasd_result_t openvasd_result_new | ( | unsigned long | id, |
gchar * | type, | ||
gchar * | ip_address, | ||
gchar * | hostname, | ||
gchar * | oid, | ||
int | port, | ||
gchar * | protocol, | ||
gchar * | message, | ||
gchar * | detail_name, | ||
gchar * | detail_value, | ||
gchar * | detail_source_type, | ||
gchar * | detail_source_name, | ||
gchar * | detail_source_description ) |
|
static |
Send request.
curl | The CURL handler to perform an request. |
header_name | If this field is set, is looked in the header and its value is returned inside the response. |
response | The response struct to be filled with the response code and the header value. |
openvasd_resp_t openvasd_start_scan | ( | openvasd_connector_t | conn, |
gchar * | data ) |
@Brief Get VT's metadata
conn | Connector struct with the data necessary for the connection |
data | String containing the scan config in JSON format. |
openvasd_resp_t openvasd_stop_scan | ( | openvasd_connector_t | conn | ) |
void openvasd_target_add_alive_test_methods | ( | openvasd_target_t * | target, |
gboolean | icmp, | ||
gboolean | tcp_syn, | ||
gboolean | tcp_ack, | ||
gboolean | arp, | ||
gboolean | consider_alive ) |
Add alive test methods to Openvasd target.
target | The Openvasd target to add the methods to. |
icmp | Use ICMP ping. |
tcp_syn | Use TCP-SYN ping. |
tcp_ack | Use TCP-ACK ping. |
arp | Use ARP ping. |
consider_alive | Consider host to be alive. |
void openvasd_target_add_credential | ( | openvasd_target_t * | target, |
openvasd_credential_t * | credential ) |
Add a credential to an Openvasd target.
target | The Openvasd target to add the credential to. |
credential | The credential to add. Will be freed with target. |
void openvasd_target_free | ( | openvasd_target_t * | target | ) |
Free an Openvasd target, including all added credentials.
target | The Openvasd target to free. |
openvasd_target_t * openvasd_target_new | ( | const gchar * | scanid, |
const gchar * | hosts, | ||
const gchar * | ports, | ||
const gchar * | exclude_hosts, | ||
int | reverse_lookup_unify, | ||
int | reverse_lookup_only ) |
Create a new Openvasd target.
scanid | Scan ID. |
hosts | The hostnames of the target. |
ports | The ports of the target. |
exclude_hosts | The excluded hosts of the target. |
reverse_lookup_unify | Lookup flag. |
reverse_lookup_only | Lookup flag. |
void openvasd_target_set_finished_hosts | ( | openvasd_target_t * | target, |
const gchar * | finished_hosts ) |
Set the finished hosts of an Openvasd target.
target | The Openvasd target to modify. |
finished_hosts | The hostnames to consider finished. |
void openvasd_vt_single_add_value | ( | openvasd_vt_single_t * | vt_single, |
const gchar * | name, | ||
const gchar * | value ) |
Add a preference value to an Openvasd VT.
This creates a copy of the name and value.
vt_single | The VT to add the preference to. |
name | The name / identifier of the preference. |
value | The value of the preference. |
void openvasd_vt_single_free | ( | openvasd_vt_single_t * | vt_single | ) |
Free a single Openvasd VT, including all preference values.
vt_single | The Openvasd VT to free. |
openvasd_vt_single_t * openvasd_vt_single_new | ( | const gchar * | vt_id | ) |
Create a new single Openvasd VT.
vt_id | The id of the VT. |
|
static |
Cleanup the string struct to hold the response and the curl multiperform handler.
s | The string struct to be freed |
size_t openvasd_vt_stream_len | ( | openvasd_connector_t | conn | ) |
|
static |
Allocate the vt stream struct to hold the response and the curlm handler.
|
static |
Reinitialize the string struct to hold the response.
s | The string struct to be reset |
gchar * openvasd_vt_stream_str | ( | openvasd_connector_t | conn | ) |
|
static |
|
static |
|
static |
Call back function to stored the response.
The function signature is the necessary to work with libcurl. It stores the response in s. It reallocate memory if necessary.