X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fsunrpc%2Fauth_gss%2Fgss_krb5_mech.c;h=a734dd8695183ee4524e8142121759eb7a98c0fc;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=57c074a0697065f29f65b0a338162ed6adcf2c96;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/net/sunrpc/auth_gss/gss_krb5_mech.c b/net/sunrpc/auth_gss/gss_krb5_mech.c index 57c074a06..a734dd869 100644 --- a/net/sunrpc/auth_gss/gss_krb5_mech.c +++ b/net/sunrpc/auth_gss/gss_krb5_mech.c @@ -40,7 +40,6 @@ #include #include #include -#include #include #include #include @@ -49,9 +48,6 @@ # define RPCDBG_FACILITY RPCDBG_AUTH #endif -struct xdr_netobj gss_mech_krb5_oid = - {9, "\052\206\110\206\367\022\001\002\002"}; - static inline int get_bytes(char **ptr, const char *end, void *res, int len) { @@ -100,7 +96,7 @@ get_key(char **p, char *end, struct crypto_tfm **res) alg_mode = CRYPTO_TFM_MODE_CBC; break; default: - dprintk("RPC: get_key: unsupported algorithm %d\n", alg); + dprintk("RPC: get_key: unsupported algorithm %d\n", alg); goto out_err_free_key; } if (!(*res = crypto_alloc_tfm(alg_name, alg_mode))) @@ -155,7 +151,7 @@ gss_import_sec_context_kerberos(struct xdr_netobj *inbuf, goto out_err_free_key2; ctx_id->internal_ctx_id = ctx; - dprintk("Succesfully imported new context.\n"); + dprintk("RPC: Succesfully imported new context.\n"); return 0; out_err_free_key2: @@ -197,7 +193,7 @@ gss_verify_mic_kerberos(struct gss_ctx *ctx, if (!maj_stat && qop_state) *qstate = qop_state; - dprintk("RPC: gss_verify_mic_kerberos returning %d\n", maj_stat); + dprintk("RPC: gss_verify_mic_kerberos returning %d\n", maj_stat); return maj_stat; } @@ -211,41 +207,52 @@ gss_get_mic_kerberos(struct gss_ctx *ctx, err = krb5_make_token(kctx, qop, message, mic_token, KG_TOK_MIC_MSG); - dprintk("RPC: gss_get_mic_kerberos returning %d\n",err); + dprintk("RPC: gss_get_mic_kerberos returning %d\n",err); return err; } static struct gss_api_ops gss_kerberos_ops = { - .name = "krb5", .gss_import_sec_context = gss_import_sec_context_kerberos, .gss_get_mic = gss_get_mic_kerberos, .gss_verify_mic = gss_verify_mic_kerberos, .gss_delete_sec_context = gss_delete_sec_context_kerberos, }; -/* XXX error checking? reference counting? */ +static struct pf_desc gss_kerberos_pfs[] = { + [0] = { + .pseudoflavor = RPC_AUTH_GSS_KRB5, + .service = RPC_GSS_SVC_NONE, + .name = "krb5", + }, + [1] = { + .pseudoflavor = RPC_AUTH_GSS_KRB5I, + .service = RPC_GSS_SVC_INTEGRITY, + .name = "krb5i", + }, +}; + +static struct gss_api_mech gss_kerberos_mech = { + .gm_name = "krb5", + .gm_owner = THIS_MODULE, + .gm_ops = &gss_kerberos_ops, + .gm_pf_num = ARRAY_SIZE(gss_kerberos_pfs), + .gm_pfs = gss_kerberos_pfs, +}; + static int __init init_kerberos_module(void) { - struct gss_api_mech *gm; + int status; - if (gss_mech_register(&gss_mech_krb5_oid, &gss_kerberos_ops)) + status = gss_mech_register(&gss_kerberos_mech); + if (status) printk("Failed to register kerberos gss mechanism!\n"); - gm = gss_mech_get_by_OID(&gss_mech_krb5_oid); - gss_register_triple(RPC_AUTH_GSS_KRB5 , gm, 0, RPC_GSS_SVC_NONE); - gss_register_triple(RPC_AUTH_GSS_KRB5I, gm, 0, RPC_GSS_SVC_INTEGRITY); - if (svcauth_gss_register_pseudoflavor(RPC_AUTH_GSS_KRB5, "krb5")) - printk("Failed to register %s with server!\n", "krb5"); - if (svcauth_gss_register_pseudoflavor(RPC_AUTH_GSS_KRB5I, "krb5i")) - printk("Failed to register %s with server!\n", "krb5i"); - gss_mech_put(gm); - return 0; + return status; } static void __exit cleanup_kerberos_module(void) { - gss_unregister_triple(RPC_AUTH_GSS_KRB5I); - gss_unregister_triple(RPC_AUTH_GSS_KRB5); + gss_mech_unregister(&gss_kerberos_mech); } MODULE_LICENSE("GPL");