fix taler-exchange-wire way of loading configuration

This commit is contained in:
Christian Grothoff 2016-04-16 12:44:45 +02:00
parent ecc5b6791f
commit fe36ba0062

View File

@ -47,42 +47,24 @@ static char *method;
static char *output_filename; static char *output_filename;
/** /**
* Our configuration. * Return value from main().
*/ */
static struct GNUNET_CONFIGURATION_Handle *cfg; static int global_ret;
/** /**
* The main function of the taler-exchange-sepa tool. This tool is used * Main function that will be run.
* to sign the SEPA bank account details using the master key.
* *
* @param argc number of arguments from the command line * @param cls closure
* @param argv command line arguments * @param args remaining command-line arguments
* @return 0 ok, 1 on error * @param cfgfile name of the configuration file used (for saving, can be NULL!)
* @param c configuration
*/ */
int static void
main (int argc, run (void *cls,
char *const *argv) char *const *args,
const char *cfgfile,
const struct GNUNET_CONFIGURATION_Handle *cfg)
{ {
char *cfgfile = NULL;
const struct GNUNET_GETOPT_CommandLineOption options[] = {
GNUNET_GETOPT_OPTION_CFG_FILE (&cfgfile),
{'j', "json", "JSON",
"account information in JSON format", 1,
&GNUNET_GETOPT_set_string, &json_in},
{'m', "master-key", "FILE",
"master key file (private key)", 1,
&GNUNET_GETOPT_set_filename, &masterkeyfile},
{'t', "type", "METHOD",
"which wire transfer method (i.e. 'test' or 'sepa') is this for?", 1,
&GNUNET_GETOPT_set_string, &method},
{'o', "output", "FILE",
"where to write the result", 1,
&GNUNET_GETOPT_set_filename, &output_filename},
GNUNET_GETOPT_OPTION_HELP ("Setup /wire response"),
GNUNET_GETOPT_OPTION_VERSION (VERSION "-" VCS_VERSION),
GNUNET_GETOPT_OPTION_END
};
struct GNUNET_CRYPTO_EddsaPrivateKey *eddsa_priv; struct GNUNET_CRYPTO_EddsaPrivateKey *eddsa_priv;
struct TALER_MasterPrivateKeyP key; struct TALER_MasterPrivateKeyP key;
struct TALER_MasterSignatureP sig; struct TALER_MasterSignatureP sig;
@ -92,26 +74,6 @@ main (int argc,
struct GNUNET_HashCode salt; struct GNUNET_HashCode salt;
struct TALER_WIRE_Plugin *plugin; struct TALER_WIRE_Plugin *plugin;
GNUNET_assert (GNUNET_OK ==
GNUNET_log_setup ("taler-exchange-wire",
"WARNING",
NULL));
if (GNUNET_GETOPT_run ("taler-exchange-wire",
options,
argc, argv) < 0)
return 1;
cfg = GNUNET_CONFIGURATION_create ();
if (GNUNET_SYSERR == GNUNET_CONFIGURATION_load (cfg,
cfgfile))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
_("Malformed configuration file `%s', exit ...\n"),
cfgfile);
GNUNET_free_non_null (cfgfile);
return 1;
}
GNUNET_free_non_null (cfgfile);
if ( (NULL == masterkeyfile) && if ( (NULL == masterkeyfile) &&
(GNUNET_OK != (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_filename (cfg, GNUNET_CONFIGURATION_get_value_filename (cfg,
@ -121,7 +83,8 @@ main (int argc,
{ {
fprintf (stderr, fprintf (stderr,
"Master key file not given in neither configuration nor command-line\n"); "Master key file not given in neither configuration nor command-line\n");
return 1; global_ret = 1;
return;
} }
eddsa_priv = GNUNET_CRYPTO_eddsa_key_create_from_file (masterkeyfile); eddsa_priv = GNUNET_CRYPTO_eddsa_key_create_from_file (masterkeyfile);
if (NULL == eddsa_priv) if (NULL == eddsa_priv)
@ -129,19 +92,22 @@ main (int argc,
fprintf (stderr, fprintf (stderr,
"Failed to initialize master key from file `%s'\n", "Failed to initialize master key from file `%s'\n",
masterkeyfile); masterkeyfile);
return 1; global_ret = 1;
return;
} }
if (NULL == json_in) if (NULL == json_in)
{ {
fprintf (stderr, fprintf (stderr,
"Required -j argument missing\n"); "Required -j argument missing\n");
return 1; global_ret = 1;
return;
} }
if (NULL == method) if (NULL == method)
{ {
fprintf (stderr, fprintf (stderr,
"Required -t argument missing\n"); "Required -t argument missing\n");
return 1; global_ret = 1;
return;
} }
j = json_loads (json_in, j = json_loads (json_in,
JSON_REJECT_DUPLICATES, JSON_REJECT_DUPLICATES,
@ -152,7 +118,8 @@ main (int argc,
"Failed to parse JSON: %s (at offset %u)\n", "Failed to parse JSON: %s (at offset %u)\n",
err.text, err.text,
(unsigned int) err.position); (unsigned int) err.position);
return 1; global_ret = 1;
return;
} }
json_object_set_new (j, json_object_set_new (j,
"type", "type",
@ -168,7 +135,8 @@ main (int argc,
GNUNET_log (GNUNET_ERROR_TYPE_INFO, GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Wire transfer method `%s' not supported\n", "Wire transfer method `%s' not supported\n",
method); method);
return 1; global_ret = 1;
return;
} }
if (GNUNET_OK != if (GNUNET_OK !=
plugin->sign_wire_details (plugin->cls, plugin->sign_wire_details (plugin->cls,
@ -180,7 +148,8 @@ main (int argc,
/* sign function should have logged applicable errors */ /* sign function should have logged applicable errors */
json_decref (j); json_decref (j);
TALER_WIRE_plugin_unload (plugin); TALER_WIRE_plugin_unload (plugin);
return 1; global_ret = 1;
return;
} }
TALER_WIRE_plugin_unload (plugin); TALER_WIRE_plugin_unload (plugin);
GNUNET_free (eddsa_priv); GNUNET_free (eddsa_priv);
@ -211,7 +180,50 @@ main (int argc,
json_out); json_out);
fflush (stdout); fflush (stdout);
free (json_out); free (json_out);
return 0;
} }
/**
* The main function of the taler-exchange-wire tool. This tool is
* used to sign the bank account details using the master key.
*
* @param argc number of arguments from the command line
* @param argv command line arguments
* @return 0 ok, 1 on error
*/
int
main (int argc,
char *const *argv)
{
const struct GNUNET_GETOPT_CommandLineOption options[] = {
{'j', "json", "JSON",
"account information in JSON format", 1,
&GNUNET_GETOPT_set_string, &json_in},
{'m', "master-key", "FILE",
"master key file (private key)", 1,
&GNUNET_GETOPT_set_filename, &masterkeyfile},
{'t', "type", "METHOD",
"which wire transfer method (i.e. 'test' or 'sepa') is this for?", 1,
&GNUNET_GETOPT_set_string, &method},
{'o', "output", "FILE",
"where to write the result", 1,
&GNUNET_GETOPT_set_filename, &output_filename},
GNUNET_GETOPT_OPTION_END
};
GNUNET_assert (GNUNET_OK ==
GNUNET_log_setup ("taler-exchange-wire",
"WARNING",
NULL));
if (GNUNET_OK !=
GNUNET_PROGRAM_run (argc, argv,
"taler-exchange-wire",
"Setup /wire response",
options,
&run, NULL))
return 1;
return global_ret;
}
/* end of taler-exchange-wire.c */ /* end of taler-exchange-wire.c */