Ganymede 0.99.8 released

Jonathan Abbey broccol at
Tue Nov 23 05:39:21 UTC 1999

Ganymede 0.99.8 is now available for download at


Mirrors: (may take a short while to update) (USA) (Australia/NZ only) (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 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

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's fieldRequired() method to
not attempt to call isInactivated() on the non-value-containing
objectHook instance of

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

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

12. [SERVER] Added support for floating point fields

All of the code for this came from John Knutson
(johnk at 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

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

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 at
Applied Research Laboratories                 The University of Texas at Austin
Ganymede, a free NIS/DNS management system

More information about the bind-users mailing list