summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source4/rpc_server/spoolss/dcesrv_spoolss.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c
index cb892a6cb5..14929764e4 100644
--- a/source4/rpc_server/spoolss/dcesrv_spoolss.c
+++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c
@@ -1156,6 +1156,7 @@ static WERROR dcesrv_spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_
struct spoolss_RemoteFindFirstPrinterChangeNotifyEx *r)
{
struct dcerpc_pipe *p;
+ char *binding_string;
struct dcerpc_binding *binding;
NTSTATUS status;
struct spoolss_ReplyOpenPrinter rop;
@@ -1171,12 +1172,20 @@ static WERROR dcesrv_spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_
* and the torture suite passing
*/
- binding = talloc_zero(mem_ctx, struct dcerpc_binding);
-
- binding->transport = NCACN_NP;
- if (strncmp(r->in.local_machine, "\\\\", 2))
+ if (strncmp(r->in.local_machine, "\\\\", 2)) {
return WERR_INVALID_COMPUTERNAME;
- binding->host = r->in.local_machine+2;
+ }
+
+ binding_string = talloc_asprintf(mem_ctx, "ncacn_np:%s",
+ r->in.local_machine+2);
+ if (binding_string == NULL) {
+ return WERR_NOMEM;
+ }
+
+ status = dcerpc_parse_binding(mem_ctx, binding_string, &binding);
+ if (!NT_STATUS_IS_OK(status)) {
+ return ntstatus_to_werror(status);
+ }
creds = cli_credentials_init_anon(mem_ctx); /* FIXME: Use machine credentials instead ? */