s3-rpc_client: Added a winreg add multi sz helper.
authorAndreas Schneider <asn@samba.org>
Fri, 28 Jan 2011 09:43:49 +0000 (10:43 +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 32f892fdcb14439feccd1e5f1e43a15e1de2fa32..41be96985b5854ae00f6a31d354b7523ff08684e 100644 (file)
@@ -403,4 +403,46 @@ NTSTATUS dcerpc_winreg_set_multi_sz(TALLOC_CTX *mem_ctx,
        return status;
 }
 
+NTSTATUS dcerpc_winreg_add_multi_sz(TALLOC_CTX *mem_ctx,
+                                   struct dcerpc_binding_handle *h,
+                                   struct policy_handle *key_handle,
+                                   const char *value,
+                                   const char *data,
+                                   WERROR *pwerr)
+{
+       const char **a = NULL;
+       const char **p;
+       uint32_t i;
+       WERROR result = WERR_OK;
+       NTSTATUS status;
+
+       status = dcerpc_winreg_query_multi_sz(mem_ctx,
+                                             h,
+                                             key_handle,
+                                             value,
+                                             &a,
+                                             &result);
+
+       /* count the elements */
+       for (p = a, i = 0; p && *p; p++, i++);
+
+       p = TALLOC_REALLOC_ARRAY(mem_ctx, a, const char *, i + 2);
+       if (p == NULL) {
+               *pwerr = WERR_NOMEM;
+               return NT_STATUS_OK;
+       }
+
+       p[i] = data;
+       p[i + 1] = NULL;
+
+       status = dcerpc_winreg_set_multi_sz(mem_ctx,
+                                           h,
+                                           key_handle,
+                                           value,
+                                           p,
+                                           pwerr);
+
+       return status;
+}
+
 /* vim: set ts=8 sw=8 noet cindent syntax=c.doxygen: */
index fd67c9c7cb401b0504d154cafc312fd2676fff36..5199bf6a7cd9a1b672945e607e6a62e273fb5804 100644 (file)
@@ -214,6 +214,35 @@ NTSTATUS dcerpc_winreg_set_multi_sz(TALLOC_CTX *mem_ctx,
                                    const char **data,
                                    WERROR *pwerr);
 
+/**
+ * @brief Add a value to the multi sz data.
+ *
+ * This reads the multi sz data from the given value and adds the data to the
+ * multi sz. Then it saves it to the regsitry.
+ *
+ * @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 add.
+ *
+ * @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_add_multi_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: */