Dummy Makefile for rxgk

Include a libtool export symbol list for the shared library, which
only exports the client RPC calls for now.

Also connect the rxgk directory up to be buildable from the root, but
nothing depends on it yet so it will not be built.

Change-Id: I12ddefbdaa1ad4845649e3a32efdeaaa21b5e9b7
Configure glue for rxgk

Add an --enable-rxgk switch to control whether the feature is used.
For now, just build the code as a dependency of finale, but we will
phase it in to other parts of the tree as appropriate.

We want to always build as much code as we can to benefit from the
automated build testing, so build rxgk if there is an appropriate
GSSAPI library available, but do not install anything unless the
configure argument was given.

Change-Id: Iab661d47aac77c1a238e809362015b869752df18
Add rxgk_crypto_rfc3961.c

rxgk wrappers around an external crypto library, in this case, our
in-tree rfc3961 library.  Primitives for encryption/decryption and
MIC/VerifyMIC, ways to generate and free rxgk_key objects, etc..

Change-Id: I7525086043baf54f5c3019b3f5ab3495760c4236
Add RXGK_NOW()

A quick routine to get the current timestamp.

Change-Id: I0051b5c8e5ad61e35431d97454bf2741daba90cb
Add rxgk_token.c

Routines for constructing tokens (both regular and printed), and
helpers.

Change-Id: I0cde7fd0cdf9a27777523cd502b21bdccef41dcc
Add rxgk_gss.c

All the routines which deal with GSSAPI types.
This is, in practice, how the client gets a token, and the server
backend for GSSNegotiate().

Change-Id: Id2966de07853dd6a74cb40225851728d2422421c
Add rxgk_util.c

A few helper routines for the security class implementation, mostly.
Implement SRXGK_GSSNegotiate()

In-kernel we must fail; the userspace implementation is already
in the tree in rxgk_gss.c.
Add rxgk_packet.c

Routines to apply and verify encryption and MICs to the data in
rx packets.  Backend to the rxgk_crypto framework for the actual
crypto operations.
Implement the rxgk server routines

Provide non-trivial implementations of the security class routines
used by the server, along with helpers as necessary.

In addition to the normal NewServerSecurityObject routine, provide
wrappers NewServiceSecObj and NewEphemeralService_SecObj that create
the security object, create an rx service for the key negotiation service
needed for clients to negotiate tokens useful with this server security
object, and register the getkey function used for the security object
as service-specific data to be used when encrypting tokens produced by
this rx service.  The Ephemeral variant creates a random token-encrypting
key for use by the service, so no getkey routine needs to be supplied
by the caller.

The identity supplied in a client's token is given as a list of
PrAuthNames; we assume that at most one name is supplied at present,
as the meaning of compound identities (and the use of compound
identities for keyed cache managers) is not fully specified yet.
Convert the PrAuthName to an rx_identity for caching in the server
connection state, as the rx_identity type is more compatible with
superuser checks on the connection.

Also provide an rxgk_GetServerInfo routine which extracts the cached
identity, for use in libauth when making superuser checks.
Implement rxgk client security object routines

Also add rxgk_NegotiateSecurityObject, a routine that creates
an rxnull connection to a target server, obtains a token using
the GSSNegotiate RPC on that connection, and uses the resulting
token to make an rxgk connection to that same server.
BuildServerSecurityObjects allocate for rxgk

Don't do anything with it for now, just leave a place in the
array.
Let superuser identities be superusers

We have a special rx_identity_kind for superusers, let it actually
be useful for something.
Add rxgk support to userok
DO NOT MERGE

A snapshot of the pthread-bos bits, all squashed together.
Done so that subsequent commits adding rxgk support to bos/bosserver
can be pushed to gerrit without using a merge commit or adding a
fake dependency chain to one of the patch series.
Register bosserver for rxgk

Add the server security object, using an ephemeral token-encrypting
key.  We rely on the local hostname being correctly set (and lowercase!)
to match the afs3-bos hostbased service acceptor identity.

Since we are adding a new service, set the number of processes that
will handle that service.
bos: add support for rxgk

While rxgk is experimental, add a new argument -rxgk to attempt
the use of rxgk.  -localauth is supported by using the acceptor
credentials as an initiator and self-negotiating.

afsconf_PickClientSecObj doesn't know about rxgk yet, so we need
to have our own separate control flow for the rxgk case.  This
will be fixed eventually, but it's not clear what the right API
for PickClientSecObj is, yet.