add comments and clean-up
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@6932 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -40,14 +40,26 @@
|
||||
|
||||
RCSID("$Id$");
|
||||
|
||||
static struct krb5_keytab_data *kt_types;
|
||||
/*
|
||||
* the registered keytab types.
|
||||
* `num_kt_types' are them are stored in `kt_types'
|
||||
*/
|
||||
|
||||
static int num_kt_types;
|
||||
|
||||
static struct krb5_keytab_data *kt_types;
|
||||
|
||||
/*
|
||||
* Register a new keytab in `ops'
|
||||
* Return 0 or an error.
|
||||
*/
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_register(krb5_context context,
|
||||
const krb5_kt_ops *ops)
|
||||
{
|
||||
struct krb5_keytab_data *tmp;
|
||||
|
||||
tmp = realloc(kt_types, (num_kt_types + 1) * sizeof(*kt_types));
|
||||
if(tmp == NULL)
|
||||
return ENOMEM;
|
||||
@@ -61,6 +73,12 @@ krb5_kt_register(krb5_context context,
|
||||
extern krb5_kt_ops krb4_fkt_ops;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Resolve the keytab name (of the form `type:residual') in `name'
|
||||
* into a keytab in `id'.
|
||||
* Return 0 or an error
|
||||
*/
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_resolve(krb5_context context,
|
||||
const char *name,
|
||||
@@ -102,7 +120,9 @@ krb5_kt_resolve(krb5_context context,
|
||||
if(i == num_kt_types)
|
||||
return KRB5_KT_UNKNOWN_TYPE;
|
||||
|
||||
ALLOC(k, 1);
|
||||
k = malloc (sizeof(*k));
|
||||
if (k == NULL)
|
||||
return ENOMEM;
|
||||
memcpy(k, &kt_types[i], sizeof(*k));
|
||||
k->data = NULL;
|
||||
ret = (*k->resolve)(context, residual, k);
|
||||
@@ -114,6 +134,11 @@ krb5_kt_resolve(krb5_context context,
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* copy the name of the default keytab into `name'.
|
||||
* Return 0 or KRB5_CONFIG_NOTENUFSPACE if `namesize' is too short.
|
||||
*/
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_default_name(krb5_context context, char *name, size_t namesize)
|
||||
{
|
||||
@@ -123,12 +148,23 @@ krb5_kt_default_name(krb5_context context, char *name, size_t namesize)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set `id' to the default keytab.
|
||||
* Return 0 or an error.
|
||||
*/
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_default(krb5_context context, krb5_keytab *id)
|
||||
{
|
||||
return krb5_kt_resolve (context, context->default_keytab, id);
|
||||
}
|
||||
|
||||
/*
|
||||
* Read the key identified by `(principal, vno, enctype)' from the
|
||||
* keytab in `keyprocarg' (the default if == NULL) into `*key'.
|
||||
* Return 0 or an error.
|
||||
*/
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_read_service_key(krb5_context context,
|
||||
krb5_pointer keyprocarg,
|
||||
@@ -139,34 +175,29 @@ krb5_kt_read_service_key(krb5_context context,
|
||||
{
|
||||
krb5_keytab keytab;
|
||||
krb5_keytab_entry entry;
|
||||
krb5_error_code r;
|
||||
krb5_error_code ret;
|
||||
|
||||
if (keyprocarg)
|
||||
r = krb5_kt_resolve (context, keyprocarg, &keytab);
|
||||
ret = krb5_kt_resolve (context, keyprocarg, &keytab);
|
||||
else
|
||||
r = krb5_kt_default (context, &keytab);
|
||||
ret = krb5_kt_default (context, &keytab);
|
||||
|
||||
if (r)
|
||||
return r;
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
r = krb5_kt_get_entry (context, keytab, principal, vno, enctype, &entry);
|
||||
ret = krb5_kt_get_entry (context, keytab, principal, vno, enctype, &entry);
|
||||
krb5_kt_close (context, keytab);
|
||||
if (r)
|
||||
return r;
|
||||
r = krb5_copy_keyblock (context, &entry.keyblock, key);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = krb5_copy_keyblock (context, &entry.keyblock, key);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
return r;
|
||||
return ret;
|
||||
}
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_remove_entry(krb5_context context,
|
||||
krb5_keytab id,
|
||||
krb5_keytab_entry *entry)
|
||||
{
|
||||
if(id->remove == NULL)
|
||||
return KRB5_KT_NOWRITE;
|
||||
return (*id->remove)(context, id, entry);
|
||||
}
|
||||
/*
|
||||
* Retrieve the name of the keytab `keytab' into `name', `namesize'
|
||||
* Return 0 or an error.
|
||||
*/
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_get_name(krb5_context context,
|
||||
@@ -177,17 +208,29 @@ krb5_kt_get_name(krb5_context context,
|
||||
return (*keytab->get_name)(context, keytab, name, namesize);
|
||||
}
|
||||
|
||||
/*
|
||||
* Finish using the keytab in `id'. All resources will be released.
|
||||
* Return 0 or an error.
|
||||
*/
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_close(krb5_context context,
|
||||
krb5_keytab id)
|
||||
{
|
||||
krb5_error_code ret;
|
||||
|
||||
ret = (*id->close)(context, id);
|
||||
if(ret == 0)
|
||||
free(id);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Compare `entry' against `principal, vno, enctype'.
|
||||
* Any of `principal, vno, enctype' might be 0 which acts as a wildcard.
|
||||
* Return TRUE if they compare the same, FALSE otherwise.
|
||||
*/
|
||||
|
||||
krb5_boolean
|
||||
krb5_kt_compare(krb5_context context,
|
||||
krb5_keytab_entry *entry,
|
||||
@@ -205,6 +248,12 @@ krb5_kt_compare(krb5_context context,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Retrieve the keytab entry for `principal, kvno, enctype' into `entry'
|
||||
* from the keytab `id'.
|
||||
* Return 0 or an error.
|
||||
*/
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_get_entry(krb5_context context,
|
||||
krb5_keytab id,
|
||||
@@ -214,13 +263,14 @@ krb5_kt_get_entry(krb5_context context,
|
||||
krb5_keytab_entry *entry)
|
||||
{
|
||||
krb5_keytab_entry tmp;
|
||||
krb5_error_code r;
|
||||
krb5_error_code ret;
|
||||
krb5_kt_cursor cursor;
|
||||
|
||||
if(id->get) return (*id->get)(context, id, principal, kvno, enctype, entry);
|
||||
if(id->get)
|
||||
return (*id->get)(context, id, principal, kvno, enctype, entry);
|
||||
|
||||
r = krb5_kt_start_seq_get (context, id, &cursor);
|
||||
if (r)
|
||||
ret = krb5_kt_start_seq_get (context, id, &cursor);
|
||||
if (ret)
|
||||
return KRB5_KT_NOTFOUND; /* XXX i.e. file not found */
|
||||
|
||||
entry->vno = 0;
|
||||
@@ -246,6 +296,11 @@ krb5_kt_get_entry(krb5_context context,
|
||||
return KRB5_KT_NOTFOUND;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy the contents of `in' into `out'.
|
||||
* Return 0 or an error.
|
||||
*/
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_copy_entry_contents(krb5_context context,
|
||||
const krb5_keytab_entry *in,
|
||||
@@ -270,6 +325,10 @@ fail:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Free the contents of `entry'.
|
||||
*/
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_free_entry(krb5_context context,
|
||||
krb5_keytab_entry *entry)
|
||||
@@ -298,6 +357,11 @@ xxxunlock(int fd)
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Set `cursor' to point at the beginning of `id'.
|
||||
* Return 0 or an error.
|
||||
*/
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_start_seq_get(krb5_context context,
|
||||
krb5_keytab id,
|
||||
@@ -308,6 +372,12 @@ krb5_kt_start_seq_get(krb5_context context,
|
||||
return (*id->start_seq_get)(context, id, cursor);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the next entry from `id' pointed to by `cursor' and advance the
|
||||
* `cursor'.
|
||||
* Return 0 or an error.
|
||||
*/
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_next_entry(krb5_context context,
|
||||
krb5_keytab id,
|
||||
@@ -319,6 +389,9 @@ krb5_kt_next_entry(krb5_context context,
|
||||
return (*id->next_entry)(context, id, entry, cursor);
|
||||
}
|
||||
|
||||
/*
|
||||
* Release all resources associated with `cursor'.
|
||||
*/
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_end_seq_get(krb5_context context,
|
||||
@@ -330,6 +403,11 @@ krb5_kt_end_seq_get(krb5_context context,
|
||||
return (*id->end_seq_get)(context, id, cursor);
|
||||
}
|
||||
|
||||
/*
|
||||
* Add the entry in `entry' to the keytab `id'.
|
||||
* Return 0 or an error.
|
||||
*/
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_add_entry(krb5_context context,
|
||||
krb5_keytab id,
|
||||
@@ -339,3 +417,18 @@ krb5_kt_add_entry(krb5_context context,
|
||||
return KRB5_KT_NOWRITE;
|
||||
return (*id->add)(context, id,entry);
|
||||
}
|
||||
|
||||
/*
|
||||
* Remove the entry `entry' from the keytab `id'.
|
||||
* Return 0 or an error.
|
||||
*/
|
||||
|
||||
krb5_error_code
|
||||
krb5_kt_remove_entry(krb5_context context,
|
||||
krb5_keytab id,
|
||||
krb5_keytab_entry *entry)
|
||||
{
|
||||
if(id->remove == NULL)
|
||||
return KRB5_KT_NOWRITE;
|
||||
return (*id->remove)(context, id, entry);
|
||||
}
|
||||
|
Reference in New Issue
Block a user