add uncrustify pre-commit hook

This commit is contained in:
Christian Grothoff 2019-10-05 15:12:11 +02:00
parent 041ba85c6a
commit 52bbfe926b
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
14 changed files with 280 additions and 4411 deletions

View File

@ -1,3 +1,22 @@
#!/bin/sh
git submodule update --init
# This is more portable than `which' but comes with
# the caveat of not(?) properly working on busybox's ash:
existence()
{
command -v "$1" >/dev/null 2>&1
}
if existence uncrustify; then
echo "Installing uncrustify hook and configuration"
# Install uncrustify format symlink (if possible)
ln -s contrib/uncrustify.cfg uncrustify.cfg 2> /dev/null
# Install pre-commit hook (if possible)
ln -s ../../contrib/uncrustify_precommit .git/hooks/pre-commit 2> /dev/null
else
echo "Uncrustify not detected, hook not installed. Please install uncrustify if you plan on doing development"
fi
autoreconf -fi

View File

@ -93,7 +93,7 @@ This section analyzes the income of the exchange operator from fees.
Deposit fees & {{ data.total_deposit_fee_income }} \\
Melt fees & {{ data.total_melt_fee_income }} \\
Refund fees & {{ data.total_refund_fee_income }} \\
Aggregation fees & {{ data.total_aggregation_fee_income }} \\
Aggregation fees & {{ data.total_aggregation_fee_income }} \\ \hline \hline
{\bf Total} & {{ data.income_fee_total }} \\
\end{tabular}
\end{center}
@ -845,7 +845,7 @@ impact.
{% if data.row_inconsistencies|length() == 0 %}
{\bf No row inconsistencies found.}
{% else %}
\begin{longtable}{p{2.5cm}|l|p{7cm}}
\begin{longtable}{p{2.5cm}|l|p{5cm}}
{\bf Table} & {\bf Row} & {\bf Diagnostic} \\
\hline \hline
\endfirsthead
@ -881,11 +881,12 @@ This section describes cases where the exchange did not
close a reserve and wire back the remaining funds when the
reserve expired.
% Table generation tested by testcase #21 in test-auditor.sh
{% if data.reserve_not_closed_inconsistencies|length() == 0 %}
{\bf All expired reserves were closed.}
{% else %}
\begin{longtable}{p{5.5cm}|c|r}
\begin{longtable}{p{4.5cm}|c|r}
{\bf Reserve} & {\bf Expired} & {\bf Balance} \\ \hline \hline
\endfirsthead
{\bf Reserve} & {\bf Expired} & {\bf Balance} \\ \hline \hline
@ -900,7 +901,7 @@ reserve expired.
\label{table:reserve:not_closed}
\endlastfoot
{% for item in data.reserve_not_closed_inconsistencies %}
{\tt \tiny {{ item.reserve_pub }} } &
{\tt \tiny \truncate{4.3cm}{ {{ item.reserve_pub }} } } &
{\tiny {{ item.expiration_time }} } &
{{ item.balance }} \\ \hline
{% endfor %}

35
contrib/uncrustify_precommit Executable file
View File

@ -0,0 +1,35 @@
#!/bin/sh
# use as .git/hooks/pre-commit
exec 1>&2
RET=0
changed=$(git diff --cached --name-only)
crustified=""
for f in $changed;
do
if echo $f | grep \\.[c,h]\$ > /dev/null
then
# compare result of uncrustify with changes
#
# only change any of the invocations here if
# they are portable across all cmp and shell
# implementations !
uncrustify -q -c uncrustify.cfg -f $f | cmp -s $f -
if test $? = 1 ;
then
crustified=" $crustified $f"
RET=1
fi
fi
done
if [ $RET = 1 ];
then
echo "Run"
echo "uncrustify --no-backup -c uncrustify.cfg ${crustified}"
echo "before commiting."
fi
exit $RET

Binary file not shown.

View File

@ -1 +1 @@
EN5XXBC10E51TRN0D7ZN17FBCV2E1ECVH436BV8M5F3NANVFFMS0
1D4MCTJSRW4DTFAXBVMFRYDJ9TJ0D6KH52VXWJCPC3RYRBA2MSM0

File diff suppressed because it is too large Load Diff

View File

@ -44,9 +44,9 @@ PORT = 8083
[PATHS]
TALER_HOME = ${PWD}/generate_auditordb_home/
TALER_DATA_HOME = ${XDG_DATA_HOME:-$TALER_HOME/.local/share}/taler/
TALER_CONFIG_HOME = ${XDG_CONFIG_HOME:-$TALER_HOME/.config}/taler/
TALER_CACHE_HOME = ${XDG_CACHE_HOME:-$TALER_HOME/.cache}/taler/
TALER_DATA_HOME = $TALER_HOME/.local/share/taler/
TALER_CONFIG_HOME = $TALER_HOME/.config/taler/
TALER_CACHE_HOME = $TALER_HOME/.cache/taler/
TALER_RUNTIME_DIR = ${TMPDIR:-${TMP:-/tmp}}/taler-system-runtime/
[bank]
@ -218,5 +218,3 @@ rsa_keysize = 1024
[benchmark]
BANK_DETAILS = bank_details.json
MERCHANT_DETAILS = merchant_details.json

View File

@ -75,14 +75,14 @@ taler-config -c $CONF -s bank -o database -V postgres:///$TARGET_DB
# setup exchange
echo "Setting up exchange"
taler-exchange-dbinit -c $CONF
taler-exchange-dbinit -r -c $CONF
taler-exchange-wire -c $CONF 2> taler-exchange-wire.log
taler-exchange-keyup -c $CONF -o e2a.dat 2> taler-exchange-keyup.log
taler-exchange-keyup -L INFO -c $CONF -o e2a.dat 2> taler-exchange-keyup.log
# setup auditor
echo "Setting up auditor"
taler-auditor-dbinit -c $CONF
taler-auditor-exchange -c $CONF -m $MASTER_PUB -u $EXCHANGE_URL
taler-auditor-dbinit -r -c $CONF
taler-auditor-exchange -c $CONF -m $MASTER_PUB -u $EXCHANGE_URL
taler-auditor-sign -c $CONF -u $AUDITOR_URL -r e2a.dat -o a2e.dat -m $MASTER_PUB
# Launch services

View File

@ -838,6 +838,11 @@ struct ReserveSummary
*/
struct GNUNET_TIME_Absolute a_expiration_date;
/**
* Which account did originally put money into the reserve?
*/
char *sender_account;
/**
* Did we have a previous reserve info? Used to decide between
* UPDATE and INSERT later. Initialized in
@ -870,7 +875,8 @@ load_auditor_reserve_summary (struct ReserveSummary *rs)
&rowid,
&rs->a_balance,
&rs->a_withdraw_fee_balance,
&rs->a_expiration_date);
&rs->a_expiration_date,
&rs->sender_account);
if (0 > qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@ -977,6 +983,7 @@ handle_reserve_in (void *cls,
if (NULL == rs)
{
rs = GNUNET_new (struct ReserveSummary);
rs->sender_account = GNUNET_strdup (sender_account_details);
rs->reserve_pub = *reserve_pub;
rs->total_in = *credit;
GNUNET_assert (GNUNET_OK ==
@ -1362,6 +1369,52 @@ handle_payback_by_reserve (void *cls,
}
/**
* Obtain the closing fee for a transfer at @a time for target
* @a receiver_account.
*
* @param receiver_account payto:// URI of the target account
* @param atime when was the transfer made
* @param fee[out] set to the closing fee
* @return #GNUNET_OK on success
*/
static int
get_closing_fee (const char *receiver_account,
struct GNUNET_TIME_Absolute atime,
struct TALER_Amount *fee)
{
struct TALER_MasterSignatureP master_sig;
struct GNUNET_TIME_Absolute start_date;
struct GNUNET_TIME_Absolute end_date;
struct TALER_Amount wire_fee;
char *method;
method = TALER_WIRE_payto_get_method (receiver_account);
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Method is `%s'\n",
method);
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
edb->get_wire_fee (edb->cls,
esession,
method,
atime,
&start_date,
&end_date,
&wire_fee,
fee,
&master_sig))
{
report_row_inconsistency ("closing-fee",
atime.abs_value_us,
"closing fee unavailable at given time");
GNUNET_free (method);
return GNUNET_SYSERR;
}
GNUNET_free (method);
return GNUNET_OK;
}
/**
* Function called about reserve closing operations
* the aggregator triggered.
@ -1426,6 +1479,8 @@ handle_reserve_closed (void *cls,
}
else
{
struct TALER_Amount expected_fee;
GNUNET_assert (GNUNET_OK ==
TALER_amount_add (&rs->total_out,
&rs->total_out,
@ -1434,6 +1489,30 @@ handle_reserve_closed (void *cls,
TALER_amount_add (&rs->total_fee,
&rs->total_fee,
closing_fee));
/* verify closing_fee is correct! */
if (GNUNET_OK !=
get_closing_fee (receiver_account,
execution_date,
&expected_fee))
{
GNUNET_break (0);
}
else if (0 != TALER_amount_cmp (&expected_fee,
closing_fee))
{
report_amount_arithmetic_inconsistency ("closing aggregation fee",
rowid,
closing_fee,
&expected_fee,
1);
}
}
if (0 != strcmp (rs->sender_account,
receiver_account))
{
report_row_inconsistency ("reserves_close",
rowid,
"target account does not match origin account");
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Additional closing operation for reserve `%s' of %s\n",
@ -1464,6 +1543,7 @@ verify_reserve_balance (void *cls,
struct TALER_EXCHANGEDB_Reserve reserve;
struct TALER_Amount balance;
struct TALER_Amount nbalance;
struct TALER_Amount cfee;
enum GNUNET_DB_QueryStatus qs;
int ret;
@ -1566,25 +1646,46 @@ verify_reserve_balance (void *cls,
}
/* Check that reserve is being closed if it is past its expiration date */
/* FIXME: need to consider closing_fee here! */
if ( (CLOSING_GRACE_PERIOD.rel_value_us >
GNUNET_TIME_absolute_get_duration (
rs->a_expiration_date).rel_value_us) &&
( (0 != nbalance.value) ||
(0 != nbalance.fraction) ) )
if (CLOSING_GRACE_PERIOD.rel_value_us <
GNUNET_TIME_absolute_get_duration (rs->a_expiration_date).rel_value_us)
{
GNUNET_assert (GNUNET_OK ==
TALER_amount_add (&total_balance_reserve_not_closed,
&total_balance_reserve_not_closed,
&nbalance));
report (report_reserve_not_closed_inconsistencies,
json_pack ("{s:o, s:o, s:o}",
"reserve_pub",
GNUNET_JSON_from_data_auto (&rs->reserve_pub),
"balance",
TALER_JSON_from_amount (&nbalance),
"expiration_time",
json_from_time_abs (rs->a_expiration_date)));
if ( (NULL != rs->sender_account) &&
(GNUNET_OK ==
get_closing_fee (rs->sender_account,
rs->a_expiration_date,
&cfee)) )
{
if (1 == TALER_amount_cmp (&nbalance,
&cfee))
{
GNUNET_assert (GNUNET_OK ==
TALER_amount_add (&total_balance_reserve_not_closed,
&total_balance_reserve_not_closed,
&nbalance));
report (report_reserve_not_closed_inconsistencies,
json_pack ("{s:o, s:o, s:o}",
"reserve_pub",
GNUNET_JSON_from_data_auto (&rs->reserve_pub),
"balance",
TALER_JSON_from_amount (&nbalance),
"expiration_time",
json_from_time_abs (rs->a_expiration_date)));
}
}
else
{
report (report_reserve_not_closed_inconsistencies,
json_pack ("{s:o, s:o, s:o, s:s}",
"reserve_pub",
GNUNET_JSON_from_data_auto (&rs->reserve_pub),
"balance",
TALER_JSON_from_amount (&nbalance),
"expiration_time",
json_from_time_abs (rs->a_expiration_date),
"diagnostic",
"could not determine closing fee"));
}
}
/* Add withdraw fees we encountered to totals */
@ -1672,7 +1773,8 @@ verify_reserve_balance (void *cls,
&master_pub,
&nbalance,
&rs->a_withdraw_fee_balance,
rs->a_expiration_date);
rs->a_expiration_date,
rs->sender_account);
if (0 >= qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@ -1684,6 +1786,7 @@ cleanup:
GNUNET_CONTAINER_multihashmap_remove (rc->reserves,
key,
rs));
GNUNET_free_non_null (rs->sender_account);
GNUNET_free (rs);
return ret;
}

View File

@ -695,9 +695,6 @@ wire_missing_cb (void *cls,
/**
* Checks that all wire transfers that should have happened
* (based on deposits) have indeed happened.
*
* FIXME: this check _might_ rather belong with the
* taler-auditor logic.
*/
static void
check_for_required_transfers ()
@ -712,7 +709,8 @@ check_for_required_transfers ()
next_timestamp = GNUNET_TIME_absolute_subtract (next_timestamp,
GRACE_PERIOD);
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Analyzing exchange's unfinished deposits\n");
"Analyzing exchange's unfinished deposits (deadline: %s)\n",
GNUNET_STRINGS_absolute_time_to_string (next_timestamp));
qs = edb->select_deposits_missing_wire (edb->cls,
esession,
pp.last_timestamp,

View File

@ -68,15 +68,15 @@ function pre_audit () {
function audit_only () {
# Run the auditor!
echo -n "Running audit(s) ..."
taler-auditor -r -c $CONF -m $MASTER_PUB > test-audit.json 2> test-audit.log || exit_fail "auditor failed"
taler-auditor -L INFO -r -c $CONF -m $MASTER_PUB > test-audit.json 2> test-audit.log || exit_fail "auditor failed"
echo -n "."
# Also do incremental run
taler-auditor -c $CONF -m $MASTER_PUB > test-audit-inc.json 2> test-audit-inc.log || exit_fail "auditor failed"
taler-auditor -L INFO -c $CONF -m $MASTER_PUB > test-audit-inc.json 2> test-audit-inc.log || exit_fail "auditor failed"
echo -n "."
taler-wire-auditor -r -c $CONF -m $MASTER_PUB > test-wire-audit.json 2> test-wire-audit.log || exit_fail "wire auditor failed"
taler-wire-auditor -L INFO -r -c $CONF -m $MASTER_PUB > test-wire-audit.json 2> test-wire-audit.log || exit_fail "wire auditor failed"
# Also do incremental run
echo -n "."
taler-wire-auditor -c $CONF -m $MASTER_PUB > test-wire-audit-inc.json 2> test-wire-audit-inc.log || exit_fail "wire auditor failed"
taler-wire-auditor -L INFO -c $CONF -m $MASTER_PUB > test-wire-audit-inc.json 2> test-wire-audit-inc.log || exit_fail "wire auditor failed"
echo " DONE"
}
@ -382,6 +382,10 @@ echo "UPDATE deposits SET wire='{\"url\":\"payto://x-taler-bank/localhost:8082/4
run_audit
echo -n "Testing inconsistency detection... "
jq -e .bad_sig_losses[0] < test-audit.json > /dev/null || exit_fail "Bad signature not detected"
ROW=`jq -e .bad_sig_losses[0].row < test-audit.json`
if test $ROW != 1
then
@ -406,6 +410,7 @@ then
exit_fail "Wrong total bad sig loss, got $LOSS"
fi
echo PASS
# Undo:
echo "UPDATE deposits SET wire='$OLD_WIRE' WHERE deposit_serial_id=1" | psql -Aqt $DB
@ -1076,16 +1081,62 @@ echo "UPDATE app_banktransaction SET subject='${OLD_SUBJECT}' WHERE debit_accoun
}
# Test where reserve closure was done properly
function test_20() {
echo "===========20: reserve closure done properly ================="
OLD_TIME=`echo "SELECT execution_date FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
OLD_VAL=`echo "SELECT credit_val FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
RES_PUB=`echo "SELECT reserve_pub FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
NEW_TIME=`expr $OLD_TIME - 3024000000000` # 5 weeks
NEW_CREDIT=`expr $OLD_VAL + 100`
echo "UPDATE reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
echo "UPDATE reserves SET current_balance_val=100+current_balance_val WHERE reserve_pub='${RES_PUB}';" | psql -Aqt $DB
# Need to run with the aggregator so the reserve closure happens
run_audit aggregator
echo -n "Testing reserve closure was done correctly... "
jq -e .reserve_not_closed_inconsistencies[0] < test-audit.json > /dev/null && exit_fail "Unexpected reserve not closed inconsistency detected"
echo "PASS"
# Undo
echo "UPDATE reserves_in SET execution_date='${OLD_TIME}',credit_val=${OLD_VAL} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
}
# Test where reserve closure was not done properly
function test_21() {
echo "===========21: reserve closure missing ================="
OLD_TIME=`echo "SELECT execution_date FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
OLD_VAL=`echo "SELECT credit_val FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
RES_PUB=`echo "SELECT reserve_pub FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
NEW_TIME=`expr $OLD_TIME - 3024000000000` # 5 weeks
NEW_CREDIT=`expr $OLD_VAL + 100`
echo "UPDATE reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
echo "UPDATE reserves SET current_balance_val=100+current_balance_val WHERE reserve_pub='${RES_PUB}';" | psql -Aqt $DB
# This time, run without the aggregator so the reserve closure is skipped!
run_audit
echo -n "Testing reserve closure missing detected... "
jq -e .reserve_not_closed_inconsistencies[0] < test-audit.json > /dev/null || exit_fail "Reserve not closed inconsistency not detected"
echo "PASS"
# Undo
echo "UPDATE reserves_in SET execution_date='${OLD_TIME}',credit_val=${OLD_VAL} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
}
# **************************************************
# FIXME: Add more tests here! :-)
# Specifically:
# - emergencies (detection)
# - reserve closure (or lack thereof)
# - revocation (payback, accepting
# of coins despite denomination revocation)
# - refunds
# - reserve closure (or lack thereof)
# - arithmetic problems
# **************************************************

View File

@ -329,6 +329,7 @@ postgres_create_tables (void *cls)
",withdraw_fee_balance_frac INT4 NOT NULL"
",expiration_date INT8 NOT NULL"
",auditor_reserves_rowid BIGSERIAL UNIQUE"
",origin_account TEXT"
")"),
GNUNET_PQ_make_try_execute ("CREATE INDEX auditor_reserves_by_reserve_pub "
"ON auditor_reserves(reserve_pub)"),
@ -777,8 +778,9 @@ postgres_prepare (PGconn *db_conn)
",withdraw_fee_balance_val"
",withdraw_fee_balance_frac"
",expiration_date"
") VALUES ($1,$2,$3,$4,$5,$6,$7);",
7),
",origin_account"
") VALUES ($1,$2,$3,$4,$5,$6,$7,$8);",
8),
/* Used in #postgres_update_reserve_info() */
GNUNET_PQ_make_prepare ("auditor_reserves_update",
"UPDATE auditor_reserves SET"
@ -798,6 +800,7 @@ postgres_prepare (PGconn *db_conn)
",withdraw_fee_balance_frac"
",expiration_date"
",auditor_reserves_rowid"
",origin_account"
" FROM auditor_reserves"
" WHERE reserve_pub=$1 AND master_pub=$2;",
2),
@ -2475,6 +2478,7 @@ postgres_get_wire_auditor_progress (void *cls,
* @param withdraw_fee_balance amount the exchange gained in withdraw fees
* due to withdrawals from this reserve
* @param expiration_date expiration date of the reserve
* @param origin_account where did the money in the reserve originally come from
* @return transaction status code
*/
static enum GNUNET_DB_QueryStatus
@ -2484,7 +2488,8 @@ postgres_insert_reserve_info (void *cls,
const struct TALER_MasterPublicKeyP *master_pub,
const struct TALER_Amount *reserve_balance,
const struct TALER_Amount *withdraw_fee_balance,
struct GNUNET_TIME_Absolute expiration_date)
struct GNUNET_TIME_Absolute expiration_date,
const char *origin_account)
{
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (reserve_pub),
@ -2492,6 +2497,7 @@ postgres_insert_reserve_info (void *cls,
TALER_PQ_query_param_amount (reserve_balance),
TALER_PQ_query_param_amount (withdraw_fee_balance),
TALER_PQ_query_param_absolute_time (&expiration_date),
GNUNET_PQ_query_param_string (origin_account),
GNUNET_PQ_query_param_end
};
@ -2586,6 +2592,7 @@ postgres_del_reserve_info (void *cls,
* @param[out] withdraw_fee_balance amount the exchange gained in withdraw fees
* due to withdrawals from this reserve
* @param[out] expiration_date expiration date of the reserve
* @param[out] sender_account from where did the money in the reserve originally come from
* @return transaction status code
*/
static enum GNUNET_DB_QueryStatus
@ -2596,7 +2603,8 @@ postgres_get_reserve_info (void *cls,
uint64_t *rowid,
struct TALER_Amount *reserve_balance,
struct TALER_Amount *withdraw_fee_balance,
struct GNUNET_TIME_Absolute *expiration_date)
struct GNUNET_TIME_Absolute *expiration_date,
char **sender_account)
{
struct PostgresClosure *pg = cls;
struct GNUNET_PQ_QueryParam params[] = {
@ -2609,6 +2617,7 @@ postgres_get_reserve_info (void *cls,
TALER_PQ_RESULT_SPEC_AMOUNT ("withdraw_fee_balance", withdraw_fee_balance),
TALER_PQ_result_spec_absolute_time ("expiration_date", expiration_date),
GNUNET_PQ_result_spec_uint64 ("auditor_reserves_rowid", rowid),
GNUNET_PQ_result_spec_string ("origin_account", sender_account),
GNUNET_PQ_result_spec_end
};

View File

@ -291,6 +291,7 @@ run (void *cls)
TALER_string_to_amount (CURRENCY ":23.456789",
&withdraw_fee_balance));
FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
plugin->insert_reserve_info (plugin->cls,
session,
@ -298,7 +299,8 @@ run (void *cls)
&master_pub,
&reserve_balance,
&withdraw_fee_balance,
past));
past,
"payto://bla/blub"));
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Test: update_reserve_info\n");
@ -315,6 +317,8 @@ run (void *cls)
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Test: get_reserve_info\n");
char *payto;
FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
plugin->get_reserve_info (plugin->cls,
session,
@ -323,8 +327,11 @@ run (void *cls)
&rowid,
&reserve_balance2,
&withdraw_fee_balance2,
&date));
&date,
&payto));
FAILIF (0 != strcmp (payto,
"payto://bla/blub"));
GNUNET_free (payto);
FAILIF (0 != GNUNET_memcmp (&date, &future)
|| 0 != GNUNET_memcmp (&reserve_balance2, &reserve_balance)
|| 0 != GNUNET_memcmp (&withdraw_fee_balance2,
@ -725,7 +732,7 @@ run (void *cls)
result = 0;
drop:
drop:
if (NULL != session)
{
plugin->rollback (plugin->cls,
@ -746,7 +753,7 @@ run (void *cls)
GNUNET_break (GNUNET_OK ==
plugin->drop_tables (plugin->cls,
GNUNET_YES));
unload:
unload:
TALER_AUDITORDB_plugin_unload (plugin);
plugin = NULL;
}

View File

@ -1007,6 +1007,7 @@ struct TALER_AUDITORDB_Plugin
* @param withdraw_fee_balance amount the exchange gained in withdraw fees
* due to withdrawals from this reserve
* @param expiration_date expiration date of the reserve
* @param origin_account where did the money in the reserve originally come from
* @return transaction status code
*/
enum GNUNET_DB_QueryStatus
@ -1016,7 +1017,8 @@ struct TALER_AUDITORDB_Plugin
const struct TALER_MasterPublicKeyP *master_pub,
const struct TALER_Amount *reserve_balance,
const struct TALER_Amount *withdraw_fee_balance,
struct GNUNET_TIME_Absolute expiration_date);
struct GNUNET_TIME_Absolute expiration_date,
const char *origin_account);
/**
@ -1055,6 +1057,7 @@ struct TALER_AUDITORDB_Plugin
* @param[out] withdraw_fee_balance amount the exchange gained in withdraw fees
* due to withdrawals from this reserve
* @param[out] expiration_date expiration date of the reserve
* @param[out] sender_account from where did the money in the reserve originally come from
* @return transaction status code
*/
enum GNUNET_DB_QueryStatus
@ -1065,7 +1068,8 @@ struct TALER_AUDITORDB_Plugin
uint64_t *rowid,
struct TALER_Amount *reserve_balance,
struct TALER_Amount *withdraw_fee_balance,
struct GNUNET_TIME_Absolute *expiration_date);
struct GNUNET_TIME_Absolute *expiration_date,
char **sender_account);
/**