r5981: Hack to fix DFS code to work with Win98 server. JERRY PLEASE REVIEW THIS !
authorJeremy Allison <jra@samba.org>
Tue, 22 Mar 2005 23:45:57 +0000 (23:45 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:56:14 +0000 (10:56 -0500)
I don't think this is correct - it just happens to work and fix bug #2530
to return all the files.
Jeremy.
(This used to be commit 1ee180a6dd7f8d787396f359a8ff3ed25433357b)

source3/libsmb/clidfs.c

index dcffdf42fe401cb9ede8c3b25ffd9a305b045eb4..e2456800ddc8f071ff615d180549f1af5a5163ad 100644 (file)
@@ -595,8 +595,26 @@ BOOL cli_resolve_path( const char *mountpt, struct cli_state *rootcli, const cha
 
        /* we got an error, check for DFS referral */
                        
-       if ( !cli_dfs_check_error(rootcli) )
+       if ( !cli_dfs_check_error(rootcli) ) {
+               /* Check for Win98 server - doesn't support this call. */
+               uint32 flgs2 = SVAL(rootcli->inbuf,smb_flg2);
+
+               /* only deal with DS when we negotiated NT_STATUS codes and UNICODE */
+
+               if ( !( (flgs2&FLAGS2_32_BIT_ERROR_CODES) && (flgs2&FLAGS2_UNICODE_STRINGS) ) ) {
+                       uint8 eclass = 0;
+                       uint32 ecode = 0;
+                       cli_dos_error(rootcli, &eclass, &ecode);
+                       if ((eclass == ERRDOS) && (ecode == ERRbadfunc)) {
+                               rootcli->dfsroot = 0;
+                               *targetcli = rootcli;
+                               pstrcpy( targetpath, path );
+                               return True;
+                       }
+               }
+
                return False;
+       }
 
        /* check for the referral */