brintos

brintos / linux-shallow public Read only

0
0
Text · 1.4 KiB · b5724ef Raw
64 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2 3#include <linux/module.h>4#include <linux/kernel.h>5#include <linux/oid_registry.h>6#include "cifsglob.h"7#include "cifs_debug.h"8#include "cifsproto.h"9#include "cifs_spnego_negtokeninit.asn1.h"10 11int12decode_negTokenInit(unsigned char *security_blob, int length,13		    struct TCP_Server_Info *server)14{15	if (asn1_ber_decoder(&cifs_spnego_negtokeninit_decoder, server,16			     security_blob, length) == 0)17		return 1;18	else19		return 0;20}21 22int cifs_gssapi_this_mech(void *context, size_t hdrlen,23			  unsigned char tag, const void *value, size_t vlen)24{25	enum OID oid;26 27	oid = look_up_OID(value, vlen);28	if (oid != OID_spnego) {29		char buf[50];30 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;35	}36	return 0;37}38 39int cifs_neg_token_init_mech_type(void *context, size_t hdrlen,40				  unsigned char tag,41				  const void *value, size_t vlen)42{43	struct TCP_Server_Info *server = context;44	enum OID oid;45 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;55	else {56		char buf[50];57 58		sprint_oid(value, vlen, buf, sizeof(buf));59		cifs_dbg(FYI, "Decoding negTokenInit: unsupported OID %s\n",60			 buf);61	}62	return 0;63}64