s3-rpc_client: Added a winreg set security descriptor helper.
authorAndreas Schneider <asn@samba.org>
Mon, 31 Jan 2011 17:40:06 +0000 (18:40 +0100)
committerGünther Deschner <gd@samba.org>
Mon, 7 Feb 2011 11:32:00 +0000 (12:32 +0100)
Signed-off-by: Günther Deschner <gd@samba.org>
source3/rpc_client/cli_winreg.c
source3/rpc_client/cli_winreg.h

index a96a2a6cc22e2da04e6be83851edbe1137ec19ad..24eef033f0bb5c58276bc5f56bd11b0fbec99dec 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "includes.h"
 #include "../librpc/gen_ndr/ndr_winreg_c.h"
+#include "../librpc/gen_ndr/ndr_security.h"
 #include "rpc_client/cli_winreg.h"
 
 NTSTATUS dcerpc_winreg_query_dword(TALLOC_CTX *mem_ctx,
@@ -509,6 +510,35 @@ NTSTATUS dcerpc_winreg_set_binary(TALLOC_CTX *mem_ctx,
        return status;
 }
 
+NTSTATUS dcerpc_winreg_set_sd(TALLOC_CTX *mem_ctx,
+                             struct dcerpc_binding_handle *h,
+                             struct policy_handle *key_handle,
+                             const char *value,
+                             const struct security_descriptor *data,
+                             WERROR *pwerr)
+{
+       enum ndr_err_code ndr_err;
+       DATA_BLOB blob;
+
+       ndr_err = ndr_push_struct_blob(&blob,
+                                      mem_ctx,
+                                      data,
+                                      (ndr_push_flags_fn_t) ndr_push_security_descriptor);
+       if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+               DEBUG(2, ("dcerpc_winreg_set_sd: Failed to marshall security "
+                         "descriptor\n"));
+               *pwerr = WERR_NOMEM;
+               return NT_STATUS_OK;
+       }
+
+       return dcerpc_winreg_set_binary(mem_ctx,
+                                       h,
+                                       key_handle,
+                                       value,
+                                       &blob,
+                                       pwerr);
+}
+
 NTSTATUS dcerpc_winreg_add_multi_sz(TALLOC_CTX *mem_ctx,
                                    struct dcerpc_binding_handle *h,
                                    struct policy_handle *key_handle,
index 0c97a7779d36ec5ad2babbaa6c50dfac24ee62af..e78110d55619795ddaafa46971a5e978bacea8c8 100644 (file)
@@ -269,6 +269,32 @@ NTSTATUS dcerpc_winreg_set_binary(TALLOC_CTX *mem_ctx,
                                  DATA_BLOB *data,
                                  WERROR *pwerr);
 
+/**
+ * @brief Set a value with the specified security descriptor.
+ *
+ * @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 security descriptor 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_sd(TALLOC_CTX *mem_ctx,
+                             struct dcerpc_binding_handle *h,
+                             struct policy_handle *key_handle,
+                             const char *value,
+                             const struct security_descriptor *data,
+                             WERROR *pwerr);
+
 /**
  * @brief Add a value to the multi sz data.
  *