Proposed platform assumption changes

ghudson@MIT.EDU ghudson at MIT.EDU
Fri Jan 27 18:55:02 EST 2012

I'd like to propose some changes to the platform assumptions we make
for the krb5 code base.  In short:

* Assume POSIX signal support
* Assume IPv6 support
* Assume C99 variadic macro support
* Assume threading support (POSIX or Windows)
* Assume mutex unlocking can't fail
* Assume mutex locking can't fail

Here's some longer discussion of the above and other possible changes:

* POSIX signals, IPv6, and thread support have become ubiquitous on
  platforms people are likely to build krb5 on.  We can reduce
  complexity (particularly in network code by assuming IPv6) by
  assuming these features.

* We don't have a lot of uses for variadic macros, but we do have a
  few (like the macros in k5-trace.h), and they've already crept into
  the code base a bit.  It's one of the few C99 features supported by

* It's basically impossible to recover gracefully from failure to
  unlock a mutex.  In practice, I think mutex unlocking generally
  can't fail except due to programmer error (unlocking a mutex you
  don't own).

* Having to check for mutex lock failures adds a lot of failure
  handling logic which is difficult to test and probably unnecessary.
  The only practical case I'm aware of where a mutex lock can fail is
  if you try to lock a recursive mutex too many times, but the
  k5_mutex abstraction doesn't support recursive mutexes anyway (when
  we need them we build our own wrapper).

* I also considered proposing an aborting malloc wrapper.  Platforms
  generally respond to out-of-memory conditions by killing processes,
  not returning null from malloc(), and checking for malloc failures
  adds an extraordinary amount of failure handling logic to our code,
  which again is difficult to test.  However, Kerberos code is
  sometimes used in kernels or in embedded environments, and I'm
  reluctant to make a change which might prevent it from being used

* Named structure initializers appear to be a favorite C99 feature;
  we've had three separate cases in the past year of people submitting
  code using them and having to ask for it to be changed.
  Unfortunately, it's not supported in MSVC, and there's no pretty way
  of wrapping them to make it work there.  We could consider changing
  our Windows build to use mingw, but that would be a lot of work and
  might present other issues.

More information about the krbdev mailing list