18.4. Authorization and Quotas

In addition to simply recording accounting information the accounting procedures can be used to check print quotas or update databases. This is done by using the Accounting Check :achk flag and the :as, :ae, and :af network connection or program capabilities.

If the :achk flag is set and the :as= option specifies a program to be run, or the :af= option specifies a program to be run or a network connection then output of the program or information read from the network connection is used to control the handling of the job. If the :as= option specifies a program to be run then the program is run and the exit code and output is saved. If the :as= option specifies a string and the :af= option specifies a program to be run or a remote host to be contacted then the :as= value is written to the program STDIN or remote host. The program STDOUT or network connection is read and saved and the program exit code is saved.

If the information was read from a program, then the exit code of the program is checked:

Exit Code    Action
JSUCC (0)    process data read
JFAIL        retry with JFAIL status
JHOLD        hold job
JREMOVE      remove job
JABORT       abort processing jobs
other        abort processing jobs

If the information was read from a network connection or the program exited with JSUCC (0) then the start of the first line of the information read is used. If this line starts with the following case insensitive words then the following actions are taken:

Word         Action
(blank)      process job
ACCEPT       process job
FAIL         retry with JFAIL status
HOLD         hold job
REMOVE       remove job
(other)      abort processing jobs

These facilities can be used to implement a wide variety of quota mechanisms. The most simple method is to create a script or program that can be run as the :as= program. This would connect to a database server or check a database to see if user quotas had been exceeded. If they had, then it would return a REMOVE or HOLD status as appropriate.