/* This version will be incremented when incompatible changes are made to the
* KDB API, and will be kept in sync with the libkdb major version. */
-#define KRB5_KDB_API_VERSION 7
+#define KRB5_KDB_API_VERSION 8
/* Salt types */
#define KRB5_KDB_SALTTYPE_NORMAL 0
#define KRB5_KDB_FLAGS_S4U ( KRB5_KDB_FLAG_PROTOCOL_TRANSITION | \
KRB5_KDB_FLAG_CONSTRAINED_DELEGATION )
+/* KDB iteration flags */
+#define KRB5_DB_ITER_WRITE 0x00000001
+#define KRB5_DB_ITER_REV 0x00000002
+
/* String attribute names recognized by krb5 */
#define KRB5_KDB_SK_SESSION_ENCTYPES "session_enctypes"
krb5_error_code krb5_db_iterate ( krb5_context kcontext,
char *match_entry,
int (*func) (krb5_pointer, krb5_db_entry *),
- krb5_pointer func_arg );
+ krb5_pointer func_arg, krb5_flags iterflags );
krb5_error_code krb5_db_store_master_key ( krb5_context kcontext,
krb5_error_code (*iterate)(krb5_context kcontext,
char *match_entry,
int (*func)(krb5_pointer, krb5_db_entry *),
- krb5_pointer func_arg);
+ krb5_pointer func_arg, krb5_flags iterflags);
/*
* Optional: Create a password policy entry. Return an error if the policy
if (dump->header[strlen(dump->header)-1] != '\n')
fputc('\n', args.ofile);
- ret = krb5_db_iterate(util_context, NULL, dump_iterator, &args);
+ ret = krb5_db_iterate(util_context, NULL, dump_iterator, &args, 0);
if (ret) {
com_err(progname, ret, _("performing %s dump"), dump->name);
goto error;
}
retval = krb5_db_iterate(util_context, name_pattern,
- update_princ_encryption_1, &data);
+ update_princ_encryption_1, &data, 0);
/* If exit_status is set, then update_princ_encryption_1 already
printed a message. */
if (retval != 0 && exit_status == 0) {
if ((retval = krb5_db_iterate(util_context,
NULL,
find_mkvnos_in_use,
- (krb5_pointer) &args))) {
+ (krb5_pointer) &args, 0))) {
com_err(progname, retval, _("while finding master keys in use"));
exit_status++;
goto cleanup_return;
id.func = iter_fct;
id.data = data;
- ret = krb5_db_iterate(handle->context, match_entry, kdb_iter_func, &id);
+ ret = krb5_db_iterate(handle->context, match_entry, kdb_iter_func, &id, 0);
if (ret)
return(ret);
# Keep LIBMAJOR in sync with KRB5_KDB_API_VERSION in include/kdb.h.
LIBBASE=kdb5
-LIBMAJOR=7
+LIBMAJOR=8
LIBMINOR=0
LIBINITFUNC=kdb_init_lock_list
LIBFINIFUNC=kdb_fini_lock_list
krb5_error_code
krb5_db_iterate(krb5_context kcontext, char *match_entry,
int (*func)(krb5_pointer, krb5_db_entry *),
- krb5_pointer func_arg)
+ krb5_pointer func_arg, krb5_flags iterflags)
{
krb5_error_code status = 0;
kdb_vftabl *v;
return status;
if (v->iterate == NULL)
return KRB5_PLUGIN_OP_NOTSUPP;
- return v->iterate(kcontext, match_entry, func, func_arg);
+ return v->iterate(kcontext, match_entry, func, func_arg, iterflags);
}
/* Return a read only pointer alias to mkey list. Do not free this! */
(krb5_context ctx, char *s,
krb5_error_code (*f) (krb5_pointer,
krb5_db_entry *),
- krb5_pointer p),
- (ctx, s, f, p));
+ krb5_pointer p, krb5_flags flags),
+ (ctx, s, f, p, flags));
WRAP_K (krb5_db2_create_policy,
(krb5_context context, osa_policy_ent_t entry),
static krb5_error_code
ctx_iterate(krb5_context context, krb5_db2_context *dbc,
- ctx_iterate_cb func, krb5_pointer func_arg)
+ ctx_iterate_cb func, krb5_pointer func_arg, krb5_flags iterflags)
{
DBT key, contents;
krb5_data contdata;
krb5_error_code
krb5_db2_iterate(krb5_context context, char *match_expr, ctx_iterate_cb func,
- krb5_pointer func_arg)
+ krb5_pointer func_arg, krb5_flags iterflags)
{
if (!inited(context))
return KRB5_KDB_DBNOTINITED;
return ctx_iterate(context, context->dal_handle->db_context, func,
- func_arg);
+ func_arg, iterflags);
}
krb5_boolean
nra.kcontext = context;
nra.db_context = dbc_real;
- return ctx_iterate(context, dbc_temp, krb5_db2_merge_nra_iterator, &nra);
+ return ctx_iterate(context, dbc_temp, krb5_db2_merge_nra_iterator, &nra, 0);
}
/*
krb5_error_code krb5_db2_iterate(krb5_context, char *,
krb5_error_code (*)(krb5_pointer,
krb5_db_entry *),
- krb5_pointer);
+ krb5_pointer, krb5_flags);
krb5_error_code krb5_db2_set_nonblocking(krb5_context, krb5_boolean,
krb5_boolean *);
krb5_boolean krb5_db2_set_lockmode(krb5_context, krb5_boolean);
kh_db_iterate(krb5_context context,
char *match_entry,
int (*func)(krb5_pointer, krb5_db_entry *),
- krb5_pointer func_arg)
+ krb5_pointer func_arg, krb5_flags iterflags)
{
krb5_error_code code;
kh_db_context *kh = KH_DB_CONTEXT(context);
krb5_error_code
krb5_ldap_iterate(krb5_context context, char *match_expr,
krb5_error_code (*func)(krb5_pointer, krb5_db_entry *),
- krb5_pointer func_arg)
+ krb5_pointer func_arg, krb5_flags iterflags)
{
krb5_db_entry entry;
krb5_principal principal;
krb5_error_code
krb5_ldap_iterate(krb5_context, char *,
krb5_error_code (*)(krb5_pointer, krb5_db_entry *),
- krb5_pointer/*, int */);
+ krb5_pointer, krb5_flags);
void
krb5_dbe_free_contents(krb5_context, krb5_db_entry *);
/* Exercise principal iteration code. */
count = 0;
- CHECK(krb5_db_iterate(ctx, "xy*", iter_princ_handler, &count));
+ CHECK(krb5_db_iterate(ctx, "xy*", iter_princ_handler, &count, 0));
CHECK_COND(count == 1);
CHECK(krb5_db_fini(ctx));