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