1 // SPDX-License-Identifier: GPL-2.0-or-later
3 #include <linux/module.h>
4 #include <linux/kernel.h>
5 #include <linux/oid_registry.h>
7 #include "cifs_debug.h"
9 #include "cifs_spnego_negtokeninit.asn1.h"
12 decode_negTokenInit(unsigned char *security_blob
, int length
,
13 struct TCP_Server_Info
*server
)
15 if (asn1_ber_decoder(&cifs_spnego_negtokeninit_decoder
, server
,
16 security_blob
, length
) == 0)
22 int cifs_gssapi_this_mech(void *context
, size_t hdrlen
,
23 unsigned char tag
, const void *value
, size_t vlen
)
27 oid
= look_up_OID(value
, vlen
);
28 if (oid
!= OID_spnego
) {
31 sprint_oid(value
, vlen
, buf
, sizeof(buf
));
32 cifs_dbg(FYI
, "Error decoding negTokenInit header: unexpected OID %s\n",
39 int cifs_neg_token_init_mech_type(void *context
, size_t hdrlen
,
41 const void *value
, size_t vlen
)
43 struct TCP_Server_Info
*server
= context
;
46 oid
= look_up_OID(value
, vlen
);
47 if (oid
== OID_mskrb5
)
48 server
->sec_mskerberos
= true;
49 else if (oid
== OID_krb5u2u
)
50 server
->sec_kerberosu2u
= true;
51 else if (oid
== OID_krb5
)
52 server
->sec_kerberos
= true;
53 else if (oid
== OID_ntlmssp
)
54 server
->sec_ntlmssp
= true;
58 sprint_oid(value
, vlen
, buf
, sizeof(buf
));
59 cifs_dbg(FYI
, "Decoding negTokenInit: unsupported OID %s\n",