doveadm-dsync.c revision 183b3fb003600debc52866fca2fcec9a7588978f
b9f30617c2c96d54acbc4f85ed17b939c4f28916Timo Sirainen/* Copyright (c) 2009-2012 Dovecot authors, see the included COPYING file */
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen#define DSYNC_COMMON_GETOPT_ARGS "+adEfm:n:r:Rs:"
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainenstatic void remote_error_input(struct dsync_cmd_context *ctx)
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen while ((line = i_stream_read_next_line(ctx->err_stream)) != NULL)
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen if (ctx->err_stream->eof && ctx->io_err != NULL)
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainenrun_cmd(struct dsync_cmd_context *ctx, const char *const *args)
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen if (pipe(fd_in) < 0 || pipe(fd_out) < 0 || pipe(fd_err) < 0)
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen /* child, which will execute the proxy server. stdin/stdout
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen goes to pipes which we'll pass to proxy client. */
e9e5e84ffb2ce2e606a24ce6d930580367562ff0Timo Sirainen ctx->err_stream = i_stream_create_fd(ctx->fd_err, IO_BLOCK_SIZE, FALSE);
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen i_stream_set_return_partial_line(ctx->err_stream, TRUE);
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainenmirror_get_remote_cmd_line(const char *const *argv,
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen const char *const **cmd_args_r)
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainen unsigned int i;
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen const char *p;
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen /* we're executing dsync */
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainen p = "server";
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen /* we're executing doveadm */
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen p = "dsync-server";
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainenstatic const char *const *
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainenget_ssh_cmd_args(struct dsync_cmd_context *ctx,
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen const char *host, const char *login, const char *mail_user)
a8284e999d091cd29210fa75ecdc8076376a7345Timo Sirainen static struct var_expand_table static_tab[] = {
const char *user,
const char *const **cmd_args_r)
return TRUE;
if (!i_isalnum(*p)) {
return FALSE;
return TRUE;
return TRUE;
int ret;
i_unreached();
if (ret < 0) {
&path1) &&
&path2) &&
static struct dsync_ibc *
int ret = 0;
if (doveadm_debug)
return ret;
const char **error_r)
const char *const args[])
return FALSE;
return FALSE;
return TRUE;
return _ctx;
return FALSE;
return TRUE;
const char *getopt_str;
if (flag_m) {
if (flag_u) {
if (flag_C) {
if (!dsync_server) {
if (flag_f)
if (flag_R)