--- cyrus-sasl-2.1.17/configure.in.orig 2003-11-28 19:37:10.000000000 +0100 +++ cyrus-sasl-2.1.17/configure.in 2003-12-03 22:45:24.790632560 +0100 @@ -710,6 +710,13 @@ AC_DEFINE_UNQUOTED(PLUGINDIR, "$plugindir", [Runtime plugin location]) 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", [Runtime config files location]) +AC_SUBST(configdir) + dnl look for rc4 libraries. we accept the CMU one or one from openSSL AC_ARG_WITH(rc4, [ --with-rc4 use internal rc4 routines [yes] ], with_rc4=$withval, @@ -1006,6 +1013,7 @@ #endif #define SASL_PATH_ENV_VAR "SASL_PATH" +#define SASL_CONF_PATH_ENV_VAR "SASL_CONF_PATH" #include #include diff -durN cyrus-sasl-2.1.10.orig/include/sasl.h cyrus-sasl-2.1.10/include/sasl.h --- cyrus-sasl-2.1.10.orig/include/sasl.h Fri Dec 6 17:23:59 2002 +++ cyrus-sasl-2.1.10/include/sasl.h Thu Jan 9 11:44:00 2003 @@ -467,6 +467,24 @@ const char *file, sasl_verify_type_t 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) /* client/user interaction callbacks: */ diff -durN cyrus-sasl-2.1.10.orig/lib/common.c cyrus-sasl-2.1.10/lib/common.c --- cyrus-sasl-2.1.10.orig/lib/common.c Thu Dec 5 15:00:38 2002 +++ cyrus-sasl-2.1.10/lib/common.c Thu Jan 9 11:42:29 2003 @@ -1040,6 +1040,22 @@ } static int +_sasl_getconfpath(void *context __attribute__((unused)), + char ** path_dest) +{ + char *path = NULL; + + if (! path_dest) + return SASL_BADPARAM; + /* Honor external variable only in a safe environment */ + if (getuid() == geteuid() && getgid() == getegid()) + 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))) @@ -1147,6 +1163,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; @@ -1475,6 +1495,30 @@ } 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) { static const sasl_callback_t default_verifyfile_cb = { diff -durN cyrus-sasl-2.1.10.orig/lib/saslint.h cyrus-sasl-2.1.10/lib/saslint.h --- cyrus-sasl-2.1.10.orig/lib/saslint.h Thu Dec 5 05:16:59 2002 +++ cyrus-sasl-2.1.10/lib/saslint.h Thu Jan 9 11:42:29 2003 @@ -356,6 +356,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_common_init(void); --- cyrus-sasl-2.1.19/lib/server.c.orig 2004-07-06 15:42:23.000000000 +0200 +++ cyrus-sasl-2.1.19/lib/server.c 2004-07-25 18:46:12.483590936 +0200 @@ -462,7 +462,7 @@ size_t path_len; char *config_filename=NULL; size_t len; - const sasl_callback_t *getpath_cb=NULL; + const sasl_callback_t *getconfpath_cb=NULL; /* If appname was not provided, behave as if there is no config file (see also sasl_config_init() */ @@ -471,12 +471,12 @@ } /* 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 -durN cyrus-sasl-2.1.10.orig/man/sasl_getconfpath_t.3 cyrus-sasl-2.1.10/man/sasl_getconfpath_t.3 --- cyrus-sasl-2.1.10.orig/man/sasl_getconfpath_t.3 Thu Jan 1 01:00:00 1970 +++ cyrus-sasl-2.1.10/man/sasl_getconfpath_t.3 Thu Jan 9 11:42:29 2003 @@ -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 --- cyrus-sasl-2.1.17/win32/include/config.h.orig 2003-11-28 19:38:00.000000000 +0100 +++ cyrus-sasl-2.1.17/win32/include/config.h 2003-12-03 22:50:39.916726112 +0100 @@ -91,7 +91,9 @@ #define HAVE_MEMCPY 1 #define SASL_PATH_ENV_VAR "SASL_PATH" +#define SASL_CONF_PATH_ENV_VAR "SASL_CONF_PATH" #define PLUGINDIR "C:\\CMU\\bin\\sasl2" +#define CONFIGDIR "\\sasl-configs" /* Windows calls these functions something else */