(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,
|
||||
const krb5_enctype *etypes)
|
||||
{
|
||||
krb5_error_code ret;
|
||||
krb5_enctype *p = NULL;
|
||||
int i;
|
||||
unsigned int n, m;
|
||||
|
||||
if(etypes) {
|
||||
for (i = 0; etypes[i]; ++i) {
|
||||
krb5_error_code ret;
|
||||
ret = krb5_enctype_valid(context, etypes[i]);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
++i;
|
||||
ALLOC(p, i);
|
||||
for (n = 0; etypes[n]; n++)
|
||||
;
|
||||
n++;
|
||||
ALLOC(p, n);
|
||||
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;
|
||||
}
|
||||
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)
|
||||
free(context->etypes);
|
||||
|
Reference in New Issue
Block a user