diff options
author | Theodore Tso <tytso@mit.edu> | 1992-09-29 14:35:35 +0000 |
---|---|---|
committer | Theodore Tso <tytso@mit.edu> | 1992-09-29 14:35:35 +0000 |
commit | 47d1b4272ba559d1fca882baf39b69232be54e4e (patch) | |
tree | d828f0d697047d4dae21bc2c46309117b944b185 /src/lib/krb5/asn.1/tgrq2ktgrq.c | |
parent | 239b0304339ff42143553fbf15321c0fe37d0553 (diff) | |
download | krb5-47d1b4272ba559d1fca882baf39b69232be54e4e.tar.gz krb5-47d1b4272ba559d1fca882baf39b69232be54e4e.tar.xz krb5-47d1b4272ba559d1fca882baf39b69232be54e4e.zip |
Fold in ISI changes for asn.1 fixes
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@2436 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/krb5/asn.1/tgrq2ktgrq.c')
-rw-r--r-- | src/lib/krb5/asn.1/tgrq2ktgrq.c | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/src/lib/krb5/asn.1/tgrq2ktgrq.c b/src/lib/krb5/asn.1/tgrq2ktgrq.c index 9ea7dee41..8a08d880c 100644 --- a/src/lib/krb5/asn.1/tgrq2ktgrq.c +++ b/src/lib/krb5/asn.1/tgrq2ktgrq.c @@ -201,6 +201,54 @@ register int *error; return retval; } + +krb5_pa_data ** +element_KRB5_72krb5_pa_data(val, error) + struct element_KRB5_7 *val; + register int *error; +{ + register krb5_pa_data **retval; + register int i; + register struct element_KRB5_7 *rv; + + for (i = 0, rv = val; rv; i++, rv = rv->next) + ; + + /* plus one for null terminator */ + retval = (krb5_pa_data **) xcalloc(i + 1, sizeof(*retval)); + if (!retval) { + *error = ENOMEM; + return(0); + } + for (i = 0, rv = val; rv; rv = rv->next, i++) { + if (qb_pullup(rv->PA__DATA->pa__data) != OK) { + xfree(retval); + *error = ENOMEM; + return(0); + } + retval[i] = (krb5_pa_data *) xmalloc(sizeof(*retval[i])); + if (!retval[i]) { + krb5_free_pa_data(retval); + *error = ENOMEM; + return(0); + } + retval[i]->contents = (unsigned char *)xmalloc(rv->PA__DATA->pa__data->qb_forw->qb_len); + if (!retval[i]->contents) { + xfree(retval[i]); + retval[i] = 0; + krb5_free_pa_data(retval); + *error = ENOMEM; + return(0); + } + retval[i]->pa_type = rv->PA__DATA->padata__type; + retval[i]->length = rv->PA__DATA->pa__data->qb_forw->qb_len; + xbcopy(rv->PA__DATA->pa__data->qb_forw->qb_data, + retval[i]->contents, retval[i]->length); + } + retval[i] = 0; + return(retval); +} + krb5_kdc_req * KRB5_KDC__REQ2krb5_kdc_req(val, error) const register struct type_KRB5_KDC__REQ *val; @@ -213,7 +261,7 @@ register int *error; retval->msg_type = val->msg__type; if (val->padata) { - retval->padata = KRB5_PA__DATA2krb5_pa_data(val->padata, error); + retval->padata = element_KRB5_72krb5_pa_data(val->padata, error); if (!retval->padata) { krb5_free_kdc_req(retval); return(0); |