Commit a1fe78f1 authored by Steve French's avatar Steve French

[CIFS] Add missing defines for DFS

Also has minor cleanup of previous patch

CC: Igor Mammedov <niallain@gmail.com>
Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
parent fec4585f
...@@ -1904,6 +1904,15 @@ typedef struct smb_com_transaction2_get_dfs_refer_req { ...@@ -1904,6 +1904,15 @@ typedef struct smb_com_transaction2_get_dfs_refer_req {
char RequestFileName[1]; char RequestFileName[1];
} __attribute__((packed)) TRANSACTION2_GET_DFS_REFER_REQ; } __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 { typedef struct dfs_referral_level_3 {
__le16 VersionNumber; __le16 VersionNumber;
__le16 Size; __le16 Size;
......
...@@ -107,6 +107,7 @@ cifs_strncpy_to_host(char **dst, const char *src, const int maxlen, ...@@ -107,6 +107,7 @@ cifs_strncpy_to_host(char **dst, const char *src, const int maxlen,
strncpy(*dst, src, plen); strncpy(*dst, src, plen);
} }
(*dst)[plen] = 0; (*dst)[plen] = 0;
(*dst)[plen+1] = 0; /* harmless for ASCII case, needed for Unicode */
return 0; return 0;
cifs_strncpy_to_host_ErrExit: cifs_strncpy_to_host_ErrExit:
...@@ -3907,7 +3908,7 @@ CIFSGetSrvInodeNumber(const int xid, struct cifsTconInfo *tcon, ...@@ -3907,7 +3908,7 @@ CIFSGetSrvInodeNumber(const int xid, struct cifsTconInfo *tcon,
* on failure - errno * on failure - errno
*/ */
static int 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, unsigned int *num_of_nodes,
struct dfs_info3_param **target_nodes, struct dfs_info3_param **target_nodes,
const struct nls_table *nls_codepage) const struct nls_table *nls_codepage)
...@@ -3924,7 +3925,7 @@ parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr, ...@@ -3924,7 +3925,7 @@ parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
cERROR(1, ("num_referrals: must be at least > 0," cERROR(1, ("num_referrals: must be at least > 0,"
"but we get num_referrals = %d\n", *num_of_nodes)); "but we get num_referrals = %d\n", *num_of_nodes));
rc = -EINVAL; rc = -EINVAL;
goto parse_DFS_REFERRALS_exit; goto parse_DFS_referrals_exit;
} }
ref = (struct dfs_referral_level_3 *) &(pSMBr->referrals); ref = (struct dfs_referral_level_3 *) &(pSMBr->referrals);
...@@ -3932,7 +3933,7 @@ parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr, ...@@ -3932,7 +3933,7 @@ parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
cERROR(1, ("Referrals of V%d version are not supported," cERROR(1, ("Referrals of V%d version are not supported,"
"should be V3", ref->VersionNumber)); "should be V3", ref->VersionNumber));
rc = -EINVAL; rc = -EINVAL;
goto parse_DFS_REFERRALS_exit; goto parse_DFS_referrals_exit;
} }
/* get the upper boundary of the resp buffer */ /* get the upper boundary of the resp buffer */
...@@ -3948,7 +3949,7 @@ parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr, ...@@ -3948,7 +3949,7 @@ parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
if (*target_nodes == NULL) { if (*target_nodes == NULL) {
cERROR(1, ("Failed to allocate buffer for target_nodes\n")); cERROR(1, ("Failed to allocate buffer for target_nodes\n"));
rc = -ENOMEM; rc = -ENOMEM;
goto parse_DFS_REFERRALS_exit; goto parse_DFS_referrals_exit;
} }
/* collect neccessary data from referrals */ /* collect neccessary data from referrals */
...@@ -3968,7 +3969,7 @@ parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr, ...@@ -3968,7 +3969,7 @@ parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
rc = cifs_strncpy_to_host(&(node->path_name), temp, rc = cifs_strncpy_to_host(&(node->path_name), temp,
max_len, is_unicode, nls_codepage); max_len, is_unicode, nls_codepage);
if (rc) if (rc)
goto parse_DFS_REFERRALS_exit; goto parse_DFS_referrals_exit;
/* copy link target UNC */ /* copy link target UNC */
temp = (char *)ref + le16_to_cpu(ref->NetworkAddressOffset); temp = (char *)ref + le16_to_cpu(ref->NetworkAddressOffset);
...@@ -3976,12 +3977,12 @@ parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr, ...@@ -3976,12 +3977,12 @@ parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
rc = cifs_strncpy_to_host(&(node->node_name), temp, rc = cifs_strncpy_to_host(&(node->node_name), temp,
max_len, is_unicode, nls_codepage); max_len, is_unicode, nls_codepage);
if (rc) if (rc)
goto parse_DFS_REFERRALS_exit; goto parse_DFS_referrals_exit;
ref += ref->Size; ref += ref->Size;
} }
parse_DFS_REFERRALS_exit: parse_DFS_referrals_exit:
if (rc) { if (rc) {
free_dfs_info_array(*target_nodes, *num_of_nodes); free_dfs_info_array(*target_nodes, *num_of_nodes);
*target_nodes = NULL; *target_nodes = NULL;
...@@ -4090,7 +4091,7 @@ CIFSGetDFSRefer(const int xid, struct cifsSesInfo *ses, ...@@ -4090,7 +4091,7 @@ CIFSGetDFSRefer(const int xid, struct cifsSesInfo *ses,
le16_to_cpu(pSMBr->t2.DataOffset))); le16_to_cpu(pSMBr->t2.DataOffset)));
/* parse returned result into more usable form */ /* 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); target_nodes, nls_codepage);
GetDFSRefExit: GetDFSRefExit:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment