Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a1fe78f1 authored by Steve French's avatar Steve French
Browse files

[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
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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;
+9 −8
Original line number Diff line number Diff line
@@ -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:
@@ -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)
@@ -3924,7 +3925,7 @@ 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);
@@ -3932,7 +3933,7 @@ parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
		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 */
@@ -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 */
@@ -3968,7 +3969,7 @@ 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);
@@ -3976,12 +3977,12 @@ parse_DFS_REFERRALS(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
		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;
@@ -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: