]> git.samba.org - sfrench/samba-autobuild/.git/blob - source/registry/reg_dynamic.c
Add a registry backend perflib that replaces the former dynamic overlay.
[sfrench/samba-autobuild/.git] / source / registry / reg_dynamic.c
1 /* 
2  *  Unix SMB/CIFS implementation.
3  *  Virtual Windows Registry Layer
4  *  Copyright (C) Gerald Carter                     2002-2005
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 3 of the License, or
9  *  (at your option) any later version.
10  *  
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *  
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19
20 /* Implementation of registry frontend view functions. */
21
22 #include "includes.h"
23
24 #undef DBGC_CLASS
25 #define DBGC_CLASS DBGC_REGISTRY
26
27 struct reg_dyn_values {
28         const char *path;
29         int (*fetch_values) ( REGVAL_CTR *val );
30 };
31
32 /***********************************************************************
33  Structure holding the registry paths and pointers to the value 
34  enumeration functions
35 ***********************************************************************/
36
37 static struct reg_dyn_values dynamic_values[] = {
38         { NULL, NULL }
39 };
40
41 /***********************************************************************
42 ***********************************************************************/
43
44 int fetch_dynamic_reg_values( REGISTRY_KEY *key, REGVAL_CTR *val )
45 {
46         int i;
47         char *path = NULL;
48         TALLOC_CTX *ctx = talloc_tos();
49
50         path = talloc_strdup(ctx, key->name);
51         if (!path) {
52                 return -1;
53         }
54         path = normalize_reg_path(ctx, path);
55         if (!path) {
56                 return -1;
57         }
58
59         for ( i=0; dynamic_values[i].path; i++ ) {
60                 if ( strcmp( path, dynamic_values[i].path ) == 0 )
61                         return dynamic_values[i].fetch_values( val );
62         }
63
64         return -1;
65 }
66
67 /***********************************************************************
68 ***********************************************************************/
69
70 bool check_dynamic_reg_values( REGISTRY_KEY *key )
71 {
72         int i;
73         char *path = NULL;
74         TALLOC_CTX *ctx = talloc_tos();
75
76         path = talloc_strdup(ctx, key->name);
77         if (!path) {
78                 return false;
79         }
80         path = normalize_reg_path(ctx, path);
81         if (!path) {
82                 return false;
83         }
84
85         for ( i=0; dynamic_values[i].path; i++ ) {
86                 /* can't write to dynamic keys */
87                 if ( strcmp( path, dynamic_values[i].path ) == 0 )
88                         return true;
89         }
90
91         return false;
92 }