|
@@ -438,8 +438,13 @@ CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses)
|
|
|
|
|
|
pSMB->hdr.Mid = GetNextMid(server);
|
|
|
pSMB->hdr.Flags2 |= (SMBFLG2_UNICODE | SMBFLG2_ERR_STATUS);
|
|
|
+
|
|
|
if ((secFlags & CIFSSEC_MUST_KRB5) == CIFSSEC_MUST_KRB5)
|
|
|
pSMB->hdr.Flags2 |= SMBFLG2_EXT_SEC;
|
|
|
+ else if ((secFlags & CIFSSEC_AUTH_MASK) == CIFSSEC_MAY_KRB5) {
|
|
|
+ cFYI(1, ("Kerberos only mechanism, enable extended security"));
|
|
|
+ pSMB->hdr.Flags2 |= SMBFLG2_EXT_SEC;
|
|
|
+ }
|
|
|
|
|
|
count = 0;
|
|
|
for (i = 0; i < CIFS_NUM_PROT; i++) {
|
|
@@ -573,7 +578,20 @@ CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses)
|
|
|
server->secType = NTLM;
|
|
|
else if (secFlags & CIFSSEC_MAY_NTLMV2)
|
|
|
server->secType = NTLMv2;
|
|
|
- /* else krb5 ... any others ... */
|
|
|
+ else if (secFlags & CIFSSEC_MAY_KRB5)
|
|
|
+ server->secType = Kerberos;
|
|
|
+ else if (secFlags & CIFSSEC_MAY_LANMAN)
|
|
|
+ server->secType = LANMAN;
|
|
|
+/* #ifdef CONFIG_CIFS_EXPERIMENTAL
|
|
|
+ else if (secFlags & CIFSSEC_MAY_PLNTXT)
|
|
|
+ server->secType = ??
|
|
|
+#endif */
|
|
|
+ else {
|
|
|
+ rc = -EOPNOTSUPP;
|
|
|
+ cERROR(1, ("Invalid security type"));
|
|
|
+ goto neg_err_exit;
|
|
|
+ }
|
|
|
+ /* else ... any others ...? */
|
|
|
|
|
|
/* one byte, so no need to convert this or EncryptionKeyLen from
|
|
|
little endian */
|
|
@@ -3089,8 +3107,7 @@ CIFSSMBGetCIFSACL(const int xid, struct cifsTconInfo *tcon, __u16 fid,
|
|
|
goto qsec_out;
|
|
|
pSMBr = (struct smb_com_ntransact_rsp *)iov[0].iov_base;
|
|
|
|
|
|
- cERROR(1, ("smb %p parm %p data %p",
|
|
|
- pSMBr, parm, psec_desc)); /* BB removeme BB */
|
|
|
+ cFYI(1, ("smb %p parm %p data %p", pSMBr, parm, psec_desc));
|
|
|
|
|
|
if (le32_to_cpu(pSMBr->ParameterCount) != 4) {
|
|
|
rc = -EIO; /* bad smb */
|