RPC_GSS_SECCREATE(3)
β¨ RPC_GSS_SECCREATE(3) β the RPCSEC_GSS glow-up β¨
okay so bestie, buckle up π
this is the librpcsec_gss page β the RPC GSS-API Authentication Library, linked with -lrpcsec_gss. It's giving "security guard for your RPC calls" and honestly? iconic. π«Ά
πΈ SYNOPSIS πΈ
#include <rpc/rpcsec_gss.h>
π DESCRIPTION π
RPCSEC_GSS is a security mechanism for the RPC protocol, fr fr. It uses the Generic Security Service API (GSS-API) to establish a security context between a client and a server, and to make sure that all the communication that happens after that between client and server is properly authenticated. no cap. π₯
Optionally, extra protection can be applied to the connection β like, you can level it up if you want:
- integrity service uses checksums to ensure that all data sent by a peer is received without modification. so nobody's out here editing your messages mid-flight π
- privacy service uses encryption to ensure that no third party can access the data for a connection. literally nobody else can peek. π
To use this system, an application must first use rpc_gss_seccreate() to establish a security context. that's the whole entry point, bestie β nothing happens until you call it. β
π DATA STRUCTURES π
Data structures used by RPCSEC_GSS appear below. deep breaths, there's a few, but they all slay in their own way.
rpc_gss_service_t
This type defines the types of security service required for rpc_gss_seccreate().
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;
rpc_gss_options_ret_t
This structure contains various optional values which are used while creating a security context.
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;
rpc_gss_options_ret_t
Various details of the created security context are returned using this structure. (yes, the heading says the same thing twice β that's what the original says, and we don't rewrite the facts, we just vibe with them π )
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;
rpc_gss_principal_t
This type is used to refer to a client principal which is represented in GSS-API exported name form (peep gss_export_name(3) for more details, iykyk). Names in this format may be stored in access control lists or compared with other names in exported name form. This structure is returned by rpc_gss_get_principal_name() and is also referenced by the rpc_gss_rawcred_t structure.
typedef struct {
int len;
char name[1];
} *rpc_gss_principal_t;
rpc_gss_rawcred_t
This structure is used to access the raw credentials associated with a security context.
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;
rpc_gss_ucred_t
Unix credentials which are derived form the raw credentials, accessed via rpc_gss_getcred(). (the typo "form" is canon, we respect the source π«Ά)
typedef struct {
uid_t uid; /* user ID */
gid_t gid; /* group ID */
short gidlen;
gid_t *gidlist; /* list of groups */
} rpc_gss_ucred_t;
rpc_gss_lock_t
Structure used to enforce a particular QOP and service. π
typedef struct {
bool_t locked;
rpc_gss_rawcred_t *raw_cred;
} rpc_gss_lock_t;
rpc_gss_callback_t
Callback structure used by rpc_gss_set_callback().
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;
rpc_gss_error_t
Structure used to return error information by rpc_gss_get_error().
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 */
π INDEX π
The whole friend group, one by one:
rpc_gss_seccreate(3)β Create a new security contextrpc_gss_set_defaults(3)β Set service and quality of protection for a contextrpc_gss_max_data_length(3)β Calculate maximum client message sizes.rpc_gss_get_error(3)β Get details of the last errorrpc_gss_mech_to_oid(3)β Convert a mechanism name to the corresponding GSS-API oid.rpc_gss_oid_to_mech(3)β Convert a GSS-API oid to a mechanism namerpc_gss_qop_to_num(3)β Convert a quality of protection name to the corresponding numberrpc_gss_get_mechanisms(3)β Get a list of security mechanisms.rpc_gss_get_mech_info(3)β Return extra information about a security mechanismrpc_gss_get_versions(3)β Return the maximum and minimum supported versions of the RPCSEC_GSS protocolrpc_gss_is_installed(3)β Query for the presence of a particular security mechanismrpc_gss_set_svc_name(3)β Set the name of a service principal which matches a given RPC program plus version pairrpc_gss_getcred(3)β Get credential details for the security context of an RPC requestrpc_gss_set_callback(3)β Install a callback routine which is called on the server when new security contexts are createdrpc_gss_get_principal_name(3)β Create a client principal name from various stringsrpc_gss_svc_max_data_length(3)β Calculate maximum server message sizes.
π¦ SEE ALSO π¦
gss_export_name(3), gssapi(3), rpc(3), mech(5), qop(5)
go read those too, bestie, they're part of the lore πβ¨
π HISTORY π
The RPCSEC_GSS library first appeared in FreeBSD 8.0. a classic, honestly. π
π AUTHORS π
This manual page was written by Doug Rabson <dfr@FreeBSD.org>. shoutout Doug, the main character of this page π«Άπ
and that's the whole page, bestie β that's the vibe check, and it passed π
kisses, this was the Debian release from January 26, 2010 β RPC_GSS_SECCREATE(3) β see you in the next manpage πβ¨π·
π¦ where this page comes from
- freebsd 14.5: base 14.5
- freebsd 15.1: base 15.1
- Copyright (c) 2008 Isilon Inc http://www.isilon.com/
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms