Whamcloud - gitweb
LU-9019 sec: migrate to 64 bit time
[fs/lustre-release.git] / lustre / ptlrpc / gss / gss_api.h
1 /*
2  * Modifications for Lustre
3  *
4  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
5  *
6  * Author: Eric Mei <ericm@clusterfs.com>
7  */
8
9 /*
10  * Somewhat simplified version of the gss api.
11  *
12  * Dug Song <dugsong@monkey.org>
13  * Andy Adamson <andros@umich.edu>
14  * Bruce Fields <bfields@umich.edu>
15  * Copyright (c) 2000 The Regents of the University of Michigan
16  *
17  */
18
19 #ifndef __PTLRPC_GSS_GSS_API_H_
20 #define __PTLRPC_GSS_GSS_API_H_
21
22 struct gss_api_mech;
23
24 /* The mechanism-independent gss-api context: */
25 struct gss_ctx {
26         struct gss_api_mech    *mech_type;
27         void                   *internal_ctx_id;
28 };
29
30 #define GSS_C_NO_BUFFER         ((rawobj_t) 0)
31 #define GSS_C_NO_CONTEXT        ((struct gss_ctx *) 0)
32 #define GSS_C_NULL_OID          ((rawobj_t) 0)
33
34 /*
35  * gss-api prototypes; note that these are somewhat simplified versions of
36  * the prototypes specified in RFC 2744.
37  */
38 __u32 lgss_import_sec_context(
39                 rawobj_t                *input_token,
40                 struct gss_api_mech     *mech,
41                 struct gss_ctx         **ctx);
42 __u32 lgss_copy_reverse_context(
43                 struct gss_ctx          *ctx,
44                 struct gss_ctx         **ctx_new);
45 __u32 lgss_inquire_context(
46                 struct gss_ctx          *ctx,
47                 time64_t *endtime);
48 __u32 lgss_get_mic(
49                 struct gss_ctx          *ctx,
50                 int                      msgcnt,
51                 rawobj_t                *msgs,
52                 int                      iovcnt,
53                 lnet_kiov_t             *iovs,
54                 rawobj_t                *mic_token);
55 __u32 lgss_verify_mic(
56                 struct gss_ctx          *ctx,
57                 int                      msgcnt,
58                 rawobj_t                *msgs,
59                 int                      iovcnt,
60                 lnet_kiov_t             *iovs,
61                 rawobj_t                *mic_token);
62 __u32 lgss_wrap(
63                 struct gss_ctx          *ctx,
64                 rawobj_t                *gsshdr,
65                 rawobj_t                *msg,
66                 int                      msg_buflen,
67                 rawobj_t                *out_token);
68 __u32 lgss_unwrap(
69                 struct gss_ctx          *ctx,
70                 rawobj_t                *gsshdr,
71                 rawobj_t                *token,
72                 rawobj_t                *out_msg);
73 __u32 lgss_prep_bulk(
74                 struct gss_ctx          *gctx,
75                 struct ptlrpc_bulk_desc *desc);
76 __u32 lgss_wrap_bulk(
77                 struct gss_ctx          *gctx,
78                 struct ptlrpc_bulk_desc *desc,
79                 rawobj_t                *token,
80                 int                      adj_nob);
81 __u32 lgss_unwrap_bulk(
82                 struct gss_ctx          *gctx,
83                 struct ptlrpc_bulk_desc *desc,
84                 rawobj_t                *token,
85                 int                      adj_nob);
86 __u32 lgss_delete_sec_context(
87                 struct gss_ctx         **ctx);
88 int lgss_display(
89                 struct gss_ctx          *ctx,
90                 char                    *buf,
91                 int                      bufsize);
92
93 struct subflavor_desc {
94         __u32           sf_subflavor;
95         __u32           sf_qop;
96         __u32           sf_service;
97         char           *sf_name;
98 };
99
100 /* Each mechanism is described by the following struct: */
101 struct gss_api_mech {
102         struct list_head        gm_list;
103         struct module          *gm_owner;
104         char                   *gm_name;
105         rawobj_t                gm_oid;
106         atomic_t                gm_count;
107         struct gss_api_ops     *gm_ops;
108         int                     gm_sf_num;
109         struct subflavor_desc  *gm_sfs;
110 };
111
112 /* and must provide the following operations: */
113 struct gss_api_ops {
114         __u32 (*gss_import_sec_context)(
115                         rawobj_t               *input_token,
116                         struct gss_ctx         *ctx);
117         __u32 (*gss_copy_reverse_context)(
118                         struct gss_ctx         *ctx,
119                         struct gss_ctx         *ctx_new);
120         __u32 (*gss_inquire_context)(
121                         struct gss_ctx         *ctx,
122                         time64_t *endtime);
123         __u32 (*gss_get_mic)(
124                         struct gss_ctx         *ctx,
125                         int                     msgcnt,
126                         rawobj_t               *msgs,
127                         int                     iovcnt,
128                         lnet_kiov_t            *iovs,
129                         rawobj_t               *mic_token);
130         __u32 (*gss_verify_mic)(
131                         struct gss_ctx         *ctx,
132                         int                     msgcnt,
133                         rawobj_t               *msgs,
134                         int                     iovcnt,
135                         lnet_kiov_t            *iovs,
136                         rawobj_t               *mic_token);
137         __u32 (*gss_wrap)(
138                         struct gss_ctx         *ctx,
139                         rawobj_t               *gsshdr,
140                         rawobj_t               *msg,
141                         int                     msg_buflen,
142                         rawobj_t               *out_token);
143         __u32 (*gss_unwrap)(
144                         struct gss_ctx         *ctx,
145                         rawobj_t               *gsshdr,
146                         rawobj_t               *token,
147                         rawobj_t               *out_msg);
148         __u32 (*gss_prep_bulk)(
149                         struct gss_ctx         *gctx,
150                         struct ptlrpc_bulk_desc *desc);
151         __u32 (*gss_wrap_bulk)(
152                         struct gss_ctx         *gctx,
153                         struct ptlrpc_bulk_desc *desc,
154                         rawobj_t               *token,
155                         int                     adj_nob);
156         __u32 (*gss_unwrap_bulk)(
157                         struct gss_ctx         *gctx,
158                         struct ptlrpc_bulk_desc *desc,
159                         rawobj_t               *token,
160                         int                     adj_nob);
161         void (*gss_delete_sec_context)(
162                         void                   *ctx);
163         int  (*gss_display)(
164                         struct gss_ctx         *ctx,
165                         char                   *buf,
166                         int                     bufsize);
167 };
168
169 int lgss_mech_register(struct gss_api_mech *mech);
170 void lgss_mech_unregister(struct gss_api_mech *mech);
171
172 struct gss_api_mech * lgss_OID_to_mech(rawobj_t *oid);
173 struct gss_api_mech * lgss_name_to_mech(char *name);
174 struct gss_api_mech * lgss_subflavor_to_mech(__u32 subflavor);
175
176 struct gss_api_mech * lgss_mech_get(struct gss_api_mech *mech);
177 void lgss_mech_put(struct gss_api_mech *mech);
178
179 #endif /* __PTLRPC_GSS_GSS_API_H_ */