summaryrefslogtreecommitdiffstats
path: root/source3/libsmb
diff options
context:
space:
mode:
authorGregor Beck <gbeck@sernet.de>2013-10-11 11:02:24 +0200
committerJeremy Allison <jra@samba.org>2013-10-30 15:23:51 -0700
commit0a3cc7e25ca54c5dc0b836680668401582b105b0 (patch)
treef50e6ab8240027433a03c9b086a30d72662ca450 /source3/libsmb
parent0abe678af8d763279fd218736e6df29c21b27c5c (diff)
downloadsamba-0a3cc7e25ca54c5dc0b836680668401582b105b0.tar.gz
samba-0a3cc7e25ca54c5dc0b836680668401582b105b0.tar.xz
samba-0a3cc7e25ca54c5dc0b836680668401582b105b0.zip
s3:libsmb: SMBC_getatr use pathinfo3 for second try
The pathinfo2 call might fail against NetApp because it is sending broken packages. Signed-off-by: Gregor Beck <gbeck@sernet.de> Reviewed-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/libsmb')
-rw-r--r--source3/libsmb/libsmb_file.c13
-rw-r--r--source3/libsmb/libsmb_server.c1
2 files changed, 14 insertions, 0 deletions
diff --git a/source3/libsmb/libsmb_file.c b/source3/libsmb/libsmb_file.c
index 09f58105b2..277ca83e33 100644
--- a/source3/libsmb/libsmb_file.c
+++ b/source3/libsmb/libsmb_file.c
@@ -560,6 +560,19 @@ SMBC_getatr(SMBCCTX * context,
srv->no_pathinfo2 = True;
+ if (!srv->no_pathinfo3 &&
+ NT_STATUS_IS_OK(cli_qpathinfo3(targetcli, targetpath,
+ create_time_ts,
+ access_time_ts,
+ write_time_ts,
+ change_time_ts,
+ size, mode, ino))) {
+ TALLOC_FREE(frame);
+ return True;
+ }
+
+ srv->no_pathinfo3 = True;
+
/* if this is NT then don't bother with the getatr */
if (smb1cli_conn_capabilities(targetcli->conn) & CAP_NT_SMBS) {
errno = EPERM;
diff --git a/source3/libsmb/libsmb_server.c b/source3/libsmb/libsmb_server.c
index 9d87f421fb..2f3ea96602 100644
--- a/source3/libsmb/libsmb_server.c
+++ b/source3/libsmb/libsmb_server.c
@@ -606,6 +606,7 @@ SMBC_server_internal(TALLOC_CTX *ctx,
srv->dev = (dev_t)(str_checksum(server) ^ str_checksum(share));
srv->no_pathinfo = False;
srv->no_pathinfo2 = False;
+ srv->no_pathinfo3 = False;
srv->no_nt_session = False;
done: