From d50bdfe95b10225e33697af97add7af21a975989 Mon Sep 17 00:00:00 2001 From: Samuel Cabrero Date: Thu, 21 Sep 2017 09:53:35 +0200 Subject: [PATCH] s3: spoolss: Fix GUID string format on GetPrinter info Fix regression introduced by commit a4157e7c5d75 which removed the braces around the printer GUID in the printer info level 7 structure. MS-RPRN section 2.2 says this protocol uses curly-braced GUIDs so printers are deleted from the directory by the domain controller's pruning service. BUG: https://bugzilla.samba.org/show_bug.cgi?id=12993 Signed-off-by: Samuel Cabrero Reviewed-by: David Disseldorp Reviewed-by: Jeremy Allison Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Fri Oct 6 05:21:25 CEST 2017 on sn-devel-144 (cherry picked from commit fc03049ca1721c25c6ad3d01cba2501af3f39b93) --- source3/rpc_server/spoolss/srv_spoolss_nt.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c index 9d99e74f395..fcc491e7662 100644 --- a/source3/rpc_server/spoolss/srv_spoolss_nt.c +++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c @@ -4238,7 +4238,7 @@ static WERROR construct_printer_info7(TALLOC_CTX *mem_ctx, if (is_printer_published(tmp_ctx, session_info, msg_ctx, servername, printer, &pinfo2)) { struct GUID guid; - struct GUID_txt_buf guid_txt; + char *guidstr; werr = nt_printer_guid_get(tmp_ctx, session_info, msg_ctx, printer, &guid); if (!W_ERROR_IS_OK(werr)) { @@ -4285,9 +4285,19 @@ static WERROR construct_printer_info7(TALLOC_CTX *mem_ctx, printer)); } } - r->guid = talloc_strdup_upper(mem_ctx, - GUID_buf_string(&guid, &guid_txt)); + + /* [MS-RPRN] section 2.2: must use curly-braced GUIDs */ + guidstr = GUID_string2(mem_ctx, &guid); + if (guidstr == NULL) { + werr = WERR_NOT_ENOUGH_MEMORY; + goto out_tmp_free; + } + /* Convert GUID string to uppercase otherwise printers + * are pruned */ + r->guid = talloc_strdup_upper(mem_ctx, guidstr); r->action = DSPRINT_PUBLISH; + + TALLOC_FREE(guidstr); } else { r->guid = talloc_strdup(mem_ctx, ""); r->action = DSPRINT_UNPUBLISH; -- 2.14.2