s3-rpc_client: Added a winreg set sz helper.
authorAndreas Schneider <asn@samba.org>
Fri, 28 Jan 2011 08:45:44 +0000 (09:45 +0100)
committerGünther Deschner <gd@samba.org>
Mon, 7 Feb 2011 11:31:59 +0000 (12:31 +0100)
Signed-off-by: Günther Deschner <gd@samba.org>
source3/rpc_client/cli_winreg.c
source3/rpc_client/cli_winreg.h

index 48c2cfa51b6a7c2a2813e52c0970fb6a2736711f..d197bd78d703f5b1524abace02658e645a6efe05 100644 (file)
@@ -203,4 +203,47 @@ NTSTATUS dcerpc_winreg_set_dword(TALLOC_CTX *mem_ctx,
        return status;
 }
 
+NTSTATUS dcerpc_winreg_set_sz(TALLOC_CTX *mem_ctx,
+                             struct dcerpc_binding_handle *h,
+                             struct policy_handle *key_handle,
+                             const char *value,
+                             const char *data,
+                             WERROR *pwerr)
+{
+       struct winreg_String wvalue;
+       DATA_BLOB blob;
+       WERROR result = WERR_OK;
+       NTSTATUS status;
+
+       wvalue.name = value;
+       if (data == NULL) {
+               blob = data_blob_string_const("");
+       } else {
+               if (!push_reg_sz(mem_ctx, &blob, data)) {
+                       DEBUG(2, ("dcerpc_winreg_set_sz: Could not marshall "
+                                 "string %s for %s\n",
+                                 data, wvalue.name));
+                       *pwerr = WERR_NOMEM;
+                       return NT_STATUS_OK;
+               }
+       }
+
+       status = dcerpc_winreg_SetValue(h,
+                                       mem_ctx,
+                                       key_handle,
+                                       wvalue,
+                                       REG_SZ,
+                                       blob.data,
+                                       blob.length,
+                                       &result);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+       if (!W_ERROR_IS_OK(result)) {
+               *pwerr = result;
+       }
+
+       return status;
+}
+
 /* vim: set ts=8 sw=8 noet cindent syntax=c.doxygen: */
index 6656ce71a98777cd0e838b3ed137f2391851c44b..69f34e4ecb19dc3d05ed3fa31954b1599f32920b 100644 (file)
@@ -107,6 +107,32 @@ NTSTATUS dcerpc_winreg_set_dword(TALLOC_CTX *mem_ctx,
                                 uint32_t data,
                                 WERROR *pwerr);
 
+/**
+ * @brief Set a value with the specified sz data.
+ *
+ * @param[in]  mem_ctx  The memory context to use.
+ *
+ * @param[in]  h        The binding handle for the rpc connection.
+ *
+ * @param[in]  key_handle A handle to a key that MUST have been opened
+ *                        previously.
+ *
+ * @param[in]  value    The name of the value to set.
+ *
+ * @param[in]  data     The data to store in the value.
+ *
+ * @param[out] pwerr    A pointer to a WERROR to store result of the query.
+ *
+ * @return              NT_STATUS_OK on success or a corresponding error if
+ *                      there was a problem on the connection.
+ */
+NTSTATUS dcerpc_winreg_set_sz(TALLOC_CTX *mem_ctx,
+                             struct dcerpc_binding_handle *h,
+                             struct policy_handle *key_handle,
+                             const char *value,
+                             const char *data,
+                             WERROR *pwerr);
+
 #endif /* CLI_WINREG_H */
 
 /* vim: set ts=8 sw=8 noet cindent syntax=c.doxygen: */