396 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			396 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\" Copyright (c) 2001 - 2005 Kungliga Tekniska Högskolan
 | 
						|
.\" (Royal Institute of Technology, Stockholm, Sweden).
 | 
						|
.\" All rights reserved.
 | 
						|
.\"
 | 
						|
.\" Redistribution and use in source and binary forms, with or without
 | 
						|
.\" modification, are permitted provided that the following conditions
 | 
						|
.\" are met:
 | 
						|
.\"
 | 
						|
.\" 1. Redistributions of source code must retain the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer.
 | 
						|
.\"
 | 
						|
.\" 2. Redistributions in binary form must reproduce the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer in the
 | 
						|
.\"    documentation and/or other materials provided with the distribution.
 | 
						|
.\"
 | 
						|
.\" 3. Neither the name of the Institute nor the names of its contributors
 | 
						|
.\"    may be used to endorse or promote products derived from this software
 | 
						|
.\"    without specific prior written permission.
 | 
						|
.\"
 | 
						|
.\" THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
 | 
						|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
						|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
						|
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
 | 
						|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
						|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
						|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
						|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
						|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
						|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
						|
.\" SUCH DAMAGE.
 | 
						|
.\"
 | 
						|
.\" $Id$
 | 
						|
.\"
 | 
						|
.Dd May 17, 2005
 | 
						|
.Dt KRB5_AUTH_CONTEXT 3
 | 
						|
.Os HEIMDAL
 | 
						|
.Sh NAME
 | 
						|
.Nm krb5_auth_con_addflags ,
 | 
						|
.Nm krb5_auth_con_free ,
 | 
						|
.Nm krb5_auth_con_genaddrs ,
 | 
						|
.Nm krb5_auth_con_generatelocalsubkey ,
 | 
						|
.Nm krb5_auth_con_getaddrs ,
 | 
						|
.Nm krb5_auth_con_getauthenticator ,
 | 
						|
.Nm krb5_auth_con_getflags ,
 | 
						|
.Nm krb5_auth_con_getkey ,
 | 
						|
.Nm krb5_auth_con_getlocalsubkey ,
 | 
						|
.Nm krb5_auth_con_getrcache ,
 | 
						|
.Nm krb5_auth_con_getremotesubkey ,
 | 
						|
.Nm krb5_auth_con_getuserkey ,
 | 
						|
.Nm krb5_auth_con_init ,
 | 
						|
.Nm krb5_auth_con_initivector ,
 | 
						|
.Nm krb5_auth_con_removeflags ,
 | 
						|
.Nm krb5_auth_con_setaddrs ,
 | 
						|
.Nm krb5_auth_con_setaddrs_from_fd ,
 | 
						|
.Nm krb5_auth_con_setflags ,
 | 
						|
.Nm krb5_auth_con_setivector ,
 | 
						|
.Nm krb5_auth_con_setkey ,
 | 
						|
.Nm krb5_auth_con_setlocalsubkey ,
 | 
						|
.Nm krb5_auth_con_setrcache ,
 | 
						|
.Nm krb5_auth_con_setremotesubkey ,
 | 
						|
.Nm krb5_auth_con_setuserkey ,
 | 
						|
.Nm krb5_auth_context ,
 | 
						|
.Nm krb5_auth_getcksumtype ,
 | 
						|
.Nm krb5_auth_getkeytype ,
 | 
						|
.Nm krb5_auth_getlocalseqnumber ,
 | 
						|
.Nm krb5_auth_getremoteseqnumber ,
 | 
						|
.Nm krb5_auth_setcksumtype ,
 | 
						|
.Nm krb5_auth_setkeytype ,
 | 
						|
.Nm krb5_auth_setlocalseqnumber ,
 | 
						|
.Nm krb5_auth_setremoteseqnumber ,
 | 
						|
.Nm krb5_free_authenticator
 | 
						|
.Nd manage authentication on connection level
 | 
						|
.Sh LIBRARY
 | 
						|
Kerberos 5 Library (libkrb5, -lkrb5)
 | 
						|
.Sh SYNOPSIS
 | 
						|
.In krb5.h
 | 
						|
.Ft krb5_error_code
 | 
						|
.Fo krb5_auth_con_init
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context *auth_context"
 | 
						|
.Fc
 | 
						|
.Ft void
 | 
						|
.Fo krb5_auth_con_free
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context auth_context"
 | 
						|
.Fc
 | 
						|
.Ft krb5_error_code
 | 
						|
.Fo krb5_auth_con_setflags
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context auth_context"
 | 
						|
.Fa "int32_t flags"
 | 
						|
.Fc
 | 
						|
.Ft krb5_error_code
 | 
						|
.Fo krb5_auth_con_getflags
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context auth_context"
 | 
						|
.Fa "int32_t *flags"
 | 
						|
.Fc
 | 
						|
.Ft krb5_error_code
 | 
						|
.Fo krb5_auth_con_addflags
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context auth_context"
 | 
						|
.Fa "int32_t addflags"
 | 
						|
.Fa "int32_t *flags"
 | 
						|
.Fc
 | 
						|
.Ft krb5_error_code
 | 
						|
.Fo krb5_auth_con_removeflags
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context auth_context"
 | 
						|
.Fa "int32_t removelags"
 | 
						|
.Fa "int32_t *flags"
 | 
						|
.Fc
 | 
						|
.Ft krb5_error_code
 | 
						|
.Fo krb5_auth_con_setaddrs
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context auth_context"
 | 
						|
.Fa "krb5_address *local_addr"
 | 
						|
.Fa "krb5_address *remote_addr"
 | 
						|
.Fc
 | 
						|
.Ft krb5_error_code
 | 
						|
.Fo krb5_auth_con_getaddrs
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context auth_context"
 | 
						|
.Fa "krb5_address **local_addr"
 | 
						|
.Fa "krb5_address **remote_addr"
 | 
						|
.Fc
 | 
						|
.Ft krb5_error_code
 | 
						|
.Fo krb5_auth_con_genaddrs
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context auth_context"
 | 
						|
.Fa "int fd"
 | 
						|
.Fa "int flags"
 | 
						|
.Fc
 | 
						|
.Ft krb5_error_code
 | 
						|
.Fo krb5_auth_con_setaddrs_from_fd
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context auth_context"
 | 
						|
.Fa "void *p_fd"
 | 
						|
.Fc
 | 
						|
.Ft krb5_error_code
 | 
						|
.Fo krb5_auth_con_getkey
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context auth_context"
 | 
						|
.Fa "krb5_keyblock **keyblock"
 | 
						|
.Fc
 | 
						|
.Ft krb5_error_code
 | 
						|
.Fo krb5_auth_con_getlocalsubkey
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context auth_context"
 | 
						|
.Fa "krb5_keyblock **keyblock"
 | 
						|
.Fc
 | 
						|
.Ft krb5_error_code
 | 
						|
.Fo krb5_auth_con_getremotesubkey
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context auth_context"
 | 
						|
.Fa "krb5_keyblock **keyblock"
 | 
						|
.Fc
 | 
						|
.Ft krb5_error_code
 | 
						|
.Fo krb5_auth_con_generatelocalsubkey
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context auth_context"
 | 
						|
.Fa krb5_keyblock *key"
 | 
						|
.Fc
 | 
						|
.Ft krb5_error_code
 | 
						|
.Fo krb5_auth_con_initivector
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context auth_context"
 | 
						|
.Fc
 | 
						|
.Ft krb5_error_code
 | 
						|
.Fo krb5_auth_con_setivector
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_auth_context *auth_context"
 | 
						|
.Fa "krb5_pointer ivector"
 | 
						|
.Fc
 | 
						|
.Ft void
 | 
						|
.Fo krb5_free_authenticator
 | 
						|
.Fa "krb5_context context"
 | 
						|
.Fa "krb5_authenticator *authenticator"
 | 
						|
.Fc
 | 
						|
.Sh DESCRIPTION
 | 
						|
The
 | 
						|
.Nm krb5_auth_context
 | 
						|
structure holds all context related to an authenticated connection, in
 | 
						|
a similar way to
 | 
						|
.Nm krb5_context
 | 
						|
that holds the context for the thread or process.
 | 
						|
.Nm krb5_auth_context
 | 
						|
is used by various functions that are directly related to
 | 
						|
authentication between the server/client. Example of data that this
 | 
						|
structure contains are various flags, addresses of client and server,
 | 
						|
port numbers, keyblocks (and subkeys), sequence numbers, replay cache,
 | 
						|
and checksum-type.
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_con_init
 | 
						|
allocates and initializes the
 | 
						|
.Nm krb5_auth_context
 | 
						|
structure. Default values can be changed with
 | 
						|
.Fn krb5_auth_con_setcksumtype
 | 
						|
and
 | 
						|
.Fn krb5_auth_con_setflags .
 | 
						|
The
 | 
						|
.Nm auth_context
 | 
						|
structure must be freed by
 | 
						|
.Fn krb5_auth_con_free .
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_con_getflags ,
 | 
						|
.Fn krb5_auth_con_setflags ,
 | 
						|
.Fn krb5_auth_con_addflags
 | 
						|
and
 | 
						|
.Fn krb5_auth_con_removeflags
 | 
						|
gets and modifies the flags for a
 | 
						|
.Nm krb5_auth_context
 | 
						|
structure. Possible flags to set are:
 | 
						|
.Bl -tag -width Ds
 | 
						|
.It Dv KRB5_AUTH_CONTEXT_DO_SEQUENCE
 | 
						|
Generate and check sequence-number on each packet.
 | 
						|
.It Dv KRB5_AUTH_CONTEXT_DO_TIME
 | 
						|
Check timestamp on incoming packets.
 | 
						|
.It Dv KRB5_AUTH_CONTEXT_RET_SEQUENCE , Dv KRB5_AUTH_CONTEXT_RET_TIME
 | 
						|
Return sequence numbers and time stamps in the outdata parameters.
 | 
						|
.It Dv KRB5_AUTH_CONTEXT_CLEAR_FORWARDED_CRED
 | 
						|
will force
 | 
						|
.Fn krb5_get_forwarded_creds
 | 
						|
and
 | 
						|
.Fn krb5_fwd_tgt_creds
 | 
						|
to create unencrypted )
 | 
						|
.Dv KRB5_ENCTYPE_NULL )
 | 
						|
credentials.
 | 
						|
This is for use with old MIT server and JAVA based servers as
 | 
						|
they can't handle encrypted
 | 
						|
.Dv KRB-CRED .
 | 
						|
Note that sending such
 | 
						|
.Dv KRB-CRED
 | 
						|
is clear exposes crypto keys and tickets and is insecure,
 | 
						|
make sure the packet is encrypted in the protocol.
 | 
						|
.Xr krb5_rd_cred 3 ,
 | 
						|
.Xr krb5_rd_priv 3 ,
 | 
						|
.Xr krb5_rd_safe 3 ,
 | 
						|
.Xr krb5_mk_priv 3
 | 
						|
and
 | 
						|
.Xr krb5_mk_safe 3 .
 | 
						|
Setting this flag requires that parameter to be passed to these
 | 
						|
functions.
 | 
						|
.Pp
 | 
						|
The flags
 | 
						|
.Dv KRB5_AUTH_CONTEXT_DO_TIME
 | 
						|
also modifies the behavior the function
 | 
						|
.Fn krb5_get_forwarded_creds
 | 
						|
by removing the timestamp in the forward credential message, this have
 | 
						|
backward compatibility problems since not all versions of the heimdal
 | 
						|
supports timeless credentional messages.
 | 
						|
Is very useful since it always the sender of the message to cache
 | 
						|
forward message and thus avoiding a round trip to the KDC for each
 | 
						|
time a credential is forwarded.
 | 
						|
The same functionality can be obtained by using address-less tickets.
 | 
						|
.\".It Dv KRB5_AUTH_CONTEXT_PERMIT_ALL
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_con_setaddrs ,
 | 
						|
.Fn krb5_auth_con_setaddrs_from_fd
 | 
						|
and
 | 
						|
.Fn krb5_auth_con_getaddrs
 | 
						|
gets and sets the addresses that are checked when a packet is received.
 | 
						|
It is mandatory to set an address for the remote
 | 
						|
host. If the local address is not set, it iss deduced from the underlaying
 | 
						|
operating system.
 | 
						|
.Fn krb5_auth_con_getaddrs
 | 
						|
will call
 | 
						|
.Fn krb5_free_address
 | 
						|
on any address that is passed in
 | 
						|
.Fa local_addr
 | 
						|
or
 | 
						|
.Fa remote_addr .
 | 
						|
.Fn krb5_auth_con_setaddr
 | 
						|
allows passing in a
 | 
						|
.Dv NULL
 | 
						|
pointer as
 | 
						|
.Fa local_addr
 | 
						|
and
 | 
						|
.Fa remote_addr ,
 | 
						|
in that case it will just not set that address.
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_con_setaddrs_from_fd
 | 
						|
fetches the addresses from a file descriptor.
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_con_genaddrs
 | 
						|
fetches the address information from the given file descriptor
 | 
						|
.Fa fd
 | 
						|
depending on the bitmap argument
 | 
						|
.Fa flags .
 | 
						|
.Pp
 | 
						|
Possible values on
 | 
						|
.Fa flags
 | 
						|
are:
 | 
						|
.Bl -tag -width Ds
 | 
						|
.It Va KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR
 | 
						|
fetches the local address from
 | 
						|
.Fa fd .
 | 
						|
.It Va KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR
 | 
						|
fetches the remote address from
 | 
						|
.Fa fd .
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_con_setkey ,
 | 
						|
.Fn krb5_auth_con_setuserkey
 | 
						|
and
 | 
						|
.Fn krb5_auth_con_getkey
 | 
						|
gets and sets the key used for this auth context. The keyblock returned by
 | 
						|
.Fn krb5_auth_con_getkey
 | 
						|
should be freed with
 | 
						|
.Fn krb5_free_keyblock .
 | 
						|
The keyblock send into
 | 
						|
.Fn krb5_auth_con_setkey
 | 
						|
is copied into the
 | 
						|
.Nm krb5_auth_context ,
 | 
						|
and thus no special handling is needed.
 | 
						|
.Dv NULL
 | 
						|
is not a valid keyblock to
 | 
						|
.Fn krb5_auth_con_setkey .
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_con_setuserkey
 | 
						|
is only useful when doing user to user authentication.
 | 
						|
.Fn krb5_auth_con_setkey
 | 
						|
is equivalent to
 | 
						|
.Fn krb5_auth_con_setuserkey .
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_con_getlocalsubkey ,
 | 
						|
.Fn krb5_auth_con_setlocalsubkey ,
 | 
						|
.Fn krb5_auth_con_getremotesubkey
 | 
						|
and
 | 
						|
.Fn krb5_auth_con_setremotesubkey
 | 
						|
gets and sets the keyblock for the local and remote subkey.
 | 
						|
The keyblock returned by
 | 
						|
.Fn krb5_auth_con_getlocalsubkey
 | 
						|
and
 | 
						|
.Fn krb5_auth_con_getremotesubkey
 | 
						|
must be freed with
 | 
						|
.Fn krb5_free_keyblock .
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_setcksumtype
 | 
						|
and
 | 
						|
.Fn krb5_auth_getcksumtype
 | 
						|
sets and gets the checksum type that should be used for this
 | 
						|
connection.
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_con_generatelocalsubkey
 | 
						|
generates a local subkey that have the same encryption type as
 | 
						|
.Fa key .
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_getremoteseqnumber
 | 
						|
.Fn krb5_auth_setremoteseqnumber ,
 | 
						|
.Fn krb5_auth_getlocalseqnumber
 | 
						|
and
 | 
						|
.Fn krb5_auth_setlocalseqnumber
 | 
						|
gets and sets the sequence-number for the local and remote
 | 
						|
sequence-number counter.
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_setkeytype
 | 
						|
and
 | 
						|
.Fn krb5_auth_getkeytype
 | 
						|
gets and gets the keytype of the keyblock in
 | 
						|
.Nm krb5_auth_context .
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_con_getauthenticator
 | 
						|
Retrieves the authenticator that was used during mutual
 | 
						|
authentication. The
 | 
						|
.Dv authenticator
 | 
						|
returned should be freed by calling
 | 
						|
.Fn krb5_free_authenticator .
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_con_getrcache
 | 
						|
and
 | 
						|
.Fn krb5_auth_con_setrcache
 | 
						|
gets and sets the replay-cache.
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_con_initivector
 | 
						|
allocates memory for and zeros the initial vector in the
 | 
						|
.Fa auth_context
 | 
						|
keyblock.
 | 
						|
.Pp
 | 
						|
.Fn krb5_auth_con_setivector
 | 
						|
sets the i_vector portion of
 | 
						|
.Fa auth_context
 | 
						|
to
 | 
						|
.Fa ivector .
 | 
						|
.Pp
 | 
						|
.Fn krb5_free_authenticator
 | 
						|
free the content of
 | 
						|
.Fa authenticator
 | 
						|
and
 | 
						|
.Fa authenticator
 | 
						|
itself.
 | 
						|
.Sh SEE ALSO
 | 
						|
.Xr krb5_context 3 ,
 | 
						|
.Xr kerberos 8
 |