Fixes bugs reported in libsmbclient.
Jeremy.
}
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;
/****************************************************************************
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;
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);
****************************************************************************/
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;
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);
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 );
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;
}
/*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)) {
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 {
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;
}
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 {