summaryrefslogtreecommitdiff
path: root/source3/printing/printing.c
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2004-01-14 20:57:31 +0000
committerGerald Carter <jerry@samba.org>2004-01-14 20:57:31 +0000
commit74aa29bd9ecf9bf74f04b36d8e0e0eb2080793d9 (patch)
tree31bc3b7c4bc3034a77f7541abc577cd583c8a496 /source3/printing/printing.c
parentfdac06716d063e14851a8d947a16362fbf521f73 (diff)
downloadsamba-74aa29bd9ecf9bf74f04b36d8e0e0eb2080793d9.tar.gz
samba-74aa29bd9ecf9bf74f04b36d8e0e0eb2080793d9.tar.bz2
samba-74aa29bd9ecf9bf74f04b36d8e0e0eb2080793d9.zip
bug 770; correct fix this time; Make sure that we send the SMBjobid for unix jobs back to the client. Allows windows client to remove print jobs submitted from lpr
(This used to be commit 6a7f9ebccd6a40455cb5446551f3d68ea9a7a824)
Diffstat (limited to 'source3/printing/printing.c')
-rw-r--r--source3/printing/printing.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/source3/printing/printing.c b/source3/printing/printing.c
index ae7291bfc7..1f0bb1e074 100644
--- a/source3/printing/printing.c
+++ b/source3/printing/printing.c
@@ -597,7 +597,7 @@ static void print_unix_job(int snum, print_queue_struct *q, uint32 jobid)
{
struct printjob pj, *old_pj;
- if (jobid == (uint32)-1)
+ if (jobid == (uint32)-1)
jobid = q->job + UNIX_JOB_START;
/* Preserve the timestamp on an existing unix print job */
@@ -671,9 +671,11 @@ static int traverse_fn_delete(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void
DEBUG(10,("traverse_fn_delete: pjob %u deleted due to !smbjob\n",
(unsigned int)jobid ));
pjob_delete(ts->snum, jobid);
- } else
- ts->total_jobs++;
- return 0;
+ return 0;
+ }
+
+ /* need to continue the the bottom of the function to
+ save the correct attributes */
}
/* maybe it hasn't been spooled yet */
@@ -690,10 +692,14 @@ static int traverse_fn_delete(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void
return 0;
}
- for (i=0;i<ts->qcount;i++) {
- uint32 curr_jobid = print_parse_jobid(ts->queue[i].fs_file);
- if (jobid == curr_jobid)
- break;
+ /* this check only makes sense for jobs submitted from Windows clients */
+
+ if ( pjob.smbjob ) {
+ for (i=0;i<ts->qcount;i++) {
+ uint32 curr_jobid = print_parse_jobid(ts->queue[i].fs_file);
+ if (jobid == curr_jobid)
+ break;
+ }
}
/* The job isn't in the system queue - we have to assume it has
@@ -720,7 +726,9 @@ static int traverse_fn_delete(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void
}
/* Save the pjob attributes we will store. */
- ts->queue[i].job = jobid;
+ /* FIXME!!! This is the only place where queue->job
+ represents the SMB jobid --jerry */
+ ts->queue[i].job = jobid;
ts->queue[i].size = pjob.size;
ts->queue[i].page_count = pjob.page_count;
ts->queue[i].status = pjob.status;