Patch to ignore service principals when accepting connexions.

Greg Hudson ghudson at MIT.EDU
Thu Aug 26 12:00:27 EDT 2010


On Wed, 2010-08-25 at 21:40 -0400, Roland C. Dowdeswell wrote:
> Is my proposed name ``check-service-instance'' reasonable or should
> we settle on another name?

How about "ignore-server-hostname"?  Your patch, incidentally, only
seemed to include configuration logic, not the actual implementation of
the flag (looking at
http://mailman.mit.edu/pipermail/krbdev/2010-August/009353.html)

Here's a wide-ranging response:

Case 1: GSS acceptors who use GSS_C_NO_CREDENTIAL (or acquire a cred
with GSS_C_NO_NAME), or krb5 acceptors who pass a null server to
krb5_rd_req.

These acceptors get nicely liberal acceptor behavior.  Unfortunately,
it's difficult or impossible for GSS acceptors to find out what
host-based service was actually used in this case.  (See
http://mailman.mit.edu/pipermail/kerberos/2010-May/016174.html and
following for a little more discussion of this.)  I don't have a
proposal for making this easier.

Case 2: GSS acceptors who import a host-based name but do not specify a
hostname, or krb5 acceptors who call krb5_sname_to_principal with a null
hostname argument.

For these acceptors, krb5_sname_to_principal constructs a principal
"<service>/<localhostname>@<realm>", where <localhostname> is the
DNS-canonicalized result of gethostname() and <realm> is the
host-to-realm result of that hostname using only local configuration (or
the referral realm, aka the empty string, if that realm is
indeterminate).  The keytab must contain an entry for
<service>/<localhostname>@<realm> (or ...@<default-realm> if <realm> is
the referral realm); the client may use any service principal which
matches that keytab entry's key.

I think acceptors in this class should, without any configuration
required, allow any hostname and any realm that the keytab can support.

For an implementation strategy, I tentatively propose that
krb5_sname_to_principal should construct a principal <service>/@, where
both the second component and realm name are empty.  krb5_rd_req would
interpret this principal check against every two-component principal in
the keytab whose first component matches <service>.  The ugly part: the
caller of krb5_sname_to_principal could also be an initiator trying to
talk to a local service, so krb5_get_credentials() would also have to be
able to handle <service>/@ principals.

Case 3: GSS acceptors who import a host-based name with a hostname, or
krb5 acceptors who call krb5_sname_to_principal with a non-null hostname
argument.

Roland wants (and Sam supports) a configuration variable which assumes
the app-provided hostname is bogus for acceptors and should be ignored,
at which point we want behavior equivalent to case 2.

The implementation strategy has to be different from what I propose for
case 2.  krb5_sname_to_principal can't throw out the hostname, because
the caller might be an initiator.  So I think the configuration variable
would have to be checked in krb5_rd_req, which would then throw out the
second component of host-based principals and match any hostname.

Disclaimers: Currently my schedule for the 1.9 release is tight.  I'm
not volunteering to implement any of this.  I can't even guarantee that
I'll have time to review and integrate a patch for 1.9, though I'll try.
I'm not insisting that case 2 and case 3 be implemented at the same
time.





More information about the krbdev mailing list