diff options
author | David Disseldorp <ddiss@samba.org> | 2014-05-21 21:55:58 +0200 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2014-05-21 23:31:13 +0200 |
commit | efb4684a3fc0b32a71eab013000f730e6b144a67 (patch) | |
tree | a74c9fbe44fd9643ce34571fb204eac322b33955 /source3/printing/printing.c | |
parent | 634f116fbb89d723a627f4501b4cd89342cecb8e (diff) | |
download | samba-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.c | 23 |
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); } } |