]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: spoolss: Fix GUID string format on GetPrinter info
authorSamuel Cabrero <scabrero@suse.de>
Thu, 21 Sep 2017 07:53:35 +0000 (09:53 +0200)
committerKarolin Seeger <kseeger@samba.org>
Wed, 25 Oct 2017 06:43:01 +0000 (08:43 +0200)
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 <scabrero@suse.de>
Reviewed-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
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

index 06f704de3716bafa435732487dc42dda17cb53fa..a9e778ee0231e39aeda1c7936b5ccc06cedbb077 100644 (file)
@@ -4263,7 +4263,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)) {
@@ -4310,9 +4310,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;