add krb5_keytab.3, from <lha@stacken.kth.se>
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@9640 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -147,7 +147,8 @@ man_MANS = \
|
||||
verify_krb5_conf.8 \
|
||||
krb5_auth_context.3 \
|
||||
krb5_context.3 \
|
||||
krb5_init_context.3
|
||||
krb5_init_context.3 \
|
||||
krb5_keytab.3
|
||||
|
||||
include_HEADERS = krb5.h krb5-protos.h krb5-private.h krb5_err.h heim_err.h
|
||||
|
||||
|
358
lib/krb5/krb5_keytab.3
Normal file
358
lib/krb5/krb5_keytab.3
Normal file
@@ -0,0 +1,358 @@
|
||||
.\" Copyright (c) 2001 Kungliga Tekniska H<>gskolan
|
||||
.\" $Id$
|
||||
.Dd Feb 5, 2001
|
||||
.Dt KRB5_KEYTAB 3
|
||||
.Os HEIMDAL
|
||||
.Sh NAME
|
||||
.Nm krb5_kt_ops,
|
||||
.Nm krb5_keytab_entry ,
|
||||
.Nm krb5_kt_cursor ,
|
||||
.Nm krb5_kt_add_entry ,
|
||||
.Nm krb5_kt_close ,
|
||||
.Nm krb5_kt_compare ,
|
||||
.Nm krb5_kt_copy_entry_contents ,
|
||||
.Nm krb5_kt_default ,
|
||||
.Nm krb5_kt_default_name ,
|
||||
.Nm krb5_kt_end_seq_get ,
|
||||
.Nm krb5_kt_free_entry ,
|
||||
.Nm krb5_kt_get_entry ,
|
||||
.Nm krb5_kt_get_name ,
|
||||
.Nm krb5_kt_next_entry ,
|
||||
.Nm krb5_kt_read_service_key ,
|
||||
.Nm krb5_kt_register ,
|
||||
.Nm krb5_kt_remove_entry ,
|
||||
.Nm krb5_kt_resolve ,
|
||||
.Nm krb5_kt_start_seq_get
|
||||
.Nd manage keytab (key storage) files
|
||||
.Sh SYNOPSIS
|
||||
.Fd #include <krb5.h>
|
||||
.Pp
|
||||
.Ft krb5_error_code
|
||||
.Fo krb5_kt_add_entry
|
||||
.Fa "krb5_context context"
|
||||
.Fa "krb5_keytab id"
|
||||
.Fa "krb5_keytab_entry *entry"
|
||||
.Fc
|
||||
.Ft krb5_error_code
|
||||
.Fo krb5_kt_close
|
||||
.Fa "krb5_context context"
|
||||
.Fa "krb5_keytab id"
|
||||
.Fc
|
||||
.Ft krb5_boolean
|
||||
.Fo krb5_kt_compare
|
||||
.Fa "krb5_context context"
|
||||
.Fa "krb5_keytab_entry *entry"
|
||||
.Fa "krb5_const_principal principal"
|
||||
.Fa "krb5_kvno vno"
|
||||
.Fa "krb5_enctype enctype"
|
||||
.Fc
|
||||
.Ft krb5_error_code
|
||||
.Fo krb5_kt_copy_entry_contents
|
||||
.Fa "krb5_context context"
|
||||
.Fa "const krb5_keytab_entry *in"
|
||||
.Fa "krb5_keytab_entry *out"
|
||||
.Fc
|
||||
.Ft krb5_error_code
|
||||
.Fo krb5_kt_default
|
||||
.Fa "krb5_context context"
|
||||
.Fa "krb5_keytab *id"
|
||||
.Fc
|
||||
.Ft krb5_error_code
|
||||
.Fo krb5_kt_default_name
|
||||
.Fa "krb5_context context"
|
||||
.Fa "char *name"
|
||||
.Fa "size_t namesize"
|
||||
.Fc
|
||||
.Ft krb5_error_code
|
||||
.Fo krb5_kt_end_seq_get
|
||||
.Fa "krb5_context context"
|
||||
.Fa "krb5_keytab id"
|
||||
.Fa "krb5_kt_cursor *cursor"
|
||||
.Fc
|
||||
.Ft krb5_error_code
|
||||
.Fo krb5_kt_free_entry
|
||||
.Fa "krb5_context context"
|
||||
.Fa "krb5_keytab_entry *entry"
|
||||
.Fc
|
||||
.Ft krb5_error_code
|
||||
.Fo krb5_kt_get_entry
|
||||
.Fa "krb5_context context"
|
||||
.Fa "krb5_keytab id"
|
||||
.Fa "krb5_const_principal principal"
|
||||
.Fa "krb5_kvno kvno"
|
||||
.Fa "krb5_enctype enctype"
|
||||
.Fa "krb5_keytab_entry *entry"
|
||||
.Fc
|
||||
.Ft krb5_error_code
|
||||
.Fo krb5_kt_get_name
|
||||
.Fa "krb5_context context"
|
||||
.Fa "krb5_keytab keytab"
|
||||
.Fa "char *name"
|
||||
.Fa "size_t namesize"
|
||||
.Fc
|
||||
.Ft krb5_error_code
|
||||
.Fo krb5_kt_next_entry
|
||||
.Fa "krb5_context context"
|
||||
.Fa "krb5_keytab id"
|
||||
.Fa "krb5_keytab_entry *entry"
|
||||
.Fa "krb5_kt_cursor *cursor"
|
||||
.Fc
|
||||
.Ft krb5_error_code
|
||||
.Fo krb5_kt_read_service_key
|
||||
.Fa "krb5_context context"
|
||||
.Fa "krb5_pointer keyprocarg"
|
||||
.Fa "krb5_principal principal"
|
||||
.Fa "krb5_kvno vno"
|
||||
.Fa "krb5_enctype enctype"
|
||||
.Fa "krb5_keyblock **key"
|
||||
.Fc
|
||||
.Ft krb5_error_code
|
||||
.Fo krb5_kt_register
|
||||
.Fa "krb5_context context"
|
||||
.Fa "const krb5_kt_ops *ops"
|
||||
.Fc
|
||||
.Ft krb5_error_code
|
||||
.Fo krb5_kt_remove_entry
|
||||
.Fa "krb5_context context"
|
||||
.Fa "krb5_keytab id"
|
||||
.Fa "krb5_keytab_entry *entry"
|
||||
.Fc
|
||||
.Ft krb5_error_code
|
||||
.Fo krb5_kt_resolve
|
||||
.Fa "krb5_context context"
|
||||
.Fa "const char *name"
|
||||
.Fa "krb5_keytab *id"
|
||||
.Fc
|
||||
.Ft krb5_error_code
|
||||
.Fo krb5_kt_start_seq_get
|
||||
.Fa "krb5_context context"
|
||||
.Fa "krb5_keytab id"
|
||||
.Fa "krb5_kt_cursor *cursor"
|
||||
.Fc
|
||||
.Sh DESCRIPTION
|
||||
A keytab name is on the form
|
||||
.Li type:residual .
|
||||
The
|
||||
.Li residual
|
||||
part is specific to each keytab-type.
|
||||
.Pp
|
||||
When a keytab-name is resolved, the type is matched with an interal
|
||||
list of keytab types. If there is no matching keytab type,
|
||||
the default keytab is used. The current default type is
|
||||
.Nm file .
|
||||
The default value can be changed in the configuration file
|
||||
.Pa /etc/krb5.conf
|
||||
by setting the variable
|
||||
.Li [defaults]default_keytab_name .
|
||||
.Pp
|
||||
The keytab types that are implemented in Heimdal
|
||||
are:
|
||||
.Bl -tag -width Ds
|
||||
.It Nm file
|
||||
store the keytab in a file, the type's name is
|
||||
.Li KEYFILE .
|
||||
The residual part is a filename.
|
||||
.It Nm keyfile
|
||||
store the keytab in a
|
||||
.Li AFS
|
||||
keyfile (usually
|
||||
.Pa /usr/afs/etc/KeyFile ) ,
|
||||
the type's name is
|
||||
.Li AFSKEYFILE .
|
||||
The residual part is a filename.
|
||||
.It Nm krb4
|
||||
the keytab is a Kerberos 4
|
||||
.Pa srvtab
|
||||
that is on-the-fly converted to a keytab. The type's name is
|
||||
.Li krb4 .
|
||||
The residual part is a filename.
|
||||
.It Nm memory
|
||||
The keytab is stored in a memory segment. This allows sensitive and/or
|
||||
temporary data not to be stored on disk. The type's name is
|
||||
.Li MEMORY .
|
||||
There are no residual part, the only pointer back to the keytab is the
|
||||
.Fa id
|
||||
returned by
|
||||
.Fn krb5_kt_resolve .
|
||||
.El
|
||||
.Pp
|
||||
.Nm krb5_keytab_entry
|
||||
holds all data for an entry in a keytab file, like principal name,
|
||||
key-type, key, key-version number, etc.
|
||||
.Nm krb5_kt_cursor
|
||||
holds the current position that is used when iterating through a
|
||||
keytab entry with
|
||||
.Fn krb5_kt_start_seq_get ,
|
||||
.Fn krb5_kt_next_entry ,
|
||||
and
|
||||
.Fn krb5_kt_end_seq_get .
|
||||
.Pp
|
||||
.Nm krb5_kt_ops
|
||||
contains the different operations that can be done to a keytab. This
|
||||
structure is normally only used when doing a new keytab-type
|
||||
implementation.
|
||||
.Pp
|
||||
.Fn krb5_kt_resolve
|
||||
is the equvalent of an
|
||||
.Xr open 2
|
||||
on keytab. Resolve the keytab name in
|
||||
.Fa name
|
||||
into a keytab in
|
||||
.Fa id .
|
||||
Returns 0 or an error. The opposite of
|
||||
.Fn krb5_kt_resolve
|
||||
is
|
||||
.Fn krb5_kt_close .
|
||||
.Fn krb5_kt_close
|
||||
frees all resources allocated to the keytab.
|
||||
.Pp
|
||||
.Fn krb5_kt_default
|
||||
sets the argument
|
||||
.Fa id
|
||||
to the default keytab.
|
||||
Returns 0 or an error.
|
||||
.Pp
|
||||
.Fn krb5_kt_default_name
|
||||
copy the name of the default keytab into
|
||||
.Fa name .
|
||||
Return 0 or KRB5_CONFIG_NOTENUFSPACE if
|
||||
.Fa namesize
|
||||
is too short.
|
||||
.Pp
|
||||
.Fn krb5_kt_add_entry
|
||||
Add a new
|
||||
.Fa entry
|
||||
to the keytab
|
||||
.Fa id .
|
||||
.Li KRB5_KT_NOWRITE
|
||||
is returned if the keytab is a readonly keytab.
|
||||
.Pp
|
||||
.Fn krb5_kt_compare
|
||||
compares the passed in
|
||||
.Fa entry
|
||||
against
|
||||
.Fa principal ,
|
||||
.Fa vno ,
|
||||
and
|
||||
.Fa enctype .
|
||||
Any of
|
||||
.Fa principal ,
|
||||
.Fa vno
|
||||
or
|
||||
.Fa enctype
|
||||
might be 0 which acts as a wildcard. Return TRUE if they compare the
|
||||
same, FALSE otherwise.
|
||||
.Pp
|
||||
.Fn krb5_kt_copy_entry_contents
|
||||
copies the contents of
|
||||
.Fa in
|
||||
into
|
||||
.Fa out .
|
||||
Returns 0 or an error.
|
||||
.Pp
|
||||
.Fn krb5_kt_get_name
|
||||
retrieves the name of the keytab
|
||||
.Fa keytab
|
||||
into
|
||||
.Fa name ,
|
||||
.Fa namesize .
|
||||
Returns 0 or an error.
|
||||
.Pp
|
||||
.Fn krb5_kt_free_entry
|
||||
frees the contents of
|
||||
.Fa entry .
|
||||
.Pp
|
||||
.Fn krb5_kt_start_seq_get
|
||||
sets
|
||||
.Fa cursor
|
||||
to point at the beginning of
|
||||
.Fa id.
|
||||
Returns 0 or an error.
|
||||
.Pp
|
||||
.Fn krb5_kt_next_entry
|
||||
gets the next entry from
|
||||
.Fa id
|
||||
pointed to by
|
||||
.Fa cursor
|
||||
and advance the
|
||||
.Fa cursor .
|
||||
Returns 0 or an error.
|
||||
.Pp
|
||||
.Fn krb5_kt_end_seq_get
|
||||
releases all resources associated with
|
||||
.Fa cursor .
|
||||
.Pp
|
||||
.Fn krb5_kt_get_entry
|
||||
retrieves the keytab entry for
|
||||
.Fa principal,
|
||||
.Fa kvno,
|
||||
.Fa enctype
|
||||
into
|
||||
.Fa entry
|
||||
from the keytab
|
||||
.Fa id .
|
||||
Returns 0 or an error.
|
||||
.Pp
|
||||
.Fn krb5_kt_read_service_key
|
||||
reads the key identified by
|
||||
.Ns ( Fa principal ,
|
||||
.Fa vno ,
|
||||
.Fa enctype )
|
||||
from the keytab in
|
||||
.Fa keyprocarg
|
||||
(the default if == NULL) into
|
||||
.Fa *key .
|
||||
Returns 0 or an error.
|
||||
.Pp
|
||||
.Fn krb5_kt_remove_entry
|
||||
removes the entry
|
||||
.Fa entry
|
||||
from the keytab
|
||||
.Fa id .
|
||||
Returns 0 or an error.
|
||||
.Pp
|
||||
.Fn krb5_kt_register
|
||||
registers a new keytab type
|
||||
.Fa ops .
|
||||
Returns 0 or an error.
|
||||
.Sh EXAMPLE
|
||||
This is a minimalistic version of
|
||||
.Nm ktutil .
|
||||
.Pp
|
||||
.Bd -literal
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
krb5_context context;
|
||||
krb5_keytab keytab;
|
||||
krb5_kt_cursor cursor;
|
||||
krb5_keytab_entry entry;
|
||||
krb5_error_code ret;
|
||||
char *principal;
|
||||
|
||||
if (krb5_init_context (&context) != 0)
|
||||
errx(1, "krb5_context");
|
||||
|
||||
ret = krb5_kt_default (context, &keytab);
|
||||
if (ret)
|
||||
krb5_err(context, 1, ret, "krb5_kt_default");
|
||||
|
||||
ret = krb5_kt_start_seq_get(context, keytab, &cursor);
|
||||
if (ret)
|
||||
krb5_err(context, 1, ret, "krb5_kt_start_seq_get");
|
||||
while((ret = krb5_kt_next_entry(context, keytab, &entry, &cursor)) == 0){
|
||||
krb5_unparse_name_short(context, entry.principal, &principal);
|
||||
printf("principal: %s\\n", principal);
|
||||
free(principal);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
}
|
||||
ret = krb5_kt_end_seq_get(context, keytab, &cursor);
|
||||
if (ret)
|
||||
krb5_err(context, 1, ret, "krb5_kt_end_seq_get");
|
||||
krb5_free_context(context);
|
||||
return 0;
|
||||
}
|
||||
.Ed
|
||||
.Sh SEE ALSO
|
||||
.Xr kerberos 8 ,
|
||||
.Xr krb5.conf 5
|
Reference in New Issue
Block a user