s4:rpc_server/spoolss: use dcerpc_parse_binding() to create the notify binding
authorStefan Metzmacher <metze@samba.org>
Thu, 30 Jan 2014 18:02:16 +0000 (19:02 +0100)
committerGünther Deschner <gd@samba.org>
Thu, 13 Feb 2014 10:54:14 +0000 (11:54 +0100)
This is much better than creating the binding by hand.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
source4/rpc_server/spoolss/dcesrv_spoolss.c

index cb892a6cb51c81a3e1fa02d55443e30e3ebed906..14929764e4d5b10e8f35c6e65d610923cae4d74c 100644 (file)
@@ -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 ? */