Rev 5321: delete key (or global directives, respectively), before importing parameters from input file in http://samba.sernet.de/ma/bzr/SAMBA_3_0-registry.bzr/

Michael Adam ma at sernet.de
Mon Apr 2 14:20:30 GMT 2007


At http://samba.sernet.de/ma/bzr/SAMBA_3_0-registry.bzr/

------------------------------------------------------------
revno: 5321
revision-id: ma at sernet.de-20070402142027-aac781ee0bfba5e9
parent: ma at sernet.de-20070402135453-499ab678aad8a949
committer: Michael Adam <ma at sernet.de>
branch nick: SAMBA_3_0-registry.bzr
timestamp: Mon 2007-04-02 16:20:27 +0200
message:
  delete key (or global directives, respectively), before importing parameters from input file
modified:
  source/utils/net_conf.c        net_conf.c-20070228210606-uywdn1acd043wgvt-1
=== modified file 'source/utils/net_conf.c'
--- a/source/utils/net_conf.c	2007-04-02 13:54:53 +0000
+++ b/source/utils/net_conf.c	2007-04-02 14:20:27 +0000
@@ -259,6 +259,44 @@
 	return werr;
 }
 
+static WERROR delete_globals(TALLOC_CTX *ctx)
+{
+	WERROR werr = WERR_OK;
+	struct registry_key *key;
+	uint32 idx = 0;
+        struct registry_value *valvalue = NULL;
+        char *valname = NULL;
+	
+	werr = reg_open_path(ctx, KEY_SMBCONF, REG_KEY_WRITE, 
+			     get_root_nt_token(), &key);
+	if (!W_ERROR_IS_OK(werr)) {
+		goto done;
+	}
+	
+	for (idx = 0;
+	     W_ERROR_IS_OK(werr = reg_enumvalue(ctx, key, idx, &valname,
+						&valvalue));
+	     idx++)
+	{
+		DEBUG(3, ("deleting global parameter %s", valname));
+		werr = reg_deletevalue(key, valname);
+		if (!W_ERROR_IS_OK(werr)) {
+			d_fprintf(stderr, "Error deleting value '%s': %s.\n",
+				  valname, dos_errstr(werr));
+			goto done;
+		}
+	}
+	if (!W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, werr)) {
+		d_fprintf(stderr, "Error enumerating values: %s\n",
+			  dos_errstr(werr));
+		goto done;
+	}
+	werr = WERR_OK;
+
+done:
+	return werr;
+}
+
 static WERROR list_values(TALLOC_CTX *ctx, struct registry_key *key)
 {
 	WERROR werr = WERR_OK;
@@ -304,6 +342,13 @@
 	}
 	else {
 		if (share->service == GLOBAL_SECTION_SNUM) {
+			werr = delete_globals(ctx);
+			if (!W_ERROR_IS_OK(werr)) {
+				d_fprintf(stderr,
+					  "Error deleting globals: %s\n",
+					  dos_errstr(werr));
+				goto done;
+			}
 			werr = reg_open_path(ctx, KEY_SMBCONF, REG_KEY_WRITE,
 					     get_root_nt_token(), &key);
 			if (!W_ERROR_IS_OK(werr)) {
@@ -314,6 +359,10 @@
 			}
 		}
 		else {
+			werr = reg_delkey_internal(ctx, servicename);
+			if (!W_ERROR_IS_OK(werr)) {
+				goto done;
+			}
 			werr = reg_createkey_internal(ctx, servicename, &key);
 			if (!W_ERROR_IS_OK(werr)) {
 				goto done;



More information about the samba-cvs mailing list