Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 97144
b: refs/heads/master
c: a1fe78f
h: refs/heads/master
v: v3
  • Loading branch information
Steve French committed May 16, 2008
1 parent 1b4d9aa commit 30c732f
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 9 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: fec4585fd71cc5ec35d134e8c3854f6e8c4503f0
refs/heads/master: a1fe78f16eac7d03d3c391dd5d54559826574982
9 changes: 9 additions & 0 deletions trunk/fs/cifs/cifspdu.h
Original file line number Diff line number Diff line change
Expand Up @@ -1904,6 +1904,15 @@ typedef struct smb_com_transaction2_get_dfs_refer_req {
char RequestFileName[1];
} __attribute__((packed)) TRANSACTION2_GET_DFS_REFER_REQ;

#define DFS_VERSION cpu_to_le16(0x0003)

/* DFS server target type */
#define DFS_TYPE_LINK 0x0000 /* also for sysvol targets */
#define DFS_TYPE_ROOT 0x0001

/* Referral Entry Flags */
#define DFS_NAME_LIST_REF 0x0200

typedef struct dfs_referral_level_3 {
__le16 VersionNumber;
__le16 Size;
Expand Down
17 changes: 9 additions & 8 deletions trunk/fs/cifs/cifssmb.c
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ cifs_strncpy_to_host(char **dst, const char *src, const int maxlen,
strncpy(*dst, src, plen);
}
(*dst)[plen] = 0;
(*dst)[plen+1] = 0; /* harmless for ASCII case, needed for Unicode */
return 0;

cifs_strncpy_to_host_ErrExit:
Expand Down Expand Up @@ -3907,7 +3908,7 @@ CIFSGetSrvInodeNumber(const int xid, struct cifsTconInfo *tcon,
* on failure - errno
*/
static int
parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
parse_DFS_referrals(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
unsigned int *num_of_nodes,
struct dfs_info3_param **target_nodes,
const struct nls_table *nls_codepage)
Expand All @@ -3924,15 +3925,15 @@ parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
cERROR(1, ("num_referrals: must be at least > 0,"
"but we get num_referrals = %d\n", *num_of_nodes));
rc = -EINVAL;
goto parse_DFS_REFERRALS_exit;
goto parse_DFS_referrals_exit;
}

ref = (struct dfs_referral_level_3 *) &(pSMBr->referrals);
if (ref->VersionNumber != 3) {
cERROR(1, ("Referrals of V%d version are not supported,"
"should be V3", ref->VersionNumber));
rc = -EINVAL;
goto parse_DFS_REFERRALS_exit;
goto parse_DFS_referrals_exit;
}

/* get the upper boundary of the resp buffer */
Expand All @@ -3948,7 +3949,7 @@ parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
if (*target_nodes == NULL) {
cERROR(1, ("Failed to allocate buffer for target_nodes\n"));
rc = -ENOMEM;
goto parse_DFS_REFERRALS_exit;
goto parse_DFS_referrals_exit;
}

/* collect neccessary data from referrals */
Expand All @@ -3968,20 +3969,20 @@ parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
rc = cifs_strncpy_to_host(&(node->path_name), temp,
max_len, is_unicode, nls_codepage);
if (rc)
goto parse_DFS_REFERRALS_exit;
goto parse_DFS_referrals_exit;

/* copy link target UNC */
temp = (char *)ref + le16_to_cpu(ref->NetworkAddressOffset);
max_len = data_end - temp;
rc = cifs_strncpy_to_host(&(node->node_name), temp,
max_len, is_unicode, nls_codepage);
if (rc)
goto parse_DFS_REFERRALS_exit;
goto parse_DFS_referrals_exit;

ref += ref->Size;
}

parse_DFS_REFERRALS_exit:
parse_DFS_referrals_exit:
if (rc) {
free_dfs_info_array(*target_nodes, *num_of_nodes);
*target_nodes = NULL;
Expand Down Expand Up @@ -4090,7 +4091,7 @@ CIFSGetDFSRefer(const int xid, struct cifsSesInfo *ses,
le16_to_cpu(pSMBr->t2.DataOffset)));

/* parse returned result into more usable form */
rc = parse_DFS_REFERRALS(pSMBr, num_of_nodes,
rc = parse_DFS_referrals(pSMBr, num_of_nodes,
target_nodes, nls_codepage);

GetDFSRefExit:
Expand Down

0 comments on commit 30c732f

Please sign in to comment.