[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r22578 - in gnunet/src: arm chat core fs hostlist include n
From: |
gnunet |
Subject: |
[GNUnet-SVN] r22578 - in gnunet/src: arm chat core fs hostlist include nat statistics testbed testing testing_old transport util |
Date: |
Mon, 9 Jul 2012 21:04:19 +0200 |
Author: grothoff
Date: 2012-07-09 21:04:19 +0200 (Mon, 09 Jul 2012)
New Revision: 22578
Modified:
gnunet/src/arm/arm_api.c
gnunet/src/arm/do_start_process.c
gnunet/src/arm/gnunet-arm.c
gnunet/src/arm/gnunet-service-arm.c
gnunet/src/arm/test_arm_api.c
gnunet/src/arm/test_exponential_backoff.c
gnunet/src/arm/test_gnunet_service_manager.c
gnunet/src/chat/test_chat.c
gnunet/src/chat/test_chat_private.c
gnunet/src/core/test_core_api.c
gnunet/src/core/test_core_api_reliability.c
gnunet/src/core/test_core_api_start_only.c
gnunet/src/core/test_core_quota_compliance.c
gnunet/src/fs/gnunet-auto-share.c
gnunet/src/hostlist/test_gnunet_daemon_hostlist.c
gnunet/src/hostlist/test_gnunet_daemon_hostlist_learning.c
gnunet/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c
gnunet/src/include/gnunet_arm_service.h
gnunet/src/include/gnunet_os_lib.h
gnunet/src/nat/nat.c
gnunet/src/nat/nat_mini.c
gnunet/src/nat/test_nat_test.c
gnunet/src/statistics/test_statistics_api.c
gnunet/src/statistics/test_statistics_api_loop.c
gnunet/src/statistics/test_statistics_api_watch.c
gnunet/src/statistics/test_statistics_api_watch_zero_value.c
gnunet/src/testbed/testbed_api_hosts.c
gnunet/src/testing/testing.c
gnunet/src/testing_old/test_testing_large_topology.c
gnunet/src/testing_old/test_testing_topology.c
gnunet/src/testing_old/testing.c
gnunet/src/testing_old/testing_group.c
gnunet/src/transport/gnunet-transport-certificate-creation.c
gnunet/src/transport/gnunet-transport.c
gnunet/src/transport/plugin_transport_http_server.c
gnunet/src/util/crypto_random.c
gnunet/src/util/gnunet-uri.c
gnunet/src/util/helper.c
gnunet/src/util/os_priority.c
gnunet/src/util/test_common_logging_runtime_loglevels.c
gnunet/src/util/test_os_start_process.c
gnunet/src/util/test_resolver_api.c
Log:
-LRN: Another take on std descriptor inheritance
Now descriptors are not inherited by default, you have to pass
a set of flags to make it so. When pipes are given, flags have
no effect.
gnunet-arm now has two options to block stdout and stderr from being
passed to gnunet-service-arm
Modified: gnunet/src/arm/arm_api.c
===================================================================
--- gnunet/src/arm/arm_api.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/arm/arm_api.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -295,6 +295,11 @@
*/
uint16_t type;
+ /**
+ * Flags for passing std descriptors to ARM (when starting ARM).
+ */
+ enum GNUNET_OS_InheritStdioFlags std_inheritance;
+
};
#include "do_start_process.c"
@@ -381,14 +386,14 @@
{
/* Means we are ONLY running locally */
/* we're clearly running a test, don't daemonize */
- proc = do_start_process (GNUNET_NO,
+ proc = do_start_process (GNUNET_NO, pos->std_inheritance,
NULL, loprefix, binary, "-c", config,
/* no daemonization! */
lopostfix, NULL);
}
else
{
- proc = do_start_process (GNUNET_NO,
+ proc = do_start_process (GNUNET_NO, pos->std_inheritance,
NULL, loprefix, binary, "-c", config,
"-d", lopostfix, NULL);
}
@@ -522,6 +527,7 @@
*
* @param h handle to ARM
* @param service_name name of the service
+ * @param std_inheritance inheritance of std streams
* @param timeout how long to wait before failing for good
* @param cb callback to invoke when service is ready
* @param cb_cls closure for callback
@@ -529,6 +535,7 @@
void
GNUNET_ARM_start_service (struct GNUNET_ARM_Handle *h,
const char *service_name,
+ enum GNUNET_OS_InheritStdioFlags std_inheritance,
struct GNUNET_TIME_Relative timeout,
GNUNET_ARM_Callback cb, void *cb_cls)
{
@@ -547,12 +554,13 @@
sctx->callback = cb;
sctx->cls = cb_cls;
sctx->timeout = GNUNET_TIME_relative_to_absolute (timeout);
+ sctx->std_inheritance = std_inheritance;
memcpy (&sctx[1], service_name, slen);
GNUNET_CLIENT_service_test ("arm", h->cfg, timeout, &arm_service_report,
sctx);
return;
}
- if (h->client == NULL)
+ if (NULL == h->client)
{
client = GNUNET_CLIENT_connect ("arm", h->cfg);
if (client == NULL)
Modified: gnunet/src/arm/do_start_process.c
===================================================================
--- gnunet/src/arm/do_start_process.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/arm/do_start_process.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -8,13 +8,14 @@
* with spaces to the new process.
*
* @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
* @param lsocks array of listen sockets to dup starting at fd3
(systemd-style), or NULL
* @param first_arg first argument for argv (may be an empty string)
* @param ... more arguments, NULL terminated
* @return handle of the started process, NULL on error
*/
static struct GNUNET_OS_Process *
-do_start_process (int pipe_control,
+do_start_process (int pipe_control, unsigned int std_inheritance,
const SOCKTYPE * lsocks, const char *first_arg, ...)
{
va_list ap;
@@ -97,7 +98,7 @@
/* *INDENT-ON* */
va_end (ap);
argv[argv_size] = NULL;
- proc = GNUNET_OS_start_process_v (pipe_control, lsocks, argv[0], argv);
+ proc = GNUNET_OS_start_process_v (pipe_control, std_inheritance, lsocks,
argv[0], argv);
while (argv_size > 0)
GNUNET_free (argv[--argv_size]);
GNUNET_free (argv);
Modified: gnunet/src/arm/gnunet-arm.c
===================================================================
--- gnunet/src/arm/gnunet-arm.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/arm/gnunet-arm.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -127,6 +127,16 @@
/**
+ * Do we want to give our stdout to gnunet-service-arm?
+ */
+static unsigned int no_stdout = 0;
+
+/**
+ * Do we want to give our stderr to gnunet-service-arm?
+ */
+static unsigned int no_stderr = 0;
+
+/**
* Main continuation-passing-style loop. Runs the various
* jobs that we've been asked to do in order.
*
@@ -323,6 +333,8 @@
if (start)
{
GNUNET_ARM_start_service (h, "arm",
+ (no_stdout ? 0 :
GNUNET_OS_INHERIT_STD_OUT) |
+ (no_stderr ? 0 :
GNUNET_OS_INHERIT_STD_ERR),
(0 ==
timeout.rel_value) ? START_TIMEOUT :
timeout, &confirm_cb, "arm");
@@ -333,6 +345,8 @@
if (init != NULL)
{
GNUNET_ARM_start_service (h, init,
+ (no_stdout ? 0 :
GNUNET_OS_INHERIT_STD_OUT) |
+ (no_stderr ? 0 :
GNUNET_OS_INHERIT_STD_ERR),
(0 ==
timeout.rel_value) ? START_TIMEOUT :
timeout, &confirm_cb, init);
@@ -422,6 +436,10 @@
GNUNET_YES, &GNUNET_GETOPT_set_ulong, &temp_timeout_ms},
{'I', "info", NULL, gettext_noop ("List currently running services"),
GNUNET_NO, &GNUNET_GETOPT_set_one, &list},
+ {'O', "no-stdout", NULL, gettext_noop ("Don't let gnunet-service-arm
inherit standard output"),
+ GNUNET_NO, &GNUNET_GETOPT_set_one, &no_stdout},
+ {'E', "no-stderr", NULL, gettext_noop ("Don't let gnunet-service-arm
inherit standard error"),
+ GNUNET_NO, &GNUNET_GETOPT_set_one, &no_stderr},
GNUNET_GETOPT_OPTION_END
};
Modified: gnunet/src/arm/gnunet-service-arm.c
===================================================================
--- gnunet/src/arm/gnunet-service-arm.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/arm/gnunet-service-arm.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -320,12 +320,12 @@
GNUNET_assert (NULL == sl->proc);
if (GNUNET_YES == use_debug)
sl->proc =
- do_start_process (sl->pipe_control,
+ do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
lsocks, loprefix, sl->binary, "-c", sl->config, "-L",
"DEBUG", options, NULL);
else
sl->proc =
- do_start_process (sl->pipe_control,
+ do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
lsocks, loprefix, sl->binary, "-c", sl->config,
options, NULL);
if (sl->proc == NULL)
Modified: gnunet/src/arm/test_arm_api.c
===================================================================
--- gnunet/src/arm/test_arm_api.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/arm/test_arm_api.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -109,7 +109,7 @@
GNUNET_ARM_stop_service (arm, "arm", TIMEOUT, &arm_stopped, NULL);
#endif
}
- GNUNET_ARM_start_service (arm, "resolver", START_TIMEOUT, &resolver_notify,
+ GNUNET_ARM_start_service (arm, "resolver",
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, START_TIMEOUT, &resolver_notify,
NULL);
}
@@ -121,7 +121,7 @@
cfg = c;
arm = GNUNET_ARM_connect (cfg, NULL);
#if START_ARM
- GNUNET_ARM_start_service (arm, "arm", START_TIMEOUT, &arm_notify, NULL);
+ GNUNET_ARM_start_service (arm, "arm", GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
START_TIMEOUT, &arm_notify, NULL);
#else
arm_notify (NULL, GNUNET_YES);
#endif
Modified: gnunet/src/arm/test_exponential_backoff.c
===================================================================
--- gnunet/src/arm/test_exponential_backoff.c 2012-07-09 18:48:44 UTC (rev
22577)
+++ gnunet/src/arm/test_exponential_backoff.c 2012-07-09 19:04:19 UTC (rev
22578)
@@ -270,7 +270,7 @@
arm_notify (void *cls, enum GNUNET_ARM_ProcessStatus status)
{
GNUNET_assert (status == GNUNET_ARM_PROCESS_STARTING);
- GNUNET_ARM_start_service (arm, "do-nothing", TIMEOUT, &do_nothing_notify,
+ GNUNET_ARM_start_service (arm, "do-nothing",
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, TIMEOUT, &do_nothing_notify,
NULL);
}
@@ -365,7 +365,7 @@
arm = GNUNET_ARM_connect (cfg, NULL);
#if START_ARM
- GNUNET_ARM_start_service (arm, "arm", GNUNET_TIME_UNIT_ZERO, &arm_notify,
+ GNUNET_ARM_start_service (arm, "arm", GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
GNUNET_TIME_UNIT_ZERO, &arm_notify,
NULL);
#else
arm_do_nothing (NULL, GNUNET_YES);
Modified: gnunet/src/arm/test_gnunet_service_manager.c
===================================================================
--- gnunet/src/arm/test_gnunet_service_manager.c 2012-07-09 18:48:44 UTC
(rev 22577)
+++ gnunet/src/arm/test_gnunet_service_manager.c 2012-07-09 19:04:19 UTC
(rev 22578)
@@ -124,7 +124,7 @@
cfg = c;
#if START_ARM
arm = GNUNET_ARM_connect (cfg, NULL);
- GNUNET_ARM_start_service (arm, "arm", START_TIMEOUT, &arm_notify, NULL);
+ GNUNET_ARM_start_service (arm, "arm", GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
START_TIMEOUT, &arm_notify, NULL);
#else
arm_notify (NULL, GNUNET_YES);
#endif
Modified: gnunet/src/chat/test_chat.c
===================================================================
--- gnunet/src/chat/test_chat.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/chat/test_chat.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -119,7 +119,7 @@
p->cfg = GNUNET_CONFIGURATION_create ();
#if START_ARM
p->arm_proc =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-service-arm",
"gnunet-service-arm",
#if VERBOSE
"-L", "DEBUG",
Modified: gnunet/src/chat/test_chat_private.c
===================================================================
--- gnunet/src/chat/test_chat_private.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/chat/test_chat_private.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -133,7 +133,7 @@
p->cfg = GNUNET_CONFIGURATION_create ();
#if START_ARM
p->arm_proc =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-service-arm",
"gnunet-service-arm",
#if VERBOSE
"-L", "DEBUG",
Modified: gnunet/src/core/test_core_api.c
===================================================================
--- gnunet/src/core/test_core_api.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/core/test_core_api.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -319,7 +319,7 @@
p->cfg = GNUNET_CONFIGURATION_create ();
#if START_ARM
p->arm_proc =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-service-arm",
"gnunet-service-arm",
#if VERBOSE
"-L", "DEBUG",
Modified: gnunet/src/core/test_core_api_reliability.c
===================================================================
--- gnunet/src/core/test_core_api_reliability.c 2012-07-09 18:48:44 UTC (rev
22577)
+++ gnunet/src/core/test_core_api_reliability.c 2012-07-09 19:04:19 UTC (rev
22578)
@@ -429,7 +429,7 @@
p->cfg = GNUNET_CONFIGURATION_create ();
#if START_ARM
p->arm_proc =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-service-arm",
"gnunet-service-arm",
"-c", cfgname, NULL);
#endif
Modified: gnunet/src/core/test_core_api_start_only.c
===================================================================
--- gnunet/src/core/test_core_api_start_only.c 2012-07-09 18:48:44 UTC (rev
22577)
+++ gnunet/src/core/test_core_api_start_only.c 2012-07-09 19:04:19 UTC (rev
22578)
@@ -139,7 +139,7 @@
{
p->cfg = GNUNET_CONFIGURATION_create ();
p->arm_proc =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-service-arm",
"gnunet-service-arm",
"-c", cfgname, NULL);
GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));
Modified: gnunet/src/core/test_core_quota_compliance.c
===================================================================
--- gnunet/src/core/test_core_quota_compliance.c 2012-07-09 18:48:44 UTC
(rev 22577)
+++ gnunet/src/core/test_core_quota_compliance.c 2012-07-09 19:04:19 UTC
(rev 22578)
@@ -573,7 +573,7 @@
p->cfg = GNUNET_CONFIGURATION_create ();
#if START_ARM
p->arm_proc =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-service-arm",
"gnunet-service-arm",
"-c", cfgname, NULL);
#endif
Modified: gnunet/src/fs/gnunet-auto-share.c
===================================================================
--- gnunet/src/fs/gnunet-auto-share.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/fs/gnunet-auto-share.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -488,7 +488,7 @@
_("Publishing `%s'\n"),
wi->filename);
publish_proc = GNUNET_OS_start_process_vap (GNUNET_YES,
- NULL, NULL,
+ 0, NULL, NULL,
"gnunet-publish",
argv);
if (NULL == publish_proc)
Modified: gnunet/src/hostlist/test_gnunet_daemon_hostlist.c
===================================================================
--- gnunet/src/hostlist/test_gnunet_daemon_hostlist.c 2012-07-09 18:48:44 UTC
(rev 22577)
+++ gnunet/src/hostlist/test_gnunet_daemon_hostlist.c 2012-07-09 19:04:19 UTC
(rev 22578)
@@ -133,7 +133,7 @@
{
p->cfg = GNUNET_CONFIGURATION_create ();
p->arm_proc =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-service-arm",
"gnunet-service-arm",
"-c", cfgname, NULL);
GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));
Modified: gnunet/src/hostlist/test_gnunet_daemon_hostlist_learning.c
===================================================================
--- gnunet/src/hostlist/test_gnunet_daemon_hostlist_learning.c 2012-07-09
18:48:44 UTC (rev 22577)
+++ gnunet/src/hostlist/test_gnunet_daemon_hostlist_learning.c 2012-07-09
19:04:19 UTC (rev 22578)
@@ -385,7 +385,7 @@
p->cfg = GNUNET_CONFIGURATION_create ();
p->arm_proc =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-service-arm",
"gnunet-service-arm",
"-c", cfgname, NULL);
GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));
@@ -416,7 +416,7 @@
{
p->cfg = GNUNET_CONFIGURATION_create ();
p->arm_proc =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-service-arm",
"gnunet-service-arm",
"-c", cfgname, NULL);
GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));
Modified: gnunet/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c
===================================================================
--- gnunet/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c 2012-07-09
18:48:44 UTC (rev 22577)
+++ gnunet/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c 2012-07-09
19:04:19 UTC (rev 22578)
@@ -144,7 +144,7 @@
p->cfg = GNUNET_CONFIGURATION_create ();
#if START_ARM
p->arm_proc =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-service-arm",
"gnunet-service-arm",
#if VERBOSE
"-L", "DEBUG",
Modified: gnunet/src/include/gnunet_arm_service.h
===================================================================
--- gnunet/src/include/gnunet_arm_service.h 2012-07-09 18:48:44 UTC (rev
22577)
+++ gnunet/src/include/gnunet_arm_service.h 2012-07-09 19:04:19 UTC (rev
22578)
@@ -37,6 +37,7 @@
#include "gnunet_configuration_lib.h"
#include "gnunet_scheduler_lib.h"
+#include "gnunet_os_lib.h"
#include "gnunet_time_lib.h"
/**
@@ -169,12 +170,14 @@
*
* @param h handle to ARM
* @param service_name name of the service
+ * @param std_inheritance flags controlling std descriptors inheritance
* @param timeout how long to wait before failing for good
* @param cb callback to invoke when service is ready
* @param cb_cls closure for callback
*/
void
GNUNET_ARM_start_service (struct GNUNET_ARM_Handle *h, const char
*service_name,
+ enum GNUNET_OS_InheritStdioFlags std_inheritance,
struct GNUNET_TIME_Relative timeout,
GNUNET_ARM_Callback cb, void *cb_cls);
Modified: gnunet/src/include/gnunet_os_lib.h
===================================================================
--- gnunet/src/include/gnunet_os_lib.h 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/include/gnunet_os_lib.h 2012-07-09 19:04:19 UTC (rev 22578)
@@ -54,7 +54,52 @@
#include "gnunet_configuration_lib.h"
#include "gnunet_scheduler_lib.h"
+
/**
+ * Flags that determine which of the standard streams
+ * should be inherited by the child process.
+ */
+enum GNUNET_OS_InheritStdioFlags
+{
+
+ /**
+ * No standard streams should be inherited.
+ */
+ GNUNET_OS_INHERIT_STD_NONE = 0,
+
+ /**
+ * When this flag is set, the child process will
+ * inherit stdin of the parent.
+ */
+ GNUNET_OS_INHERIT_STD_IN = 1,
+
+ /**
+ * When this flag is set, the child process will
+ * inherit stdout of the parent.
+ */
+ GNUNET_OS_INHERIT_STD_OUT = 2,
+
+ /**
+ * When this flag is set, the child process will
+ * inherit stderr of the parent.
+ */
+ GNUNET_OS_INHERIT_STD_ERR = 4,
+
+ /**
+ * When these flags are set, the child process will
+ * inherit stdout and stderr of the parent.
+ */
+ GNUNET_OS_INHERIT_STD_OUT_AND_ERR = 6,
+
+ /**
+ * Use this option to have all of the standard streams
+ * (stdin, stdout and stderror) be inherited.
+ */
+ GNUNET_OS_INHERIT_STD_ALL = 7
+};
+
+
+/**
* Process information (OS-dependent)
*/
struct GNUNET_OS_Process;
@@ -257,6 +302,7 @@
* Start a process.
*
* @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
* @param pipe_stdin pipe to use to send input to child process (or NULL)
* @param pipe_stdout pipe to use to get output from child process (or NULL)
* @param filename name of the binary
@@ -265,6 +311,7 @@
*/
struct GNUNET_OS_Process *
GNUNET_OS_start_process_vap (int pipe_control,
+ enum GNUNET_OS_InheritStdioFlags std_inheritance,
struct GNUNET_DISK_PipeHandle *pipe_stdin,
struct GNUNET_DISK_PipeHandle *pipe_stdout,
const char *filename,
@@ -275,6 +322,7 @@
* Start a process.
*
* @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
* @param pipe_stdin pipe to use to send input to child process (or NULL)
* @param pipe_stdout pipe to use to get output from child process (or NULL)
* @param filename name of the binary
@@ -283,6 +331,7 @@
*/
struct GNUNET_OS_Process *
GNUNET_OS_start_process (int pipe_control,
+ enum GNUNET_OS_InheritStdioFlags std_inheritance,
struct GNUNET_DISK_PipeHandle *pipe_stdin,
struct GNUNET_DISK_PipeHandle *pipe_stdout,
const char *filename, ...);
@@ -292,6 +341,7 @@
* Start a process.
*
* @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
* @param pipe_stdin pipe to use to send input to child process (or NULL)
* @param pipe_stdout pipe to use to get output from child process (or NULL)
* @param filename name of the binary
@@ -300,6 +350,7 @@
*/
struct GNUNET_OS_Process *
GNUNET_OS_start_process_va (int pipe_control,
+ enum GNUNET_OS_InheritStdioFlags std_inheritance,
struct GNUNET_DISK_PipeHandle *pipe_stdin,
struct GNUNET_DISK_PipeHandle *pipe_stdout,
const char *filename, va_list va);
@@ -308,6 +359,7 @@
* Start a process.
*
* @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
* @param lsocks array of listen sockets to dup systemd-style (or NULL);
* must be NULL on platforms where dup is not supported
* @param filename name of the binary
@@ -317,6 +369,7 @@
*/
struct GNUNET_OS_Process *
GNUNET_OS_start_process_v (int pipe_control,
+ enum GNUNET_OS_InheritStdioFlags std_inheritance,
const SOCKTYPE *lsocks,
const char *filename,
char *const argv[]);
Modified: gnunet/src/nat/nat.c
===================================================================
--- gnunet/src/nat/nat.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/nat/nat.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -835,7 +835,7 @@
"gnunet-helper-nat-server", h->internal_address);
/* Start the server process */
h->server_proc =
- GNUNET_OS_start_process (GNUNET_NO, NULL, h->server_stdout,
+ GNUNET_OS_start_process (GNUNET_NO, 0, NULL, h->server_stdout,
"gnunet-helper-nat-server",
"gnunet-helper-nat-server",
h->internal_address, NULL);
@@ -1332,8 +1332,8 @@
_("Running gnunet-helper-nat-client %s %s %u\n"), h->internal_address,
inet4, (unsigned int) h->adv_port);
proc =
- GNUNET_OS_start_process (GNUNET_NO,
- NULL, NULL, "gnunet-helper-nat-client",
+ GNUNET_OS_start_process (GNUNET_NO, 0, NULL, NULL,
+ "gnunet-helper-nat-client",
"gnunet-helper-nat-client", h->internal_address,
inet4, port_as_string, NULL);
if (NULL == proc)
Modified: gnunet/src/nat/nat_mini.c
===================================================================
--- gnunet/src/nat/nat_mini.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/nat/nat_mini.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -176,7 +176,7 @@
return NULL;
}
eh->eip =
- GNUNET_OS_start_process (GNUNET_NO, NULL, eh->opipe, "external-ip",
"external-ip",
+ GNUNET_OS_start_process (GNUNET_NO, 0, NULL, eh->opipe, "external-ip",
"external-ip",
NULL);
if (NULL == eh->eip)
{
Modified: gnunet/src/nat/test_nat_test.c
===================================================================
--- gnunet/src/nat/test_nat_test.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/nat/test_nat_test.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -102,7 +102,7 @@
}
gns =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-nat-server",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-nat-server",
"gnunet-nat-server",
"-c", "test_nat_test_data.conf", "12345", NULL);
GNUNET_assert (NULL != gns);
Modified: gnunet/src/statistics/test_statistics_api.c
===================================================================
--- gnunet/src/statistics/test_statistics_api.c 2012-07-09 18:48:44 UTC (rev
22577)
+++ gnunet/src/statistics/test_statistics_api.c 2012-07-09 19:04:19 UTC (rev
22578)
@@ -139,7 +139,7 @@
struct GNUNET_OS_Process *proc;
proc =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL,
"gnunet-service-statistics",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-service-statistics",
"gnunet-service-statistics",
"-c", "test_statistics_api_data.conf", NULL);
#endif
@@ -162,7 +162,7 @@
#if START_SERVICE
/* restart to check persistence! */
proc =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL,
"gnunet-service-statistics",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-service-statistics",
"gnunet-service-statistics",
"-c", "test_statistics_api_data.conf", NULL);
#endif
Modified: gnunet/src/statistics/test_statistics_api_loop.c
===================================================================
--- gnunet/src/statistics/test_statistics_api_loop.c 2012-07-09 18:48:44 UTC
(rev 22577)
+++ gnunet/src/statistics/test_statistics_api_loop.c 2012-07-09 19:04:19 UTC
(rev 22578)
@@ -97,7 +97,7 @@
struct GNUNET_OS_Process *proc;
proc =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL,
"gnunet-service-statistics",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-service-statistics",
"gnunet-service-statistics",
#if DEBUG_STATISTICS
"-L", "DEBUG",
Modified: gnunet/src/statistics/test_statistics_api_watch.c
===================================================================
--- gnunet/src/statistics/test_statistics_api_watch.c 2012-07-09 18:48:44 UTC
(rev 22577)
+++ gnunet/src/statistics/test_statistics_api_watch.c 2012-07-09 19:04:19 UTC
(rev 22578)
@@ -127,7 +127,7 @@
struct GNUNET_OS_Process *proc;
proc =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL,
"gnunet-service-statistics",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-service-statistics",
"gnunet-service-statistics",
#if VERBOSE
"-L", "DEBUG",
Modified: gnunet/src/statistics/test_statistics_api_watch_zero_value.c
===================================================================
--- gnunet/src/statistics/test_statistics_api_watch_zero_value.c
2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/statistics/test_statistics_api_watch_zero_value.c
2012-07-09 19:04:19 UTC (rev 22578)
@@ -160,7 +160,7 @@
struct GNUNET_OS_Process *proc;
proc =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL,
"gnunet-service-statistics",
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "gnunet-service-statistics",
"gnunet-service-statistics",
#if VERBOSE
"-L", "DEBUG",
Modified: gnunet/src/testbed/testbed_api_hosts.c
===================================================================
--- gnunet/src/testbed/testbed_api_hosts.c 2012-07-09 18:48:44 UTC (rev
22577)
+++ gnunet/src/testbed/testbed_api_hosts.c 2012-07-09 19:04:19 UTC (rev
22578)
@@ -385,6 +385,8 @@
if ((NULL == host) || (0 == host->id))
{
h->process = GNUNET_OS_start_process_vap (GNUNET_YES,
+ GNUNET_OS_INHERIT_STD_OUT |
+ GNUNET_OS_INHERIT_STD_ERR,
h->cpipe, NULL,
"gnunet-service-testbed",
binary_argv);
@@ -414,6 +416,8 @@
remote_args[argp++] = NULL;
GNUNET_assert (argp == argc + 6 + 1);
h->process = GNUNET_OS_start_process_vap (GNUNET_YES,
+ GNUNET_OS_INHERIT_STD_OUT |
+ GNUNET_OS_INHERIT_STD_ERR,
h->cpipe, NULL,
"ssh",
remote_args);
Modified: gnunet/src/testing/testing.c
===================================================================
--- gnunet/src/testing/testing.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/testing/testing.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -905,7 +905,7 @@
return GNUNET_SYSERR;
}
GNUNET_assert (NULL != peer->cfgfile);
- peer->main_process = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL,
+ peer->main_process = GNUNET_OS_start_process (GNUNET_YES,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL,
peer->main_binary,
peer->main_binary,
"-c",
Modified: gnunet/src/testing_old/test_testing_large_topology.c
===================================================================
--- gnunet/src/testing_old/test_testing_large_topology.c 2012-07-09
18:48:44 UTC (rev 22577)
+++ gnunet/src/testing_old/test_testing_large_topology.c 2012-07-09
19:04:19 UTC (rev 22578)
@@ -189,7 +189,7 @@
GNUNET_asprintf (&peer_number, "%llu", num_peers);
GNUNET_asprintf (&connect_number, "%llu", expected_connections);
mem_process =
- GNUNET_OS_start_process (NULL, NULL, "./memsize.pl", "memsize.pl",
+ GNUNET_OS_start_process (NULL, NULL, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
"./memsize.pl", "memsize.pl",
"totals.txt", peer_number, connect_number,
NULL);
GNUNET_OS_process_wait (mem_process);
GNUNET_OS_process_destroy (mem_process);
Modified: gnunet/src/testing_old/test_testing_topology.c
===================================================================
--- gnunet/src/testing_old/test_testing_topology.c 2012-07-09 18:48:44 UTC
(rev 22577)
+++ gnunet/src/testing_old/test_testing_topology.c 2012-07-09 19:04:19 UTC
(rev 22578)
@@ -194,7 +194,7 @@
GNUNET_asprintf (&peer_number, "%llu", num_peers);
GNUNET_asprintf (&connect_number, "%llu", expected_connections);
mem_process =
- GNUNET_OS_start_process (NULL, NULL, "./memsize.pl", "memsize.pl",
+ GNUNET_OS_start_process (NULL, NULL, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
"./memsize.pl", "memsize.pl",
"totals.txt", peer_number, connect_number,
NULL);
GNUNET_OS_process_wait (mem_process);
GNUNET_OS_process_destroy (mem_process);
Modified: gnunet/src/testing_old/testing.c
===================================================================
--- gnunet/src/testing_old/testing.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/testing_old/testing.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -245,7 +245,7 @@
"gnunet-peerinfo", "gnunet-peerinfo", "-c", d->cfgfile,
"-sq");
d->proc_arm_peerinfo =
- GNUNET_OS_start_process (GNUNET_YES, NULL, d->pipe_stdout,
"gnunet-peerinfo",
+ GNUNET_OS_start_process (GNUNET_YES,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, d->pipe_stdout, "gnunet-peerinfo",
"gnunet-peerinfo", "-c", d->cfgfile,
"-sq",
NULL);
GNUNET_DISK_pipe_close_end (d->pipe_stdout,
GNUNET_DISK_PIPE_END_WRITE);
@@ -263,7 +263,7 @@
d->cfgfile, "-sq");
if (d->ssh_port_str == NULL)
{
- d->proc_arm_peerinfo = GNUNET_OS_start_process (GNUNET_NO, NULL,
d->pipe_stdout, "ssh", "ssh",
+ d->proc_arm_peerinfo = GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, d->pipe_stdout, "ssh", "ssh",
"-q",
dst, "gnunet-peerinfo", "-c",
d->cfgfile, "-sq", NULL);
@@ -271,7 +271,7 @@
else
{
d->proc_arm_peerinfo =
- GNUNET_OS_start_process (GNUNET_NO, NULL, d->pipe_stdout, "ssh",
"ssh", "-p",
+ GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, d->pipe_stdout, "ssh", "ssh", "-p",
d->ssh_port_str,
"-q",
dst, "gnunet-peerinfo", "-c",
d->cfgfile,
@@ -414,7 +414,7 @@
"gnunet-arm", "gnunet-arm", "-c", d->cfgfile,
"-s");
d->proc_arm_start =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-arm",
"gnunet-arm", "-c",
+ GNUNET_OS_start_process (GNUNET_YES,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "gnunet-arm", "gnunet-arm", "-c",
d->cfgfile,
"-s", "-q", "-T",
GNUNET_TIME_relative_to_string
@@ -434,7 +434,7 @@
"-s", "-q");
if (d->ssh_port_str == NULL)
{
- d->proc_arm_start = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL,
"ssh", "ssh",
+ d->proc_arm_start = GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "ssh", "ssh",
"-q",
dst, "gnunet-arm",
"-c", d->cfgfile, "-s", "-q", "-T",
@@ -446,7 +446,7 @@
{
d->proc_arm_start =
- GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "ssh", "ssh", "-p",
+ GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "ssh", "ssh", "-p",
d->ssh_port_str,
"-q",
dst, "gnunet-arm",
@@ -892,7 +892,7 @@
else
arg = GNUNET_strdup (d->hostname);
- d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL,
"ssh", "ssh",
+ d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "ssh", "ssh",
"-q",
arg, "gnunet-arm",
"-c", d->cfgfile, "-i", service, "-q",
@@ -908,7 +908,7 @@
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Starting gnunet-arm with config `%s' locally.\n", d->cfgfile);
- d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL,
"gnunet-arm", "gnunet-arm",
+ d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_YES,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "gnunet-arm", "gnunet-arm",
"-c", d->cfgfile, "-i", service, "-q",
"-T",
GNUNET_TIME_relative_to_string
(timeout),
@@ -960,7 +960,7 @@
else
arg = GNUNET_strdup (d->hostname);
- d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL,
"ssh", "ssh",
+ d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "ssh", "ssh",
"-q",
arg, "gnunet-arm",
"-c", d->cfgfile, "-i", service, "-q",
@@ -977,7 +977,7 @@
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Starting gnunet-arm with config `%s' locally.\n", d->cfgfile);
- d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL,
"gnunet-arm", "gnunet-arm",
+ d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_YES,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "gnunet-arm", "gnunet-arm",
"-c", d->cfgfile, "-i", service, "-q",
"-T",
GNUNET_TIME_relative_to_string
(timeout),
@@ -1184,7 +1184,7 @@
GNUNET_free (baseservicehome);
if (ret->ssh_port_str == NULL)
{
- ret->proc_arm_copying = GNUNET_OS_start_process (GNUNET_NO, NULL,
NULL, "scp", "scp", "-r",
+ ret->proc_arm_copying = GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "scp", "scp", "-r",
"-q",
servicehome, arg, NULL);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1194,7 +1194,7 @@
else
{
ret->proc_arm_copying =
- GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "scp", "scp", "-r",
"-P",
+ GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "scp", "scp", "-r", "-P",
ret->ssh_port_str,
"-q",
servicehome, arg, NULL);
@@ -1304,7 +1304,7 @@
else
arg = GNUNET_strdup (d->hostname);
- d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "ssh",
"ssh",
+ d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "ssh", "ssh",
"-q",
arg, "gnunet-arm",
"-c", d->cfgfile, "-e", "-r", NULL);
@@ -1316,7 +1316,7 @@
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Stopping gnunet-arm with config `%s' locally.\n", d->cfgfile);
- d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL,
"gnunet-arm", "gnunet-arm",
+ d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_YES,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "gnunet-arm", "gnunet-arm",
"-c", d->cfgfile, "-e", "-r", NULL);
}
@@ -1377,7 +1377,7 @@
else
arg = GNUNET_strdup (d->hostname);
- d->proc_arm_srv_stop = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL,
"ssh", "ssh",
+ d->proc_arm_srv_stop = GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "ssh", "ssh",
"-q",
arg, "gnunet-arm",
"-c", d->cfgfile, "-k", service, "-q",
@@ -1393,7 +1393,7 @@
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Stopping gnunet-arm with config `%s' locally.\n", d->cfgfile);
- d->proc_arm_srv_stop = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL,
"gnunet-arm", "gnunet-arm",
+ d->proc_arm_srv_stop = GNUNET_OS_start_process (GNUNET_YES,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "gnunet-arm", "gnunet-arm",
"-c", d->cfgfile, "-k", service, "-q",
"-T",
GNUNET_TIME_relative_to_string
(timeout),
@@ -1546,7 +1546,7 @@
else
arg = GNUNET_strdup (d->hostname);
- d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "ssh",
"ssh",
+ d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "ssh", "ssh",
"-q",
arg, "gnunet-arm",
"-c", d->cfgfile, "-e", "-q", "-T",
@@ -1562,7 +1562,7 @@
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Stopping gnunet-arm with config `%s' locally.\n", d->cfgfile);
- d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL,
"gnunet-arm", "gnunet-arm",
+ d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "gnunet-arm", "gnunet-arm",
"-c", d->cfgfile, "-e", "-q", "-T",
GNUNET_TIME_relative_to_string
(timeout),
del_arg, NULL);
@@ -1626,7 +1626,7 @@
GNUNET_asprintf (&arg, "address@hidden:%s", d->username, d->hostname,
d->cfgfile);
else
GNUNET_asprintf (&arg, "%s:%s", d->hostname, d->cfgfile);
- d->proc_arm_copying = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "scp",
"scp",
+ d->proc_arm_copying = GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "scp", "scp",
"-q",
d->cfgfile, arg, NULL);
GNUNET_free (arg);
Modified: gnunet/src/testing_old/testing_group.c
===================================================================
--- gnunet/src/testing_old/testing_group.c 2012-07-09 18:48:44 UTC (rev
22577)
+++ gnunet/src/testing_old/testing_group.c 2012-07-09 19:04:19 UTC (rev
22578)
@@ -2904,7 +2904,7 @@
pg->peers[pg_iter].daemon->hostname,
temp_service_path);
procarr[pg_iter] =
- GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "scp", "scp", mytemp,
arg, NULL);
+ GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "scp", "scp", mytemp, arg, NULL);
GNUNET_assert (procarr[pg_iter] != NULL);
ret = GNUNET_OS_process_wait (procarr[pg_iter]); /* FIXME: schedule
this, throttle! */
GNUNET_OS_process_destroy (procarr[pg_iter]);
@@ -3090,7 +3090,7 @@
pg->peers[pg_iter].daemon->hostname,
temp_service_path);
procarr[pg_iter] =
- GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "scp", "scp", mytemp,
arg, NULL);
+ GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "scp", "scp", mytemp, arg, NULL);
GNUNET_assert (procarr[pg_iter] != NULL);
GNUNET_OS_process_wait (procarr[pg_iter]); /* FIXME: add
scheduled blacklist file copy that parallelizes file copying! */
@@ -5693,7 +5693,7 @@
/* FIXME: Doesn't support ssh_port option! */
helper->proc =
- GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "ssh", "ssh", arg,
+ GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "ssh", "ssh", arg,
"peerStartHelper.pl", tempdir, NULL);
GNUNET_assert (helper->proc != NULL);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "starting peers with cmd ssh %s %s
%s\n",
@@ -5916,13 +5916,13 @@
{
GNUNET_asprintf (&ssh_port_str, "%d", pg->hosts[i].sshport);
proc =
- GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "ssh", "ssh", "-P",
ssh_port_str,
+ GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "ssh", "ssh", "-P", ssh_port_str,
"-q",
arg, "mkdir -p", tmpdir, NULL);
}
else
proc =
- GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "ssh", "ssh", arg,
"mkdir -p",
+ GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "ssh", "ssh", arg, "mkdir -p",
tmpdir, NULL);
GNUNET_assert (proc != NULL);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -6141,7 +6141,7 @@
/* FIXME: Doesn't support ssh_port option! */
proc =
- GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "rsync", "rsync", "-r",
+ GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "rsync", "rsync", "-r",
newservicehome, arg, NULL);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"copying directory with command rsync -r %s %s\n",
Modified: gnunet/src/transport/gnunet-transport-certificate-creation.c
===================================================================
--- gnunet/src/transport/gnunet-transport-certificate-creation.c
2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/transport/gnunet-transport-certificate-creation.c
2012-07-09 19:04:19 UTC (rev 22578)
@@ -57,7 +57,7 @@
/* Create RSA Private Key */
/* openssl genrsa -out $1 1024 2> /dev/null */
openssl =
- GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "openssl", "openssl",
"genrsa",
+ GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "openssl", "openssl", "genrsa",
"-out", argv[1], "1024", NULL);
if (openssl == NULL)
return 2;
@@ -67,7 +67,7 @@
/* Create a self-signed certificate in batch mode using rsa key */
/* openssl req -batch -days 365 -out $2 -new -x509 -key $1 2> /dev/null */
openssl =
- GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "openssl", "openssl",
"req",
+ GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL, "openssl", "openssl", "req",
"-batch", "-days", "365", "-out", argv[2],
"-new", "-x509", "-key", argv[1], NULL);
if (openssl == NULL)
Modified: gnunet/src/transport/gnunet-transport.c
===================================================================
--- gnunet/src/transport/gnunet-transport.c 2012-07-09 18:48:44 UTC (rev
22577)
+++ gnunet/src/transport/gnunet-transport.c 2012-07-09 19:04:19 UTC (rev
22578)
@@ -284,7 +284,7 @@
adv_port = bnd_port;
if (NULL == resolver)
resolver =
- GNUNET_OS_start_process (GNUNET_YES, NULL, NULL,
"gnunet-service-resolver",
+ GNUNET_OS_start_process (GNUNET_YES,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "gnunet-service-resolver",
"gnunet-service-resolver", NULL);
resolver_users++;
GNUNET_RESOLVER_connect (cfg);
Modified: gnunet/src/transport/plugin_transport_http_server.c
===================================================================
--- gnunet/src/transport/plugin_transport_http_server.c 2012-07-09 18:48:44 UTC
(rev 22577)
+++ gnunet/src/transport/plugin_transport_http_server.c 2012-07-09 19:04:19 UTC
(rev 22578)
@@ -167,7 +167,7 @@
"No usable TLS certificate found, creating certificate\n");
errno = 0;
cert_creation =
- GNUNET_OS_start_process (GNUNET_NO, NULL, NULL,
+ GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL, NULL,
"gnunet-transport-certificate-creation",
"gnunet-transport-certificate-creation",
key_file, cert_file, NULL);
Modified: gnunet/src/util/crypto_random.c
===================================================================
--- gnunet/src/util/crypto_random.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/util/crypto_random.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -284,7 +284,7 @@
LOG (GNUNET_ERROR_TYPE_INFO, _("Starting `%s' process to generate
entropy\n"),
"find");
genproc =
- GNUNET_OS_start_process (GNUNET_NO,
+ GNUNET_OS_start_process (GNUNET_NO, 0,
NULL, NULL, "sh", "sh", "-c",
"exec find / -mount -type f -exec cp {} /dev/null
\\; 2>/dev/null",
NULL);
Modified: gnunet/src/util/gnunet-uri.c
===================================================================
--- gnunet/src/util/gnunet-uri.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/util/gnunet-uri.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -118,7 +118,7 @@
GNUNET_DISK_pipe_handle (sigpipe,
GNUNET_DISK_PIPE_END_READ),
&maint_child_death, NULL);
- p = GNUNET_OS_start_process (GNUNET_NO,
+ p = GNUNET_OS_start_process (GNUNET_NO, 0,
NULL, NULL,
program,
program,
Modified: gnunet/src/util/helper.c
===================================================================
--- gnunet/src/util/helper.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/util/helper.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -314,7 +314,7 @@
h->fh_to_helper =
GNUNET_DISK_pipe_handle (h->helper_in, GNUNET_DISK_PIPE_END_WRITE);
h->helper_proc =
- GNUNET_OS_start_process_vap (GNUNET_NO,
+ GNUNET_OS_start_process_vap (GNUNET_NO, 0,
h->helper_in, h->helper_out,
h->binary_name,
h->binary_argv);
Modified: gnunet/src/util/os_priority.c
===================================================================
--- gnunet/src/util/os_priority.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/util/os_priority.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -768,6 +768,10 @@
* Start a process.
*
* @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags controlling
which
+ * std handles of the parent are inherited by the child.
+ * pipe_stdin and pipe_stdout take priority over std_inheritance
+ * (when they are non-NULL).
* @param pipe_stdin pipe to use to send input to child process (or NULL)
* @param pipe_stdout pipe to use to get output from child process (or NULL)
* @param lsocks array of listen sockets to dup systemd-style (or NULL);
@@ -778,6 +782,7 @@
*/
static struct GNUNET_OS_Process *
start_process (int pipe_control,
+ enum GNUNET_OS_InheritStdioFlags std_inheritance,
struct GNUNET_DISK_PipeHandle *pipe_stdin,
struct GNUNET_DISK_PipeHandle *pipe_stdout,
const SOCKTYPE *lsocks,
@@ -870,6 +875,10 @@
LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "dup2");
GNUNET_break (0 == close (fd_stdout_write));
}
+ else if (!(std_inheritance & GNUNET_OS_INHERIT_STD_OUT))
+ {
+ close (1);
+ }
if (pipe_stdin != NULL)
{
@@ -878,6 +887,14 @@
LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "dup2");
GNUNET_break (0 == close (fd_stdin_read));
}
+ else if (!(std_inheritance & GNUNET_OS_INHERIT_STD_IN))
+ {
+ close (0);
+ }
+ if (!(std_inheritance & GNUNET_OS_INHERIT_STD_ERR))
+ {
+ close (2);
+ }
if (lscp != NULL)
{
/* read systemd documentation... */
@@ -961,6 +978,10 @@
long lRet;
HANDLE stdin_handle;
HANDLE stdout_handle;
+ HANDLE stdih, stdoh, stdeh;
+ DWORD stdif, stdof, stdef;
+ BOOL bresult;
+ DWORD error_code;
if (GNUNET_SYSERR == GNUNET_OS_check_helper_binary (filename))
return NULL; /* not executable */
@@ -1083,9 +1104,11 @@
memset (&start, 0, sizeof (start));
start.cb = sizeof (start);
- if ((pipe_stdin != NULL) || (pipe_stdout != NULL))
+ if ((pipe_stdin != NULL) || (pipe_stdout != NULL) || (std_inheritance != 0))
start.dwFlags |= STARTF_USESTDHANDLES;
+ stdih = GetStdHandle (STD_INPUT_HANDLE);
+ GetHandleInformation (stdih, &stdif);
if (pipe_stdin != NULL)
{
GNUNET_DISK_internal_file_handle_ (GNUNET_DISK_pipe_handle
@@ -1093,7 +1116,21 @@
&stdin_handle, sizeof (HANDLE));
start.hStdInput = stdin_handle;
}
+ if (stdih)
+ {
+ if (std_inheritance & GNUNET_OS_INHERIT_STD_IN)
+ {
+ SetHandleInformation (stdih, HANDLE_FLAG_INHERIT, 1);
+ if (pipe_stdin == NULL)
+ start.hStdInput = stdih;
+ }
+ else
+ SetHandleInformation (stdih, HANDLE_FLAG_INHERIT, 0);
+ }
+
+ stdoh = GetStdHandle (STD_OUTPUT_HANDLE);
+ GetHandleInformation (stdoh, &stdof);
if (pipe_stdout != NULL)
{
GNUNET_DISK_internal_file_handle_ (GNUNET_DISK_pipe_handle
@@ -1102,7 +1139,31 @@
&stdout_handle, sizeof (HANDLE));
start.hStdOutput = stdout_handle;
}
+ if (stdoh)
+ {
+ if (std_inheritance & GNUNET_OS_INHERIT_STD_OUT)
+ {
+ SetHandleInformation (stdoh, HANDLE_FLAG_INHERIT, 1);
+ if (pipe_stdout == NULL)
+ start.hStdOutput = stdoh;
+ }
+ else
+ SetHandleInformation (stdoh, HANDLE_FLAG_INHERIT, 0);
+ }
+ stdeh = GetStdHandle (STD_ERROR_HANDLE);
+ GetHandleInformation (stdeh, &stdef);
+ if (stdeh)
+ {
+ if (std_inheritance & GNUNET_OS_INHERIT_STD_ERR)
+ {
+ SetHandleInformation (stdeh, HANDLE_FLAG_INHERIT, 1);
+ start.hStdError = stdeh;
+ }
+ else
+ SetHandleInformation (stdeh, HANDLE_FLAG_INHERIT, 0);
+ }
+
if (GNUNET_YES == pipe_control)
{
control_pipe =
@@ -1179,24 +1240,36 @@
return NULL;
}
- if (!CreateProcessW (wpath, wcmd, NULL, NULL, TRUE,
- DETACHED_PROCESS | CREATE_SUSPENDED, env_block, NULL, &start, &proc))
+ bresult = CreateProcessW (wpath, wcmd, NULL, NULL, TRUE,
+ DETACHED_PROCESS | CREATE_SUSPENDED, env_block, NULL, &start, &proc);
+ error_code = GetLastError ();
+
+ if ((NULL == pipe_stdin) && (stdih))
+ SetHandleInformation (stdih, HANDLE_FLAG_INHERIT, stdif);
+
+
+ if ((NULL == pipe_stdout) && (stdoh))
+ SetHandleInformation (stdoh, HANDLE_FLAG_INHERIT, stdof);
+
+ if (stdeh)
+ SetHandleInformation (stdeh, HANDLE_FLAG_INHERIT, stdef);
+
+ GNUNET_free (env_block);
+ GNUNET_free (cmd);
+ free (wpath);
+ free (wcmd);
+
+ if (!bresult)
{
- SetErrnoFromWinError (GetLastError ());
+ SetErrnoFromWinError (error_code);
LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "CreateProcess");
if (NULL != control_pipe)
GNUNET_DISK_file_close (control_pipe);
if (NULL != lsocks)
GNUNET_DISK_pipe_close (lsocks_pipe);
- GNUNET_free (env_block);
- GNUNET_free (cmd);
- free (wpath);
- free (wcmd);
return NULL;
}
- GNUNET_free (env_block);
-
gnunet_proc = GNUNET_malloc (sizeof (struct GNUNET_OS_Process));
gnunet_proc->pid = proc.dwProcessId;
gnunet_proc->handle = proc.hProcess;
@@ -1206,9 +1279,6 @@
ResumeThread (proc.hThread);
CloseHandle (proc.hThread);
- GNUNET_free (cmd);
- free (wpath);
- free (wcmd);
if (lsocks == NULL || lsocks[0] == INVALID_SOCKET)
return gnunet_proc;
@@ -1300,6 +1370,7 @@
* Start a process.
*
* @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
* @param pipe_stdin pipe to use to send input to child process (or NULL)
* @param pipe_stdout pipe to use to get output from child process (or NULL)
* @param filename name of the binary
@@ -1308,12 +1379,14 @@
*/
struct GNUNET_OS_Process *
GNUNET_OS_start_process_vap (int pipe_control,
+ enum GNUNET_OS_InheritStdioFlags std_inheritance,
struct GNUNET_DISK_PipeHandle *pipe_stdin,
struct GNUNET_DISK_PipeHandle *pipe_stdout,
const char *filename,
char *const argv[])
{
return start_process (pipe_control,
+ std_inheritance,
pipe_stdin,
pipe_stdout,
NULL,
@@ -1326,6 +1399,7 @@
* Start a process.
*
* @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
* @param pipe_stdin pipe to use to send input to child process (or NULL)
* @param pipe_stdout pipe to use to get output from child process (or NULL)
* @param filename name of the binary
@@ -1334,6 +1408,7 @@
*/
struct GNUNET_OS_Process *
GNUNET_OS_start_process_va (int pipe_control,
+ enum GNUNET_OS_InheritStdioFlags std_inheritance,
struct GNUNET_DISK_PipeHandle *pipe_stdin,
struct GNUNET_DISK_PipeHandle *pipe_stdout,
const char *filename, va_list va)
@@ -1355,6 +1430,7 @@
argc++;
va_end (ap);
ret = GNUNET_OS_start_process_vap (pipe_control,
+ std_inheritance,
pipe_stdin,
pipe_stdout,
filename,
@@ -1369,6 +1445,7 @@
* Start a process.
*
* @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
* @param pipe_stdin pipe to use to send input to child process (or NULL)
* @param pipe_stdout pipe to use to get output from child process (or NULL)
* @param filename name of the binary
@@ -1379,6 +1456,7 @@
*/
struct GNUNET_OS_Process *
GNUNET_OS_start_process (int pipe_control,
+ enum GNUNET_OS_InheritStdioFlags std_inheritance,
struct GNUNET_DISK_PipeHandle *pipe_stdin,
struct GNUNET_DISK_PipeHandle *pipe_stdout,
const char *filename, ...)
@@ -1387,7 +1465,8 @@
va_list ap;
va_start (ap, filename);
- ret = GNUNET_OS_start_process_va (pipe_control, pipe_stdin, pipe_stdout,
filename, ap);
+ ret = GNUNET_OS_start_process_va (pipe_control, std_inheritance, pipe_stdin,
+ pipe_stdout, filename, ap);
va_end (ap);
return ret;
}
@@ -1405,11 +1484,13 @@
*/
struct GNUNET_OS_Process *
GNUNET_OS_start_process_v (int pipe_control,
+ enum GNUNET_OS_InheritStdioFlags std_inheritance,
const SOCKTYPE *lsocks,
const char *filename,
char *const argv[])
{
return start_process (pipe_control,
+ std_inheritance,
NULL,
NULL,
lsocks,
@@ -1723,7 +1804,8 @@
if (NULL == opipe)
return NULL;
va_start (ap, binary);
- eip = GNUNET_OS_start_process_va (GNUNET_NO, NULL, opipe, binary, ap);
+ /* redirect stdout, don't inherit stderr/stdin */
+ eip = GNUNET_OS_start_process_va (GNUNET_NO, 0, NULL, opipe, binary, ap);
va_end (ap);
if (NULL == eip)
{
Modified: gnunet/src/util/test_common_logging_runtime_loglevels.c
===================================================================
--- gnunet/src/util/test_common_logging_runtime_loglevels.c 2012-07-09
18:48:44 UTC (rev 22577)
+++ gnunet/src/util/test_common_logging_runtime_loglevels.c 2012-07-09
19:04:19 UTC (rev 22578)
@@ -317,7 +317,7 @@
break;
}
- proc = GNUNET_OS_start_process (GNUNET_NO, NULL, pipe_stdout,
+ proc = GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, pipe_stdout,
#if MINGW
"test_common_logging_dummy",
#else
Modified: gnunet/src/util/test_os_start_process.c
===================================================================
--- gnunet/src/util/test_os_start_process.c 2012-07-09 18:48:44 UTC (rev
22577)
+++ gnunet/src/util/test_os_start_process.c 2012-07-09 19:04:19 UTC (rev
22578)
@@ -131,7 +131,7 @@
}
proc =
- GNUNET_OS_start_process (GNUNET_NO, hello_pipe_stdin, hello_pipe_stdout,
fn,
+ GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_ERR,
hello_pipe_stdin, hello_pipe_stdout, fn,
"test_gnunet_echo_hello", "-", NULL);
GNUNET_free (fn);
@@ -200,7 +200,7 @@
return 1;
}
proc =
- GNUNET_OS_start_process (GNUNET_YES, hello_pipe_stdin, hello_pipe_stdout,
fn,
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_ERR,
hello_pipe_stdin, hello_pipe_stdout, fn,
"gnunet-service-resolver", "-", NULL);
sleep (1); /* give process time to start, so we actually use the pipe-kill
mechanism! */
if (0 != GNUNET_OS_process_kill (proc, SIGTERM))
@@ -233,7 +233,7 @@
return 1;
}
proc =
- GNUNET_OS_start_process (GNUNET_YES, hello_pipe_stdin, hello_pipe_stdout,
fn,
+ GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_ERR,
hello_pipe_stdin, hello_pipe_stdout, fn,
"gnunet-service-resolver", "-", NULL);
if (0 != GNUNET_OS_process_kill (proc, SIGTERM))
{
Modified: gnunet/src/util/test_resolver_api.c
===================================================================
--- gnunet/src/util/test_resolver_api.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/util/test_resolver_api.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -370,7 +370,7 @@
pfx = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_BINDIR);
GNUNET_asprintf (&fn, "%s%cgnunet-service-resolver", pfx, DIR_SEPARATOR);
GNUNET_free (pfx);
- proc = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, fn,
"gnunet-service-resolver",
+ proc = GNUNET_OS_start_process (GNUNET_YES,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, fn, "gnunet-service-resolver",
"-c", "test_resolver_api_data.conf", NULL);
GNUNET_assert (NULL != proc);
GNUNET_free (fn);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r22578 - in gnunet/src: arm chat core fs hostlist include nat statistics testbed testing testing_old transport util,
gnunet <=