The following patch allowed a user of a local lpd to remove all his jobs in queue but the active one with "lprm -". I find it handy but maybe it is not the wanted behaviour for historical reason or whatever.
--8<---------------cut here---------------start------------->8--- Index: common_source/rmjob.c =================================================================== RCS file: /cvs/src/usr.sbin/lpr/common_source/rmjob.c,v retrieving revision 1.18 diff -u -p -r1.18 rmjob.c --- common_source/rmjob.c 27 Oct 2009 23:59:51 -0000 1.18 +++ common_source/rmjob.c 8 Feb 2011 14:20:11 -0000 @@ -33,6 +33,7 @@ #include <sys/param.h> #include <signal.h> +#include <err.h> #include <errno.h> #include <fcntl.h> #include <dirent.h> @@ -131,13 +132,14 @@ rmjob(void) assasinated = kill(cur_daemon, SIGINT) == 0; PRIV_END; if (!assasinated) - fatal("cannot kill printer daemon"); + warnx("cannot kill printer daemon"); } /* * process the files */ for (i = 0; i < nitems; i++) - process(files[i]->d_name); + if (assasinated || strncmp(files[i]->d_name, current, NAME_MAX)) + process(files[i]->d_name); } rmremote(); /* --8<---------------cut here---------------end--------------->8--- -- Manuel Giraud