Skip to content

Commit 299d6e6

Browse files
Merge pull request #1069 from greenbone/add-credential-utils
Change: Move common functions for handling target credentials to utils.
2 parents 6a6c94a + 4b036ab commit 299d6e6

9 files changed

Lines changed: 451 additions & 246 deletions

File tree

openvasd/openvasd.c

Lines changed: 29 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,6 @@
3232
#define RESP_CODE_ERR -1
3333
#define RESP_CODE_OK 0
3434

35-
/**
36-
* @brief Struct credential information for openvasd.
37-
*/
38-
struct openvasd_credential
39-
{
40-
gchar *type; /**< Credential type */
41-
gchar *service; /**< Service the credential is for */
42-
gchar *port; /**< Port the credential is for */
43-
GHashTable *auth_data; /**< Authentication data (username, password, etc.)*/
44-
};
45-
4635
/**
4736
* @brief Struct holding target information.
4837
*/
@@ -266,6 +255,22 @@ add_port_to_scan_json (gpointer range, gpointer p_array)
266255
cJSON_AddItemToArray ((cJSON *) p_array, port);
267256
}
268257

258+
/**
259+
* @brief Add authentication data key value to a JSON object.
260+
*
261+
* @param key Key string.
262+
* @param value Value string.
263+
* @param json_obj JSON object to add the key-value pair to.
264+
*/
265+
static void
266+
add_auth_data_key_value_as_json (const char *key, const char *value,
267+
void *json_obj)
268+
{
269+
if (!key || !value || !json_obj)
270+
return;
271+
cJSON_AddStringToObject ((cJSON *) json_obj, key, value);
272+
}
273+
269274
/**
270275
* @brief Add a credential to the scan json object.
271276
*
@@ -275,26 +280,26 @@ add_port_to_scan_json (gpointer range, gpointer p_array)
275280
static void
276281
add_credential_to_scan_json (gpointer credentials, gpointer cred_array)
277282
{
278-
GHashTableIter auth_data_iter;
279-
gchar *auth_data_name, *auth_data_value;
280283
cJSON *cred_obj = NULL;
281284

282-
openvasd_credential_t *cred = credentials;
285+
scan_credential_t *cred = credentials;
286+
287+
const gchar *type = scan_credential_get_type (cred);
288+
const gchar *service = scan_credential_get_service (cred);
289+
const gchar *port = scan_credential_get_port (cred);
283290

284291
cred_obj = cJSON_CreateObject ();
285-
cJSON_AddStringToObject (cred_obj, "service", cred->service);
292+
cJSON_AddStringToObject (cred_obj, "service", service ? service : "");
286293

287-
if (cred->port)
294+
if (port)
288295
{
289-
cJSON_AddNumberToObject (cred_obj, "port", atoi (cred->port));
296+
cJSON_AddNumberToObject (cred_obj, "port", atoi (port));
290297
}
291298

292299
cJSON *cred_type_obj = cJSON_CreateObject ();
293-
g_hash_table_iter_init (&auth_data_iter, cred->auth_data);
294-
while (g_hash_table_iter_next (&auth_data_iter, (gpointer *) &auth_data_name,
295-
(gpointer *) &auth_data_value))
296-
cJSON_AddStringToObject (cred_type_obj, auth_data_name, auth_data_value);
297-
cJSON_AddItemToObject (cred_obj, cred->type, cred_type_obj);
300+
scan_credential_foreach_auth_data (cred, add_auth_data_key_value_as_json,
301+
cred_type_obj);
302+
cJSON_AddItemToObject (cred_obj, type ? type : "", cred_type_obj);
298303

299304
cJSON_AddItemToArray ((cJSON *) cred_array, cred_obj);
300305
}
@@ -490,78 +495,6 @@ openvasd_build_scan_config_json (openvasd_target_t *target,
490495
return json_str;
491496
}
492497

493-
/**
494-
* @brief Allocate and initialize a new openvasd credential.
495-
*
496-
* @param type The credential type.
497-
* @param service The service the credential is for.
498-
* @param port The port.
499-
*
500-
* @return New openvasd credential.
501-
*/
502-
openvasd_credential_t *
503-
openvasd_credential_new (const gchar *type, const gchar *service,
504-
const gchar *port)
505-
{
506-
openvasd_credential_t *new_credential;
507-
508-
new_credential = g_malloc0 (sizeof (openvasd_credential_t));
509-
510-
new_credential->type = type ? g_strdup (type) : NULL;
511-
new_credential->service = service ? g_strdup (service) : NULL;
512-
new_credential->port = port ? g_strdup (port) : NULL;
513-
new_credential->auth_data =
514-
g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
515-
516-
return new_credential;
517-
}
518-
519-
/**
520-
* @brief Free an openvasd credential.
521-
*
522-
* @param credential The credential to free.
523-
*/
524-
void
525-
openvasd_credential_free (openvasd_credential_t *credential)
526-
{
527-
if (!credential)
528-
return;
529-
530-
g_free (credential->type);
531-
g_free (credential->service);
532-
g_free (credential->port);
533-
g_hash_table_destroy (credential->auth_data);
534-
g_free (credential);
535-
}
536-
537-
/**
538-
* @brief Get authentication data from an openvasd credential.
539-
*
540-
* @param credential The credential to get the data from.
541-
* @param name The name of the data item to get.
542-
* @param value The authentication data or NULL to unset.
543-
*/
544-
void
545-
openvasd_credential_set_auth_data (openvasd_credential_t *credential,
546-
const gchar *name, const gchar *value)
547-
{
548-
if (credential == NULL || name == NULL)
549-
return;
550-
551-
if (g_regex_match_simple ("^[[:alpha:]][[:alnum:]_]*$", name, 0, 0))
552-
{
553-
if (value)
554-
g_hash_table_replace (credential->auth_data, g_strdup (name),
555-
g_strdup (value));
556-
else
557-
g_hash_table_remove (credential->auth_data, name);
558-
}
559-
else
560-
{
561-
g_warning ("%s: Invalid auth data name: %s", __func__, name);
562-
}
563-
}
564-
565498
/**
566499
* @brief Create a new openvasd target.
567500
*
@@ -623,7 +556,7 @@ openvasd_target_free (openvasd_target_t *target)
623556
return;
624557

625558
g_slist_free_full (target->credentials,
626-
(GDestroyNotify) openvasd_credential_free);
559+
(GDestroyNotify) scan_credential_free);
627560
g_free (target->exclude_hosts);
628561
g_free (target->finished_hosts);
629562
g_free (target->scan_id);
@@ -667,7 +600,7 @@ openvasd_target_add_alive_test_methods (openvasd_target_t *target,
667600
*/
668601
void
669602
openvasd_target_add_credential (openvasd_target_t *target,
670-
openvasd_credential_t *credential)
603+
scan_credential_t *credential)
671604
{
672605
if (!target || !credential)
673606
return;

openvasd/openvasd.h

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
#include "../base/nvti.h"
1515
#include "../http_scanner/http_scanner.h"
16+
#include "../util/credentialutils.h"
1617
#include "../util/jsonpull.h"
1718

1819
#include <glib.h>
@@ -41,8 +42,6 @@ typedef struct openvasd_target openvasd_target_t;
4142

4243
typedef struct openvasd_vt_single openvasd_vt_single_t;
4344

44-
typedef struct openvasd_credential openvasd_credential_t;
45-
4645
openvasd_target_t *
4746
openvasd_target_new (const gchar *, const gchar *, const gchar *, const gchar *,
4847
int, int);
@@ -57,17 +56,8 @@ openvasd_target_add_alive_test_methods (openvasd_target_t *, gboolean, gboolean,
5756
void
5857
openvasd_target_free (openvasd_target_t *);
5958

60-
openvasd_credential_t *
61-
openvasd_credential_new (const gchar *, const gchar *, const gchar *);
62-
63-
void
64-
openvasd_credential_set_auth_data (openvasd_credential_t *, const gchar *,
65-
const gchar *);
66-
void
67-
openvasd_credential_free (openvasd_credential_t *);
68-
6959
void
70-
openvasd_target_add_credential (openvasd_target_t *, openvasd_credential_t *);
60+
openvasd_target_add_credential (openvasd_target_t *, scan_credential_t *);
7161

7262
openvasd_vt_single_t *
7363
openvasd_vt_single_new (const gchar *);

openvasd/openvasd_tests.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ AfterEach (openvasd)
2222

2323
Ensure (openvasd, openvasd_add_credential_to_scan_json)
2424
{
25-
openvasd_credential_t *credential;
25+
scan_credential_t *credential;
2626
cJSON *credentials = cJSON_CreateArray ();
2727

28-
credential = openvasd_credential_new ("up", "generic", "0");
28+
credential = scan_credential_new ("up", "generic", "0");
2929

30-
openvasd_credential_set_auth_data (credential, "username", "admin");
31-
openvasd_credential_set_auth_data (credential, "password", "admin");
30+
scan_credential_set_auth_data (credential, "username", "admin");
31+
scan_credential_set_auth_data (credential, "password", "admin");
3232

3333
add_credential_to_scan_json (credential, credentials);
3434

@@ -53,7 +53,7 @@ Ensure (openvasd, openvasd_add_credential_to_scan_json)
5353
assert_that (username, is_equal_to_string ("admin"));
5454
assert_that (password, is_equal_to_string ("admin"));
5555

56-
openvasd_credential_free (credential);
56+
scan_credential_free (credential);
5757
cJSON_Delete (credentials);
5858
}
5959

0 commit comments

Comments
 (0)