text: /* 
     Unix SMB/CIFS implementation.
     Copyright (C) Jelmer Vernooij			2004.
  
     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
     the Free Software Foundation; either version 2 of the License, or
     (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
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
  
  #include "includes.h"
  #include "registry.h"
  
  /**
   * @file
   * @brief Samba-specific registry functions
   */
  
  static WERROR reg_samba_get_predef (struct registry_context *ctx, uint32_t hkey, struct registry_key **k)
  {
  	WERROR error;
  	const char *conf;
  	char *backend;
  	const char *location;
  	const char *hivename = reg_get_predef_name(hkey);
  
  	*k = NULL;
  
  	conf = lp_parm_string(-1, "registry", hivename);
  	
  	if (!conf) {
  		return WERR_NOT_SUPPORTED;
  	}
  
  	location = strchr(conf, ':');
  	if (location) {
  		backend = talloc_strndup(ctx, conf, (int)(location - conf));
  		location++;
  	} else {
  		backend = talloc_strdup(ctx, "ldb");
  		location = conf;
  	}
  
  	/* FIXME: Different hive backend for HKEY_CLASSES_ROOT: merged view of HKEY_LOCAL_MACHINE\Software\Classes
  	 * and HKEY_CURRENT_USER\Software\Classes */
  
  	/* FIXME: HKEY_CURRENT_CONFIG is an alias for HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardware Profiles\Current */
  
  	/* FIXME: HKEY_PERFORMANCE_DATA is dynamically generated */
  
  	/* FIXME: HKEY_LOCAL_MACHINE\Hardware is autogenerated */
  
  	/* FIXME: HKEY_LOCAL_MACHINE\Security\SAM is an alias for HKEY_LOCAL_MACHINE\SAM */
  
  	error = reg_open_hive(ctx, backend, location, ctx->session_info, ctx->credentials, k);
  
  	talloc_free(backend);
  
  	return error;
  }
  
  _PUBLIC_ WERROR reg_open_local (TALLOC_CTX *mem_ctx, 
  				struct registry_context **ctx, 
  				struct auth_session_info *session_info, 
  				struct cli_credentials *credentials)
  {
  	*ctx = talloc(mem_ctx, struct registry_context);
  	(*ctx)->credentials = talloc_reference(*ctx, credentials);
  	(*ctx)->session_info = talloc_reference(*ctx, session_info);
  	(*ctx)->get_predefined_key = reg_samba_get_predef;
  	
  	return WERR_OK;
  }
  