[SCM] Samba Shared Repository - branch master updated
Andreas Schneider
asn at samba.org
Wed Sep 8 10:46:59 MDT 2010
The branch, master has been updated
via 32e9577 s3-spoolss: Move spoolss winreg to new dcerpc client funtions.
from 2226347 s3: Simplify cm_connect_sam a bit
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 32e95772f9e6e6538da7eefa388e015be17af0e8
Author: Andreas Schneider <asn at samba.org>
Date: Wed Sep 1 18:00:44 2010 +0200
s3-spoolss: Move spoolss winreg to new dcerpc client funtions.
-----------------------------------------------------------------------
Summary of changes:
source3/rpc_server/srv_spoolss_util.c | 736 +++++++++++++++++----------------
1 files changed, 389 insertions(+), 347 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/rpc_server/srv_spoolss_util.c b/source3/rpc_server/srv_spoolss_util.c
index 927bb5e..8179012 100644
--- a/source3/rpc_server/srv_spoolss_util.c
+++ b/source3/rpc_server/srv_spoolss_util.c
@@ -223,7 +223,7 @@ static uint32_t winreg_printer_rev_changeid(void)
*
* @param[in] server_info The supplied server info.
*
- * @param[out] winreg_pipe A pointer for the winreg rpc client pipe.
+ * @param[out] binding_handle A pointer for the winreg dcerpc binding handle.
*
* @param[in] path The path to the key to open.
*
@@ -244,7 +244,7 @@ static uint32_t winreg_printer_rev_changeid(void)
static WERROR winreg_printer_openkey(TALLOC_CTX *mem_ctx,
struct auth_serversupplied_info *server_info,
struct messaging_context *msg_ctx,
- struct rpc_pipe_client **winreg_pipe,
+ struct dcerpc_binding_handle **winreg_binding_handle,
const char *path,
const char *key,
bool create_key,
@@ -252,26 +252,29 @@ static WERROR winreg_printer_openkey(TALLOC_CTX *mem_ctx,
struct policy_handle *hive_handle,
struct policy_handle *key_handle)
{
- struct rpc_pipe_client *pipe_handle;
+ static struct client_address client_id;
+ struct dcerpc_binding_handle *binding_handle;
struct winreg_String wkey, wkeyclass;
char *keyname;
NTSTATUS status;
WERROR result = WERR_OK;
- /* create winreg connection */
- status = rpc_pipe_open_internal(mem_ctx,
- &ndr_table_winreg.syntax_id,
- server_info,
- NULL,
- msg_ctx,
- &pipe_handle);
+ strlcpy(client_id.addr, "127.0.0.1", sizeof(client_id.addr));
+ client_id.name = "127.0.0.1";
+
+ status = rpcint_binding_handle(mem_ctx,
+ &ndr_table_winreg,
+ &client_id,
+ server_info,
+ msg_ctx,
+ &binding_handle);
if (!NT_STATUS_IS_OK(status)) {
- DEBUG(0, ("winreg_printer_openkey: Could not connect to winreg_pipe: %s\n",
+ DEBUG(0, ("winreg_printer_openkey: Could not connect to winreg pipe: %s\n",
nt_errstr(status)));
return ntstatus_to_werror(status);
}
- status = rpccli_winreg_OpenHKLM(pipe_handle,
+ status = dcerpc_winreg_OpenHKLM(binding_handle,
mem_ctx,
NULL,
access_mask,
@@ -280,12 +283,15 @@ static WERROR winreg_printer_openkey(TALLOC_CTX *mem_ctx,
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("winreg_printer_openkey: Could not open HKLM hive: %s\n",
nt_errstr(status)));
- talloc_free(pipe_handle);
- if (!W_ERROR_IS_OK(result)) {
- return result;
- }
+ talloc_free(binding_handle);
return ntstatus_to_werror(status);
}
+ if (!W_ERROR_IS_OK(result)) {
+ DEBUG(0, ("winreg_printer_openkey: Could not open HKLM hive: %s\n",
+ win_errstr(result)));
+ talloc_free(binding_handle);
+ return result;
+ }
if (key && *key) {
keyname = talloc_asprintf(mem_ctx, "%s\\%s", path, key);
@@ -293,7 +299,7 @@ static WERROR winreg_printer_openkey(TALLOC_CTX *mem_ctx,
keyname = talloc_strdup(mem_ctx, path);
}
if (keyname == NULL) {
- talloc_free(pipe_handle);
+ talloc_free(binding_handle);
return WERR_NOMEM;
}
@@ -306,7 +312,7 @@ static WERROR winreg_printer_openkey(TALLOC_CTX *mem_ctx,
ZERO_STRUCT(wkeyclass);
wkeyclass.name = "";
- status = rpccli_winreg_CreateKey(pipe_handle,
+ status = dcerpc_winreg_CreateKey(binding_handle,
mem_ctx,
hive_handle,
wkey,
@@ -329,7 +335,7 @@ static WERROR winreg_printer_openkey(TALLOC_CTX *mem_ctx,
break;
}
} else {
- status = rpccli_winreg_OpenKey(pipe_handle,
+ status = dcerpc_winreg_OpenKey(binding_handle,
mem_ctx,
hive_handle,
wkey,
@@ -339,14 +345,15 @@ static WERROR winreg_printer_openkey(TALLOC_CTX *mem_ctx,
&result);
}
if (!NT_STATUS_IS_OK(status)) {
- talloc_free(pipe_handle);
- if (!W_ERROR_IS_OK(result)) {
- return result;
- }
+ talloc_free(binding_handle);
return ntstatus_to_werror(status);
}
+ if (!W_ERROR_IS_OK(result)) {
+ talloc_free(binding_handle);
+ return result;
+ }
- *winreg_pipe = pipe_handle;
+ *winreg_binding_handle = binding_handle;
return WERR_OK;
}
@@ -371,7 +378,7 @@ static char *winreg_printer_data_keyname(TALLOC_CTX *mem_ctx, const char *printe
*
* @param[in] mem_ctx The memory context to use.
*
- * @param[in] pipe_handle The pipe handle for the rpc connection.
+ * @param[in] winreg_handle The binding handle for the rpc connection.
*
* @param[in] key_hnd The opened key handle.
*
@@ -383,7 +390,7 @@ static char *winreg_printer_data_keyname(TALLOC_CTX *mem_ctx, const char *printe
* code if something gone wrong.
*/
static WERROR winreg_printer_enumvalues(TALLOC_CTX *mem_ctx,
- struct rpc_pipe_client *pipe_handle,
+ struct dcerpc_binding_handle *winreg_handle,
struct policy_handle *key_hnd,
uint32_t *pnum_values,
struct spoolss_PrinterEnumValues **penum_values)
@@ -408,7 +415,7 @@ static WERROR winreg_printer_enumvalues(TALLOC_CTX *mem_ctx,
ZERO_STRUCT(classname);
- status = rpccli_winreg_QueryInfoKey(pipe_handle,
+ status = dcerpc_winreg_QueryInfoKey(winreg_handle,
tmp_ctx,
key_hnd,
&classname,
@@ -424,12 +431,14 @@ static WERROR winreg_printer_enumvalues(TALLOC_CTX *mem_ctx,
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("winreg_printer_enumvalues: Could not query info: %s\n",
nt_errstr(status)));
- if (!W_ERROR_IS_OK(result)) {
- goto error;
- }
result = ntstatus_to_werror(status);
goto error;
}
+ if (!W_ERROR_IS_OK(result)) {
+ DEBUG(0, ("winreg_printer_enumvalues: Could not query info: %s\n",
+ win_errstr(result)));
+ goto error;
+ }
if (num_values == 0) {
*pnum_values = 0;
@@ -463,7 +472,7 @@ static WERROR winreg_printer_enumvalues(TALLOC_CTX *mem_ctx,
}
length = 0;
- status = rpccli_winreg_EnumValue(pipe_handle,
+ status = dcerpc_winreg_EnumValue(winreg_handle,
tmp_ctx,
key_hnd,
i,
@@ -482,12 +491,14 @@ static WERROR winreg_printer_enumvalues(TALLOC_CTX *mem_ctx,
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("winreg_printer_enumvalues: Could not enumerate values: %s\n",
nt_errstr(status)));
- if (!W_ERROR_IS_OK(result)) {
- goto error;
- }
result = ntstatus_to_werror(status);
goto error;
}
+ if (!W_ERROR_IS_OK(result)) {
+ DEBUG(0, ("winreg_printer_enumvalues: Could not enumerate values: %s\n",
+ win_errstr(result)));
+ goto error;
+ }
if (name_buf.name == NULL) {
result = WERR_INVALID_PARAMETER;
@@ -535,7 +546,7 @@ static WERROR winreg_printer_enumvalues(TALLOC_CTX *mem_ctx,
*
* @param[in] mem_ctx The memory context to use.
*
- * @param[in] pipe_handle The pipe handle for the rpc connection.
+ * @param[in] winreg_handle The binding handle for the rpc connection.
*
* @param[in] key_hnd The opened key handle.
*
@@ -548,7 +559,7 @@ static WERROR winreg_printer_enumvalues(TALLOC_CTX *mem_ctx,
* code if something gone wrong.
*/
static WERROR winreg_printer_enumkeys(TALLOC_CTX *mem_ctx,
- struct rpc_pipe_client *pipe_handle,
+ struct dcerpc_binding_handle *winreg_handle,
struct policy_handle *key_hnd,
uint32_t *pnum_subkeys,
const char ***psubkeys)
@@ -571,7 +582,7 @@ static WERROR winreg_printer_enumkeys(TALLOC_CTX *mem_ctx,
ZERO_STRUCT(classname);
- status = rpccli_winreg_QueryInfoKey(pipe_handle,
+ status = dcerpc_winreg_QueryInfoKey(winreg_handle,
tmp_ctx,
key_hnd,
&classname,
@@ -587,12 +598,14 @@ static WERROR winreg_printer_enumkeys(TALLOC_CTX *mem_ctx,
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("winreg_printer_enumkeys: Could not query info: %s\n",
nt_errstr(status)));
- if (!W_ERROR_IS_OK(result)) {
- goto error;
- }
result = ntstatus_to_werror(status);
goto error;
}
+ if (!W_ERROR_IS_OK(result)) {
+ DEBUG(0, ("winreg_printer_enumkeys: Could not query info: %s\n",
+ win_errstr(result)));
+ goto error;
+ }
subkeys = talloc_zero_array(tmp_ctx, const char *, num_subkeys + 2);
if (subkeys == NULL) {
@@ -633,7 +646,7 @@ static WERROR winreg_printer_enumkeys(TALLOC_CTX *mem_ctx,
ZERO_STRUCT(modtime);
- status = rpccli_winreg_EnumKey(pipe_handle,
+ status = dcerpc_winreg_EnumKey(winreg_handle,
tmp_ctx,
key_hnd,
i,
@@ -650,12 +663,14 @@ static WERROR winreg_printer_enumkeys(TALLOC_CTX *mem_ctx,
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("winreg_printer_enumkeys: Could not enumerate keys: %s\n",
nt_errstr(status)));
- if (!W_ERROR_IS_OK(result)) {
- goto error;
- }
result = ntstatus_to_werror(status);
goto error;
}
+ if (!W_ERROR_IS_OK(result)) {
+ DEBUG(0, ("winreg_printer_enumkeys: Could not enumerate keys: %s\n",
+ win_errstr(result)));
+ goto error;
+ }
if (name_buf.name == NULL) {
result = WERR_INVALID_PARAMETER;
@@ -688,7 +703,7 @@ static WERROR winreg_printer_enumkeys(TALLOC_CTX *mem_ctx,
*
* @param[in] mem_ctx The memory context to use.
*
- * @param[in] pipe_handle The pipe handle for the rpc connection.
+ * @param[in] winreg_handle The binding handle for the rpc connection.
*
* @param[in] hive_handle A opened hive handle to the key.
*
@@ -700,7 +715,7 @@ static WERROR winreg_printer_enumkeys(TALLOC_CTX *mem_ctx,
* code if something gone wrong.
*/
static WERROR winreg_printer_delete_subkeys(TALLOC_CTX *mem_ctx,
- struct rpc_pipe_client *pipe_handle,
+ struct dcerpc_binding_handle *winreg_handle,
struct policy_handle *hive_handle,
uint32_t access_mask,
const char *key)
@@ -718,7 +733,7 @@ static WERROR winreg_printer_delete_subkeys(TALLOC_CTX *mem_ctx,
DEBUG(2, ("winreg_printer_delete_subkeys: delete key %s\n", key));
/* open the key */
- status = rpccli_winreg_OpenKey(pipe_handle,
+ status = dcerpc_winreg_OpenKey(winreg_handle,
mem_ctx,
hive_handle,
wkey,
@@ -729,14 +744,16 @@ static WERROR winreg_printer_delete_subkeys(TALLOC_CTX *mem_ctx,
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("winreg_printer_delete_subkeys: Could not open key %s: %s\n",
wkey.name, nt_errstr(status)));
- if (!W_ERROR_IS_OK(result)) {
- return result;
- }
return ntstatus_to_werror(status);
}
+ if (!W_ERROR_IS_OK(result)) {
+ DEBUG(0, ("winreg_printer_delete_subkeys: Could not open key %s: %s\n",
+ wkey.name, win_errstr(result)));
+ return result;
+ }
result = winreg_printer_enumkeys(mem_ctx,
- pipe_handle,
+ winreg_handle,
&key_hnd,
&num_subkeys,
&subkeys);
@@ -753,7 +770,7 @@ static WERROR winreg_printer_delete_subkeys(TALLOC_CTX *mem_ctx,
DEBUG(2, ("winreg_printer_delete_subkeys: delete subkey %s\n", subkey));
result = winreg_printer_delete_subkeys(mem_ctx,
- pipe_handle,
+ winreg_handle,
hive_handle,
access_mask,
subkey);
@@ -763,27 +780,33 @@ static WERROR winreg_printer_delete_subkeys(TALLOC_CTX *mem_ctx,
}
if (is_valid_policy_hnd(&key_hnd)) {
- rpccli_winreg_CloseKey(pipe_handle, mem_ctx, &key_hnd, NULL);
+ WERROR ignore;
+ dcerpc_winreg_CloseKey(winreg_handle, mem_ctx, &key_hnd, &ignore);
}
wkey.name = key;
- status = rpccli_winreg_DeleteKey(pipe_handle,
+ status = dcerpc_winreg_DeleteKey(winreg_handle,
mem_ctx,
hive_handle,
wkey,
&result);
+ if (!NT_STATUS_IS_OK(status)) {
+ result = ntstatus_to_werror(status);
+ }
done:
if (is_valid_policy_hnd(&key_hnd)) {
- rpccli_winreg_CloseKey(pipe_handle, mem_ctx, &key_hnd, NULL);
+ WERROR ignore;
+
+ dcerpc_winreg_CloseKey(winreg_handle, mem_ctx, &key_hnd, &ignore);
}
return result;
}
static WERROR winreg_printer_write_sz(TALLOC_CTX *mem_ctx,
- struct rpc_pipe_client *pipe_handle,
+ struct dcerpc_binding_handle *winreg_handle,
struct policy_handle *key_handle,
const char *value,
const char *data)
@@ -803,7 +826,7 @@ static WERROR winreg_printer_write_sz(TALLOC_CTX *mem_ctx,
return WERR_NOMEM;
}
}
- status = rpccli_winreg_SetValue(pipe_handle,
+ status = dcerpc_winreg_SetValue(winreg_handle,
mem_ctx,
key_handle,
wvalue,
@@ -812,18 +835,18 @@ static WERROR winreg_printer_write_sz(TALLOC_CTX *mem_ctx,
blob.length,
&result);
if (!NT_STATUS_IS_OK(status)) {
+ result = ntstatus_to_werror(status);
+ }
+ if (!W_ERROR_IS_OK(result)) {
DEBUG(0, ("winreg_printer_write_sz: Could not set value %s: %s\n",
wvalue.name, win_errstr(result)));
- if (!W_ERROR_IS_OK(result)) {
- result = ntstatus_to_werror(status);
- }
}
return result;
}
static WERROR winreg_printer_write_dword(TALLOC_CTX *mem_ctx,
- struct rpc_pipe_client *pipe_handle,
+ struct dcerpc_binding_handle *winreg_handle,
struct policy_handle *key_handle,
const char *value,
uint32_t data)
@@ -837,7 +860,7 @@ static WERROR winreg_printer_write_dword(TALLOC_CTX *mem_ctx,
blob = data_blob_talloc(mem_ctx, NULL, 4);
SIVAL(blob.data, 0, data);
- status = rpccli_winreg_SetValue(pipe_handle,
+ status = dcerpc_winreg_SetValue(winreg_handle,
mem_ctx,
key_handle,
wvalue,
@@ -846,18 +869,18 @@ static WERROR winreg_printer_write_dword(TALLOC_CTX *mem_ctx,
blob.length,
&result);
if (!NT_STATUS_IS_OK(status)) {
+ result = ntstatus_to_werror(status);
+ }
+ if (!W_ERROR_IS_OK(result)) {
DEBUG(0, ("winreg_printer_write_dword: Could not set value %s: %s\n",
wvalue.name, win_errstr(result)));
- if (!W_ERROR_IS_OK(result)) {
- result = ntstatus_to_werror(status);
- }
}
return result;
}
static WERROR winreg_printer_write_binary(TALLOC_CTX *mem_ctx,
- struct rpc_pipe_client *pipe_handle,
+ struct dcerpc_binding_handle *winreg_handle,
struct policy_handle *key_handle,
const char *value,
DATA_BLOB blob)
@@ -867,7 +890,7 @@ static WERROR winreg_printer_write_binary(TALLOC_CTX *mem_ctx,
NTSTATUS status;
wvalue.name = value;
- status = rpccli_winreg_SetValue(pipe_handle,
+ status = dcerpc_winreg_SetValue(winreg_handle,
mem_ctx,
key_handle,
wvalue,
@@ -876,18 +899,18 @@ static WERROR winreg_printer_write_binary(TALLOC_CTX *mem_ctx,
blob.length,
&result);
if (!NT_STATUS_IS_OK(status)) {
+ result = ntstatus_to_werror(status);
+ }
+ if (!W_ERROR_IS_OK(result)) {
DEBUG(0, ("winreg_printer_write_binary: Could not set value %s: %s\n",
wvalue.name, win_errstr(result)));
- if (!W_ERROR_IS_OK(result)) {
- result = ntstatus_to_werror(status);
- }
}
return result;
}
static WERROR winreg_printer_query_binary(TALLOC_CTX *mem_ctx,
- struct rpc_pipe_client *pipe_handle,
+ struct dcerpc_binding_handle *winreg_handle,
struct policy_handle *key_handle,
const char *value,
DATA_BLOB *data)
@@ -901,7 +924,7 @@ static WERROR winreg_printer_query_binary(TALLOC_CTX *mem_ctx,
DATA_BLOB blob;
wvalue.name = value;
- status = rpccli_winreg_QueryValue(pipe_handle,
+ status = dcerpc_winreg_QueryValue(winreg_handle,
mem_ctx,
key_handle,
&wvalue,
@@ -911,12 +934,11 @@ static WERROR winreg_printer_query_binary(TALLOC_CTX *mem_ctx,
&value_len,
&result);
if (!NT_STATUS_IS_OK(status)) {
- DEBUG(2, ("winreg_printer_query_binary: 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);
+ }
+ if (!W_ERROR_IS_OK(result)) {
+ DEBUG(2, ("winreg_printer_query_binary: Could not query value %s: %s\n",
+ wvalue.name, win_errstr(result)));
goto done;
}
@@ -931,7 +953,7 @@ static WERROR winreg_printer_query_binary(TALLOC_CTX *mem_ctx,
}
value_len = 0;
- status = rpccli_winreg_QueryValue(pipe_handle,
+ status = dcerpc_winreg_QueryValue(winreg_handle,
mem_ctx,
key_handle,
&wvalue,
--
Samba Shared Repository
More information about the samba-cvs
mailing list