If stdinargs is non-NULL, that is where we put additional args */
| 71 | |
| 72 | /* If stdinargs is non-NULL, that is where we put additional args */ |
| 73 | static const char **gather_argsv(const tal_t *ctx, const char ***stdinargs, const char *cmd, va_list ap) |
| 74 | { |
| 75 | const char **args = tal_arr(ctx, const char *, 1); |
| 76 | const char *arg; |
| 77 | |
| 78 | args[0] = bitcoind->cli ? bitcoind->cli : chainparams->cli; |
| 79 | if (chainparams->cli_args) |
| 80 | add_arg(&args, chainparams->cli_args); |
| 81 | if (bitcoind->datadir) |
| 82 | add_arg(&args, tal_fmt(args, "-datadir=%s", bitcoind->datadir)); |
| 83 | if (bitcoind->rpcclienttimeout) { |
| 84 | /* Use the maximum value of rpcclienttimeout and retry_timeout to avoid |
| 85 | the bitcoind backend hanging for too long. */ |
| 86 | if (bitcoind->retry_timeout && |
| 87 | bitcoind->retry_timeout > bitcoind->rpcclienttimeout) |
| 88 | bitcoind->rpcclienttimeout = bitcoind->retry_timeout; |
| 89 | |
| 90 | add_arg(&args, |
| 91 | tal_fmt(args, "-rpcclienttimeout=%"PRIu64, bitcoind->rpcclienttimeout)); |
| 92 | } |
| 93 | if (bitcoind->rpcconnect) |
| 94 | add_arg(&args, |
| 95 | tal_fmt(args, "-rpcconnect=%s", bitcoind->rpcconnect)); |
| 96 | if (bitcoind->rpcport) |
| 97 | add_arg(&args, |
| 98 | tal_fmt(args, "-rpcport=%s", bitcoind->rpcport)); |
| 99 | if (bitcoind->rpcuser) |
| 100 | add_arg(&args, tal_fmt(args, "-rpcuser=%s", bitcoind->rpcuser)); |
| 101 | if (bitcoind->rpcpass) |
| 102 | // Always pipe the rpcpassword via stdin. Do not pass it using an |
| 103 | // `-rpcpassword` argument - secrets in arguments can leak when listing |
| 104 | // system processes. |
| 105 | add_arg(&args, "-stdinrpcpass"); |
| 106 | /* To avoid giant command lines, we use -stdin (avail since bitcoin 0.13) */ |
| 107 | if (stdinargs) |
| 108 | add_arg(&args, "-stdin"); |
| 109 | |
| 110 | add_arg(&args, cmd); |
| 111 | while ((arg = va_arg(ap, char *)) != NULL) { |
| 112 | if (stdinargs) |
| 113 | add_arg(stdinargs, arg); |
| 114 | else |
| 115 | add_arg(&args, arg); |
| 116 | } |
| 117 | add_arg(&args, NULL); |
| 118 | |
| 119 | return args; |
| 120 | } |
| 121 | |
| 122 | static LAST_ARG_NULL const char ** |
| 123 | gather_args(const tal_t *ctx, const char ***stdinargs, const char *cmd, ...) |
no test coverage detected