r7692: start versioning the registry.tdb file since it can be modified now
authorGerald Carter <jerry@samba.org>
Fri, 17 Jun 2005 15:53:01 +0000 (15:53 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:57:19 +0000 (10:57 -0500)
source/printing/nt_printing.c
source/registry/reg_db.c

index 75473c39f2010102876a7f5dbad52d9ce78e0d0c..2146448ae3ccc0d176982d87f73d16649a74861c 100644 (file)
@@ -412,12 +412,11 @@ static BOOL upgrade_to_version_4(void)
 
 BOOL nt_printing_init(void)
 {
-       static pid_t local_pid;
        const char *vstring = "INFO/version";
        WERROR win_rc;
        uint32 vers_id;
 
-       if (tdb_drivers && tdb_printers && tdb_forms && local_pid == sys_getpid())
+       if ( tdb_drivers && tdb_printers && tdb_forms )
                return True;
  
        if (tdb_drivers)
@@ -447,8 +446,6 @@ BOOL nt_printing_init(void)
                return False;
        }
  
-       local_pid = sys_getpid();
        /* handle a Samba upgrade */
        tdb_lock_bystring(tdb_drivers, vstring, 0);
 
index a459aa5f5f233578e0849ce2abb6fc21a996490e..ce44e490ab663b55a22ff25bbb4cb7a737cf628d 100644 (file)
@@ -55,6 +55,8 @@ static const char *builtin_registry_paths[] = {
        "HKU",
        "HKCR",
         NULL };
+
+#define REGVER_V1      1       /* first db version with write support */
        
 /***********************************************************************
  Open the registry data in the tdb
@@ -125,15 +127,15 @@ static BOOL init_registry_data( void )
  
 BOOL init_registry_db( void )
 {
-       static pid_t local_pid;
+       const char *vstring = "INFO/version";
+       uint32 vers_id;
 
-       if (tdb_reg && local_pid == sys_getpid())
+       if ( tdb_reg )
                return True;
 
        /* placeholder tdb; reinit upon startup */
        
-       tdb_reg = tdb_open_log(lock_path("registry.tdb"), 0, TDB_DEFAULT|TDB_CLEAR_IF_FIRST, O_RDWR, 0600);
-       if ( !tdb_reg ) 
+       if ( !(tdb_reg = tdb_open_log(lock_path("registry.tdb"), 0, TDB_DEFAULT, O_RDWR, 0600)) )
        {
                tdb_reg = tdb_open_log(lock_path("registry.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
                if ( !tdb_reg ) {
@@ -145,15 +147,19 @@ BOOL init_registry_db( void )
                DEBUG(10,("init_registry: Successfully created registry tdb\n"));
        }
                
-       /* create the registry here */
 
-       if ( !init_registry_data() ) {
-               DEBUG(0,("init_registry: Failed to initiailize data in registry!\n"));
-               return False;
+       vers_id = tdb_fetch_int32(tdb_reg, vstring);
+
+       if ( vers_id != REGVER_V1 ) {
+
+               /* create the registry here */
+
+               if ( !init_registry_data() ) {
+                       DEBUG(0,("init_registry: Failed to initiailize data in registry!\n"));
+                       return False;
+               }
        }
 
-       local_pid = sys_getpid();
-               
        return True;
 }