[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-unstable-1007-g9d75021

Michael Adam obnox at samba.org
Thu Jan 3 00:30:24 GMT 2008


The branch, v3-2-test has been updated
       via  9d7502115e0f6cdfd27943d52f0de04447582b92 (commit)
       via  7e407e18be0761e7004acfbd2376c3a435922c25 (commit)
       via  1e46b479638c54e8bd7ba939bc7aba18a27b5155 (commit)
       via  a58ccbc6d70613f7572bc80621935d81f9e290e3 (commit)
       via  8a7954a9ae13df527ccedb1004ee4f87d506ce5b (commit)
       via  3972deb90c4b645fb4d207a7e132cd7e180e78bb (commit)
       via  d95b4935d3a97ca9c4b7990bbcf4e85c81c79516 (commit)
       via  a1d3f60ea753a158447bb0208441453b76a0f3b9 (commit)
       via  39a73b6291fd028d44fc2712afa76abf1fcff9cb (commit)
       via  9e953a94e9b3a060769938ef6af25623e446c180 (commit)
      from  518168410c49ac25085714c73e76dcf358fc4b68 (commit)

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


- Log -----------------------------------------------------------------
commit 9d7502115e0f6cdfd27943d52f0de04447582b92
Author: Michael Adam <obnox at samba.org>
Date:   Thu Jan 3 01:26:31 2008 +0100

    Don't leak: Use a temporary context for the admin token and free it.
    
    Michael

commit 7e407e18be0761e7004acfbd2376c3a435922c25
Author: Michael Adam <obnox at samba.org>
Date:   Thu Jan 3 01:12:23 2008 +0100

    Use libnet_smbconf_reg_open_path() in libnet_smbconf_drop().
    
    Replaces creation of token and direct use of reg_open_path.
    
    Michael

commit 1e46b479638c54e8bd7ba939bc7aba18a27b5155
Author: Michael Adam <obnox at samba.org>
Date:   Thu Jan 3 01:07:30 2008 +0100

    Abstract opening of registry path out of libnet_smbconf_reg_open_service_key().
    
    Creates new function libnet_smbconf_reg_open_path().
    Use libnet_smbconf_reg_open_path() directly in libnet_smbconf_reg_open_basekey().
    Return error in libnet_smbconf_reg_open_service_key() when NULL
    servicename is given.
    
    Michael

commit a58ccbc6d70613f7572bc80621935d81f9e290e3
Author: Michael Adam <obnox at samba.org>
Date:   Thu Jan 3 00:53:34 2008 +0100

    Add debug output in error path.
    
    Michael

commit 8a7954a9ae13df527ccedb1004ee4f87d506ce5b
Author: Michael Adam <obnox at samba.org>
Date:   Thu Jan 3 00:52:55 2008 +0100

    Fix setting of error code in error path.
    
    Michael

commit 3972deb90c4b645fb4d207a7e132cd7e180e78bb
Author: Michael Adam <obnox at samba.org>
Date:   Thu Jan 3 00:51:36 2008 +0100

    Use a better parameter name.
    
    Michael

commit d95b4935d3a97ca9c4b7990bbcf4e85c81c79516
Author: Michael Adam <obnox at samba.org>
Date:   Thu Jan 3 00:49:53 2008 +0100

    Rename libnet_smbconf_reg_open_path() to libnet_smbconf_reg_open_service_key().
    
    Michael

commit a1d3f60ea753a158447bb0208441453b76a0f3b9
Author: Michael Adam <obnox at samba.org>
Date:   Thu Jan 3 00:44:47 2008 +0100

    Hey, it is 2008 now.
    
    :-)
    
    Michael

commit 39a73b6291fd028d44fc2712afa76abf1fcff9cb
Author: Michael Adam <obnox at samba.org>
Date:   Thu Jan 3 00:43:29 2008 +0100

    Choose a more apropriate parameter name.
    
    Michael

commit 9e953a94e9b3a060769938ef6af25623e446c180
Author: Michael Adam <obnox at samba.org>
Date:   Thu Jan 3 00:35:09 2008 +0100

    Rename libnet_smbconf_reg_open_basepath() to libnet_smbconf_reg_open_basekey().
    
    Michael

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

Summary of changes:
 source/libnet/libnet_conf.c |  112 +++++++++++++++++++++++++++---------------
 1 files changed, 72 insertions(+), 40 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/libnet/libnet_conf.c b/source/libnet/libnet_conf.c
index 21fe857..995fc1b 100644
--- a/source/libnet/libnet_conf.c
+++ b/source/libnet/libnet_conf.c
@@ -1,7 +1,7 @@
 /*
  *  Unix SMB/CIFS implementation.
  *  libnet smbconf registry Support
- *  Copyright (C) Michael Adam 2007
+ *  Copyright (C) Michael Adam 2007-2008
  *  Copyright (C) Guenther Deschner 2007
  *
  *  This program is free software; you can redistribute it and/or modify
@@ -54,31 +54,39 @@ static WERROR libnet_smbconf_add_string_to_array(TALLOC_CTX *mem_ctx,
 	return WERR_OK;
 }
 
-/*
+/**
  * Open a subkey of KEY_SMBCONF (i.e a service)
  */
-static WERROR libnet_smbconf_reg_open_path(TALLOC_CTX *ctx,
-					   const char *subkeyname,
+static WERROR libnet_smbconf_reg_open_path(TALLOC_CTX *mem_ctx,
+					   const char *path,
 					   uint32 desired_access,
 					   struct registry_key **key)
 {
 	WERROR werr = WERR_OK;
-	char *path = NULL;
 	NT_USER_TOKEN *token;
+	TALLOC_CTX *tmp_ctx = NULL;
 
-	if (!(token = registry_create_admin_token(ctx))) {
-		DEBUG(1, ("Error creating admin token\n"));
+	if (path == NULL) {
+		DEBUG(1, ("Error: NULL path string given\n"));
+		werr = WERR_INVALID_PARAM;
 		goto done;
 	}
 
-	if (subkeyname == NULL) {
-		path = talloc_strdup(ctx, KEY_SMBCONF);
-	} else {
-		path = talloc_asprintf(ctx, "%s\\%s", KEY_SMBCONF, subkeyname);
+	tmp_ctx = talloc_new(mem_ctx);
+	if (tmp_ctx == NULL) {
+		werr = WERR_NOMEM;
+		goto done;
+	}
+
+	token = registry_create_admin_token(tmp_ctx);
+	if (token == NULL) {
+		DEBUG(1, ("Error creating admin token\n"));
+		/* what is the appropriate error code here? */
+		werr = WERR_CAN_NOT_COMPLETE;
+		goto done;
 	}
 
-	werr = reg_open_path(ctx, path, desired_access,
-			     token, key);
+	werr = reg_open_path(mem_ctx, path, desired_access, token, key);
 
 	if (!W_ERROR_IS_OK(werr)) {
 		DEBUG(1, ("Error opening registry path '%s': %s\n",
@@ -86,6 +94,33 @@ static WERROR libnet_smbconf_reg_open_path(TALLOC_CTX *ctx,
 	}
 
 done:
+	TALLOC_FREE(tmp_ctx);
+	return werr;
+}
+
+/**
+ * Open a subkey of KEY_SMBCONF (i.e a service)
+ */
+static WERROR libnet_smbconf_reg_open_service_key(TALLOC_CTX *ctx,
+						  const char *servicename,
+						  uint32 desired_access,
+						  struct registry_key **key)
+{
+	WERROR werr = WERR_OK;
+	char *path = NULL;
+	NT_USER_TOKEN *token;
+
+	if (servicename == NULL) {
+		DEBUG(3, ("Error: NULL servicename given.\n"));
+		werr = WERR_INVALID_PARAM;
+		goto done;
+	}
+
+	path = talloc_asprintf(ctx, "%s\\%s", KEY_SMBCONF, servicename);
+
+	werr = libnet_smbconf_reg_open_path(ctx, path, desired_access, key);
+
+done:
 	TALLOC_FREE(path);
 	return werr;
 }
@@ -93,11 +128,12 @@ done:
 /*
  * open the base key KEY_SMBCONF
  */
-static WERROR libnet_smbconf_reg_open_basepath(TALLOC_CTX *ctx,
-					       uint32 desired_access,
-					       struct registry_key **key)
+static WERROR libnet_smbconf_reg_open_basekey(TALLOC_CTX *ctx,
+					      uint32 desired_access,
+					      struct registry_key **key)
 {
-	return libnet_smbconf_reg_open_path(ctx, NULL, desired_access, key);
+	return libnet_smbconf_reg_open_path(ctx, KEY_SMBCONF, desired_access,
+					    key);
 }
 
 static bool libnet_smbconf_value_exists(struct registry_key *key,
@@ -137,8 +173,8 @@ static WERROR libnet_smbconf_reg_createkey_internal(TALLOC_CTX *ctx,
 		goto done;
 	}
 
-	werr = libnet_smbconf_reg_open_basepath(create_ctx, REG_KEY_WRITE,
-						&create_parent);
+	werr = libnet_smbconf_reg_open_basekey(create_ctx, REG_KEY_WRITE,
+					       &create_parent);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}
@@ -367,12 +403,6 @@ WERROR libnet_smbconf_drop(void)
 	TALLOC_CTX* mem_ctx = talloc_stackframe();
 	enum winreg_CreateAction action;
 
-	if (!(token = registry_create_admin_token(mem_ctx))) {
-		/* what is the appropriate error code here? */
-		werr = WERR_CAN_NOT_COMPLETE;
-		goto done;
-	}
-
 	path = talloc_strdup(mem_ctx, KEY_SMBCONF);
 	if (path == NULL) {
 		werr = WERR_NOMEM;
@@ -380,7 +410,8 @@ WERROR libnet_smbconf_drop(void)
 	}
 	p = strrchr(path, '\\');
 	*p = '\0';
-	werr = reg_open_path(mem_ctx, path, REG_KEY_WRITE, token, &parent_key);
+	werr = libnet_smbconf_reg_open_path(mem_ctx, path, REG_KEY_WRITE,
+					    &parent_key);
 
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
@@ -520,9 +551,9 @@ WERROR libnet_smbconf_get_share_names(TALLOC_CTX *mem_ctx, uint32_t *num_shares,
 		added_count++;
 	}
 
-	werr = libnet_smbconf_reg_open_basepath(tmp_ctx,
-						SEC_RIGHTS_ENUM_SUBKEYS,
-						&key);
+	werr = libnet_smbconf_reg_open_basekey(tmp_ctx,
+					       SEC_RIGHTS_ENUM_SUBKEYS,
+					       &key);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}
@@ -565,15 +596,15 @@ done:
 /**
  * check if a share/service of a given name exists
  */
-bool libnet_smbconf_share_exists(const char *subkeyname)
+bool libnet_smbconf_share_exists(const char *servicename)
 {
 	bool ret = false;
 	WERROR werr = WERR_OK;
 	TALLOC_CTX *mem_ctx = talloc_stackframe();
 	struct registry_key *key = NULL;
 
-	werr = libnet_smbconf_reg_open_path(mem_ctx, subkeyname, REG_KEY_READ,
-					    &key);
+	werr = libnet_smbconf_reg_open_service_key(mem_ctx, servicename,
+						   REG_KEY_READ, &key);
 	if (W_ERROR_IS_OK(werr)) {
 		ret = true;
 	}
@@ -592,8 +623,8 @@ WERROR libnet_smbconf_getshare(TALLOC_CTX *mem_ctx, const char *servicename,
 	WERROR werr = WERR_OK;
 	struct registry_key *key = NULL;
 
-	werr = libnet_smbconf_reg_open_path(mem_ctx, servicename, REG_KEY_READ,
-					    &key);
+	werr = libnet_smbconf_reg_open_service_key(mem_ctx, servicename,
+						   REG_KEY_READ, &key);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}
@@ -615,7 +646,7 @@ WERROR libnet_smbconf_delshare(const char *servicename)
 	struct registry_key *key = NULL;
 	TALLOC_CTX *ctx = talloc_stackframe();
 
-	werr = libnet_smbconf_reg_open_basepath(ctx, REG_KEY_WRITE, &key);
+	werr = libnet_smbconf_reg_open_basekey(ctx, REG_KEY_WRITE, &key);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}
@@ -642,8 +673,8 @@ WERROR libnet_smbconf_setparm(const char *service,
 		werr = libnet_smbconf_reg_createkey_internal(mem_ctx, service,
 							     &key);
 	} else {
-		werr = libnet_smbconf_reg_open_path(mem_ctx, service,
-						    REG_KEY_WRITE, &key);
+		werr = libnet_smbconf_reg_open_service_key(mem_ctx, service,
+							   REG_KEY_WRITE, &key);
 	}
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
@@ -678,8 +709,8 @@ WERROR libnet_smbconf_getparm(TALLOC_CTX *mem_ctx,
 		goto done;
 	}
 
-	werr = libnet_smbconf_reg_open_path(mem_ctx, service, REG_KEY_READ,
-					    &key);
+	werr = libnet_smbconf_reg_open_service_key(mem_ctx, service,
+						   REG_KEY_READ, &key);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}
@@ -720,7 +751,8 @@ WERROR libnet_smbconf_delparm(const char *service,
 		return WERR_NO_SUCH_SERVICE;
 	}
 
-	werr = libnet_smbconf_reg_open_path(mem_ctx, service, REG_KEY_ALL, &key);
+	werr = libnet_smbconf_reg_open_service_key(mem_ctx, service,
+						   REG_KEY_ALL, &key);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list