tdb_util: Fix whitespace
[sfrench/samba-autobuild/.git] / lib / tdb_wrap / tdb_wrap.c
index 0994b1b79cab93d54f37c6b5ee3f45fd62af6c91..312d17fe961be17a9d56ed5fa9ec3659b80b6776 100644 (file)
@@ -1,20 +1,20 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
    TDB wrap functions
 
    Copyright (C) Andrew Tridgell 2004
    Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007
-   
+
    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
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 #include "lib/util/dlinklist.h"
 #include "lib/tdb_wrap/tdb_wrap.h"
 #include "lib/param/param.h"
+#include "ccan/str/str.h"
 
-/* FIXME: TDB2 does this internally, so no need to wrap multiple opens! */
-#if BUILD_TDB2
-static void tdb_wrap_log(struct tdb_context *tdb,
-                        enum tdb_log_level level,
-                        enum TDB_ERROR ecode,
-                        const char *message,
-                        void *unused)
-{
-       int dl;
-       const char *name = tdb_name(tdb);
-
-       switch (level) {
-       case TDB_LOG_USE_ERROR:
-       case TDB_LOG_ERROR:
-               dl = 0;
-               break;
-       case TDB_LOG_WARNING:
-               dl = 2;
-               break;
-       default:
-               dl = 0;
-       }
-
-       DEBUG(dl, ("tdb(%s):%s: %s", name ? name : "unnamed",
-                  tdb_errorstr(ecode), message));
-}
-#else
 /*
  Log tdb messages via DEBUG().
 */
-static void tdb_wrap_log(TDB_CONTEXT *tdb, enum tdb_debug_level level, 
+static void tdb_wrap_log(TDB_CONTEXT *tdb, enum tdb_debug_level level,
                         const char *format, ...) PRINTF_ATTRIBUTE(3,4);
 
-static void tdb_wrap_log(TDB_CONTEXT *tdb, enum tdb_debug_level level, 
+static void tdb_wrap_log(TDB_CONTEXT *tdb, enum tdb_debug_level level,
                         const char *format, ...)
 {
        va_list ap;
@@ -80,7 +54,7 @@ static void tdb_wrap_log(TDB_CONTEXT *tdb, enum tdb_debug_level level,
                break;
        default:
                debuglevel = 0;
-       }               
+       }
 
        va_start(ap, format);
        ret = vasprintf(&ptr, format, ap);
@@ -92,7 +66,6 @@ static void tdb_wrap_log(TDB_CONTEXT *tdb, enum tdb_debug_level level,
                free(ptr);
        }
 }
-#endif
 
 struct tdb_wrap_private {
        struct tdb_context *tdb;
@@ -108,7 +81,7 @@ static int tdb_wrap_private_destructor(struct tdb_wrap_private *w)
        tdb_close(w->tdb);
        DLIST_REMOVE(tdb_list, w);
        return 0;
-}                               
+}
 
 static struct tdb_wrap_private *tdb_wrap_private_open(TALLOC_CTX *mem_ctx,
                                                      const char *name,
@@ -119,6 +92,7 @@ static struct tdb_wrap_private *tdb_wrap_private_open(TALLOC_CTX *mem_ctx,
                                                      struct loadparm_context *lp_ctx)
 {
        struct tdb_wrap_private *result;
+       struct tdb_logging_context lctx;
 
        result = talloc(mem_ctx, struct tdb_wrap_private);
        if (result == NULL) {
@@ -145,8 +119,11 @@ static struct tdb_wrap_private *tdb_wrap_private_open(TALLOC_CTX *mem_ctx,
                hash_size = lpcfg_parm_int(lp_ctx, NULL, "tdb_hashsize", base, 0);
        }
 
-       result->tdb = tdb_open_compat(name, hash_size, tdb_flags,
-                                     open_flags, mode, tdb_wrap_log, NULL);
+       lctx.log_fn = tdb_wrap_log;
+       lctx.log_private = NULL;
+
+       result->tdb = tdb_open_ex(name, hash_size, tdb_flags,
+                                 open_flags, mode, &lctx, NULL);
        if (result->tdb == NULL) {
                goto fail;
        }
@@ -171,6 +148,13 @@ struct tdb_wrap *tdb_wrap_open(TALLOC_CTX *mem_ctx,
        struct tdb_wrap *result;
        struct tdb_wrap_private *w;
 
+       /* If they specify a .ntdb extension, but the code hasn't been
+        * converted, we want to complain. */
+       if (name && strends(name, ".ntdb")) {
+               DEBUG(2, ("tdb(%s): This code does not yet understand ntdb.  Please report.\n", name));
+               return NULL;
+       }
+
        result = talloc(mem_ctx, struct tdb_wrap);
        if (result == NULL) {
                return NULL;