aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs/smb2misc.c
diff options
context:
space:
mode:
authorPavel Shilovsky <piastry@etersoft.ru>2011-12-26 13:58:46 -0500
committerPavel Shilovsky <pshilovsky@samba.org>2012-07-24 13:55:05 -0400
commit2503a0dba989486c59523a947a1dcb50ad90fee9 (patch)
tree1e79a740d744cee1a1981e4d0a355303ffc9a4d2 /fs/cifs/smb2misc.c
parent68889f269b16a11866f4ec71e8177bdd0c184a3f (diff)
CIFS: Add SMB2 support for is_path_accessible
that needs for a successful mount through SMB2 protocol. Signed-off-by: Pavel Shilovsky <piastry@etersoft.ru> Signed-off-by: Steve French <smfrench@gmail.com>
Diffstat (limited to 'fs/cifs/smb2misc.c')
-rw-r--r--fs/cifs/smb2misc.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/fs/cifs/smb2misc.c b/fs/cifs/smb2misc.c
index 10729a74da27..eb73a136641c 100644
--- a/fs/cifs/smb2misc.c
+++ b/fs/cifs/smb2misc.c
@@ -230,6 +230,11 @@ smb2_get_data_area_len(int *off, int *len, struct smb2_hdr *hdr)
230 ((struct smb2_sess_setup_rsp *)hdr)->SecurityBufferLength); 230 ((struct smb2_sess_setup_rsp *)hdr)->SecurityBufferLength);
231 break; 231 break;
232 case SMB2_CREATE: 232 case SMB2_CREATE:
233 *off = le32_to_cpu(
234 ((struct smb2_create_rsp *)hdr)->CreateContextsOffset);
235 *len = le32_to_cpu(
236 ((struct smb2_create_rsp *)hdr)->CreateContextsLength);
237 break;
233 case SMB2_READ: 238 case SMB2_READ:
234 case SMB2_QUERY_INFO: 239 case SMB2_QUERY_INFO:
235 case SMB2_QUERY_DIRECTORY: 240 case SMB2_QUERY_DIRECTORY:
@@ -315,3 +320,23 @@ calc_size_exit:
315 cFYI(1, "SMB2 len %d", len); 320 cFYI(1, "SMB2 len %d", len);
316 return len; 321 return len;
317} 322}
323
324/* Note: caller must free return buffer */
325__le16 *
326cifs_convert_path_to_utf16(const char *from, struct cifs_sb_info *cifs_sb)
327{
328 int len;
329 const char *start_of_path;
330 __le16 *to;
331
332 /* Windows doesn't allow paths beginning with \ */
333 if (from[0] == '\\')
334 start_of_path = from + 1;
335 else
336 start_of_path = from;
337 to = cifs_strndup_to_utf16(start_of_path, PATH_MAX, &len,
338 cifs_sb->local_nls,
339 cifs_sb->mnt_cifs_flags &
340 CIFS_MOUNT_MAP_SPECIAL_CHR);
341 return to;
342}