aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs/link.c
diff options
context:
space:
mode:
authorSteve French <sfrench@us.ibm.com>2008-05-14 21:50:56 -0400
committerSteve French <sfrench@us.ibm.com>2008-05-14 21:50:56 -0400
commit646dd539878a194bc14b104621c0b2b33587e40f (patch)
treeba3e9a8a9565e66ea53905b209438fae6d413853 /fs/cifs/link.c
parent35fc37d5175091c36d034a28c057da0f9594ee7e (diff)
[CIFS] Fix paths when share is in DFS to include proper prefix
Some versions of Samba (3.2-pre e.g.) are stricter about checking to make sure that paths in DFS name spaces are sent in the form \\server\share\dir\subdir ... instead of \dir\subdir Acked-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs/cifs/link.c')
-rw-r--r--fs/cifs/link.c42
1 files changed, 3 insertions, 39 deletions
diff --git a/fs/cifs/link.c b/fs/cifs/link.c
index 1c2c3ce5020b..316f9830ce3b 100644
--- a/fs/cifs/link.c
+++ b/fs/cifs/link.c
@@ -295,45 +295,9 @@ cifs_readlink(struct dentry *direntry, char __user *pBuffer, int buflen)
295 cFYI(1, ("Error closing junction point " 295 cFYI(1, ("Error closing junction point "
296 "(open for ioctl)")); 296 "(open for ioctl)"));
297 } 297 }
298 /* BB unwind this long, nested function, or remove BB */ 298 /* If it is a DFS junction earlier we would have gotten
299 if (rc == -EIO) { 299 PATH_NOT_COVERED returned from server so we do
300 /* Query if DFS Junction */ 300 not need to request the DFS info here */
301 unsigned int num_referrals = 0;
302 struct dfs_info3_param *refs = NULL;
303 tmp_path =
304 kmalloc(MAX_TREE_SIZE + MAX_PATHCONF + 1,
305 GFP_KERNEL);
306 if (tmp_path) {
307 strncpy(tmp_path, pTcon->treeName,
308 MAX_TREE_SIZE);
309 strncat(tmp_path, full_path,
310 MAX_PATHCONF);
311 rc = get_dfs_path(xid, pTcon->ses,
312 tmp_path,
313 cifs_sb->local_nls,
314 &num_referrals, &refs,
315 cifs_sb->mnt_cifs_flags &
316 CIFS_MOUNT_MAP_SPECIAL_CHR);
317 cFYI(1, ("Get DFS for %s rc = %d ",
318 tmp_path, rc));
319 if ((num_referrals == 0) && (rc == 0))
320 rc = -EACCES;
321 else {
322 cFYI(1, ("num referral: %d",
323 num_referrals));
324 if (refs && refs->path_name) {
325 strncpy(tmpbuffer,
326 refs->path_name,
327 len-1);
328 }
329 }
330 kfree(refs);
331 kfree(tmp_path);
332}
333 /* BB add code like else decode referrals
334 then memcpy to tmpbuffer and free referrals
335 string array BB */
336 }
337 } 301 }
338 } 302 }
339 /* BB Anything else to do to handle recursive links? */ 303 /* BB Anything else to do to handle recursive links? */