2005-05-23 20:25:31 +04:00
/*
* Unix SMB / CIFS implementation .
* Virtual Windows Registry Layer
* Copyright ( C ) Gerald Carter 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
2007-07-09 23:25:36 +04:00
* the Free Software Foundation ; either version 3 of the License , or
2005-05-23 20:25:31 +04:00
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2007-07-10 09:23:25 +04:00
* along with this program ; if not , see < http : //www.gnu.org/licenses/>.
2005-05-23 20:25:31 +04:00
*/
/* Implementation of registry virtual views for printing information */
# include "includes.h"
# undef DBGC_CLASS
2007-09-29 03:05:52 +04:00
# define DBGC_CLASS DBGC_REGISTRY
2005-05-23 20:25:31 +04:00
/**********************************************************************
It is safe to assume that every registry path passed into on of
the exported functions here begins with KEY_PRINTING else
these functions would have never been called . This is a small utility
function to strip the beginning of the path and make a copy that the
caller can modify . Note that the caller is responsible for releasing
the memory allocated here .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-06-25 21:31:40 +04:00
static char * trim_reg_path ( const char * path )
2005-05-23 20:25:31 +04:00
{
2005-06-25 21:31:40 +04:00
const char * p ;
2005-05-23 20:25:31 +04:00
uint16 key_len = strlen ( KEY_SHARES ) ;
/*
* sanity check . . . this really should never be True .
* It is only here to prevent us from accessing outside
* the path buffer in the extreme case .
*/
if ( strlen ( path ) < key_len ) {
DEBUG ( 0 , ( " trim_reg_path: Registry path too short! [%s] \n " , path ) ) ;
return NULL ;
}
p = path + strlen ( KEY_SHARES ) ;
if ( * p = = ' \\ ' )
p + + ;
if ( * p )
return SMB_STRDUP ( p ) ;
else
return NULL ;
}
/**********************************************************************
Enumerate registry subkey names given a registry path .
Caller is responsible for freeing memory to * * subkeys
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2009-02-24 17:19:18 +03:00
static int shares_subkey_info ( const char * key , struct regsubkey_ctr * subkey_ctr )
2005-05-23 20:25:31 +04:00
{
char * path ;
2007-10-19 04:40:25 +04:00
bool top_level = False ;
2005-05-23 20:25:31 +04:00
int num_subkeys = 0 ;
DEBUG ( 10 , ( " printing_subkey_info: key=>[%s] \n " , key ) ) ;
path = trim_reg_path ( key ) ;
/* check to see if we are dealing with the top level key */
if ( ! path )
top_level = True ;
if ( top_level ) {
num_subkeys = 1 ;
regsubkey_ctr_addkey ( subkey_ctr , " Security " ) ;
}
#if 0
else
num_subkeys = handle_share_subpath ( path , subkey_ctr , NULL ) ;
# endif
SAFE_FREE ( path ) ;
return num_subkeys ;
}
/**********************************************************************
Enumerate registry values given a registry path .
Caller is responsible for freeing memory
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-06-25 21:31:40 +04:00
static int shares_value_info ( const char * key , REGVAL_CTR * val )
2005-05-23 20:25:31 +04:00
{
char * path ;
2007-10-19 04:40:25 +04:00
bool top_level = False ;
2005-05-23 20:25:31 +04:00
int num_values = 0 ;
DEBUG ( 10 , ( " printing_value_info: key=>[%s] \n " , key ) ) ;
path = trim_reg_path ( key ) ;
/* check to see if we are dealing with the top level key */
if ( ! path )
top_level = True ;
/* fill in values from the getprinterdata_printer_server() */
if ( top_level )
num_values = 0 ;
#if 0
else
num_values = handle_printing_subpath ( path , NULL , val ) ;
# endif
2006-06-24 13:41:27 +04:00
SAFE_FREE ( path ) ;
2005-05-23 20:25:31 +04:00
return num_values ;
}
/**********************************************************************
Stub function which always returns failure since we don ' t want
people storing printing information directly via regostry calls
( for now at least )
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2009-02-24 17:19:18 +03:00
static bool shares_store_subkey ( const char * key , struct regsubkey_ctr * subkeys )
2005-05-23 20:25:31 +04:00
{
return False ;
}
/**********************************************************************
Stub function which always returns failure since we don ' t want
people storing printing information directly via regostry calls
( for now at least )
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-19 04:40:25 +04:00
static bool shares_store_value ( const char * key , REGVAL_CTR * val )
2005-05-23 20:25:31 +04:00
{
return False ;
}
/*
* Table of function pointers for accessing printing data
*/
REGISTRY_OPS shares_reg_ops = {
2008-01-20 01:09:38 +03:00
. fetch_subkeys = shares_subkey_info ,
. fetch_values = shares_value_info ,
. store_subkeys = shares_store_subkey ,
. store_values = shares_store_value ,
2005-05-23 20:25:31 +04:00
} ;