svn commit: samba r23443 - in branches/SAMBA_3_0_26/source/smbd: .

obnox at samba.org obnox at samba.org
Tue Jun 12 16:18:19 GMT 2007


Author: obnox
Date: 2007-06-12 16:18:19 +0000 (Tue, 12 Jun 2007)
New Revision: 23443

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=23443

Log:
Merge r20006 from 3_0:

Convert the registry shares to use the new API (reg_api.c)

Michael


Modified:
   branches/SAMBA_3_0_26/source/smbd/service.c


Changeset:
Modified: branches/SAMBA_3_0_26/source/smbd/service.c
===================================================================
--- branches/SAMBA_3_0_26/source/smbd/service.c	2007-06-12 16:17:25 UTC (rev 23442)
+++ branches/SAMBA_3_0_26/source/smbd/service.c	2007-06-12 16:18:19 UTC (rev 23443)
@@ -256,15 +256,15 @@
 
 static int load_registry_service(const char *servicename)
 {
-	REGISTRY_KEY *key;
+	struct registry_key *key;
 	char *path;
 	WERROR err;
 
-	uint32 i, num_values;
-	char **value_names;
-	struct registry_value **values = NULL;
+	uint32 i;
+	char *value_name;
+	struct registry_value *value;
 
-	int res;
+	int res = -1;
 
 	if (!lp_registry_shares()) {
 		return -1;
@@ -274,73 +274,56 @@
 		return -1;
 	}
 
-	err = regkey_open_internal(NULL, &key, path, get_root_nt_token(),
-				   REG_KEY_READ);
+	err = reg_open_path(NULL, path, REG_KEY_READ, get_root_nt_token(),
+			    &key);
 	SAFE_FREE(path);
 
 	if (!W_ERROR_IS_OK(err)) {
 		return -1;
 	}
 
-	err = registry_fetch_values(NULL, key, &num_values, &value_names,
-				    &values);
-
-	TALLOC_FREE(key);
-
-	if (!W_ERROR_IS_OK(err)) {
-		goto error;
-	}
-
 	res = lp_add_service(servicename, -1);
 	if (res == -1) {
 		goto error;
 	}
 
-	for (i=0; i<num_values; i++) {
-		switch (values[i]->type) {
+	for (i=0;
+	     W_ERROR_IS_OK(reg_enumvalue(key, key, i, &value_name, &value));
+	     i++) {
+		switch (value->type) {
 		case REG_DWORD: { 
-			char *val;
-			if (asprintf(&val, "%d", values[i]->v.dword) == -1) {
+			char *tmp;
+			if (asprintf(&tmp, "%d", value->v.dword) == -1) {
 				continue;
 			}
-			lp_do_parameter(res, value_names[i], val);
-			SAFE_FREE(val);
+			lp_do_parameter(res, value_name, tmp);
+			SAFE_FREE(tmp);
 			break;
 		}
 		case REG_SZ: {
-			lp_do_parameter(res, value_names[i],
-					values[i]->v.sz.str);
+			lp_do_parameter(res, value_name, value->v.sz.str);
 			break;
 		}
 		default:
 			/* Ignore all the rest */
 			break;
 		}
-	}
 
-	TALLOC_FREE(value_names);
-	TALLOC_FREE(values);
-	return res;
-
-	if (!service_ok(res)) {
-		/* this is actually never reached, since 
-		 * service_ok only returns False if the service
-		 * entry does not have a service name, and we _know_
-		 * we do have a service name here... */
-		res = -1;
+		TALLOC_FREE(value_name);
+		TALLOC_FREE(value);
 	}
 
+	res = 0;
  error:
 
-	TALLOC_FREE(value_names);
-	TALLOC_FREE(values);
-	return -1;
+	TALLOC_FREE(key);
+	return res;
 }
 
 void load_registry_shares(void)
 {
-	REGISTRY_KEY *key;
-	REGSUBKEY_CTR *keys;
+	struct registry_key *key;
+	char *name;
 	WERROR err;
 	int i;
 
@@ -348,26 +331,18 @@
 		return;
 	}
 
-	if (!(keys = TALLOC_ZERO_P(NULL, REGSUBKEY_CTR))) {
-		goto done;
-	}
-
-	err = regkey_open_internal(keys, &key, KEY_SMBCONF,
-				   get_root_nt_token(), REG_KEY_READ);
+	err = reg_open_path(NULL, KEY_SMBCONF, REG_KEY_READ,
+			    get_root_nt_token(), &key);
 	if (!(W_ERROR_IS_OK(err))) {
-		goto done;
+		return;
 	}
 
-	if (fetch_reg_keys(key, keys) == -1) {
-		goto done;
+	for (i=0; W_ERROR_IS_OK(reg_enumkey(key, key, i, &name, NULL)); i++) {
+		load_registry_service(name);
+		TALLOC_FREE(name);
 	}
 
-	for (i=0; i<keys->num_subkeys; i++) {
-		load_registry_service(keys->subkeys[i]);
-	}
-
- done:
-	TALLOC_FREE(keys);
+	TALLOC_FREE(key);
 	return;
 }
 



More information about the samba-cvs mailing list