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)
275280static void
276281add_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 */
668601void
669602openvasd_target_add_credential (openvasd_target_t * target ,
670- openvasd_credential_t * credential )
603+ scan_credential_t * credential )
671604{
672605 if (!target || !credential )
673606 return ;
0 commit comments