[CIFS] Break up unicode_sessetup string functions
SPNEGO setup needs only some of these strings. Break up unicode_ssetup_strings so we can call them individually. Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
parent
e187e44eb8
commit
0d3a01fada
|
@ -495,9 +495,15 @@ require use of the stronger protocol */
|
||||||
#ifdef CONFIG_CIFS_WEAK_PW_HASH
|
#ifdef CONFIG_CIFS_WEAK_PW_HASH
|
||||||
#define CIFSSEC_MUST_LANMAN 0x10010
|
#define CIFSSEC_MUST_LANMAN 0x10010
|
||||||
#define CIFSSEC_MUST_PLNTXT 0x20020
|
#define CIFSSEC_MUST_PLNTXT 0x20020
|
||||||
#define CIFSSEC_MASK 0x37037 /* current flags supported if weak */
|
#ifdef CONFIG_CIFS_UPCALL
|
||||||
|
#define CIFSSEC_MASK 0x3F03F /* allows weak security but also krb5 */
|
||||||
#else
|
#else
|
||||||
#define CIFSSEC_MASK 0x07007 /* flags supported if no weak config */
|
#define CIFSSEC_MASK 0x37037 /* current flags supported if weak */
|
||||||
|
#else /* do not allow weak pw hash */
|
||||||
|
#ifdef CONFIG_CIFS_UPCALL
|
||||||
|
#define CIFSSEC_MASK 0x0F00F /* flags supported if no weak allowed */
|
||||||
|
#else
|
||||||
|
#define CIFSSEC_MASK 0x07007 /* flags supported if no weak allowed */
|
||||||
#endif /* WEAK_PW_HASH */
|
#endif /* WEAK_PW_HASH */
|
||||||
#define CIFSSEC_MUST_SEAL 0x40040 /* not supported yet */
|
#define CIFSSEC_MUST_SEAL 0x40040 /* not supported yet */
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,52 @@ static __u32 cifs_ssetup_hdr(struct cifsSesInfo *ses, SESSION_SETUP_ANDX *pSMB)
|
||||||
return capabilities;
|
return capabilities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
unicode_oslm_strings(char **pbcc_area, const struct nls_table *nls_cp)
|
||||||
|
{
|
||||||
|
char *bcc_ptr = *pbcc_area;
|
||||||
|
int bytes_ret = 0;
|
||||||
|
|
||||||
|
/* Copy OS version */
|
||||||
|
bytes_ret = cifs_strtoUCS((__le16 *)bcc_ptr, "Linux version ", 32,
|
||||||
|
nls_cp);
|
||||||
|
bcc_ptr += 2 * bytes_ret;
|
||||||
|
bytes_ret = cifs_strtoUCS((__le16 *) bcc_ptr, init_utsname()->release,
|
||||||
|
32, nls_cp);
|
||||||
|
bcc_ptr += 2 * bytes_ret;
|
||||||
|
bcc_ptr += 2; /* trailing null */
|
||||||
|
|
||||||
|
bytes_ret = cifs_strtoUCS((__le16 *) bcc_ptr, CIFS_NETWORK_OPSYS,
|
||||||
|
32, nls_cp);
|
||||||
|
bcc_ptr += 2 * bytes_ret;
|
||||||
|
bcc_ptr += 2; /* trailing null */
|
||||||
|
|
||||||
|
*pbcc_area = bcc_ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void unicode_domain_string(char **pbcc_area, struct cifsSesInfo *ses,
|
||||||
|
const struct nls_table *nls_cp)
|
||||||
|
{
|
||||||
|
char *bcc_ptr = *pbcc_area;
|
||||||
|
int bytes_ret = 0;
|
||||||
|
|
||||||
|
/* copy domain */
|
||||||
|
if (ses->domainName == NULL) {
|
||||||
|
/* Sending null domain better than using a bogus domain name (as
|
||||||
|
we did briefly in 2.6.18) since server will use its default */
|
||||||
|
*bcc_ptr = 0;
|
||||||
|
*(bcc_ptr+1) = 0;
|
||||||
|
bytes_ret = 0;
|
||||||
|
} else
|
||||||
|
bytes_ret = cifs_strtoUCS((__le16 *) bcc_ptr, ses->domainName,
|
||||||
|
256, nls_cp);
|
||||||
|
bcc_ptr += 2 * bytes_ret;
|
||||||
|
bcc_ptr += 2; /* account for null terminator */
|
||||||
|
|
||||||
|
*pbcc_area = bcc_ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void unicode_ssetup_strings(char **pbcc_area, struct cifsSesInfo *ses,
|
static void unicode_ssetup_strings(char **pbcc_area, struct cifsSesInfo *ses,
|
||||||
const struct nls_table *nls_cp)
|
const struct nls_table *nls_cp)
|
||||||
{
|
{
|
||||||
|
@ -99,32 +145,9 @@ static void unicode_ssetup_strings(char **pbcc_area, struct cifsSesInfo *ses,
|
||||||
}
|
}
|
||||||
bcc_ptr += 2 * bytes_ret;
|
bcc_ptr += 2 * bytes_ret;
|
||||||
bcc_ptr += 2; /* account for null termination */
|
bcc_ptr += 2; /* account for null termination */
|
||||||
/* copy domain */
|
|
||||||
if (ses->domainName == NULL) {
|
|
||||||
/* Sending null domain better than using a bogus domain name (as
|
|
||||||
we did briefly in 2.6.18) since server will use its default */
|
|
||||||
*bcc_ptr = 0;
|
|
||||||
*(bcc_ptr+1) = 0;
|
|
||||||
bytes_ret = 0;
|
|
||||||
} else
|
|
||||||
bytes_ret = cifs_strtoUCS((__le16 *) bcc_ptr, ses->domainName,
|
|
||||||
256, nls_cp);
|
|
||||||
bcc_ptr += 2 * bytes_ret;
|
|
||||||
bcc_ptr += 2; /* account for null terminator */
|
|
||||||
|
|
||||||
/* Copy OS version */
|
unicode_domain_string(&bcc_ptr, ses, nls_cp);
|
||||||
bytes_ret = cifs_strtoUCS((__le16 *)bcc_ptr, "Linux version ", 32,
|
unicode_oslm_strings(&bcc_ptr, nls_cp);
|
||||||
nls_cp);
|
|
||||||
bcc_ptr += 2 * bytes_ret;
|
|
||||||
bytes_ret = cifs_strtoUCS((__le16 *) bcc_ptr, init_utsname()->release,
|
|
||||||
32, nls_cp);
|
|
||||||
bcc_ptr += 2 * bytes_ret;
|
|
||||||
bcc_ptr += 2; /* trailing null */
|
|
||||||
|
|
||||||
bytes_ret = cifs_strtoUCS((__le16 *) bcc_ptr, CIFS_NETWORK_OPSYS,
|
|
||||||
32, nls_cp);
|
|
||||||
bcc_ptr += 2 * bytes_ret;
|
|
||||||
bcc_ptr += 2; /* trailing null */
|
|
||||||
|
|
||||||
*pbcc_area = bcc_ptr;
|
*pbcc_area = bcc_ptr;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue