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
