X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fptlrpc%2Fgss%2Fgss_internal.h;h=65fc5f8289f6c73e74ec248a274badd8f2e9ba9e;hb=2c27b194121665061cc0527e8bef35886ec7fea8;hp=66afd61f293f6e1e8f88f11f3f3ae7d01117111e;hpb=744f32ac9efb1e2f2837992703c5a5e35f261e60;p=fs%2Flustre-release.git diff --git a/lustre/ptlrpc/gss/gss_internal.h b/lustre/ptlrpc/gss/gss_internal.h index 66afd61..65fc5f8 100644 --- a/lustre/ptlrpc/gss/gss_internal.h +++ b/lustre/ptlrpc/gss/gss_internal.h @@ -1,9 +1,9 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * Modified from NFSv4 project for Lustre * - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * + * Copyright (c) 2012, 2016, Intel Corporation. * * Author: Eric Mei */ @@ -11,6 +11,7 @@ #ifndef __PTLRPC_GSS_GSS_INTERNAL_H_ #define __PTLRPC_GSS_GSS_INTERNAL_H_ +#include #include /* @@ -92,7 +93,11 @@ unsigned long gss_round_ctx_expiry(unsigned long expiry, /* * XXX make it visible of kernel and lgssd/lsvcgssd */ -#define GSSD_INTERFACE_VERSION (1) +enum { + GSSD_INTERFACE_VERSION_V1 = 1, + GSSD_INTERFACE_VERSION_V2 = 2, + GSSD_INTERFACE_VERSION = GSSD_INTERFACE_VERSION_V2, +}; #define PTLRPC_GSS_VERSION (1) @@ -119,16 +124,18 @@ enum ptlrpc_gss_header_flags { static inline __u32 import_to_gss_svc(struct obd_import *imp) { - const char *name = imp->imp_obd->obd_type->typ_name; - - if (!strcmp(name, LUSTRE_MGC_NAME)) - return LUSTRE_GSS_TGT_MGS; - if (!strcmp(name, LUSTRE_MDC_NAME)) - return LUSTRE_GSS_TGT_MDS; - if (!strcmp(name, LUSTRE_OSC_NAME)) - return LUSTRE_GSS_TGT_OSS; - LBUG(); - return 0; + const char *name = imp->imp_obd->obd_type->typ_name; + + if (!strcmp(name, LUSTRE_MGC_NAME)) + return LUSTRE_GSS_TGT_MGS; + if (!strcmp(name, LUSTRE_MDC_NAME) || + !strcmp(name, LUSTRE_LWP_NAME)) + return LUSTRE_GSS_TGT_MDS; + if (!strcmp(name, LUSTRE_OSC_NAME) || + !strcmp(name, LUSTRE_OSP_NAME)) + return LUSTRE_GSS_TGT_OSS; + + return 0; } /* @@ -207,7 +214,7 @@ static inline __u64 gss_handle_to_u64(rawobj_t *handle) GSS_SEQ_WIN_MAIN / 4) struct gss_svc_seq_data { - spinlock_t ssd_lock; + spinlock_t ssd_lock; /* * highest sequence number seen so far, for main and back window */ @@ -232,6 +239,7 @@ struct gss_svc_ctx { uid_t gsc_mapped_uid; unsigned int gsc_usr_root:1, gsc_usr_mds:1, + gsc_usr_oss:1, gsc_remote:1, gsc_reverse:1; }; @@ -260,15 +268,15 @@ struct gss_svc_reqctx { }; struct gss_cli_ctx { - struct ptlrpc_cli_ctx gc_base; - __u32 gc_flavor; - __u32 gc_proc; - __u32 gc_win; - atomic_t gc_seq; - rawobj_t gc_handle; - struct gss_ctx *gc_mechctx; - /* handle for the buddy svc ctx */ - rawobj_t gc_svc_handle; + struct ptlrpc_cli_ctx gc_base; + __u32 gc_flavor; + __u32 gc_proc; + __u32 gc_win; + atomic_t gc_seq; + rawobj_t gc_handle; + struct gss_ctx *gc_mechctx; + /* handle for the buddy svc ctx */ + rawobj_t gc_svc_handle; }; struct gss_cli_ctx_keyring { @@ -278,16 +286,16 @@ struct gss_cli_ctx_keyring { }; struct gss_sec { - struct ptlrpc_sec gs_base; - struct gss_api_mech *gs_mech; - spinlock_t gs_lock; - __u64 gs_rvs_hdl; + struct ptlrpc_sec gs_base; + struct gss_api_mech *gs_mech; + spinlock_t gs_lock; + __u64 gs_rvs_hdl; }; struct gss_sec_pipefs { - struct gss_sec gsp_base; - int gsp_chash_size; /* must be 2^n */ - struct hlist_head gsp_chash[0]; + struct gss_sec gsp_base; + int gsp_chash_size; /* must be 2^n */ + struct hlist_head gsp_chash[0]; }; /* @@ -300,7 +308,7 @@ struct gss_sec_keyring { /* * all contexts listed here. access is protected by sec spinlock. */ - struct hlist_head gsk_clist; + struct hlist_head gsk_clist; /* * specially point to root ctx (only one at a time). access is * protected by sec spinlock. @@ -309,10 +317,10 @@ struct gss_sec_keyring { /* * specially serialize upcalls for root context. */ - struct mutex gsk_root_uc_lock; + struct mutex gsk_root_uc_lock; #ifdef HAVE_KEYRING_UPCALL_SERIALIZED - struct mutex gsk_uc_lock; /* serialize upcalls */ + struct mutex gsk_uc_lock; /* serialize upcalls */ #endif }; @@ -400,7 +408,8 @@ int cli_ctx_check_death(struct ptlrpc_cli_ctx *ctx); int gss_copy_rvc_cli_ctx(struct ptlrpc_cli_ctx *cli_ctx, struct ptlrpc_svc_ctx *svc_ctx); -struct gss_header *gss_swab_header(struct lustre_msg *msg, int segment); +struct gss_header *gss_swab_header(struct lustre_msg *msg, int segment, + int swabbed); netobj_t *gss_swab_netobj(struct lustre_msg *msg, int segment); void gss_cli_ctx_uptodate(struct gss_cli_ctx *gctx); @@ -425,12 +434,22 @@ int gss_cli_ctx_fini_common(struct ptlrpc_sec *sec, void gss_cli_ctx_flags2str(unsigned long flags, char *buf, int bufsize); /* gss_keyring.c */ +#ifndef HAVE_GSS_KEYRING +static inline int __init gss_init_keyring(void) { return 0; } +static inline void __exit gss_exit_keyring(void) { return; } +#else int __init gss_init_keyring(void); void __exit gss_exit_keyring(void); +#endif /* gss_pipefs.c */ +#ifndef HAVE_GSS_PIPEFS +static inline int __init gss_init_pipefs(void) { return 0; } +static inline void __exit gss_exit_pipefs(void) { return; } +#else int __init gss_init_pipefs(void); void __exit gss_exit_pipefs(void); +#endif /* gss_bulk.c */ int gss_cli_prep_bulk(struct ptlrpc_request *req, @@ -448,10 +467,6 @@ int gss_svc_unwrap_bulk(struct ptlrpc_request *req, int gss_svc_wrap_bulk(struct ptlrpc_request *req, struct ptlrpc_bulk_desc *desc); -/* gss_mech_switch.c */ -int init_kerberos_module(void); -void cleanup_kerberos_module(void); - /* gss_generic_token.c */ int g_token_size(rawobj_t *mech, unsigned int body_size); void g_make_token_header(rawobj_t *mech, int body_size, unsigned char **buf); @@ -460,11 +475,11 @@ __u32 g_verify_token_header(rawobj_t *mech, int *body_size, /* gss_cli_upcall.c */ -int gss_do_ctx_init_rpc(char *buffer, unsigned long count); +int gss_do_ctx_init_rpc(char __user *buffer, unsigned long count); int gss_do_ctx_fini_rpc(struct gss_cli_ctx *gctx); int __init gss_init_cli_upcall(void); -void __exit gss_exit_cli_upcall(void); +void gss_exit_cli_upcall(void); /* gss_svc_upcall.c */ __u64 gss_get_next_ctx_index(void); @@ -487,19 +502,31 @@ void gss_svc_upcall_put_ctx(struct gss_svc_ctx *ctx); void gss_svc_upcall_destroy_ctx(struct gss_svc_ctx *ctx); int __init gss_init_svc_upcall(void); -void __exit gss_exit_svc_upcall(void); +void gss_exit_svc_upcall(void); /* lproc_gss.c */ void gss_stat_oos_record_cli(int behind); void gss_stat_oos_record_svc(int phase, int replay); int __init gss_init_lproc(void); -void __exit gss_exit_lproc(void); +void gss_exit_lproc(void); + +/* gss_null_mech.c */ +int __init init_null_module(void); +void cleanup_null_module(void); /* gss_krb5_mech.c */ int __init init_kerberos_module(void); -void __exit cleanup_kerberos_module(void); +void cleanup_kerberos_module(void); +/* gss_sk_mech.c */ +#ifdef HAVE_OPENSSL_SSK +int __init init_sk_module(void); +void cleanup_sk_module(void); +#else +static inline int init_sk_module(void) { return 0; } +static inline void cleanup_sk_module(void) { return; } +#endif /* HAVE_OPENSSL_SSK */ /* debug */ static inline