summaryrefslogtreecommitdiff
path: root/source3/printing/printing.c
diff options
context:
space:
mode:
authorDavid Disseldorp <ddiss@samba.org>2014-05-21 21:55:58 +0200
committerJeremy Allison <jra@samba.org>2014-05-21 23:31:13 +0200
commitefb4684a3fc0b32a71eab013000f730e6b144a67 (patch)
treea74c9fbe44fd9643ce34571fb204eac322b33955 /source3/printing/printing.c
parent634f116fbb89d723a627f4501b4cd89342cecb8e (diff)
downloadsamba-efb4684a3fc0b32a71eab013000f730e6b144a67.tar.gz
printing: fix purge of all print jobs
The incorrect (system) jobid is currently passed to the job deletion function. Bug: https://bugzilla.samba.org/show_bug.cgi?id=10612 Reported-by: Franz Pförtsch <franz.pfoertsch@brose.com> Signed-off-by: David Disseldorp <ddiss@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/printing/printing.c')
-rw-r--r--source3/printing/printing.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/source3/printing/printing.c b/source3/printing/printing.c
index 2c9eafa4272..fa4a2fc741c 100644
--- a/source3/printing/printing.c
+++ b/source3/printing/printing.c
@@ -3359,13 +3359,28 @@ WERROR print_queue_purge(const struct auth_session_info *server_info,
if ( can_job_admin )
become_root();
- for (i=0;i<njobs;i++) {
- bool owner = is_owner(server_info, lp_const_servicename(snum),
- queue[i].sysjob);
+ for (i = 0; i < njobs; i++) {
+ struct tdb_print_db *pdb;
+ int jobid;
+ bool owner;
+ pdb = get_print_db_byname(lp_const_servicename(snum));
+ if (pdb == NULL) {
+ DEBUG(1, ("failed to find printdb for %s\n",
+ lp_const_servicename(snum)));
+ continue;
+ }
+ jobid = sysjob_to_jobid_pdb(pdb, queue[i].sysjob);
+ if (jobid == (uint32_t)-1) {
+ DEBUG(2, ("jobid for system job %d not found\n",
+ queue[i].sysjob));
+ continue; /* unix job */
+ }
+ owner = is_owner(server_info, lp_const_servicename(snum),
+ jobid);
if (owner || can_job_admin) {
print_job_delete1(server_event_context(), msg_ctx,
- snum, queue[i].sysjob);
+ snum, jobid);
}
}