krb5: decorate PrincipalNameAttrs with krb5_pac

Add krb5_pac to PrincipalNameAttrs to avoid needing to re-parse it each time
gss_get_name_attribute() is called.
This commit is contained in:
Luke Howard
2022-01-07 11:32:28 +11:00
parent 0e8c4ccc6e
commit 5a952ee7b5
5 changed files with 135 additions and 50 deletions

View File

@@ -102,10 +102,13 @@ KRB5_LIB_FUNCTION void KRB5_LIB_CALL
krb5_free_principal(krb5_context context,
krb5_principal p)
{
if(p){
free_Principal(p);
free(p);
}
if (p == NULL)
return;
if (p->nameattrs)
krb5_pac_free(context, p->nameattrs->pac);
free_Principal(p);
free(p);
}
/**
@@ -926,12 +929,25 @@ krb5_copy_principal(krb5_context context,
krb5_principal *outprinc)
{
krb5_principal p = malloc(sizeof(*p));
krb5_error_code ret;
if (p == NULL)
return krb5_enomem(context);
if(copy_Principal(inprinc, p)) {
free(p);
return krb5_enomem(context);
}
if (inprinc->nameattrs && inprinc->nameattrs->pac) {
krb5_pac pac;
ret = _krb5_pac_copy(context, inprinc->nameattrs->pac, &pac);
if (ret) {
krb5_free_principal(context, p);
return ret;
}
heim_assert(p->nameattrs, "nameattrs uninitialized");
p->nameattrs->pac = pac;
}
*outprinc = p;
return 0;
}