Blob Blame History Raw
diff -ubBrN --exclude-from=diff.excludes samba-3.0.20-orig/source/confdefs.h samba-3.0.20-new/source/confdefs.h
diff -ubBrN --exclude-from=diff.excludes samba-3.0.20-orig/source/include/rpc_reg.h samba-3.0.20-new/source/include/rpc_reg.h
--- samba-3.0.20-orig/source/include/rpc_reg.h	2005-07-28 08:19:50.000000000 -0500
+++ samba-3.0.20-new/source/include/rpc_reg.h	2005-09-01 09:03:30.000000000 -0500
@@ -217,14 +217,17 @@
 	POLICY_HND handle;
 	UNISTR4 name;
 	UNISTR4 key_class;
-	uint32 reserved;
+	uint32 options;
 	uint32 access;
+	
+	/* FIXME!  collapse all this into one structure */
 	uint32 *sec_info;
 	uint32 ptr2;
 	BUFHDR hdr_sec;
 	uint32 ptr3;
 	SEC_DESC_BUF *data;
-	uint32 unknown_2; /* 0x0000 0000 */
+
+	uint32 *disposition; 
 } REG_Q_CREATE_KEY_EX;
 
 typedef struct {
diff -ubBrN --exclude-from=diff.excludes samba-3.0.20-orig/source/registry/reg_db.c samba-3.0.20-new/source/registry/reg_db.c
--- samba-3.0.20-orig/source/registry/reg_db.c	2005-08-07 18:09:57.000000000 -0500
+++ samba-3.0.20-new/source/registry/reg_db.c	2005-09-01 09:05:05.000000000 -0500
@@ -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\\Terminal Server\\DefaultUserConfiguration",
 	"HKLM\\SYSTEM\\CurrentControlSet\\Services\\TcpIp\\Parameters",
 	"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Netlogon\\Parameters",
 	"HKU",
@@ -149,6 +150,11 @@
 		regval_ctr_init( &values );
 		
 		regdb_fetch_values( builtin_registry_values[i].path, &values );
+
+		/* 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, 
@@ -172,6 +178,7 @@
 					builtin_registry_values[i].type));
 		}
 		regdb_store_values( builtin_registry_values[i].path, &values );
+		}
 		
 		regval_ctr_destroy( &values );
 	}
@@ -191,8 +198,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);
@@ -209,14 +214,15 @@
 	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;
 		}
-	}
 
 	return True;
 }
diff -ubBrN --exclude-from=diff.excludes samba-3.0.20-orig/source/rpc_parse/parse_reg.c samba-3.0.20-new/source/rpc_parse/parse_reg.c
--- samba-3.0.20-orig/source/rpc_parse/parse_reg.c	2005-07-28 08:19:48.000000000 -0500
+++ samba-3.0.20-new/source/rpc_parse/parse_reg.c	2005-09-01 09:03:30.000000000 -0500
@@ -227,7 +227,7 @@
 	q_c->ptr2 = 1;
 	init_buf_hdr(&q_c->hdr_sec, sec_buf->len, sec_buf->len);
 	q_c->ptr3 = 1;
-	q_c->unknown_2 = 0x00000000;
+	q_c->disposition = TALLOC_P( get_talloc_ctx(), uint32 );
 }
 
 /*******************************************************************
@@ -259,7 +259,7 @@
 	if(!prs_align(ps))
 		return False;
 
-	if(!prs_uint32("reserved", ps, depth, &q_u->reserved))
+	if(!prs_uint32("options", ps, depth, &q_u->options))
 		return False;
 	if(!prs_uint32("access", ps, depth, &q_u->access))
 		return False;
@@ -267,16 +267,15 @@
 	if(!prs_pointer("sec_info", ps, depth, (void**)&q_u->sec_info, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
 		return False;
 
+	if ( q_u->sec_info ) {
 	if(!prs_uint32("ptr2", ps, depth, &q_u->ptr2))
 		return False;
-	if(!reg_io_hdrbuf_sec(q_u->ptr2, &q_u->ptr3, &q_u->hdr_sec, q_u->data,
-	                      ps, depth))
+		if(!reg_io_hdrbuf_sec(q_u->ptr2, &q_u->ptr3, &q_u->hdr_sec, q_u->data, ps, depth))
 		return False;
+	}
 
-#if 0
-	if(!prs_uint32("unknown_2", ps, depth, &q_u->unknown_2))
+	if(!prs_pointer("disposition", ps, depth, (void**)&q_u->disposition, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
 		return False;
-#endif
 
 	return True;
 }