NTSTATUS gpo_sync_directories(TALLOC_CTX *mem_ctx, struct smbcli_state *cli, const char *nt_path, const char *local_path) { struct sync_context ctx; ctx.mem_ctx = mem_ctx; ctx.cli = cli; ctx.remote_path = discard_const_p(char, nt_path); ctx.local_path = discard_const_p(char, local_path); ctx.attribute = (FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY); ctx.mask = talloc_asprintf(mem_ctx, "%s\\*", nt_path); if (!ctx.mask) { return NT_STATUS_NO_MEMORY; } if (!gpo_sync_files(&ctx)) { return NT_STATUS_NO_SUCH_FILE; } return NT_STATUS_OK; }
NTSTATUS gpo_sync_directories(TALLOC_CTX *mem_ctx, struct cli_state *cli, const char *nt_path, const char *local_path) { struct sync_context ctx; ctx.mem_ctx = mem_ctx; ctx.cli = cli; ctx.remote_path = CONST_DISCARD(char *, nt_path); ctx.local_path = CONST_DISCARD(char *, local_path); ctx.attribute = (aSYSTEM | aHIDDEN | aDIR); pstrcpy(ctx.mask, nt_path); pstrcat(ctx.mask, "\\*"); if (!gpo_sync_files(&ctx)) { return NT_STATUS_NO_SUCH_FILE; } return NT_STATUS_OK; }
static void gpo_sync_func(const char *mnt, file_info *info, const char *mask, void *state) { NTSTATUS result; struct sync_context *ctx; fstring nt_filename, unix_filename; fstring nt_dir, unix_dir; char *old_nt_dir, *old_unix_dir; ctx = (struct sync_context *)state; if (strequal(info->name, ".") || strequal(info->name, "..")) { return; } DEBUG(5,("gpo_sync_func: got mask: [%s], name: [%s]\n", mask, info->name)); if (info->mode & aDIR) { DEBUG(3,("got dir: [%s]\n", info->name)); fstrcpy(nt_dir, ctx->remote_path); fstrcat(nt_dir, "\\"); fstrcat(nt_dir, info->name); fstrcpy(unix_dir, ctx->local_path); fstrcat(unix_dir, "/"); fstrcat(unix_dir, info->name); result = gpo_copy_dir(unix_dir); if (!NT_STATUS_IS_OK(result)) { DEBUG(1,("failed to copy dir: %s\n", nt_errstr(result))); } old_nt_dir = ctx->remote_path; ctx->remote_path = nt_dir; old_unix_dir = ctx->local_path; ctx->local_path = talloc_strdup(ctx->mem_ctx, unix_dir); pstrcpy(ctx->mask, nt_dir); pstrcat(ctx->mask, "\\*"); if (!gpo_sync_files(ctx)) { DEBUG(0,("could not sync files\n")); } ctx->remote_path = old_nt_dir; ctx->local_path = old_unix_dir; return; } DEBUG(3,("got file: [%s]\n", info->name)); fstrcpy(nt_filename, ctx->remote_path); fstrcat(nt_filename, "\\"); fstrcat(nt_filename, info->name); fstrcpy(unix_filename, ctx->local_path); fstrcat(unix_filename, "/"); fstrcat(unix_filename, info->name); result = gpo_copy_file(ctx->mem_ctx, ctx->cli, nt_filename, unix_filename); if (!NT_STATUS_IS_OK(result)) { DEBUG(1,("failed to copy file: %s\n", nt_errstr(result))); } }
static NTSTATUS gpo_sync_func(const char *mnt, struct file_info *info, const char *mask, void *state) { NTSTATUS result; struct sync_context *ctx; fstring nt_filename, unix_filename; fstring nt_dir, unix_dir; char *old_nt_dir, *old_unix_dir; ctx = (struct sync_context *)state; if (strequal(info->name, ".") || strequal(info->name, "..")) { return NT_STATUS_OK; } DEBUG(5,("gpo_sync_func: got mask: [%s], name: [%s]\n", mask, info->name)); if (info->mode & FILE_ATTRIBUTE_DIRECTORY) { DEBUG(3,("got dir: [%s]\n", info->name)); fstrcpy(nt_dir, ctx->remote_path); fstrcat(nt_dir, "\\"); fstrcat(nt_dir, info->name); fstrcpy(unix_dir, ctx->local_path); fstrcat(unix_dir, "/"); fstrcat(unix_dir, info->name); result = gpo_copy_dir(unix_dir); if (!NT_STATUS_IS_OK(result)) { DEBUG(1,("failed to copy dir: %s\n", nt_errstr(result))); return result; } old_nt_dir = ctx->remote_path; ctx->remote_path = talloc_strdup(ctx->mem_ctx, nt_dir); old_unix_dir = ctx->local_path; ctx->local_path = talloc_strdup(ctx->mem_ctx, unix_dir); ctx->mask = talloc_asprintf(ctx->mem_ctx, "%s\\*", nt_dir); if (!ctx->local_path || !ctx->mask || !ctx->remote_path) { DEBUG(0,("gpo_sync_func: ENOMEM\n")); return NT_STATUS_NO_MEMORY; } result = gpo_sync_files(ctx); if (!NT_STATUS_IS_OK(result)) { DEBUG(0,("could not sync files\n")); return result; } ctx->remote_path = old_nt_dir; ctx->local_path = old_unix_dir; return NT_STATUS_OK; } DEBUG(3,("got file: [%s]\n", info->name)); fstrcpy(nt_filename, ctx->remote_path); fstrcat(nt_filename, "\\"); fstrcat(nt_filename, info->name); fstrcpy(unix_filename, ctx->local_path); fstrcat(unix_filename, "/"); fstrcat(unix_filename, info->name); result = gpo_copy_file(ctx->mem_ctx, ctx->cli, nt_filename, unix_filename); if (!NT_STATUS_IS_OK(result)) { DEBUG(1,("failed to copy file: %s\n", nt_errstr(result))); } return result; }
static void gpo_sync_func(struct clilist_file_info *info, const char *mask, void *state) { NTSTATUS result; struct sync_context *ctx; char *nt_filename, *unix_filename; char *nt_dir, *unix_dir; char *old_nt_dir, *old_unix_dir; ctx = (struct sync_context *)state; if (strequal(info->name, ".") || strequal(info->name, "..")) { return; } DEBUG(5,("gpo_sync_func: got mask: [%s], name: [%s]\n", mask, info->name)); if (info->attrib & FILE_ATTRIBUTE_DIRECTORY) { DEBUG(3,("got dir: [%s]\n", info->name)); nt_dir = talloc_asprintf(ctx->mem_ctx, "%s\\%s", ctx->remote_path, info->name); unix_dir = talloc_asprintf(ctx->mem_ctx, "%s/%s", ctx->local_path, info->name); result = gpo_copy_dir(nt_dir, unix_dir); if (!NT_STATUS_IS_OK(result)) { DEBUG(1,("failed to copy dir: %s\n", nt_errstr(result))); } old_nt_dir = ctx->remote_path; ctx->remote_path = talloc_strdup(ctx->mem_ctx, nt_dir); old_unix_dir = ctx->local_path; ctx->local_path = talloc_strdup(ctx->mem_ctx, unix_dir); ctx->mask = talloc_asprintf(ctx->mem_ctx, "%s\\*", nt_dir); if (!ctx->local_path || !ctx->mask || !ctx->remote_path) { DEBUG(0,("gpo_sync_func: ENOMEM\n")); return; } if (!gpo_sync_files(ctx)) { DEBUG(0,("could not sync files\n")); } ctx->remote_path = old_nt_dir; ctx->local_path = old_unix_dir; return; } DEBUG(3,("got file: [%s]\n", info->name)); nt_filename = talloc_asprintf(ctx->mem_ctx, "%s\\%s", ctx->remote_path, info->name); unix_filename = talloc_asprintf(ctx->mem_ctx, "%s/%s", ctx->local_path, info->name); result = gpo_copy_file(ctx->mem_ctx, ctx->cli, nt_filename, unix_filename); if (!NT_STATUS_IS_OK(result)) { DEBUG(1,("failed to copy file: %s\n", nt_errstr(result))); } }