1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
Add /etc/ldap/sasl2 to the SASL configuration search path.
Not submitted upstream. Somewhat Debian-specific and probably not of
interest upstream.
--- a/include/ldap_defaults.h
+++ b/include/ldap_defaults.h
@@ -63,4 +63,6 @@
/* dn of the default "monitor" subentry */
#define SLAPD_MONITOR_DN "cn=Monitor"
+#define SASL_CONFIGPATH LDAP_SYSCONFDIR LDAP_DIRSEP "sasl2"
+
#endif /* _LDAP_CONFIG_H */
--- a/servers/slapd/sasl.c
+++ b/servers/slapd/sasl.c
@@ -1103,12 +1103,38 @@ static const rewrite_mapper slapd_mapper
};
#endif
+static int
+slap_sasl_getconfpath( void * context, char ** path )
+{
+ char * sasl_default_configpath;
+ size_t len;
+
+#if SASL_VERSION_MAJOR >= 2
+ sasl_default_configpath = "/usr/lib/sasl2";
+#else
+ sasl_default_configpath = "/usr/lib/sasl";
+#endif
+
+ len = strlen(SASL_CONFIGPATH) + 1 /* colon */ +
+ strlen(sasl_default_configpath) + 1 /* \0 */;
+ *path = malloc( len );
+ if ( *path == NULL )
+ return SASL_FAIL;
+
+ if (snprintf( *path, len, "%s:%s", SASL_CONFIGPATH,
+ sasl_default_configpath ) != len-1 )
+ return SASL_FAIL;
+
+ return SASL_OK;
+}
+
int slap_sasl_init( void )
{
#ifdef HAVE_CYRUS_SASL
int rc;
static sasl_callback_t server_callbacks[] = {
{ SASL_CB_LOG, (slap_sasl_cb_ft)&slap_sasl_log, NULL },
+ { SASL_CB_GETCONFPATH, (slap_sasl_cb_ft)&slap_sasl_getconfpath, NULL },
{ SASL_CB_GETOPT, (slap_sasl_cb_ft)&slap_sasl_getopt, NULL },
{ SASL_CB_LIST_END, NULL, NULL }
};
|