1 /* include/gssrpc/auth_gssapi.h - GSS-API style auth parameters for RPC */ 2 /* 3 * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved. 4 */ 5 6 #ifndef GSSRPC_AUTH_GSSAPI_H 7 #define GSSRPC_AUTH_GSSAPI_H 8 9 GSSRPC__BEGIN_DECLS 10 11 #define AUTH_GSSAPI_EXIT 0 12 #define AUTH_GSSAPI_INIT 1 13 #define AUTH_GSSAPI_CONTINUE_INIT 2 14 #define AUTH_GSSAPI_MSG 3 15 #define AUTH_GSSAPI_DESTROY 4 16 17 /* 18 * Yuck. Some sys/types.h files leak symbols 19 */ 20 #ifdef major 21 #undef major 22 #endif 23 #ifdef minor 24 #undef minor 25 #endif 26 27 typedef struct _auth_gssapi_name { 28 char *name; 29 gss_OID type; 30 } auth_gssapi_name; 31 32 typedef struct _auth_gssapi_creds { 33 uint32_t version; 34 bool_t auth_msg; 35 gss_buffer_desc client_handle; 36 } auth_gssapi_creds; 37 38 typedef struct _auth_gssapi_init_arg { 39 uint32_t version; 40 gss_buffer_desc token; 41 } auth_gssapi_init_arg; 42 43 typedef struct _auth_gssapi_init_res { 44 uint32_t version; 45 gss_buffer_desc client_handle; 46 OM_uint32 gss_major, gss_minor; 47 gss_buffer_desc token; 48 gss_buffer_desc signed_isn; 49 } auth_gssapi_init_res; 50 51 typedef void (*auth_gssapi_log_badauth_func) 52 (OM_uint32 major, 53 OM_uint32 minor, 54 struct sockaddr_in *raddr, 55 caddr_t data); 56 57 /* auth_gssapi_log_badauth_func is IPv4-specific; this version gives the 58 * transport handle so the fd can be used to get the address. */ 59 typedef void (*auth_gssapi_log_badauth2_func) 60 (OM_uint32 major, 61 OM_uint32 minor, 62 SVCXPRT *xprt, 63 caddr_t data); 64 65 typedef void (*auth_gssapi_log_badverf_func) 66 (gss_name_t client, 67 gss_name_t server, 68 struct svc_req *rqst, 69 struct rpc_msg *msg, 70 caddr_t data); 71 72 typedef void (*auth_gssapi_log_miscerr_func) 73 (struct svc_req *rqst, 74 struct rpc_msg *msg, 75 char *error, 76 caddr_t data); 77 78 bool_t xdr_gss_buf(XDR *, gss_buffer_t); 79 bool_t xdr_authgssapi_creds(XDR *, auth_gssapi_creds *); 80 bool_t xdr_authgssapi_init_arg(XDR *, auth_gssapi_init_arg *); 81 bool_t xdr_authgssapi_init_res(XDR *, auth_gssapi_init_res *); 82 83 bool_t auth_gssapi_wrap_data 84 (OM_uint32 *major, OM_uint32 *minor, 85 gss_ctx_id_t context, uint32_t seq_num, XDR 86 *out_xdrs, bool_t (*xdr_func)(), caddr_t 87 xdr_ptr); 88 bool_t auth_gssapi_unwrap_data 89 (OM_uint32 *major, OM_uint32 *minor, 90 gss_ctx_id_t context, uint32_t seq_num, XDR 91 *in_xdrs, bool_t (*xdr_func)(), caddr_t 92 xdr_ptr); 93 94 AUTH *auth_gssapi_create 95 (CLIENT *clnt, 96 OM_uint32 *major_status, 97 OM_uint32 *minor_status, 98 gss_cred_id_t claimant_cred_handle, 99 gss_name_t target_name, 100 gss_OID mech_type, 101 OM_uint32 req_flags, 102 OM_uint32 time_req, 103 gss_OID *actual_mech_type, 104 OM_uint32 *ret_flags, 105 OM_uint32 *time_rec); 106 107 AUTH *auth_gssapi_create_default 108 (CLIENT *clnt, char *service_name); 109 110 void auth_gssapi_display_status 111 (char *msg, OM_uint32 major, 112 OM_uint32 minor); 113 114 bool_t auth_gssapi_seal_seq 115 (gss_ctx_id_t context, uint32_t seq_num, gss_buffer_t out_buf); 116 117 bool_t auth_gssapi_unseal_seq 118 (gss_ctx_id_t context, gss_buffer_t in_buf, uint32_t *seq_num); 119 120 bool_t svcauth_gssapi_set_names 121 (auth_gssapi_name *names, int num); 122 void svcauth_gssapi_unset_names 123 (void); 124 125 void svcauth_gssapi_set_log_badauth_func 126 (auth_gssapi_log_badauth_func func, 127 caddr_t data); 128 void svcauth_gssapi_set_log_badauth2_func 129 (auth_gssapi_log_badauth2_func func, 130 caddr_t data); 131 void svcauth_gssapi_set_log_badverf_func 132 (auth_gssapi_log_badverf_func func, 133 caddr_t data); 134 void svcauth_gssapi_set_log_miscerr_func 135 (auth_gssapi_log_miscerr_func func, 136 caddr_t data); 137 138 void svcauth_gss_set_log_badauth_func(auth_gssapi_log_badauth_func, 139 caddr_t); 140 void svcauth_gss_set_log_badauth2_func(auth_gssapi_log_badauth2_func, 141 caddr_t); 142 void svcauth_gss_set_log_badverf_func(auth_gssapi_log_badverf_func, 143 caddr_t); 144 void svcauth_gss_set_log_miscerr_func(auth_gssapi_log_miscerr_func, 145 caddr_t data); 146 147 #define GSS_COPY_BUFFER(dest, src) { \ 148 (dest).length = (src).length; \ 149 (dest).value = (src).value; } 150 151 #define GSS_DUP_BUFFER(dest, src) { \ 152 (dest).length = (src).length; \ 153 (dest).value = (void *) malloc((dest).length); \ 154 memcpy((dest).value, (src).value, (dest).length); } 155 156 #define GSS_BUFFERS_EQUAL(b1, b2) (((b1).length == (b2).length) && \ 157 !memcmp((b1).value,(b2).value,(b1.length))) 158 159 160 GSSRPC__END_DECLS 161 162 #endif /* !defined(GSSRPC_AUTH_GSSAPI_H) */ 163