(krb5_set_default_in_tkt_etypes): filter out unwanted enctypes
Needed for Samba that tries really hard to use DES encryption types. Reported by Natanael Copa on heimdal-discuss
This commit is contained in:
@@ -825,23 +825,33 @@ KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
|
|||||||
krb5_set_default_in_tkt_etypes(krb5_context context,
|
krb5_set_default_in_tkt_etypes(krb5_context context,
|
||||||
const krb5_enctype *etypes)
|
const krb5_enctype *etypes)
|
||||||
{
|
{
|
||||||
|
krb5_error_code ret;
|
||||||
krb5_enctype *p = NULL;
|
krb5_enctype *p = NULL;
|
||||||
int i;
|
unsigned int n, m;
|
||||||
|
|
||||||
if(etypes) {
|
if(etypes) {
|
||||||
for (i = 0; etypes[i]; ++i) {
|
for (n = 0; etypes[n]; n++)
|
||||||
krb5_error_code ret;
|
;
|
||||||
ret = krb5_enctype_valid(context, etypes[i]);
|
n++;
|
||||||
if (ret)
|
ALLOC(p, n);
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
++i;
|
|
||||||
ALLOC(p, i);
|
|
||||||
if(!p) {
|
if(!p) {
|
||||||
krb5_set_error_message (context, ENOMEM, N_("malloc: out of memory", ""));
|
krb5_set_error_message (context, ENOMEM,
|
||||||
|
N_("malloc: out of memory", ""));
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
memmove(p, etypes, i * sizeof(krb5_enctype));
|
for (n = 0, m = 0; etypes[n]; n++) {
|
||||||
|
ret = krb5_enctype_valid(context, etypes[n]);
|
||||||
|
if (ret)
|
||||||
|
continue;
|
||||||
|
p[m++] = etypes[n];
|
||||||
|
}
|
||||||
|
p[m] = ETYPE_NULL;
|
||||||
|
if (m == 0) {
|
||||||
|
free(p);
|
||||||
|
krb5_set_error_message (context, KRB5_PROG_ETYPE_NOSUPP,
|
||||||
|
N_("no valid enctype set", ""));
|
||||||
|
return KRB5_PROG_ETYPE_NOSUPP;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(context->etypes)
|
if(context->etypes)
|
||||||
free(context->etypes);
|
free(context->etypes);
|
||||||
|
Reference in New Issue
Block a user