diff options
-rw-r--r-- | lib/util/util_tdb.c | 65 | ||||
-rw-r--r-- | lib/util/util_tdb.h | 6 | ||||
-rw-r--r-- | source3/lib/util_tdb.c | 58 |
3 files changed, 70 insertions, 59 deletions
diff --git a/lib/util/util_tdb.c b/lib/util/util_tdb.c index f239797c47..2096769e57 100644 --- a/lib/util/util_tdb.c +++ b/lib/util/util_tdb.c @@ -4,7 +4,8 @@ tdb utility functions Copyright (C) Andrew Tridgell 1992-2006 - + Copyright (C) Volker Lendecke 2007-2011 + 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 the Free Software Foundation; either version 3 of the License, or @@ -351,3 +352,65 @@ int tdb_traverse_delete_fn(struct tdb_context *the_tdb, TDB_DATA key, TDB_DATA d { return tdb_delete(the_tdb, key); } + +/**************************************************************************** + Return an NTSTATUS from a TDB_ERROR +****************************************************************************/ + +NTSTATUS map_nt_error_from_tdb(enum TDB_ERROR err) +{ + NTSTATUS result = NT_STATUS_INTERNAL_ERROR; + + switch (err) { + case TDB_SUCCESS: + result = NT_STATUS_OK; + break; + case TDB_ERR_CORRUPT: + result = NT_STATUS_INTERNAL_DB_CORRUPTION; + break; + case TDB_ERR_IO: + result = NT_STATUS_UNEXPECTED_IO_ERROR; + break; + case TDB_ERR_OOM: + result = NT_STATUS_NO_MEMORY; + break; + case TDB_ERR_EXISTS: + result = NT_STATUS_OBJECT_NAME_COLLISION; + break; + + case TDB_ERR_LOCK: + /* + * TDB_ERR_LOCK is very broad, we could for example + * distinguish between fcntl locks and invalid lock + * sequences. So NT_STATUS_FILE_LOCK_CONFLICT is a + * compromise. + */ + result = NT_STATUS_FILE_LOCK_CONFLICT; + break; + +#ifndef BUILD_TDB2 + case TDB_ERR_NOLOCK: + case TDB_ERR_LOCK_TIMEOUT: + /* + * These two ones in the enum are not actually used + */ + result = NT_STATUS_FILE_LOCK_CONFLICT; + break; +#endif + case TDB_ERR_NOEXIST: + result = NT_STATUS_NOT_FOUND; + break; + case TDB_ERR_EINVAL: + result = NT_STATUS_INVALID_PARAMETER; + break; + case TDB_ERR_RDONLY: + result = NT_STATUS_ACCESS_DENIED; + break; +#ifndef BUILD_TDB2 + case TDB_ERR_NESTING: + result = NT_STATUS_INTERNAL_ERROR; + break; +#endif + }; + return result; +} diff --git a/lib/util/util_tdb.h b/lib/util/util_tdb.h index 3d03b990c2..0b6f3f18a4 100644 --- a/lib/util/util_tdb.h +++ b/lib/util/util_tdb.h @@ -132,5 +132,11 @@ bool tdb_change_uint32_atomic(struct tdb_context *tdb, const char *keystr, uint3 int tdb_traverse_delete_fn(struct tdb_context *the_tdb, TDB_DATA key, TDB_DATA dbuf, void *state); +/**************************************************************************** + Return an NTSTATUS from a TDB_ERROR +****************************************************************************/ + +NTSTATUS map_nt_error_from_tdb(enum TDB_ERROR err); + #endif /* _____LIB_UTIL_UTIL_TDB_H__ */ diff --git a/source3/lib/util_tdb.c b/source3/lib/util_tdb.c index aea5c74650..e9965ed838 100644 --- a/source3/lib/util_tdb.c +++ b/source3/lib/util_tdb.c @@ -584,64 +584,6 @@ int tdb_trans_delete(struct tdb_context *tdb, TDB_DATA key) return res; } -NTSTATUS map_nt_error_from_tdb(enum TDB_ERROR err) -{ - NTSTATUS result = NT_STATUS_INTERNAL_ERROR; - - switch (err) { - case TDB_SUCCESS: - result = NT_STATUS_OK; - break; - case TDB_ERR_CORRUPT: - result = NT_STATUS_INTERNAL_DB_CORRUPTION; - break; - case TDB_ERR_IO: - result = NT_STATUS_UNEXPECTED_IO_ERROR; - break; - case TDB_ERR_OOM: - result = NT_STATUS_NO_MEMORY; - break; - case TDB_ERR_EXISTS: - result = NT_STATUS_OBJECT_NAME_COLLISION; - break; - - case TDB_ERR_LOCK: - /* - * TDB_ERR_LOCK is very broad, we could for example - * distinguish between fcntl locks and invalid lock - * sequences. So NT_STATUS_FILE_LOCK_CONFLICT is a - * compromise. - */ - result = NT_STATUS_FILE_LOCK_CONFLICT; - break; - -#ifndef BUILD_TDB2 - case TDB_ERR_NOLOCK: - case TDB_ERR_LOCK_TIMEOUT: - /* - * These two ones in the enum are not actually used - */ - result = NT_STATUS_FILE_LOCK_CONFLICT; - break; -#endif - case TDB_ERR_NOEXIST: - result = NT_STATUS_NOT_FOUND; - break; - case TDB_ERR_EINVAL: - result = NT_STATUS_INVALID_PARAMETER; - break; - case TDB_ERR_RDONLY: - result = NT_STATUS_ACCESS_DENIED; - break; -#ifndef BUILD_TDB2 - case TDB_ERR_NESTING: - result = NT_STATUS_INTERNAL_ERROR; - break; -#endif - }; - return result; -} - int tdb_data_cmp(TDB_DATA t1, TDB_DATA t2) { int ret; |