diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 0c9c9130878123af85477bfad62c75425dabaf68..f0fdee81caeedae149f63a64c87fc82a83a7780f 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -1812,24 +1812,25 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; } const char *l_file_name = l_dir_entry->d_name; size_t l_file_name_len = (l_file_name) ? strlen(l_file_name) : 0; - + unsigned int res = 0; if ( (l_file_name_len > 8) && (!strcmp(l_file_name + l_file_name_len - 8, ".dwallet")) ) { char l_file_path_tmp[MAX_PATH] = {0}; snprintf(l_file_path_tmp, sizeof(l_file_path_tmp) - 1, "%s/%s", c_wallets_path, l_file_name); - l_wallet = dap_chain_wallet_open(l_file_name, c_wallets_path); + l_wallet = dap_chain_wallet_open(l_file_name, c_wallets_path, &res); if (l_wallet) { l_addr = l_net ? dap_chain_wallet_get_addr(l_wallet, l_net->pub.id) : NULL; const char *l_addr_str = dap_chain_addr_to_str(l_addr); + json_object_object_add(json_obj_wall, "Wallet", json_object_new_string(l_file_name)); if(l_wallet->flags & DAP_WALLET$M_FL_ACTIVE) - json_object_object_add(json_obj_wall, "status", json_object_new_string("active")); + json_object_object_add(json_obj_wall, "status", json_object_new_string("protected-active")); else - json_object_object_add(json_obj_wall, "status", json_object_new_string("not active")); - json_object_object_add(json_obj_wall, "sign_status", json_object_new_string( + json_object_object_add(json_obj_wall, "status", json_object_new_string("unprotected")); + json_object_object_add(json_obj_wall, "deprecated", json_object_new_string( strlen(dap_chain_wallet_check_sign(l_wallet))!=0 ? - dap_chain_wallet_check_sign(l_wallet) : "correct")); + "true" : "false")); if (l_addr_str) { json_object_object_add(json_obj_wall, "addr", json_object_new_string(l_addr_str)); } @@ -1838,7 +1839,8 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; } else{ json_object_object_add(json_obj_wall, "Wallet", json_object_new_string(l_file_name)); - json_object_object_add(json_obj_wall, "status", json_object_new_string("can't open")); + if(res==4)json_object_object_add(json_obj_wall, "status", json_object_new_string("protected-inactive")); + else if(res != 0)json_object_object_add(json_obj_wall, "status", json_object_new_string("invalid")); } } else if ((l_file_name_len > 7) && (!strcmp(l_file_name + l_file_name_len - 7, ".backup"))) { json_object_object_add(json_obj_wall, "Wallet", json_object_new_string(l_file_name)); @@ -1866,7 +1868,7 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; json_object_put(json_arr_out); return DAP_CHAIN_NODE_CLI_COM_TX_WALLET_NET_PARAM_ERR; } - l_wallet = dap_chain_wallet_open(l_wallet_name, c_wallets_path); + l_wallet = dap_chain_wallet_open(l_wallet_name, c_wallets_path, NULL); l_addr = (dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet, l_net->pub.id ); } else { l_addr = dap_chain_addr_from_str(l_addr_str); @@ -1995,7 +1997,7 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; } break; // convert wallet case CMD_WALLET_CONVERT: { - l_wallet = dap_chain_wallet_open(l_wallet_name, c_wallets_path); + l_wallet = dap_chain_wallet_open(l_wallet_name, c_wallets_path, NULL); if (!l_wallet) { dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_TX_WALLET_PASS_ERR, "wrong password"); @@ -5094,7 +5096,7 @@ int com_tx_cond_create(int a_argc, char ** a_argv, void **a_reply) dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_TX_COND_CREATE_CAN_NOT_FIND_NET, "Can't find net '%s'", l_net_name); return DAP_CHAIN_NODE_CLI_COM_TX_COND_CREATE_CAN_NOT_FIND_NET; } - dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, c_wallets_path); + dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, c_wallets_path, NULL); // const char* l_sign_str = ""; if(!l_wallet) { dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_TX_COND_CREATE_CAN_NOT_OPEN_WALLET, "Can't open wallet '%s'", l_wallet_str); @@ -5243,7 +5245,7 @@ int com_tx_cond_remove(int a_argc, char ** a_argv, void **reply) dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_TX_COND_REMOVE_CAN_NOT_FIND_NET, "Can't find net '%s'", l_net_name); return DAP_CHAIN_NODE_CLI_COM_TX_COND_REMOVE_CAN_NOT_FIND_NET; } - dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, c_wallets_path); + dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, c_wallets_path, NULL); // const char* l_sign_str = ""; if(!l_wallet) { dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_TX_COND_REMOVE_CAN_NOT_OPEN_WALLET, "Can't open wallet '%s'", l_wallet_str); @@ -5543,7 +5545,7 @@ int com_tx_cond_unspent_find(int a_argc, char **a_argv, void **reply) return DAP_CHAIN_NODE_CLI_COM_TX_COND_UNSPEND_FIND_CAN_NOT_FIND_NET; } - dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, c_wallets_path); + dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, c_wallets_path, NULL); if(!l_wallet) { dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_TX_COND_UNSPEND_FIND_CAN_NOT_OPEN_WALLET, "Can't open wallet '%s'", l_wallet_str); return DAP_CHAIN_NODE_CLI_COM_TX_COND_UNSPEND_FIND_CAN_NOT_OPEN_WALLET; @@ -5948,7 +5950,7 @@ static dap_chain_wallet_t* s_json_get_wallet(struct json_object *a_json, const c // From wallet const char *l_wallet_str = s_json_get_text(a_json, a_key); if(l_wallet_str) { - dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_config_get_item_str_default(g_config, "resources", "wallets_path", NULL)); + dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_config_get_item_str_default(g_config, "resources", "wallets_path", NULL), NULL); return l_wallet; } return NULL; @@ -6786,7 +6788,7 @@ int com_tx_create(int a_argc, char **a_argv, void **reply) } if (l_wallet_fee_name){ - l_wallet_fee = dap_chain_wallet_open(l_wallet_fee_name, c_wallets_path); + l_wallet_fee = dap_chain_wallet_open(l_wallet_fee_name, c_wallets_path, NULL); if (!l_wallet_fee) { dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_TX_CREATE_REQUIRE_PARAMETER_WALLET_FEE, "Wallet %s does not exist", l_wallet_fee_name); @@ -6884,7 +6886,7 @@ int com_tx_create(int a_argc, char **a_argv, void **reply) return l_ret; } - dap_chain_wallet_t * l_wallet = dap_chain_wallet_open(l_from_wallet_name, c_wallets_path); + dap_chain_wallet_t * l_wallet = dap_chain_wallet_open(l_from_wallet_name, c_wallets_path, NULL); if(!l_wallet) { dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_TX_CREATE_WALLET_DOES_NOT_EXIST, @@ -7161,7 +7163,7 @@ int com_tx_history(int a_argc, char ** a_argv, void **a_str_reply) } if (l_wallet_name) { const char *c_wallets_path = dap_chain_wallet_get_path(g_config); - dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_name, c_wallets_path); + dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_name, c_wallets_path, NULL); if (l_wallet) { const char *l_sign_str = dap_chain_wallet_check_sign(l_wallet); //TODO add warning about deprecated signs diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c index c5a7c61be63e7766a953deab1bf9072f06c08b40..709cfb6dc13dd96478f16fedb9e0b04bbc588b05 100644 --- a/modules/net/dap_chain_node_cli_cmd_tx.c +++ b/modules/net/dap_chain_node_cli_cmd_tx.c @@ -729,12 +729,9 @@ json_object *dap_db_history_tx_all(dap_chain_t *l_chain, dap_chain_net_t *l_net, l_arr_end ? json_object_object_add(json_obj_lim, "limit", json_object_new_int(l_arr_end - l_arr_start)): json_object_object_add(json_obj_lim, "limit", json_object_new_string("unlimit")); json_object_array_add(json_arr_out, json_obj_lim); - if (l_arr_end > l_chain->callback_count_atom(l_chain)) { - l_arr_end = l_chain->callback_count_atom(l_chain); - } - + + bool look_for_unknown_service = (a_srv && strcmp(a_srv,"unknown") == 0); -size_t datums = 0; HASH_ITER(hh, l_chain->cells, l_cell, l_cell_tmp) { if ((l_count_tx >= l_arr_end)&&(l_arr_end)) break; @@ -746,7 +743,6 @@ size_t datums = 0; dap_chain_datum_t **l_datums = l_cell->chain->callback_atom_get_datums(l_ptr, l_atom_size, &l_datums_count); for (size_t i = 0; i < l_datums_count && ((l_count_tx < l_arr_end)||(!l_arr_end)); i++) { if (l_datums[i]->header.type_id == DAP_CHAIN_DATUM_TX) { - datums++; if (l_count_tx < l_arr_start) { l_count_tx++; continue; @@ -756,11 +752,12 @@ size_t datums = 0; dap_hash_fast(l_tx, l_datums[i]->header.data_size, &l_ttx_hash); char *service_name = NULL; - dap_chain_tx_tag_action_type_t l_action; + dap_chain_tx_tag_action_type_t l_action = DAP_CHAIN_TX_TAG_ACTION_UNKNOWN; + dap_ledger_t *l_ledger = l_net->pub.ledger; bool srv_found = dap_ledger_tx_service_info(l_ledger, &l_ttx_hash, NULL, &service_name, &l_action); - - if (!(l_action & a_action)) + + if (!(l_action & a_action)) continue; if (a_srv) diff --git a/modules/service/stake/dap_chain_net_srv_stake_lock.c b/modules/service/stake/dap_chain_net_srv_stake_lock.c index 1ff33e67882a0748a312522751cb232da15e120d..1f497a38fe10d53650e91fe61f6ec3ff252df9c5 100644 --- a/modules/service/stake/dap_chain_net_srv_stake_lock.c +++ b/modules/service/stake/dap_chain_net_srv_stake_lock.c @@ -434,7 +434,7 @@ static enum error_code s_cli_hold(int a_argc, char **a_argv, int a_arg_index, da } } - if(NULL == (l_wallet = dap_chain_wallet_open(l_wallet_str, l_wallets_path))) { + if(NULL == (l_wallet = dap_chain_wallet_open(l_wallet_str, l_wallets_path, NULL))) { dap_string_append_printf(output_line, "'%s'", l_wallet_str); return WALLET_OPEN_ERROR; } else { @@ -590,7 +590,7 @@ static enum error_code s_cli_take(int a_argc, char **a_argv, int a_arg_index, da if (IS_ZERO_256( (l_value_fee = dap_chain_balance_scan(l_value_fee_str)) )) return FEE_FORMAT_ERROR; - if (NULL == (l_wallet = dap_chain_wallet_open(l_wallet_str, l_wallets_path))) + if (NULL == (l_wallet = dap_chain_wallet_open(l_wallet_str, l_wallets_path, NULL))) return WALLET_OPEN_ERROR; else dap_string_append(output_line, dap_chain_wallet_check_sign(l_wallet)); diff --git a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c index 1a4da7f33a047d7bbde5c7d33ce279eb36a3b318..e7c6ef181634c2e4b8b2090d662c340d611ca169 100644 --- a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c +++ b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c @@ -1452,7 +1452,7 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, voi dap_cli_server_cmd_set_reply_text(a_str_reply, "Staker order creation requires parameter -w"); return -17; } - dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_chain_wallet_get_path(g_config)); + dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_chain_wallet_get_path(g_config),NULL); if (!l_wallet) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Specified wallet not found"); return -18; @@ -1682,7 +1682,7 @@ static int s_cli_srv_stake_delegate(int a_argc, char **a_argv, int a_arg_index, return -17; } const char* l_sign_str = ""; - dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_chain_wallet_get_path(g_config)); + dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_chain_wallet_get_path(g_config), NULL); if (!l_wallet) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Specified wallet not found"); return -18; @@ -2077,7 +2077,7 @@ static int s_cli_srv_stake_invalidate(int a_argc, char **a_argv, int a_arg_index if (l_wallet_str) { const char* l_sign_str = ""; - dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_chain_wallet_get_path(g_config)); + dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_chain_wallet_get_path(g_config),NULL); if (!l_wallet) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Specified wallet not found"); return -18; diff --git a/modules/service/voting/dap_chain_net_srv_voting.c b/modules/service/voting/dap_chain_net_srv_voting.c index 347a0f40b6114a86965d3109d9fe6e2f0ddad12c..2f9597ab7cb20a6ecdedc87b8ea5265c5d6c5218 100644 --- a/modules/service/voting/dap_chain_net_srv_voting.c +++ b/modules/service/voting/dap_chain_net_srv_voting.c @@ -706,7 +706,7 @@ static int s_cli_voting(int a_argc, char **a_argv, void **a_str_reply) bool l_is_delegated_key = dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-delegated_key_required", NULL) ? true : false; bool l_is_vote_changing_allowed = dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-vote_changing_allowed", NULL) ? true : false; const char *c_wallets_path = dap_chain_wallet_get_path(g_config); - dap_chain_wallet_t *l_wallet_fee = dap_chain_wallet_open(l_wallet_str, c_wallets_path); + dap_chain_wallet_t *l_wallet_fee = dap_chain_wallet_open(l_wallet_str, c_wallets_path,NULL); if (!l_wallet_fee) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet %s does not exist", l_wallet_str); return -112; @@ -840,7 +840,7 @@ static int s_cli_voting(int a_argc, char **a_argv, void **a_str_reply) } const char *c_wallets_path = dap_chain_wallet_get_path(g_config); - dap_chain_wallet_t *l_wallet_fee = dap_chain_wallet_open(l_wallet_str, c_wallets_path); + dap_chain_wallet_t *l_wallet_fee = dap_chain_wallet_open(l_wallet_str, c_wallets_path,NULL); if (!l_wallet_fee) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet %s does not exist", l_wallet_str); return -112; diff --git a/modules/service/vpn/dap_chain_net_vpn_client.c b/modules/service/vpn/dap_chain_net_vpn_client.c index fc3f33d962efeb1158e85e86f0e8d2c273c1e890..df23f1f0e6e724586b4817d77171e1e2eda2d3c2 100644 --- a/modules/service/vpn/dap_chain_net_vpn_client.c +++ b/modules/service/vpn/dap_chain_net_vpn_client.c @@ -221,7 +221,7 @@ static dap_chain_datum_tx_receipt_t * s_callback_client_sign_request(dap_chain_n char *l_gdb_group = dap_strdup_printf("local.%s", DAP_CHAIN_NET_SRV_VPN_CDB_GDB_PREFIX); char *l_wallet_name = (char*) dap_global_db_get_sync(l_gdb_group, dap_strdup("wallet_name"), NULL,NULL, NULL); - dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_name, dap_chain_wallet_get_path(g_config)); + dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_name, dap_chain_wallet_get_path(g_config), NULL); dap_chain_datum_tx_receipt_t *l_ret = NULL; if(l_wallet) { dap_enc_key_t *l_enc_key = dap_chain_wallet_get_key(l_wallet, 0); @@ -359,7 +359,7 @@ static dap_chain_hash_fast_t* dap_chain_net_vpn_client_tx_cond_hash(dap_chain_ne int dap_chain_net_vpn_client_update(dap_chain_net_t *a_net, const char *a_wallet_name, const char *a_str_token, uint64_t a_value_datoshi) { - dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(a_wallet_name, dap_chain_wallet_get_path(g_config)); + dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(a_wallet_name, dap_chain_wallet_get_path(g_config), NULL); if(!l_wallet) { return -1; } diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c index 768af2ec5c3d5fceb8f5b96016127bd54ecfb924..e0cd881759eca86387e9f19fccbdcc42c57d51c6 100644 --- a/modules/service/xchange/dap_chain_net_srv_xchange.c +++ b/modules/service/xchange/dap_chain_net_srv_xchange.c @@ -1256,7 +1256,7 @@ static int s_cli_srv_xchange_order(int a_argc, char **a_argv, int a_arg_index, v dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'order create' requires parameter -w"); return -10; } - dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_chain_wallet_get_path(g_config)); + dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_chain_wallet_get_path(g_config), NULL); const char* l_sign_str = ""; if (!l_wallet) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Specified wallet not found"); @@ -1432,7 +1432,7 @@ static int s_cli_srv_xchange_order(int a_argc, char **a_argv, int a_arg_index, v l_cmd_num == CMD_REMOVE ? "remove" : "update"); return -10; } - dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_chain_wallet_get_path(g_config)); + dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_chain_wallet_get_path(g_config), NULL); const char* l_sign_str = ""; if (!l_wallet) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Specified wallet not found"); @@ -2163,7 +2163,7 @@ static int s_cli_srv_xchange(int a_argc, char **a_argv, void **a_str_reply) dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'purchase' requires parameter -w"); return -10; } - dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_chain_wallet_get_path(g_config)); + dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, dap_chain_wallet_get_path(g_config), NULL); if (!l_wallet) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Specified wallet not found"); return -11; diff --git a/modules/wallet/dap_chain_wallet.c b/modules/wallet/dap_chain_wallet.c index 38cd028f53c82188f2c23c9c3690e3ad2e417617..95e5dcdb2a9ba510f333fb3589dcf8214f1ae4d5 100644 --- a/modules/wallet/dap_chain_wallet.c +++ b/modules/wallet/dap_chain_wallet.c @@ -164,7 +164,7 @@ char *c_wallets_path; return log_it(L_ERROR, "Wallet's path has been not configured"), -EINVAL; } - if ( !(l_wallet = dap_chain_wallet_open (a_name, c_wallets_path)) ) + if ( !(l_wallet = dap_chain_wallet_open (a_name, c_wallets_path, NULL)) ) { memset(l_prec->pass, 0, l_prec->pass_len), l_prec->pass_len = 0; /* Say <what> again ?! */ return log_it(L_ERROR, "Wallet's password is invalid, say <password> again"), -EAGAIN; @@ -326,7 +326,7 @@ int dap_chain_wallet_init() if ( l_len > 8 && !strcmp(l_dir_entry->d_name + l_len - (sizeof(s_wallet_ext) - 1), s_wallet_ext) ) { if (snprintf(l_fspec, sizeof(l_fspec) - 1, "%s/%s", c_wallets_path, l_dir_entry->d_name) < 0) continue; - if ( (l_wallet = dap_chain_wallet_open_file(l_fspec, NULL)) ) + if ( (l_wallet = dap_chain_wallet_open_file(l_fspec, NULL, NULL)) ) dap_chain_wallet_close(l_wallet); } } @@ -712,7 +712,8 @@ if ( a_pass ) */ dap_chain_wallet_t *dap_chain_wallet_open_file ( const char *a_file_name, - const char *l_pass + const char *l_pass, + unsigned int * a_out_stat ) { dap_chain_wallet_t *l_wallet; @@ -736,6 +737,8 @@ uint32_t l_csum = CRC32C_INIT, l_csum2 = CRC32C_INIT; if ( 0 > (l_fh = open(a_file_name , O_RDONLY)) ) { /* Open file for ReadOnly !!! */ l_err = errno; #endif + if ( a_out_stat ) + *a_out_stat = 1; return log_it(L_ERROR,"Cant open file %s for read, error %"DAP_FORMAT_ERRNUM, a_file_name, l_err), NULL; } #ifdef DAP_OS_WINDOWS @@ -745,6 +748,8 @@ uint32_t l_csum = CRC32C_INIT, l_csum2 = CRC32C_INIT; if (sizeof(l_file_hdr) != read(l_fh, &l_file_hdr, sizeof(l_file_hdr))) {/* Get the file header record */ l_err = errno; #endif + if ( a_out_stat ) + *a_out_stat = 2; return log_it(L_ERROR, "Error reading Wallet file (%s) header, err %"DAP_FORMAT_ERRNUM, a_file_name, l_err), dap_fileclose(l_fh), NULL; } @@ -752,18 +757,24 @@ uint32_t l_csum = CRC32C_INIT, l_csum2 = CRC32C_INIT; log_it(L_ERROR, "Wallet (%s) signature mismatch (%"DAP_UINT64_FORMAT_X" != %"DAP_UINT64_FORMAT_X")", a_file_name, l_file_hdr.signature, DAP_CHAIN_WALLETS_FILE_SIGNATURE); dap_fileclose(l_fh); + if ( a_out_stat ) + *a_out_stat = 3; return NULL; } if ( (l_file_hdr.version == DAP_WALLET$K_VER_2) && (!l_pass) ) { log_it(L_DEBUG, "Wallet (%s) version 2 cannot be processed w/o password", a_file_name); dap_fileclose(l_fh); + if ( a_out_stat ) + *a_out_stat = 4; return NULL; } if ( l_file_hdr.wallet_len > DAP_WALLET$SZ_NAME ) { log_it(L_ERROR, "Invalid Wallet name (%s) length ( >%d)", a_file_name, DAP_WALLET$SZ_NAME); dap_fileclose(l_fh); + if ( a_out_stat ) + *a_out_stat = 5; return NULL; } @@ -774,6 +785,8 @@ uint32_t l_csum = CRC32C_INIT, l_csum2 = CRC32C_INIT; if (l_file_hdr.wallet_len != read(l_fh, l_wallet_name, l_file_hdr.wallet_len)) { /* Read wallet's name */ l_err = errno; #endif + if ( a_out_stat ) + *a_out_stat = 6; return log_it(L_ERROR, "Error reading Wallet name, err %"DAP_FORMAT_ERRNUM, l_err), dap_fileclose(l_fh), NULL; } @@ -805,13 +818,18 @@ uint32_t l_csum = CRC32C_INIT, l_csum2 = CRC32C_INIT; } } #endif - if (l_err) + if (l_err){ + if ( a_out_stat ) + *a_out_stat = 6; return log_it(L_ERROR, "Wallet file (%s) I/O error reading certificate body (%d != %zd), error %"DAP_FORMAT_ERRNUM, a_file_name, l_cert_hdr.cert_raw_size, (ssize_t)l_rc, l_err), dap_fileclose(l_fh), NULL; + } if ( !l_certs_count ) { log_it(L_ERROR, "No certificate (-s) in the wallet file (%s)", a_file_name); dap_fileclose(l_fh); + if ( a_out_stat ) + *a_out_stat = 7; return NULL; } @@ -820,6 +838,8 @@ uint32_t l_csum = CRC32C_INIT, l_csum2 = CRC32C_INIT; if ( !(l_enc_key = dap_enc_key_new_generate(DAP_ENC_KEY_TYPE_GOST_OFB, NULL, 0, l_pass, strlen(l_pass), 0)) ) { log_it(L_ERROR, "Error create key context"); dap_fileclose(l_fh); + if ( a_out_stat ) + *a_out_stat = 8; return NULL; } @@ -831,6 +851,8 @@ uint32_t l_csum = CRC32C_INIT, l_csum2 = CRC32C_INIT; if (!l_wallet) { log_it(L_CRITICAL, "%s", g_error_memory_alloc); dap_fileclose(l_fh); + if ( a_out_stat ) + *a_out_stat = 9; return NULL; } @@ -840,6 +862,8 @@ uint32_t l_csum = CRC32C_INIT, l_csum2 = CRC32C_INIT; log_it(L_CRITICAL, "%s", g_error_memory_alloc); DAP_DEL_Z(l_wallet); dap_fileclose(l_fh); + if ( a_out_stat ) + *a_out_stat = 9; return NULL; } @@ -852,6 +876,8 @@ uint32_t l_csum = CRC32C_INIT, l_csum2 = CRC32C_INIT; log_it(L_ERROR, "Count is zero in dap_chain_wallet_open_file"); DAP_DEL_Z(l_wallet); dap_fileclose(l_fh); + if ( a_out_stat ) + *a_out_stat = 10; return NULL; } @@ -861,6 +887,8 @@ uint32_t l_csum = CRC32C_INIT, l_csum2 = CRC32C_INIT; log_it(L_CRITICAL, "%s", g_error_memory_alloc); DAP_DEL_Z(l_wallet); dap_fileclose(l_fh); + if ( a_out_stat ) + *a_out_stat = 9; return NULL; } @@ -921,6 +949,8 @@ uint32_t l_csum = CRC32C_INIT, l_csum2 = CRC32C_INIT; log_it(L_ERROR, "Wallet checksum mismatch, %#x <> %#x", l_csum, l_csum2); dap_chain_wallet_close( l_wallet); l_wallet = NULL; + if ( a_out_stat ) + *a_out_stat = 11; } dap_enc_key_delete(l_enc_key); @@ -941,7 +971,8 @@ uint32_t l_csum = CRC32C_INIT, l_csum2 = CRC32C_INIT; */ dap_chain_wallet_t *dap_chain_wallet_open ( const char *a_wallet_name, - const char *a_wallets_path + const char *a_wallets_path, + unsigned int * a_out_stat ) { char l_file_name [MAX_PATH] = {0}, l_pass [ DAP_WALLET$SZ_PASS + 3] = {0}, @@ -965,7 +996,7 @@ ssize_t l_rc, l_pass_len; l_pass_len = 0; - return dap_chain_wallet_open_file(l_file_name, l_pass_len ? l_pass : NULL); + return dap_chain_wallet_open_file(l_file_name, l_pass_len ? l_pass : NULL, a_out_stat); } /** diff --git a/modules/wallet/include/dap_chain_wallet.h b/modules/wallet/include/dap_chain_wallet.h index 343e1edadaf8a74317dc52a485627d401dc29538..d0a9e9ff0288f0f19b1d98fe82832254323ba342 100644 --- a/modules/wallet/include/dap_chain_wallet.h +++ b/modules/wallet/include/dap_chain_wallet.h @@ -66,8 +66,8 @@ dap_chain_wallet_t * dap_chain_wallet_create_with_pass(const char * a_wallet_nam dap_chain_wallet_t *dap_chain_wallet_create(const char * a_wallet_name, const char * a_wallets_path, dap_sign_type_t a_sig_type, const char *a_pass); // Creates new one if not found -dap_chain_wallet_t *dap_chain_wallet_open_file(const char * a_file_name, const char *a_pass); -dap_chain_wallet_t *dap_chain_wallet_open(const char * a_wallet_name, const char * a_wallets_path); +dap_chain_wallet_t *dap_chain_wallet_open_file(const char * a_file_name, const char *a_pass, unsigned int *a_out_stat); +dap_chain_wallet_t *dap_chain_wallet_open(const char * a_wallet_name, const char * a_wallets_path, unsigned int * a_out_stat); dap_chain_wallet_t *dap_chain_wallet_open_ext(const char * a_wallet_name, const char * a_wallets_path, const char *pass); int dap_chain_wallet_save(dap_chain_wallet_t * a_wallet, const char *a_pass);