s3-schannel: upgrade old format schannel_store.tdb.
authorGünther Deschner <gd@samba.org>
Wed, 26 Aug 2009 09:46:58 +0000 (11:46 +0200)
committerGünther Deschner <gd@samba.org>
Thu, 27 Aug 2009 13:55:20 +0000 (15:55 +0200)
Guenther

source3/passdb/secrets.c

index 0a3871e6201b8728cc9e52d7cdde96e5e04e7d8d..cecf13a7dbf7b9f3c0a5b498ef580530918c1e82 100644 (file)
@@ -1134,6 +1134,10 @@ void secrets_fetch_ipc_userpass(char **username, char **domain, char **password)
  Open or create the schannel session store tdb.
 *******************************************************************************/
 
+#define SCHANNEL_STORE_VERSION_1 1
+#define SCHANNEL_STORE_VERSION_2 2
+#define SCHANNEL_STORE_VERSION_CURRENT SCHANNEL_STORE_VERSION_2
+
 TDB_CONTEXT *open_schannel_session_store(TALLOC_CTX *mem_ctx)
 {
        TDB_DATA vers;
@@ -1153,21 +1157,22 @@ TDB_CONTEXT *open_schannel_session_store(TALLOC_CTX *mem_ctx)
                 return NULL;
         }
 
+ again:
        vers = tdb_fetch_bystring(tdb_sc, "SCHANNEL_STORE_VERSION");
        if (vers.dptr == NULL) {
                /* First opener, no version. */
-               SIVAL(&ver,0,1);
+               SIVAL(&ver,0,SCHANNEL_STORE_VERSION_CURRENT);
                vers.dptr = (uint8 *)&ver;
                vers.dsize = 4;
                tdb_store_bystring(tdb_sc, "SCHANNEL_STORE_VERSION", vers, TDB_REPLACE);
                vers.dptr = NULL;
        } else if (vers.dsize == 4) {
                ver = IVAL(vers.dptr,0);
-               if (ver != 1) {
-                       tdb_close(tdb_sc);
-                       tdb_sc = NULL;
+               if (ver != SCHANNEL_STORE_VERSION_CURRENT) {
                        DEBUG(0,("open_schannel_session_store: wrong version number %d in %s\n",
                                (int)ver, fname ));
+                       tdb_wipe_all(tdb_sc);
+                       goto again;
                }
        } else {
                tdb_close(tdb_sc);