Add new keytab file format JAVA14 that doesn't the use extended kvnos,
as hinted, this is needed for Java's Kerberos implementation. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@15147 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -39,10 +39,14 @@ RCSID("$Id$");
|
|||||||
#define KRB5_KT_VNO_2 2
|
#define KRB5_KT_VNO_2 2
|
||||||
#define KRB5_KT_VNO KRB5_KT_VNO_2
|
#define KRB5_KT_VNO KRB5_KT_VNO_2
|
||||||
|
|
||||||
|
#define KRB5_KT_FL_JAVA 1
|
||||||
|
|
||||||
|
|
||||||
/* file operations -------------------------------------------- */
|
/* file operations -------------------------------------------- */
|
||||||
|
|
||||||
struct fkt_data {
|
struct fkt_data {
|
||||||
char *filename;
|
char *filename;
|
||||||
|
int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
@@ -246,10 +250,24 @@ fkt_resolve(krb5_context context, const char *name, krb5_keytab id)
|
|||||||
krb5_set_error_string (context, "malloc: out of memory");
|
krb5_set_error_string (context, "malloc: out of memory");
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
|
d->flags = 0;
|
||||||
id->data = d;
|
id->data = d;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static krb5_error_code
|
||||||
|
fkt_resolve_java14(krb5_context context, const char *name, krb5_keytab id)
|
||||||
|
{
|
||||||
|
krb5_error_code ret;
|
||||||
|
|
||||||
|
ret = fkt_resolve(context, name, id);
|
||||||
|
if (ret == 0) {
|
||||||
|
struct fkt_data *d = id->data;
|
||||||
|
d->flags |= KRB5_KT_FL_JAVA;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
fkt_close(krb5_context context, krb5_keytab id)
|
fkt_close(krb5_context context, krb5_keytab id)
|
||||||
{
|
{
|
||||||
@@ -536,10 +554,12 @@ fkt_add_entry(krb5_context context,
|
|||||||
krb5_storage_free(emem);
|
krb5_storage_free(emem);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
ret = krb5_store_int32 (emem, entry->vno);
|
if ((d->flags & KRB5_KT_FL_JAVA) == 0) {
|
||||||
if (ret) {
|
ret = krb5_store_int32 (emem, entry->vno);
|
||||||
krb5_storage_free(emem);
|
if (ret) {
|
||||||
goto out;
|
krb5_storage_free(emem);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = krb5_storage_to_data(emem, &keytab);
|
ret = krb5_storage_to_data(emem, &keytab);
|
||||||
@@ -640,3 +660,16 @@ const krb5_kt_ops krb5_wrfkt_ops = {
|
|||||||
fkt_add_entry,
|
fkt_add_entry,
|
||||||
fkt_remove_entry
|
fkt_remove_entry
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const krb5_kt_ops krb5_javakt_ops = {
|
||||||
|
"JAVA14",
|
||||||
|
fkt_resolve_java14,
|
||||||
|
fkt_get_name,
|
||||||
|
fkt_close,
|
||||||
|
NULL, /* get */
|
||||||
|
fkt_start_seq_get,
|
||||||
|
fkt_next_entry,
|
||||||
|
fkt_end_seq_get,
|
||||||
|
fkt_add_entry,
|
||||||
|
fkt_remove_entry
|
||||||
|
};
|
||||||
|
Reference in New Issue
Block a user