Commit ddd8c1f9 authored by Chuck Lever's avatar Chuck Lever

SUNRPC: Export get_gss_krb5_enctype()

I plan to add KUnit tests that will need enctype profile
information. Export the enctype profile lookup function.
Tested-by: default avatarScott Mayhew <smayhew@redhat.com>
Reviewed-by: default avatarSimo Sorce <simo@redhat.com>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent eebd8c2d
...@@ -216,6 +216,7 @@ u32 krb5_etm_decrypt(struct krb5_ctx *kctx, u32 offset, u32 len, ...@@ -216,6 +216,7 @@ u32 krb5_etm_decrypt(struct krb5_ctx *kctx, u32 offset, u32 len,
#if IS_ENABLED(CONFIG_KUNIT) #if IS_ENABLED(CONFIG_KUNIT)
void krb5_nfold(u32 inbits, const u8 *in, u32 outbits, u8 *out); void krb5_nfold(u32 inbits, const u8 *in, u32 outbits, u8 *out);
const struct gss_krb5_enctype *gss_krb5_lookup_enctype(u32 etype);
#endif #endif
#endif /* _NET_SUNRPC_AUTH_GSS_KRB5_INTERNAL_H */ #endif /* _NET_SUNRPC_AUTH_GSS_KRB5_INTERNAL_H */
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <linux/sunrpc/auth.h> #include <linux/sunrpc/auth.h>
#include <linux/sunrpc/gss_krb5.h> #include <linux/sunrpc/gss_krb5.h>
#include <linux/sunrpc/xdr.h> #include <linux/sunrpc/xdr.h>
#include <kunit/visibility.h>
#include "auth_gss_internal.h" #include "auth_gss_internal.h"
#include "gss_krb5_internal.h" #include "gss_krb5_internal.h"
...@@ -309,28 +310,24 @@ static void gss_krb5_prepare_enctype_priority_list(void) ...@@ -309,28 +310,24 @@ static void gss_krb5_prepare_enctype_priority_list(void)
} }
} }
static const int num_supported_enctypes = /**
ARRAY_SIZE(supported_gss_krb5_enctypes); * gss_krb5_lookup_enctype - Retrieve profile information for a given enctype
* @etype: ENCTYPE value
static int *
supported_gss_krb5_enctype(int etype) * Returns a pointer to a gss_krb5_enctype structure, or NULL if no
* matching etype is found.
*/
VISIBLE_IF_KUNIT
const struct gss_krb5_enctype *gss_krb5_lookup_enctype(u32 etype)
{ {
int i; size_t i;
for (i = 0; i < num_supported_enctypes; i++)
if (supported_gss_krb5_enctypes[i].etype == etype)
return 1;
return 0;
}
static const struct gss_krb5_enctype * for (i = 0; i < ARRAY_SIZE(supported_gss_krb5_enctypes); i++)
get_gss_krb5_enctype(int etype)
{
int i;
for (i = 0; i < num_supported_enctypes; i++)
if (supported_gss_krb5_enctypes[i].etype == etype) if (supported_gss_krb5_enctypes[i].etype == etype)
return &supported_gss_krb5_enctypes[i]; return &supported_gss_krb5_enctypes[i];
return NULL; return NULL;
} }
EXPORT_SYMBOL_IF_KUNIT(gss_krb5_lookup_enctype);
static struct crypto_sync_skcipher * static struct crypto_sync_skcipher *
gss_krb5_alloc_cipher_v1(struct krb5_ctx *ctx, struct xdr_netobj *key) gss_krb5_alloc_cipher_v1(struct krb5_ctx *ctx, struct xdr_netobj *key)
...@@ -366,7 +363,7 @@ get_key(const void *p, const void *end, ...@@ -366,7 +363,7 @@ get_key(const void *p, const void *end,
alg = ENCTYPE_DES_CBC_RAW; alg = ENCTYPE_DES_CBC_RAW;
break; break;
} }
if (!supported_gss_krb5_enctype(alg)) { if (!gss_krb5_lookup_enctype(alg)) {
pr_warn("gss_krb5: unsupported enctype: %d\n", alg); pr_warn("gss_krb5: unsupported enctype: %d\n", alg);
goto out_err_inval; goto out_err_inval;
} }
...@@ -405,7 +402,7 @@ gss_import_v1_context(const void *p, const void *end, struct krb5_ctx *ctx) ...@@ -405,7 +402,7 @@ gss_import_v1_context(const void *p, const void *end, struct krb5_ctx *ctx)
/* Old format supports only DES! Any other enctype uses new format */ /* Old format supports only DES! Any other enctype uses new format */
ctx->enctype = ENCTYPE_DES_CBC_RAW; ctx->enctype = ENCTYPE_DES_CBC_RAW;
ctx->gk5e = get_gss_krb5_enctype(ctx->enctype); ctx->gk5e = gss_krb5_lookup_enctype(ctx->enctype);
if (ctx->gk5e == NULL) { if (ctx->gk5e == NULL) {
p = ERR_PTR(-EINVAL); p = ERR_PTR(-EINVAL);
goto out_err; goto out_err;
...@@ -677,7 +674,7 @@ gss_import_v2_context(const void *p, const void *end, struct krb5_ctx *ctx, ...@@ -677,7 +674,7 @@ gss_import_v2_context(const void *p, const void *end, struct krb5_ctx *ctx,
/* Map ENCTYPE_DES3_CBC_SHA1 to ENCTYPE_DES3_CBC_RAW */ /* Map ENCTYPE_DES3_CBC_SHA1 to ENCTYPE_DES3_CBC_RAW */
if (ctx->enctype == ENCTYPE_DES3_CBC_SHA1) if (ctx->enctype == ENCTYPE_DES3_CBC_SHA1)
ctx->enctype = ENCTYPE_DES3_CBC_RAW; ctx->enctype = ENCTYPE_DES3_CBC_RAW;
ctx->gk5e = get_gss_krb5_enctype(ctx->enctype); ctx->gk5e = gss_krb5_lookup_enctype(ctx->enctype);
if (ctx->gk5e == NULL) { if (ctx->gk5e == NULL) {
dprintk("gss_kerberos_mech: unsupported krb5 enctype %u\n", dprintk("gss_kerberos_mech: unsupported krb5 enctype %u\n",
ctx->enctype); ctx->enctype);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment