diff options
author | Andreas Schneider <asn@samba.org> | 2010-05-04 11:43:27 +0200 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2010-05-05 18:16:38 +0200 |
commit | 740418a150ff0ccccf47b4a40783c35f81723a89 (patch) | |
tree | 46438437cd2ca0b5e79ab7b9d58e08a651b7ed60 /source3 | |
parent | 66f76995114c01c619953d1c0c9f3f069ea91da1 (diff) | |
download | samba-740418a150ff0ccccf47b4a40783c35f81723a89.tar.gz samba-740418a150ff0ccccf47b4a40783c35f81723a89.tar.bz2 samba-740418a150ff0ccccf47b4a40783c35f81723a89.zip |
s3-spoolss: Added a winreg_printer_query_binary function.
Signed-off-by: Günther Deschner <gd@samba.org>
Diffstat (limited to 'source3')
-rw-r--r-- | source3/rpc_server/srv_spoolss_util.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/source3/rpc_server/srv_spoolss_util.c b/source3/rpc_server/srv_spoolss_util.c index 995cb7becc..786aef176a 100644 --- a/source3/rpc_server/srv_spoolss_util.c +++ b/source3/rpc_server/srv_spoolss_util.c @@ -1010,6 +1010,77 @@ static WERROR winreg_printer_write_binary(TALLOC_CTX *mem_ctx, return result; } +static WERROR winreg_printer_query_binary(TALLOC_CTX *mem_ctx, + struct rpc_pipe_client *pipe_handle, + struct policy_handle *key_handle, + const char *value, + DATA_BLOB *data) +{ + struct winreg_String wvalue; + enum winreg_Type type; + WERROR result = WERR_OK; + uint32_t value_len = 0; + NTSTATUS status; + DATA_BLOB blob; + + wvalue.name = value; + status = rpccli_winreg_QueryValue(pipe_handle, + mem_ctx, + key_handle, + &wvalue, + &type, + NULL, + (uint32_t *) &blob.length, + &value_len, + &result); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(0, ("winreg_printer_query_dword: Could not query value %s: %s\n", + wvalue.name, nt_errstr(status))); + if (!W_ERROR_IS_OK(result)) { + goto done; + } + result = ntstatus_to_werror(status); + goto done; + } + + if (type != REG_BINARY) { + result = WERR_INVALID_DATATYPE; + goto done; + } + + blob.data = (uint8_t *) TALLOC(mem_ctx, blob.length); + if (blob.data == NULL) { + result = WERR_NOMEM; + goto done; + } + value_len = 0; + + status = rpccli_winreg_QueryValue(pipe_handle, + mem_ctx, + key_handle, + &wvalue, + &type, + blob.data, + (uint32_t *) &blob.length, + &value_len, + &result); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(0, ("winreg_printer_query_dword: Could not query value %s: %s\n", + wvalue.name, nt_errstr(status))); + if (!W_ERROR_IS_OK(result)) { + result = ntstatus_to_werror(status); + } + goto done; + } + + if (data) { + data->data = blob.data; + data->length = blob.length; + } +done: + return result; +} + static WERROR winreg_printer_query_dword(TALLOC_CTX *mem_ctx, struct rpc_pipe_client *pipe_handle, struct policy_handle *key_handle, |