/*
* Unix SMB/CIFS implementation.
- * RPC Pipe client / server routines
+ * Virtual Windows Registry Layer
* Copyright (C) Gerald Carter 2002.
*
* This program is free software; you can redistribute it and/or modify
/* Implementation of registry hook cache tree */
#include "includes.h"
+#include "adt_tree.h"
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_RPC_SRV
static SORTED_TREE *cache_tree;
+extern REGISTRY_OPS regdb_ops; /* these are the default */
+static REGISTRY_HOOK default_hook = { KEY_TREE_ROOT, ®db_ops };
/**********************************************************************
Initialize the cache tree
BOOL reghook_cache_init( void )
{
- cache_tree = sorted_tree_init( NULL, NULL );
+ cache_tree = pathtree_init( &default_hook, NULL, NULL );
return ( cache_tree == NULL );
}
DEBUG(10,("reghook_cache_add: Adding key [%s]\n", key));
- return sorted_tree_add( cache_tree, key, hook );
+ return pathtree_add( cache_tree, key, hook );
}
/**********************************************************************
REGISTRY_HOOK* reghook_cache_find( char *keyname )
{
char *key;
+ int len;
+ REGISTRY_HOOK *hook;
if ( !keyname )
return NULL;
-
- if ( (key = strdup( keyname )) == NULL ) {
- DEBUG(0,("reghook_cache_find: strdup() failed for string [%s] !?!?!\n",
+
+ /* prepend the string with a '\' character */
+
+ len = strlen( keyname );
+ if ( !(key = SMB_MALLOC( len + 2 )) ) {
+ DEBUG(0,("reghook_cache_find: malloc failed for string [%s] !?!?!\n",
keyname));
return NULL;
}
+
+ *key = '\\';
+ strncpy( key+1, keyname, len+1);
+ /* swap to a form understood by the SORTED_TREE */
+
string_sub( key, "\\", "/", 0 );
DEBUG(10,("reghook_cache_find: Searching for keyname [%s]\n", key));
- return sorted_tree_find( cache_tree, key ) ;
+ hook = pathtree_find( cache_tree, key ) ;
+
+ SAFE_FREE( key );
+
+ return hook;
}
/**********************************************************************
{
DEBUG(debuglevel,("reghook_dump_cache: Starting cache dump now...\n"));
- sorted_tree_print_keys( cache_tree, debuglevel );
+ pathtree_print_keys( cache_tree, debuglevel );
}