patch for lpq output parsing for LPRng

James Henstridge james at
Mon Jul 8 01:27:02 GMT 2002

[please keep me in the CC line for replies, as I am not subscribed to 
this list]

Since upgrading one of our servers that handles a number of print queues 
to Red Hat 7.3, I started getting complaints about jobs not getting 
removed from the print queues -- they would get printed, then their 
status would change to paused in the print queue dialog on the Windows 
machines.  This also meant that the printer icon in the system tray 
didn't disapear, which a number of users used to check when their job 
had finished printing.

This problem occurs because the version of LPRng (3.8.9) that ships with 
RH7.3 lists the last few finished jobs in the output of lpq with their 
rank listed as "done".  The output looks something like this:

Printer: hp5100 at blinky (dest auto at hp5100)
 Queue: no printable jobs in queue
 Server: no server active
 Status: job 'james at blinky+708' saved at 16:06:16.677
 Rank   Owner/ID                  Class Job Files                 Size Time
done   carole at blinky+580            A   580 smbprn.007629.i16aS5 99120 
done   james at blinky+708             A   708 smbprn.000024.rW1nDr 72089 
JetDirect lpd: no jobs queued on the port Auto

I wrote a simple patch to solve this problem.  If it encounters a print 
job with its rank set to "done", it sets the status field to LPQ_PRINTED 
(which seems like the most appropriate status).  This seems to solve the 
problem for us -- the completed jobs don't show up paused, and the 
printer icon in the system tray disapears when the job completes.

It would be useful to get this patch included in future 2.2 releases.

James Henstridge.

Email: james at              | 2003 Call for Papers out
WWW: |

-------------- next part --------------
--- samba-2.2.5/source/printing/lpq_parse.c.lprng-lpq	Mon Jul  8 13:59:03 2002
+++ samba-2.2.5/source/printing/lpq_parse.c	Mon Jul  8 14:00:10 2002
@@ -257,6 +257,8 @@
   if (strequal(tokarr[LPRNG_RANKTOK],"active")) {
     buf->status = LPQ_PRINTING;
+  } else if (strequal(tokarr[LPRNG_RANKTOK],"done")) {
+    buf->status = LPQ_PRINTED;
   } else if (isdigit((int)*tokarr[LPRNG_RANKTOK])) {
     buf->status = LPQ_QUEUED;
   } else {

More information about the samba-technical mailing list