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