From: Christian Grothoff Date: Tue, 11 Dec 2018 16:47:58 +0000 (+0100) Subject: make sure peer launches if default config not found and -c not given X-Git-Tag: v0.11.0~171 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=cefc7647dc8db23452da80cfb4384cca641bb99d;p=oweals%2Fgnunet.git make sure peer launches if default config not found and -c not given --- diff --git a/src/arm/arm_api.c b/src/arm/arm_api.c index 5e31e038e..571b837d2 100644 --- a/src/arm/arm_api.c +++ b/src/arm/arm_api.c @@ -680,7 +680,8 @@ start_arm_service (struct GNUNET_ARM_Handle *h, loprefix, quotedbinary, "-d", /* do daemonize */ - lopostfix, NULL); + lopostfix, + NULL); else proc = GNUNET_OS_start_process_s (GNUNET_NO, std_inheritance, diff --git a/src/arm/gnunet-arm.c b/src/arm/gnunet-arm.c index e8180e920..69e230f87 100644 --- a/src/arm/gnunet-arm.c +++ b/src/arm/gnunet-arm.c @@ -146,8 +146,8 @@ delete_files () { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Will attempt to remove configuration file %s and service directory %s\n", - config_file, dir); - + config_file, + dir); if (0 != UNLINK (config_file)) { GNUNET_log (GNUNET_ERROR_TYPE_WARNING, @@ -159,7 +159,6 @@ delete_files () GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _("Failed to remove servicehome directory %s\n"), dir); - } } @@ -697,13 +696,11 @@ timeout_task_cb (void *cls) static void run (void *cls, char *const *args, - const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c) { char *armconfig; cfg = GNUNET_CONFIGURATION_dup (c); - config_file = cfgfile; if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg, "PATHS", @@ -715,30 +712,18 @@ run (void *cls, "GNUNET_HOME"); return; } - if (NULL != cfgfile) - { - if (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_filename (cfg, - "arm", - "CONFIG", - &armconfig)) - { - GNUNET_CONFIGURATION_set_value_string (cfg, - "arm", - "CONFIG", - cfgfile); - } - else - GNUNET_free (armconfig); - } + (void) GNUNET_CONFIGURATION_get_value_filename (cfg, + "arm", + "CONFIG", + &config_file); if (NULL == (h = GNUNET_ARM_connect (cfg, &conn_status, NULL))) return; if (monitor) m = GNUNET_ARM_monitor_start (cfg, - &srv_status, - NULL); + &srv_status, + NULL); al_task = GNUNET_SCHEDULER_add_now (&action_loop, NULL); GNUNET_SCHEDULER_add_shutdown (&shutdown_task, @@ -758,84 +743,77 @@ run (void *cls, * @return 0 ok, 1 on error, 2 on timeout */ int -main (int argc, char *const *argv) +main (int argc, + char *const *argv) { struct GNUNET_GETOPT_CommandLineOption options[] = { - GNUNET_GETOPT_option_flag ('e', - "end", - gettext_noop ("stop all GNUnet services"), - &end), - + "end", + gettext_noop ("stop all GNUnet services"), + &end), GNUNET_GETOPT_option_string ('i', "init", "SERVICE", gettext_noop ("start a particular service"), &init), - GNUNET_GETOPT_option_string ('k', "kill", "SERVICE", gettext_noop ("stop a particular service"), &term), - GNUNET_GETOPT_option_flag ('s', - "start", - gettext_noop ("start all GNUnet default services"), - &start), - + "start", + gettext_noop ("start all GNUnet default services"), + &start), GNUNET_GETOPT_option_flag ('r', - "restart", - gettext_noop ("stop and start all GNUnet default services"), - &restart), + "restart", + gettext_noop ("stop and start all GNUnet default services"), + &restart), GNUNET_GETOPT_option_flag ('d', - "delete", - gettext_noop ("delete config file and directory on exit"), - &delete), - + "delete", + gettext_noop ("delete config file and directory on exit"), + &delete), GNUNET_GETOPT_option_flag ('m', - "monitor", - gettext_noop ("monitor ARM activities"), - &monitor), - + "monitor", + gettext_noop ("monitor ARM activities"), + &monitor), GNUNET_GETOPT_option_flag ('q', - "quiet", - gettext_noop ("don't print status messages"), - &quiet), - + "quiet", + gettext_noop ("don't print status messages"), + &quiet), GNUNET_GETOPT_option_relative_time ('T', - "timeout", - "DELAY", - gettext_noop ("exit with error status if operation does not finish after DELAY"), - &timeout), - + "timeout", + "DELAY", + gettext_noop ("exit with error status if operation does not finish after DELAY"), + &timeout), GNUNET_GETOPT_option_flag ('I', - "info", - gettext_noop ("list currently running services"), - &list), - + "info", + gettext_noop ("list currently running services"), + &list), GNUNET_GETOPT_option_flag ('O', - "no-stdout", - gettext_noop ("don't let gnunet-service-arm inherit standard output"), - &no_stdout), - + "no-stdout", + gettext_noop ("don't let gnunet-service-arm inherit standard output"), + &no_stdout), GNUNET_GETOPT_option_flag ('E', - "no-stderr", - gettext_noop ("don't let gnunet-service-arm inherit standard error"), - &no_stderr), - + "no-stderr", + gettext_noop ("don't let gnunet-service-arm inherit standard error"), + &no_stderr), GNUNET_GETOPT_OPTION_END }; - if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, - &argc, &argv)) + if (GNUNET_OK != + GNUNET_STRINGS_get_utf8_args (argc, argv, + &argc, &argv)) return 2; if (GNUNET_OK == - GNUNET_PROGRAM_run (argc, argv, "gnunet-arm", + GNUNET_PROGRAM_run (argc, + argv, + "gnunet-arm", gettext_noop ("Control services and the Automated Restart Manager (ARM)"), - options, &run, NULL)) + options, + &run, NULL)) { GNUNET_free ((void *) argv); return ret; diff --git a/src/util/gnunet-config.c b/src/util/gnunet-config.c index 46c523da4..3c7eaa6dc 100644 --- a/src/util/gnunet-config.c +++ b/src/util/gnunet-config.c @@ -142,6 +142,7 @@ run (void *cls, { struct GNUNET_CONFIGURATION_Handle *out = NULL; struct GNUNET_CONFIGURATION_Handle *diff = NULL; + char *cfg_fn; (void) cls; (void) args; @@ -236,6 +237,20 @@ run (void *cls, option, value); } + cfg_fn = NULL; + if (NULL == cfgfile) + { + const char *xdg = getenv ("XDG_CONFIG_HOME"); + if (NULL != xdg) + GNUNET_asprintf (&cfg_fn, + "%s%s%s", + xdg, + DIR_SEPARATOR_STR, + GNUNET_OS_project_data_get ()->config_file); + else + cfg_fn = GNUNET_strdup (GNUNET_OS_project_data_get ()->user_config_file); + cfgfile = cfg_fn; + } if ( (NULL != diff) || (NULL != out) ) { if (GNUNET_OK != @@ -243,6 +258,7 @@ run (void *cls, cfgfile)) ret = 2; } + GNUNET_free_non_null (cfg_fn); if (NULL != out) GNUNET_CONFIGURATION_destroy (out); cleanup: diff --git a/src/util/program.c b/src/util/program.c index da58348d0..2fa8676a2 100644 --- a/src/util/program.c +++ b/src/util/program.c @@ -87,9 +87,13 @@ program_main (void *cls) struct CommandContext *cc = cls; GNUNET_SPEEDUP_start_(cc->cfg); - GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL); + GNUNET_SCHEDULER_add_shutdown (&shutdown_task, + NULL); GNUNET_RESOLVER_connect (cc->cfg); - cc->task (cc->task_cls, cc->args, cc->cfgfile, cc->cfg); + cc->task (cc->task_cls, + cc->args, + cc->cfgfile, + cc->cfg); } @@ -101,7 +105,8 @@ program_main (void *cls) * @param a2 second command line option */ static int -cmd_sorter (const void *a1, const void *a2) +cmd_sorter (const void *a1, + const void *a2) { const struct GNUNET_GETOPT_CommandLineOption *c1 = a1; const struct GNUNET_GETOPT_CommandLineOption *c2 = a2; @@ -264,18 +269,17 @@ GNUNET_PROGRAM_run2 (int argc, GNUNET_free (lpfx); goto cleanup; } - if (NULL == cc.cfgfile) - cc.cfgfile = GNUNET_strdup (cfg_fn); - if (GNUNET_YES == - GNUNET_DISK_file_test (cc.cfgfile)) + if (NULL != cc.cfgfile) { - if (GNUNET_SYSERR == - GNUNET_CONFIGURATION_load (cfg, - cc.cfgfile)) + if ( (GNUNET_YES != + GNUNET_DISK_file_test (cc.cfgfile)) || + (GNUNET_SYSERR == + GNUNET_CONFIGURATION_load (cfg, + cc.cfgfile)) ) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Malformed configuration file `%s', exit ...\n"), - cc.cfgfile); + _("Unreadable or malformed configuration file `%s', exit ...\n"), + cc.cfgfile); ret = GNUNET_SYSERR; GNUNET_free (allopts); GNUNET_free (lpfx); @@ -284,16 +288,37 @@ GNUNET_PROGRAM_run2 (int argc, } else { - if (0 != strcmp (cc.cfgfile, - cfg_fn)) + if (GNUNET_YES == + GNUNET_DISK_file_test (cfg_fn)) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Could not access configuration file `%s'\n"), - cc.cfgfile); - ret = GNUNET_SYSERR; - GNUNET_free (allopts); - GNUNET_free (lpfx); - goto cleanup; + if (GNUNET_SYSERR == + GNUNET_CONFIGURATION_load (cfg, + cfg_fn)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + _("Unreadable or malformed default configuration file `%s', exit ...\n"), + cfg_fn); + ret = GNUNET_SYSERR; + GNUNET_free (allopts); + GNUNET_free (lpfx); + goto cleanup; + } + } + else + { + GNUNET_free (cfg_fn); + cfg_fn = NULL; + if (GNUNET_OK != + GNUNET_CONFIGURATION_load (cfg, + NULL)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + _("Unreadable or malformed configuration, exit ...\n")); + ret = GNUNET_SYSERR; + GNUNET_free (allopts); + GNUNET_free (lpfx); + goto cleanup; + } } } GNUNET_free (allopts); @@ -320,20 +345,30 @@ GNUNET_PROGRAM_run2 (int argc, has little business with ARM-specific options. */ if (GNUNET_YES != GNUNET_CONFIGURATION_have_value (cfg, - "arm", - "CONFIG")) + "arm", + "CONFIG")) { - GNUNET_CONFIGURATION_set_value_string (cfg, - "arm", - "CONFIG", - cc.cfgfile); + if (NULL != cc.cfgfile) + GNUNET_CONFIGURATION_set_value_string (cfg, + "arm", + "CONFIG", + cc.cfgfile); + else if (NULL != cfg_fn) + GNUNET_CONFIGURATION_set_value_string (cfg, + "arm", + "CONFIG", + cfg_fn); } /* run */ cc.args = &argv[ret]; + if ( (NULL == cc.cfgfile) && + (NULL != cfg_fn) ) + cc.cfgfile = GNUNET_strdup (cfg_fn); if (GNUNET_NO == run_without_scheduler) { - GNUNET_SCHEDULER_run (&program_main, &cc); + GNUNET_SCHEDULER_run (&program_main, + &cc); } else { @@ -347,7 +382,7 @@ GNUNET_PROGRAM_run2 (int argc, cleanup: GNUNET_CONFIGURATION_destroy (cfg); GNUNET_free_non_null (cc.cfgfile); - GNUNET_free (cfg_fn); + GNUNET_free_non_null (cfg_fn); GNUNET_free_non_null (loglev); GNUNET_free_non_null (logfile); return ret; diff --git a/src/util/service.c b/src/util/service.c index 2dc7dd576..098030ddf 100644 --- a/src/util/service.c +++ b/src/util/service.c @@ -1587,6 +1587,7 @@ return_agpl (void *cls, struct GNUNET_MessageHeader *res; size_t slen; + (void) msg; slen = strlen (GNUNET_AGPL_URL) + 1; env = GNUNET_MQ_msg_extra (res, GNUNET_MESSAGE_TYPE_RESPONSE_AGPL, @@ -1811,37 +1812,45 @@ GNUNET_SERVICE_run_ (int argc, GNUNET_break (0); goto shutdown; } - if (NULL == opt_cfg_filename) - opt_cfg_filename = GNUNET_strdup (cfg_filename); - if (GNUNET_YES == GNUNET_DISK_file_test (opt_cfg_filename)) + if (NULL != opt_cfg_filename) { - if (GNUNET_SYSERR == - GNUNET_CONFIGURATION_load (cfg, - opt_cfg_filename)) + if ( (GNUNET_YES != + GNUNET_DISK_file_test (opt_cfg_filename)) || + (GNUNET_SYSERR == + GNUNET_CONFIGURATION_load (cfg, + opt_cfg_filename)) ) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Malformed configuration file `%s', exit ...\n"), - opt_cfg_filename); + _("Malformed configuration file `%s', exit ...\n"), + opt_cfg_filename); goto shutdown; } } else { - if (GNUNET_SYSERR == - GNUNET_CONFIGURATION_load (cfg, - NULL)) + if (GNUNET_YES == + GNUNET_DISK_file_test (cfg_filename)) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Malformed configuration, exit ...\n")); - goto shutdown; + if (GNUNET_SYSERR == + GNUNET_CONFIGURATION_load (cfg, + cfg_filename)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + _("Malformed configuration file `%s', exit ...\n"), + cfg_filename); + goto shutdown; + } } - if (0 != strcmp (opt_cfg_filename, - cfg_filename)) + else { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Could not access configuration file `%s'\n"), - opt_cfg_filename); - goto shutdown; + if (GNUNET_SYSERR == + GNUNET_CONFIGURATION_load (cfg, + NULL)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + _("Malformed configuration, exit ...\n")); + goto shutdown; + } } } if (GNUNET_OK != setup_service (&sh)) @@ -1857,7 +1866,7 @@ GNUNET_SERVICE_run_ (int argc, LOG (GNUNET_ERROR_TYPE_DEBUG, "Service `%s' runs with configuration from `%s'\n", service_name, - opt_cfg_filename); + (NULL != opt_cfg_filename) ? opt_cfg_filename : cfg_filename); if ((GNUNET_OK == GNUNET_CONFIGURATION_get_value_number (sh.cfg, "TESTING",