]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
ldap auth: "!ldapField" now requests the given field, but doesn't return it directly.
authorTimo Sirainen <tss@iki.fi>
Mon, 18 Mar 2013 19:31:34 +0000 (21:31 +0200)
committerTimo Sirainen <tss@iki.fi>
Mon, 18 Mar 2013 19:31:34 +0000 (21:31 +0200)
It's only useful for listing fields that %{ldap_ptr} can potentially access.

src/auth/db-ldap.c
src/auth/db-ldap.h

index b22b969c6900a144159a1af8642c6f165a4db5d3..826ca1d5501d9e51df576528a99e4a7c2e5cb7b6 100644 (file)
@@ -1314,6 +1314,11 @@ void db_ldap_set_attrs(struct ldap_connection *conn, const char *attrlist,
                                /* @name=ldapField */
                                name++;
                                field->value_is_dn = TRUE;
+                       } else if (name[0] == '!' && name == ldap_attr) {
+                               /* !ldapAttr */
+                               name = "";
+                               ldap_attr++;
+                               field->skip = TRUE;
                        }
                        field->name = name;
                        field->value = templ;
@@ -1596,7 +1601,8 @@ bool db_ldap_result_iterate_next(struct db_ldap_result_iterate_context *ctx,
                if (ctx->attr_idx == array_count(ctx->attr_map))
                        return FALSE;
                field = array_idx(ctx->attr_map, ctx->attr_idx++);
-       } while (field->value_is_dn != ctx->iter_dn_values);
+       } while (field->value_is_dn != ctx->iter_dn_values ||
+                field->skip);
 
        ldap_value = *field->ldap_attr_name == '\0' ? NULL :
                hash_table_lookup(ctx->ldap_attrs, field->ldap_attr_name);
index f33f55d3780dd09378144437e88aa5cb81d0ddb0..4478289bc47f509460668aad8fba8685619150fb 100644 (file)
@@ -87,6 +87,9 @@ struct ldap_field {
        /* LDAP value contains a DN, which is looked up and used for @name
           attributes. */
        bool value_is_dn;
+       /* This attribute is used internally only via %{ldap_ptr},
+          it shouldn't be returned in iteration. */
+       bool skip;
 };
 ARRAY_DEFINE_TYPE(ldap_field, struct ldap_field);