BOOL cli_qpathinfo(struct cli_state *cli, const char *fname,
time_t *c_time, time_t *a_time, time_t *m_time,
size_t *size, uint32 *mode);
-BOOL cli_qpathinfo2(struct cli_state *cli, char *fname,
+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, uint32 *size);
+ time_t *w_time, size_t *size, uint32 *mode);
BOOL cli_qfileinfo(struct cli_state *cli, int fnum,
uint32 *mode, size_t *size,
time_t *c_time, time_t *a_time, time_t *m_time);
/****************************************************************************
send a qpathinfo call with the SMB_QUERY_FILE_ALL_INFO info level
****************************************************************************/
-BOOL cli_qpathinfo2(struct cli_state *cli, char *fname,
+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, uint32 *size)
+ time_t *w_time, size_t *size, uint32 *mode)
{
int data_len = 0;
int param_len = 0;
if (size) {
*size = IVAL(rdata, 40);
}
+ if (mode) {
+ *mode = IVAL(rdata, 32);
+ }
if (rdata) free(rdata);
if (rparam) free(rparam);
char *server_name;
char *share_name;
dev_t dev;
+ BOOL no_pathinfo2;
};
struct smbw_filedes {
{
DEBUG(5,("sending qpathinfo\n"));
- if (cli_qpathinfo(&srv->cli, path, c_time, a_time, m_time,
- size, mode)) return True;
-
- DEBUG(5,("qpathinfo OK\n"));
+ if (!srv->no_pathinfo2 &&
+ cli_qpathinfo2(&srv->cli, path, c_time, a_time, m_time, NULL,
+ size, mode)) return True;
/* if this is NT then don't bother with the getatr */
if (srv->cli.capabilities & CAP_NT_SMBS) return False;
if (cli_getatr(&srv->cli, path, mode, size, m_time)) {
a_time = c_time = m_time;
+ srv->no_pathinfo2 = True;
return True;
}
return False;
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)) {
+ &w_time, &size, NULL, NULL)) {
printf("ERROR: qpathinfo2 failed (%s)\n", cli_errstr(&cli));
} else {
if (w_time < 60*60*24*2) {
}
sleep(3);
if (!cli_qpathinfo2(&cli, "\\trans2\\", &c_time, &a_time, &m_time,
- &w_time, &size, NULL)) {
+ &w_time, &size, NULL, NULL)) {
printf("ERROR: qpathinfo2 failed (%s)\n", cli_errstr(&cli));
}
cli_write(&cli, fnum, (char *)&fnum, 0, sizeof(fnum));
cli_close(&cli, fnum);
if (!cli_qpathinfo2(&cli, "\\trans2\\", &c_time, &a_time, &m_time2,
- &w_time, &size, NULL)) {
+ &w_time, &size, NULL, NULL)) {
printf("ERROR: qpathinfo2 failed (%s)\n", cli_errstr(&cli));
} else {
if (m_time2 == m_time)