summaryrefslogtreecommitdiff
path: root/fs/smb/client/asn1.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2023-05-25 19:23:18 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2023-05-25 19:23:18 -0700
commit0d85b27b0cc6b5cf54567c5ad913a247a71583ce (patch)
tree12fa25afd63725ab8effb6011daa6e4057e427ab /fs/smb/client/asn1.c
parent192fe71ce5d17b184423b96d76ce648e1b848db4 (diff)
parentab6cacf833ba337b41700ee193d2c8936f1d049e (diff)
Merge tag '6.4-rc3-smb3-client-fixes' of git://git.samba.org/sfrench/cifs-2.6
Pull smb directory moves and client fixes from Steve French: "Four smb3 client fixes (three of which marked for stable) and three patches to move of fs/cifs and fs/ksmbd to a new common "fs/smb" parent directory - Move the client and server source directories to a common parent directory: fs/cifs -> fs/smb/client fs/ksmbd -> fs/smb/server fs/smbfs_common -> fs/smb/common - important readahead fix - important fix for SMB1 regression - fix for missing mount option ("mapchars") in mount API conversion - minor debugging improvement" * tag '6.4-rc3-smb3-client-fixes' of git://git.samba.org/sfrench/cifs-2.6: smb3: move Documentation/filesystems/cifs to Documentation/filesystems/smb cifs: correct references in Documentation to old fs/cifs path smb: move client and server files to common directory fs/smb cifs: mapchars mount option ignored smb3: display debug information better for encryption cifs: fix smb1 mount regression cifs: Fix cifs_limit_bvec_subset() to correctly check the maxmimum size
Diffstat (limited to 'fs/smb/client/asn1.c')
-rw-r--r--fs/smb/client/asn1.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/fs/smb/client/asn1.c b/fs/smb/client/asn1.c
new file mode 100644
index 000000000000..b5724ef9f182
--- /dev/null
+++ b/fs/smb/client/asn1.c
@@ -0,0 +1,63 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/oid_registry.h>
+#include "cifsglob.h"
+#include "cifs_debug.h"
+#include "cifsproto.h"
+#include "cifs_spnego_negtokeninit.asn1.h"
+
+int
+decode_negTokenInit(unsigned char *security_blob, int length,
+ struct TCP_Server_Info *server)
+{
+ if (asn1_ber_decoder(&cifs_spnego_negtokeninit_decoder, server,
+ security_blob, length) == 0)
+ return 1;
+ else
+ return 0;
+}
+
+int cifs_gssapi_this_mech(void *context, size_t hdrlen,
+ unsigned char tag, const void *value, size_t vlen)
+{
+ enum OID oid;
+
+ oid = look_up_OID(value, vlen);
+ if (oid != OID_spnego) {
+ char buf[50];
+
+ sprint_oid(value, vlen, buf, sizeof(buf));
+ cifs_dbg(FYI, "Error decoding negTokenInit header: unexpected OID %s\n",
+ buf);
+ return -EBADMSG;
+ }
+ return 0;
+}
+
+int cifs_neg_token_init_mech_type(void *context, size_t hdrlen,
+ unsigned char tag,
+ const void *value, size_t vlen)
+{
+ struct TCP_Server_Info *server = context;
+ enum OID oid;
+
+ oid = look_up_OID(value, vlen);
+ if (oid == OID_mskrb5)
+ server->sec_mskerberos = true;
+ else if (oid == OID_krb5u2u)
+ server->sec_kerberosu2u = true;
+ else if (oid == OID_krb5)
+ server->sec_kerberos = true;
+ else if (oid == OID_ntlmssp)
+ server->sec_ntlmssp = true;
+ else {
+ char buf[50];
+
+ sprint_oid(value, vlen, buf, sizeof(buf));
+ cifs_dbg(FYI, "Decoding negTokenInit: unsupported OID %s\n",
+ buf);
+ }
+ return 0;
+}