Nicolas Williams wrote:
> 
> > If it's implementation-specific, then as far as writers of portable 
> > applications are concerned, it might as well be "no".
> 
> Agreed.  The question in mind is: can we just add mt requirements to the
> C-bindings?

Not for GSS-API _v2_.   

You can add an appendix with guidelines for multithreaded environments,
but new requirements at this late time (8 years of installed base)
are a pretty bad idea.  I mentioned that before, although the formal
standards level of GSS-API v2 is proposed, the de-facto level is
full standard--what's missing is the sorting-out of the features
that are currently in the standard and that have interoperability
problems and strong words of caution added.

i.e. what is missing is to figure out which fraction of the current
GSS-API v2 spec is the mature core of a draft standard GSS-API v2.

You did notice that the Appendix on binary-level interoperability
is just a guideline, no requirements there.  


> 
> And doesn't the foregoing apply to the base spec also?

I'm not sure, but I doubt the base spec of GSS-API **v2** should deal
with multi-threading issues.  I don't have any real experience with other
language environments.  Java is said to support multi-threading.
How about concurrent use of gss_ctx_id_t and gss_cred_id_t and
gss_name_t from several threads?  How are such things usually
done in Java?  Are the Mutex-Primitives and are they used to
serialize access to shared objects?

I'm nowhere near a multi-threading guru.  I never liked the concept
and I still think it belongs more to the category of problems rather
than to the category of solutions.  But during the last 4 years
I had to write and support an SSL abstraction for our application
using an OEM library for *ALL* of our platforms.  We do have
source for that OEM library and I've been doing development,
porting and debugging/maintaining that library as well.


> > (Granted, we're talking about recommendations for better compatibility, 
> > not an actual ABI specification.  So if it can't actually work on all 
> > systems, it's not a fatal flaw.)
> 
> One thing I notice now is that the language of rfc2744 seems to make a
> distinction between recommendations for implementations and
> recommendations for platforms.  It seems that a single ABI for any given
> platform is desired.
> 
> I appreciate this but, how is an ABI to be specified for any given
> platform?  No mechanism is provided or discussed for reaching agreement
> on a given ABI for a given platform, so how could competing implementors
> agree?

Experience shows that it is possible to create interoperable implmentations
without a formal ABI, however it often means that one side has to
adapt to the other before it is finalized and shipped--or one may need
glue-code between application and gssapi mechanism to convert
between incompatible binary interfaces.  We have provisions for
loading the glue library in our application and ship a C-source
skeleton for the function wrapper glue code.

I noticed an interoperability problem in the HP-UX 11.i 64-bit Kerberos
library with our code.  I was able to make it interoperate with a
shared library adapter.


> 
> The base spec needs to look after its namespaces.  Each bindings spec
> need to do the same, and if they borrow names from the base spec then
> they need to specify how that affects the language's namespace.

I actually prefer when a spec doesn't create the impression to be
perfect or complete.  When it's obvious that there's something missing,
new implementors tend to take a look at other existing implementations
that are potential candidates for interoperability and copy whatever
that implementation does.  I think that approach works, and it often
works much better as the "we know everything, we spec everything"
approach.

Just look at X.509 and PKIs.  It's an awfully large and complex set
of specs.  Don't expect any two independent implementations to fully
interoperate on their first encounter in the wild.  Have you ever
read Peter Gutmann's X.509 style guide?
(http://www.cs.auckland.ac.nz/~pgut001/pubs/x509guide.txt)

I think that a lengthy spec can create more misunderstandings than a short
spec has deficiencies.  With a long spec people are going to fight about
how parts of the spec are meant.  If the spec is silent in some
controversial or not well-researched areas then implementors need to
negotiate and apply common sense if they want to interoperate.

Spec writers may be better off not specifying details which they do
not fully and thoroughly understand themselves.  A detailed spec
can not substitute interoperability testing and resulting adjustments to
the implementations, although many people seem to believe it might.


> 
> > >>  Can I use gss_uint32 in my code?  (True, there's no guarantee that
> > >>  it's the same as OM_uint32.)
> > >
> > >There should be.  It's implicit in the name.
> > 
> > No, what's implicit in the name is that both should be unsigned 
> > integral types of at least 32 bits.  On an ILP32 system, one could be 
> > unsigned int and the other unsigned long.  Mostly compatible in C, but 
> > could trigger diagnostics if you use pointers or multiple declarations. 
> 
> Gross.  Also, I just noticed that rfc2744 section 3.1 says that
> OM_uint32 is at least 32 bits, not exactly.
> 
> And appendix A guarantees gss_uint32 == OM_uint32 if xom.h was missing.

Probably xom.h is missing because the OS vendor made it part of an optional
software package of the operating system and *NOT* part of the compiler.
That is probably the real killer.

Our HP-UX 10.20 build machine has /usr/include/xom.h installed
(where it is part of DCE).  But none of our HP-UX 11.0 and 11.11 build
machine has it installed...  None of our AIX 4.2.1, 4.3.2, 4.3.3 and 5.1
build machines has it and neither has any single one of our Tru64,
Solaris and Linux build machines...

The reference to xom.h is pretty useless today because all the
(Unix) OS vendors apparently unanimously decided that this standard
isn't worth to exist.

The reason why there is a reference to xom.h and X/Open at all is
because there is an X/Open standard for GSS-API and it was published
somewhere between IETF GSS-API v1 (rfc1508/9-1993) and
IETF GSS-API v2 (rfc-2743/4-2000).

However, the DCE-hype has long faded away, except maybe for some niches.


> 
> >  But if the code that interacts with the GSS-API C bindings is written 
> > with the assumption that they could be different types, then it should 
> > be safe.
> > 
> > But the other part of my point was, since the gssapi.h provided is 
> > apparently what is required to be supplied to application writers, then 
> > gss_uint32 must be available, even though it's not directly used in the 
> > API (and if xom.h is available, isn't indirectly used either), or even 
> > mentioned anywhere outside the appendix.
> 
> I think the right answer is: "gss_uint32" is private to gssapi.h (even
> if visible) and should not be used outside it.


Well, maybe we should switch to gss_uint32 instead of OM_uint32 and
remove the references to xom.h and X/Open?


-Martin

-++**==--++**==--++**==--++**==--++**==--++**==--++**==
This message was posted through the Stanford campus mailing list
server.  If you wish to unsubscribe from this mailing list, send the
message body of "unsubscribe ietf-cat-wg" to [EMAIL PROTECTED]

Reply via email to