2020-10-21 08:22:33 +08:00
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
/*
|
|
|
|
* Copyright (C) 2020, Microsoft Corporation.
|
|
|
|
*
|
|
|
|
* Author(s): Steve French <stfrench@microsoft.com>
|
|
|
|
* David Howells <dhowells@redhat.com>
|
|
|
|
*/
|
|
|
|
|
2020-10-21 08:37:11 +08:00
|
|
|
#include "cifsglob.h"
|
|
|
|
#include "cifs_debug.h"
|
|
|
|
#include "fs_context.h"
|
|
|
|
|
|
|
|
static const match_table_t cifs_secflavor_tokens = {
|
|
|
|
{ Opt_sec_krb5, "krb5" },
|
|
|
|
{ Opt_sec_krb5i, "krb5i" },
|
|
|
|
{ Opt_sec_krb5p, "krb5p" },
|
|
|
|
{ Opt_sec_ntlmsspi, "ntlmsspi" },
|
|
|
|
{ Opt_sec_ntlmssp, "ntlmssp" },
|
|
|
|
{ Opt_ntlm, "ntlm" },
|
|
|
|
{ Opt_sec_ntlmi, "ntlmi" },
|
|
|
|
{ Opt_sec_ntlmv2, "nontlm" },
|
|
|
|
{ Opt_sec_ntlmv2, "ntlmv2" },
|
|
|
|
{ Opt_sec_ntlmv2i, "ntlmv2i" },
|
|
|
|
{ Opt_sec_lanman, "lanman" },
|
|
|
|
{ Opt_sec_none, "none" },
|
|
|
|
|
|
|
|
{ Opt_sec_err, NULL }
|
|
|
|
};
|
|
|
|
|
|
|
|
int cifs_parse_security_flavors(char *value, struct smb_vol *vol)
|
|
|
|
{
|
|
|
|
|
|
|
|
substring_t args[MAX_OPT_ARGS];
|
|
|
|
|
|
|
|
/*
|
|
|
|
* With mount options, the last one should win. Reset any existing
|
|
|
|
* settings back to default.
|
|
|
|
*/
|
|
|
|
vol->sectype = Unspecified;
|
|
|
|
vol->sign = false;
|
|
|
|
|
|
|
|
switch (match_token(value, cifs_secflavor_tokens, args)) {
|
|
|
|
case Opt_sec_krb5p:
|
|
|
|
cifs_dbg(VFS, "sec=krb5p is not supported!\n");
|
|
|
|
return 1;
|
|
|
|
case Opt_sec_krb5i:
|
|
|
|
vol->sign = true;
|
|
|
|
fallthrough;
|
|
|
|
case Opt_sec_krb5:
|
|
|
|
vol->sectype = Kerberos;
|
|
|
|
break;
|
|
|
|
case Opt_sec_ntlmsspi:
|
|
|
|
vol->sign = true;
|
|
|
|
fallthrough;
|
|
|
|
case Opt_sec_ntlmssp:
|
|
|
|
vol->sectype = RawNTLMSSP;
|
|
|
|
break;
|
|
|
|
case Opt_sec_ntlmi:
|
|
|
|
vol->sign = true;
|
|
|
|
fallthrough;
|
|
|
|
case Opt_ntlm:
|
|
|
|
vol->sectype = NTLM;
|
|
|
|
break;
|
|
|
|
case Opt_sec_ntlmv2i:
|
|
|
|
vol->sign = true;
|
|
|
|
fallthrough;
|
|
|
|
case Opt_sec_ntlmv2:
|
|
|
|
vol->sectype = NTLMv2;
|
|
|
|
break;
|
|
|
|
#ifdef CONFIG_CIFS_WEAK_PW_HASH
|
|
|
|
case Opt_sec_lanman:
|
|
|
|
vol->sectype = LANMAN;
|
|
|
|
break;
|
|
|
|
#endif
|
|
|
|
case Opt_sec_none:
|
|
|
|
vol->nullauth = 1;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
cifs_dbg(VFS, "bad security option: %s\n", value);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|