linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* dfs path construction fixup for / character in \\server\share component of dfs path
@ 2008-04-18 23:03 Steve French
  2008-04-23 14:28 ` Igor Mammedov
  0 siblings, 1 reply; 14+ messages in thread
From: Steve French @ 2008-04-18 23:03 UTC (permalink / raw)
  To: Jeremy Allison, Q (Igor Mammedov), Igor Mammedov, linux-fsdevel

[-- Attachment #1: Type: text/plain, Size: 526 bytes --]

Attached is dfs path construction fixup for / character in
\\server\share component of dfs path.  Let me know if you see any
problem - but it gets Samba past the problem with not returning
STATUS_PATH_NOT_COVERED

similar change will have to be made to build_full_dfs_path_from_dentry
in cifs_dfs_ref.c

This makes it easier for me to test the remainder of the changes
needed to the SMB GetDFSReferral function(s).  Has anyone checked on
the answer to Al's question on submount expiry from a few days ago?

-- 
Thanks,

Steve

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: dfs-slash-in-unc.patch --]
[-- Type: text/x-diff; name=dfs-slash-in-unc.patch, Size: 1768 bytes --]

diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
index bc673c8..e1031b9 100644
--- a/fs/cifs/inode.c
+++ b/fs/cifs/inode.c
@@ -161,12 +161,14 @@ static void cifs_unix_info_to_inode(struct inode *inode,
 	spin_unlock(&inode->i_lock);
 }
 
-static const unsigned char *cifs_get_search_path(struct cifsTconInfo *pTcon,
-					const char *search_path)
+static const unsigned char *cifs_get_search_path(struct cifs_sb_info *cifs_sb,
+						const char *search_path)
 {
 	int tree_len;
 	int path_len;
+	int i;
 	char *tmp_path;
+	struct cifsTconInfo *pTcon = cifs_sb->tcon;
 
 	if (!(pTcon->Flags & SMB_SHARE_IS_IN_DFS))
 		return search_path;
@@ -180,6 +182,11 @@ static const unsigned char *cifs_get_search_path(struct cifsTconInfo *pTcon,
 		return search_path;
 
 	strncpy(tmp_path, pTcon->treeName, tree_len);
+	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
+		for (i = 0; i < tree_len; i++) {
+			if (tmp_path[i] == '\\')
+				tmp_path[i] = '/';
+		}
 	strncpy(tmp_path+tree_len, search_path, path_len);
 	tmp_path[tree_len+path_len] = 0;
 	return tmp_path;
@@ -199,7 +206,7 @@ int cifs_get_inode_info_unix(struct inode **pinode,
 	pTcon = cifs_sb->tcon;
 	cFYI(1, ("Getting info on %s", search_path));
 
-	full_path = cifs_get_search_path(pTcon, search_path);
+	full_path = cifs_get_search_path(cifs_sb, search_path);
 
 try_again_CIFSSMBUnixQPathInfo:
 	/* could have done a find first instead but this returns more info */
@@ -402,7 +409,7 @@ int cifs_get_inode_info(struct inode **pinode,
 			return -ENOMEM;
 		pfindData = (FILE_ALL_INFO *)buf;
 
-		full_path = cifs_get_search_path(pTcon, search_path);
+		full_path = cifs_get_search_path(cifs_sb, search_path);
 
 try_again_CIFSSMBQPathInfo:
 		/* could do find first instead but this returns more info */

^ permalink raw reply related	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2008-05-24  1:33 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-18 23:03 dfs path construction fixup for / character in \\server\share component of dfs path Steve French
2008-04-23 14:28 ` Igor Mammedov
2008-04-23 19:11   ` Jeremy Allison
2008-04-23 19:19     ` Jeremy Allison
2008-04-24  8:04       ` Igor Mammedov
2008-04-25 19:22         ` Jeremy Allison
2008-04-25 19:50           ` Jeremy Allison
2008-04-25 21:16         ` Jeremy Allison
2008-04-27 13:00           ` Igor Mammedov
2008-04-28 18:05             ` Jeremy Allison
2008-04-28 18:51             ` Jeremy Allison
2008-05-21 13:57               ` Igor Mammedov
2008-05-24  0:46                 ` Jeremy Allison
2008-05-24  1:33                   ` Steve French

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).