summaryrefslogtreecommitdiff
path: root/source4/lib
diff options
context:
space:
mode:
Diffstat (limited to 'source4/lib')
-rw-r--r--source4/lib/registry/common/reg_interface.c1
-rw-r--r--source4/lib/registry/common/registry.h1
-rw-r--r--source4/lib/registry/reg_backend_nt4/reg_backend_nt4.c4
3 files changed, 6 insertions, 0 deletions
diff --git a/source4/lib/registry/common/reg_interface.c b/source4/lib/registry/common/reg_interface.c
index 9c78ae55fb..5e6b4fbac8 100644
--- a/source4/lib/registry/common/reg_interface.c
+++ b/source4/lib/registry/common/reg_interface.c
@@ -98,6 +98,7 @@ WERROR reg_open(const char *backend, const char *location, const char *credentia
ret = talloc(mem_ctx, sizeof(REG_HANDLE));
ZERO_STRUCTP(ret);
ret->location = location?talloc_strdup(mem_ctx, location):NULL;
+ ret->credentials = credentials?talloc_strdup(mem_ctx, credentials):NULL;
ret->functions = entry->functions;
ret->backend_data = NULL;
ret->mem_ctx = mem_ctx;
diff --git a/source4/lib/registry/common/registry.h b/source4/lib/registry/common/registry.h
index 6e12de258d..9d7e17cf56 100644
--- a/source4/lib/registry/common/registry.h
+++ b/source4/lib/registry/common/registry.h
@@ -121,6 +121,7 @@ struct reg_handle_s {
struct registry_ops *functions;
REG_SUBTREE *subtrees;
char *location;
+ char *credentials;
void *backend_data;
TALLOC_CTX *mem_ctx;
};
diff --git a/source4/lib/registry/reg_backend_nt4/reg_backend_nt4.c b/source4/lib/registry/reg_backend_nt4/reg_backend_nt4.c
index 9d90523a75..a7e5051ce4 100644
--- a/source4/lib/registry/reg_backend_nt4/reg_backend_nt4.c
+++ b/source4/lib/registry/reg_backend_nt4/reg_backend_nt4.c
@@ -1697,12 +1697,16 @@ static WERROR nt_value_by_index(REG_KEY *k, int n, REG_VAL **value)
{
VL_TYPE *vl;
int val_off, vk_off;
+ int val_count;
VK_HDR *vk_hdr;
REGF *regf = k->handle->backend_data;
NK_HDR *nk_hdr = k->backend_data;
+ val_count = IVAL(&nk_hdr->val_cnt,0);
val_off = IVAL(&nk_hdr->val_off,0);
vl = (VL_TYPE *)LOCN(regf->base, val_off);
DEBUG(2, ("Val List Offset: %0X\n", val_off));
+ if(n < 0) return WERR_INVALID_PARAM;
+ if(n >= val_count) return WERR_NO_MORE_ITEMS;
vk_off = IVAL(&vl[n],0);
vk_hdr = (VK_HDR *)LOCN(regf->base, vk_off);