| /* |
| * Modifications for Lustre |
| * |
| * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. |
| * |
| * Author: Eric Mei <ericm@clusterfs.com> |
| */ |
| |
| /* |
| * Somewhat simplified version of the gss api. |
| * |
| * Dug Song <dugsong@monkey.org> |
| * Andy Adamson <andros@umich.edu> |
| * Bruce Fields <bfields@umich.edu> |
| * Copyright (c) 2000 The Regents of the University of Michigan |
| * |
| */ |
| |
| #ifndef __PTLRPC_GSS_GSS_API_H_ |
| #define __PTLRPC_GSS_GSS_API_H_ |
| |
| struct gss_api_mech; |
| |
| /* The mechanism-independent gss-api context: */ |
| struct gss_ctx { |
| struct gss_api_mech *mech_type; |
| void *internal_ctx_id; |
| }; |
| |
| #define GSS_C_NO_BUFFER ((rawobj_t) 0) |
| #define GSS_C_NO_CONTEXT ((struct gss_ctx *) 0) |
| #define GSS_C_NULL_OID ((rawobj_t) 0) |
| |
| /* |
| * gss-api prototypes; note that these are somewhat simplified versions of |
| * the prototypes specified in RFC 2744. |
| */ |
| __u32 lgss_import_sec_context( |
| rawobj_t *input_token, |
| struct gss_api_mech *mech, |
| struct gss_ctx **ctx); |
| __u32 lgss_copy_reverse_context( |
| struct gss_ctx *ctx, |
| struct gss_ctx **ctx_new); |
| __u32 lgss_inquire_context( |
| struct gss_ctx *ctx, |
| unsigned long *endtime); |
| __u32 lgss_get_mic( |
| struct gss_ctx *ctx, |
| int msgcnt, |
| rawobj_t *msgs, |
| int iovcnt, |
| lnet_kiov_t *iovs, |
| rawobj_t *mic_token); |
| __u32 lgss_verify_mic( |
| struct gss_ctx *ctx, |
| int msgcnt, |
| rawobj_t *msgs, |
| int iovcnt, |
| lnet_kiov_t *iovs, |
| rawobj_t *mic_token); |
| __u32 lgss_wrap( |
| struct gss_ctx *ctx, |
| rawobj_t *gsshdr, |
| rawobj_t *msg, |
| int msg_buflen, |
| rawobj_t *out_token); |
| __u32 lgss_unwrap( |
| struct gss_ctx *ctx, |
| rawobj_t *gsshdr, |
| rawobj_t *token, |
| rawobj_t *out_msg); |
| __u32 lgss_prep_bulk( |
| struct gss_ctx *gctx, |
| struct ptlrpc_bulk_desc *desc); |
| __u32 lgss_wrap_bulk( |
| struct gss_ctx *gctx, |
| struct ptlrpc_bulk_desc *desc, |
| rawobj_t *token, |
| int adj_nob); |
| __u32 lgss_unwrap_bulk( |
| struct gss_ctx *gctx, |
| struct ptlrpc_bulk_desc *desc, |
| rawobj_t *token, |
| int adj_nob); |
| __u32 lgss_delete_sec_context( |
| struct gss_ctx **ctx); |
| int lgss_display( |
| struct gss_ctx *ctx, |
| char *buf, |
| int bufsize); |
| |
| struct subflavor_desc { |
| __u32 sf_subflavor; |
| __u32 sf_qop; |
| __u32 sf_service; |
| char *sf_name; |
| }; |
| |
| /* Each mechanism is described by the following struct: */ |
| struct gss_api_mech { |
| struct list_head gm_list; |
| struct module *gm_owner; |
| char *gm_name; |
| rawobj_t gm_oid; |
| atomic_t gm_count; |
| struct gss_api_ops *gm_ops; |
| int gm_sf_num; |
| struct subflavor_desc *gm_sfs; |
| }; |
| |
| /* and must provide the following operations: */ |
| struct gss_api_ops { |
| __u32 (*gss_import_sec_context)( |
| rawobj_t *input_token, |
| struct gss_ctx *ctx); |
| __u32 (*gss_copy_reverse_context)( |
| struct gss_ctx *ctx, |
| struct gss_ctx *ctx_new); |
| __u32 (*gss_inquire_context)( |
| struct gss_ctx *ctx, |
| unsigned long *endtime); |
| __u32 (*gss_get_mic)( |
| struct gss_ctx *ctx, |
| int msgcnt, |
| rawobj_t *msgs, |
| int iovcnt, |
| lnet_kiov_t *iovs, |
| rawobj_t *mic_token); |
| __u32 (*gss_verify_mic)( |
| struct gss_ctx *ctx, |
| int msgcnt, |
| rawobj_t *msgs, |
| int iovcnt, |
| lnet_kiov_t *iovs, |
| rawobj_t *mic_token); |
| __u32 (*gss_wrap)( |
| struct gss_ctx *ctx, |
| rawobj_t *gsshdr, |
| rawobj_t *msg, |
| int msg_buflen, |
| rawobj_t *out_token); |
| __u32 (*gss_unwrap)( |
| struct gss_ctx *ctx, |
| rawobj_t *gsshdr, |
| rawobj_t *token, |
| rawobj_t *out_msg); |
| __u32 (*gss_prep_bulk)( |
| struct gss_ctx *gctx, |
| struct ptlrpc_bulk_desc *desc); |
| __u32 (*gss_wrap_bulk)( |
| struct gss_ctx *gctx, |
| struct ptlrpc_bulk_desc *desc, |
| rawobj_t *token, |
| int adj_nob); |
| __u32 (*gss_unwrap_bulk)( |
| struct gss_ctx *gctx, |
| struct ptlrpc_bulk_desc *desc, |
| rawobj_t *token, |
| int adj_nob); |
| void (*gss_delete_sec_context)( |
| void *ctx); |
| int (*gss_display)( |
| struct gss_ctx *ctx, |
| char *buf, |
| int bufsize); |
| }; |
| |
| int lgss_mech_register(struct gss_api_mech *mech); |
| void lgss_mech_unregister(struct gss_api_mech *mech); |
| |
| struct gss_api_mech * lgss_OID_to_mech(rawobj_t *oid); |
| struct gss_api_mech * lgss_name_to_mech(char *name); |
| struct gss_api_mech * lgss_subflavor_to_mech(__u32 subflavor); |
| |
| struct gss_api_mech * lgss_mech_get(struct gss_api_mech *mech); |
| void lgss_mech_put(struct gss_api_mech *mech); |
| |
| #endif /* __PTLRPC_GSS_GSS_API_H_ */ |