summaryrefslogtreecommitdiff
path: root/source4/rpc_server/winreg/rpc_winreg.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/rpc_server/winreg/rpc_winreg.c')
-rw-r--r--source4/rpc_server/winreg/rpc_winreg.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/source4/rpc_server/winreg/rpc_winreg.c b/source4/rpc_server/winreg/rpc_winreg.c
index b34ccfa4b9..20bf7f9117 100644
--- a/source4/rpc_server/winreg/rpc_winreg.c
+++ b/source4/rpc_server/winreg/rpc_winreg.c
@@ -328,7 +328,8 @@ static WERROR winreg_QueryInfoKey(struct dcesrv_call_state *dce_call, TALLOC_CTX
}
r->out.secdescsize = 0; /* FIXME */
- ZERO_STRUCT(r->out.last_changed_time); /* FIXME */ if (!W_ERROR_IS_OK(ret)) {
+ ZERO_STRUCT(r->out.last_changed_time); /* FIXME */
+ if (!W_ERROR_IS_OK(ret)) {
return ret;
}
@@ -414,7 +415,22 @@ static WERROR winreg_SetKeySecurity(struct dcesrv_call_state *dce_call, TALLOC_C
static WERROR winreg_SetValue(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
struct winreg_SetValue *r)
{
- return WERR_NOT_SUPPORTED;
+ struct dcesrv_handle *h;
+ struct registry_key *key;
+ WERROR result;
+
+ h = dcesrv_handle_fetch(dce_call->conn, r->in.handle, HTYPE_REGKEY);
+ DCESRV_CHECK_HANDLE(h);
+
+ key = h->data;
+
+ result = reg_val_set(key, r->in.name.name, r->in.type, r->in.data, r->in.size);
+
+ if (!W_ERROR_IS_OK(result)) {
+ return result;
+ }
+
+ return WERR_OK;
}