| 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 | |
|