To use this system, an application must first use Fn rpc_gss_seccreate to establish a security context.
typedef enum { rpc_gss_svc_default = 0, rpc_gss_svc_none = 1, rpc_gss_svc_integrity = 2, rpc_gss_svc_privacy = 3 } rpc_gss_service_t;
typedef struct { int req_flags; /* GSS request bits */ int time_req; /* requested lifetime */ gss_cred_id_t my_cred; /* GSS credential */ gss_channel_bindings_t input_channel_bindings; } rpc_gss_options_req_t;
typedef struct { int major_status; int minor_status; u_int rpcsec_version; int ret_flags; int time_req; gss_ctx_id_t gss_context; char actual_mechanism[MAX_GSS_MECH]; } rpc_gss_options_ret_t;
typedef struct { int len; char name[1]; } *rpc_gss_principal_t;
typedef struct { u_int version; /* RPC version number */ const char *mechanism; /* security mechanism */ const char *qop; /* quality of protection */ rpc_gss_principal_t client_principal; /* client name */ const char *svc_principal; /* server name */ rpc_gss_service_t service; /* service type */ } rpc_gss_rawcred_t;
typedef struct { uid_t uid; /* user ID */ gid_t gid; /* group ID */ short gidlen; gid_t *gidlist; /* list of groups */ } rpc_gss_ucred_t;
typedef struct { bool_t locked; rpc_gss_rawcred_t *raw_cred; } rpc_gss_lock_t;
typedef struct { u_int program; /* RPC program number */ u_int version; /* RPC version number */ /* user defined callback */ bool_t (*callback)(struct svc_req *req, gss_cred_id_t deleg, gss_ctx_id_t gss_context, rpc_gss_lock_t *lock, void **cookie); } rpc_gss_callback_t;
typedef struct { int rpc_gss_error; int system_error; /* same as errno */ } rpc_gss_error_t; /* * Values for rpc_gss_error */ #define RPC_GSS_ER_SUCCESS 0 /* no error */ #define RPC_GSS_ER_SYSTEMERROR 1 /* system error */