From f58f74949d1c596a9c696dc71b325f7d4475fc5f Mon Sep 17 00:00:00 2001 From: Matthias Dieter Wallnöfer Date: Sat, 13 Sep 2008 12:10:00 +0200 Subject: ldb_get_value_by_id: Fix the return of the default value The return of the values of a certain key has been broken since I've introduced the default value. Now the behaviour is correct: If no default value exists, start with index zero to fetch the other values. Otherwise let zero be the default value and enumerate the others starting with one. --- source4/lib/registry/ldb.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) (limited to 'source4/lib/registry/ldb.c') diff --git a/source4/lib/registry/ldb.c b/source4/lib/registry/ldb.c index 18054ac89b..42c99fbb24 100644 --- a/source4/lib/registry/ldb.c +++ b/source4/lib/registry/ldb.c @@ -1,7 +1,8 @@ /* Unix SMB/CIFS implementation. Registry interface - Copyright (C) Jelmer Vernooij 2004-2007. + Copyright (C) 2004-2007, Jelmer Vernooij, jelmer@samba.org + Copyright (C) 2008 Matthias Dieter Wallnöfer, mwallnoefer@yahoo.de This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -318,23 +319,23 @@ static WERROR ldb_get_value_by_id(TALLOC_CTX *mem_ctx, struct hive_key *k, { struct ldb_key_data *kd = talloc_get_type(k, struct ldb_key_data); - if (idx == 0) { - /* default value */ - return ldb_get_default_value(mem_ctx, k, name, data_type, data); - } else { - /* normal value */ + /* if default value exists, give it back */ + if (W_ERROR_IS_OK(ldb_get_default_value(mem_ctx, k, name, data_type, data))) + if (idx == 0) + return WERR_OK; + else + --idx; - /* Do the search if necessary */ - if (kd->values == NULL) { - W_ERROR_NOT_OK_RETURN(cache_values(kd)); - } + /* Do the search if necessary */ + if (kd->values == NULL) { + W_ERROR_NOT_OK_RETURN(cache_values(kd)); + } - if (idx >= kd->value_count) - return WERR_NO_MORE_ITEMS; + if (idx >= kd->value_count) + return WERR_NO_MORE_ITEMS; - reg_ldb_unpack_value(mem_ctx, lp_iconv_convenience(global_loadparm), + reg_ldb_unpack_value(mem_ctx, lp_iconv_convenience(global_loadparm), kd->values[idx], name, data_type, data); - } return WERR_OK; } -- cgit