It's only useful for listing fields that %{ldap_ptr} can potentially access.
/* @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;
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);
/* 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);