Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 144702
b: refs/heads/master
c: 460b969
h: refs/heads/master
v: v3
  • Loading branch information
Jeff Layton authored and Steve French committed Apr 30, 2009
1 parent 5d0ee83 commit b3599a0
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 42 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 59140797c5817363087b0ffb46e6bb81a11fe0dc
refs/heads/master: 460b96960d1946914e50316ffeefe7b41dddce91
3 changes: 1 addition & 2 deletions trunk/fs/cifs/cifsproto.h
Original file line number Diff line number Diff line change
Expand Up @@ -260,8 +260,7 @@ extern int CIFSUnixCreateSymLink(const int xid,
const struct nls_table *nls_codepage);
extern int CIFSSMBUnixQuerySymLink(const int xid,
struct cifsTconInfo *tcon,
const unsigned char *searchName,
char *syminfo, const int buflen,
const unsigned char *searchName, char **syminfo,
const struct nls_table *nls_codepage);
extern int CIFSSMBQueryReparseLinkInfo(const int xid,
struct cifsTconInfo *tcon,
Expand Down
36 changes: 14 additions & 22 deletions trunk/fs/cifs/cifssmb.c
Original file line number Diff line number Diff line change
Expand Up @@ -2382,8 +2382,7 @@ CIFSCreateHardLink(const int xid, struct cifsTconInfo *tcon,

int
CIFSSMBUnixQuerySymLink(const int xid, struct cifsTconInfo *tcon,
const unsigned char *searchName,
char *symlinkinfo, const int buflen,
const unsigned char *searchName, char **symlinkinfo,
const struct nls_table *nls_codepage)
{
/* SMB_QUERY_FILE_UNIX_LINK */
Expand All @@ -2393,6 +2392,7 @@ CIFSSMBUnixQuerySymLink(const int xid, struct cifsTconInfo *tcon,
int bytes_returned;
int name_len;
__u16 params, byte_count;
char *data_start;

cFYI(1, ("In QPathSymLinkInfo (Unix) for path %s", searchName));

Expand Down Expand Up @@ -2447,30 +2447,22 @@ CIFSSMBUnixQuerySymLink(const int xid, struct cifsTconInfo *tcon,
/* decode response */

rc = validate_t2((struct smb_t2_rsp *)pSMBr);
if (rc || (pSMBr->ByteCount < 2))
/* BB also check enough total bytes returned */
rc = -EIO; /* bad smb */
if (rc || (pSMBr->ByteCount < 2))
rc = -EIO;
else {
__u16 data_offset = le16_to_cpu(pSMBr->t2.DataOffset);
__u16 count = le16_to_cpu(pSMBr->t2.DataCount);
u16 count = le16_to_cpu(pSMBr->t2.DataCount);

data_start = ((char *) &pSMBr->hdr.Protocol) +
le16_to_cpu(pSMBr->t2.DataOffset);

if (pSMBr->hdr.Flags2 & SMBFLG2_UNICODE) {
name_len = UniStrnlen((wchar_t *) ((char *)
&pSMBr->hdr.Protocol + data_offset),
min_t(const int, buflen, count) / 2);
/* BB FIXME investigate remapping reserved chars here */
cifs_strfromUCS_le(symlinkinfo,
(__le16 *) ((char *)&pSMBr->hdr.Protocol
+ data_offset),
name_len, nls_codepage);
} else {
strncpy(symlinkinfo,
(char *) &pSMBr->hdr.Protocol +
data_offset,
min_t(const int, buflen, count));
}
symlinkinfo[buflen] = 0;
/* just in case so calling code does not go off the end of buffer */
*symlinkinfo = cifs_strndup(data_start, count,
pSMBr->hdr.Flags2 &
SMBFLG2_UNICODE,
nls_codepage);
if (!symlinkinfo)
rc = -ENOMEM;
}
}
cifs_buf_release(pSMB);
Expand Down
22 changes: 5 additions & 17 deletions trunk/fs/cifs/link.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,16 +119,11 @@ cifs_follow_link(struct dentry *direntry, struct nameidata *nd)
full_path = build_path_from_dentry(direntry);

if (!full_path)
goto out_no_free;
goto out;

cFYI(1, ("Full path: %s inode = 0x%p", full_path, inode));
cifs_sb = CIFS_SB(inode->i_sb);
pTcon = cifs_sb->tcon;
target_path = kmalloc(PATH_MAX, GFP_KERNEL);
if (!target_path) {
target_path = ERR_PTR(-ENOMEM);
goto out;
}

/* We could change this to:
if (pTcon->unix_ext)
Expand All @@ -138,8 +133,7 @@ cifs_follow_link(struct dentry *direntry, struct nameidata *nd)

if (pTcon->ses->capabilities & CAP_UNIX)
rc = CIFSSMBUnixQuerySymLink(xid, pTcon, full_path,
target_path,
PATH_MAX-1,
&target_path,
cifs_sb->local_nls);
else {
/* BB add read reparse point symlink code here */
Expand All @@ -148,22 +142,16 @@ cifs_follow_link(struct dentry *direntry, struct nameidata *nd)
/* BB Add MAC style xsymlink check here if enabled */
}

if (rc == 0) {

/* BB Add special case check for Samba DFS symlinks */

target_path[PATH_MAX-1] = 0;
} else {
if (rc != 0) {
kfree(target_path);
target_path = ERR_PTR(rc);
}

out:
kfree(full_path);
out_no_free:
out:
FreeXid(xid);
nd_set_link(nd, target_path);
return NULL; /* No cookie */
return NULL;
}

int
Expand Down

0 comments on commit b3599a0

Please sign in to comment.