doveadm-fs.c revision a601cdf61506674a681195acfe57c9864bd3f7ac
bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2013 Dovecot authors, see the included COPYING file */
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschstatic void fs_cmd_help(doveadm_command_t *cmd);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschstatic void cmd_fs_delete(int argc, char *argv[]);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschstatic struct fs *
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschcmd_fs_init(int *argc, char **argv[], int own_arg_count, doveadm_command_t *cmd)
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch ssl_set.ca_dir = doveadm_settings->ssl_client_ca_dir;
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch ssl_set.ca_file = doveadm_settings->ssl_client_ca_file;
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch if (fs_init((*argv)[1], (*argv)[2], &fs_set, &fs, &error) < 0)
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch const unsigned char *data;
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch fs = cmd_fs_init(&argc, &argv, 1, cmd_fs_get);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch file = fs_file_init(fs, argv[0], FS_OPEN_MODE_READONLY);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch while ((ret = i_stream_read_data(input, &data, &size, 0)) > 0) {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch i_error("%s doesn't exist", fs_file_path(file));
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch i_error("read(%s) failed: %m", fs_file_path(file));
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch fs = cmd_fs_init(&argc, &argv, 2, cmd_fs_put);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch file = fs_file_init(fs, dest_path, FS_OPEN_MODE_REPLACE);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch input = i_stream_create_file(src_path, IO_BLOCK_SIZE);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch if ((ret = o_stream_send_istream(output, input)) < 0) {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch if (fs_write_stream_finish(file, &output) < 0) {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch i_error("fs_write_stream_finish() failed: %s",
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschstatic void cmd_fs_copy(int argc, char *argv[])
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch fs = cmd_fs_init(&argc, &argv, 2, cmd_fs_copy);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch src_file = fs_file_init(fs, src_path, FS_OPEN_MODE_READONLY);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch dest_file = fs_file_init(fs, dest_path, FS_OPEN_MODE_REPLACE);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschstatic void cmd_fs_stat(int argc, char *argv[])
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch fs = cmd_fs_init(&argc, &argv, 1, cmd_fs_stat);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch file = fs_file_init(fs, argv[0], FS_OPEN_MODE_READONLY);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch i_error("%s doesn't exist", fs_file_path(file));
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch fs_file_path(file), fs_file_last_error(file));
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschstatic void cmd_fs_metadata(int argc, char *argv[])
const struct fs_metadata *m;
} T_END;
} T_END;
const char *fname;
i_unreached();
void doveadm_register_fs_commands(void)