+++ /dev/null
-From cd3082b03487eaeddb0105807b5ad39b47aa65f1 Mon Sep 17 00:00:00 2001
-From: Andreas Schneider <asn@samba.org>
-Date: Tue, 8 Nov 2016 12:20:41 +0100
-Subject: [PATCH] s3-spoolss: Remove printer from registry if it is unpublished
-
-BUG: https://bugzilla.samba.org/show_bug.cgi?id=11665
-
-Signed-off-by: Andreas Schneider <asn@samba.org>
-Reviewed-by: Guenther Deschner <gd@samba.org>
----
- source3/rpc_server/spoolss/srv_spoolss_nt.c | 34 ++++++++++++++++++++++++-----
- 1 file changed, 29 insertions(+), 5 deletions(-)
-
-diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c
-index 556cd4f..f1ab3fb 100644
---- a/source3/rpc_server/spoolss/srv_spoolss_nt.c
-+++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c
-@@ -4194,6 +4194,7 @@ static WERROR construct_printer_info7(TALLOC_CTX *mem_ctx,
- int snum)
- {
- struct auth_serversupplied_info *session_info;
-+ struct spoolss_PrinterInfo2 *pinfo2 = NULL;
- char *printer;
- NTSTATUS status;
- WERROR werr;
-@@ -4218,7 +4219,7 @@ static WERROR construct_printer_info7(TALLOC_CTX *mem_ctx,
- }
-
- if (is_printer_published(tmp_ctx, session_info, msg_ctx,
-- servername, printer, NULL)) {
-+ servername, printer, &pinfo2)) {
- struct GUID guid;
- werr = nt_printer_guid_get(tmp_ctx, session_info, msg_ctx,
- printer, &guid);
-@@ -4230,10 +4231,33 @@ static WERROR construct_printer_info7(TALLOC_CTX *mem_ctx,
- werr = nt_printer_guid_retrieve(tmp_ctx, printer,
- &guid);
- if (!W_ERROR_IS_OK(werr)) {
-- DEBUG(1, ("Failed to retrieve GUID for "
-- "printer [%s] from AD - "
-- "Is the the printer still "
-- "published ?\n", printer));
-+ DEBUG(3, ("Failed to retrieve GUID for "
-+ "printer [%s] from AD - %s\n",
-+ printer,
-+ win_errstr(werr)));
-+ if (W_ERROR_EQUAL(werr, WERR_FILE_NOT_FOUND)) {
-+ /*
-+ * If we did not find it in AD, then it
-+ * is unpublished and we should reflect
-+ * this in the registry and return
-+ * success.
-+ */
-+ DEBUG(1, ("Unpublish printer [%s]\n",
-+ pinfo2->sharename));
-+ nt_printer_publish(tmp_ctx,
-+ session_info,
-+ msg_ctx,
-+ pinfo2,
-+ DSPRINT_UNPUBLISH);
-+ r->guid = talloc_strdup(mem_ctx, "");
-+ r->action = DSPRINT_UNPUBLISH;
-+
-+ if (r->guid == NULL) {
-+ werr = WERR_NOT_ENOUGH_MEMORY;
-+ } else {
-+ werr = WERR_OK;
-+ }
-+ }
- goto out_tmp_free;
- }
-
---
-2.10.1
-