summaryrefslogtreecommitdiff
path: root/source3/client
diff options
context:
space:
mode:
Diffstat (limited to 'source3/client')
-rw-r--r--source3/client/client.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/source3/client/client.c b/source3/client/client.c
index 062809d1b6..b3bbcf5cd7 100644
--- a/source3/client/client.c
+++ b/source3/client/client.c
@@ -1633,8 +1633,11 @@ static int do_allinfo(const char *name)
uint16_t mode;
SMB_INO_T ino;
NTTIME tmp;
+ uint16_t fnum;
unsigned int num_streams;
struct stream_struct *streams;
+ int num_snapshots;
+ char **snapshots;
unsigned int i;
NTSTATUS status;
@@ -1681,6 +1684,49 @@ static int do_allinfo(const char *name)
(unsigned long long)streams[i].size);
}
+ status = cli_open(cli, name, O_RDONLY, DENY_NONE, &fnum);
+ if (!NT_STATUS_IS_OK(status)) {
+ /*
+ * Ignore failure, it does not hurt if we can't list
+ * snapshots
+ */
+ return 0;
+ }
+ status = cli_shadow_copy_data(talloc_tos(), cli, fnum,
+ true, &snapshots, &num_snapshots);
+ if (!NT_STATUS_IS_OK(status)) {
+ cli_close(cli, fnum);
+ return 0;
+ }
+
+ for (i=0; i<num_snapshots; i++) {
+ char *snap_name;
+
+ d_printf("%s\n", snapshots[i]);
+ snap_name = talloc_asprintf(talloc_tos(), "%s%s",
+ snapshots[i], name);
+ status = cli_qpathinfo2(cli, snap_name, &b_time, &a_time,
+ &m_time, &c_time, &size,
+ NULL, NULL);
+ if (!NT_STATUS_IS_OK(status)) {
+ d_fprintf(stderr, "pathinfo(%s) failed: %s\n",
+ snap_name, nt_errstr(status));
+ TALLOC_FREE(snap_name);
+ continue;
+ }
+ unix_timespec_to_nt_time(&tmp, b_time);
+ d_printf("create_time: %s\n", nt_time_string(talloc_tos(), tmp));
+ unix_timespec_to_nt_time(&tmp, a_time);
+ d_printf("access_time: %s\n", nt_time_string(talloc_tos(), tmp));
+ unix_timespec_to_nt_time(&tmp, m_time);
+ d_printf("write_time: %s\n", nt_time_string(talloc_tos(), tmp));
+ unix_timespec_to_nt_time(&tmp, c_time);
+ d_printf("change_time: %s\n", nt_time_string(talloc_tos(), tmp));
+ d_printf("size: %d\n", (int)size);
+ }
+
+ TALLOC_FREE(snapshots);
+
return 0;
}