gsasl-mech.h

gsasl-mech.h — register new application-defined mechanism

Functions

Types and Values

Description

The builtin mechanisms should suffice for most applications. Applications can register a new mechanism in the library using application-supplied functions. The mechanism will operate as the builtin mechanisms, and the supplied functions will be invoked when necessary. The application uses the normal logic, e.g., calls gsasl_client_start() followed by a sequence of calls to gsasl_step() and finally gsasl_finish().

Functions

Gsasl_init_function ()

int
(*Gsasl_init_function) (Gsasl *ctx);

The implementation of this function pointer should fail if the mechanism for some reason is not available for further use.

Parameters

ctx

a Gsasl libgsasl handle.

 

Returns

Returns GSASL_OK iff successful.


Gsasl_done_function ()

void
(*Gsasl_done_function) (Gsasl *ctx);

The implementation of this function pointer deallocate all resources associated with the mechanism.

Parameters

ctx

a Gsasl libgsasl handle.

 

Gsasl_start_function ()

int
(*Gsasl_start_function) (Gsasl_session *sctx,
                         void **mech_data);

The implementation of this function should start a new authentication process.

Parameters

sctx

a Gsasl_session session handle.

 

mech_data

pointer to void* with mechanism-specific data.

 

Returns

Returns GSASL_OK iff successful.


Gsasl_step_function ()

int
(*Gsasl_step_function) (Gsasl_session *sctx,
                        void *mech_data,
                        const char *input,
                        size_t input_len,
                        char **output,
                        size_t *output_len);

The implementation of this function should perform one step of the authentication process.

This reads data from the other end (from input and input_len ), processes it (potentially invoking callbacks to the application), and writes data to server (into newly allocated variable output and output_len that indicate the length of output ).

The contents of the output buffer is unspecified if this functions returns anything other than GSASL_OK or GSASL_NEEDS_MORE. If this function return GSASL_OK or GSASL_NEEDS_MORE, however, the output buffer is allocated by this function, and it is the responsibility of caller to deallocate it by calling gsasl_free(output ).

Parameters

sctx

a Gsasl_session session handle.

 

mech_data

pointer to void* with mechanism-specific data.

 

input

input byte array.

 

input_len

size of input byte array.

 

output

newly allocated output byte array.

 

output_len

pointer to output variable with size of output byte array.

 

Returns

Returns GSASL_OK if authenticated terminated successfully, GSASL_NEEDS_MORE if more data is needed, or error code.


Gsasl_finish_function ()

void
(*Gsasl_finish_function) (Gsasl_session *sctx,
                          void *mech_data);

The implementation of this function should release all resources associated with the particular authentication process.

Parameters

sctx

a Gsasl_session session handle.

 

mech_data

pointer to void* with mechanism-specific data.

 

Gsasl_code_function ()

int
(*Gsasl_code_function) (Gsasl_session *sctx,
                        void *mech_data,
                        const char *input,
                        size_t input_len,
                        char **output,
                        size_t *output_len);

The implementation of this function should perform data encoding or decoding for the mechanism, after authentication has completed. This might mean that data is integrity or privacy protected.

The output buffer is allocated by this function, and it is the responsibility of caller to deallocate it by calling gsasl_free(output ).

Parameters

sctx

a Gsasl_session session handle.

 

mech_data

pointer to void* with mechanism-specific data.

 

input

input byte array.

 

input_len

size of input byte array.

 

output

newly allocated output byte array.

 

output_len

pointer to output variable with size of output byte array.

 

Returns

Returns GSASL_OK if encoding was successful, otherwise an error code.


gsasl_register ()

int
gsasl_register (Gsasl *ctx,
                const Gsasl_mechanism *mech);

This function initialize given mechanism, and if successful, add it to the list of plugins that is used by the library.

Parameters

ctx

pointer to libgsasl handle.

 

mech

plugin structure with information about plugin.

 

Returns

GSASL_OK iff successful, otherwise GSASL_MALLOC_ERROR.

Since: 0.2.0

Types and Values

struct Gsasl_mechanism_functions

struct Gsasl_mechanism_functions {
  Gsasl_init_function init;
  Gsasl_done_function done;
  Gsasl_start_function start;
  Gsasl_step_function step;
  Gsasl_finish_function finish;
  Gsasl_code_function encode;
  Gsasl_code_function decode;
};

Holds all function pointers to implement a mechanism, in either client or server mode.


struct Gsasl_mechanism

struct Gsasl_mechanism {
  const char *name;

  struct Gsasl_mechanism_functions client;
  struct Gsasl_mechanism_functions server;
};

Holds all implementation details about a mechanism.

Members

const char *name;

string holding name of mechanism, e.g., "PLAIN".

 

struct Gsasl_mechanism_functions client;

client-side Gsasl_mechanism_functions structure.

 

struct Gsasl_mechanism_functions server;

server-side Gsasl_mechanism_functions structure.