| 104 | } |
| 105 | |
| 106 | static const char **gather_argsv(const tal_t *ctx, const char *cmd, va_list ap) |
| 107 | { |
| 108 | const char **args = tal_arr(ctx, const char *, 1); |
| 109 | const char *arg; |
| 110 | |
| 111 | args[0] = bitcoind->cli ? bitcoind->cli : chainparams->cli; |
| 112 | if (chainparams->cli_args) |
| 113 | add_arg(&args, chainparams->cli_args); |
| 114 | if (bitcoind->datadir) |
| 115 | add_arg(&args, tal_fmt(args, "-datadir=%s", bitcoind->datadir)); |
| 116 | if (bitcoind->rpcconnect) |
| 117 | add_arg(&args, |
| 118 | tal_fmt(args, "-rpcconnect=%s", bitcoind->rpcconnect)); |
| 119 | if (bitcoind->rpcport) |
| 120 | add_arg(&args, |
| 121 | tal_fmt(args, "-rpcport=%s", bitcoind->rpcport)); |
| 122 | if (bitcoind->rpcuser) |
| 123 | add_arg(&args, tal_fmt(args, "-rpcuser=%s", bitcoind->rpcuser)); |
| 124 | if (bitcoind->rpcpass) |
| 125 | // Always pipe the rpcpassword via stdin. Do not pass it using an |
| 126 | // `-rpcpassword` argument - secrets in arguments can leak when listing |
| 127 | // system processes. |
| 128 | add_arg(&args, "-stdinrpcpass"); |
| 129 | |
| 130 | add_arg(&args, cmd); |
| 131 | while ((arg = va_arg(ap, char *)) != NULL) |
| 132 | add_arg(&args, arg); |
| 133 | add_arg(&args, NULL); |
| 134 | |
| 135 | return args; |
| 136 | } |
| 137 | |
| 138 | static LAST_ARG_NULL const char ** |
| 139 | gather_args(const tal_t *ctx, const char *cmd, ...) |
no test coverage detected