diff -urN cyrus-sasl-1.5.21.orig/acconfig.h cyrus-sasl-1.5.21/acconfig.h --- cyrus-sasl-1.5.21.orig/acconfig.h Tue Mar 7 06:19:51 2000 +++ cyrus-sasl-1.5.21/acconfig.h Thu Jun 1 13:08:35 2000 @@ -64,6 +64,9 @@ /* This is where plugins will live at runtime */ #undef PLUGINDIR +/* This is where config files will live at runtime */ +#undef CONFIGDIR + /* Make autoheader happy */ #undef WITH_SYMBOL_UNDERSCORE @@ -152,6 +155,7 @@ #endif #define SASL_PATH_ENV_VAR "SASL_PATH" +#define SASL_CONF_PATH_ENV_VAR "SASL_CONF_PATH" #include #include diff -urN cyrus-sasl-1.5.21.orig/configure.in cyrus-sasl-1.5.21/configure.in --- cyrus-sasl-1.5.21.orig/configure.in Tue May 9 19:52:53 2000 +++ cyrus-sasl-1.5.21/configure.in Thu Jun 1 13:48:11 2000 @@ -583,6 +583,13 @@ AC_DEFINE_UNQUOTED(PLUGINDIR, "$plugindir") AC_SUBST(plugindir) +AC_ARG_WITH(configdir, [ --with-configdir=DIR set the directory where config files will + be found [/etc/sasl] ], + configdir=$withval, + configdir=/etc/sasl) +AC_DEFINE_UNQUOTED(CONFIGDIR, "$configdir") +AC_SUBST(configdir) + dnl look for rc4 libraries. we accept the CMU one or one from openSSL AC_ARG_WITH(rc4, [ --with-rc4=DIR use rc4 (look in DIR) [yes] ], with_rc4=$withval, diff -urN cyrus-sasl-1.5.21.orig/include/sasl.h cyrus-sasl-1.5.21/include/sasl.h --- cyrus-sasl-1.5.21.orig/include/sasl.h Tue May 9 19:52:53 2000 +++ cyrus-sasl-1.5.21/include/sasl.h Thu Jun 1 13:04:48 2000 @@ -14,6 +14,7 @@ * sasl_getopt_t client/server: Get an option value * sasl_log_t client/server: Log message handler * sasl_getpath_t client/server: Get path to search for mechanisms + * sasl_getconfpath_t server: Get path to search for config file * sasl_getsimple_t client: Get user/language list * sasl_getsecret_t client: Get authentication secret * sasl_chalprompt_t client: Display challenge and prompt for response @@ -401,6 +402,25 @@ const char * file, const int type); #define SASL_CB_VERIFYFILE (4) + +/* getconfpath callback -- this allows applications to specify the + * colon-separated path to search for config files (by default, + * taken from the SASL_CONF_PATH environment variable). + * inputs: + * context -- getconfpath context from the callback record + * outputs: + * path -- colon seperated path (allocated on the heap; the + * library will free it using the sasl_free_t * + * passed to sasl_set_callback, or the standard free() + * library call). + * returns: + * SASL_OK -- no error + * SASL_FAIL -- error + */ +typedef int sasl_getconfpath_t(void * context, + char ** path); + +#define SASL_CB_GETCONFPATH (5) /* these are the types of files libsasl will ask about */ #define SASL_VRFY_PLUGIN (1) diff -urN cyrus-sasl-1.5.21.orig/lib/common.c cyrus-sasl-1.5.21/lib/common.c --- cyrus-sasl-1.5.21.orig/lib/common.c Fri May 5 14:41:42 2000 +++ cyrus-sasl-1.5.21/lib/common.c Thu Jun 1 12:53:19 2000 @@ -666,6 +666,20 @@ } static int +_sasl_getconfpath(void *context __attribute__((unused)), + char ** path_dest) +{ + char *path; + + if (! path_dest) + return SASL_BADPARAM; + path = getenv(SASL_CONF_PATH_ENV_VAR); + if (! path) + path = CONFIGDIR; + return _sasl_strdup(path, path_dest, NULL); +} + +static int _sasl_verifyfile(void *context __attribute__((unused)), char *file __attribute__((unused)), int type __attribute__((unused))) @@ -768,6 +782,10 @@ *pproc = (int (*)()) &_sasl_getpath; *pcontext = NULL; return SASL_OK; + case SASL_CB_GETCONFPATH: + *pproc = (int (*)()) &_sasl_getconfpath; + *pcontext = NULL; + return SASL_OK; case SASL_CB_AUTHNAME: *pproc = (int (*)()) &_sasl_getsimple; *pcontext = conn; @@ -1093,6 +1111,30 @@ return &default_getpath_cb; } + +const sasl_callback_t * +_sasl_find_getconfpath_callback(const sasl_callback_t *callbacks) +{ + static const sasl_callback_t default_getconfpath_cb = { + SASL_CB_GETCONFPATH, + &_sasl_getconfpath, + NULL + }; + + if (callbacks) + while (callbacks->id != SASL_CB_LIST_END) + { + if (callbacks->id == SASL_CB_GETCONFPATH) + { + return callbacks; + } else { + ++callbacks; + } + } + + return &default_getconfpath_cb; +} + const sasl_callback_t * _sasl_find_verifyfile_callback(const sasl_callback_t *callbacks) diff -urN cyrus-sasl-1.5.21.orig/lib/saslint.h cyrus-sasl-1.5.21/lib/saslint.h --- cyrus-sasl-1.5.21.orig/lib/saslint.h Wed Mar 29 06:45:21 2000 +++ cyrus-sasl-1.5.21/lib/saslint.h Thu Jun 1 12:56:37 2000 @@ -59,6 +59,9 @@ _sasl_find_getpath_callback(const sasl_callback_t *callbacks); extern const sasl_callback_t * +_sasl_find_getconfpath_callback(const sasl_callback_t *callbacks); + +extern const sasl_callback_t * _sasl_find_verifyfile_callback(const sasl_callback_t *callbacks); extern int _sasl_done_with_plugin(void *plugin); diff -urN cyrus-sasl-1.5.21.orig/lib/server.c cyrus-sasl-1.5.21/lib/server.c --- cyrus-sasl-1.5.21.orig/lib/server.c Tue May 9 19:52:53 2000 +++ cyrus-sasl-1.5.21/lib/server.c Thu Jun 1 12:59:03 2000 @@ -540,15 +540,15 @@ char *path_to_config=NULL, *c; char *config_filename=NULL; int len; - const sasl_callback_t *getpath_cb=NULL; + const sasl_callback_t *getconfpath_cb=NULL; /* get the path to the plugins; for now the config file will reside there */ - getpath_cb=_sasl_find_getpath_callback( global_callbacks.callbacks ); - if (getpath_cb==NULL) return SASL_BADPARAM; + getconfpath_cb=_sasl_find_getconfpath_callback( global_callbacks.callbacks ); + if (getconfpath_cb==NULL) return SASL_BADPARAM; - /* getpath_cb->proc MUST be a sasl_getpath_t; if only c had a type + /* getconfpath_cb->proc MUST be a sasl_getconfpath_t; if only c had a type system */ - result = ((sasl_getpath_t *)(getpath_cb->proc))(getpath_cb->context, + result = ((sasl_getconfpath_t *)(getconfpath_cb->proc))(getconfpath_cb->context, &path_to_config); if (result!=SASL_OK) goto done; if (path_to_config == NULL) path_to_config = ""; diff -urN cyrus-sasl-1.5.21.orig/man/sasl_getconfpath_t.3 cyrus-sasl-1.5.21/man/sasl_getconfpath_t.3 --- cyrus-sasl-1.5.21.orig/man/sasl_getconfpath_t.3 Thu Jan 1 01:00:00 1970 +++ cyrus-sasl-1.5.21/man/sasl_getconfpath_t.3 Thu Jun 1 13:54:07 2000 @@ -0,0 +1,47 @@ +.\" Hey Emacs! This file is -*- nroff -*- source. +.\" +.\" This manpage is Copyright (C) 1999 Tim Martin +.\" +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" +.\" +.TH sasl_getpath_t "26 March 2000" SASL "SASL man pages" +.SH NAME +sasl_getconfpath_t \- The SASL callback to indicate location of the config files + + +.SH SYNOPSIS +.nf +.B #include + +.sp +.BI "int sasl_getconfpath_t(void " *context ", " +.BI " char ** " path ")"; + +.fi +.SH DESCRIPTION + +.B sasl_getconfpath_t +is used if the application wishes to use a different location for the SASL cofiguration files. If this callback is not used SASL will either use the location in the enviornment variable SASL_CONF_PATH or /etc/sasl by default. +.PP + +.SH "RETURN VALUE" + +SASL callback functions should return SASL return codes. See sasl.h for a complete list. SASL_OK indicates success. + +.SH "CONFORMING TO" +RFC 2222 +.SH "SEE ALSO" +.BR other sasl stuff +.BR +.BR \ No newline at end of file diff -urN cyrus-sasl-1.5.21.orig/win32/include/config.h cyrus-sasl-1.5.21/win32/include/config.h --- cyrus-sasl-1.5.21.orig/win32/include/config.h Tue May 9 19:52:53 2000 +++ cyrus-sasl-1.5.21/win32/include/config.h Thu Jun 1 13:07:47 2000 @@ -72,7 +72,9 @@ #define HAVE_MEMCPY 1 #define SASL_PATH_ENV_VAR "SASL_PATH" +#define SASL_CONF_PATH_ENV_VAR "SASL_CONF_PATH" #define PLUGINDIR "\\sasl-plugins" +#define CONFIGDIR "\\sasl-configs" /* Windows calls these functions something else */