summaryrefslogtreecommitdiff
path: root/source3/libsmb/clidfs.c
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2005-02-23 20:00:26 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 10:55:44 -0500
commitca9d4c13db2bdd629bf9b97f77c3cb89c4df8676 (patch)
tree3abd0e6da72119904de010ba3e34d69ce5a82801 /source3/libsmb/clidfs.c
parent1b0f75ddfb8ed296ca0166f0606bfc108584b833 (diff)
downloadsamba-ca9d4c13db2bdd629bf9b97f77c3cb89c4df8676.tar.gz
samba-ca9d4c13db2bdd629bf9b97f77c3cb89c4df8676.tar.bz2
samba-ca9d4c13db2bdd629bf9b97f77c3cb89c4df8676.zip
r5521: allow smbclient to follow multiple leveles of dfs referrals (no loop checking currently)
(This used to be commit 3c09b1f30f8b85036c487fdaf7fca11886bc90d7)
Diffstat (limited to 'source3/libsmb/clidfs.c')
-rw-r--r--source3/libsmb/clidfs.c57
1 files changed, 10 insertions, 47 deletions
diff --git a/source3/libsmb/clidfs.c b/source3/libsmb/clidfs.c
index ea66eba998..ea5d1d1acb 100644
--- a/source3/libsmb/clidfs.c
+++ b/source3/libsmb/clidfs.c
@@ -235,53 +235,6 @@ BOOL cli_dfs_get_referral( struct cli_state *cli, const char *path,
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
-
/********************************************************************
********************************************************************/
@@ -295,6 +248,8 @@ BOOL cli_resolve_path( struct cli_state *rootcli, const char *path,
pstring fullpath, cleanpath;
int pathlen;
fstring server, share;
+ struct cli_state *newcli;
+ pstring newpath;
SMB_STRUCT_STAT sbuf;
uint32 attributes;
@@ -350,6 +305,14 @@ BOOL cli_resolve_path( struct cli_state *rootcli, const char *path,
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;
}