svn commit: samba r6897 - in trunk/source: include registry rpc_server

jerry at samba.org jerry at samba.org
Thu May 19 02:50:13 GMT 2005


Author: jerry
Date: 2005-05-19 02:50:12 +0000 (Thu, 19 May 2005)
New Revision: 6897

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

Log:
* move HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers to
  HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print

* make registry.tdb CLEAR_IF_FIRST tdb so i can update the
  reg_db paths.

Modified:
   trunk/source/include/rpc_reg.h
   trunk/source/registry/reg_db.c
   trunk/source/registry/reg_frontend.c
   trunk/source/registry/reg_printing.c
   trunk/source/rpc_server/srv_spoolss_nt.c


Changeset:
Modified: trunk/source/include/rpc_reg.h
===================================================================
--- trunk/source/include/rpc_reg.h	2005-05-18 23:39:02 UTC (rev 6896)
+++ trunk/source/include/rpc_reg.h	2005-05-19 02:50:12 UTC (rev 6897)
@@ -64,7 +64,9 @@
 #define KEY_HKU		"HKU"
 #define KEY_HKCR	"HKCR"
 #define KEY_PRINTING 	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Print"
+#define KEY_PRINTING_2K	"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print"
 #define KEY_EVENTLOG 	"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Eventlog"
+#define KEY_SHARES	"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Lanman\\Shares"
 #define KEY_TREE_ROOT	""
 
 /* Registry data types */

Modified: trunk/source/registry/reg_db.c
===================================================================
--- trunk/source/registry/reg_db.c	2005-05-18 23:39:02 UTC (rev 6896)
+++ trunk/source/registry/reg_db.c	2005-05-19 02:50:12 UTC (rev 6897)
@@ -83,13 +83,13 @@
 	regsubkey_ctr_init( &subkeys );
 	pstrcpy( keyname, KEY_HKLM );
 	pstrcat( keyname, "/SOFTWARE/Microsoft/Windows NT/CurrentVersion" );
-	regsubkey_ctr_addkey( &subkeys, "SystemRoot" );
+	regsubkey_ctr_addkey( &subkeys, "Print" );
 	if ( !regdb_store_reg_keys( keyname, &subkeys ))
 		return False;
 	regsubkey_ctr_destroy( &subkeys );
 
 	pstrcpy( keyname, KEY_HKLM );
-	pstrcat( keyname, "/SOFTWARE/Microsoft/Windows NT/CurrentVersion/SystemRoot" );
+	pstrcat( keyname, "/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Print" );
 	if ( !regdb_store_reg_keys( keyname, &subkeys ))
 		return False;
 
@@ -153,8 +153,8 @@
 	if ( !regdb_store_reg_keys( keyname, &subkeys ))
 		return False;
 
-	regsubkey_ctr_init( &subkeys ); /*added */
-	pstrcpy( keyname, KEY_HKLM );  /*added */
+	regsubkey_ctr_init( &subkeys );
+	pstrcpy( keyname, KEY_HKLM ); 
 	pstrcat( keyname, "/SYSTEM/CurrentControlSet/Services/Tcpip" ); 
 	regsubkey_ctr_addkey( &subkeys, "Parameters" );  
 	if ( !regdb_store_reg_keys( keyname, &subkeys )) 
@@ -197,12 +197,9 @@
 	if (tdb_reg && local_pid == sys_getpid())
 		return True;
 
-	/* 
-	 * try to open first without creating so we can determine
-	 * if we need to init the data in the registry
-	 */
+	/* placeholder tdb; reinit upon startup */
 	
-	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|TDB_CLEAR_IF_FIRST, O_RDWR, 0600);
 	if ( !tdb_reg ) 
 	{
 		tdb_reg = tdb_open_log(lock_path("registry.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
@@ -213,12 +210,13 @@
 		}
 		
 		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;
-		}
+	/* 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();

Modified: trunk/source/registry/reg_frontend.c
===================================================================
--- trunk/source/registry/reg_frontend.c	2005-05-18 23:39:02 UTC (rev 6896)
+++ trunk/source/registry/reg_frontend.c	2005-05-19 02:50:12 UTC (rev 6897)
@@ -1,7 +1,7 @@
 /* 
  *  Unix SMB/CIFS implementation.
  *  RPC Pipe client / server routines
- *  Copyright (C) Gerald Carter                     2002.
+ *  Copyright (C) Gerald Carter                     2002-2005
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -32,8 +32,9 @@
 /* array of REGISTRY_HOOK's which are read into a tree for easy access */
 
 REGISTRY_HOOK reg_hooks[] = {
-  { KEY_PRINTING,   &printing_ops },
-  { KEY_EVENTLOG,   &eventlog_ops }, 
+  { KEY_PRINTING,    &printing_ops },
+  { KEY_PRINTING_2K, &printing_ops },
+  { KEY_EVENTLOG,    &eventlog_ops }, 
   { NULL, NULL }
 };
 

Modified: trunk/source/registry/reg_printing.c
===================================================================
--- trunk/source/registry/reg_printing.c	2005-05-18 23:39:02 UTC (rev 6896)
+++ trunk/source/registry/reg_printing.c	2005-05-19 02:50:12 UTC (rev 6897)
@@ -1,7 +1,7 @@
 /* 
  *  Unix SMB/CIFS implementation.
  *  RPC Pipe client / server routines
- *  Copyright (C) Gerald Carter                     2002.
+ *  Copyright (C) Gerald Carter                     2002-2005
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -38,8 +38,8 @@
 	"Forms",
 	"Printers" 
 };
+	
 
-
 /**********************************************************************
  It is safe to assume that every registry path passed into on of 
  the exported functions here begins with KEY_PRINTING else
@@ -52,7 +52,13 @@
 static char* trim_reg_path( char *path )
 {
 	char *p;
-	uint16 key_len = strlen(KEY_PRINTING);
+	uint16 key_len = strlen(path);
+	uint16 base_key_len;
+
+	static int key_printing_len = strlen( KEY_PRINTING );
+	static int key_printing2k_len = strlen( KEY_PRINTING_2K );
+
+
 	
 	/* 
 	 * sanity check...this really should never be True.
@@ -60,15 +66,25 @@
 	 * the path buffer in the extreme case.
 	 */
 	
-	if ( strlen(path) < key_len ) {
+	if ( (key_len < key_printing_len) && (key_len < key_printing2k_len) ) {
 		DEBUG(0,("trim_reg_path: Registry path too short! [%s]\n", path));
-		DEBUG(0,("trim_reg_path: KEY_PRINTING => [%s]!\n", KEY_PRINTING));
 		return NULL;
 	}
+
+	base_key_len = 0;
+	if ( StrnCaseCmp( KEY_PRINTING, path, key_printing_len ) == 0 ) {
+		base_key_len = key_printing_len;
+	}
+	else if ( StrnCaseCmp( KEY_PRINTING_2K, path, key_printing2k_len ) == 0 ) {
+		base_key_len = key_printing2k_len;
+	}
+	else {
+		DEBUG(0,("trim_reg_path: invalid path [%s]\n", path ));
+		return NULL;
+	}
 	
+	p = path + base_key_len;
 	
-	p = path + strlen( KEY_PRINTING );
-	
 	if ( *p == '\\' )
 		p++;
 	
@@ -751,8 +767,15 @@
 		top_level = True;
 		
 	if ( top_level ) {
-		for ( num_subkeys=0; num_subkeys<MAX_TOP_LEVEL_KEYS; num_subkeys++ )
-			regsubkey_ctr_addkey( subkey_ctr, top_level_keys[num_subkeys] );
+		/* check between the two top level keys here */
+		
+		if ( strequal( KEY_PRINTING, key ) ) {
+			regsubkey_ctr_addkey( subkey_ctr, "Environments" );
+			regsubkey_ctr_addkey( subkey_ctr, "Forms" );
+		}
+		else if ( strequal( KEY_PRINTING_2K, key ) ) {
+			regsubkey_ctr_addkey( subkey_ctr, "Printers" );
+		}
 	}
 	else
 		num_subkeys = handle_printing_subpath( path, subkey_ctr, NULL );

Modified: trunk/source/rpc_server/srv_spoolss_nt.c
===================================================================
--- trunk/source/rpc_server/srv_spoolss_nt.c	2005-05-18 23:39:02 UTC (rev 6896)
+++ trunk/source/rpc_server/srv_spoolss_nt.c	2005-05-19 02:50:12 UTC (rev 6897)
@@ -2351,10 +2351,9 @@
 		*type = REG_BINARY;
 		*needed = 0x114;
 
-		if((*data = (uint8 *)TALLOC(ctx, *needed)) == NULL)
+		if ( !(*data = TALLOC_ZERO_ARRAY(ctx, uint8, *needed)) )
 			return WERR_NOMEM;
-		ZERO_STRUCTP( *data );
-		
+
 		SIVAL(*data, 0, *needed);	/* size */
 		SIVAL(*data, 4, 5);		/* Windows 2000 == 5.0 */
 		SIVAL(*data, 8, 0);



More information about the samba-cvs mailing list