mirror of
https://github.com/samba-team/samba.git
synced 2025-02-01 05:47:28 +03:00
When re-writing tdb version numbers as little endian int32, we must
change the version number also. Jeremy.
This commit is contained in:
parent
a57e13b8b6
commit
3dec9cf99a
@ -26,7 +26,9 @@ extern DOM_SID global_sam_sid;
|
||||
|
||||
static TDB_CONTEXT *tdb; /* used for driver files */
|
||||
|
||||
#define DATABASE_VERSION 1
|
||||
#define DATABASE_VERSION_V1 1 /* native byte format. */
|
||||
#define DATABASE_VERSION_V2 2 /* le format. */
|
||||
|
||||
#define GROUP_PREFIX "UNIXGROUP/"
|
||||
|
||||
PRIVS privs[] = {
|
||||
@ -166,15 +168,15 @@ BOOL init_group_mapping(void)
|
||||
|
||||
/* Cope with byte-reversed older versions of the db. */
|
||||
vers_id = tdb_fetch_int32(tdb, vstring);
|
||||
if ((vers_id != DATABASE_VERSION) && (IREV(vers_id) == DATABASE_VERSION)) {
|
||||
if ((vers_id == DATABASE_VERSION_V1) || (IREV(vers_id) == DATABASE_VERSION_V1)) {
|
||||
/* Written on a bigendian machine with old fetch_int code. Save as le. */
|
||||
tdb_store_int32(tdb, vstring, DATABASE_VERSION);
|
||||
vers_id = DATABASE_VERSION;
|
||||
tdb_store_int32(tdb, vstring, DATABASE_VERSION_V2);
|
||||
vers_id = DATABASE_VERSION_V2;
|
||||
}
|
||||
|
||||
if (vers_id != DATABASE_VERSION) {
|
||||
if (vers_id != DATABASE_VERSION_V2) {
|
||||
tdb_traverse(tdb, tdb_traverse_delete_fn, NULL);
|
||||
tdb_store_int32(tdb, vstring, DATABASE_VERSION);
|
||||
tdb_store_int32(tdb, vstring, DATABASE_VERSION_V2);
|
||||
}
|
||||
|
||||
tdb_unlock_bystring(tdb, vstring);
|
||||
|
@ -36,8 +36,9 @@ static TDB_CONTEXT *tdb_printers; /* used for printers files */
|
||||
|
||||
#define NTDRIVERS_DATABASE_VERSION_1 1
|
||||
#define NTDRIVERS_DATABASE_VERSION_2 2
|
||||
#define NTDRIVERS_DATABASE_VERSION_3 3 /* little endian version of v2 */
|
||||
|
||||
#define NTDRIVERS_DATABASE_VERSION NTDRIVERS_DATABASE_VERSION_2
|
||||
#define NTDRIVERS_DATABASE_VERSION NTDRIVERS_DATABASE_VERSION_3
|
||||
|
||||
/* Map generic permissions to printer object specific permissions */
|
||||
|
||||
@ -173,11 +174,11 @@ static nt_forms_struct default_forms[] = {
|
||||
{"PRC Envelope #10 Rotated",0x1,0x6fd10,0x4f1a0,0x0,0x0,0x6fd10,0x4f1a0}
|
||||
};
|
||||
|
||||
static BOOL upgrade_to_version_2(void)
|
||||
static BOOL upgrade_to_version_3(void)
|
||||
{
|
||||
TDB_DATA kbuf, newkey, dbuf;
|
||||
|
||||
DEBUG(0,("upgrade_to_version_2: upgrading print tdb's to version 2\n"));
|
||||
DEBUG(0,("upgrade_to_version_3: upgrading print tdb's to version 3\n"));
|
||||
|
||||
for (kbuf = tdb_firstkey(tdb_drivers); kbuf.dptr;
|
||||
newkey = tdb_nextkey(tdb_drivers, kbuf), safe_free(kbuf.dptr), kbuf=newkey) {
|
||||
@ -185,37 +186,37 @@ static BOOL upgrade_to_version_2(void)
|
||||
dbuf = tdb_fetch(tdb_drivers, kbuf);
|
||||
|
||||
if (strncmp(kbuf.dptr, FORMS_PREFIX, strlen(FORMS_PREFIX)) == 0) {
|
||||
DEBUG(0,("upgrade_to_version_2:moving form\n"));
|
||||
DEBUG(0,("upgrade_to_version_3:moving form\n"));
|
||||
if (tdb_store(tdb_forms, kbuf, dbuf, TDB_REPLACE) != 0) {
|
||||
DEBUG(0,("upgrade_to_version_2: failed to move form. Error (%s).\n", tdb_errorstr(tdb_forms)));
|
||||
DEBUG(0,("upgrade_to_version_3: failed to move form. Error (%s).\n", tdb_errorstr(tdb_forms)));
|
||||
return False;
|
||||
}
|
||||
if (tdb_delete(tdb_drivers, kbuf) != 0) {
|
||||
DEBUG(0,("upgrade_to_version_2: failed to delete form. Error (%s)\n", tdb_errorstr(tdb_drivers)));
|
||||
DEBUG(0,("upgrade_to_version_3: failed to delete form. Error (%s)\n", tdb_errorstr(tdb_drivers)));
|
||||
return False;
|
||||
}
|
||||
}
|
||||
|
||||
if (strncmp(kbuf.dptr, PRINTERS_PREFIX, strlen(PRINTERS_PREFIX)) == 0) {
|
||||
DEBUG(0,("upgrade_to_version_2:moving printer\n"));
|
||||
DEBUG(0,("upgrade_to_version_3:moving printer\n"));
|
||||
if (tdb_store(tdb_printers, kbuf, dbuf, TDB_REPLACE) != 0) {
|
||||
DEBUG(0,("upgrade_to_version_2: failed to move printer. Error (%s)\n", tdb_errorstr(tdb_printers)));
|
||||
DEBUG(0,("upgrade_to_version_3: failed to move printer. Error (%s)\n", tdb_errorstr(tdb_printers)));
|
||||
return False;
|
||||
}
|
||||
if (tdb_delete(tdb_drivers, kbuf) != 0) {
|
||||
DEBUG(0,("upgrade_to_version_2: failed to delete printer. Error (%s)\n", tdb_errorstr(tdb_drivers)));
|
||||
DEBUG(0,("upgrade_to_version_3: failed to delete printer. Error (%s)\n", tdb_errorstr(tdb_drivers)));
|
||||
return False;
|
||||
}
|
||||
}
|
||||
|
||||
if (strncmp(kbuf.dptr, SECDESC_PREFIX, strlen(SECDESC_PREFIX)) == 0) {
|
||||
DEBUG(0,("upgrade_to_version_2:moving secdesc\n"));
|
||||
DEBUG(0,("upgrade_to_version_3:moving secdesc\n"));
|
||||
if (tdb_store(tdb_printers, kbuf, dbuf, TDB_REPLACE) != 0) {
|
||||
DEBUG(0,("upgrade_to_version_2: failed to move secdesc. Error (%s)\n", tdb_errorstr(tdb_printers)));
|
||||
DEBUG(0,("upgrade_to_version_3: failed to move secdesc. Error (%s)\n", tdb_errorstr(tdb_printers)));
|
||||
return False;
|
||||
}
|
||||
if (tdb_delete(tdb_drivers, kbuf) != 0) {
|
||||
DEBUG(0,("upgrade_to_version_2: failed to delete secdesc. Error (%s)\n", tdb_errorstr(tdb_drivers)));
|
||||
DEBUG(0,("upgrade_to_version_3: failed to delete secdesc. Error (%s)\n", tdb_errorstr(tdb_drivers)));
|
||||
return False;
|
||||
}
|
||||
}
|
||||
@ -227,8 +228,9 @@ static BOOL upgrade_to_version_2(void)
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
open the NT printing tdb
|
||||
Open the NT printing tdb.
|
||||
****************************************************************************/
|
||||
|
||||
BOOL nt_printing_init(void)
|
||||
{
|
||||
static pid_t local_pid;
|
||||
@ -267,8 +269,9 @@ BOOL nt_printing_init(void)
|
||||
|
||||
/* Cope with byte-reversed older versions of the db. */
|
||||
vers_id = tdb_fetch_int32(tdb_drivers, vstring);
|
||||
if ((vers_id != NTDRIVERS_DATABASE_VERSION) && (IREV(vers_id) == NTDRIVERS_DATABASE_VERSION)) {
|
||||
if ((vers_id == NTDRIVERS_DATABASE_VERSION_2) || (IREV(vers_id) == NTDRIVERS_DATABASE_VERSION_2)) {
|
||||
/* Written on a bigendian machine with old fetch_int code. Save as le. */
|
||||
/* The only upgrade between V2 and V3 is to save the version in little-endian. */
|
||||
tdb_store_int32(tdb_drivers, vstring, NTDRIVERS_DATABASE_VERSION);
|
||||
vers_id = NTDRIVERS_DATABASE_VERSION;
|
||||
}
|
||||
@ -276,7 +279,7 @@ BOOL nt_printing_init(void)
|
||||
if (vers_id != NTDRIVERS_DATABASE_VERSION) {
|
||||
|
||||
if ((vers_id == NTDRIVERS_DATABASE_VERSION_1) || (IREV(vers_id) == NTDRIVERS_DATABASE_VERSION_1)) {
|
||||
if (!upgrade_to_version_2())
|
||||
if (!upgrade_to_version_3())
|
||||
return False;
|
||||
} else
|
||||
tdb_traverse(tdb_drivers, tdb_traverse_delete_fn, NULL);
|
||||
|
@ -116,7 +116,8 @@ static void smb_conf_updated(int msg_type, pid_t src, void *buf, size_t len)
|
||||
********************************************************************/
|
||||
|
||||
static TDB_CONTEXT *share_tdb; /* used for share security descriptors */
|
||||
#define SHARE_DATABASE_VERSION 1
|
||||
#define SHARE_DATABASE_VERSION_V1 1
|
||||
#define SHARE_DATABASE_VERSION_V2 2 /* version id in little endian. */
|
||||
|
||||
BOOL share_info_db_init(void)
|
||||
{
|
||||
@ -140,15 +141,15 @@ BOOL share_info_db_init(void)
|
||||
|
||||
/* Cope with byte-reversed older versions of the db. */
|
||||
vers_id = tdb_fetch_int32(share_tdb, vstring);
|
||||
if ((vers_id != SHARE_DATABASE_VERSION) && (IREV(vers_id) == SHARE_DATABASE_VERSION)) {
|
||||
if ((vers_id == SHARE_DATABASE_VERSION_V1) || (IREV(vers_id) == SHARE_DATABASE_VERSION_V1)) {
|
||||
/* Written on a bigendian machine with old fetch_int code. Save as le. */
|
||||
tdb_store_int32(share_tdb, vstring, SHARE_DATABASE_VERSION);
|
||||
vers_id = SHARE_DATABASE_VERSION;
|
||||
tdb_store_int32(share_tdb, vstring, SHARE_DATABASE_VERSION_V2);
|
||||
vers_id = SHARE_DATABASE_VERSION_V2;
|
||||
}
|
||||
|
||||
if (vers_id != SHARE_DATABASE_VERSION) {
|
||||
if (vers_id != SHARE_DATABASE_VERSION_V2) {
|
||||
tdb_traverse(share_tdb, tdb_traverse_delete_fn, NULL);
|
||||
tdb_store_int32(share_tdb, vstring, SHARE_DATABASE_VERSION);
|
||||
tdb_store_int32(share_tdb, vstring, SHARE_DATABASE_VERSION_V2);
|
||||
}
|
||||
tdb_unlock_bystring(share_tdb, vstring);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user