summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2006-08-23 22:33:50 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 11:38:47 -0500
commitaee6b5942a3418b9d9a9a73fa33c21d5e4e18df8 (patch)
tree43ec6a3cd1b0a7c5664addc495e0975bd836a60b
parentfddeed8adba8004e4bb5678e07461382f6a5124b (diff)
downloadsamba-aee6b5942a3418b9d9a9a73fa33c21d5e4e18df8.tar.gz
samba-aee6b5942a3418b9d9a9a73fa33c21d5e4e18df8.tar.bz2
samba-aee6b5942a3418b9d9a9a73fa33c21d5e4e18df8.zip
r17761: Handle times consistently across all client utils.
Fixes bugs reported in libsmbclient. Jeremy. (This used to be commit 42a417fb75313b093948602c3be8e2f386048b5f)
-rw-r--r--source3/libsmb/clilist.c18
-rw-r--r--source3/libsmb/clirap.c47
-rw-r--r--source3/libsmb/libsmbclient.c4
-rw-r--r--source3/torture/torture.c12
4 files changed, 34 insertions, 47 deletions
diff --git a/source3/libsmb/clilist.c b/source3/libsmb/clilist.c
index a006c47ae0..b022a107d0 100644
--- a/source3/libsmb/clilist.c
+++ b/source3/libsmb/clilist.c
@@ -94,27 +94,13 @@ static size_t interpret_long_filename(struct cli_state *cli, int level,char *p,f
}
p += 4; /* fileindex */
- /* these dates appear to arrive in a
- weird way. It seems to be localtime
- plus the serverzone given in the
- initial connect. This is GMT when
- DST is not in effect and one hour
- from GMT otherwise. Can this really
- be right??
-
- I suppose this could be called
- kludge-GMT. Is is the GMT you get
- by using the current DST setting on
- a different localtime. It will be
- cheap to calculate, I suppose, as
- no DST tables will be needed */
-
- finfo->ctime = interpret_long_date(p);
+ /* Offset zero is "create time", not "change time". */
p += 8;
finfo->atime = interpret_long_date(p);
p += 8;
finfo->mtime = interpret_long_date(p);
p += 8;
+ finfo->ctime = interpret_long_date(p);
p += 8;
finfo->size = IVAL2_TO_SMB_BIG_UINT(p,0);
p += 8;
diff --git a/source3/libsmb/clirap.c b/source3/libsmb/clirap.c
index a33baed536..1227b26b2f 100644
--- a/source3/libsmb/clirap.c
+++ b/source3/libsmb/clirap.c
@@ -553,9 +553,10 @@ BOOL cli_setpathinfo(struct cli_state *cli, const char *fname,
/****************************************************************************
send a qpathinfo call with the SMB_QUERY_FILE_ALL_INFO info level
****************************************************************************/
+
BOOL cli_qpathinfo2(struct cli_state *cli, const char *fname,
- time_t *c_time, time_t *a_time, time_t *m_time,
- time_t *w_time, SMB_OFF_T *size, uint16 *mode,
+ time_t *create_time, time_t *access_time, time_t *write_time,
+ time_t *change_time, SMB_OFF_T *size, uint16 *mode,
SMB_INO_T *ino)
{
unsigned int data_len = 0;
@@ -593,17 +594,17 @@ BOOL cli_qpathinfo2(struct cli_state *cli, const char *fname,
return False;
}
- if (c_time) {
- *c_time = interpret_long_date(rdata+0);
+ if (create_time) {
+ *create_time = interpret_long_date(rdata+0);
}
- if (a_time) {
- *a_time = interpret_long_date(rdata+8);
+ if (access_time) {
+ *access_time = interpret_long_date(rdata+8);
}
- if (w_time) {
- *w_time = interpret_long_date(rdata+16);
+ if (write_time) {
+ *write_time = interpret_long_date(rdata+16);
}
- if (m_time) {
- *m_time = interpret_long_date(rdata+24);
+ if (change_time) {
+ *change_time = interpret_long_date(rdata+24);
}
if (mode) {
*mode = SVAL(rdata, 32);
@@ -669,8 +670,8 @@ send a qfileinfo call
****************************************************************************/
BOOL cli_qfileinfo(struct cli_state *cli, int fnum,
uint16 *mode, SMB_OFF_T *size,
- time_t *c_time, time_t *a_time, time_t *m_time,
- time_t *w_time, SMB_INO_T *ino)
+ time_t *create_time, time_t *access_time, time_t *write_time,
+ time_t *change_time, SMB_INO_T *ino)
{
unsigned int data_len = 0;
unsigned int param_len = 0;
@@ -708,17 +709,17 @@ BOOL cli_qfileinfo(struct cli_state *cli, int fnum,
return False;
}
- if (c_time) {
- *c_time = interpret_long_date(rdata+0) - cli->serverzone;
+ if (create_time) {
+ *create_time = interpret_long_date(rdata+0);
}
- if (a_time) {
- *a_time = interpret_long_date(rdata+8) - cli->serverzone;
+ if (access_time) {
+ *access_time = interpret_long_date(rdata+8);
}
- if (m_time) {
- *m_time = interpret_long_date(rdata+16) - cli->serverzone;
+ if (write_time) {
+ *write_time = interpret_long_date(rdata+16);
}
- if (w_time) {
- *w_time = interpret_long_date(rdata+24) - cli->serverzone;
+ if (change_time) {
+ *change_time = interpret_long_date(rdata+24);
}
if (mode) {
*mode = SVAL(rdata, 32);
@@ -793,9 +794,9 @@ BOOL cli_qpathinfo_basic( struct cli_state *cli, const char *name,
return False;
}
- sbuf->st_atime = interpret_long_date( rdata+8 );
- sbuf->st_mtime = interpret_long_date( rdata+16 );
- sbuf->st_ctime = interpret_long_date( rdata+24 );
+ sbuf->st_atime = interpret_long_date( rdata+8 ); /* Access time. */
+ sbuf->st_mtime = interpret_long_date( rdata+16 ); /* Write time. */
+ sbuf->st_ctime = interpret_long_date( rdata+24 ); /* Change time. */
*attributes = IVAL( rdata, 32 );
diff --git a/source3/libsmb/libsmbclient.c b/source3/libsmb/libsmbclient.c
index d9267e72bd..abeb66b373 100644
--- a/source3/libsmb/libsmbclient.c
+++ b/source3/libsmb/libsmbclient.c
@@ -1514,7 +1514,7 @@ smbc_getatr(SMBCCTX * context,
if (!srv->no_pathinfo2 &&
cli_qpathinfo2(targetcli, targetpath,
- c_time, a_time, m_time, NULL, size, mode, ino)) {
+ NULL, a_time, m_time, c_time, size, mode, ino)) {
return True;
}
@@ -2182,7 +2182,7 @@ smbc_fstat_ctx(SMBCCTX *context,
/*d_printf(">>>fstat: resolved path as %s\n", targetpath);*/
if (!cli_qfileinfo(targetcli, file->cli_fd, &mode, &size,
- &c_time, &a_time, &m_time, NULL, &ino)) {
+ NULL, &a_time, &m_time, &c_time, &ino)) {
if (!cli_getattrE(targetcli, file->cli_fd, &mode, &size,
&c_time, &a_time, &m_time)) {
diff --git a/source3/torture/torture.c b/source3/torture/torture.c
index f951b44494..ba13897773 100644
--- a/source3/torture/torture.c
+++ b/source3/torture/torture.c
@@ -2539,8 +2539,8 @@ static BOOL run_trans2test(int dummy)
fnum = cli_open(cli, fname,
O_RDWR | O_CREAT | O_TRUNC, DENY_NONE);
cli_close(cli, fnum);
- if (!cli_qpathinfo2(cli, fname, &c_time, &a_time, &m_time,
- &w_time, &size, NULL, NULL)) {
+ if (!cli_qpathinfo2(cli, fname, &c_time, &a_time, &w_time,
+ &m_time, &size, NULL, NULL)) {
printf("ERROR: qpathinfo2 failed (%s)\n", cli_errstr(cli));
correct = False;
} else {
@@ -2561,8 +2561,8 @@ static BOOL run_trans2test(int dummy)
correct = False;
}
sleep(3);
- if (!cli_qpathinfo2(cli, "\\trans2\\", &c_time, &a_time, &m_time,
- &w_time, &size, NULL, NULL)) {
+ if (!cli_qpathinfo2(cli, "\\trans2\\", &c_time, &a_time, &w_time,
+ &m_time, &size, NULL, NULL)) {
printf("ERROR: qpathinfo2 failed (%s)\n", cli_errstr(cli));
correct = False;
}
@@ -2571,8 +2571,8 @@ static BOOL run_trans2test(int dummy)
O_RDWR | O_CREAT | O_TRUNC, DENY_NONE);
cli_write(cli, fnum, 0, (char *)&fnum, 0, sizeof(fnum));
cli_close(cli, fnum);
- if (!cli_qpathinfo2(cli, "\\trans2\\", &c_time, &a_time, &m_time2,
- &w_time, &size, NULL, NULL)) {
+ if (!cli_qpathinfo2(cli, "\\trans2\\", &c_time, &a_time, &w_time,
+ &m_time2, &size, NULL, NULL)) {
printf("ERROR: qpathinfo2 failed (%s)\n", cli_errstr(cli));
correct = False;
} else {