aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/sunrpc/gss_api.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/sunrpc/gss_api.h')
-rw-r--r--include/linux/sunrpc/gss_api.h32
1 files changed, 25 insertions, 7 deletions
diff --git a/include/linux/sunrpc/gss_api.h b/include/linux/sunrpc/gss_api.h
index a19e2547ae6a..161463e59624 100644
--- a/include/linux/sunrpc/gss_api.h
+++ b/include/linux/sunrpc/gss_api.h
@@ -25,10 +25,21 @@ struct gss_ctx {
25 25
26#define GSS_C_NO_BUFFER ((struct xdr_netobj) 0) 26#define GSS_C_NO_BUFFER ((struct xdr_netobj) 0)
27#define GSS_C_NO_CONTEXT ((struct gss_ctx *) 0) 27#define GSS_C_NO_CONTEXT ((struct gss_ctx *) 0)
28#define GSS_C_NULL_OID ((struct xdr_netobj) 0) 28#define GSS_C_QOP_DEFAULT (0)
29 29
30/*XXX arbitrary length - is this set somewhere? */ 30/*XXX arbitrary length - is this set somewhere? */
31#define GSS_OID_MAX_LEN 32 31#define GSS_OID_MAX_LEN 32
32struct rpcsec_gss_oid {
33 unsigned int len;
34 u8 data[GSS_OID_MAX_LEN];
35};
36
37/* From RFC 3530 */
38struct rpcsec_gss_info {
39 struct rpcsec_gss_oid oid;
40 u32 qop;
41 u32 service;
42};
32 43
33/* gss-api prototypes; note that these are somewhat simplified versions of 44/* gss-api prototypes; note that these are somewhat simplified versions of
34 * the prototypes specified in RFC 2744. */ 45 * the prototypes specified in RFC 2744. */
@@ -37,6 +48,7 @@ int gss_import_sec_context(
37 size_t bufsize, 48 size_t bufsize,
38 struct gss_api_mech *mech, 49 struct gss_api_mech *mech,
39 struct gss_ctx **ctx_id, 50 struct gss_ctx **ctx_id,
51 time_t *endtime,
40 gfp_t gfp_mask); 52 gfp_t gfp_mask);
41u32 gss_get_mic( 53u32 gss_get_mic(
42 struct gss_ctx *ctx_id, 54 struct gss_ctx *ctx_id,
@@ -58,12 +70,14 @@ u32 gss_unwrap(
58u32 gss_delete_sec_context( 70u32 gss_delete_sec_context(
59 struct gss_ctx **ctx_id); 71 struct gss_ctx **ctx_id);
60 72
61u32 gss_svc_to_pseudoflavor(struct gss_api_mech *, u32 service); 73rpc_authflavor_t gss_svc_to_pseudoflavor(struct gss_api_mech *, u32 qop,
74 u32 service);
62u32 gss_pseudoflavor_to_service(struct gss_api_mech *, u32 pseudoflavor); 75u32 gss_pseudoflavor_to_service(struct gss_api_mech *, u32 pseudoflavor);
63char *gss_service_to_auth_domain_name(struct gss_api_mech *, u32 service); 76char *gss_service_to_auth_domain_name(struct gss_api_mech *, u32 service);
64 77
65struct pf_desc { 78struct pf_desc {
66 u32 pseudoflavor; 79 u32 pseudoflavor;
80 u32 qop;
67 u32 service; 81 u32 service;
68 char *name; 82 char *name;
69 char *auth_domain_name; 83 char *auth_domain_name;
@@ -76,7 +90,7 @@ struct pf_desc {
76struct gss_api_mech { 90struct gss_api_mech {
77 struct list_head gm_list; 91 struct list_head gm_list;
78 struct module *gm_owner; 92 struct module *gm_owner;
79 struct xdr_netobj gm_oid; 93 struct rpcsec_gss_oid gm_oid;
80 char *gm_name; 94 char *gm_name;
81 const struct gss_api_ops *gm_ops; 95 const struct gss_api_ops *gm_ops;
82 /* pseudoflavors supported by this mechanism: */ 96 /* pseudoflavors supported by this mechanism: */
@@ -92,6 +106,7 @@ struct gss_api_ops {
92 const void *input_token, 106 const void *input_token,
93 size_t bufsize, 107 size_t bufsize,
94 struct gss_ctx *ctx_id, 108 struct gss_ctx *ctx_id,
109 time_t *endtime,
95 gfp_t gfp_mask); 110 gfp_t gfp_mask);
96 u32 (*gss_get_mic)( 111 u32 (*gss_get_mic)(
97 struct gss_ctx *ctx_id, 112 struct gss_ctx *ctx_id,
@@ -119,7 +134,13 @@ void gss_mech_unregister(struct gss_api_mech *);
119 134
120/* returns a mechanism descriptor given an OID, and increments the mechanism's 135/* returns a mechanism descriptor given an OID, and increments the mechanism's
121 * reference count. */ 136 * reference count. */
122struct gss_api_mech * gss_mech_get_by_OID(struct xdr_netobj *); 137struct gss_api_mech * gss_mech_get_by_OID(struct rpcsec_gss_oid *);
138
139/* Given a GSS security tuple, look up a pseudoflavor */
140rpc_authflavor_t gss_mech_info2flavor(struct rpcsec_gss_info *);
141
142/* Given a pseudoflavor, look up a GSS security tuple */
143int gss_mech_flavor2info(rpc_authflavor_t, struct rpcsec_gss_info *);
123 144
124/* Returns a reference to a mechanism, given a name like "krb5" etc. */ 145/* Returns a reference to a mechanism, given a name like "krb5" etc. */
125struct gss_api_mech *gss_mech_get_by_name(const char *); 146struct gss_api_mech *gss_mech_get_by_name(const char *);
@@ -130,9 +151,6 @@ struct gss_api_mech *gss_mech_get_by_pseudoflavor(u32);
130/* Fill in an array with a list of supported pseudoflavors */ 151/* Fill in an array with a list of supported pseudoflavors */
131int gss_mech_list_pseudoflavors(rpc_authflavor_t *, int); 152int gss_mech_list_pseudoflavors(rpc_authflavor_t *, int);
132 153
133/* Just increments the mechanism's reference count and returns its input: */
134struct gss_api_mech * gss_mech_get(struct gss_api_mech *);
135
136/* For every successful gss_mech_get or gss_mech_get_by_* call there must be a 154/* For every successful gss_mech_get or gss_mech_get_by_* call there must be a
137 * corresponding call to gss_mech_put. */ 155 * corresponding call to gss_mech_put. */
138void gss_mech_put(struct gss_api_mech *); 156void gss_mech_put(struct gss_api_mech *);