dovecot-2.2: auth: Added a way to set default values for nonexis...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Jan 5 01:14:34 EET 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/c722bd39098b
changeset: 15512:c722bd39098b
user: Timo Sirainen <tss at iki.fi>
date: Fri Nov 23 08:32:13 2012 +0200
description:
auth: Added a way to set default values for nonexistent LDAP attributes.
%{ldap:attrName:default_value} expands to default_value if attrName doesn't
exist.
diffstat:
src/auth/db-ldap.c | 28 +++++++++++++++++++++-------
1 files changed, 21 insertions(+), 7 deletions(-)
diffs (61 lines):
diff -r c811aab61355 -r c722bd39098b src/auth/db-ldap.c
--- a/src/auth/db-ldap.c Wed Nov 07 18:14:20 2012 +0200
+++ b/src/auth/db-ldap.c Fri Nov 23 08:32:13 2012 +0200
@@ -990,7 +990,7 @@
char *ldap_attr;
if (*data != '\0') {
- ldap_attr = p_strdup(ctx->pool, data);
+ ldap_attr = p_strdup(ctx->pool, t_strcut(data, ':'));
array_append(&ctx->attr_names, &ldap_attr, 1);
}
return NULL;
@@ -1200,28 +1200,42 @@
return ctx;
}
+static const char *db_ldap_field_get_default(const char *data)
+{
+ const char *p;
+
+ p = strchr(data, ':');
+ if (p == NULL)
+ return "";
+ else {
+ /* default value given */
+ return p+1;
+ }
+}
+
static const char *db_ldap_field_expand(const char *data, void *context)
{
struct db_ldap_result_iterate_context *ctx = context;
struct db_ldap_value *ldap_value;
+ const char *field_name = t_strcut(data, ':');
- ldap_value = hash_table_lookup(ctx->ldap_attrs, data);
+ ldap_value = hash_table_lookup(ctx->ldap_attrs, field_name);
if (ldap_value == NULL) {
- /* ldap attribute wasn't requested */
+ /* requested ldap attribute wasn't returned at all */
if (ctx->debug)
- str_printfa(ctx->debug, "; %s missing", data);
- return "";
+ str_printfa(ctx->debug, "; %s missing", field_name);
+ return db_ldap_field_get_default(data);
}
ldap_value->used = TRUE;
if (ldap_value->values[0] == NULL) {
/* no value for ldap attribute */
- return "";
+ return db_ldap_field_get_default(data);
}
if (ldap_value->values[1] != NULL) {
auth_request_log_warning(ctx->auth_request, "ldap",
"Multiple values found for '%s', using value '%s'",
- data, ldap_value->values[0]);
+ field_name, ldap_value->values[0]);
}
return ldap_value->values[0];
}
More information about the dovecot-cvs
mailing list