It turns out that the Windows implementation of IPP lacks a crucial component in relaying its status to the client – it doesn’t tell it when printing has been done. Instead it replies with the technical equivalent of “I don’t understand what you just said”.
This is all well and good, except that the clever client will then go “Oh, OK” and file the print job away to be tried again later. In the case of Ubuntu this is an automatic retrying, sending the page to the printer every so often. The printer receives and prints the page, but once again cannot tell the client it’s done. Into the queue once more, to be retried yet again.
If you don’t manually remove the print job from the queue this will go on forever. Clearly not good when you print your file from home and forget about it, foolishly logging into SafeCom and hitting “Print All Documents” then wondering why it’s producing 500 copies of that witty sign for your room door and using all your credit.
Evidently, this is not the correct way to be going about printing. I’ll get to work on a solution, probably involving a weird hybrid of CUPS, IPP, SMB and LPR authenticating against an LDAP/AD mashup.