diff options
| -rw-r--r-- | fs/cifs/asn1.c | 11 | ||||
| -rw-r--r-- | fs/cifs/cifs_spnego.c | 4 | ||||
| -rw-r--r-- | fs/cifs/cifsglob.h | 3 | ||||
| -rw-r--r-- | fs/cifs/sess.c | 2 |
4 files changed, 14 insertions, 6 deletions
diff --git a/fs/cifs/asn1.c b/fs/cifs/asn1.c index 5fabd2caf93c..1b09f1670061 100644 --- a/fs/cifs/asn1.c +++ b/fs/cifs/asn1.c | |||
| @@ -476,6 +476,7 @@ decode_negTokenInit(unsigned char *security_blob, int length, | |||
| 476 | unsigned int cls, con, tag, oidlen, rc; | 476 | unsigned int cls, con, tag, oidlen, rc; |
| 477 | bool use_ntlmssp = false; | 477 | bool use_ntlmssp = false; |
| 478 | bool use_kerberos = false; | 478 | bool use_kerberos = false; |
| 479 | bool use_mskerberos = false; | ||
| 479 | 480 | ||
| 480 | *secType = NTLM; /* BB eventually make Kerberos or NLTMSSP the default*/ | 481 | *secType = NTLM; /* BB eventually make Kerberos or NLTMSSP the default*/ |
| 481 | 482 | ||
| @@ -574,10 +575,12 @@ decode_negTokenInit(unsigned char *security_blob, int length, | |||
| 574 | *(oid + 1), *(oid + 2), *(oid + 3))); | 575 | *(oid + 1), *(oid + 2), *(oid + 3))); |
| 575 | 576 | ||
| 576 | if (compare_oid(oid, oidlen, MSKRB5_OID, | 577 | if (compare_oid(oid, oidlen, MSKRB5_OID, |
| 577 | MSKRB5_OID_LEN)) | 578 | MSKRB5_OID_LEN) && |
| 578 | use_kerberos = true; | 579 | !use_kerberos) |
| 580 | use_mskerberos = true; | ||
| 579 | else if (compare_oid(oid, oidlen, KRB5_OID, | 581 | else if (compare_oid(oid, oidlen, KRB5_OID, |
| 580 | KRB5_OID_LEN)) | 582 | KRB5_OID_LEN) && |
| 583 | !use_mskerberos) | ||
| 581 | use_kerberos = true; | 584 | use_kerberos = true; |
| 582 | else if (compare_oid(oid, oidlen, NTLMSSP_OID, | 585 | else if (compare_oid(oid, oidlen, NTLMSSP_OID, |
| 583 | NTLMSSP_OID_LEN)) | 586 | NTLMSSP_OID_LEN)) |
| @@ -630,6 +633,8 @@ decode_negTokenInit(unsigned char *security_blob, int length, | |||
| 630 | 633 | ||
| 631 | if (use_kerberos) | 634 | if (use_kerberos) |
| 632 | *secType = Kerberos; | 635 | *secType = Kerberos; |
| 636 | else if (use_mskerberos) | ||
| 637 | *secType = MSKerberos; | ||
| 633 | else if (use_ntlmssp) | 638 | else if (use_ntlmssp) |
| 634 | *secType = NTLMSSP; | 639 | *secType = NTLMSSP; |
| 635 | 640 | ||
diff --git a/fs/cifs/cifs_spnego.c b/fs/cifs/cifs_spnego.c index 2434ab0e8791..117ef4bba68e 100644 --- a/fs/cifs/cifs_spnego.c +++ b/fs/cifs/cifs_spnego.c | |||
| @@ -114,9 +114,11 @@ cifs_get_spnego_key(struct cifsSesInfo *sesInfo) | |||
| 114 | 114 | ||
| 115 | dp = description + strlen(description); | 115 | dp = description + strlen(description); |
| 116 | 116 | ||
| 117 | /* for now, only sec=krb5 is valid */ | 117 | /* for now, only sec=krb5 and sec=mskrb5 are valid */ |
| 118 | if (server->secType == Kerberos) | 118 | if (server->secType == Kerberos) |
| 119 | sprintf(dp, ";sec=krb5"); | 119 | sprintf(dp, ";sec=krb5"); |
| 120 | else if (server->secType == MSKerberos) | ||
| 121 | sprintf(dp, ";sec=mskrb5"); | ||
| 120 | else | 122 | else |
| 121 | goto out; | 123 | goto out; |
| 122 | 124 | ||
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h index 7e1cf262effe..8dfd6f24d488 100644 --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h | |||
| @@ -80,7 +80,8 @@ enum securityEnum { | |||
| 80 | NTLMv2, /* Legacy NTLM auth with NTLMv2 hash */ | 80 | NTLMv2, /* Legacy NTLM auth with NTLMv2 hash */ |
| 81 | RawNTLMSSP, /* NTLMSSP without SPNEGO */ | 81 | RawNTLMSSP, /* NTLMSSP without SPNEGO */ |
| 82 | NTLMSSP, /* NTLMSSP via SPNEGO */ | 82 | NTLMSSP, /* NTLMSSP via SPNEGO */ |
| 83 | Kerberos /* Kerberos via SPNEGO */ | 83 | Kerberos, /* Kerberos via SPNEGO */ |
| 84 | MSKerberos, /* MS Kerberos via SPNEGO */ | ||
| 84 | }; | 85 | }; |
| 85 | 86 | ||
| 86 | enum protocolEnum { | 87 | enum protocolEnum { |
diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c index ed150efbe27c..3188e4d9cddb 100644 --- a/fs/cifs/sess.c +++ b/fs/cifs/sess.c | |||
| @@ -505,7 +505,7 @@ CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses, int first_time, | |||
| 505 | unicode_ssetup_strings(&bcc_ptr, ses, nls_cp); | 505 | unicode_ssetup_strings(&bcc_ptr, ses, nls_cp); |
| 506 | } else | 506 | } else |
| 507 | ascii_ssetup_strings(&bcc_ptr, ses, nls_cp); | 507 | ascii_ssetup_strings(&bcc_ptr, ses, nls_cp); |
| 508 | } else if (type == Kerberos) { | 508 | } else if (type == Kerberos || type == MSKerberos) { |
| 509 | #ifdef CONFIG_CIFS_UPCALL | 509 | #ifdef CONFIG_CIFS_UPCALL |
| 510 | struct cifs_spnego_msg *msg; | 510 | struct cifs_spnego_msg *msg; |
| 511 | spnego_key = cifs_get_spnego_key(ses); | 511 | spnego_key = cifs_get_spnego_key(ses); |
