root / pykota / trunk / NEWS @ 3008

Revision 3008, 80.1 kB (checked in by jerome, 18 years ago)

Rewrote the locking mechanism.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1# $Id$
2
3PyKota - Print Quotas for CUPS and LPRng
4
5(c) 2003, 2004, 2005, 2006 Jerome Alet <alet@librelogiciel.com>
6This program is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with this program; if not, write to the Free Software
18Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
20============================================================
21
22PyKota NEWS :
23       
24    - 1.25alpha10 (2006-09-03) :
25   
26        - Rewrote the locking mechanism to try to fix the problem
27          some people reported.
28         
29        - Permissions on cupspykota are now correctly set after
30          installation.
31         
32        - Added a workaround to incorrect charset through the add
33          of the python-chardet module as a dependency.
34         
35    - 1.25alpha9 (2006-08-10) :
36   
37        - Fixed a problem when an SMTP error occured and the recovery
38          routine failed to handle it correctly.
39         
40    - 1.25alpha8 (2006-07-11) :
41   
42        - Fixed a problem in the MySQL schema.
43       
44    - 1.25alpha7 (2006-06-20) :
45   
46        - Fixed some date formatting problems when retrieving the
47          printing history with MySQL.
48         
49        - Began code cleaning. 
50         
51    - 1.25alpha6 (2006-06-13) :
52   
53        - pkusers now supports the --email command line switch.
54          The old method to set the email address is still supported,
55          but the new one allows the email address to be modified
56          as well.
57         
58    - 1.25alpha6 (2006-06-09) :
59   
60        - Fixed the incorrect overwriting of the original billing
61          code if the overwrite_jobticket directive was used.
62         
63    - 1.25alpha5 (2006-06-03) :
64   
65        - Fixed minor issues with pkipplib's usage.
66       
67        - Fixed MySQL schema to workaround some "features"...
68       
69    - 1.25alpha4 (2006-05-23) :
70   
71        - Introduced the 'askconfirmation' directive to interact with
72          the end user through any script (pknotify is recommended)
73          and see if he really wants to print when knowing the cost
74          of the job.
75         
76        - Now uses pkipplib if present to directly retrieve the job
77          information from the CUPS server over IPP.
78         
79    - 1.25alpha3 (2006-05-11) :
80   
81        - Added a lock to ensure that a single cupspykota backend
82          is processing datas for a particular print queue at any
83          given time.
84         
85        - Now exports more environment variables for the subprocesses.
86         
87    - 1.25alpha2 (2006-05-03) :
88   
89        - Fixed some problems with DateTime objects.
90       
91        - Added support for PySNMP v4.x in addition to 3.4.x.
92       
93    - 1.25alpha1 (2006-04-14) :
94   
95        - Make the MySQL schema work with old releases of MySQL.
96       
97        - Fixed several character encoding problems.
98         
99        - Ensures that the denied banners counter is properly initialized
100          with relationnal databases.
101         
102    - 1.24 (2006-04-08) :
103   
104        - Improved documentation and packaging stuff.
105       
106    - 1.24beta (2006-03-26) :
107   
108        - Finalized the pknotify command.
109       
110        - Updated the messages catalogs for translations.
111       
112    - 1.24alpha18 (2006-03-15) :
113   
114        - Now uses MIME encapsulation for email messages to avoid
115          some problems with 8 bits messages being rejected.
116         
117    - 1.24alpha17 (2006-03-06) :
118   
119        - Fixed a major problem in the PostgreSQL backend.
120       
121        - pknotify can now check a remote user's name and password.
122       
123    - 1.24alpha16 (2006-03-02) :
124   
125        - Introduced the pknotify command line tool to dialog
126          with remote PyKotIcon applications.
127         
128    - 1.24alpha15 (2006-03-02) :
129       
130        - optimized pkbcodes, pkprinters and pkusers using edpykota as
131          the model.
132       
133        - 'edpykota --list' and 'pkusers --list' are now authorized
134          to mere mortal users, but the list is restricted to informations
135          about the current user.
136       
137        - Extended the functionnality of the 'onbackenderror' directive to
138          allow for configurable retries.
139         
140    - 1.24alpha14 :
141   
142        - Finished optimizations in edpykota and fixed some minor
143          problems with LDAP.
144         
145    - 1.24alpha13 :
146   
147        - Introduced the pkusers command line tool to manage users and 
148          users groups. This command doesn't deal with print quota entries,
149          which continue to be managed through the edpykota command line
150          tool.
151         
152        - Major rewrite and incompatible changes to command line options
153          in edpykota. This command now only deals with print quota
154          entries. Printers, users (or users groups) now have to be created
155          first using pkprinters or pkusers.
156         
157    - 1.24alpha12 :
158   
159        - Introduced the 'duplicatesdelay' directive to specify after
160          which duration two duplicate jobs are not considered duplicate
161          jobs anymore.
162         
163        - Introduced the 'balancezero' directive to specify any value 
164          as the balance limit instead of 0.0. This can allow admins to
165          give a few free credits to users, for example.
166         
167    - 1.24alpha11 :
168   
169        - Huge speed improvements when modifying billing codes and
170          printers.
171       
172        - Both pkbcodes and pkprinters now display the percent done
173          for all actions.
174         
175        - The pkinvoice invoice generator command line utility is now
176          included.
177         
178    - 1.24alpha10 :   
179   
180        - Huge speed improvements when deleting users, printers, and
181          billing codes.
182         
183    - 1.24alpha9 :
184   
185        - Preliminary support for MySQL, thanks to Matt Hyclak.
186       
187    - 1.24alpha8 :
188   
189        - The 'preaccounter' configuration directive was introduced to control
190          which parser to use for precomputation of the job's size. When unset,
191          the internal parser is used just like it was previously. See
192          conf/pykota.conf.sample for more details.
193         
194        - Now subprocesses launched through the overwrite_jobticket directive
195          can also output 'CANCEL', to represent the user's own choice to
196          cancel the print job.
197         
198    - 1.24alpha7 :
199     
200        - pkbanner now handles new print limiting modes correctly.
201       
202        - The cupspykota backend wrapper now accepts to be interrupted
203          with a kill -INT. This causes an immediate and clean abort
204          of the current print job.
205         
206        - Matt Hyclak contributed the possibility to store the printing
207          history in a MySQL database. See the contributed/ directory
208          for details.
209         
210        - Added 2006 to the copyright's years.
211       
212    - 1.24alpha6 :
213   
214        - Fixed internal SNMP and PJL handling code for very fast
215          printers : PyKota didn't see them going from 'idle'
216          to 'printing' to 'idle' again.
217         
218        - Now waitprinter.sh accepts SNMP version number and
219          community name as arguments, thanks to Brandon
220          Holbrook.
221         
222        - Now command line errors and Ctrl+C repectively cause
223          PyKota commands to exit with status -2 and -3.
224         
225    - 1.24alpha5 :
226   
227        - All command line tools now accept -A | --arguments filename.args
228          as a way to bypass the shell's maximal command line size :
229          just put each argument on a line by itself in a file, and
230          pass the file's name as the -A | --arguments command line
231          option's argument. For now this won't be documented in
232          commands' helps.
233         
234        - dumpykota can now dump the complete database in XML
235          format.
236         
237    - 1.24alpha4 :
238   
239        - Added support for the SQLite3 backend.
240          See pykota/initscripts/sqlite/README.sqlite
241       
242    - 1.24alpha3 :
243   
244        - Fix for mailandpopup.sh : smbstatus can't be run setuid,
245          so we regain priviledges before running an external
246          mailto directive.
247       
248    - 1.24alpha2 :
249   
250        - Introduce the "onbackenderror" directive in pykota.conf, to
251          control if the user must be charged or not whenever a real
252          CUPS backend fails. The default value is 'nocharge'.
253          Set it to 'charge' if you think your users can cause a CUPS
254          backend to fail.
255         
256        - Now mark original backends related problems as such in the
257          printing history. Modified printquota.cgi and pykota.css
258          to make them be more visible.
259         
260    - 1.24alpha1 :
261   
262        - Fixed a problem which caused backend errors to be ignored.
263       
264        - The sample LDIF file now contains the two necessary user
265          entries to have an LDAP PyKota Admin and an LDAP PyKota
266          ReadOnly user. The sample configuration files were updated
267          to contain the default passwords used in the LDIF file.
268         
269        - dumpykota is now more strict when checking arguments.   
270       
271    - 1.23 :
272   
273        - Many minor bug fixes and code cleaning.
274       
275        - Improved documentation.
276       
277        - Added Polish translation.
278       
279        - Improved French and Swedish translations.
280       
281    - 1.23beta :
282   
283        - Now the mailto directive is honored in all cases where the job is
284          denied or a warning has to be issued, and the correct reason
285          can be sent back to the user.
286         
287        - The PYKOTAREASON environment variable, if defined, contains the 
288          textual reason why the job was denied or a warning has to be
289          issued.
290       
291    - 1.23alpha31 :
292   
293        - Added support for --maxjobsize, --passthrough and --nopassthrough
294          in pkprinters. These modes are now also honored when printing.
295         
296        - Allows the admin to restrict the number of print queues which will
297          be treated by pkturnkey by passing queues' names as additionnal
298          arguments on pkturnkey's command line.
299         
300        - pkturnkey now supersedes pkhint with the help of the -c | --doconf
301          command line option.   
302         
303    - 1.23alpha30 :
304   
305        - Database changes : you MUST use upgrade-to-1.23.sql again if you
306          use PostgreSQL, or copy the new schema and restart your LDAP
307          server if you use LDAP.
308         
309        - The -C | --comment command line switch was added to edpykota to 
310          attach textual information to modifications done to a user's
311          account balance.
312         
313        - The -l | --limitby command line switch to edpykota was modified 
314          to allow 'noquota', 'nochange', and 'noprint'. See the edpykota
315          command's help or manual page for details.
316         
317        - The -i | --ingroups command line switch to repykota allows 
318          PyKota Administrators to only lists members of the specified
319          group or groups (separated with commas).
320         
321        - The -I | --increase command line switch to edpykota allows
322          to increase or decrease page limits.
323         
324        - Added the precomputed job's size and price to the history
325          for controlling purpose.
326       
327    - 1.23alpha29 :
328   
329        - Fixed a small problem with billing codes.
330       
331        - Exports some environment variables earlier, to render the script
332          launched by the overwrite_jobticket directive more powerful.
333         
334        - Now autopykota also creates print quota entries for the user on the
335          printers groups the current printer is a member of.
336         
337    - 1.23alpha28 :
338   
339        - Added users groups management to pkturnkey.
340       
341        - Fixed umask in setup script.
342       
343    - 1.23alpha27 :
344   
345        - Replaced the --dryrun command line option by the --force
346          command line option in pkturnkey, with exactly the opposite
347          effect (for security reasons).
348         
349    - 1.23alpha26 :
350   
351        - Allows parametrized pjl and snmp hardware accounting methods,
352          to be able to respectively set the TCP port and the SNMP
353          community.
354         
355    - 1.23alpha25 :
356   
357        - Added a --dryrun command line switch to pkturnkey.
358       
359        - Improved pkturnkey's general usability.
360       
361        - Added a manpage for pkturnkey.
362       
363    - 1.23alpha24 :
364   
365        - Allows different databases to be used depending on the
366          user's rights. This allows PyKota admins to directly
367          use a master LDAP server for read+write, while letting
368          normal users using the replicas for readonly access.
369          NB : using different storage backends is also possible,
370          but you're on your own there.
371         
372    - 1.23alpha23 :
373   
374        - Fixed a problem with banner accounting.
375   
376        - Introduction of the new 'pkturnkey' command line tool.
377       
378    - 1.23alpha22 :
379   
380        - The cupspykota backend was almost entirely rewritten from scratch.
381          It's now much more readable, maintainable, etc...
382         
383        - LPRng support is OFFICIALLY dropped for now. LPRng users are 
384          advised to download earlier releases or purchase the
385          PyKota v1.22HotFix1 Official release. LPRng support
386          MIGHT be re-added later.
387       
388    - 1.23alpha21 :
389     
390        - Fix for IPP requests which contain more than a single
391          job-originating-host-name attribute.
392         
393    - 1.23alpha20 :
394   
395        - Added the overwrite_jobticket directive. See pykota.conf.sample
396          for how to use it.
397         
398    - 1.23alpha19 :
399   
400        - Fixed an LDAP filtering problem when managing billing codes.
401       
402        - Added the unknown_billingcode directive. See pykota.conf.sample
403          for how to use it.
404       
405    - 1.23alpha18 :
406     
407        - Added the dump_bfd.php contribution.
408       
409        - Several fixes in the internal PJL accounter.
410       
411        - Now autopykota doesn't create unneeded print quota entries anymore.
412       
413        - Increased the timeout in the PJL hardware accounting code to
414          accomodate some printers (HP5000 at least).
415         
416    - 1.23alpha17 :
417   
418        - pkpgcounter is now distributed separately only. This
419          means that people must now download and install pkpgcounter
420          v1.56 or higher prior to being able to run PyKota.
421         
422        - Removed all the autoconf/automake stuff which was outdated 
423          and confusing.
424         
425    - 1.23alpha16 :
426     
427        - Extracted the GPL blurb from all commands' help, and use
428          a static version only once. This saves space big time, and
429          eases future translations.
430         
431    - 1.23alpha15 :
432   
433        - pkbcodes now works with the PostgreSQL backend.
434          NB : PLEASE RUN upgrade-to-1.23.sql AGAIN !!!
435       
436    - 1.23alpha14 :
437   
438        - Logs a warning when the user/group doesn't exist when running
439          edpykota.
440         
441    - 1.23alpha13 :
442   
443        - Minor fix for user groups because of latest database changes.
444       
445    - 1.23alpha12 :
446   
447        - Big database changes, use the migration scripts !
448       
449    - 1.23alpha11 :
450   
451        - Small fix to the PCL3/4/5 parser for some drivers.
452       
453    - 1.23alpha10 :
454   
455        - Fixed a bad exception name in cupspykota when parsing IPP messages.
456       
457        - Improved the IPP messages module : it can now generate IPP messages
458          in addition to parsing them.
459       
460    - 1.23alpha9 :   
461   
462        - The denyduplicates directive now accepts a command line as an
463          argument beside yes/no. The command is launched and must
464          print either ALLOW or DENY to its standard output. Then the
465          job gets allowed or denied by PyKota.
466          This will allow user interaction in the near future.
467         
468        - Introduced the new 'striptitle' directive to remove ugly prefixes
469          from print job's titles whenever a new print job is submitted.
470         
471        - Fixed internal SNMP accounter for printers which only have a life time
472          page counter, and not a volatile page counter.
473         
474    - 1.23alpha8 :
475   
476        - The data dumper can now summarize payments and history with the
477          help of the --sum command line option (or checkbox in the CGI).
478         
479        - The message used when the job's filename, title and options are
480          hidden because of the privacy directive is now translated at
481          retrieval time, instead of at saving time.
482         
483        - Minor fix in the LDAP backend code. 
484         
485    - 1.23alpha7 :
486   
487        - Improvements to the internal PJL and SNMP accounter : now should
488          support more printers and waste less time.
489         
490    - 1.23alpha6 :
491   
492        - The data dumper's start= and end= date filtering options now
493          accept a positive or negative offset to be added to the special
494          keywords 'yesterday', 'today', 'now', 'tomorrow'.
495          e.g. : dumpykota --data history start=yesterday-5 end=today
496         
497    - 1.23alpha5 :
498   
499        - The data dumper's start= and end= date filtering options now accept
500          the special keywords 'yesterday', 'today', 'now' and 'tomorrow'.
501         
502    - 1.23alpha4 :
503   
504        - The data dumper now accept start= and end= to specify the starting
505          and ending dates to dump the history.
506         
507    - 1.23alpha3 :
508   
509        - The destination link for the logo used in CGI scripts is
510          configurable.
511         
512        - Data dumper improved : it's faster and now datas are correctly
513          escaped.
514       
515        - The URL to the logo displayed in the CGI scripts is configurable.
516       
517    - 1.23alpha2 :
518   
519        - Fixed edpykota --prototype with balance.
520       
521        - Major rewrite of the IPP message parsing code to definitely
522          fix the job-originating-hostname IPP attribute problem.
523       
524    - 1.23alpha1 :   
525   
526        - Sets current username to the user CUPS runs as instead of "root"
527          when printing test pages from CUPS' web interface (because
528          the username is empty in this case).
529         
530        - Fix for strange values in job-originating-hostname
531       
532    - 1.22 :
533   
534        - Big improvements to the documentation.
535       
536    - 1.22beta :
537   
538        - Improved stability in pykotme and pykotme.cgi.
539       
540        - Fixed a permission problem in pykotme and pykosd.
541       
542        - Fixed an inconsitency between SQL and LDAP backends'
543          behavior in edpykota.
544         
545        - Improved stability and allowed tracebacks in CGI scripts.
546       
547        - Improved pykotme.cgi
548         
549    - 1.22alpha8 :
550   
551        - Fixed history retrieval for nonexisting printers or users.
552       
553        - Clicking on the billing code in printquota.cgi's job history
554          now shows all jobs matching this billing code.
555         
556        - Fixed the dump in CUPS' page_log format which didn't
557          dump the oldest entry.
558         
559        - The data dumper now accepts billingcode= and hostname= as
560          filters when dumping the job history.
561         
562        - The job billing code if present is now saved into the database,
563          and exported to subprocesses as the PYKOTAJOBBILLING environment
564          variable.
565         
566        - Ctrl+C now makes PyKota commands exit without a traceback.
567       
568        - Fixed an i18n problem with Python 2.1
569       
570    - 1.22alpha7 :
571   
572        - Fixed some problems with the retrieval of the history from LDAP.
573       
574    - 1.22alpha6 :
575   
576        - Early errors now produce meaningful error messages (finally !)
577       
578    - 1.22alpha5 :
579       
580        - SNMP and PJL improvements with regard to PowerSave / StandBy.
581       
582    - 1.22alpha4 :
583   
584        - Fixed charset problem under MacOSX.
585       
586        - Allows pkbanner to accept more info to display on its
587          command line.
588         
589    - 1.22alpha3 :
590   
591        - Fixes some case related problems with some LDAP backends.
592       
593        - Fixes some problem for printers which directly go from
594          "idle" to "warmup" and never to "printing" before
595          returning to "idle".
596         
597        - Some permissions settings may have prevented cupspykota
598          from parsing cupsd.conf, this is now fixed.
599         
600    - 1.22alpha2 :
601   
602        - Introduction of the web enabled print quote generator.
603       
604        - Fixed a potential race condition when several backend
605          wrappers were present in CUPS' backend directory.
606         
607        - Fixed dumpykota's output in CUPS' page_log format to better
608          match CUPS format.
609         
610    - 1.22alpha1 :
611   
612        - Import into Subversion.
613       
614    - 1.21 :
615   
616        - Improved documentation.
617       
618        - Improved dependencies checker.
619       
620        - Updated some translation files.
621       
622    - 1.21beta2 :
623   
624        - Fixed an LPRng specific bug.
625       
626        - Several improvements on stability issues with manually modified
627          LDAP trees.
628         
629        - Documentation improvements. 
630       
631    - 1.21beta :
632   
633        - Prepared translation files for next release.
634       
635    - 1.21alpha27 :
636   
637        - Allows software() (no arguments) to the software accounting
638          directive. This saves a lot of CPU since the job is not
639          parsed again : the precomputed size is used directly in this
640          case.
641         
642        - epykota's --prototype option now works fine with accounts
643          limited by balance.
644         
645    - 1.21alpha26 :
646   
647        - Fixed the handling of the 'maxdenybanners' directive.
648       
649        - Introduced the 'denyduplicates' directive.
650       
651        - Fixed some database related glitches.
652       
653    - 1.21alpha25 :
654   
655        - The job's size is now always precomputed, even when
656          'enforcement' is not set to 'strict'.
657         
658        - Introduction of the new 'trustjobsize' configuration directive
659          to workaround some problematic printers. See the sample
660          configuration file for details.
661         
662    - 1.21alpha24 :
663   
664        - Big database structure changes. An upgrade script
665          is now included for PostgreSQL. LDAP users may just
666          want to copy the new schema in place.
667         
668        - edpykota now recognizes the -o | --overcharge command line
669          option to set an overcharging or undercharging factor
670          on each print job's cost for a particular user.
671         
672        - repykota's output format has changed an is not limited to 
673          80 characters wide anymore. People who used to parse
674          repykota's output in their own tools are strongly advised
675          to parse dumpykota's output instead.
676         
677        - Introduction of the new 'maxdenybanners' configuration directive
678          to allow up to N (the directive's value) deny banners to be
679          printed even if the print account is forbidden to print.
680         
681        - Better detection of the number of copies in the PostScript parser.
682       
683    - 1.21alpha23 :
684   
685        - Traditional Chinese translation added.
686   
687        - Several fixes and performance improvements with the LDAP backend.
688       
689    - 1.21alpha22 :
690   
691        - edpykota's --delete command line option doesn't consider
692          '*' to be the default argument anymore :-)
693         
694    - 1.21alpha21 :
695   
696        - dumpykota.cgi can now be run as a normal user as opposed to
697          a PyKota administrator. No read access to pykotadmin.conf is
698          necessary anymore. This CGI scripts now honors the REMOTE_USER
699          environment variable just like printquota.cgi does, see
700          the file cgi-bin/README for details.
701          The command line tool dumpykota must still be run by a PyKota
702          administrator.
703         
704        - Fix exception's name error due to a change in recent versions
705          of PygreSQL.   
706         
707    - 1.21alpha20 :
708         
709        - Big bug fix wrt the datelimit field which was never reset.
710         
711    - 1.21alpha19 :
712   
713        - Introduction of the new dumpykota.cgi CGI script, which
714          allows third party tools like phpPrintAnalyzer to be
715          interfaced in real time with PyKota. To use it you
716          may have to change your web server's configuration,
717          please see pykota/cgi-bin/README
718         
719    - 1.21alpha18 :
720   
721        - Now dumpykota can dump the job history into CUPS' page_log
722          format (even when the printing system is LPRng). This allows
723          people to use tools like PrintAnalyzer or phpPrintAnalyzer
724          (two completely different beasts) with PyKota.
725         
726    - 1.21alpha17 :
727     
728        - Fixed field type's name in XML dumps.
729       
730        - Now drops priviledges to user 'pykota' when launched as root
731          (directly or as a CUPS backend), if such an user exists.
732         
733        - Fixed PCL3/4/5 parser for some drivers' output.
734       
735    - 1.21alpha16 :
736   
737        - fixed several recently introduced bugs in LDAP backend code,
738          thanks to Matt Hyclak.
739         
740    - 1.21alpha15 :
741     
742        - Normalized field names between LDAP and PostgreSQL backends
743          in dumpykota's output.
744         
745        - dumpykota filtering capabilities are now supported within
746          the LDAP backend too.
747         
748    - 1.21alpha14 :
749   
750        - dumpykota now supports extended filtering possibilities
751          with the PostgreSQL backend (LDAP support will come soon).
752         
753    - 1.21alpha13 :
754   
755        - Added a --debug command line option to pkpgcounter, so
756          that people may see what really happens, and what will
757          be available in the future :-)
758         
759    - 1.21alpha12 :
760   
761        - Fixed a bug with non standard pkbanner command lines.
762       
763        - Now logs as errors the differences between precomputed and
764          computed job sizes. **CUPS only for now**
765         
766    - 1.21alpha11 :
767   
768        - Now user and group print quota entries can be stored directly
769          below the user or group with the LDAP backend, using them
770          as branches. Thanks to Stefan Wold for the patch.
771          See the sample configuration file for details.
772         
773        - TLS is now supported with the LDAP backend. Thanks to Stefan
774          Wold for the patch.
775          See the sample configuration file for details.
776         
777        - edpkota now accepts the -U | --used value command line argument
778          to preset the page counters to an initial value. Thanks to
779          Wilson Roberto Afonso and Matt Hyclak for the patch.
780         
781    - 1.21alpha10 :
782   
783        - Now automatically reconnects up to three times if the LDAP server
784          returned an error, possibly due to a timeout.
785         
786    - 1.21alpha9 :
787   
788        - Now searches the configuration files in 'pykota' system user's
789          home directory. The 'pykota' system user and group have
790          to be created by the system administrator, and given
791          sufficient permissions to PyKota's configuration files.
792         
793    - 1.21alpha8 :
794   
795        - Added the new reject_unknown directive to reject the
796          creation of user or groups which are unknown to the system.
797         
798    - 1.21alpha7 :
799   
800        - Introduction of the pkmail email gateway.
801       
802    - 1.21alpha6 :
803   
804        - Fix for LPRng filenames.
805       
806        - Added Turkish translation thanks to Baris Cicek.
807       
808    - 1.21alpha5 :
809   
810        - Improved ESC/P2 miniparser for Stylus Photo printers.
811       
812        - Implemented the --savetoner command line option to pkbanner.
813       
814        - Improved pkbanner's help and messages.
815       
816    - 1.21alpha4 :
817   
818        - Fixed job's data file detection code for LPRng.
819       
820        - Fixed a problem with PJL and PowerSave mode,
821          thanks to Wilson Roberto Afonso.
822       
823    - 1.21alpha3 :
824   
825        - PyKota can now generate its own banners, and either account
826          for them or not, depending on newly introduced directives
827          in pykota.conf
828          Thanks to Matt Hyclak for the patch.
829         
830    - 1.21alpha2 :
831   
832        - Installation script is now non interactive again, as it should
833          have stayed from the beginning. Dependencies checking can
834          be done by launching the checkdeps.py command.
835         
836    - 1.21alpha1 :
837   
838        - added an IPP messages miniparser. Extraction of the client
839          hostname is now considered to be fiable, at least until
840          the CUPS developpers change something...
841       
842    - 1.20 :
843   
844        - Version number changed.
845       
846    - 1.20beta :
847   
848        - Norwegian (Bokm� preliminary translation added.
849       
850        - German translation was finalized.
851       
852        - Greek translation was finalized.
853       
854        - For urgent legal reasons, a "privacy" directive has been added
855          to pykota.conf, to hide jobs' title, filename and options
856          in the history.
857         
858        - Minor changes in the debian directory.
859       
860    - 1.20alpha27 :
861   
862        - Fixed many problems with translation files. In particular
863          the Brazilian Portuguese translation file was incorrectly
864          installed into the french "breton" locale directory.
865         
866        - Finished French translation. 
867         
868    - 1.20alpha26 :
869   
870        - LPRng support code should now better detect network
871          printers' hostnames or IP addresses.
872         
873        - Fix for recently introduced bug in LPRng support.
874       
875        - Fix for incorrect locale setting when starting.
876       
877    - 1.20alpha25 :
878   
879        - pkprinters allows --list to normal users, but require user
880          to be a PyKota administrator when another command line
881          option is used.
882         
883        - pkhint doesn't use absolute path to search for helper commands
884          anymore.
885         
886        - Spanish translation ready for 1.20.   
887       
888    - 1.20alpha24 :
889   
890        - Now warnpykota only warns users limited by balance once.
891       
892        - Now warnpykota only warns users who have ever printed,
893          to not cause confusion to users who have just opened
894          their account.
895       
896        - Prepared help messages for translations.
897       
898    - 1.20alpha23 :
899   
900        - Add workaround for locale problem.
901       
902    - 1.20alpha22 :
903   
904        - Hopefully final fix for data encoding charset.
905       
906        - edpykota now refuse to work if the user is not a PyKota admin.
907       
908        - Fixes a recently introduced bug with users groups and PostgreSQL.
909       
910    - 1.20alpha21 :
911   
912        - Now dumpykota refuses to launch if the current user is not
913          a PyKota administrator (a PyKota administrator is an user
914          allowed to read the pykotadmin.conf file).
915         
916        - Now any PyKota administrator can use repykota and warnpykota
917          with additionnal arguments, not only the root user.
918         
919        - Improved documentation a bit.
920       
921    - 1.20alpha20 :
922   
923        - Reduced delay in internal SNMP and PJL_over_TCP handlers
924          from 2 to 1 second.
925       
926        - dumpykota can now output XML.
927       
928    - 1.20alpha19 :
929   
930        - Improved user groups and user groups quotas dumps in dumpykota.
931       
932        - Finished implementation of LDAP support in dumpykota.
933       
934        - The md5 sum of the job's datas is now available as an
935          hexadecimal digest in the PYKOTAMD5SUM environment variable.
936         
937        - The description, filename, title, and options fields
938          are now stored as UTF-8 strings in both LDAP and PostgreSQL.
939          Proper charset is used during extraction from the database.
940         
941    - 1.20alpha18 :
942   
943        - Experimental autopykota command to initialize user
944          account and quota entries on first print while not
945          resetting the balance value if not needed.
946         
947        - Added the new "winbind_separator" directive to strip
948          out the Samba/Winbind domain name while printing if
949          needed (Off by default).
950         
951    - 1.20alpha17 :
952   
953        - Added --hardreset command line option to edpykota.
954       
955        - Fixed problem with accented chars in title, filename
956          or options and LDAP backend.
957         
958    - 1.20alpha16 :
959   
960        - Internal handling of socket based PJL queries over
961          port tcp/9100 is now available with the magic
962          'pjl' value in the hardware accounter.
963         
964    - 1.20alpha15 :
965   
966        - LDAP pykotaAccountBalance objects were always created
967          attached to the pykotaUser objects. This is now
968          fixed and the value of balancebase in pykota.conf
969          is now correctly used.
970         
971    - 1.20alpha14 :
972   
973        - Belgian translations added (copy of the french ones).
974       
975        - External hardware accounter now loops until
976          a result can be read correctly.
977         
978        - pkhint now suggest the internal snmp handling instead
979          of the external one.
980         
981    - 1.20alpha13 :
982     
983        - Hardware accounter now accepts the special
984          'snmp' value, meaning ALL is done from main code
985          without launching any subprocess.
986          You need the http://pysnmp.sf.net Python module
987          for this to work (tested with v3.4.2)
988         
989        - Increased delay between two loops iterations 
990          to 2 seconds in waitprinter.sh to diminish
991          CPU load.
992         
993    - 1.20alpha12 :
994   
995        - waitprinter.sh rewritten from scratch to wait
996          for printer status stabilization.
997       
998    - 1.20alpha11 :
999   
1000        - Generic data dumper 'dumpykota' introduced.
1001          Works only with PostgreSQL backend for now.
1002         
1003    - 1.20alpha10 :
1004   
1005        - Added fix for incorrect job's size computation when
1006          hardware accounting fails.
1007         
1008    - 1.20alpha9 :
1009   
1010        - Small fixes wrt subprocesses.
1011       
1012    - 1.20alpha8 :
1013   
1014        - Added full support of PCL3 : HP Deskjet printers are now
1015          supported.
1016       
1017    - 1.20alpha7 :
1018   
1019        - First draft of PCL3GUI (Deskjet 640C for example) analyzer.
1020          Needs more work, but no documentation is available.
1021       
1022    - 1.20alpha6 :
1023     
1024        - Improved mailandpopup.sh script.
1025       
1026        - Small fixes for LPRng.
1027       
1028        - Now exports PYKOTAPRINTERHOSTNAME for network printers'
1029          hostname or IP address. Set to 'localhost' when not
1030          meaningful.
1031         
1032        - Fixed issue with how mod_auth_ldap Apache modules
1033          fills the REMOTE_USER environment variable.
1034         
1035        - Fixed a bug in LDAP user deletion code.
1036       
1037    - 1.20alpha5 :
1038     
1039        - Introduces the new configuration directive 'onaccountererror'
1040          to specify what must be done whenever the software or
1041          hardware accounter fails. Allowed values are 'continue' and
1042          'stop' (default).
1043         
1044        - Minor fix in software accounter for a recently introduced
1045          problem.
1046         
1047    - 1.20alpha4 :
1048   
1049        - Added support for more ghostscript devices in ESC/P2
1050          analyzer : stcolor, st800, escp, escpc are now supported.
1051         
1052    - 1.20alpha3 :
1053       
1054        - Small improvement in PostScript parser to avoid being
1055          fooled by a change in number of copies :
1056          The user can't ask for 200 copies of page 1 and 1 copy
1057          of page 2 to fool PyKota anymore :
1058          this would have been accounted for as 1 copy only, but
1059          now the maximum value seen is used.
1060         
1061        - Relax checks for PCL5 header to accomodate some strange
1062          printer drivers.
1063         
1064        - Now hardware accounting method works like software
1065          accounting method wrt the subprocess' output.
1066         
1067        - Hardware and Software accounting stop the print queue 
1068          when the accounting subprocess didn't work. This will
1069          be configurable in the near future.
1070         
1071    - 1.20alpha2 :
1072   
1073        - Now software accounting method reads accounter's
1074          answer until a line with a single integer is
1075          obtained or until all of its output has been read.
1076          This should fix the problem some people have
1077          when strange locale related messages are sent
1078          when running subprocesses (Solaris only ?).
1079         
1080        - First version of ESC/P2 analyzer. Seems to work
1081          ok at least with 'epson', 'epsonc', 'eps9mid'
1082          and 'esp9high' ghostscript devices. Needs more
1083          work to correctly analyze other devices.
1084       
1085    - 1.20alpha1 :
1086   
1087        - Fixed problem with number of copies in PCLXL parser.
1088       
1089        - Fixed problem with number of copies in PCL5 parser,
1090          when number of copies was set outside of and before first
1091          page.
1092       
1093        - Added workaround for number of copies directly set in
1094          PostScript code.
1095         
1096        - Added german translation.
1097       
1098        - Fixed problem on first print for user group quota when
1099          "enforcement: strict" is used.
1100       
1101        - Fixed interpolation problem in french translation.
1102       
1103    - 1.19 :
1104   
1105        - Updated existing translations.   
1106       
1107        - Added final Thai and Greek translations.
1108       
1109        - Minor last minute bug fixes.
1110       
1111    - 1.19beta :
1112   
1113        - LPRng support for both software and hardware accounting seems
1114          to be OK.
1115         
1116        - Translation files fixed because of fuzzy matching problem. 
1117       
1118        - Fixed path to Swedish translation: 'sv' instead of 'se'.
1119       
1120        - Added first draft of Thai translation.
1121       
1122        - Fixed some minor bugs with Pychecker.
1123       
1124    - 1.19alpha35 :
1125   
1126        - Generic PDL analyzer now supports Binary PostScript documents
1127          in addition to DSC compliant ones.
1128       
1129    - 1.19alpha34 :
1130   
1131        - LPRng support : software accounting seems to work fine,
1132          but hardware accounting doesn't work yet.
1133   
1134    - 1.19alpha33 :
1135   
1136        - pykosd now accepts command line arguments. Enjoy !
1137          NB : due to a bug in xosd, you need xosd version 2.2.8
1138          or higher if you don't use the default C locale.
1139         
1140    - 1.19alpha32 :
1141   
1142        - Early (not working) version of the LPRng support rewrite.
1143       
1144        - Saner default configuration file.
1145       
1146    - 1.19alpha31 :
1147   
1148        - Fixed a double Python2.1 incompatibility with newer versions,
1149          which prevented the PCL5 and the PCLXL parsers to work with
1150          this older version of Python.
1151         
1152    - 1.19alpha30 :
1153   
1154        - Introduction of preliminary version of the pykosd command
1155       
1156        - Usernames, Groupnames and Printernames can now contain
1157          ANY character, expected '/' and '@'.
1158       
1159        - Integrated most of the Debian work from Sergio
1160          Gonz�z Gonz�z
1161         
1162    - 1.19alpha29 :
1163   
1164        - PCLXL parser should now correctly handle number of
1165          copies set for each page.
1166         
1167        - Added testsuite for generic PDL analyzer.
1168       
1169        - Typo fixed in PCLXL parser.
1170       
1171        - Correctly dispatches error messages depending on the
1172          situation : tools which can be run interactively will
1173          ALWAYS output their logs to stderr, excepted for
1174          their DEBUG messages, for which the "logger:"
1175          directive as set in pykota.conf will be honored.
1176          Tools which can't be run interactively will ALWAYS
1177          honor the "logger:" directive as set in pykota.conf
1178         
1179    - 1.19alpha28 :
1180   
1181        - The description field for printers can now be set,
1182          and is displayed in reports.
1183         
1184        - Fixed a small problem in SQL backend code.
1185         
1186        - Improved pkhint
1187       
1188        - First working PCL6 (aka PCLXL) parser !
1189          Doesn't handle copies yet.
1190       
1191    - 1.19alpha27 :
1192   
1193        - Additionnal 10% speed increase in PCL5 parser for GhostScript
1194          generated files (untested yet with other PCL files).
1195         
1196        - Reintroduced the use of mmap in PCL5 parser : this speedups
1197          PCL5 parsing by almost 4 times.
1198          This 4x with the 3x below give us in fact a twelvefold increase
1199          in performance for PCL5 parsing !
1200         
1201        - The Python accelerator Psyco is now used if available
1202          in the generic PDL parser : it speedups PCL5 parsing by
1203          almost three times automagically.
1204         
1205    - 1.19alpha26 :
1206   
1207        - Fixed PCL5 parser according to the sources of rastertohp.
1208       
1209        - Fixed number of copies handling in PCL5 parser : the number
1210          of copies could vary from page to page.
1211         
1212        - Added more debug information to PCLXL parser. 
1213       
1214    - 1.19alpha25 :
1215   
1216        - Added new "description" field to printers in both
1217          PostgreSQL and LDAP. No code to handle this yet.
1218         
1219        - Reversed the fix for power save mode in printers : 
1220          no paper or tray open would have caused people to
1221          be undercharged.
1222         
1223        - Preliminary version of MySQL initialization script.
1224         
1225    - 1.19alpha24 :
1226   
1227        - Native PDF parsing code now works perfectly with
1228          Python 2.1 and above, and is way faster than before.
1229          GhostScript is not used anymore to convert PDF to PS,
1230          because PDF is parsed directly.
1231         
1232    - 1.19alpha23 :
1233   
1234        - Fixed waitprinter.sh wrt PowerSave mode and some
1235          printers. Thanks to Ryan Suarez.
1236       
1237        - Smart PDL analyzer now recognizes PDF too : two
1238          PDF parsing methods are used : a native one which
1239          is very fast but requires Python 2.3 or above, and
1240          a slower one which uses Ghostscript. PyKota detects
1241          automatically which method to use depending on your
1242          version of Python.
1243       
1244        - All tracebacks now include PyKota's version number.
1245         
1246    - 1.19alpha22 :
1247   
1248        - Ensures that the file pointer for job's data is
1249          reset to the start of the job's datas after the
1250          job's size pre-computation phase.
1251         
1252        - Improved PostScript detection code for bad drivers
1253          which don't correctly switch languages between PJL
1254          and PS.
1255       
1256        - Even better debugging code.
1257       
1258    - 1.19alpha21 :
1259   
1260        - Additionnal check.
1261       
1262    - 1.19alpha20 :
1263   
1264        - More complete logging messages wrt accounters.
1265       
1266        - Now catches early failures occuring when the configuration
1267          files are parsed.
1268       
1269    - 1.19alpha19 :
1270   
1271        - Fixed over-verbose exits when displaying help
1272          or version.
1273         
1274        - Extended some PATH in the shell scripts 
1275       
1276        - Deleting an user now also deletes his payments history.
1277       
1278        - Doesn't explicitely ignore SIGCHLD anymore. This seems to
1279          cause problems.
1280
1281    - 1.19alpha18 :
1282   
1283        - History of payments is now stored in the database, and
1284          updated each time an user's balance is modified with
1285          edpykota --balance. This history represents each time
1286          the user was given some positive or negative credit,
1287          but doesn't reflect price paid for jobs, which appear
1288          in the jobs history instead.
1289         
1290        - Jobs history web reports now include the job's size in
1291          bytes. Also columns were reordered to render the report
1292          more easily readable.
1293         
1294    - 1.19alpha17 :
1295   
1296        - Mysterious bug (program exited unexpectedly without leaving
1297          any log message) which occured once in a while when
1298          cancelling jobs should be fixed now.
1299         
1300        - New 'crashrecipient' directive. Disabled by 
1301          default. See sample configuration file to see how
1302          to activate it. It is suggested that you activate it.
1303         
1304        - New PYKOTAJOBSIZEBYTES environment variable exported, 
1305          which contains the job's size in bytes. Empty jobs
1306          are now denied. This value is now stored in the job
1307          history (but not yet displayed from the web interface)
1308         
1309        - Preliminary work on payments storage : the PostgreSQL 
1310          and LDAP schemas should be OK now, but no code is written
1311          yet to support this functionnality.
1312         
1313    - 1.19alpha16 :
1314   
1315        - the newuser and newgroup LDAP specific directives now accept
1316          a second parameter to attach(), "fail" or "warn". If no entry
1317          is found to attach PyKota attributes to, and "fail" was used,
1318          then action is aborted and program exits in error. If "warn"
1319          is used, a new entry is created but a warning message is logged.
1320         
1321        - The job's originating hostname is now stored in the database,
1322          and exported as PYKOTAJOBORIGINATINGHOSTNAME in the environment.
1323       
1324    - 1.19alpha15 :
1325   
1326        - The old pykota filter is now removed. This means that
1327          currently PyKota doesn't support LPRng anymore, but
1328          LPRng support will be re-added, improved, in the near future.
1329         
1330    - 1.19alpha14 :
1331   
1332        - PYKOTAPRECOMPUTEDJOBSIZE and PYKOTAPRECOMPUTEDJOBPRICE
1333          are now exported as environment variables.
1334         
1335        - Heavy CPU usage is now completely fixed it seems, by
1336          introducing some 0.01 second sleeping when nothing to do.
1337         
1338        - Pre-computation of the job's size is now only
1339          done when enforcement is "STRICT", this saves
1340          CPU for people who don't want to use this new
1341          feature.
1342         
1343        - New 'enforcement' directive which accepts either
1344          STRICT or LAXIST. See sample configuration file
1345          for details.
1346         
1347    - 1.19alpha13 :
1348   
1349        - Get back to an old version of the polling loop which
1350          worked fine, but non-optimally. Will be optimized
1351          as time permits.
1352         
1353    - 1.19alpha12 :
1354   
1355        - Job's size is now precomputed unconditionnally using
1356          the generic PDL analyzer.
1357          NB : This value is not yet used to pre-allow/deny the
1358          job.
1359       
1360    - 1.19alpha11 :
1361   
1362        - The pykota filter is now completely deprecated and
1363          can't be used anymore. LPRng users MUST download
1364          an older version of PyKota. CUPS users MUST use
1365          cupspykota. Better support for LPRng will come
1366          in the near future.
1367         
1368    - 1.19alpha10 :
1369   
1370        - pykotme now uses generic PDL Analyzer directly instead
1371          of spawning a new process.
1372         
1373        - Improvements to generic PDL Analyzer.
1374       
1375        - 25% Speedup in PCL parser. Getting more of the Python version
1376          will probably be difficult, since the completely table driven
1377          parser I wrote is slower than the original algorithm. Then,
1378          the original algorithm is still used for now.
1379          Probable that more speed could be achieved using mmap, at the
1380          expense of severe memory consumption.
1381       
1382        - configuration simplifications : the "accounter" directive's
1383          'hardware' arguments now accepts what was in the "requester"
1384          directive as it's content. The "requester" directive is not
1385          supported anymore. See sample configuration file for details.
1386       
1387    - 1.19alpha9 :
1388       
1389        - pkpgcounter is now just a wrapper around the PDLAnalyzer class
1390       
1391        - pykotaOptions LDAP attribute now accepts non-ascii characters
1392          too.
1393         
1394        - First try at cupspykota main loop rewrite
1395       
1396    - 1.19alpha8 :
1397   
1398        - 'querying' accounting method is now called 'hardware'
1399       
1400        - 'external' accounting method is now called 'software'
1401       
1402        - 'stupid' accounting method doesn't exist anymore
1403       
1404        - 'snmp' requester doesn't exist anymore
1405       
1406        - code simplifications in external requester
1407       
1408    - 1.19alpha7 :
1409     
1410        - Database schema change (both LDAP and PostgreSQL) to
1411          allow storage of the job-originating-hostname attribute.
1412          An SQL upgrade script is present. The code is not yet
1413          capable of setting/retrieving this attribute. Support
1414          for this functionnality will be added in the future.
1415         
1416    - 1.19alpha6 :
1417   
1418        - problems connecting to SMTP servers are now catched.
1419       
1420        - pykotme now uses pkpgcounter to compute the size of the
1421          job. This modification adds PCL5 and soon PCLXL (PCL6)
1422          support. You can now get quotes for PCL in addition to
1423          PostScript.
1424         
1425        - pkpgcounter now includes first try at PCLXL parser. 
1426          It is currently disabled until it's finished.
1427         
1428    - 1.19alpha5 :
1429   
1430        - cupspykota polling loop fix for MacOSX (at least)
1431       
1432        - logging subsystem now logs PID too, to ease diagnosing
1433          problems under heavy load.
1434         
1435        - pkpgcounter enhancements.
1436       
1437        - pkprinters --skipexisting now tells pkprinters to not
1438          modify existing printers when --add is used.
1439          pkprinters logs a warning message whenever --add is
1440          used and a printer already exists.
1441         
1442        - LDAP schema now allows accented chars in pykotaFileName
1443          and pykotaTitle attributes.
1444       
1445    - 1.19alpha4 :
1446   
1447        - a bad copy&paste prevented pkpgcounter to work at all, this
1448          is now fixed.
1449         
1450        - improved PCL support in pkpgcounter, with the use of
1451          HP PCL/PJL Reference Set
1452          PCL5 Printer Language Technical Quick Reference Guide
1453       
1454        - pkpgcounter now uses mmap to speed things up : duration
1455          is halved with the sample 87 pages PCL document I use for
1456          testing.
1457         
1458    - 1.19alpha3 :
1459   
1460        - pkprinters now accepts the --list command line argument
1461          to list informations about printers.
1462         
1463    - 1.19alpha2 :
1464   
1465        - pkpgcounter is now included as a smart external
1466          accounter which can handle both PostScript and PCL.
1467         
1468    - 1.19alpha1 :
1469   
1470        - PYKOTALIMITBY environment variable is now exported too.
1471       
1472        - Inclusion of Michele Baldessari's work on autotools.
1473       
1474    - 1.18 :
1475   
1476        - Improved documentation
1477       
1478    - 1.18beta2 :
1479     
1480        - Fix for raw jobs with cupspykota
1481       
1482    - 1.18beta :
1483   
1484        - Small fix for new waitprinter.sh script
1485       
1486        - Better tracebacks on error conditions
1487       
1488        - Improved translations
1489       
1490        - Improved documentation
1491       
1492    - 1.18alpha15 :
1493
1494        - waitprinter.sh replaced by a new and possibly faster
1495          and more powerful one.
1496   
1497        - Names can now begin with a digit.
1498       
1499        - Stability improvement for quotas set on printers groups.
1500       
1501    - 1.18alpha14 :
1502   
1503        - Catches more (all ?) problems with SMTP servers instead
1504          of breaking.
1505         
1506        - Italian translation added.
1507       
1508    - 1.18alpha13 :
1509   
1510        - Pre and Post hooks are now available in the pykota
1511          filter as well.
1512         
1513        - The pykota filter doesn't check last user's quota
1514          anymore when delayed hardware accounting is used :
1515          this will be done anyway the next time the last
1516          user will print again. This saves some database
1517          queries which are unneeded.
1518       
1519    - 1.18alpha12 :
1520   
1521        - Pre and Post hooks to external commands with many
1522          many environment variables available are useable
1523          from the cupspykota backend.
1524          See sample configuration file for details and help.
1525         
1526    - 1.18alpha11 :
1527   
1528        - Hopefully final fix wrt groups (users and printers)
1529       
1530    - 1.18alpha10 :
1531   
1532        - Fixed nested printer groups accounting.
1533       
1534        - Fixed user groups + printer groups problem.
1535       
1536    - 1.18alpha9 :
1537   
1538        - Fix for LDAP problem when job price was 0.
1539       
1540        - Fix for empty user groups with LDAP.
1541       
1542        - Preliminary version of the snmpprinterstatus command added.
1543       
1544    - 1.18alpha8 :
1545   
1546        - Don't retrieve data when not needed.
1547          This avoids many database queries.
1548       
1549    - 1.18alpha7 :
1550   
1551        - New experimental ldapcache directive to improve
1552          LDAP caching.
1553         
1554    - 1.18alpha6 :
1555       
1556        - New configuration directive added : maildomain
1557          to specify the domain to send mail to when user
1558          email address is not set in PyKota database.
1559         
1560        - More complete email message headers. 
1561         
1562    - 1.18alpha5 :
1563   
1564        - Debian packaging specific files, contributed by
1565          Peter Hawkins are now included in the project's tree.
1566         
1567        - Preliminary work on future low-level LDAP caching to speed
1568          up modifications (at least).
1569         
1570    - 1.18alpha4 :
1571   
1572        - Applied some of the modifications suggested by
1573          Peter Hawkins, for better Debian integration.
1574          Most notably cupspykota, pykota, and the shell
1575          scripts are now installed into /usr/share/pykota
1576          instead of into /usr/bin
1577          BEWARE : double check that your symbolic link
1578          to cupspykota is correct, and that your pykota.conf
1579          file use correct path for the shell scripts like
1580          waitprinter.sh and al.
1581         
1582        - pkhint command added, to help in configuring correct
1583          accounting method for PyKota.
1584         
1585    - 1.18alpha3 :
1586   
1587        - Fixed a rare bug in cupspykota backend which gave
1588          incorrect "CUPS backend died abnormally" messages.
1589       
1590    - 1.18alpha2 :
1591   
1592        - Added the pkprinters command line tool to manage printers
1593          exclusively.
1594       
1595    - 1.18alpha1 :
1596   
1597        - Preliminary work on Relationnal Database Independance.
1598       
1599        - Sample report made from OpenOffice.org added as PDF and SXC.
1600       
1601    - 1.17 :
1602   
1603        - Finalized release.
1604       
1605    - 1.17alpha2 :
1606   
1607        - Fix stupid software accounting bug in the CUPS backend.
1608       
1609    - 1.17alpha1 :
1610   
1611        - User/Group deletion code in edpykota rewritten.
1612       
1613    - 1.16 :
1614   
1615        - Preliminary documentation on how to use OpenOffice.org
1616          to create personnalized reports for PyKota + PostgreSQL.
1617         
1618        - Spanish installation guide for CUPS+PyKota+PostgreSQL
1619          added to the documentation. Doesn't yet document v1.16
1620          though.
1621       
1622        - Portuguese Portuguese translation replaces Brazilian
1623          Portuguese Translation. Brazilian portuguese
1624          translation is still available under the 'br' locale.
1625       
1626    - 1.16beta3 :
1627   
1628        - Swedish translation added.
1629       
1630        - Small fix in documentation.
1631       
1632    - 1.16beta2 :
1633   
1634        - Small fix for job cancelling code while job already
1635          printing in CUPS backend.
1636         
1637        - Big fix wrt printing policies for unknown users. 
1638       
1639    - 1.16beta1 :
1640   
1641        - Manpages upgraded.
1642       
1643    - 1.16alpha26 :
1644   
1645        - Job price is now computed like this :
1646       
1647          SUM((NbPages * PricePerPage) + PricePerJob)
1648         
1649          For current printer and all the printers groups it is
1650          a member of, if any.
1651         
1652          This may be difficult to grasp, but offers unprecedented
1653          flexibility.
1654         
1655    - 1.16alpha25 :
1656   
1657        - Email address can be set at user creation time,
1658          using the following syntax :
1659         
1660            $ edpykota --add username/email@yourdomain.com
1661       
1662    - 1.16alpha24 :
1663   
1664        - CGI script now can show the printing history.
1665       
1666        - Bug wrt number of copies should be fixed.
1667       
1668        - Major code refactoring => It is now possible to
1669          automatically add printers on first print.
1670       
1671    - 1.16alpha23 :
1672   
1673        - Fixed potential accuracy problem if a user printed on
1674          several printers at the very same time.
1675       
1676    - 1.16alpha22 :
1677   
1678        - edpykota now allows adding printers to printer groups
1679       
1680    - 1.16alpha21 :
1681   
1682        - Allows the dot in user and printer names.
1683       
1684        - Printer groups are now cached too.
1685       
1686    - 1.16alpha20 :
1687   
1688        - Fixed several small bugs with the help of PyChecker.
1689       
1690    - 1.16alpha19 :
1691     
1692        - Fixed a bug in PostgreSQL backend's code.
1693       
1694    - 1.16alpha18 :
1695   
1696        - Initial code for printer groups support. Printer groups have
1697          to be added with external tools like psql or gq for example.
1698          Printer groups seems to work fine with users. Untested with user
1699          groups for now.
1700
1701        - Several minor visual problems fixed in reports.
1702       
1703        - Fixed a bug in LDAP date handling.
1704       
1705        - Fix for LDAP problem with some combination of OpenLDAP + Python-LDAP
1706          + some particular settings.
1707         
1708        - mailandpopup.sh shell script added. See sample configuration file
1709          for details.
1710       
1711        - Several environment variables are now exported when executing
1712          external commands (accounters, requesters, mailers) :
1713           
1714            PYKOTAUSERNAME => user who is printing
1715            PYKOTAPRINTERNAME => printer on which the job is being sent
1716            PYKOTATITLE => Job's title
1717            PYKOTAFILENAME => Job's filename
1718            PYKOTACOPIES => number of copies asked
1719            PYKOTAOPTIONS => print command options (-o with CUPS)
1720         
1721    - 1.16alpha17 :
1722   
1723        - Added portugues translation.
1724       
1725        - Major code refactoring in accounters.
1726       
1727    - 1.16alpha16 :
1728   
1729        - Code refactoring, and addition of a real HTML reporter, to
1730          have nice looking and useful web based reports (in the future).
1731       
1732        - Added utolower configuration option to convert all usernames
1733          to lowercase during printing.
1734         
1735    - 1.15alpha15 :
1736   
1737        - Now includes the papwaitprinter.sh shell script to wait for
1738          AppleTalk enabled printers.
1739         
1740    - 1.16alpha14 :
1741   
1742        - Now printing on a printer not defined in the Quota Storage,
1743          results in the job being cancelled or stopped, depending
1744          on the printing system.
1745         
1746    - 1.16alpha13 :
1747   
1748        - Small bugfix wrt Python v2.1
1749       
1750        - If username is an empty string, user root is assumed.
1751       
1752        - 'postgresql' is not recognized anymore as a storage backend,
1753          you have to use 'pgstorage' instead. 'postgresql' used to
1754          be supported for compatibility with very old PyKota versions,
1755          this is not the case anymore.
1756         
1757    - 1.16alpha12 :
1758   
1759        - Job price added to job history, to keep accounting correct
1760          if a printer price per page or per job is modified and the
1761          history is not reset : the history would have given a false
1762          amount of money charged before the printer's prices were
1763          modified, this addition solves the problem.
1764         
1765    - 1.16alpha11 :
1766   
1767        - Some preliminary modifications to the database structure for
1768          PostgreSQL and OpenLDAP. A script to upgrade a PostgreSQL
1769          database is now provided. LDAP attributes now support
1770          eq, pres and sub indexes.
1771         
1772        - Job history now contains additional informations : 
1773          number of copies, filename, title and print options.
1774         
1775    - 1.16alpha10 :
1776       
1777        - Some modifications done to external policy handling.
1778          See sample configuration file for details.
1779   
1780        - Spanish translation added.
1781       
1782    - 1.16alpha9 :
1783   
1784        - mailto can be set to external(...) to warn users above
1785          quota with any command of your choice (e.g. linpopup).
1786          Several parameters are available, see sample configuration
1787          file for details.
1788         
1789    - 1.16alpha8 :
1790   
1791        - Now cupspykota transmits SIGTERMS to the original 
1792          backend when the user deletes a job being processed.
1793         
1794        - The documentation is now licensed under the terms of the
1795          GNU GPL too.
1796         
1797    - 1.16alpha7 :
1798   
1799        - The CUPS backend is now fully functionnal (it seems).
1800       
1801        - From now on, the use of the pykota filter with CUPS
1802          is deprecated. The pykota filter still has to be
1803          used with LPRng though.
1804       
1805    - 1.16alpha6 :
1806   
1807        - Bug fixed : when edpykota was used to add a printer
1808          with no user or group name, a bad user/group name "*" was
1809          added to the database.
1810         
1811    - 1.16alpha5 :
1812   
1813        - New CUPS backend supports device enumeration !
1814          This means that NO manual CUPS configuration has to
1815          be done. All can now be done from CUPS web interface.
1816       
1817    - 1.16alpha4 :
1818   
1819        - New CUPS backend added.
1820       
1821    - 1.16alpha3 :
1822       
1823        - Minimal FAQ document added.
1824       
1825    - 1.16alpha2 :
1826   
1827        - CGI script now partially supports browser's language preference
1828       
1829    - 1.16alpha1 :
1830   
1831        - Ensures that the LDAP connection is really closed at end.
1832       
1833        - More complete error messages in case of LDAP operation failure.
1834       
1835    - 1.15 :
1836     
1837        - Documentation improved.
1838       
1839    - 1.15beta :
1840   
1841        - Command line tools now accept multiple printer
1842          names or wildcards, separated with commas.
1843         
1844    - 1.15alpha9 :
1845   
1846        - External policy can be used to auto-add unknown users
1847          and any other interesting things you may want to do.
1848          WARNING : You can't auto-add printers for now.
1849          They have to be created manually before.
1850          Look at sample configuration file for examples.
1851         
1852    - 1.15alpha8 :
1853   
1854        - Job history can be disabled if needed.
1855          This feature may be useful for people who use the LDAP
1856          backend and don't want their LDAP tree to grow out of
1857          control.
1858       
1859    - 1.15alpha7 :
1860   
1861        - More work done on caching wrt groups.
1862       
1863    - 1.15alpha6 :
1864   
1865        - Performance bottleneck with LDAP solved.
1866       
1867    - 1.15alpha5 :
1868   
1869        - Caching mechanism for all database queries.
1870
1871    - 1.15alpha4 :
1872   
1873        - Problem with Python 2.3 fixed. Needs some definitive
1874          modification.
1875         
1876    - 1.15alpha3 :
1877   
1878        - CGI script now tries to restrict view when the
1879          REMOTE_USER environment variable is set. This allows
1880          people to protect its use with .htaccess files.
1881          When unprotected, or if REMOTE_USER is 'root', then
1882          unrestricted access is granted.
1883          NB : REMOTE_USER is automatically set by the web server
1884          (e.g. Apache) when a page with restricted access is viewed.
1885         
1886    - 1.15alpha2 :
1887   
1888        - Better detection of LPRng.
1889       
1890        - Outputs a warning if printing system is unknown.
1891       
1892    - 1.15alpha1 :
1893   
1894        - Bug fix in SQL code.
1895       
1896    - 1.14 :
1897   
1898        - The PostgreSQL database connection is now always closed before
1899          exit. The LDAP database connection too, but it didn't suffer
1900          from the problem anyway, AFAICT.
1901       
1902    - 1.14beta2 :
1903   
1904        - An LDAP-specific configuration field was introduced, usermail.
1905          Use it to specify which LDAP attribute contains a valid email
1906          address for the user. See sample configuration file for
1907          details.
1908       
1909    - 1.14beta :
1910   
1911        - Two new LDAP-specific configuration fields were introduced,
1912          newuser and newgroup. Use them to specify if you want to add
1913          quota information to existing entries or elsewhere.
1914          See sample configuration file for details.
1915         
1916    - 1.14alpha9 :
1917   
1918        - Documentation improved.
1919       
1920        - pykotme now also prints the user's account balance value
1921          if the user is registered in the Quota Storage and his
1922          limiting factor is "balance".
1923         
1924    - 1.14alpha8 :
1925   
1926        - bin/waitprinter.sh is now included to wait for
1927          SNMP enabled printers to be idle again before
1928          asking for their internal page counter.
1929          See sample configuration file for details.
1930         
1931    - 1.14alpha7 :
1932   
1933        - edpykota now doesn't check if the user/group is above
1934          quota. The check is only done at print time. This
1935          prevents the sending of email messages when creating
1936          user quotas if quota is already reached at creation
1937          time.
1938         
1939    - 1.14alpha6 :
1940   
1941        - Configuration file split and moved to /etc/pykota/pykota.conf
1942          and /etc/pykota/pykotadmin.conf to prevent simple users to
1943          have Read/Write access to the Quota Database.
1944          Don't forget to :
1945         
1946                $ chmod 640 /etc/pykota/pykotadmin.conf
1947               
1948        - storageuser and storageuserpw configuration fields reintroduced
1949          for the same reason.
1950         
1951        - Code cleaning for future implementation of email addresses
1952          support in the PostgreSQL and LDAP backends.
1953         
1954    - 1.14alpha5 :
1955       
1956        - Big bug fixed when changing the prices for a printer
1957       
1958    - 1.14alpha4 :
1959   
1960        - When adding an user, the user itself and its account balance
1961          are now added in the same LDAP entry. Before they were added
1962          as two different LDAP entries.
1963         
1964    - 1.14alpha3 :
1965   
1966        - Email field added to PostgreSQL database. An upgrade script
1967          is included in initscripts/postgresql.
1968       
1969    - 1.14alpha2 :
1970   
1971        - Typo fixed when using the --prototype option to edpykota
1972       
1973    - 1.14alpha1 :
1974   
1975        - Poor man's treshold included : users with a low account
1976          balance (below 1.0 by default, configurable) are sent
1977          a warning message.
1978         
1979        - All warning messages to users are now configurable. 
1980          NB : Warning messages to the administrator are not.
1981       
1982    - 1.13 :
1983   
1984        - Some small fixes wrt group handling.
1985       
1986        - The whole module code was passed through PyChecker and
1987          several small code inconsistencies were fixed,
1988          as well as a bug in the groups code.
1989         
1990    - 1.13alpha1 :
1991   
1992        - Bug fix wrt LDAP.
1993       
1994    - 1.12 :
1995   
1996        - More complete test added in edpykota.
1997       
1998    - 1.12alpha2 :
1999   
2000        - The previous bug fix was incomplete. This is corrected.
2001       
2002    - 1.12alpha1 :
2003   
2004        - Small bug fix.
2005       
2006    - 1.11 :
2007   
2008        - Now includes the pykotme command line tool, to produce
2009          printing quotes for users.
2010         
2011    - 1.10 :
2012   
2013        - Bug fixed wrt quota reports when print limiting is by
2014          account balance.
2015         
2016    - 1.09 :
2017   
2018        - Translations finalized.
2019       
2020        - Manpages updated.
2021       
2022        - Installation documentation improved wrt LDAP support.
2023       
2024    - 1.09beta2 :
2025   
2026        - The CGI script for quota reports works again, and
2027          is much more powerful.
2028       
2029    - 1.09beta :
2030   
2031        - edpykota finalized
2032       
2033    - 1.09alpha2 :
2034   
2035        - LDAP schema modified a bit. Please upgrade.
2036       
2037        - LDAP backend works !
2038       
2039        - repykota and warnpykota allow the root user to pass
2040          users or groups names on the command line. Users
2041          and groups names may contain wildcards.
2042         
2043        - repykota and warnpykota only reports or warns the
2044          current user when launched by non-root users.
2045         
2046        - Minor bug fixes. 
2047   
2048    - 1.09alpha1 :
2049   
2050        - More work on LDAP storage backend. Many options
2051          were added to /etc/pykota.conf to give some
2052          hints to the LDAP storage backend.
2053         
2054        - Severe database access optimizations were done by
2055          rewriting most of the Quota Storage backends drivers.
2056     
2057    - 1.08 :
2058   
2059        - Major bug fix wrt LPRng support for remote jobs.
2060       
2061        - Major bug fix wrt increase/decrease account balances.
2062       
2063    - 1.08alpha8 :
2064   
2065        - Code refactoring.
2066       
2067        - A single user/password pair is used to connect
2068          to the database backend. The storageuser configuration
2069          field, and its associated passwords storageuserpw, are
2070          not used anymore.
2071         
2072        - You can now set PyKota in debug mode, see sample configuration 
2073          file for details.
2074          WARNING : only Quota Storage backend queries are logged in
2075          debug mode, for now.
2076       
2077    - 1.08alpha7 :
2078   
2079        - Very latest LDAP schema.
2080       
2081        - Code enhancement wrt easy pluggability of PyKota attributes
2082          and object classes into an existing LDAP directory.
2083       
2084    - 1.08alpha6 :
2085   
2086        - Minor bug corrections
2087       
2088        - More work on LDAP : new schema
2089       
2090    - 1.08alpha5 :
2091   
2092        - More good work on LDAP storage.
2093          repykota now works reasonably well with the sample LDAP directory.
2094       
2095    - 1.08alpha4 :
2096   
2097        - LDAP schema included.
2098          THIS IS JUST FOR PEOPLE TO DISCUSS ABOUT THIS.
2099          LDAP SUPPORT DOESN'T WORK YET, AND THE SCHEMA
2100          MAY CHANGE IN THE FUTURE. PLEASE TELL US
2101          WHAT YOU THINK ABOUT THIS SCHEMA ON THE
2102          MAILING LIST.
2103         
2104    - 1.08alpha3 :
2105   
2106        - External accounting methods were partly rewritten :
2107         
2108          - No more "broken pipe" should happen.
2109         
2110          - They now take care of the number of copies
2111            This may be unneeded though, if the postscript
2112            file already does this, because this would
2113            overcharge users (number of copies counted
2114            two times). NEEDS MORE TESTING.
2115           
2116          - The sample configuration file now contains 
2117            an external accounting method example which should
2118            work with all DSC compliant Postscript files.
2119           
2120        - Some small bugs were fixed.   
2121       
2122    - 1.08alpha2 :
2123   
2124        - Now works with net-snmp v5.0 and above.
2125          It already worked, but the sample configuration
2126          file didn't contain appropriate values...
2127       
2128    - 1.07 : Release of the Shame !
2129   
2130        - The external accounting methods driver was left out of
2131          the CVS tree. Nobody could use it since it wasn't included !
2132         
2133    - 1.06 :
2134   
2135        - Severe bug fixed : if you had a printer in
2136          power saving state which couldn't answer immediately,
2137          a bug was triggered.
2138          It was caused by a bad copy/paste which
2139          forgot to import a Python module at run time.
2140         
2141    - 1.05 :
2142   
2143        - External accounters are finally available !
2144          This means that you can plug any page accounting
2145          method you like by setting the appropriate
2146          'accounter' field in /etc/pykota.conf
2147          See the sample conf/pykota.conf.sample to
2148          learn how to do.
2149         
2150          NB : Both 'external' and 'stupid' accounting methods
2151               account a job size just before *this* job is
2152               sent to the printer.
2153               The original 'querying' method accounts a job
2154               size just before *the next* job is sent to
2155               the printer.
2156       
2157    - 1.05alpha3 :
2158   
2159        - A 'stupid' and unreliable accounting method was
2160          implemented to serve as an example on how to
2161          do this sort of things. This method only counts
2162          the 'showpage' statements in the input data.
2163          See sample configuration file for details.
2164          Pluggable accounting methods work, but I advise
2165          you TO NOT USE THIS ONE WHICH IS JUST AN EXAMPLE.
2166          It is not reliable enough to be used.
2167          Use the 'querying' accounting method instead.
2168         
2169    - 1.05alpha2 :
2170   
2171        - Pluggable accounting methods.
2172       
2173        - Better error handling.
2174       
2175    - 1.05alpha1 :
2176   
2177        - SECURITY file added to help improve PyKota's security.
2178       
2179        - Extracting the printer's internal page counter is now
2180          tried several times, waiting several seconds between
2181          two tries. This lets the time to warm up for some printers
2182          which don't answer when they are sleeping (my Apple
2183          LaserWriter 16/600 PS is in this case, maybe others too)
2184         
2185        - Small display bug fixed in repykota
2186         
2187    - 1.04 :
2188   
2189        - Default print policy for users/groups unknown from
2190          the print quota system is now DENY instead of ALLOW,
2191          since ALLOW can generate inaccurate results
2192          (incorrect job sizes charged to the wrong persons)
2193         
2194        - LPRng support works !
2195       
2196        - A bug was introduced some time ago wrt printers' default
2197          policy for unknown users. It is now corrected.
2198       
2199        - repykota now displays prices per job and per page for each
2200          printer, if they are defined.
2201         
2202        - Minor display bug fixed in repykota.
2203       
2204        - Problem when running repykota with an empty database was fixed.
2205       
2206    - 1.03 :
2207   
2208        - Upgrade script included for earlier versions.
2209          Please look inside the initscripts subdirectory.
2210          THE DATABASE SCHEMA HAS CHANGED, PLEASE UPGRADE.
2211         
2212        - repykota now reports account balances too.
2213       
2214        - PyKota now has a nice logo, see the logos
2215          subdirectory.
2216       
2217        - Manual pages were finally updated.
2218       
2219        - Group quotas seem to work now !
2220       
2221        - The new database schema allows to keep an history of all
2222          jobs as well as charge users per page and/or per job,
2223          and track users' account balance.
2224         
2225        - edpykota now accepts much more command line options to 
2226          use the new functionnalities. See edpykota --help for
2227          details.
2228         
2229        - The installation script now allows to install the sample
2230          configuration file during first installation.
2231         
2232        - More group quota code works, but still not finished. 
2233       
2234        - The CGI script displays a link to PyKota's website.
2235       
2236        - The job history is now kept, this will allow per-period
2237          reports in the future.
2238         
2239        - After having modified the quota for an user with edpykota,
2240          a quota check is done to eventually warn the user/admin about
2241          a quota which is too low to print.
2242         
2243        - A workaround is provided for HP Printers : their internal
2244          page counter is only saved to NVRAM in a 10 increment, so
2245          if you switch them off and then on, the reported page counter
2246          may be lower than the real number of pages printed.
2247          See http://web.mit.edu/source/third/lprng/doc/LPRng-HOWTO-15.html
2248          We unconditionnally set the last job's page count to
2249          abs(int((10 - abs(lastcounter(snmp) - lastcounter(storage)) / 2))
2250          in this case.
2251          For a more accurate accounting, never switch your HP printers
2252          off.
2253         
2254        - A fix is provided for printers which only have a volatile 
2255          page counter (reset to 0 every time you switch the printer on)
2256          This should allow PyKota to work reasonably fine with HP Laserjet
2257          4L/5L/6L, not perfect, but better than nothing.
2258          See http://web.mit.edu/source/third/lprng/doc/LPRng-HOWTO-15.html
2259          For a more accurate accounting, never switch your HP printers
2260          off. This is untested, please report any problem.
2261         
2262        - A bug was fixed when edpykota --add was used with users who already
2263          had a quota on the specified printer.
2264         
2265        - A small display bug in repykota was introduced in preliminary
2266          1.03 versions, and fixed later on.
2267         
2268        - Some minor bugs which happened in rare situations were fixed.
2269       
2270        - Support for AppleTalk printers was added, see sample configuration
2271          file for details.
2272         
2273        - Users and group printing can now be controlled (limited) either by 
2274          print quota or by account balance.
2275       
2276    - 1.02 :
2277   
2278        - The installation script now checks for software availability
2279          and in case a software is missing asks the user if he
2280          wants to continue with the installation or abort it.
2281         
2282        - The configuration file pykota.conf is now expected to be
2283          found in /etc instead of in /etc/cups
2284          The installation script prompts the user to see if he
2285          wants to move an old configuration file to the new location
2286          if needed.
2287         
2288        - Improved documentation.
2289       
2290        - You can now set the tcp/ip port on which the Quota Storage
2291          Server is listening, see sample configuration file for details.
2292       
2293        - Better general error handling.
2294       
2295        - Upgrade script for pre 1.01 PostgreSQL database schema is now
2296          included as well.
2297       
2298    - 1.01 :
2299   
2300        - The configuration file now accepts an option   
2301          to choose the recipient(s) of the email messages :
2302         
2303            - DevNull means no one will receive them.
2304            - User means only the user will receive them.
2305            - Admin means only the admin will receive them.
2306            - Both means the User and the Admin will receive them.
2307           
2308        - The configuration file now uses hard-coded default values
2309          when an option is not set. See sample configuration file
2310          for details.
2311         
2312        - Manual pages are included since 1.00, but I forgot to   
2313          add this information to this file.
2314         
2315        - Redistribution terms for the official package have 
2316          softened and are now fully GPL compatible :
2317          unrestricted modification is now allowed even for
2318          the version number.
2319         
2320    - 1.00 :
2321   
2322        - edpykota now accepts a --noquota option. This
2323          disable quota checking while still doing page
2324          accounting. This is really useful for people
2325          who don't want to limit their users but want
2326          to know how much pages they print.
2327         
2328        - Some untested scripts were added to retrieve
2329          the life time page counter of non-SNMP printers.
2330         
2331        - Every directory now has a specific README file. 
2332       
2333    - 0.99 :
2334   
2335        - Under some circumstances while the user wasn't allowed
2336          to print, he didn't receive any email message. It is
2337          now fixed.
2338         
2339        - When an user wasn't allowed to print, the quota for
2340          the previous user wasn't updated. This is now fixed.
2341         
2342    - 0.98 :
2343   
2344        - Correctly handle the case where the printer is switched off.
2345       
2346        - Small bug wrt syslog fixed.
2347       
2348    - 0.97 :
2349   
2350        - edpykota accepts wildcards on its command line for users/groups too
2351          if the --add option is not set, e.g. :
2352         
2353              $ edpykota --printer lp --softlimit 50 --hardlimit 100 "jer*"
2354             
2355        - If no user name is passed at all, then a default wildcard of "*"
2356          which means apply the command on ALL users for this printer is used.
2357         
2358        - Small bug fixes.
2359       
2360    - 0.96 :
2361
2362        - Options requester, policy, admin, adminmail and gracedelay can now
2363          be set either globally or per printer. The printer option has
2364          priority if both are defined.
2365
2366        - More powerful configuration parser.
2367       
2368        - If all options are defined globally, there's no need to
2369          define a section for each printer in the configuration
2370          file anymore. Just define a [global] section and it's ok.
2371
2372    - 0.95 :
2373
2374        - External requesters for printers finally added.
2375
2376        - Full internationalization (english and french are supported)
2377 
2378        - More complete quota usage report
2379
2380        - CGI script to access to the quota usage report
2381
2382        - Several bugs fixed.
2383
2384
2385    - 0.9 :
2386
2387        - First public version
Note: See TracBrowser for help on using the browser.