diff options
-rw-r--r-- | source3/winbindd/idmap_tdb.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/source3/winbindd/idmap_tdb.c b/source3/winbindd/idmap_tdb.c index 57a5e1c6ba..d99d2f0e4e 100644 --- a/source3/winbindd/idmap_tdb.c +++ b/source3/winbindd/idmap_tdb.c @@ -146,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"); |