• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt/router/samba-3.5.8/source3/registry/
1/*
2 *  Unix SMB/CIFS implementation.
3 *  Virtual Windows Registry Layer
4 *  Copyright (C) Gerald Carter                     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 virtual views for printing information */
21
22#include "includes.h"
23
24#undef DBGC_CLASS
25#define DBGC_CLASS DBGC_REGISTRY
26
27/**********************************************************************
28 It is safe to assume that every registry path passed into on of
29 the exported functions here begins with KEY_PRINTING else
30 these functions would have never been called.  This is a small utility
31 function to strip the beginning of the path and make a copy that the
32 caller can modify.  Note that the caller is responsible for releasing
33 the memory allocated here.
34 **********************************************************************/
35
36static char* trim_reg_path( const char *path )
37{
38	const char *p;
39	uint16 key_len = strlen(KEY_SHARES);
40
41	/*
42	 * sanity check...this really should never be True.
43	 * It is only here to prevent us from accessing outside
44	 * the path buffer in the extreme case.
45	 */
46
47	if ( strlen(path) < key_len ) {
48		DEBUG(0,("trim_reg_path: Registry path too short! [%s]\n", path));
49		return NULL;
50	}
51
52
53	p = path + strlen( KEY_SHARES );
54
55	if ( *p == '\\' )
56		p++;
57
58	if ( *p )
59		return SMB_STRDUP(p);
60	else
61		return NULL;
62}
63
64/**********************************************************************
65 Enumerate registry subkey names given a registry path.
66 Caller is responsible for freeing memory to **subkeys
67 *********************************************************************/
68
69static int shares_subkey_info( const char *key, struct regsubkey_ctr *subkey_ctr )
70{
71	char 		*path;
72	bool		top_level = False;
73	int		num_subkeys = 0;
74
75	DEBUG(10,("printing_subkey_info: key=>[%s]\n", key));
76
77	path = trim_reg_path( key );
78
79	/* check to see if we are dealing with the top level key */
80
81	if ( !path )
82		top_level = True;
83
84	if ( top_level ) {
85		num_subkeys = 1;
86		regsubkey_ctr_addkey( subkey_ctr, "Security" );
87	}
88#if 0
89	else
90		num_subkeys = handle_share_subpath( path, subkey_ctr, NULL );
91#endif
92
93	SAFE_FREE( path );
94
95	return num_subkeys;
96}
97
98/**********************************************************************
99 Enumerate registry values given a registry path.
100 Caller is responsible for freeing memory
101 *********************************************************************/
102
103static int shares_value_info(const char *key, struct regval_ctr *val)
104{
105	char 		*path;
106	bool		top_level = False;
107	int		num_values = 0;
108
109	DEBUG(10,("printing_value_info: key=>[%s]\n", key));
110
111	path = trim_reg_path( key );
112
113	/* check to see if we are dealing with the top level key */
114
115	if ( !path )
116		top_level = True;
117
118	/* fill in values from the getprinterdata_printer_server() */
119	if ( top_level )
120		num_values = 0;
121#if 0
122	else
123		num_values = handle_printing_subpath( path, NULL, val );
124#endif
125
126	SAFE_FREE(path);
127
128	return num_values;
129}
130
131/**********************************************************************
132 Stub function which always returns failure since we don't want
133 people storing printing information directly via regostry calls
134 (for now at least)
135 *********************************************************************/
136
137static bool shares_store_subkey( const char *key, struct regsubkey_ctr *subkeys )
138{
139	return False;
140}
141
142/**********************************************************************
143 Stub function which always returns failure since we don't want
144 people storing printing information directly via regostry calls
145 (for now at least)
146 *********************************************************************/
147
148static bool shares_store_value(const char *key, struct regval_ctr *val)
149{
150	return False;
151}
152
153/*
154 * Table of function pointers for accessing printing data
155 */
156
157struct registry_ops shares_reg_ops = {
158	.fetch_subkeys = shares_subkey_info,
159	.fetch_values = shares_value_info,
160	.store_subkeys = shares_store_subkey,
161	.store_values = shares_store_value,
162};
163
164
165