util: util_ntdb.c gets NTDB_ERROR => NTSTATUS map.
authorRusty Russell <rusty@rustcorp.com.au>
Fri, 22 Jun 2012 00:14:41 +0000 (09:44 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Fri, 22 Jun 2012 05:35:17 +0000 (07:35 +0200)
Very similar to the tdb version.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
lib/util/util_ntdb.c
lib/util/util_ntdb.h

index f0fc158651daf4598bfbccd3c6efe92112132b40..ad9e0a73d20c06b78851413813b424c9394e2a8e 100644 (file)
@@ -236,3 +236,46 @@ enum NTDB_ERROR ntdb_fetch_bystring(struct ntdb_context *ntdb,
 
        return ntdb_fetch(ntdb, key, data);
 }
+
+NTSTATUS map_nt_error_from_ntdb(enum NTDB_ERROR err)
+{
+       NTSTATUS result = NT_STATUS_INTERNAL_ERROR;
+
+       switch (err) {
+       case NTDB_SUCCESS:
+               result = NT_STATUS_OK;
+               break;
+       case NTDB_ERR_CORRUPT:
+               result = NT_STATUS_INTERNAL_DB_CORRUPTION;
+               break;
+       case NTDB_ERR_IO:
+               result = NT_STATUS_UNEXPECTED_IO_ERROR;
+               break;
+       case NTDB_ERR_OOM:
+               result = NT_STATUS_NO_MEMORY;
+               break;
+       case NTDB_ERR_EXISTS:
+               result = NT_STATUS_OBJECT_NAME_COLLISION;
+               break;
+
+       case NTDB_ERR_LOCK:
+               /*
+                * NTDB_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;
+       case NTDB_ERR_NOEXIST:
+               result = NT_STATUS_NOT_FOUND;
+               break;
+       case NTDB_ERR_EINVAL:
+               result = NT_STATUS_INVALID_PARAMETER;
+               break;
+       case NTDB_ERR_RDONLY:
+               result = NT_STATUS_ACCESS_DENIED;
+               break;
+       };
+       return result;
+}
index 41531791e17b1816264a1b1736da365ed5919d4f..eac0db4f027d8e9533b9419064b14cab4c62eed5 100644 (file)
@@ -23,6 +23,7 @@
 #define _____LIB_UTIL_UTIL_NTDB_H__
 #include <ntdb.h>
 #include <talloc.h>
+#include "libcli/util/ntstatus.h"
 
 struct loadparm_context;
 union ntdb_attribute;
@@ -102,4 +103,9 @@ static inline NTDB_DATA string_term_ntdb_data(const char *string)
        return ntdb_mkdata(string, string ? strlen(string) + 1 : 0);
 }
 
+
+/****************************************************************************
+ Return an NTSTATUS from a NTDB_ERROR
+****************************************************************************/
+NTSTATUS map_nt_error_from_ntdb(enum NTDB_ERROR err);
 #endif /* _____LIB_UTIL_UTIL_NTDB_H__ */