md5.h   md5.h 
skipping to change at line 38 skipping to change at line 38
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */ unsigned char buffer[64]; /* input buffer */
} MD5_CTX; } MD5_CTX;
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
void _sasl_MD5Init PROTO_LIST ((MD5_CTX *)); void _sasl_MD5Init PROTO_LIST ((MD5_CTX *));
void _sasl_MD5Update PROTO_LIST void _sasl_MD5Update PROTO_LIST
((MD5_CTX *, unsigned char *, unsigned int)); ((MD5_CTX *, const unsigned char *, unsigned int));
void _sasl_MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *)); void _sasl_MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *));
void _sasl_hmac_md5 PROTO_LIST ((unsigned char *, int, unsigned char *, int
, caddr_t));
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
 End of changes. 2 change blocks. 
4 lines changed or deleted 1 lines changed or added


 prop.h   prop.h 
skipping to change at line 25 skipping to change at line 25
* propctx" in another structure. prop_new also allocates a pool of memory * propctx" in another structure. prop_new also allocates a pool of memory
* (in the vbase field) which will be used for an array of "struct propval" * (in the vbase field) which will be used for an array of "struct propval"
* to list all the requested properties. * to list all the requested properties.
* *
* Properties may be multi-valued. * Properties may be multi-valued.
*/ */
#ifndef PROP_H #ifndef PROP_H
#define PROP_H 1 #define PROP_H 1
/* The following ifdef block is the standard way of creating macros
* which make exporting from a DLL simpler. All files within this DLL
* are compiled with the LIBSASL_EXPORTS symbol defined on the command
* line. this symbol should not be defined on any project that uses
* this DLL. This way any other project whose source files include
* this file see LIBSASL_API functions as being imported from a DLL,
* wheras this DLL sees symbols defined with this macro as being
* exported. */
/* Under Unix, life is simpler: we just need to mark library functions
* as extern. (Technically, we don't even have to do that.) */
#ifdef WIN32
# ifdef LIBSASL_EXPORTS
# define LIBSASL_API __declspec(dllexport)
# else /* LIBSASL_EXPORTS */
# define LIBSASL_API __declspec(dllimport)
# endif /* LIBSASL_EXPORTS */
#else /* WIN32 */
# define LIBSASL_API extern
#endif /* WIN32 */
/* Same as above, but used during a variable declaration. Only Unix definit
ion
* is different, as we can't assign an initial value to an extern variable
*/
#ifdef WIN32
# ifdef LIBSASL_EXPORTS
# define LIBSASL_VAR __declspec(dllexport)
# else /* LIBSASL_EXPORTS */
# define LIBSASL_VAR __declspec(dllimport)
# endif /* LIBSASL_EXPORTS */
#else /* WIN32 */
# define LIBSASL_VAR
#endif /* WIN32 */
/* the resulting structure for property values /* the resulting structure for property values
*/ */
struct propval { struct propval {
const char *name; /* name of property; NULL = end of list */ const char *name; /* name of property; NULL = end of list */
/* same pointer used in request will be used here */ /* same pointer used in request will be used here */
const char **values; /* list of strings, values == NULL if property not const char **values; /* list of strings, values == NULL if property not
* found, *values == NULL if property found with * found, *values == NULL if property found with
* no values */ * no values */
unsigned nvalues; /* total number of value strings */ unsigned nvalues; /* total number of value strings */
unsigned valsize; /* total size in characters of all value strings */ unsigned valsize; /* total size in characters of all value strings */
skipping to change at line 52 skipping to change at line 84
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
/* create a property context /* create a property context
* estimate -- an estimate of the storage needed for requests & responses * estimate -- an estimate of the storage needed for requests & responses
* 0 will use module default * 0 will use module default
* returns a new property context on success and NULL on any error * returns a new property context on success and NULL on any error
*/ */
struct propctx *prop_new(unsigned estimate); LIBSASL_API struct propctx *prop_new(unsigned estimate);
/* create new propctx which duplicates the contents of an existing propctx /* create new propctx which duplicates the contents of an existing propctx
* returns SASL_OK on success * returns SASL_OK on success
* possible other return values include: SASL_NOMEM, SASL_BADPARAM * possible other return values include: SASL_NOMEM, SASL_BADPARAM
*/ */
int prop_dup(struct propctx *src_ctx, struct propctx **dst_ctx); LIBSASL_API int prop_dup(struct propctx *src_ctx, struct propctx **dst_ctx) ;
/* Add property names to request /* Add property names to request
* ctx -- context from prop_new() * ctx -- context from prop_new()
* names -- list of property names; must persist until context freed * names -- list of property names; must persist until context freed
* or requests cleared (This extends to other contexts that * or requests cleared (This extends to other contexts that
* are dup'ed from this one, and their children, etc) * are dup'ed from this one, and their children, etc)
* *
* NOTE: may clear values from context as side-effect * NOTE: may clear values from context as side-effect
* returns SASL_OK on success * returns SASL_OK on success
* possible other return values include: SASL_NOMEM, SASL_BADPARAM * possible other return values include: SASL_NOMEM, SASL_BADPARAM
*/ */
int prop_request(struct propctx *ctx, const char **names); LIBSASL_API int prop_request(struct propctx *ctx, const char **names);
/* return array of struct propval from the context /* return array of struct propval from the context
* return value persists until next call to * return value persists until next call to
* prop_request, prop_clear or prop_dispose on context * prop_request, prop_clear or prop_dispose on context
* *
* returns NULL on error * returns NULL on error
*/ */
const struct propval *prop_get(struct propctx *ctx); LIBSASL_API const struct propval *prop_get(struct propctx *ctx);
/* Fill in an array of struct propval based on a list of property names /* Fill in an array of struct propval based on a list of property names
* return value persists until next call to * return value persists until next call to
* prop_request, prop_clear or prop_dispose on context * prop_request, prop_clear or prop_dispose on context
* returns number of matching properties which were found (values != NULL) * returns number of matching properties which were found (values != NULL)
* if a name requested here was never requested by a prop_request, then * if a name requested here was never requested by a prop_request, then
* the name field of the associated vals entry will be set to NULL * the name field of the associated vals entry will be set to NULL
* *
* The vals array MUST be atleast as long as the names array. * The vals array MUST be atleast as long as the names array.
* *
* returns # of matching properties on success * returns # of matching properties on success
* possible other return values include: SASL_BADPARAM * possible other return values include: SASL_BADPARAM
*/ */
int prop_getnames(struct propctx *ctx, const char **names, LIBSASL_API int prop_getnames(struct propctx *ctx, const char **names,
struct propval *vals); struct propval *vals);
/* clear values and optionally requests from property context /* clear values and optionally requests from property context
* ctx -- property context * ctx -- property context
* requests -- 0 = don't clear requests, 1 = clear requests * requests -- 0 = don't clear requests, 1 = clear requests
*/ */
void prop_clear(struct propctx *ctx, int requests); LIBSASL_API void prop_clear(struct propctx *ctx, int requests);
/* erase the value of a property /* erase the value of a property
*/ */
void prop_erase(struct propctx *ctx, const char *name); LIBSASL_API void prop_erase(struct propctx *ctx, const char *name);
/* dispose of property context /* dispose of property context
* ctx -- is disposed and set to NULL; noop if ctx or *ctx is NULL * ctx -- is disposed and set to NULL; noop if ctx or *ctx is NULL
*/ */
void prop_dispose(struct propctx **ctx); LIBSASL_API void prop_dispose(struct propctx **ctx);
/****fetcher interfaces****/ /****fetcher interfaces****/
/* format the requested property names into a string /* format the requested property names into a string
* ctx -- context from prop_new()/prop_request() * ctx -- context from prop_new()/prop_request()
* sep -- separator between property names (unused if none requested) * sep -- separator between property names (unused if none requested)
* seplen -- length of separator, if < 0 then strlen(sep) will be used * seplen -- length of separator, if < 0 then strlen(sep) will be used
* outbuf -- output buffer * outbuf -- output buffer
* outmax -- maximum length of output buffer including NUL terminator * outmax -- maximum length of output buffer including NUL terminator
* outlen -- set to length of output string excluding NUL terminator * outlen -- set to length of output string excluding NUL terminator
* returns SASL_OK on success * returns SASL_OK on success
* returns SASL_BADPARAM or amount of additional space needed on failure * returns SASL_BADPARAM or amount of additional space needed on failure
*/ */
int prop_format(struct propctx *ctx, const char *sep, int seplen, LIBSASL_API int prop_format(struct propctx *ctx, const char *sep, int seple n,
char *outbuf, unsigned outmax, unsigned *outlen); char *outbuf, unsigned outmax, unsigned *outlen);
/* add a property value to the context /* add a property value to the context
* ctx -- context from prop_new()/prop_request() * ctx -- context from prop_new()/prop_request()
* name -- name of property to which value will be added * name -- name of property to which value will be added
* if NULL, add to the same name as previous prop_set/setvals ca ll * if NULL, add to the same name as previous prop_set/setvals ca ll
* value -- a value for the property; will be copied into context * value -- a value for the property; will be copied into context
* if NULL, remove existing values * if NULL, remove existing values
* vallen -- length of value, if <= 0 then strlen(value) will be used * vallen -- length of value, if <= 0 then strlen(value) will be used
* returns SASL_OK on success * returns SASL_OK on success
* possible error return values include: SASL_BADPARAM, SASL_NOMEM * possible error return values include: SASL_BADPARAM, SASL_NOMEM
*/ */
int prop_set(struct propctx *ctx, const char *name, LIBSASL_API int prop_set(struct propctx *ctx, const char *name,
const char *value, int vallen); const char *value, int vallen);
/* set the values for a property /* set the values for a property
* ctx -- context from prop_new()/prop_request() * ctx -- context from prop_new()/prop_request()
* name -- name of property to which value will be added * name -- name of property to which value will be added
* if NULL, add to the same name as previous prop_set/setvals ca ll * if NULL, add to the same name as previous prop_set/setvals ca ll
* values -- array of values, ending in NULL. Each value is a NUL termina ted * values -- array of values, ending in NULL. Each value is a NUL termina ted
* string * string
* returns SASL_OK on success * returns SASL_OK on success
* possible error return values include: SASL_BADPARAM, SASL_NOMEM * possible error return values include: SASL_BADPARAM, SASL_NOMEM
*/ */
int prop_setvals(struct propctx *ctx, const char *name, LIBSASL_API int prop_setvals(struct propctx *ctx, const char *name,
const char **values); const char **values);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* PROP_H */ #endif /* PROP_H */
 End of changes. 12 change blocks. 
11 lines changed or deleted 45 lines changed or added


 sasl.h   sasl.h 
skipping to change at line 66 skipping to change at line 66
* sasl_listmech Create list of available mechanisms * sasl_listmech Create list of available mechanisms
* sasl_server_start Begin an authentication exchange * sasl_server_start Begin an authentication exchange
* sasl_server_step Perform one authentication exchange step * sasl_server_step Perform one authentication exchange step
* sasl_checkpass Check a plaintext passphrase * sasl_checkpass Check a plaintext passphrase
* sasl_checkapop Check an APOP challenge/response (uses pseudo "APOP" * sasl_checkapop Check an APOP challenge/response (uses pseudo "APOP"
* mechanism similar to CRAM-MD5 mechanism; optional) * mechanism similar to CRAM-MD5 mechanism; optional)
* sasl_user_exists Check if user exists * sasl_user_exists Check if user exists
* sasl_setpass Change a password or add a user entry * sasl_setpass Change a password or add a user entry
* sasl_auxprop_request Request auxiliary properties * sasl_auxprop_request Request auxiliary properties
* sasl_auxprop_getctx Get auxiliary property context for connection * sasl_auxprop_getctx Get auxiliary property context for connection
* sasl_auxprop_store Store a set of auxiliary properties
* *
* Basic client model: * Basic client model:
* 1. client calls sasl_client_init() at startup to load plug-ins * 1. client calls sasl_client_init() at startup to load plug-ins
* 2. when connection formed, call sasl_client_new() * 2. when connection formed, call sasl_client_new()
* 3. once list of supported mechanisms received from server, client * 3. once list of supported mechanisms received from server, client
* calls sasl_client_start(). goto 4a * calls sasl_client_start(). goto 4a
* 4. client calls sasl_client_step() * 4. client calls sasl_client_step()
* [4a. If SASL_INTERACT, fill in prompts and goto 4 * [4a. If SASL_INTERACT, fill in prompts and goto 4
* -- doesn't happen if callbacks provided] * -- doesn't happen if callbacks provided]
* 4b. If SASL error, goto 7 or 3 * 4b. If SASL error, goto 7 or 3
skipping to change at line 124 skipping to change at line 125
* *
* If the server forbids the use of "@" in user names for other * If the server forbids the use of "@" in user names for other
* purposes, this simplifies security validation. * purposes, this simplifies security validation.
*/ */
#ifndef SASL_H #ifndef SASL_H
#define SASL_H 1 #define SASL_H 1
#define SASL_VERSION_MAJOR 2 #define SASL_VERSION_MAJOR 2
#define SASL_VERSION_MINOR 1 #define SASL_VERSION_MINOR 1
#define SASL_VERSION_STEP 15 #define SASL_VERSION_STEP 17
#include "prop.h" #include "prop.h"
/* The following ifdef block is the standard way of creating macros
* which make exporting from a DLL simpler. All files within this DLL
* are compiled with the LIBSASL_EXPORTS symbol defined on the command
* line. this symbol should not be defined on any project that uses
* this DLL. This way any other project whose source files include
* this file see LIBSASL_API functions as being imported from a DLL,
* wheras this DLL sees symbols defined with this macro as being
* exported. */
/* Under Unix, life is simpler: we just need to mark library functions
* as extern. (Technically, we don't even have to do that.) */
#ifdef WIN32
# ifdef LIBSASL_EXPORTS
# define LIBSASL_API __declspec(dllexport)
# else /* LIBSASL_EXPORTS */
# define LIBSASL_API __declspec(dllimport)
# endif /* LIBSASL_EXPORTS */
#else /* WIN32 */
# define LIBSASL_API extern
#endif /* WIN32 */
/* Same as above, but used during a variable declaration. Only Unix definit
ion
* is different, as we can't assign an initial value to an extern variable
*/
#ifdef WIN32
# ifdef LIBSASL_EXPORTS
# define LIBSASL_VAR __declspec(dllexport)
# else /* LIBSASL_EXPORTS */
# define LIBSASL_VAR __declspec(dllimport)
# endif /* LIBSASL_EXPORTS */
#else /* WIN32 */
# define LIBSASL_VAR
#endif /* WIN32 */
/************* /*************
* Basic API * * Basic API *
*************/ *************/
/* SASL result codes: */ /* SASL result codes: */
#define SASL_CONTINUE 1 /* another step is needed in authentication */ #define SASL_CONTINUE 1 /* another step is needed in authentication */
#define SASL_OK 0 /* successful result */ #define SASL_OK 0 /* successful result */
#define SASL_FAIL -1 /* generic failure */ #define SASL_FAIL -1 /* generic failure */
#define SASL_NOMEM -2 /* memory shortage failure */ #define SASL_NOMEM -2 /* memory shortage failure */
#define SASL_BUFOVER -3 /* overflowed buffer */ #define SASL_BUFOVER -3 /* overflowed buffer */
skipping to change at line 1088 skipping to change at line 1057
* SASL_BADPARAM -- password too long * SASL_BADPARAM -- password too long
* SASL_OK -- successful * SASL_OK -- successful
*/ */
LIBSASL_API int sasl_setpass(sasl_conn_t *conn, LIBSASL_API int sasl_setpass(sasl_conn_t *conn,
const char *user, const char *user,
const char *pass, unsigned passlen, const char *pass, unsigned passlen,
const char *oldpass, unsigned oldpasslen, const char *oldpass, unsigned oldpasslen,
unsigned flags); unsigned flags);
#define SASL_SET_CREATE 0x01 /* create a new entry for user */ #define SASL_SET_CREATE 0x01 /* create a new entry for user */
#define SASL_SET_DISABLE 0x02 /* disable user account */ #define SASL_SET_DISABLE 0x02 /* disable user account */
#define SASL_SET_NOPLAIN 0x04 /* do not store secret in plain text */
/********************************************************* /*********************************************************
* Auxiliary Property Support -- added by cjn 1999-09-29 * * Auxiliary Property Support -- added by cjn 1999-09-29 *
*********************************************************/ *********************************************************/
#define SASL_AUX_END NULL /* last auxiliary property */ #define SASL_AUX_END NULL /* last auxiliary property */
/* traditional Posix items (should be implemented on Posix systems) */ /* traditional Posix items (should be implemented on Posix systems) */
#define SASL_AUX_PASSWORD "*userPassword" /* User Password (of authid) */ #define SASL_AUX_PASSWORD_PROP "userPassword" /* User Password */
#define SASL_AUX_PASSWORD "*" SASL_AUX_PASSWORD_PROP /* User Password (of a
uthid) */
#define SASL_AUX_UIDNUM "uidNumber" /* UID number for the user */ #define SASL_AUX_UIDNUM "uidNumber" /* UID number for the user */
#define SASL_AUX_GIDNUM "gidNumber" /* GID for the user */ #define SASL_AUX_GIDNUM "gidNumber" /* GID for the user */
#define SASL_AUX_FULLNAME "gecos" /* full name of the user, unix-style */ #define SASL_AUX_FULLNAME "gecos" /* full name of the user, unix-style */
#define SASL_AUX_HOMEDIR "homeDirectory" /* home directory for user */ #define SASL_AUX_HOMEDIR "homeDirectory" /* home directory for user */
#define SASL_AUX_SHELL "loginShell" /* login shell for the user */ #define SASL_AUX_SHELL "loginShell" /* login shell for the user */
/* optional additional items (not necessarily implemented) */ /* optional additional items (not necessarily implemented) */
/* single preferred mail address for user canonically-quoted /* single preferred mail address for user canonically-quoted
* RFC821/822 syntax */ * RFC821/822 syntax */
#define SASL_AUX_MAILADDR "mail" #define SASL_AUX_MAILADDR "mail"
skipping to change at line 1139 skipping to change at line 1110
* Use functions in prop.h to access content * Use functions in prop.h to access content
* *
* if authentication hasn't completed, property values may be empty/NULL * if authentication hasn't completed, property values may be empty/NULL
* *
* properties not recognized by active plug-ins will be left empty/NULL * properties not recognized by active plug-ins will be left empty/NULL
* *
* returns NULL if conn is invalid. * returns NULL if conn is invalid.
*/ */
LIBSASL_API struct propctx *sasl_auxprop_getctx(sasl_conn_t *conn); LIBSASL_API struct propctx *sasl_auxprop_getctx(sasl_conn_t *conn);
/* Store the set of auxiliary properties for the given user.
* Use functions in prop.h to set the content.
*
* conn connection context
* ctx property context from prop_new()/prop_request()/prop_set()
* user NUL terminated user
*
* Call with NULL 'ctx' to see if the backend allows storing properties.
*
* errors
* SASL_OK -- success
* SASL_NOMECH -- can not store some/all properties
* SASL_BADPARAM -- bad conn/ctx/user parameter
* SASL_NOMEM -- out of memory
* SASL_FAIL -- failed to store
*/
LIBSASL_API int sasl_auxprop_store(sasl_conn_t *conn,
struct propctx *ctx, const char *user);
/********************** /**********************
* security layer API * * security layer API *
**********************/ **********************/
/* encode a block of data for transmission using security layer, /* encode a block of data for transmission using security layer,
* returning the input buffer if there is no security layer. * returning the input buffer if there is no security layer.
* output is only valid until next call to sasl_encode or sasl_encodev * output is only valid until next call to sasl_encode or sasl_encodev
* returns: * returns:
* SASL_OK -- success (returns input if no layer negotiated) * SASL_OK -- success (returns input if no layer negotiated)
* SASL_NOTDONE -- security layer negotiation not finished * SASL_NOTDONE -- security layer negotiation not finished
 End of changes. 6 change blocks. 
36 lines changed or deleted 25 lines changed or added


 saslplug.h   saslplug.h 
skipping to change at line 122 skipping to change at line 122
/* callback to sasl_getprop() and sasl_setprop() */ /* callback to sasl_getprop() and sasl_setprop() */
int (*getprop)(sasl_conn_t *conn, int propnum, const void **pvalue); int (*getprop)(sasl_conn_t *conn, int propnum, const void **pvalue);
int (*setprop)(sasl_conn_t *conn, int propnum, const void *value); int (*setprop)(sasl_conn_t *conn, int propnum, const void *value);
/* callback function */ /* callback function */
sasl_getcallback_t *getcallback; sasl_getcallback_t *getcallback;
/* format a message and then pass it to the SASL_CB_LOG callback /* format a message and then pass it to the SASL_CB_LOG callback
* *
* use syslog()-style formatting (printf with %m as most recent errno * use syslog()-style formatting (printf with %m as a human readable te
* error). The implementation may use a fixed size buffer not smaller xt
* (strerror()) for the error specified as the parameter).
* The implementation may use a fixed size buffer not smaller
* than 512 octets if it securely truncates the message. * than 512 octets if it securely truncates the message.
* *
* level is a SASL_LOG_* level (see sasl.h) * level is a SASL_LOG_* level (see sasl.h)
*/ */
void (*log)(sasl_conn_t *conn, int level, const char *fmt, ...); void (*log)(sasl_conn_t *conn, int level, const char *fmt, ...);
/* callback to sasl_seterror() */ /* callback to sasl_seterror() */
void (*seterror)(sasl_conn_t *conn, unsigned flags, const char *fmt, .. .); void (*seterror)(sasl_conn_t *conn, unsigned flags, const char *fmt, .. .);
/* spare function pointer */ /* spare function pointer */
skipping to change at line 152 skipping to change at line 153
struct propval *vals); struct propval *vals);
void (*prop_clear)(struct propctx *ctx, int requests); void (*prop_clear)(struct propctx *ctx, int requests);
void (*prop_dispose)(struct propctx **ctx); void (*prop_dispose)(struct propctx **ctx);
int (*prop_format)(struct propctx *ctx, const char *sep, int seplen, int (*prop_format)(struct propctx *ctx, const char *sep, int seplen,
char *outbuf, unsigned outmax, unsigned *outlen); char *outbuf, unsigned outmax, unsigned *outlen);
int (*prop_set)(struct propctx *ctx, const char *name, int (*prop_set)(struct propctx *ctx, const char *name,
const char *value, int vallen); const char *value, int vallen);
int (*prop_setvals)(struct propctx *ctx, const char *name, int (*prop_setvals)(struct propctx *ctx, const char *name,
const char **values); const char **values);
void (*prop_erase)(struct propctx *ctx, const char *name); void (*prop_erase)(struct propctx *ctx, const char *name);
int (*auxprop_store)(sasl_conn_t *conn,
struct propctx *ctx, const char *user);
/* for additions which don't require a version upgrade; set to 0 */ /* for additions which don't require a version upgrade; set to 0 */
int (*spare_fptr1)(); int (*spare_fptr1)();
int (*spare_fptr2)(); int (*spare_fptr2)();
int (*spare_fptr3)();
} sasl_utils_t; } sasl_utils_t;
/* /*
* output parameters from SASL API * output parameters from SASL API
* *
* created / destroyed by the glue code, though probably filled in * created / destroyed by the glue code, though probably filled in
* by a combination of the plugin, the glue code, and the canon_user callba ck. * by a combination of the plugin, the glue code, and the canon_user callba ck.
* *
*/ */
typedef struct sasl_out_params { typedef struct sasl_out_params {
skipping to change at line 467 skipping to change at line 469
const sasl_utils_t *utils; /* SASL API utility routines -- const sasl_utils_t *utils; /* SASL API utility routines --
* for a particular sasl_conn_t, * for a particular sasl_conn_t,
* MUST remain valid until mech_free is * MUST remain valid until mech_free is
* called */ * called */
const sasl_callback_t *callbacks; /* Callbacks from application */ const sasl_callback_t *callbacks; /* Callbacks from application */
/* application's security requirements */ /* application's security requirements */
sasl_security_properties_t props; sasl_security_properties_t props;
sasl_ssf_t external_ssf; /* external SSF active */ sasl_ssf_t external_ssf; /* external SSF active */
/* server plug-in calls this when it first has access to the plaintext /* Pointer to the function which takes the plaintext passphrase and
* passphrase. This is used to transition users via setpass calls. * transitions a user to non-plaintext mechanisms via setpass calls.
* (NULL = auto transition not enabled/supported)
*
* If passlen is 0, it defaults to strlen(pass). * If passlen is 0, it defaults to strlen(pass).
* returns 0 if no entry added, 1 if entry added * returns 0 if no entry added, 1 if entry added
*/ */
int (*transition)(sasl_conn_t *conn, const char *pass, unsigned passlen ); int (*transition)(sasl_conn_t *conn, const char *pass, unsigned passlen );
/* Canonicalize a user name from on-wire to internal format /* Canonicalize a user name from on-wire to internal format
* added cjn 1999-09-21 * added cjn 1999-09-21
* Must be called once user name aquired if canon_user is non-NULL. * Must be called once user name acquired if canon_user is non-NULL.
* conn connection context * conn connection context
* user user name from wire protocol (need not be NUL terminate d) * user user name from wire protocol (need not be NUL terminate d)
* ulen length of user name from wire protocol (0 = strlen(user )) * ulen length of user name from wire protocol (0 = strlen(user ))
* flags for SASL_CU_* flags * flags for SASL_CU_* flags
* oparams the user, authid, ulen, alen, fields are * oparams the user, authid, ulen, alen, fields are
* set appropriately after canonicalization/copying and * set appropriately after canonicalization/copying and
* authorization of arguments * authorization of arguments
* *
* responsible for setting user, ulen, authid, and alen in the oparams * responsible for setting user, ulen, authid, and alen in the oparams
* structure * structure
skipping to change at line 833 skipping to change at line 837
* elements with non-0 len should be ignored. * elements with non-0 len should be ignored.
*/ */
void (*auxprop_lookup)(void *glob_context, void (*auxprop_lookup)(void *glob_context,
sasl_server_params_t *sparams, sasl_server_params_t *sparams,
unsigned flags, unsigned flags,
const char *user, unsigned ulen); const char *user, unsigned ulen);
/* name of the auxprop plugin */ /* name of the auxprop plugin */
char *name; char *name;
/* for additions which don't require a version upgrade; set to 0 */ /* store the fields/values of an auxiliary property context (OPTIONAL)
void (*spare_fptr1)(); *
* if ctx is NULL, just check if storing properties is enabled
*
* returns
* SASL_OK on success
* SASL_FAIL on failure
*/
int (*auxprop_store)(void *glob_context,
sasl_server_params_t *sparams,
struct propctx *ctx,
const char *user, unsigned ulen);
} sasl_auxprop_plug_t; } sasl_auxprop_plug_t;
/* auxprop lookup flags */ /* auxprop lookup flags */
#define SASL_AUXPROP_OVERRIDE 0x01 /* if clear, ignore auxiliary properties #define SASL_AUXPROP_OVERRIDE 0x01 /* if clear, ignore auxiliary properties
* with non-zero len field. If set, * with non-zero len field. If set,
* override value of those properties */ * override value of those properties */
#define SASL_AUXPROP_AUTHZID 0x02 /* if clear, we are looking up the #define SASL_AUXPROP_AUTHZID 0x02 /* if clear, we are looking up the
* authid flags (prefixed with *), otherw ise * authid flags (prefixed with *), otherw ise
* we are looking up the authzid flags * we are looking up the authzid flags
* (no prefix) */ * (no prefix) */
 End of changes. 6 change blocks. 
8 lines changed or deleted 23 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/