root / pykota / trunk / NEWS @ 2624

Revision 2624, 74.2 kB (checked in by jerome, 18 years ago)

Now cupspykota can be interrupted cleanly with SIGINT.

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