From 67bb910d82cb6366f0b1303f68a36d0e70163927 Mon Sep 17 00:00:00 2001
From: Roman Khlopkov <roman.khlopkov@demlabs.net>
Date: Wed, 15 Jul 2020 16:05:14 +0300
Subject: [PATCH] [*] Small changes in ACL behavior

---
 dap-sdk/net/client/dap_client_pvt.c          | 5 +++++
 dap-sdk/net/server/enc_server/dap_enc_http.c | 4 ----
 dap-sdk/net/stream/stream/dap_stream_ctl.c   | 6 ++++++
 modules/net/dap_chain_net.c                  | 8 --------
 4 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/dap-sdk/net/client/dap_client_pvt.c b/dap-sdk/net/client/dap_client_pvt.c
index 47a67a2d84..1bb6f9708e 100644
--- a/dap-sdk/net/client/dap_client_pvt.c
+++ b/dap-sdk/net/client/dap_client_pvt.c
@@ -399,6 +399,11 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_pvt)
         case STAGE_ENC_INIT: {
             log_it(L_INFO, "Go to stage ENC: prepare the request");         
             a_client_pvt->session_key_open = dap_enc_key_new_generate(DAP_ENC_KEY_TYPE_MSRLN, NULL, 0, NULL, 0, 0);
+            if (!a_client_pvt->session_key_open) {
+                log_it(L_ERROR, "Insufficient memory! May be a huge memory leak present");
+                a_client_pvt->stage_status = STAGE_STATUS_ERROR;
+                break;
+            }
             size_t l_key_size = a_client_pvt->session_key_open->pub_key_data_size;
             dap_cert_t *l_cert = a_client_pvt->auth_cert;
             dap_sign_t *l_sign = NULL;
diff --git a/dap-sdk/net/server/enc_server/dap_enc_http.c b/dap-sdk/net/server/enc_server/dap_enc_http.c
index d7cd6c7122..c04ddf05f1 100644
--- a/dap-sdk/net/server/enc_server/dap_enc_http.c
+++ b/dap-sdk/net/server/enc_server/dap_enc_http.c
@@ -122,10 +122,6 @@ void enc_http_proc(struct dap_http_simple *cl_st, void * arg)
         dap_enc_ks_key_t * key_ks = dap_enc_ks_new();
         if (s_acl_callback) {
             key_ks->acl_list = s_acl_callback(&l_sign_hash);
-            if (!key_ks->acl_list) {
-                *return_code = Http_Status_Unauthorized;
-                return;
-            }
         } else {
             log_it(L_WARNING, "Callback for ACL is not set, pass anauthorized");
         }
diff --git a/dap-sdk/net/stream/stream/dap_stream_ctl.c b/dap-sdk/net/stream/stream/dap_stream_ctl.c
index e42b474d79..21bd39eb99 100644
--- a/dap-sdk/net/stream/stream/dap_stream_ctl.c
+++ b/dap-sdk/net/stream/stream/dap_stream_ctl.c
@@ -149,6 +149,11 @@ void s_proc(struct dap_http_simple *a_http_simple, void * a_arg)
             dap_http_header_t *l_hdr_key_id = dap_http_header_find(a_http_simple->http->in_headers, "KeyID");
             if (l_hdr_key_id) {
                 dap_enc_ks_key_t *l_ks_key = dap_enc_ks_find(l_hdr_key_id->value);
+                if (!l_ks_key) {
+                    log_it(L_WARNING, "Key with ID %s not found", l_hdr_key_id->value);
+                    *return_code = Http_Status_BadRequest;
+                    return;
+                }
                 ss->acl = l_ks_key->acl_list;
             }
             enc_http_reply_f(l_dg,"%u %s",ss->id,key_str);
@@ -160,6 +165,7 @@ void s_proc(struct dap_http_simple *a_http_simple, void * a_arg)
         }else{
             log_it(L_ERROR,"Wrong request: \"%s\"",l_dg->in_query);
             *return_code = Http_Status_BadRequest;
+            return;
         }
 
         unsigned int conn_t = 0;
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 2b6fa7859e..5a9025d903 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -2607,18 +2607,10 @@ static uint8_t *dap_chain_net_set_acl(dap_chain_hash_fast_t *a_pkey_hash)
 {
     uint16_t l_net_count;
     dap_chain_net_t **l_net_list = dap_chain_net_list(&l_net_count);
-    bool l_accessible = false;
     if (l_net_count) {
         uint8_t *l_ret = DAP_NEW_SIZE(uint8_t, l_net_count);
         for (uint16_t i = 0; i < l_net_count; i++) {
             l_ret[i] = s_net_check_acl(l_net_list[i], a_pkey_hash);
-            if (l_ret[i]) {
-                l_accessible = true;
-            }
-        }
-        if (!l_accessible) {    // No one network can be accessed with this key
-            DAP_DELETE(l_ret);
-            l_ret = NULL;
         }
         return l_ret;
     }
-- 
GitLab