[SCM] Samba Shared Repository - branch v3-2-test updated - release-3-2-0pre2-381-g96434d9

Michael Adam obnox at samba.org
Fri Mar 21 17:29:03 GMT 2008


The branch, v3-2-test has been updated
       via  96434d9dc7a66773e313cc128af57493dee245a1 (commit)
       via  4f816df27670c3b6aabea9f26ef2d26f3e882e78 (commit)
       via  83b9453c88bfdf615cc2b547645b0a71a870f473 (commit)
       via  e8ed8ad077f69ae7237f49b150625d20eb509586 (commit)
       via  8974b283683799bc51223d27b7e6aecac741fbc2 (commit)
       via  431b10bfe0dba0a49e50bebfb3f8ad1a00955837 (commit)
      from  19eb8c9316b10b1277121e90d0d3ef50ee562118 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 96434d9dc7a66773e313cc128af57493dee245a1
Author: Michael Adam <obnox at samba.org>
Date:   Fri Mar 21 17:55:31 2008 +0100

    libsmbconf: add a "path" variable to the conf context.
    
    This is passed to the module init routines.
    In case of the registry, this is the path of the
    basekey in registry, that is to be used, defaulting
    to KEY_SMBCONF (HKLM\software\samba\smbconf), when
    NULL is given. This is the only case currently used.
    
    In order to support other keys, registry initialization
    for smbconf has to be changed to support different keys.
    
    Michael

commit 4f816df27670c3b6aabea9f26ef2d26f3e882e78
Author: Michael Adam <obnox at samba.org>
Date:   Fri Mar 21 16:45:25 2008 +0100

    libsmbconf: add structuring comments to the prototypes in the public header.
    
    Michael

commit 83b9453c88bfdf615cc2b547645b0a71a870f473
Author: Michael Adam <obnox at samba.org>
Date:   Fri Mar 21 16:42:42 2008 +0100

    libsmbconf: adapt a comment to new circumstances
    
    Michael

commit e8ed8ad077f69ae7237f49b150625d20eb509586
Author: Michael Adam <obnox at samba.org>
Date:   Fri Mar 21 16:40:20 2008 +0100

    libsmbconf: group together functions in smbconf.c more appropriately
    
    Michael

commit 8974b283683799bc51223d27b7e6aecac741fbc2
Author: Michael Adam <obnox at samba.org>
Date:   Fri Mar 21 16:35:52 2008 +0100

    libsmbconf: add a comment.
    
    Michael

commit 431b10bfe0dba0a49e50bebfb3f8ad1a00955837
Author: Michael Adam <obnox at samba.org>
Date:   Fri Mar 21 16:26:50 2008 +0100

    libsmbconf: move registry implementation to a module of its own.
    
    Michael

-----------------------------------------------------------------------

Summary of changes:
 source/Makefile.in                              |    2 +-
 source/lib/netapi/serverinfo.c                  |    2 +-
 source/lib/smbconf/smbconf.c                    |  766 +----------------------
 source/lib/smbconf/smbconf.h                    |   15 +-
 source/lib/smbconf/smbconf_private.h            |   10 +-
 source/lib/smbconf/{smbconf.c => smbconf_reg.c} |  425 +------------
 source/libnet/libnet_join.c                     |    4 +-
 source/param/loadparm.c                         |    4 +-
 source/utils/net_conf.c                         |    2 +-
 9 files changed, 80 insertions(+), 1150 deletions(-)
 copy source/lib/smbconf/{smbconf.c => smbconf_reg.c} (64%)


Changeset truncated at 500 lines:

diff --git a/source/Makefile.in b/source/Makefile.in
index 0abe3fd..40e792d 100644
--- a/source/Makefile.in
+++ b/source/Makefile.in
@@ -824,7 +824,7 @@ LIBNETAPI_OBJ  = $(LIBNETAPI_OBJ1) $(LIBNET_OBJ) \
 		 $(SECRETS_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
 		 $(DCUTIL_OBJ) $(LIBADS_OBJ) $(PRIVILEGES_BASIC_OBJ)
 
-LIBSMBCONF_OBJ = lib/smbconf/smbconf.o
+LIBSMBCONF_OBJ = lib/smbconf/smbconf.o lib/smbconf/smbconf_reg.o
 
 LIBNET_OBJ = libnet/libnet_join.o \
 	     librpc/gen_ndr/ndr_libnet_join.o
diff --git a/source/lib/netapi/serverinfo.c b/source/lib/netapi/serverinfo.c
index 913338f..a9749a1 100644
--- a/source/lib/netapi/serverinfo.c
+++ b/source/lib/netapi/serverinfo.c
@@ -191,7 +191,7 @@ static WERROR NetServerSetInfoLocal_1005(struct libnetapi_ctx *ctx,
 		return WERR_NOT_SUPPORTED;
 	}
 
-	werr = smbconf_init_reg(ctx, &conf_ctx);
+	werr = smbconf_init_reg(ctx, &conf_ctx, NULL);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}
diff --git a/source/lib/smbconf/smbconf.c b/source/lib/smbconf/smbconf.c
index ceed349..756b9ec 100644
--- a/source/lib/smbconf/smbconf.c
+++ b/source/lib/smbconf/smbconf.c
@@ -23,376 +23,10 @@
 
 /**********************************************************************
  *
- * Helper functions (mostly registry related)
+ * internal helper functions
  *
  **********************************************************************/
 
-/**
- * add a string to a talloced array of strings.
- */
-static WERROR smbconf_add_string_to_array(TALLOC_CTX *mem_ctx,
-					  char ***array,
-					  uint32_t count,
-					  const char *string)
-{
-	char **new_array = NULL;
-
-	if ((array == NULL) || (string == NULL)) {
-		return WERR_INVALID_PARAM;
-	}
-
-	new_array = TALLOC_REALLOC_ARRAY(mem_ctx, *array, char *, count + 1);
-	if (new_array == NULL) {
-		return WERR_NOMEM;
-	}
-
-	new_array[count] = talloc_strdup(new_array, string);
-	if (new_array[count] == NULL) {
-		TALLOC_FREE(new_array);
-		return WERR_NOMEM;
-	}
-
-	*array = new_array;
-
-	return WERR_OK;
-}
-
-/**
- * Open a registry key specified by "path"
- */
-static WERROR smbconf_reg_open_path(TALLOC_CTX *mem_ctx,
-				    struct smbconf_ctx *ctx,
-				    const char *path,
-				    uint32 desired_access,
-				    struct registry_key **key)
-{
-	WERROR werr = WERR_OK;
-
-	if (ctx == NULL) {
-		DEBUG(1, ("Error: configuration is not open!\n"));
-		werr = WERR_INVALID_PARAM;
-		goto done;
-	}
-
-	if (ctx->token == NULL) {
-		DEBUG(1, ("Error: token missing from smbconf_ctx. "
-			  "was smbconf_init() called?\n"));
-		werr = WERR_INVALID_PARAM;
-		goto done;
-	}
-
-	if (path == NULL) {
-		DEBUG(1, ("Error: NULL path string given\n"));
-		werr = WERR_INVALID_PARAM;
-		goto done;
-	}
-
-	werr = reg_open_path(mem_ctx, path, desired_access, ctx->token, key);
-
-	if (!W_ERROR_IS_OK(werr)) {
-		DEBUG(1, ("Error opening registry path '%s': %s\n",
-			  path, dos_errstr(werr)));
-	}
-
-done:
-	return werr;
-}
-
-/**
- * Open a subkey of KEY_SMBCONF (i.e a service)
- */
-static WERROR smbconf_reg_open_service_key(TALLOC_CTX *mem_ctx,
-					   struct smbconf_ctx *ctx,
-					   const char *servicename,
-					   uint32 desired_access,
-					   struct registry_key **key)
-{
-	WERROR werr = WERR_OK;
-	char *path = NULL;
-
-	if (servicename == NULL) {
-		DEBUG(3, ("Error: NULL servicename given.\n"));
-		werr = WERR_INVALID_PARAM;
-		goto done;
-	}
-
-	path = talloc_asprintf(mem_ctx, "%s\\%s", KEY_SMBCONF, servicename);
-	if (path == NULL) {
-		werr = WERR_NOMEM;
-		goto done;
-	}
-
-	werr = smbconf_reg_open_path(mem_ctx, ctx, path, desired_access, key);
-
-done:
-	TALLOC_FREE(path);
-	return werr;
-}
-
-/**
- * open the base key KEY_SMBCONF
- */
-static WERROR smbconf_reg_open_base_key(TALLOC_CTX *mem_ctx,
-					struct smbconf_ctx *ctx,
-					uint32 desired_access,
-					struct registry_key **key)
-{
-	return smbconf_reg_open_path(mem_ctx, ctx, KEY_SMBCONF, desired_access,
-				     key);
-}
-
-/**
- * check if a value exists in a given registry key
- */
-static bool smbconf_value_exists(struct registry_key *key, const char *param)
-{
-	bool ret = false;
-	WERROR werr = WERR_OK;
-	TALLOC_CTX *ctx = talloc_stackframe();
-	struct registry_value *value = NULL;
-
-	werr = reg_queryvalue(ctx, key, param, &value);
-	if (W_ERROR_IS_OK(werr)) {
-		ret = true;
-	}
-
-	TALLOC_FREE(ctx);
-	return ret;
-}
-
-/**
- * create a subkey of KEY_SMBCONF
- */
-static WERROR smbconf_reg_create_service_key(TALLOC_CTX *mem_ctx,
-					     struct smbconf_ctx *ctx,
-					     const char * subkeyname,
-					     struct registry_key **newkey)
-{
-	WERROR werr = WERR_OK;
-	struct registry_key *create_parent = NULL;
-	TALLOC_CTX *create_ctx;
-	enum winreg_CreateAction action = REG_ACTION_NONE;
-
-	/* create a new talloc ctx for creation. it will hold
-	 * the intermediate parent key (SMBCONF) for creation
-	 * and will be destroyed when leaving this function... */
-	if (!(create_ctx = talloc_stackframe())) {
-		werr = WERR_NOMEM;
-		goto done;
-	}
-
-	werr = smbconf_reg_open_base_key(create_ctx, ctx, REG_KEY_WRITE,
-					 &create_parent);
-	if (!W_ERROR_IS_OK(werr)) {
-		goto done;
-	}
-
-	werr = reg_createkey(mem_ctx, create_parent, subkeyname,
-			     REG_KEY_WRITE, newkey, &action);
-	if (W_ERROR_IS_OK(werr) && (action != REG_CREATED_NEW_KEY)) {
-		DEBUG(10, ("Key '%s' already exists.\n", subkeyname));
-		werr = WERR_ALREADY_EXISTS;
-	}
-	if (!W_ERROR_IS_OK(werr)) {
-		DEBUG(5, ("Error creating key %s: %s\n",
-			 subkeyname, dos_errstr(werr)));
-	}
-
-done:
-	TALLOC_FREE(create_ctx);
-	return werr;
-}
-
-/**
- * add a value to a key.
- */
-static WERROR smbconf_reg_set_value(struct registry_key *key,
-				    const char *valname,
-				    const char *valstr)
-{
-	struct registry_value val;
-	WERROR werr = WERR_OK;
-	char *subkeyname;
-	const char *canon_valname;
-	const char *canon_valstr;
-
-	if (!lp_canonicalize_parameter_with_value(valname, valstr,
-						  &canon_valname,
-						  &canon_valstr))
-	{
-		if (canon_valname == NULL) {
-			DEBUG(5, ("invalid parameter '%s' given\n",
-				  valname));
-		} else {
-			DEBUG(5, ("invalid value '%s' given for "
-				  "parameter '%s'\n", valstr, valname));
-		}
-		werr = WERR_INVALID_PARAM;
-		goto done;
-	}
-
-	ZERO_STRUCT(val);
-
-	val.type = REG_SZ;
-	val.v.sz.str = CONST_DISCARD(char *, canon_valstr);
-	val.v.sz.len = strlen(canon_valstr) + 1;
-
-	if (registry_smbconf_valname_forbidden(canon_valname)) {
-		DEBUG(5, ("Parameter '%s' not allowed in registry.\n",
-			  canon_valname));
-		werr = WERR_INVALID_PARAM;
-		goto done;
-	}
-
-	subkeyname = strrchr_m(key->key->name, '\\');
-	if ((subkeyname == NULL) || (*(subkeyname +1) == '\0')) {
-		DEBUG(5, ("Invalid registry key '%s' given as "
-			  "smbconf section.\n", key->key->name));
-		werr = WERR_INVALID_PARAM;
-		goto done;
-	}
-	subkeyname++;
-	if (!strequal(subkeyname, GLOBAL_NAME) &&
-	    lp_parameter_is_global(valname))
-	{
-		DEBUG(5, ("Global paramter '%s' not allowed in "
-			  "service definition ('%s').\n", canon_valname,
-			  subkeyname));
-		werr = WERR_INVALID_PARAM;
-		goto done;
-	}
-
-	werr = reg_setvalue(key, canon_valname, &val);
-	if (!W_ERROR_IS_OK(werr)) {
-		DEBUG(5, ("Error adding value '%s' to "
-			  "key '%s': %s\n",
-			  canon_valname, key->key->name, dos_errstr(werr)));
-	}
-
-done:
-	return werr;
-}
-
-/**
- * format a registry_value into a string.
- *
- * This is intended to be used for smbconf registry values,
- * which are ar stored as REG_SZ values, so the incomplete
- * handling should be ok.
- */
-static char *smbconf_format_registry_value(TALLOC_CTX *mem_ctx,
-					   struct registry_value *value)
-{
-	char *result = NULL;
-
-	/* alternatively, create a new talloc context? */
-	if (mem_ctx == NULL) {
-		return result;
-	}
-
-	switch (value->type) {
-	case REG_DWORD:
-		result = talloc_asprintf(mem_ctx, "%d", value->v.dword);
-		break;
-	case REG_SZ:
-	case REG_EXPAND_SZ:
-		result = talloc_asprintf(mem_ctx, "%s", value->v.sz.str);
-		break;
-	case REG_MULTI_SZ: {
-                uint32 j;
-                for (j = 0; j < value->v.multi_sz.num_strings; j++) {
-                        result = talloc_asprintf(mem_ctx, "%s \"%s\" ",
-						 result,
-						 value->v.multi_sz.strings[j]);
-			if (result == NULL) {
-				break;
-			}
-                }
-                break;
-        }
-	case REG_BINARY:
-                result = talloc_asprintf(mem_ctx, "binary (%d bytes)",
-					 (int)value->v.binary.length);
-                break;
-        default:
-                result = talloc_asprintf(mem_ctx, "<unprintable>");
-                break;
-        }
-	return result;
-}
-
-/**
- * Get the values of a key as a list of value names
- * and a list of value strings (ordered)
- */
-static WERROR smbconf_reg_get_values(TALLOC_CTX *mem_ctx,
-				     struct registry_key *key,
-				     uint32_t *num_values,
-				     char ***value_names,
-				     char ***value_strings)
-{
-	TALLOC_CTX *tmp_ctx = NULL;
-	WERROR werr = WERR_OK;
-	uint32_t count;
-	struct registry_value *valvalue = NULL;
-	char *valname = NULL;
-	char **tmp_valnames = NULL;
-	char **tmp_valstrings = NULL;
-
-	if ((num_values == NULL) || (value_names == NULL) ||
-	    (value_strings == NULL))
-	{
-		werr = WERR_INVALID_PARAM;
-		goto done;
-	}
-
-	tmp_ctx = talloc_stackframe();
-	if (tmp_ctx == NULL) {
-		werr = WERR_NOMEM;
-		goto done;
-	}
-
-	for (count = 0;
-	     W_ERROR_IS_OK(werr = reg_enumvalue(tmp_ctx, key, count, &valname,
-						&valvalue));
-	     count++)
-	{
-		char *valstring;
-
-		werr = smbconf_add_string_to_array(tmp_ctx,
-						   &tmp_valnames,
-						   count, valname);
-		if (!W_ERROR_IS_OK(werr)) {
-			goto done;
-		}
-
-		valstring = smbconf_format_registry_value(tmp_ctx, valvalue);
-		werr = smbconf_add_string_to_array(tmp_ctx, &tmp_valstrings,
-						   count, valstring);
-		if (!W_ERROR_IS_OK(werr)) {
-			goto done;
-		}
-	}
-	if (!W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, werr)) {
-		goto done;
-	}
-
-	werr = WERR_OK;
-
-	*num_values = count;
-	if (count > 0) {
-		*value_names = talloc_move(mem_ctx, &tmp_valnames);
-		*value_strings = talloc_move(mem_ctx, &tmp_valstrings);
-	} else {
-		*value_names = NULL;
-		*value_strings = NULL;
-	}
-
-done:
-	TALLOC_FREE(tmp_ctx);
-	return werr;
-}
-
 static int smbconf_destroy_ctx(struct smbconf_ctx *ctx)
 {
 	return ctx->ops->shutdown(ctx);
@@ -409,390 +43,41 @@ static WERROR smbconf_global_check(struct smbconf_ctx *ctx)
 
 /**********************************************************************
  *
- * smbconf operations: registry implementations
+ * helper functions exported to the backend modules
+ * (might go into a smbconf_util.c)
  *
  **********************************************************************/
 
 /**
- * initialize the registry smbconf backend
- */
-static WERROR smbconf_reg_init(struct smbconf_ctx *ctx)
-{
-	WERROR werr = WERR_OK;
-
-	if (!registry_init_smbconf()) {
-		werr = WERR_REG_IO_FAILURE;
-		goto done;
-	}
-
-	werr = ntstatus_to_werror(registry_create_admin_token(ctx,
-							      &(ctx->token)));
-	if (!W_ERROR_IS_OK(werr)) {
-		DEBUG(1, ("Error creating admin token\n"));
-		goto done;
-	}
-
-done:
-	return werr;
-}
-
-static int smbconf_reg_shutdown(struct smbconf_ctx *ctx)
-{
-	return regdb_close();
-}
-
-static WERROR smbconf_reg_open(struct smbconf_ctx *ctx)
-{
-	return regdb_open();
-}
-
-static int smbconf_reg_close(struct smbconf_ctx *ctx)
-{
-	return regdb_close();
-}
-
-/**
- * Get the change sequence number of the given service/parameter.
- * service and parameter strings may be NULL.
- */
-static void smbconf_reg_get_csn(struct smbconf_ctx *ctx,
-				struct smbconf_csn *csn,
-				const char *service, const char *param)
-{
-	if (csn == NULL) {
-		return;
-	}
-	csn->csn = (uint64_t)regdb_get_seqnum();
-}
-
-/**
- * Drop the whole configuration (restarting empty) - registry version
- */
-static WERROR smbconf_reg_drop(struct smbconf_ctx *ctx)
-{
-	char *path, *p;
-	WERROR werr = WERR_OK;
-	struct registry_key *parent_key = NULL;
-	struct registry_key *new_key = NULL;
-	TALLOC_CTX* mem_ctx = talloc_stackframe();
-	enum winreg_CreateAction action;
-
-	path = talloc_strdup(mem_ctx, KEY_SMBCONF);
-	if (path == NULL) {
-		werr = WERR_NOMEM;
-		goto done;
-	}
-	p = strrchr(path, '\\');
-	*p = '\0';
-	werr = smbconf_reg_open_path(mem_ctx, ctx, path, REG_KEY_WRITE,
-				     &parent_key);
-
-	if (!W_ERROR_IS_OK(werr)) {
-		goto done;
-	}
-
-	werr = reg_deletekey_recursive(mem_ctx, parent_key, p+1);
-
-	if (!W_ERROR_IS_OK(werr)) {
-		goto done;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list