profile library gotchas

Miro Jurisic meeroh at MIT.EDU
Wed Apr 24 11:46:00 EDT 2002

I recently found two interesting behaviors in the profile library 
which should at least be documented for posterity, if not corrected:

1. iterating and deleting doesn't delete everything

A loop such as this:

while (profile_iterator_next (iter, &name, &value)) {
	profile_clear_relation (profile, name, value);

does not delete all items that the iterator would have returned. It 
leaves one item behind.

This can be worked around by running the loop twice -- the second 
time around the loop deletes the one remaining item

2. deleting multiple relations interferes with iterators

If you have a section which contains more than one value for a key 
and some of those values are the same, such as:

	kdc = x
	kdc = y
	kdc = x
	kdc = z

and you try to delete them all with the same loop as above, you will 
fail, because the first call to clear_relation will delete both 
instances of kdc=x, but the iterator will return the second instance 
later, so when you try to delete the second instance again, you get 
an error and the loop fails.

This can be worked around by ignoring a specific error when returned 
by profile_iterator_next in such loops (but I forget the exact error. 
NO_RELATION, probably).

This is a problem because the same behavior is exhibited when you 
have more than one krb5.conf in the profile path, and they contain 
some duplicate information. So, if your /etc/krb5.conf has kdc = x 
and kdc = y, and your ~/krb5.conf has kdc = x and kdc = z, then a 
loop that tried to delete them all fails on the second kdc = x.


<> | KB1FMP

If you have received this email in error, please add some nutmeg and 
egg whites, whisk and place in a warm oven for 40 minutes.

More information about the krbdev mailing list