summaryrefslogtreecommitdiff
path: root/source3/winbindd/idmap_tdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/winbindd/idmap_tdb.c')
-rw-r--r--source3/winbindd/idmap_tdb.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/source3/winbindd/idmap_tdb.c b/source3/winbindd/idmap_tdb.c
index 19e7f0e1d5..d99d2f0e4e 100644
--- a/source3/winbindd/idmap_tdb.c
+++ b/source3/winbindd/idmap_tdb.c
@@ -30,6 +30,7 @@
#include "idmap_rw.h"
#include "dbwrap.h"
#include "../libcli/security/security.h"
+#include "util_tdb.h"
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_IDMAP
@@ -145,9 +146,23 @@ static bool idmap_tdb_upgrade(struct idmap_domain *dom, struct db_context *db)
bool bigendianheader;
struct convert_fn_state s;
- DEBUG(0, ("Upgrading winbindd_idmap.tdb from an old version\n"));
-
+#if BUILD_TDB2
+ /* If we are bigendian, tdb is bigendian if NOT converted. */
+ union {
+ uint16 large;
+ unsigned char small[2];
+ } u;
+ u.large = 0x0102;
+ if (u.small[0] == 0x01)
+ bigendianheader = !(db->get_flags(db) & TDB_CONVERT);
+ else {
+ assert(u.small[0] == 0x02);
+ bigendianheader = (db->get_flags(db) & TDB_CONVERT);
+ }
+#else
bigendianheader = (db->get_flags(db) & TDB_BIGENDIAN) ? True : False;
+#endif
+ DEBUG(0, ("Upgrading winbindd_idmap.tdb from an old version\n"));
vers = dbwrap_fetch_int32(db, "IDMAP_VERSION");