summaryrefslogtreecommitdiffstats
path: root/src/lib/krb5/asn.1/tgrq2ktgrq.c
diff options
context:
space:
mode:
authorTheodore Tso <tytso@mit.edu>1992-09-29 14:35:35 +0000
committerTheodore Tso <tytso@mit.edu>1992-09-29 14:35:35 +0000
commit47d1b4272ba559d1fca882baf39b69232be54e4e (patch)
treed828f0d697047d4dae21bc2c46309117b944b185 /src/lib/krb5/asn.1/tgrq2ktgrq.c
parent239b0304339ff42143553fbf15321c0fe37d0553 (diff)
downloadkrb5-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.c50
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);