]>
Commit | Line | Data |
---|---|---|
1da177e4 | 1 | /* |
f30c2269 | 2 | * linux/include/linux/sunrpc/gss_api.h |
1da177e4 LT |
3 | * |
4 | * Somewhat simplified version of the gss api. | |
5 | * | |
6 | * Dug Song <dugsong@monkey.org> | |
7 | * Andy Adamson <andros@umich.edu> | |
8 | * Bruce Fields <bfields@umich.edu> | |
9 | * Copyright (c) 2000 The Regents of the University of Michigan | |
10 | * | |
11 | * $Id$ | |
12 | */ | |
13 | ||
14 | #ifndef _LINUX_SUNRPC_GSS_API_H | |
15 | #define _LINUX_SUNRPC_GSS_API_H | |
16 | ||
17 | #ifdef __KERNEL__ | |
18 | #include <linux/sunrpc/xdr.h> | |
19 | #include <linux/uio.h> | |
20 | ||
21 | /* The mechanism-independent gss-api context: */ | |
22 | struct gss_ctx { | |
23 | struct gss_api_mech *mech_type; | |
24 | void *internal_ctx_id; | |
25 | }; | |
26 | ||
27 | #define GSS_C_NO_BUFFER ((struct xdr_netobj) 0) | |
28 | #define GSS_C_NO_CONTEXT ((struct gss_ctx *) 0) | |
29 | #define GSS_C_NULL_OID ((struct xdr_netobj) 0) | |
30 | ||
31 | /*XXX arbitrary length - is this set somewhere? */ | |
32 | #define GSS_OID_MAX_LEN 32 | |
33 | ||
34 | /* gss-api prototypes; note that these are somewhat simplified versions of | |
35 | * the prototypes specified in RFC 2744. */ | |
36 | int gss_import_sec_context( | |
37 | const void* input_token, | |
38 | size_t bufsize, | |
39 | struct gss_api_mech *mech, | |
40 | struct gss_ctx **ctx_id); | |
41 | u32 gss_get_mic( | |
42 | struct gss_ctx *ctx_id, | |
1da177e4 LT |
43 | struct xdr_buf *message, |
44 | struct xdr_netobj *mic_token); | |
45 | u32 gss_verify_mic( | |
46 | struct gss_ctx *ctx_id, | |
47 | struct xdr_buf *message, | |
00fd6e14 | 48 | struct xdr_netobj *mic_token); |
293f1eb5 BF |
49 | u32 gss_wrap( |
50 | struct gss_ctx *ctx_id, | |
293f1eb5 BF |
51 | int offset, |
52 | struct xdr_buf *outbuf, | |
53 | struct page **inpages); | |
54 | u32 gss_unwrap( | |
55 | struct gss_ctx *ctx_id, | |
293f1eb5 BF |
56 | int offset, |
57 | struct xdr_buf *inbuf); | |
1da177e4 LT |
58 | u32 gss_delete_sec_context( |
59 | struct gss_ctx **ctx_id); | |
60 | ||
c4170583 | 61 | u32 gss_svc_to_pseudoflavor(struct gss_api_mech *, u32 service); |
1da177e4 LT |
62 | u32 gss_pseudoflavor_to_service(struct gss_api_mech *, u32 pseudoflavor); |
63 | char *gss_service_to_auth_domain_name(struct gss_api_mech *, u32 service); | |
64 | ||
65 | struct pf_desc { | |
66 | u32 pseudoflavor; | |
1da177e4 LT |
67 | u32 service; |
68 | char *name; | |
69 | char *auth_domain_name; | |
70 | }; | |
71 | ||
72 | /* Different mechanisms (e.g., krb5 or spkm3) may implement gss-api, and | |
73 | * mechanisms may be dynamically registered or unregistered by modules. */ | |
74 | ||
75 | /* Each mechanism is described by the following struct: */ | |
76 | struct gss_api_mech { | |
77 | struct list_head gm_list; | |
78 | struct module *gm_owner; | |
79 | struct xdr_netobj gm_oid; | |
80 | char *gm_name; | |
f1c0a861 | 81 | const struct gss_api_ops *gm_ops; |
1da177e4 LT |
82 | /* pseudoflavors supported by this mechanism: */ |
83 | int gm_pf_num; | |
84 | struct pf_desc * gm_pfs; | |
85 | }; | |
86 | ||
87 | /* and must provide the following operations: */ | |
88 | struct gss_api_ops { | |
89 | int (*gss_import_sec_context)( | |
90 | const void *input_token, | |
91 | size_t bufsize, | |
92 | struct gss_ctx *ctx_id); | |
93 | u32 (*gss_get_mic)( | |
94 | struct gss_ctx *ctx_id, | |
1da177e4 LT |
95 | struct xdr_buf *message, |
96 | struct xdr_netobj *mic_token); | |
97 | u32 (*gss_verify_mic)( | |
98 | struct gss_ctx *ctx_id, | |
99 | struct xdr_buf *message, | |
00fd6e14 | 100 | struct xdr_netobj *mic_token); |
293f1eb5 BF |
101 | u32 (*gss_wrap)( |
102 | struct gss_ctx *ctx_id, | |
293f1eb5 BF |
103 | int offset, |
104 | struct xdr_buf *outbuf, | |
105 | struct page **inpages); | |
106 | u32 (*gss_unwrap)( | |
107 | struct gss_ctx *ctx_id, | |
293f1eb5 BF |
108 | int offset, |
109 | struct xdr_buf *buf); | |
1da177e4 LT |
110 | void (*gss_delete_sec_context)( |
111 | void *internal_ctx_id); | |
112 | }; | |
113 | ||
114 | int gss_mech_register(struct gss_api_mech *); | |
115 | void gss_mech_unregister(struct gss_api_mech *); | |
116 | ||
117 | /* returns a mechanism descriptor given an OID, and increments the mechanism's | |
118 | * reference count. */ | |
119 | struct gss_api_mech * gss_mech_get_by_OID(struct xdr_netobj *); | |
120 | ||
121 | /* Returns a reference to a mechanism, given a name like "krb5" etc. */ | |
122 | struct gss_api_mech *gss_mech_get_by_name(const char *); | |
123 | ||
124 | /* Similar, but get by pseudoflavor. */ | |
125 | struct gss_api_mech *gss_mech_get_by_pseudoflavor(u32); | |
126 | ||
127 | /* Just increments the mechanism's reference count and returns its input: */ | |
128 | struct gss_api_mech * gss_mech_get(struct gss_api_mech *); | |
129 | ||
d6e05edc | 130 | /* For every successful gss_mech_get or gss_mech_get_by_* call there must be a |
1da177e4 LT |
131 | * corresponding call to gss_mech_put. */ |
132 | void gss_mech_put(struct gss_api_mech *); | |
133 | ||
134 | #endif /* __KERNEL__ */ | |
135 | #endif /* _LINUX_SUNRPC_GSS_API_H */ | |
136 |