root / pykota / trunk / NEWS @ 2864

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

Added something to the changelog

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