svn commit: samba r9894 - branches/SAMBA_3_0/source/registry trunk/source/registry

jerry at samba.org jerry at samba.org
Thu Sep 1 14:00:54 GMT 2005


Author: jerry
Date: 2005-09-01 14:00:53 +0000 (Thu, 01 Sep 2005)
New Revision: 9894

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9894

Log:
Add new registry key expected by Windows XP clients.

  HKLM\\SYSTEM\\CurrentControlSet\\Control\\Termininal Server\\DefaultUserConfiguration

Apparently this started showing up after the winreg-write support
was added in 3.0.20rc1 or so.  

Also modifed init_registry_data() to always run and add the 
required keys.  Initial values however are only written if
they don't already exist.  

This makes it easier to add new keys without having to rev the 
tdb version number (which is really unnecessary in this case).

Portions of patch reviewed by Thomas Bork on the general samba ml.



Modified:
   branches/SAMBA_3_0/source/registry/reg_db.c
   trunk/source/registry/reg_db.c


Changeset:
Modified: branches/SAMBA_3_0/source/registry/reg_db.c
===================================================================
--- branches/SAMBA_3_0/source/registry/reg_db.c	2005-09-01 13:57:10 UTC (rev 9893)
+++ branches/SAMBA_3_0/source/registry/reg_db.c	2005-09-01 14:00:53 UTC (rev 9894)
@@ -49,6 +49,7 @@
 	"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\009",
 	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Print\\Monitors",
 	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\ProductOptions",
+	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Termininal Server\\DefaultUserConfiguration",
 	"HKLM\\SYSTEM\\CurrentControlSet\\Services\\TcpIp\\Parameters",
 	"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Netlogon\\Parameters",
 	"HKU",
@@ -163,7 +164,12 @@
 		}
 
 		regdb_fetch_values( builtin_registry_values[i].path, values );
-		switch( builtin_registry_values[i].type ) {
+
+		/* preserve existing values across restarts.  Only add new ones */
+
+		if ( !regval_ctr_key_exists( values, builtin_registry_values[i].valuename ) ) 
+		{
+			switch( builtin_registry_values[i].type ) {
 			case REG_DWORD:
 				regval_ctr_addvalue( values, 
 				                     builtin_registry_values[i].valuename,
@@ -184,8 +190,9 @@
 			default:
 				DEBUG(0,("init_registry_data: invalid value type in builtin_registry_values [%d]\n",
 					builtin_registry_values[i].type));
+			}
+			regdb_store_values( builtin_registry_values[i].path, values );
 		}
-		regdb_store_values( builtin_registry_values[i].path, values );
 		
 		TALLOC_FREE( values );
 	}
@@ -205,8 +212,6 @@
 	if ( tdb_reg )
 		return True;
 
-	/* placeholder tdb; reinit upon startup */
-	
 	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);
@@ -223,13 +228,14 @@
 	vers_id = tdb_fetch_int32(tdb_reg, vstring);
 
 	if ( vers_id != REGVER_V1 ) {
+		/* any upgrade code here if needed */
+	}
 
-		/* create the registry here */
+	/* always setup the necessary keys and values */
 
-		if ( !init_registry_data() ) {
-			DEBUG(0,("init_registry: Failed to initiailize data in registry!\n"));
-			return False;
-		}
+	if ( !init_registry_data() ) {
+		DEBUG(0,("init_registry: Failed to initiailize data in registry!\n"));
+		return False;
 	}
 
 	return True;

Modified: trunk/source/registry/reg_db.c
===================================================================
--- trunk/source/registry/reg_db.c	2005-09-01 13:57:10 UTC (rev 9893)
+++ trunk/source/registry/reg_db.c	2005-09-01 14:00:53 UTC (rev 9894)
@@ -49,6 +49,7 @@
 	"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\009",
 	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Print\\Monitors",
 	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\ProductOptions",
+	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Termininal Server\\DefaultUserConfiguration",
 	"HKLM\\SYSTEM\\CurrentControlSet\\Services\\TcpIp\\Parameters",
 	"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Netlogon\\Parameters",
 	"HKU",
@@ -163,7 +164,12 @@
 		}
 
 		regdb_fetch_values( builtin_registry_values[i].path, values );
-		switch( builtin_registry_values[i].type ) {
+
+		/* preserve existing values across restarts.  Only add new ones */
+
+		if ( !regval_ctr_key_exists( values, builtin_registry_values[i].valuename ) ) 
+		{
+			switch( builtin_registry_values[i].type ) {
 			case REG_DWORD:
 				regval_ctr_addvalue( values, 
 				                     builtin_registry_values[i].valuename,
@@ -184,8 +190,9 @@
 			default:
 				DEBUG(0,("init_registry_data: invalid value type in builtin_registry_values [%d]\n",
 					builtin_registry_values[i].type));
+			}
+			regdb_store_values( builtin_registry_values[i].path, values );
 		}
-		regdb_store_values( builtin_registry_values[i].path, values );
 		
 		TALLOC_FREE( values );
 	}
@@ -205,8 +212,6 @@
 	if ( tdb_reg )
 		return True;
 
-	/* placeholder tdb; reinit upon startup */
-	
 	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);
@@ -223,13 +228,14 @@
 	vers_id = tdb_fetch_int32(tdb_reg, vstring);
 
 	if ( vers_id != REGVER_V1 ) {
+		/* any upgrade code here if needed */
+	}
 
-		/* create the registry here */
+	/* always setup the necessary keys and values */
 
-		if ( !init_registry_data() ) {
-			DEBUG(0,("init_registry: Failed to initiailize data in registry!\n"));
-			return False;
-		}
+	if ( !init_registry_data() ) {
+		DEBUG(0,("init_registry: Failed to initiailize data in registry!\n"));
+		return False;
 	}
 
 	return True;



More information about the samba-cvs mailing list