svn commit: samba r5521 - in branches/SAMBA_3_0/source/libsmb: .

jerry at samba.org jerry at samba.org
Wed Feb 23 20:00:33 GMT 2005


Author: jerry
Date: 2005-02-23 20:00:26 +0000 (Wed, 23 Feb 2005)
New Revision: 5521

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=5521

Log:
allow smbclient to follow multiple leveles of dfs referrals (no loop checking currently)
Modified:
   branches/SAMBA_3_0/source/libsmb/clidfs.c


Changeset:
Modified: branches/SAMBA_3_0/source/libsmb/clidfs.c
===================================================================
--- branches/SAMBA_3_0/source/libsmb/clidfs.c	2005-02-23 19:26:32 UTC (rev 5520)
+++ branches/SAMBA_3_0/source/libsmb/clidfs.c	2005-02-23 20:00:26 UTC (rev 5521)
@@ -235,56 +235,9 @@
 	return True;
 }
 
-#if 0
 /********************************************************************
 ********************************************************************/
 
-BOOL cli_dfs_handle_referral( struct cli_state *cli, const char *path )
-{
-	struct cli_state *cli_ipc;
-	pstring fullpath;
-	CLIENT_DFS_REFERRAL *refs = NULL;
-	size_t num_refs;
-	uint16 consumed;
-	fstring server, share;
-				
-	if ( !cli_dfs_check_error(cli) )
-		return False;
-						
-	if ( !(cli_ipc = cli_cm_open( cli->desthost, "IPC$", False )) )
-		return False;
-				
-	make_full_path( fullpath, cli->desthost, cli->share, path );
-	
-	if ( !cli_dfs_get_referral( cli_ipc, fullpath, &refs, &num_refs, &consumed ) ) {
-		d_printf("cli_get_dfs_referral() failed!\n");
-		/* reset the current client connection */
-		cli_cm_open( cli->desthost, cli->share, False );
-		
-		return False;
-	}
-				
-	/* just pick the first one */
-	if ( num_refs ) {
-		split_dfs_path( refs[0].alternate_path, server, share );
-		if ( cli_cm_open( server, share, False ) == NULL ) {
-			d_printf("Unable to follow dfs referral [\\\\%s\\%s]\n",
-				server, share );
-			cli_cm_open( cli->desthost, cli->share, False );
-			
-			return False;
-		}
-	}
-		
-	SAFE_FREE( refs );
-	
-	return True;
-}
-#endif
-
-/********************************************************************
-********************************************************************/
-
 BOOL cli_resolve_path( struct cli_state *rootcli, const char *path,
                        struct cli_state **targetcli, pstring targetpath )
 {
@@ -295,6 +248,8 @@
 	pstring fullpath, cleanpath;
 	int pathlen;
 	fstring server, share;
+	struct cli_state *newcli;
+	pstring newpath;
 	
 	SMB_STRUCT_STAT sbuf;
 	uint32 attributes;
@@ -350,6 +305,14 @@
 			
 		return False;
 	}
+
+	/* check for another dfs refeerrali, note that we are not 
+	   checking for loops here */
+
+	if ( cli_resolve_path( *targetcli, targetpath, &newcli, newpath ) ) {
+		*targetcli = newcli;
+		pstrcpy( targetpath, newpath );
+	}
 	
 	return True;
 }



More information about the samba-cvs mailing list