[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-unstable-981-g5608c39

Michael Adam obnox at samba.org
Mon Dec 31 02:59:11 GMT 2007


The branch, v3-2-test has been updated
       via  5608c398ad9a0d05d651905a81dd92b7a0e120ff (commit)
       via  a1bb47695a7fb21af239aa9d02537d3de2fea325 (commit)
       via  4a56d3d7075bd8bbd5e139c9433789ab29f6a70e (commit)
       via  b4dca117c09ddb9c8e7eea25c6cde3fbef8c692b (commit)
       via  af5218f1505321236be52df10ebfe8f42b99573d (commit)
       via  9b5d8f4d95ebfd47831906019e11227aecc83aa1 (commit)
      from  332be113a775adce8108a8003682019ae7f5bc21 (commit)

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


- Log -----------------------------------------------------------------
commit 5608c398ad9a0d05d651905a81dd92b7a0e120ff
Author: Michael Adam <obnox at samba.org>
Date:   Mon Dec 31 03:57:45 2007 +0100

    Make the last two helper functions in libnet_conf.c static.
    
    Now the registry backend is completely hidden from the API.
    
    Michael

commit a1bb47695a7fb21af239aa9d02537d3de2fea325
Author: Michael Adam <obnox at samba.org>
Date:   Mon Dec 31 03:55:22 2007 +0100

    Make grouping in if statement more explicit.
    
    Michael

commit 4a56d3d7075bd8bbd5e139c9433789ab29f6a70e
Author: Michael Adam <obnox at samba.org>
Date:   Mon Dec 31 03:25:54 2007 +0100

    Fix a permissions error in reg_deletekey_recursive().
    
    Michael

commit b4dca117c09ddb9c8e7eea25c6cde3fbef8c692b
Author: Michael Adam <obnox at samba.org>
Date:   Mon Dec 31 03:02:39 2007 +0100

    Change net_conf_import() to only use libnet_conf API functions.
    
    More precisely, only import_process_service() is changed.
    This removes all references to registry code from net_conf.c.
    
    net_conf_import() is currently -- like net_conf_addshare() -- also
    considered a high-level add-on, not an API function.
    
    Michael

commit af5218f1505321236be52df10ebfe8f42b99573d
Author: Michael Adam <obnox at samba.org>
Date:   Mon Dec 31 01:56:18 2007 +0100

    Rewrite net_conf_addshare() to only use libnet_conf API functions.
    
    Also exit on error if the share already exists.
    
    net_conf_addshare() is considered a high level utility function.
    It should not be an libnet_conf API function in itself since it is
    kind of arbitrary.
    
    Michael

commit 9b5d8f4d95ebfd47831906019e11227aecc83aa1
Author: Michael Adam <obnox at samba.org>
Date:   Mon Dec 31 01:14:44 2007 +0100

    Rename libnet_smbconf_key_exists() to libnet_smbconf_share_exists()
    
    and move it to the api section of libnet_conf.c
    
    Michael

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

Summary of changes:
 source/libnet/libnet_conf.c |   56 +++++++++++++++++++++---------------------
 source/registry/reg_api.c   |    2 +-
 source/utils/net_conf.c     |   55 ++++++++++++++++++-----------------------
 3 files changed, 53 insertions(+), 60 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/libnet/libnet_conf.c b/source/libnet/libnet_conf.c
index 8fe2c76..21fe857 100644
--- a/source/libnet/libnet_conf.c
+++ b/source/libnet/libnet_conf.c
@@ -100,26 +100,6 @@ static WERROR libnet_smbconf_reg_open_basepath(TALLOC_CTX *ctx,
 	return libnet_smbconf_reg_open_path(ctx, NULL, desired_access, key);
 }
 
-/*
- * check if a subkey of KEY_SMBCONF of a given name exists
- */
-bool libnet_smbconf_key_exists(const char *subkeyname)
-{
-	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);
-	if (W_ERROR_IS_OK(werr)) {
-		ret = true;
-	}
-
-	TALLOC_FREE(mem_ctx);
-	return ret;
-}
-
 static bool libnet_smbconf_value_exists(struct registry_key *key,
 					const char *param)
 {
@@ -140,9 +120,9 @@ static bool libnet_smbconf_value_exists(struct registry_key *key,
 /*
  * create a subkey of KEY_SMBCONF
  */
-WERROR libnet_smbconf_reg_createkey_internal(TALLOC_CTX *ctx,
-					     const char * subkeyname,
-					     struct registry_key **newkey)
+static WERROR libnet_smbconf_reg_createkey_internal(TALLOC_CTX *ctx,
+						    const char * subkeyname,
+						    struct registry_key **newkey)
 {
 	WERROR werr = WERR_OK;
 	struct registry_key *create_parent = NULL;
@@ -182,7 +162,7 @@ done:
 /*
  * add a value to a key.
  */
-WERROR libnet_smbconf_reg_setvalue_internal(struct registry_key *key,
+static WERROR libnet_smbconf_reg_setvalue_internal(struct registry_key *key,
 						   const char *valname,
 						   const char *valstr)
 {
@@ -530,7 +510,7 @@ WERROR libnet_smbconf_get_share_names(TALLOC_CTX *mem_ctx, uint32_t *num_shares,
 	}
 
 	/* make sure "global" is always listed first */
-	if (libnet_smbconf_key_exists(GLOBAL_NAME)) {
+	if (libnet_smbconf_share_exists(GLOBAL_NAME)) {
 		werr = libnet_smbconf_add_string_to_array(tmp_ctx,
 							  &tmp_share_names,
 							  0, GLOBAL_NAME);
@@ -583,6 +563,26 @@ done:
 }
 
 /**
+ * check if a share/service of a given name exists
+ */
+bool libnet_smbconf_share_exists(const char *subkeyname)
+{
+	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);
+	if (W_ERROR_IS_OK(werr)) {
+		ret = true;
+	}
+
+	TALLOC_FREE(mem_ctx);
+	return ret;
+}
+
+/**
  * get a definition of a share (service) from configuration.
  */
 WERROR libnet_smbconf_getshare(TALLOC_CTX *mem_ctx, const char *servicename,
@@ -638,7 +638,7 @@ WERROR libnet_smbconf_setparm(const char *service,
 	struct registry_key *key = NULL;
 	TALLOC_CTX *mem_ctx = talloc_stackframe();
 
-	if (!libnet_smbconf_key_exists(service)) {
+	if (!libnet_smbconf_share_exists(service)) {
 		werr = libnet_smbconf_reg_createkey_internal(mem_ctx, service,
 							     &key);
 	} else {
@@ -673,7 +673,7 @@ WERROR libnet_smbconf_getparm(TALLOC_CTX *mem_ctx,
 		goto done;
 	}
 
-	if (!libnet_smbconf_key_exists(service)) {
+	if (!libnet_smbconf_share_exists(service)) {
 		werr = WERR_NO_SUCH_SERVICE;
 		goto done;
 	}
@@ -716,7 +716,7 @@ WERROR libnet_smbconf_delparm(const char *service,
 	WERROR werr = WERR_OK;
 	TALLOC_CTX *mem_ctx = talloc_stackframe();
 
-	if (!libnet_smbconf_key_exists(service)) {
+	if (!libnet_smbconf_share_exists(service)) {
 		return WERR_NO_SUCH_SERVICE;
 	}
 
diff --git a/source/registry/reg_api.c b/source/registry/reg_api.c
index bc4508f..bb410e6 100644
--- a/source/registry/reg_api.c
+++ b/source/registry/reg_api.c
@@ -729,7 +729,7 @@ WERROR reg_deletekey_recursive_internal(TALLOC_CTX *ctx,
 	}
 
 	/* recurse through subkeys first */
-	werr = reg_openkey(mem_ctx, parent, path, REG_KEY_WRITE, &key);
+	werr = reg_openkey(mem_ctx, parent, path, REG_KEY_ALL, &key);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}
diff --git a/source/utils/net_conf.c b/source/utils/net_conf.c
index 98e6b60..07eb3b8 100644
--- a/source/utils/net_conf.c
+++ b/source/utils/net_conf.c
@@ -191,7 +191,6 @@ static int import_process_service(TALLOC_CTX *ctx,
 	struct parm_struct *parm;
 	int pnum = 0;
 	const char *servicename;
-	struct registry_key *key;
 	WERROR werr;
 	char *valstr = NULL;
 	TALLOC_CTX *tmp_ctx = NULL;
@@ -208,25 +207,21 @@ static int import_process_service(TALLOC_CTX *ctx,
 	if (opt_testmode) {
 		d_printf("[%s]\n", servicename);
 	} else {
-		if (libnet_smbconf_key_exists(servicename)) {
+		if (libnet_smbconf_share_exists(servicename)) {
 			werr = libnet_smbconf_delshare(servicename);
 			if (!W_ERROR_IS_OK(werr)) {
 				goto done;
 			}
 		}
-		werr = libnet_smbconf_reg_createkey_internal(tmp_ctx, servicename, &key);
-		if (!W_ERROR_IS_OK(werr)) {
-			d_fprintf(stderr, "Error creating share %s: %s\n",
-				  servicename, dos_errstr(werr));
-			goto done;
-		}
 	}
 
 	while ((parm = lp_next_parameter(share->service, &pnum, 0)))
 	{
-		if ((share->service < 0 && parm->p_class == P_LOCAL)
+		if ((share->service < 0) && (parm->p_class == P_LOCAL)
 		    && !(parm->flags & FLAG_GLOBAL))
+		{
 			continue;
+		}
 
 		valstr = parm_valstr(tmp_ctx, parm, share);
 
@@ -234,8 +229,9 @@ static int import_process_service(TALLOC_CTX *ctx,
 			if (opt_testmode) {
 				d_printf("\t%s = %s\n", parm->label, valstr);
 			} else {
-				werr = libnet_smbconf_reg_setvalue_internal(key,
-							parm->label, valstr);
+				werr = libnet_smbconf_setparm(servicename,
+							      parm->label,
+							      valstr);
 				if (!W_ERROR_IS_OK(werr)) {
 					d_fprintf(stderr,
 						  "Error setting parameter '%s'"
@@ -506,11 +502,16 @@ done:
 	return ret;
 }
 
+/**
+ * Add a share, with a couple of standard parameters, partly optional.
+ *
+ * This is a high level utility function of the net conf utility,
+ * not a direct frontend to the libnet_conf API.
+ */
 static int net_conf_addshare(int argc, const char **argv)
 {
 	int ret = -1;
 	WERROR werr = WERR_OK;
-	struct registry_key *newkey = NULL;
 	char *sharename = NULL;
 	const char *path = NULL;
 	const char *comment = NULL;
@@ -562,7 +563,6 @@ static int net_conf_addshare(int argc, const char **argv)
 					net_conf_addshare_usage(argc, argv);
 					goto done;
 			}
-
 		case 2:
 			path = argv[1];
 			sharename = strdup_lower(argv[0]);
@@ -596,6 +596,12 @@ static int net_conf_addshare(int argc, const char **argv)
 		goto done;
 	}
 
+	if (libnet_smbconf_share_exists(sharename)) {
+		d_fprintf(stderr, "ERROR: share %s already exists.\n",
+			  sharename);
+		goto done;
+	}
+
 	/* validate path */
 
 	if (path[0] != '/') {
@@ -622,19 +628,10 @@ static int net_conf_addshare(int argc, const char **argv)
 	}
 
 	/*
-	 * create the share
+	 * create the share by adding the parameters
 	 */
 
-	werr = libnet_smbconf_reg_createkey_internal(NULL, argv[0], &newkey);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "Error creating share %s: %s\n",
-			  argv[0], dos_errstr(werr));
-		goto done;
-	}
-
-	/* add config params as values */
-
-	werr = libnet_smbconf_reg_setvalue_internal(newkey, "path", path);
+	werr = libnet_smbconf_setparm(sharename, "path", path);
 	if (!W_ERROR_IS_OK(werr)) {
 		d_fprintf(stderr, "Error setting parameter %s: %s\n",
 			  "path", dos_errstr(werr));
@@ -642,8 +639,7 @@ static int net_conf_addshare(int argc, const char **argv)
 	}
 
 	if (comment != NULL) {
-		werr = libnet_smbconf_reg_setvalue_internal(newkey, "comment",
-							    comment);
+		werr = libnet_smbconf_setparm(sharename, "comment", comment);
 		if (!W_ERROR_IS_OK(werr)) {
 			d_fprintf(stderr, "Error setting parameter %s: %s\n",
 				  "comment", dos_errstr(werr));
@@ -651,16 +647,14 @@ static int net_conf_addshare(int argc, const char **argv)
 		}
 	}
 
-	werr = libnet_smbconf_reg_setvalue_internal(newkey, "guest ok",
-						    guest_ok);
+	werr = libnet_smbconf_setparm(sharename, "guest ok", guest_ok);
 	if (!W_ERROR_IS_OK(werr)) {
 		d_fprintf(stderr, "Error setting parameter %s: %s\n",
 			  "'guest ok'", dos_errstr(werr));
 		goto done;
 	}
 
-	werr = libnet_smbconf_reg_setvalue_internal(newkey, "writeable",
-						    writeable);
+	werr = libnet_smbconf_setparm(sharename, "writeable", writeable);
 	if (!W_ERROR_IS_OK(werr)) {
 		d_fprintf(stderr, "Error setting parameter %s: %s\n",
 			  "writeable", dos_errstr(werr));
@@ -670,7 +664,6 @@ static int net_conf_addshare(int argc, const char **argv)
 	ret = 0;
 
 done:
-	TALLOC_FREE(newkey);
 	SAFE_FREE(sharename);
 	return ret;
 }


-- 
Samba Shared Repository


More information about the samba-cvs mailing list