From 658f72128ff6950c6a03994198b4464a273fb300 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Thu, 6 Oct 2011 21:07:27 +0200 Subject: s3:dbwrap: change dbwrap_fetch_uint32() to NTSTATUS return type (instead of bool) for consistency and better error propagation --- source3/lib/dbwrap/dbwrap.h | 4 ++-- source3/lib/dbwrap/dbwrap_util.c | 14 +++++++++----- source3/passdb/account_pol.c | 14 ++++++++------ source3/passdb/pdb_tdb.c | 5 +++-- source3/torture/torture.c | 12 ++++++++---- source3/utils/dbwrap_tool.c | 8 ++++---- source3/utils/net_idmap_check.c | 12 ++++++++---- source3/winbindd/idmap_autorid.c | 19 ++++++++++++------- source3/winbindd/idmap_tdb.c | 11 +++++------ source3/winbindd/idmap_tdb2.c | 14 ++++++-------- 10 files changed, 65 insertions(+), 48 deletions(-) diff --git a/source3/lib/dbwrap/dbwrap.h b/source3/lib/dbwrap/dbwrap.h index a549c84d8e1..423791660c1 100644 --- a/source3/lib/dbwrap/dbwrap.h +++ b/source3/lib/dbwrap/dbwrap.h @@ -73,8 +73,8 @@ NTSTATUS dbwrap_fetch_bystring(struct db_context *db, TALLOC_CTX *mem_ctx, NTSTATUS dbwrap_fetch_int32(struct db_context *db, const char *keystr, int32_t *result); int dbwrap_store_int32(struct db_context *db, const char *keystr, int32_t v); -bool dbwrap_fetch_uint32(struct db_context *db, const char *keystr, - uint32_t *val); +NTSTATUS dbwrap_fetch_uint32(struct db_context *db, const char *keystr, + uint32_t *val); int dbwrap_store_uint32(struct db_context *db, const char *keystr, uint32_t v); NTSTATUS dbwrap_change_uint32_atomic(struct db_context *db, const char *keystr, uint32_t *oldval, uint32_t change_val); diff --git a/source3/lib/dbwrap/dbwrap_util.c b/source3/lib/dbwrap/dbwrap_util.c index 5c3940e97b8..bd29460f492 100644 --- a/source3/lib/dbwrap/dbwrap_util.c +++ b/source3/lib/dbwrap/dbwrap_util.c @@ -72,25 +72,29 @@ int dbwrap_store_int32(struct db_context *db, const char *keystr, int32_t v) return NT_STATUS_IS_OK(status) ? 0 : -1; } -bool dbwrap_fetch_uint32(struct db_context *db, const char *keystr, - uint32_t *val) +NTSTATUS dbwrap_fetch_uint32(struct db_context *db, const char *keystr, + uint32_t *val) { TDB_DATA dbuf; NTSTATUS status; + if (val == NULL) { + return NT_STATUS_INVALID_PARAMETER; + } + status = dbwrap_fetch_bystring(db, NULL, keystr, &dbuf); if (!NT_STATUS_IS_OK(status)) { - return false; + return status; } if ((dbuf.dptr == NULL) || (dbuf.dsize != sizeof(uint32_t))) { TALLOC_FREE(dbuf.dptr); - return false; + return NT_STATUS_NOT_FOUND; } *val = IVAL(dbuf.dptr, 0); TALLOC_FREE(dbuf.dptr); - return true; + return NT_STATUS_OK; } int dbwrap_store_uint32(struct db_context *db, const char *keystr, uint32_t v) diff --git a/source3/passdb/account_pol.c b/source3/passdb/account_pol.c index dd495082a28..bd8cdf725f3 100644 --- a/source3/passdb/account_pol.c +++ b/source3/passdb/account_pol.c @@ -213,7 +213,7 @@ bool init_account_policy(void) const char *vstring = "INFO/version"; uint32_t version = 0; int i; - bool ret; + NTSTATUS status; if (db != NULL) { return True; @@ -232,8 +232,8 @@ bool init_account_policy(void) } } - ret = dbwrap_fetch_uint32(db, vstring, &version); - if (!ret) { + status = dbwrap_fetch_uint32(db, vstring, &version); + if (!NT_STATUS_IS_OK(status)) { version = 0; } @@ -249,8 +249,8 @@ bool init_account_policy(void) return false; } - ret = dbwrap_fetch_uint32(db, vstring, &version); - if (!ret) { + status = dbwrap_fetch_uint32(db, vstring, &version); + if (!NT_STATUS_IS_OK(status)) { version = 0; } @@ -321,6 +321,7 @@ bool account_policy_get(enum pdb_policy_type type, uint32_t *value) { const char *name; uint32 regval; + NTSTATUS status; if (!init_account_policy()) { return False; @@ -336,7 +337,8 @@ bool account_policy_get(enum pdb_policy_type type, uint32_t *value) return False; } - if (!dbwrap_fetch_uint32(db, name, ®val)) { + status = dbwrap_fetch_uint32(db, name, ®val); + if (!NT_STATUS_IS_OK(status)) { DEBUG(1, ("account_policy_get: tdb_fetch_uint32 failed for type %d (%s), returning 0\n", type, name)); return False; } diff --git a/source3/passdb/pdb_tdb.c b/source3/passdb/pdb_tdb.c index 565dd5d3098..80a4b49f9dd 100644 --- a/source3/passdb/pdb_tdb.c +++ b/source3/passdb/pdb_tdb.c @@ -325,9 +325,10 @@ static bool tdbsam_upgrade_next_rid(struct db_context *db) TDB_CONTEXT *tdb; uint32 rid; bool ok = false; + NTSTATUS status; - ok = dbwrap_fetch_uint32(db, NEXT_RID_STRING, &rid); - if (ok) { + status = dbwrap_fetch_uint32(db, NEXT_RID_STRING, &rid); + if (NT_STATUS_IS_OK(status)) { return true; } diff --git a/source3/torture/torture.c b/source3/torture/torture.c index 0d81602a047..1e0983a5e10 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -8595,8 +8595,10 @@ static bool run_local_dbtrans(int dummy) break; } - if (!dbwrap_fetch_uint32(db, "transtest", &val)) { - printf(__location__ "dbwrap_fetch_uint32 failed\n"); + status = dbwrap_fetch_uint32(db, "transtest", &val); + if (!NT_STATUS_IS_OK(status)) { + printf(__location__ "dbwrap_fetch_uint32 failed: %s\n", + nt_errstr(status)); break; } @@ -8606,8 +8608,10 @@ static bool run_local_dbtrans(int dummy) } } - if (!dbwrap_fetch_uint32(db, "transtest", &val2)) { - printf(__location__ "dbwrap_fetch_uint32 failed\n"); + status = dbwrap_fetch_uint32(db, "transtest", &val2); + if (!NT_STATUS_IS_OK(status)) { + printf(__location__ "dbwrap_fetch_uint32 failed: %s\n", + nt_errstr(status)); break; } diff --git a/source3/utils/dbwrap_tool.c b/source3/utils/dbwrap_tool.c index 33ef94f6b95..fd599dd5042 100644 --- a/source3/utils/dbwrap_tool.c +++ b/source3/utils/dbwrap_tool.c @@ -53,15 +53,15 @@ static int dbwrap_tool_fetch_uint32(struct db_context *db, void *data) { uint32_t value; - bool ret; + NTSTATUS ret; ret = dbwrap_fetch_uint32(db, keyname, &value); - if (ret) { + if (NT_STATUS_IS_OK(ret)) { d_printf("%u\n", value); return 0; } else { - d_fprintf(stderr, "ERROR: could not fetch uint32 key '%s'\n", - keyname); + d_fprintf(stderr, "ERROR: could not fetch uint32 key '%s': " + "%s\n", nt_errstr(ret), keyname); return -1; } } diff --git a/source3/utils/net_idmap_check.c b/source3/utils/net_idmap_check.c index eefb7008169..960a5970738 100644 --- a/source3/utils/net_idmap_check.c +++ b/source3/utils/net_idmap_check.c @@ -400,10 +400,12 @@ static void edit_record(struct record* r) { static bool check_version(struct check_ctx* ctx) { static const char* key = "IDMAP_VERSION"; uint32_t version; - bool no_version = !dbwrap_fetch_uint32(ctx->db, key, &version); + NTSTATUS status; char action = 's'; struct check_actions* act = &ctx->action; - if (no_version) { + + status = dbwrap_fetch_uint32(ctx->db, key, &version); + if (!NT_STATUS_IS_OK(status)) { d_printf("No version number, assume 2\n"); action = get_action(&act->no_version, NULL, NULL); } else if (version != 2) { @@ -429,9 +431,11 @@ static bool check_version(struct check_ctx* ctx) { static void check_hwm(struct check_ctx* ctx, const char* key, uint32_t target) { uint32_t hwm; char action = 's'; - bool found = dbwrap_fetch_uint32(ctx->db, key, &hwm); + NTSTATUS status; struct check_actions* act = &ctx->action; - if (!found) { + + status = dbwrap_fetch_uint32(ctx->db, key, &hwm); + if (!NT_STATUS_IS_OK(status)) { d_printf("No %s should be %d\n", key, target); action = get_action(&act->invalid_hwm, NULL, NULL); } else if (target < hwm) { diff --git a/source3/winbindd/idmap_autorid.c b/source3/winbindd/idmap_autorid.c index ed00d3728d9..62339f13285 100644 --- a/source3/winbindd/idmap_autorid.c +++ b/source3/winbindd/idmap_autorid.c @@ -66,13 +66,15 @@ static NTSTATUS idmap_autorid_get_domainrange(struct db_context *db, cfg = (struct autorid_domain_config *)private_data; dom_sid_string_buf(&(cfg->sid), sidstr, sizeof(sidstr)); - if (!dbwrap_fetch_uint32(db, sidstr, &domainnum)) { + ret = dbwrap_fetch_uint32(db, sidstr, &domainnum); + if (!NT_STATUS_IS_OK(ret)) { DEBUG(10, ("Acquiring new range for domain %s\n", sidstr)); /* fetch the current HWM */ - if (!dbwrap_fetch_uint32(db, HWM, &hwm)) { + ret = dbwrap_fetch_uint32(db, HWM, &hwm); + if (!NT_STATUS_IS_OK(ret)) { DEBUG(1, ("Fatal error while fetching current " - "HWM value!\n")); + "HWM value: %s\n", nt_errstr(ret))); ret = NT_STATUS_INTERNAL_ERROR; goto error; } @@ -519,9 +521,10 @@ static NTSTATUS idmap_autorid_initialize(struct idmap_domain *dom) /* read previously stored config and current HWM */ storedconfig = idmap_autorid_loadconfig(talloc_tos()); - if (!dbwrap_fetch_uint32(autorid_db, HWM, &hwm)) { + status = dbwrap_fetch_uint32(autorid_db, HWM, &hwm); + if (!NT_STATUS_IS_OK(status)) { DEBUG(1, ("Fatal error while fetching current " - "HWM value!\n")); + "HWM value: %s\n", nt_errstr(status))); status = NT_STATUS_INTERNAL_ERROR; goto error; } @@ -590,8 +593,10 @@ static NTSTATUS idmap_autorid_allocate_id(struct idmap_domain *dom, globalcfg = talloc_get_type(dom->private_data, struct autorid_global_config); - if (!dbwrap_fetch_uint32(autorid_db, ALLOC_HWM, &hwm)) { - DEBUG(1, ("Failed to fetch current allocation HWM value!\n")); + ret = dbwrap_fetch_uint32(autorid_db, ALLOC_HWM, &hwm); + if (!NT_STATUS_IS_OK(ret)) { + DEBUG(1, ("Failed to fetch current allocation HWM value: %s\n", + nt_errstr(ret))); return NT_STATUS_INTERNAL_ERROR; } diff --git a/source3/winbindd/idmap_tdb.c b/source3/winbindd/idmap_tdb.c index b520e091031..c19c9c81632 100644 --- a/source3/winbindd/idmap_tdb.c +++ b/source3/winbindd/idmap_tdb.c @@ -251,17 +251,17 @@ static NTSTATUS idmap_tdb_init_hwm(struct idmap_domain *dom) bool update_uid = false; bool update_gid = false; struct idmap_tdb_context *ctx; - bool status; + NTSTATUS status; ctx = talloc_get_type(dom->private_data, struct idmap_tdb_context); status = dbwrap_fetch_uint32(ctx->db, HWM_USER, &low_uid); - if (!status || low_uid < dom->low_id) { + if (!NT_STATUS_IS_OK(status) || low_uid < dom->low_id) { update_uid = true; } status = dbwrap_fetch_uint32(ctx->db, HWM_GROUP, &low_gid); - if (!status || low_gid < dom->low_id) { + if (!NT_STATUS_IS_OK(status) || low_gid < dom->low_id) { update_gid = true; } @@ -404,12 +404,11 @@ static NTSTATUS idmap_tdb_allocate_id_action(struct db_context *db, NTSTATUS ret; struct idmap_tdb_allocate_id_context *state; uint32_t hwm; - bool ret2; state = (struct idmap_tdb_allocate_id_context *)private_data; - ret2 = dbwrap_fetch_uint32(db, state->hwmkey, &hwm); - if (!ret2) { + ret = dbwrap_fetch_uint32(db, state->hwmkey, &hwm); + if (!NT_STATUS_IS_OK(ret)) { ret = NT_STATUS_INTERNAL_DB_ERROR; goto done; } diff --git a/source3/winbindd/idmap_tdb2.c b/source3/winbindd/idmap_tdb2.c index 0f50f615a13..ab47fe5389d 100644 --- a/source3/winbindd/idmap_tdb2.c +++ b/source3/winbindd/idmap_tdb2.c @@ -63,14 +63,13 @@ static NTSTATUS idmap_tdb2_init_hwm(struct idmap_domain *dom) NTSTATUS status; uint32 low_id; struct idmap_tdb2_context *ctx; - bool ret; ctx = talloc_get_type(dom->private_data, struct idmap_tdb2_context); /* Create high water marks for group and user id */ - ret = dbwrap_fetch_uint32(ctx->db, HWM_USER, &low_id); - if (!ret || (low_id < dom->low_id)) { + status = dbwrap_fetch_uint32(ctx->db, HWM_USER, &low_id); + if (!NT_STATUS_IS_OK(status) || (low_id < dom->low_id)) { status = dbwrap_trans_store_uint32(ctx->db, HWM_USER, dom->low_id); if (!NT_STATUS_IS_OK(status)) { @@ -80,8 +79,8 @@ static NTSTATUS idmap_tdb2_init_hwm(struct idmap_domain *dom) } } - ret = dbwrap_fetch_uint32(ctx->db, HWM_GROUP, &low_id); - if (!ret || (low_id < dom->low_id)) { + status = dbwrap_fetch_uint32(ctx->db, HWM_GROUP, &low_id); + if (!NT_STATUS_IS_OK(status) || (low_id < dom->low_id)) { status = dbwrap_trans_store_uint32(ctx->db, HWM_GROUP, dom->low_id); if (!NT_STATUS_IS_OK(status)) { @@ -144,12 +143,11 @@ static NTSTATUS idmap_tdb2_allocate_id_action(struct db_context *db, NTSTATUS ret; struct idmap_tdb2_allocate_id_context *state; uint32_t hwm; - bool ret2; state = (struct idmap_tdb2_allocate_id_context *)private_data; - ret2 = dbwrap_fetch_uint32(db, state->hwmkey, &hwm); - if (!ret2) { + ret = dbwrap_fetch_uint32(db, state->hwmkey, &hwm); + if (!NT_STATUS_IS_OK(ret)) { ret = NT_STATUS_INTERNAL_DB_ERROR; goto done; } -- cgit v1.2.1