fix memory leak and transaction error handling related to KYC
This commit is contained in:
parent
87a78c6f8c
commit
86e0f2c70d
@ -496,7 +496,7 @@ return_relevant_amounts (void *cls,
|
|||||||
static bool
|
static bool
|
||||||
kyc_satisfied (struct AggregationUnit *au_active)
|
kyc_satisfied (struct AggregationUnit *au_active)
|
||||||
{
|
{
|
||||||
const char *requirement;
|
char *requirement;
|
||||||
enum GNUNET_DB_QueryStatus qs;
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
|
|
||||||
qs = TALER_KYCLOGIC_kyc_test_required (
|
qs = TALER_KYCLOGIC_kyc_test_required (
|
||||||
@ -535,6 +535,7 @@ kyc_satisfied (struct AggregationUnit *au_active)
|
|||||||
"Legitimization process %llu started\n",
|
"Legitimization process %llu started\n",
|
||||||
(unsigned long long) au_active->requirement_row);
|
(unsigned long long) au_active->requirement_row);
|
||||||
}
|
}
|
||||||
|
GNUNET_free (requirement);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ struct KycRequestContext
|
|||||||
/**
|
/**
|
||||||
* Name of the required check.
|
* Name of the required check.
|
||||||
*/
|
*/
|
||||||
const char *required;
|
char *required;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -237,6 +237,7 @@ TEH_handler_kyc_wallet (
|
|||||||
NULL,
|
NULL,
|
||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
|
GNUNET_free (kyc.required);
|
||||||
return TEH_RESPONSE_reply_kyc_required (rc->connection,
|
return TEH_RESPONSE_reply_kyc_required (rc->connection,
|
||||||
&krc.h_payto,
|
&krc.h_payto,
|
||||||
&krc.kyc);
|
&krc.kyc);
|
||||||
|
@ -280,7 +280,7 @@ merge_transaction (void *cls,
|
|||||||
bool in_conflict = true;
|
bool in_conflict = true;
|
||||||
bool no_balance = true;
|
bool no_balance = true;
|
||||||
bool no_partner = true;
|
bool no_partner = true;
|
||||||
const char *required;
|
char *required;
|
||||||
|
|
||||||
qs = TALER_KYCLOGIC_kyc_test_required (
|
qs = TALER_KYCLOGIC_kyc_test_required (
|
||||||
TALER_KYCLOGIC_KYC_TRIGGER_P2P_RECEIVE,
|
TALER_KYCLOGIC_KYC_TRIGGER_P2P_RECEIVE,
|
||||||
@ -305,11 +305,22 @@ merge_transaction (void *cls,
|
|||||||
if (NULL != required)
|
if (NULL != required)
|
||||||
{
|
{
|
||||||
pcc->kyc.ok = false;
|
pcc->kyc.ok = false;
|
||||||
return TEH_plugin->insert_kyc_requirement_for_account (
|
qs = TEH_plugin->insert_kyc_requirement_for_account (
|
||||||
TEH_plugin->cls,
|
TEH_plugin->cls,
|
||||||
required,
|
required,
|
||||||
&pcc->h_payto,
|
&pcc->h_payto,
|
||||||
&pcc->kyc.requirement_row);
|
&pcc->kyc.requirement_row);
|
||||||
|
GNUNET_free (required);
|
||||||
|
if (GNUNET_DB_STATUS_HARD_ERROR == qs)
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
*mhd_ret
|
||||||
|
= TALER_MHD_reply_with_error (connection,
|
||||||
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
|
TALER_EC_GENERIC_DB_STORE_FAILED,
|
||||||
|
"insert_kyc_requirement_for_account");
|
||||||
|
}
|
||||||
|
return qs;
|
||||||
}
|
}
|
||||||
pcc->kyc.ok = true;
|
pcc->kyc.ok = true;
|
||||||
qs = TEH_plugin->do_purse_merge (
|
qs = TEH_plugin->do_purse_merge (
|
||||||
|
@ -228,7 +228,7 @@ reserve_close_transaction (void *cls,
|
|||||||
/* KYC check may be needed: we're not returning
|
/* KYC check may be needed: we're not returning
|
||||||
the money to the account that funded the reserve
|
the money to the account that funded the reserve
|
||||||
in the first place. */
|
in the first place. */
|
||||||
const char *kyc_needed;
|
char *kyc_needed;
|
||||||
|
|
||||||
TALER_payto_hash (rcc->payto_uri,
|
TALER_payto_hash (rcc->payto_uri,
|
||||||
&rcc->kyc_payto);
|
&rcc->kyc_payto);
|
||||||
@ -268,11 +268,22 @@ reserve_close_transaction (void *cls,
|
|||||||
if (NULL != kyc_needed)
|
if (NULL != kyc_needed)
|
||||||
{
|
{
|
||||||
rcc->kyc.ok = false;
|
rcc->kyc.ok = false;
|
||||||
return TEH_plugin->insert_kyc_requirement_for_account (
|
qs = TEH_plugin->insert_kyc_requirement_for_account (
|
||||||
TEH_plugin->cls,
|
TEH_plugin->cls,
|
||||||
kyc_needed,
|
kyc_needed,
|
||||||
&rcc->kyc_payto,
|
&rcc->kyc_payto,
|
||||||
&rcc->kyc.requirement_row);
|
&rcc->kyc.requirement_row);
|
||||||
|
GNUNET_free (kyc_needed);
|
||||||
|
if (GNUNET_DB_STATUS_HARD_ERROR == qs)
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
*mhd_ret
|
||||||
|
= TALER_MHD_reply_with_error (connection,
|
||||||
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
|
TALER_EC_GENERIC_DB_STORE_FAILED,
|
||||||
|
"insert_kyc_requirement_for_account");
|
||||||
|
}
|
||||||
|
return qs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,8 +189,7 @@ purse_transaction (void *cls,
|
|||||||
{
|
{
|
||||||
struct ReservePurseContext *rpc = cls;
|
struct ReservePurseContext *rpc = cls;
|
||||||
enum GNUNET_DB_QueryStatus qs;
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
|
char *required;
|
||||||
const char *required;
|
|
||||||
|
|
||||||
qs = TALER_KYCLOGIC_kyc_test_required (
|
qs = TALER_KYCLOGIC_kyc_test_required (
|
||||||
TALER_KYCLOGIC_KYC_TRIGGER_P2P_RECEIVE,
|
TALER_KYCLOGIC_KYC_TRIGGER_P2P_RECEIVE,
|
||||||
@ -215,11 +214,22 @@ purse_transaction (void *cls,
|
|||||||
if (NULL != required)
|
if (NULL != required)
|
||||||
{
|
{
|
||||||
rpc->kyc.ok = false;
|
rpc->kyc.ok = false;
|
||||||
return TEH_plugin->insert_kyc_requirement_for_account (
|
qs = TEH_plugin->insert_kyc_requirement_for_account (
|
||||||
TEH_plugin->cls,
|
TEH_plugin->cls,
|
||||||
required,
|
required,
|
||||||
&rpc->h_payto,
|
&rpc->h_payto,
|
||||||
&rpc->kyc.requirement_row);
|
&rpc->kyc.requirement_row);
|
||||||
|
GNUNET_free (required);
|
||||||
|
if (GNUNET_DB_STATUS_HARD_ERROR == qs)
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
*mhd_ret
|
||||||
|
= TALER_MHD_reply_with_error (connection,
|
||||||
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
|
TALER_EC_GENERIC_DB_STORE_FAILED,
|
||||||
|
"insert_kyc_requirement_for_account");
|
||||||
|
}
|
||||||
|
return qs;
|
||||||
}
|
}
|
||||||
rpc->kyc.ok = true;
|
rpc->kyc.ok = true;
|
||||||
|
|
||||||
|
@ -288,7 +288,7 @@ withdraw_transaction (void *cls,
|
|||||||
is required as the merge already did that. */
|
is required as the merge already did that. */
|
||||||
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs)
|
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs)
|
||||||
{
|
{
|
||||||
const char *kyc_required;
|
char *kyc_required;
|
||||||
|
|
||||||
qs = TALER_KYCLOGIC_kyc_test_required (
|
qs = TALER_KYCLOGIC_kyc_test_required (
|
||||||
TALER_KYCLOGIC_KYC_TRIGGER_WITHDRAW,
|
TALER_KYCLOGIC_KYC_TRIGGER_WITHDRAW,
|
||||||
@ -314,11 +314,21 @@ withdraw_transaction (void *cls,
|
|||||||
{
|
{
|
||||||
/* insert KYC requirement into DB! */
|
/* insert KYC requirement into DB! */
|
||||||
wc->kyc.ok = false;
|
wc->kyc.ok = false;
|
||||||
return TEH_plugin->insert_kyc_requirement_for_account (
|
qs = TEH_plugin->insert_kyc_requirement_for_account (
|
||||||
TEH_plugin->cls,
|
TEH_plugin->cls,
|
||||||
kyc_required,
|
kyc_required,
|
||||||
&wc->h_account_payto,
|
&wc->h_account_payto,
|
||||||
&wc->kyc.requirement_row);
|
&wc->kyc.requirement_row);
|
||||||
|
GNUNET_free (kyc_required);
|
||||||
|
if (GNUNET_DB_STATUS_HARD_ERROR == qs)
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
|
TALER_EC_GENERIC_DB_STORE_FAILED,
|
||||||
|
"insert_kyc_requirement_for_account");
|
||||||
|
}
|
||||||
|
return qs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
wc->kyc.ok = true;
|
wc->kyc.ok = true;
|
||||||
|
@ -225,7 +225,7 @@ TALER_KYCLOGIC_kyc_test_required (enum TALER_KYCLOGIC_KycTriggerEvent event,
|
|||||||
void *ki_cls,
|
void *ki_cls,
|
||||||
TALER_KYCLOGIC_KycAmountIterator ai,
|
TALER_KYCLOGIC_KycAmountIterator ai,
|
||||||
void *ai_cls,
|
void *ai_cls,
|
||||||
const char **required);
|
char **required);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1064,7 +1064,7 @@ TALER_KYCLOGIC_kyc_test_required (enum TALER_KYCLOGIC_KycTriggerEvent event,
|
|||||||
void *ki_cls,
|
void *ki_cls,
|
||||||
TALER_KYCLOGIC_KycAmountIterator ai,
|
TALER_KYCLOGIC_KycAmountIterator ai,
|
||||||
void *ai_cls,
|
void *ai_cls,
|
||||||
const char **required)
|
char **required)
|
||||||
{
|
{
|
||||||
struct TALER_KYCLOGIC_KycCheck *needed[num_kyc_checks];
|
struct TALER_KYCLOGIC_KycCheck *needed[num_kyc_checks];
|
||||||
unsigned int needed_cnt = 0;
|
unsigned int needed_cnt = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user