Specifies callback routine for the context use.
Network Services Library (libnsl.a)
With the rpc_gss_set_callback subroutine, you can set a user-defined callback routine that is invoked when the context is used for the first time.
Item | Description |
---|---|
cb | Points to a rpc_gss_callback_t structure. |
The following is the definition of the rpc_gss_callback_t structure.
typedef struct {
u_int program;
u_int version;
bool_t (*callback )();
} rpc_gss_callback_t;
Item | Description |
---|---|
program | Represents the program number for which the context is established. |
version | Represents version number for which context is established. |
callback | Represents a user-defined callback routine that
is in the following form:
|
The following table list the parameters of the callback routine.
Item | Description |
---|---|
req | Points to a received service-request structure. |
deleg | Represents delegated credentials. |
gss_context | Represents the Generic Security Services (GSS) context. |
lock | Points to a rpc_gss_lock_t structure. You can use the parameter to enforce particular protection quality for that session. |
cookie | Represents a 4-byte entity that an application can use in any manner. |
Item | Description |
---|---|
TRUE | successful |
FALSE | unsuccessful |
#include <stdlib.h>
#include <rpc/rpc.h>
#include <rpc/rpcsec_gss.h>
#define PROGNUM 0x3fffffffL
#define VERSNUM 0x1L
static void sample_dispatch(struct svc_req *, SVCXPRT *);
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)
{
fprintf(stdout,"\nIn callback routine!\n");
return TRUE;
}
main()
{
rpc_gss_callback_t cb;
cb.program = PROG;
cb.version = VERS;
cb.callback = callback;
/* Create RPC service handle and register with RPCBIND service */
/* Set the principal name */
if (!rpc_gss_set_callback(&cb)) {
fprintf(stderr,"Error while setting callback\n");
exit(1);
}
svc_run();
return 1;
}
/* following is the sample dispatch routine*/
static void sample_dispatch(struct svc_req *request, SVCXPRT *xprt)
{
/* Dispatch routine code */
}