svn commit: samba r23428 - in branches/SAMBA_3_0_26/source/registry: .

obnox at samba.org obnox at samba.org
Tue Jun 12 10:02:08 GMT 2007


Author: obnox
Date: 2007-06-12 10:02:08 +0000 (Tue, 12 Jun 2007)
New Revision: 23428

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

Log:
Merge r19828 from 3_0: Add registry_fetch_values.

Michael


Modified:
   branches/SAMBA_3_0_26/source/registry/reg_frontend.c


Changeset:
Modified: branches/SAMBA_3_0_26/source/registry/reg_frontend.c
===================================================================
--- branches/SAMBA_3_0_26/source/registry/reg_frontend.c	2007-06-12 09:12:29 UTC (rev 23427)
+++ branches/SAMBA_3_0_26/source/registry/reg_frontend.c	2007-06-12 10:02:08 UTC (rev 23428)
@@ -263,7 +263,63 @@
 	return result;
 }
 
+NTSTATUS registry_fetch_values(TALLOC_CTX *mem_ctx, REGISTRY_KEY *key,
+			       uint32 *pnum_values, char ***pnames,
+			       struct registry_value ***pvalues)
+{
+	REGVAL_CTR *ctr;
+	char **names;
+	struct registry_value **values;
+	uint32 i;
 
+	if (!(ctr = TALLOC_ZERO_P(mem_ctx, REGVAL_CTR))) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	if (fetch_reg_values(key, ctr) == -1) {
+		TALLOC_FREE(ctr);
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	if (ctr->num_values == 0) {
+		*pnum_values = 0;
+		TALLOC_FREE(ctr);
+		return NT_STATUS_OK;
+	}
+
+	if ((!(names = TALLOC_ARRAY(ctr, char *, ctr->num_values))) ||
+	    (!(values = TALLOC_ARRAY(ctr, struct registry_value *,
+				     ctr->num_values)))) {
+		TALLOC_FREE(ctr);
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	for (i=0; i<ctr->num_values; i++) {
+		REGISTRY_VALUE *val = ctr->values[i];
+		NTSTATUS status;
+
+		if (!(names[i] = talloc_strdup(names, val->valuename))) {
+			TALLOC_FREE(ctr);
+			return NT_STATUS_NO_MEMORY;
+		}
+
+		status = registry_pull_value(values, &values[i],
+					     val->type, val->data_p,
+					     val->size, val->size);
+		if (!NT_STATUS_IS_OK(status)) {
+			TALLOC_FREE(ctr);
+			return status;
+		}
+	}
+
+	*pnum_values = ctr->num_values;
+	*pnames = talloc_move(mem_ctx, &names);
+	*pvalues = talloc_move(mem_ctx, &values);
+
+	TALLOC_FREE(ctr);
+	return NT_STATUS_OK;
+}
+
 /***********************************************************************
  retreive a specific subkey specified by index.  Caller is 
  responsible for freeing memory



More information about the samba-cvs mailing list