s3: smbd: printing: Re-implement delete-on-close semantics for print files missing...
authorJeremy Allison <jra@samba.org>
Thu, 31 May 2018 17:35:48 +0000 (10:35 -0700)
committerKarolin Seeger <kseeger@samba.org>
Tue, 19 Jun 2018 11:45:09 +0000 (13:45 +0200)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13457

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Fri Jun  1 20:32:03 CEST 2018 on sn-devel-144

(cherry picked from commit 364175b359f018c8641359440fa07b0ea567b045)

source3/printing/printspoolss.c

index 60002020351e9c80f2c76b610cdb16834a08fb2a..9d565de120ad44ecdc37f0051017da6a1b928d07 100644 (file)
@@ -309,6 +309,23 @@ void print_spool_end(files_struct *fsp, enum file_close_type close_type)
        WERROR werr;
        struct dcerpc_binding_handle *b = NULL;
 
+       if (fsp->fh->private_options &
+           NTCREATEX_OPTIONS_PRIVATE_DELETE_ON_CLOSE) {
+               int ret;
+
+               /*
+                * Job was requested to be cancelled by setting
+                * delete on close so truncate the job file.
+                * print_job_end() which is called from
+                * _spoolss_EndDocPrinter() will take
+                * care of deleting it for us.
+                */
+               ret = ftruncate(fsp->fh->fd, 0);
+               if (ret == -1) {
+                       DBG_ERR("ftruncate failed: %s\n", strerror(errno));
+               }
+       }
+
        b = fsp->conn->spoolss_pipe->binding_handle;
 
        switch (close_type) {