Date: Mon, 22 Nov 1999 23:18:34 -0600 (CST) From: Jonathan Abbey <jonabbey@arlut.utexas.edu> To: ganymede-announce@arlut.utexas.edu Subject: [Ganymede Announce] Ganymede 0.99.8 released Ganymede 0.99.8 is now available for download at http://www.arlut.utexas.edu/gash2/ or ftp://ftp.arlut.utexas.edu/pub/ganymede/ Mirrors: (may take a short while to update) ftp://ftp.netlag.com/ganymede/ (USA) ftp://mirror.aarnet.edu.au/pub/ganymede/ (Australia/NZ only) ftp://ftp.kddlabs.co.jp/pub/ganymede/ (KDD R&D Labs, Saitama, Japan) Ganymede is a GPL'ed network directory management system written in Java, providing support for team management of NIS, DNS, etc. -- This release incorporates a wide variety of improvements and bug fixes that have shown up as we have used Ganymede in fulltime production at ARL:UT over the last 6 weeks. New features include object cloning, FreeBSD, OpenBSD, and Linux-compatible MD5 password support, and a big rework of the object database logic to improve concurrency when it comes to making asymmetric object links. The old 'backlinks' field is gone, and the server can now link or unlink objects without having to assert an exclusive lock on both sides of the link, in the case where the back-link is not visible on one side of the link. A fairly large number of usability and performance improvements have been made to the Ganymede client, as well. For 0.99.9, I'm planning on focusing almost entirely on documentation and on reworking the way schema kits are configured and installed, to make it easier for people to develop and support schema kits independent of the main Ganymede distribution. -------------------- Changes from 0.99.7 to 0.99.8 ------------------- RELEASE DATE: November 23 , 1999 1. [SERVER] Included regexp info in schema html dump The html/text schema dump facilities in DBObjectBaseField.java now include regexp information for string fields, if defined. 2. [SERVER, CLIENT] Made it possible to do a more limited log search Previously, the history panel in the client's "show history" function showed the complete transaction in which the object was modified. There is now support for showing only changes directly affecting the object in question. Added a new version of viewObjectHistory to the Session RMI interface. Added explanatory tool tips to the show history buttons in the client's history panel. Cleaned up the historyPanel generally. 3. [CLIENT] Cleaned up object report mail/save dialog The Ganymede client allows the user to mail and/or save a status summary for single objects in the Ganymede database (from the File menu in the object view/edit window), but the dialog that came up was really lousy, and hadn't been touched for over a year. I restructured the dialog and made it more usable. 4. [SERVER] Made server start-up less fragile A user here got a ganymede.db file into a state where a field had a namespace listed, but that namespace wasn't declared in the .db file. The server was not able to recover from this because the DBObjectBaseField class was throwing an illegal argument exception. I modified DBObjectBaseField so that a warning message is displayed instead. Hopefully I'll be able to find how the system got into that state and prevent it, but the server can deal with that inconsistency now. 5. [SERVER] Improved Qsmtp mail-out code Previously, the Qsmtp mailer code would abort sending a message if any of the recipients were rejected by the mailhost. Now the Qsmtp code will go ahead and complete the message if any of the recipient addresses were accepted. This was causing the 'bad login' mail for an invalid user login attempt not to be sent. 6. [CLIENT] Made rpcpass exit cleanly The rpcpass client (used in conjunction with the Linux NISkit's rpc.yppasswdd to pass NIS password changes into Ganymede) wasn't properly terminating after execution a transaction in Ganymede, resulting in lots of lingering rpcpass processes hanging around. This is a result of the JVM's policy of not closing down an application until all of its non-daemon threads terminate. Since the rpcpass code is an RMI server, this never happened. I added a System.exit(0) to take care of this. 7. [SCHEMA] Minor fix to the nisonly schema Fixed the nisonly schema's userCustom.java's fieldRequired() method to not attempt to call isInactivated() on the non-value-containing objectHook instance of userCustom.java. John Knutson here at ARL was developing a schema based on the nisonly schema kit, and it turns out that I haven't done much in the way of upkeep on that schema kit for awhile now. 8. [SERVER] Made GanymedeBuilderTask.backupFiles handle an empty dir ok The backupFiles() method in the GanymedeBuilderTask class is intended to produce a zip archive of all files in the out directory when a builder task is run. Unfortunately, it caused an exception to be thrown if there are no files in the out directory, as is the case the very first time the builder task is run after installing Ganymede. This has been fixed. Thanks to John Knutson for reporting this. 9. [SCHEMA] Fixes to the gasharl schema a) The server used to throw an exception if an admin created a user and hit 'commit' without filling in the home group field, because some of the custom logic wasn't checking to make sure that the field was there before trying to do calculations based on it. b) Moving a system from a room to another which was not connected to the network that the system had been allocated on was broken.. a 'can't free network' error was being reported. This case is now properly handled. 10. [CLIENT] Miscellaneous Client Improvements and Fixes a) You can now right-click on a row in the query result table and inactivate or delete objects shown, rather than having to do a query to find the object you want to delete and then use the tree to find and delete it. b) Related to this change, the 'are you sure you want to delete this' dialog will now appear whenever an object is deleted, whether from the delete object dialog, the table, or the tree (which used to not prompt for verification). The object deletion verification dialog is now more friendly and descriptive. c) The client now resets its 'default owner chosen' flag when the user changes personae. *** STILL NEED MORE HERE *** d) The GUI component for scalar invid fields has been very significantly revised to make it possible to enter a choice by using the keyboard instead of having to mouse through a possibly huge list. This was done using a custom JComboBox editing component that monitors keystrokes to do 'choice completion' during the course of text editing. I'm sort of pushing the Swing JComboBox to the limit here.. hopefully with Kestrel/1.3 Swing will be more useful for real world stuff. e) Reworked StringSelector to put the add box on the left, and to enable typed choice completion if the only valid choices are listed f) Changed the layout algorithm for window placement within the client. No more client windows being placed partially outside the client's display area. 11. [SERVER] Implemented support for object cloning Since the beginning, I've planned on having a clone_db_object() method on the server that would create a new object by copying values from an existing one, but somehow I never had gotten around to implementing it. The work John Knutson is doing with Ganymede would benefit from this feature particularly, so I went ahead and got it done today. This involved lots of changes to the server, including DBField and all its subclasses, DBEditObject, DBObject, GanymedeSession, and possibly other classes. These changes included making the server's code differentiate between inhibiting wizards for the sake of an automated field copy and inhibiting oversight for the purpose of loading the database on server start, etc. I still need to document all of this in the DBEditObject subclassing guide. 12. [SERVER] Added support for floating point fields All of the code for this came from John Knutson (johnk@arlut.utexas.edu) here at the laboratory. This change bumps the DBStore revision numbers to major: 1 minor: 15 13. [CLIENT] Improved speed for object editing The client was inefficiently and redundantly sorting large choice lists, slowing object editing down a great deal. Now all QueryResult objects from the server are automatically sorted one time only, on receipt, using an efficient binary insertion sort. 14. [SERVER] Reworked Password fields to support FreeBSD-style MD5 hashing The Ganymede has supported 'MD5 passwords' since August, but this was actually just a simple MD5 hash of the plaintext. FreeBSD, OpenBSD, Linux PAM, and possibly other operating systems use a much more involved process of generating 'MD5' passwords, including a salt field and a thousand round trip through MD5 to make dictionary cracks much more time-consuming. Ganymede's PasswordDBField class now supports these fancy MD5 passwords, and the old support for a simple MD5 password hash has been removed. This change bumps the DBStore revision numbers to major: 1 minor: 16 15. [CLIENT] Fixed tree filtering The Ganymede client had a bug in gclient.recurseDownCategories which could cause categories to be erroneously omitted from the client's tree display in a specific situation. This was detected by John Knutson in regard to a custom schema that he did. 16. [SERVER] Took unnecessary fields out of the DBObject class I took the 'int id' and 'DBEditSet editset' variables out of the DBObject class. This will save 8 bytes per object in the database in memory. Not a major deal, but every little bit helps, I suppose. Added methods to compensate for the lack of the redundant, but directly accessible variables. 17. [SERVER] Major reworking of object linking I spent a week and did major surgery on the Ganymede server's handling of non-symmetric object linking. Previously, if an invid field did not point to an explicit field in a remote object, the server would automatically maintain the symmetric back pointer in the target object's back links field, field 8. This meant that whenever an object's field was set to point to an object, that object had to be exclusively checked out by the server to handle the association. Only one transaction at a time could establish such a linking, which could make for a really big and unnecessary bottleneck in the server. Now the server maintains at all time a separate, in-memory hash structure for back pointers. This hash structure is designed to allow any number of objects to 'anonymously' link to a given object concurrently. The server maintains a separate system to track deletion locking for objects, allowing anyone to forge or remove an asymmetric link to a common object, and to allow the common object itself to be edited, as long as no one tries to delete that common object. This change can drastically increase performance in cloning objects which point to a lot of non-symmetrically linked objects, since those targetted objects no longer need to be pulled out of the database for editing in order to establish the link. This change bumps the DBStore revision numbers to major: 1 minor: 17 18. [SERVER] Server object accounting fix There was an opportunity for the server's objects checked-out accounting to get out of sync if an object creation operation was not able to proceed to completion as a result of a failure to perform the custom object initialization. Now the server's object accounting should be reliable under all circumstances. 19. [SCHEMA] Updated BSD and Linux schema kits to support MD5 hashed passwords I have put preliminary (but functional) support into the Linux and BSD kits for MD5-hashed passwords. Someone will have to let me know how well this works. ------------------------------------------------------------------------------- Jonathan Abbey jonabbey@arlut.utexas.edu Applied Research Laboratories The University of Texas at Austin Ganymede, a free NIS/DNS management system http://www.arlut.utexas.edu/gash2 ---------------------------------------------------------------------------- To make changes to your subscription to the ganymede announcement list, send mail to majordomo@arlut.utexas.edu. To unsubcribe, include the line unsubscribe ganymede-announce in the body of your mail message Visit the Ganymede web page at http://www.arlut.utexas.edu/gash2 ----------------------------------------------------------------------------