[SCM] Samba Shared Repository - branch v3-6-test updated

Andreas Schneider asn at samba.org
Fri Jan 21 07:20:53 MST 2011


The branch, v3-6-test has been updated
       via  3f8b53e s3:printing: use dcerpc_spoolss_X() functions
       via  281bb10 s3:srv_spoolss: use dcerpc_spoolss_X() functions
       via  fc01d4a s3:smbd: use dcerpc_spoolss_X() functions
       via  5ccc142 s3:net: use dcerpc_spoolss_X() functions
       via  7042891 s3:libads: use dcerpc_spoolss_X() functions
      from  a554efc s3:docs: document "winbind max domain connections"

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test


- Log -----------------------------------------------------------------
commit 3f8b53e6bb2d3fbb5bd802a461373b0403789320
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jan 15 12:06:09 2011 +0100

    s3:printing: use dcerpc_spoolss_X() functions
    
    metze
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    
    Autobuild-User: Andreas Schneider <asn at samba.org>
    Autobuild-Date: Fri Jan 21 13:14:49 CET 2011 on sn-devel-104
    (cherry picked from commit 7a2fa9fc1cf5b26419c9cd915e85030c7f14e764)

commit 281bb107a70da21744362bd95936fc384cc5674c
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jan 15 11:55:39 2011 +0100

    s3:srv_spoolss: use dcerpc_spoolss_X() functions
    
    metze
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    (cherry picked from commit 1f8332526102e879c8a8f847d6b43efaf69d03ba)

commit fc01d4ab45706aae9b086c63537eb2994953d064
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jan 15 11:53:11 2011 +0100

    s3:smbd: use dcerpc_spoolss_X() functions
    
    metze
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    (cherry picked from commit e830e37c9c0ef6597e92e31915b2f41310ac1cad)

commit 5ccc1421236fd86995073fcc502b5babd36ebe15
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jan 15 11:50:59 2011 +0100

    s3:net: use dcerpc_spoolss_X() functions
    
    metze
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    (cherry picked from commit 81443447a116460911a9235a8f9a60e3c8dea502)

commit 7042891e1c5ce5727670c3bc01c057727edc0bae
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jan 15 11:44:23 2011 +0100

    s3:libads: use dcerpc_spoolss_X() functions
    
    metze
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    (cherry picked from commit a34aa148ca9789ddd7f1f09d548e7c2668876151)

-----------------------------------------------------------------------

Summary of changes:
 source3/libads/ldap_printer.c          |    6 +-
 source3/printing/nt_printing_migrate.c |  107 +++++++++++++-------
 source3/printing/printspoolss.c        |   24 ++--
 source3/rpc_server/srv_spoolss_nt.c    |   37 +++++--
 source3/smbd/lanman.c                  |   72 ++++++++-----
 source3/smbd/reply.c                   |   10 +-
 source3/utils/net_printing.c           |   44 +++++++--
 source3/utils/net_rpc_printer.c        |  175 ++++++++++++++++++++++----------
 8 files changed, 320 insertions(+), 155 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/libads/ldap_printer.c b/source3/libads/ldap_printer.c
index e4a7d34..e4bfbce 100644
--- a/source3/libads/ldap_printer.c
+++ b/source3/libads/ldap_printer.c
@@ -19,7 +19,7 @@
 
 #include "includes.h"
 #include "ads.h"
-#include "../librpc/gen_ndr/cli_spoolss.h"
+#include "../librpc/gen_ndr/ndr_spoolss_c.h"
 #include "rpc_client/cli_spoolss.h"
 #include "registry.h"
 #include "registry/reg_objects.h"
@@ -315,12 +315,14 @@ WERROR get_remote_printer_publishing_data(struct rpc_pipe_client *cli,
 					  ADS_MODLIST *mods,
 					  const char *printer)
 {
+	struct dcerpc_binding_handle *b = cli->binding_handle;
 	WERROR result;
 	char *printername;
 	struct spoolss_PrinterEnumValues *info;
 	uint32_t count;
 	uint32 i;
 	struct policy_handle pol;
+	WERROR werr;
 
 	if ((asprintf(&printername, "%s\\%s", cli->srv_name_slash, printer) == -1)) {
 		DEBUG(3, ("Insufficient memory\n"));
@@ -392,7 +394,7 @@ WERROR get_remote_printer_publishing_data(struct rpc_pipe_client *cli,
 
 	ads_mod_str(mem_ctx, mods, SPOOL_REG_PRINTERNAME, printer);
 
-	rpccli_spoolss_ClosePrinter(cli, mem_ctx, &pol, NULL);
+	dcerpc_spoolss_ClosePrinter(b, mem_ctx, &pol, &werr);
 	SAFE_FREE(printername);
 
 	return result;
diff --git a/source3/printing/nt_printing_migrate.c b/source3/printing/nt_printing_migrate.c
index c646676..61fb9a6 100644
--- a/source3/printing/nt_printing_migrate.c
+++ b/source3/printing/nt_printing_migrate.c
@@ -22,7 +22,7 @@
 #include "printing/nt_printing_migrate.h"
 
 #include "librpc/gen_ndr/ndr_ntprinting.h"
-#include "librpc/gen_ndr/cli_spoolss.h"
+#include "librpc/gen_ndr/ndr_spoolss_c.h"
 #include "rpc_client/cli_spoolss.h"
 #include "librpc/gen_ndr/ndr_security.h"
 #include "rpc_server/rpc_ncacn_np.h"
@@ -38,6 +38,7 @@ static NTSTATUS migrate_form(TALLOC_CTX *mem_ctx,
 			 unsigned char *data,
 			 size_t length)
 {
+	struct dcerpc_binding_handle *b = pipe_hnd->binding_handle;
 	struct spoolss_DevmodeContainer devmode_ctr;
 	struct policy_handle hnd;
 	enum ndr_err_code ndr_err;
@@ -76,7 +77,7 @@ static NTSTATUS migrate_form(TALLOC_CTX *mem_ctx,
 
 	ZERO_STRUCT(devmode_ctr);
 
-	status = rpccli_spoolss_OpenPrinter(pipe_hnd,
+	status = dcerpc_spoolss_OpenPrinter(b,
 					    mem_ctx,
 					    srv_name_slash,
 					    NULL,
@@ -85,13 +86,16 @@ static NTSTATUS migrate_form(TALLOC_CTX *mem_ctx,
 					    &hnd,
 					    &result);
 	if (!NT_STATUS_IS_OK(status)) {
-		if (!W_ERROR_IS_OK(result)) {
-			status = werror_to_ntstatus(result);
-		}
-		DEBUG(2, ("OpenPrinter(%s) failed: %s\n",
+		DEBUG(2, ("dcerpc_spoolss_OpenPrinter(%s) failed: %s\n",
 			  srv_name_slash, nt_errstr(status)));
 		return status;
 	}
+	if (!W_ERROR_IS_OK(result)) {
+		DEBUG(2, ("OpenPrinter(%s) failed: %s\n",
+			  srv_name_slash, win_errstr(result)));
+		status = werror_to_ntstatus(result);
+		return status;
+	}
 
 	f1.form_name = key_name;
 	f1.flags = r.flag;
@@ -106,18 +110,22 @@ static NTSTATUS migrate_form(TALLOC_CTX *mem_ctx,
 
 	f.info1 = &f1;
 
-	status = rpccli_spoolss_AddForm(pipe_hnd,
+	status = dcerpc_spoolss_AddForm(b,
 					mem_ctx,
 					&hnd,
 					1,
 					f,
 					&result);
 	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(2, ("AddForm(%s) refused -- %s.\n",
+		DEBUG(2, ("dcerpc_spoolss_AddForm(%s) refused -- %s.\n",
 			  f.info1->form_name, nt_errstr(status)));
+	} else if (!W_ERROR_IS_OK(result)) {
+		DEBUG(2, ("AddForm(%s) refused -- %s.\n",
+			  f.info1->form_name, win_errstr(result)));
+		status = werror_to_ntstatus(result);
 	}
 
-	rpccli_spoolss_ClosePrinter(pipe_hnd, mem_ctx, &hnd, NULL);
+	dcerpc_spoolss_ClosePrinter(b, mem_ctx, &hnd, &result);
 
 	return status;
 }
@@ -128,6 +136,7 @@ static NTSTATUS migrate_driver(TALLOC_CTX *mem_ctx,
 			       unsigned char *data,
 			       size_t length)
 {
+	struct dcerpc_binding_handle *b = pipe_hnd->binding_handle;
 	const char *srv_name_slash;
 	enum ndr_err_code ndr_err;
 	struct ntprinting_driver r;
@@ -176,17 +185,18 @@ static NTSTATUS migrate_driver(TALLOC_CTX *mem_ctx,
 	d.level = 3;
 	d.info.info3 = &d3;
 
-	status = rpccli_spoolss_AddPrinterDriver(pipe_hnd,
+	status = dcerpc_spoolss_AddPrinterDriver(b,
 						 mem_ctx,
 						 srv_name_slash,
 						 &d,
 						 &result);
 	if (!NT_STATUS_IS_OK(status)) {
-		if (!W_ERROR_IS_OK(result)) {
-			status = werror_to_ntstatus(result);
-		}
-		DEBUG(2, ("AddPrinterDriver(%s) refused -- %s.\n",
+		DEBUG(2, ("dcerpc_spoolss_AddPrinterDriver(%s) refused -- %s.\n",
 			  d3.driver_name, nt_errstr(status)));
+	} else if (!W_ERROR_IS_OK(result)) {
+		DEBUG(2, ("AddPrinterDriver(%s) refused -- %s.\n",
+			  d3.driver_name, win_errstr(result)));
+		status = werror_to_ntstatus(result);
 	}
 
 	return status;
@@ -198,6 +208,7 @@ static NTSTATUS migrate_printer(TALLOC_CTX *mem_ctx,
 				unsigned char *data,
 				size_t length)
 {
+	struct dcerpc_binding_handle *b = pipe_hnd->binding_handle;
 	struct policy_handle hnd;
 	enum ndr_err_code ndr_err;
 	struct ntprinting_printer r;
@@ -231,7 +242,7 @@ static NTSTATUS migrate_printer(TALLOC_CTX *mem_ctx,
 
 	ZERO_STRUCT(devmode_ctr);
 
-	status = rpccli_spoolss_OpenPrinter(pipe_hnd,
+	status = dcerpc_spoolss_OpenPrinter(b,
 					    mem_ctx,
 					    key_name,
 					    NULL,
@@ -240,11 +251,14 @@ static NTSTATUS migrate_printer(TALLOC_CTX *mem_ctx,
 					    &hnd,
 					    &result);
 	if (!NT_STATUS_IS_OK(status)) {
-		if (!W_ERROR_IS_OK(result)) {
-			status = werror_to_ntstatus(result);
-		}
+		DEBUG(2, ("dcerpc_spoolss_OpenPrinter(%s) failed: %s\n",
+			  key_name, nt_errstr(status)));
+		return status;
+	}
+	if (!W_ERROR_IS_OK(result)) {
 		DEBUG(2, ("OpenPrinter(%s) failed: %s\n",
 			  key_name, win_errstr(result)));
+		status = werror_to_ntstatus(result);
 		return status;
 	}
 
@@ -320,7 +334,7 @@ static NTSTATUS migrate_printer(TALLOC_CTX *mem_ctx,
 	info_ctr.info.info2 = &info2;
 	info_ctr.level = 2;
 
-	status = rpccli_spoolss_SetPrinter(pipe_hnd,
+	status = dcerpc_spoolss_SetPrinter(b,
 					   mem_ctx,
 					   &hnd,
 					   &info_ctr,
@@ -329,10 +343,16 @@ static NTSTATUS migrate_printer(TALLOC_CTX *mem_ctx,
 					   0, /* command */
 					   &result);
 	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(2, ("SetPrinter(%s) level 2 refused -- %s.\n",
+		DEBUG(2, ("dcerpc_spoolss_SetPrinter(%s) level 2 refused -- %s.\n",
 			  key_name, nt_errstr(status)));
 		goto done;
 	}
+	if (!W_ERROR_IS_OK(result)) {
+		DEBUG(2, ("SetPrinter(%s) level 2 refused -- %s.\n",
+			  key_name, win_errstr(result)));
+		status = werror_to_ntstatus(result);
+		goto done;
+	}
 
 	/* migrate printerdata */
 	for (j = 0; j < r.count; j++) {
@@ -352,7 +372,7 @@ static NTSTATUS migrate_printer(TALLOC_CTX *mem_ctx,
 			valuename++;
 		}
 
-		status = rpccli_spoolss_SetPrinterDataEx(pipe_hnd,
+		status = dcerpc_spoolss_SetPrinterDataEx(b,
 							 mem_ctx,
 							 &hnd,
 							 keyname,
@@ -362,16 +382,25 @@ static NTSTATUS migrate_printer(TALLOC_CTX *mem_ctx,
 							 r.printer_data[j].data.length,
 							 &result);
 		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(2, ("SetPrinterDataEx: printer [%s], keyname [%s], "
+			DEBUG(2, ("dcerpc_spoolss_SetPrinterDataEx: "
+				  "printer [%s], keyname [%s], "
 				  "valuename [%s] refused -- %s.\n",
 				  key_name, keyname, valuename,
 				  nt_errstr(status)));
 			break;
 		}
+		if (!W_ERROR_IS_OK(result)) {
+			DEBUG(2, ("SetPrinterDataEx: printer [%s], keyname [%s], "
+				  "valuename [%s] refused -- %s.\n",
+				  key_name, keyname, valuename,
+				  win_errstr(result)));
+			status = werror_to_ntstatus(result);
+			break;
+		}
 	}
 
  done:
-	rpccli_spoolss_ClosePrinter(pipe_hnd, mem_ctx, &hnd, NULL);
+	dcerpc_spoolss_ClosePrinter(b, mem_ctx, &hnd, &result);
 
 	return status;
 }
@@ -382,6 +411,7 @@ static NTSTATUS migrate_secdesc(TALLOC_CTX *mem_ctx,
 				unsigned char *data,
 				size_t length)
 {
+	struct dcerpc_binding_handle *b = pipe_hnd->binding_handle;
 	struct policy_handle hnd;
 	enum ndr_err_code ndr_err;
 	struct sec_desc_buf secdesc_ctr;
@@ -412,7 +442,7 @@ static NTSTATUS migrate_secdesc(TALLOC_CTX *mem_ctx,
 
 	ZERO_STRUCT(devmode_ctr);
 
-	status = rpccli_spoolss_OpenPrinter(pipe_hnd,
+	status = dcerpc_spoolss_OpenPrinter(b,
 					    mem_ctx,
 					    key_name,
 					    NULL,
@@ -421,17 +451,20 @@ static NTSTATUS migrate_secdesc(TALLOC_CTX *mem_ctx,
 					    &hnd,
 					    &result);
 	if (!NT_STATUS_IS_OK(status)) {
-		if (W_ERROR_EQUAL(WERR_INVALID_PRINTER_NAME, result)) {
-			DEBUG(3, ("Ignoring missing printer %s\n", key_name));
-			return NT_STATUS_OK;
-		}
-		if (!W_ERROR_IS_OK(result)) {
-			status = werror_to_ntstatus(result);
-		}
-		DEBUG(2, ("OpenPrinter(%s) failed: %s\n",
+		DEBUG(2, ("dcerpc_spoolss_OpenPrinter(%s) failed: %s\n",
 			  key_name, nt_errstr(status)));
 		return status;
 	}
+	if (W_ERROR_EQUAL(WERR_INVALID_PRINTER_NAME, result)) {
+		DEBUG(3, ("Ignoring missing printer %s\n", key_name));
+		return NT_STATUS_OK;
+	}
+	if (!W_ERROR_IS_OK(result)) {
+		DEBUG(2, ("OpenPrinter(%s) failed: %s\n",
+			  key_name, win_errstr(result)));
+		status = werror_to_ntstatus(result);
+		return status;
+	}
 
 	ZERO_STRUCT(devmode_ctr);
 
@@ -440,7 +473,7 @@ static NTSTATUS migrate_secdesc(TALLOC_CTX *mem_ctx,
 	info_ctr.info.info3 = &info3;
 	info_ctr.level = 3;
 
-	status = rpccli_spoolss_SetPrinter(pipe_hnd,
+	status = dcerpc_spoolss_SetPrinter(b,
 					   mem_ctx,
 					   &hnd,
 					   &info_ctr,
@@ -449,11 +482,15 @@ static NTSTATUS migrate_secdesc(TALLOC_CTX *mem_ctx,
 					   0, /* command */
 					   &result);
 	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(2, ("SetPrinter(%s) level 3 refused -- %s.\n",
+		DEBUG(2, ("dcerpc_spoolss_SetPrinter(%s) level 3 refused -- %s.\n",
 			  key_name, nt_errstr(status)));
+	} else if (!W_ERROR_IS_OK(result)) {
+		DEBUG(2, ("SetPrinter(%s) level 3 refused -- %s.\n",
+			  key_name, win_errstr(result)));
+		status = werror_to_ntstatus(result);
 	}
 
-	rpccli_spoolss_ClosePrinter(pipe_hnd, mem_ctx, &hnd, NULL);
+	dcerpc_spoolss_ClosePrinter(b, mem_ctx, &hnd, &result);
 
 	return status;
 }
diff --git a/source3/printing/printspoolss.c b/source3/printing/printspoolss.c
index 8effb6e..9b06ece 100644
--- a/source3/printing/printspoolss.c
+++ b/source3/printing/printspoolss.c
@@ -19,7 +19,7 @@
 
 #include "includes.h"
 #include "printing.h"
-#include "../librpc/gen_ndr/cli_spoolss.h"
+#include "../librpc/gen_ndr/ndr_spoolss_c.h"
 #include "rpc_server/rpc_ncacn_np.h"
 #include "smbd/globals.h"
 #include "../libcli/security/security.h"
@@ -43,7 +43,7 @@ NTSTATUS print_spool_open(files_struct *fsp,
 	NTSTATUS status;
 	TALLOC_CTX *tmp_ctx;
 	struct print_file_data *pf;
-	struct rpc_pipe_client *cli;
+	struct dcerpc_binding_handle *b = NULL;
 	struct spoolss_DevmodeContainer devmode_ctr;
 	union spoolss_DocumentInfo info;
 	int fd = -1;
@@ -132,11 +132,11 @@ NTSTATUS print_spool_open(files_struct *fsp,
 	if (!NT_STATUS_IS_OK(status)) {
 		goto done;
 	}
-	cli = fsp->conn->spoolss_pipe;
+	b = fsp->conn->spoolss_pipe->binding_handle;
 
 	ZERO_STRUCT(devmode_ctr);
 
-	status = rpccli_spoolss_OpenPrinter(cli, pf, pf->svcname,
+	status = dcerpc_spoolss_OpenPrinter(b, pf, pf->svcname,
 					    "RAW", devmode_ctr,
 					    SEC_FLAG_MAXIMUM_ALLOWED,
 					    &pf->handle, &werr);
@@ -157,7 +157,7 @@ NTSTATUS print_spool_open(files_struct *fsp,
 	info.info1->output_file = pf->filename;
 	info.info1->datatype = "RAW";
 
-	status = rpccli_spoolss_StartDocPrinter(cli, tmp_ctx, &pf->handle,
+	status = dcerpc_spoolss_StartDocPrinter(b, tmp_ctx, &pf->handle,
 						1, info, &pf->jobid, &werr);
 	if (!NT_STATUS_IS_OK(status)) {
 		goto done;
@@ -272,9 +272,9 @@ int print_spool_write(files_struct *fsp,
 
 void print_spool_end(files_struct *fsp, enum file_close_type close_type)
 {
-	struct rpc_pipe_client *cli;
 	NTSTATUS status;
 	WERROR werr;
+	struct dcerpc_binding_handle *b = NULL;
 
 	status = rpc_pipe_open_interface(fsp->conn,
 					 &ndr_table_spoolss.syntax_id,
@@ -288,13 +288,13 @@ void print_spool_end(files_struct *fsp, enum file_close_type close_type)
 			  nt_errstr(status)));
 		return;
 	}
-	cli = fsp->conn->spoolss_pipe;
+	b = fsp->conn->spoolss_pipe->binding_handle;
 
 	switch (close_type) {
 	case NORMAL_CLOSE:
 	case SHUTDOWN_CLOSE:
 		/* this also automatically calls spoolss_EndDocPrinter */
-		status = rpccli_spoolss_ClosePrinter(cli, fsp->print_file,
+		status = dcerpc_spoolss_ClosePrinter(b, fsp->print_file,
 						&fsp->print_file->handle,
 						&werr);
 		if (!NT_STATUS_IS_OK(status) ||
@@ -313,9 +313,9 @@ void print_spool_end(files_struct *fsp, enum file_close_type close_type)
 void print_spool_terminate(struct connection_struct *conn,
 			   struct print_file_data *print_file)
 {
-	struct rpc_pipe_client *cli;
 	NTSTATUS status;
 	WERROR werr;
+	struct dcerpc_binding_handle *b = NULL;
 
 	rap_jobid_delete(print_file->svcname, print_file->jobid);
 
@@ -331,9 +331,9 @@ void print_spool_terminate(struct connection_struct *conn,
 			  nt_errstr(status)));
 		return;
 	}
-	cli = conn->spoolss_pipe;
+	b = conn->spoolss_pipe->binding_handle;
 
-	status = rpccli_spoolss_SetJob(cli, print_file,
+	status = dcerpc_spoolss_SetJob(b, print_file,
 					&print_file->handle,
 					print_file->jobid,
 					NULL, SPOOLSS_JOB_CONTROL_DELETE,
@@ -344,7 +344,7 @@ void print_spool_terminate(struct connection_struct *conn,
 			  print_file->jobid, nt_errstr(status)));
 		return;
 	}
-	status = rpccli_spoolss_ClosePrinter(cli, print_file,
+	status = dcerpc_spoolss_ClosePrinter(b, print_file,
 					     &print_file->handle,
 					     &werr);
 	if (!NT_STATUS_IS_OK(status) ||
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index 6f28ece..defffb6 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -31,7 +31,7 @@
 #include "nt_printing.h"
 #include "srv_spoolss_util.h"
 #include "../librpc/gen_ndr/srv_spoolss.h"
-#include "../librpc/gen_ndr/cli_spoolss.h"
+#include "../librpc/gen_ndr/ndr_spoolss_c.h"
 #include "rpc_client/init_spoolss.h"
 #include "librpc/gen_ndr/messaging.h"
 #include "../libcli/security/security.h"
@@ -124,6 +124,7 @@ struct notify_back_channel {
 
 	/* print notify back-channel pipe handle*/
 	struct rpc_pipe_client *cli_pipe;
+	struct dcerpc_binding_handle *binding_handle;
 	uint32_t active_connections;
 };
 
@@ -243,12 +244,16 @@ static void srv_spoolss_replycloseprinter(int snum,
 		return;
 	}
 
-	status = rpccli_spoolss_ReplyClosePrinter(
-					prn_hnd->notify.cli_chan->cli_pipe,
+	status = dcerpc_spoolss_ReplyClosePrinter(
+					prn_hnd->notify.cli_chan->binding_handle,
 					talloc_tos(),
 					&prn_hnd->notify.cli_hnd,
 					&result);
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(0, ("dcerpc_spoolss_ReplyClosePrinter failed [%s].\n",
+			  nt_errstr(status)));
+		result = ntstatus_to_werror(status);
+	} else if (!W_ERROR_IS_OK(result)) {
 		DEBUG(0, ("reply_close_printer failed [%s].\n",
 			  win_errstr(result)));
 	}
@@ -256,6 +261,7 @@ static void srv_spoolss_replycloseprinter(int snum,
 	/* if it's the last connection, deconnect the IPC$ share */
 	if (prn_hnd->notify.cli_chan->active_connections == 1) {
 
+		prn_hnd->notify.cli_chan->binding_handle = NULL;
 		cli_shutdown(rpc_pipe_np_smb_conn(prn_hnd->notify.cli_chan->cli_pipe));
 		DLIST_REMOVE(back_channels, prn_hnd->notify.cli_chan);
 		TALLOC_FREE(prn_hnd->notify.cli_chan);
@@ -1266,8 +1272,8 @@ static int send_notify2_printer(TALLOC_CTX *mem_ctx,
 
 	info.info0 = &info0;
 
-	status = rpccli_spoolss_RouterReplyPrinterEx(
-				prn_hnd->notify.cli_chan->cli_pipe,
+	status = dcerpc_spoolss_RouterReplyPrinterEx(
+				prn_hnd->notify.cli_chan->binding_handle,
 				mem_ctx,
 				&prn_hnd->notify.cli_hnd,
 				prn_hnd->notify.change, /* color */
@@ -1275,7 +1281,13 @@ static int send_notify2_printer(TALLOC_CTX *mem_ctx,
 				&reply_result,
 				0, /* reply_type, must be 0 */
 				info, &werr);
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(werr)) {
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(1, ("dcerpc_spoolss_RouterReplyPrinterEx to client: %s "
+			  "failed: %s\n",
+			  prn_hnd->notify.cli_chan->cli_pipe->srv_name_slash,
+			  nt_errstr(status)));
+		werr = ntstatus_to_werror(status);
+	} else if (!W_ERROR_IS_OK(werr)) {
 		DEBUG(1, ("RouterReplyPrinterEx to client: %s "
 			  "failed: %s\n",
 			  prn_hnd->notify.cli_chan->cli_pipe->srv_name_slash,
@@ -2577,6 +2589,7 @@ static bool srv_spoolss_replyopenprinter(int snum, const char *printer,
 			TALLOC_FREE(chan);
 			return false;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list