root / pykota / trunk / NEWS @ 2868

Revision 2868, 77.8 kB (checked in by jerome, 18 years ago)

Changed date.

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