Commit | Line | Data |
---|---|---|
1a59d1b8 | 1 | // SPDX-License-Identifier: GPL-2.0-or-later |
1da177e4 | 2 | |
1da177e4 | 3 | #include <linux/module.h> |
1da177e4 | 4 | #include <linux/kernel.h> |
0475c365 | 5 | #include <linux/oid_registry.h> |
1da177e4 LT |
6 | #include "cifsglob.h" |
7 | #include "cifs_debug.h" | |
8 | #include "cifsproto.h" | |
0475c365 | 9 | #include "cifs_spnego_negtokeninit.asn1.h" |
1da177e4 | 10 | |
0475c365 HL |
11 | int |
12 | decode_negTokenInit(unsigned char *security_blob, int length, | |
13 | struct TCP_Server_Info *server) | |
1da177e4 | 14 | { |
0475c365 HL |
15 | if (asn1_ber_decoder(&cifs_spnego_negtokeninit_decoder, server, |
16 | security_blob, length) == 0) | |
1da177e4 | 17 | return 1; |
1da177e4 | 18 | else |
1da177e4 | 19 | return 0; |
50c2f753 | 20 | } |
1da177e4 | 21 | |
0475c365 HL |
22 | int cifs_gssapi_this_mech(void *context, size_t hdrlen, |
23 | unsigned char tag, const void *value, size_t vlen) | |
1da177e4 | 24 | { |
0475c365 | 25 | enum OID oid; |
1da177e4 | 26 | |
0475c365 HL |
27 | oid = look_up_OID(value, vlen); |
28 | if (oid != OID_spnego) { | |
29 | char buf[50]; | |
1da177e4 | 30 | |
0475c365 HL |
31 | sprint_oid(value, vlen, buf, sizeof(buf)); |
32 | cifs_dbg(FYI, "Error decoding negTokenInit header: unexpected OID %s\n", | |
33 | buf); | |
34 | return -EBADMSG; | |
1da177e4 | 35 | } |
0475c365 | 36 | return 0; |
1da177e4 LT |
37 | } |
38 | ||
0475c365 HL |
39 | int cifs_neg_token_init_mech_type(void *context, size_t hdrlen, |
40 | unsigned char tag, | |
41 | const void *value, size_t vlen) | |
1da177e4 | 42 | { |
0475c365 HL |
43 | struct TCP_Server_Info *server = context; |
44 | enum OID oid; | |
1da177e4 | 45 | |
0475c365 HL |
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; | |
1da177e4 | 55 | else { |
0475c365 | 56 | char buf[50]; |
1da177e4 | 57 | |
0475c365 HL |
58 | sprint_oid(value, vlen, buf, sizeof(buf)); |
59 | cifs_dbg(FYI, "Decoding negTokenInit: unsupported OID %s\n", | |
60 | buf); | |
2f0e58ac | 61 | } |
0475c365 | 62 | return 0; |
1da177e4 | 63 | } |