From 9253dd4805311bc6941f7ab497b975b5e2aac294 Mon Sep 17 00:00:00 2001
From: "alexey.stratulat" <alexey.stratulat@demlabs.net>
Date: Mon, 10 Jun 2024 06:11:01 +0000
Subject: [PATCH] Bugfix 11952

---
 modules/net/dap_chain_net.c         | 44 +++++++++++------------------
 modules/net/dap_chain_node_client.c |  3 +-
 2 files changed, 18 insertions(+), 29 deletions(-)

diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index f5e39df6e4..74b0019eac 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -339,12 +339,7 @@ int dap_chain_net_init()
 char *dap_chain_net_get_gdb_group_acl(dap_chain_net_t *a_net)
 {
     if (a_net) {
-        const char l_path[] = "network/";
-        char l_cfg_path[strlen(a_net->pub.name) + strlen(l_path) + 1];
-        strcpy(l_cfg_path, l_path);
-        strcat(l_cfg_path, a_net->pub.name);
-        dap_config_t *l_cfg = dap_config_open(l_cfg_path);
-        const char *l_auth_gdb = dap_config_get_item_str(l_cfg, "auth", "acl_accept_ca_gdb");
+        const char *l_auth_gdb = dap_config_get_item_str(a_net->pub.config, "auth", "acl_accept_ca_gdb");
         if (l_auth_gdb) {
             return dap_strdup_printf("%s.%s", a_net->pub.gdb_groups_prefix, l_auth_gdb);
         }
@@ -2151,10 +2146,7 @@ bool s_net_load(void *a_arg)
     dap_chain_net_t *l_net = a_arg;
     int l_err_code = 0;
 
-    char *l_cfg_path = dap_strdup_printf("network/%s", l_net->pub.name);
-    dap_config_t *l_cfg = dap_config_open(l_cfg_path);
-    DAP_DELETE(l_cfg_path);
-    if (!l_cfg) {
+    if (!l_net->pub.config) {
         log_it(L_ERROR,"Can't open default network config");
         l_err_code = -1;
         goto ret;
@@ -2237,7 +2229,7 @@ bool s_net_load(void *a_arg)
         case NODE_ROLE_CELL_MASTER:
         case NODE_ROLE_MASTER:{
             uint16_t l_proc_chains_count=0;
-            char **l_proc_chains = dap_config_get_array_str(l_cfg, "role-master", "proc_chains", &l_proc_chains_count);
+            char **l_proc_chains = dap_config_get_array_str(l_net->pub.config, "role-master", "proc_chains", &l_proc_chains_count);
             for (size_t i = 0; i< l_proc_chains_count ; i++) {
                 dap_chain_id_t l_chain_id = {};
                 if (dap_chain_id_parse(l_proc_chains[i], &l_chain_id) == 0) {
@@ -2261,7 +2253,7 @@ bool s_net_load(void *a_arg)
     
     l_net_pvt->load_mode = false;
 
-    l_net_pvt->balancer_type = dap_config_get_item_bool_default(l_cfg, "general", "use_dns_links", false);
+    l_net_pvt->balancer_type = dap_config_get_item_bool_default(l_net->pub.config, "general", "use_dns_links", false);
 
     // Init GlobalDB clusters for mempool, service and nodes (with aliases)
     char *l_gdb_groups_mask = NULL;
@@ -2322,13 +2314,14 @@ bool s_net_load(void *a_arg)
     dap_chain_net_add_nodelist_notify_callback(l_net, s_nodelist_change_notify, l_net);
 
     if (dap_link_manager_add_net(l_net->pub.id.uint64, l_net_pvt->nodes_cluster->links_cluster,
-                                dap_config_get_item_uint16_default(l_cfg, "general", "links_required", 3))) {
+                                dap_config_get_item_uint16_default(l_net->pub.config,
+                                                                   "general", "links_required", 3))) {
         log_it(L_WARNING, "Can't add net %s to link manager", l_net->pub.name);
     }
 
     DL_FOREACH(l_net->pub.chains, l_chain)
         if (l_chain->callback_created)
-            l_chain->callback_created(l_chain, l_cfg);
+            l_chain->callback_created(l_chain, l_net->pub.config);
 
      if ( dap_config_get_item_bool_default(g_config, "server", "enabled", false) ) {
         if ( !l_net_pvt->node_info->ext_port ) {
@@ -2368,10 +2361,12 @@ bool s_net_load(void *a_arg)
            l_net_pvt->node_info->cell_id.uint64);
 
     // TODO rework alias concept
-    const char * l_node_addr_type = dap_config_get_item_str_default(l_cfg , "general", "node_addr_type", "auto");
+    const char * l_node_addr_type = dap_config_get_item_str_default(l_net->pub.config ,
+                                                                    "general", "node_addr_type", "auto");
     if (!dap_strcmp(l_node_addr_type, "static")) {
-        const char *l_node_alias_str = dap_config_get_item_str_default(l_cfg, "general", "node-addr",
-                                                                       dap_config_get_item_str(l_cfg, "general", "node-alias"));
+        const char *l_node_alias_str = dap_config_get_item_str_default(l_net->pub.config, "general", "node-addr",
+                                                                       dap_config_get_item_str(l_net->pub.config,
+                                                                                               "general", "node-alias"));
         if (l_node_alias_str) {
             dap_stream_node_addr_t *l_alias_addr = dap_chain_node_alias_find(l_net, l_node_alias_str);
             if (!l_alias_addr)
@@ -2389,8 +2384,6 @@ bool s_net_load(void *a_arg)
 ret:
     if (l_err_code)
         log_it(L_ERROR, "Loading chains of net %s finished with (%d) error code.", l_net->pub.name, l_err_code);
-    if (l_cfg)
-        dap_config_close(l_cfg);
     pthread_mutex_lock(&s_net_cond_lock);
     s_net_loading_count--;
     pthread_cond_signal(&s_net_cond);
@@ -3030,11 +3023,7 @@ char *dap_chain_net_verify_datum_err_code_to_str(dap_chain_datum_t *a_datum, int
  */
 static bool s_net_check_acl(dap_chain_net_t *a_net, dap_chain_hash_fast_t *a_pkey_hash)
 {
-    const char l_path[] = "network/";
-    char l_cfg_path[strlen(a_net->pub.name) + strlen(l_path) + 1];
-    snprintf(l_cfg_path, sizeof(l_cfg_path), "%s%s", l_path, a_net->pub.name);
-    dap_config_t *l_cfg = dap_config_open(l_cfg_path);
-    const char *l_auth_type = dap_config_get_item_str(l_cfg, "auth", "type");
+    const char *l_auth_type = dap_config_get_item_str(a_net->pub.config, "auth", "type");
     bool l_authorized = true;
     if (l_auth_type && !strcmp(l_auth_type, "ca")) {
         if (dap_hash_fast_is_blank(a_pkey_hash)) {
@@ -3044,7 +3033,7 @@ static bool s_net_check_acl(dap_chain_net_t *a_net, dap_chain_hash_fast_t *a_pke
         char l_auth_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
         dap_chain_hash_fast_to_str(a_pkey_hash, l_auth_hash_str, sizeof(l_auth_hash_str));
         uint16_t l_acl_list_len = 0;
-        char **l_acl_list = dap_config_get_array_str(l_cfg, "auth", "acl_accept_ca_list", &l_acl_list_len);
+        char **l_acl_list = dap_config_get_array_str(a_net->pub.config, "auth", "acl_accept_ca_list", &l_acl_list_len);
         for (uint16_t i = 0; i < l_acl_list_len; i++) {
             if (!strcmp(l_acl_list[i], l_auth_hash_str)) {
                 l_authorized = true;
@@ -3052,7 +3041,7 @@ static bool s_net_check_acl(dap_chain_net_t *a_net, dap_chain_hash_fast_t *a_pke
             }
         }
         if (!l_authorized) {
-            const char *l_acl_gdb = dap_config_get_item_str(l_cfg, "auth", "acl_accept_ca_gdb");
+            const char *l_acl_gdb = dap_config_get_item_str(a_net->pub.config, "auth", "acl_accept_ca_gdb");
             if (l_acl_gdb) {
                 size_t l_objs_count;
                 dap_global_db_obj_t *l_objs = dap_global_db_get_all_sync(l_acl_gdb, &l_objs_count);
@@ -3066,7 +3055,7 @@ static bool s_net_check_acl(dap_chain_net_t *a_net, dap_chain_hash_fast_t *a_pke
             }
         }
         if (!l_authorized) {
-            const char *l_acl_chains = dap_config_get_item_str(l_cfg, "auth", "acl_accept_ca_chains");
+            const char *l_acl_chains = dap_config_get_item_str(a_net->pub.config, "auth", "acl_accept_ca_chains");
             if (l_acl_chains && !strcmp(l_acl_chains, "all")) {
                 dap_list_t *l_certs = dap_cert_get_all_mem();
                 for (dap_list_t *l_tmp = l_certs; l_tmp && !l_authorized; l_tmp = dap_list_next(l_tmp)) {
@@ -3083,7 +3072,6 @@ static bool s_net_check_acl(dap_chain_net_t *a_net, dap_chain_hash_fast_t *a_pke
             }
         }
     }
-    dap_config_close(l_cfg);
     return l_authorized;
 }
 
diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c
index 08fcc563b4..a30ca8c621 100644
--- a/modules/net/dap_chain_node_client.c
+++ b/modules/net/dap_chain_node_client.c
@@ -293,7 +293,8 @@ bool dap_chain_node_client_connect(dap_chain_node_client_t *a_node_client, const
     dap_client_set_is_always_reconnect(a_node_client->client, false);
     a_node_client->client->_inheritor = a_node_client;
     dap_client_set_active_channels_unsafe(a_node_client->client, a_active_channels);
-    dap_client_set_auth_cert(a_node_client->client, a_node_client->net->pub.name);
+    const char *l_cert_node_name = dap_config_get_item_str(a_node_client->net->pub.config, "general", "auth_cert");
+    dap_client_set_auth_cert(a_node_client->client, l_cert_node_name);
     char *l_host_addr = a_node_client->info->ext_host;
     
     if ( !*l_host_addr || !strcmp(l_host_addr, "::") || !a_node_client->info->ext_port ) {
-- 
GitLab