|
@@ -77,8 +77,12 @@
|
|
|
|
|
|
#define SPNEGO_OID_LEN 7
|
|
#define SPNEGO_OID_LEN 7
|
|
#define NTLMSSP_OID_LEN 10
|
|
#define NTLMSSP_OID_LEN 10
|
|
|
|
+#define KRB5_OID_LEN 7
|
|
|
|
+#define MSKRB5_OID_LEN 7
|
|
static unsigned long SPNEGO_OID[7] = { 1, 3, 6, 1, 5, 5, 2 };
|
|
static unsigned long SPNEGO_OID[7] = { 1, 3, 6, 1, 5, 5, 2 };
|
|
static unsigned long NTLMSSP_OID[10] = { 1, 3, 6, 1, 4, 1, 311, 2, 2, 10 };
|
|
static unsigned long NTLMSSP_OID[10] = { 1, 3, 6, 1, 4, 1, 311, 2, 2, 10 };
|
|
|
|
+static unsigned long KRB5_OID[7] = { 1, 2, 840, 113554, 1, 2, 2 };
|
|
|
|
+static unsigned long MSKRB5_OID[7] = { 1, 2, 840, 48018, 1, 2, 2 };
|
|
|
|
|
|
/*
|
|
/*
|
|
* ASN.1 context.
|
|
* ASN.1 context.
|
|
@@ -457,6 +461,7 @@ decode_negTokenInit(unsigned char *security_blob, int length,
|
|
unsigned long *oid = NULL;
|
|
unsigned long *oid = NULL;
|
|
unsigned int cls, con, tag, oidlen, rc;
|
|
unsigned int cls, con, tag, oidlen, rc;
|
|
int use_ntlmssp = FALSE;
|
|
int use_ntlmssp = FALSE;
|
|
|
|
+ int use_kerberos = FALSE;
|
|
|
|
|
|
*secType = NTLM; /* BB eventually make Kerberos or NLTMSSP the default*/
|
|
*secType = NTLM; /* BB eventually make Kerberos or NLTMSSP the default*/
|
|
|
|
|
|
@@ -545,18 +550,28 @@ decode_negTokenInit(unsigned char *security_blob, int length,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
if ((tag == ASN1_OJI) && (con == ASN1_PRI)) {
|
|
if ((tag == ASN1_OJI) && (con == ASN1_PRI)) {
|
|
- rc = asn1_oid_decode(&ctx, end, &oid, &oidlen);
|
|
|
|
- if (rc) {
|
|
|
|
|
|
+ if (asn1_oid_decode(&ctx, end, &oid, &oidlen)) {
|
|
|
|
+
|
|
cFYI(1,
|
|
cFYI(1,
|
|
("OID len = %d oid = 0x%lx 0x%lx "
|
|
("OID len = %d oid = 0x%lx 0x%lx "
|
|
"0x%lx 0x%lx",
|
|
"0x%lx 0x%lx",
|
|
oidlen, *oid, *(oid + 1),
|
|
oidlen, *oid, *(oid + 1),
|
|
*(oid + 2), *(oid + 3)));
|
|
*(oid + 2), *(oid + 3)));
|
|
- rc = compare_oid(oid, oidlen,
|
|
|
|
- NTLMSSP_OID, NTLMSSP_OID_LEN);
|
|
|
|
- kfree(oid);
|
|
|
|
- if (rc)
|
|
|
|
|
|
+
|
|
|
|
+ if (compare_oid(oid, oidlen,
|
|
|
|
+ MSKRB5_OID,
|
|
|
|
+ MSKRB5_OID_LEN))
|
|
|
|
+ use_kerberos = TRUE;
|
|
|
|
+ else if (compare_oid(oid, oidlen,
|
|
|
|
+ KRB5_OID,
|
|
|
|
+ KRB5_OID_LEN))
|
|
|
|
+ use_kerberos = TRUE;
|
|
|
|
+ else if (compare_oid(oid, oidlen,
|
|
|
|
+ NTLMSSP_OID,
|
|
|
|
+ NTLMSSP_OID_LEN))
|
|
use_ntlmssp = TRUE;
|
|
use_ntlmssp = TRUE;
|
|
|
|
+
|
|
|
|
+ kfree(oid);
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
cFYI(1, ("Should be an oid what is going on?"));
|
|
cFYI(1, ("Should be an oid what is going on?"));
|
|
@@ -609,12 +624,10 @@ decode_negTokenInit(unsigned char *security_blob, int length,
|
|
ctx.pointer)); /* is this UTF-8 or ASCII? */
|
|
ctx.pointer)); /* is this UTF-8 or ASCII? */
|
|
}
|
|
}
|
|
|
|
|
|
- /* if (use_kerberos)
|
|
|
|
- *secType = Kerberos
|
|
|
|
- else */
|
|
|
|
- if (use_ntlmssp) {
|
|
|
|
|
|
+ if (use_kerberos)
|
|
|
|
+ *secType = Kerberos;
|
|
|
|
+ else if (use_ntlmssp)
|
|
*secType = NTLMSSP;
|
|
*secType = NTLMSSP;
|
|
- }
|
|
|
|
|
|
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|