summaryrefslogtreecommitdiffstats
path: root/src/lib/krb5/asn.1/addr2kaddr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/krb5/asn.1/addr2kaddr.c')
-rw-r--r--src/lib/krb5/asn.1/addr2kaddr.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/lib/krb5/asn.1/addr2kaddr.c b/src/lib/krb5/asn.1/addr2kaddr.c
index 8bc295bedc..32a0989e2f 100644
--- a/src/lib/krb5/asn.1/addr2kaddr.c
+++ b/src/lib/krb5/asn.1/addr2kaddr.c
@@ -34,6 +34,10 @@ KRB5_HostAddresses2krb5_address(val, error)
const struct type_KRB5_HostAddresses *val;
register int *error;
{
+#if 0
+ /* this code is for -h2 style ISODE structures. However, pepsy
+ generates horribly broken when given -h2. */
+
register krb5_address **retval;
register int i;
@@ -57,6 +61,7 @@ register int *error;
retval[i]->contents = (unsigned char *)xmalloc(val->element_KRB5_0[i]->address->qb_forw->qb_len);
if (!retval[i]->contents) {
xfree(retval[i]);
+ retval[i] = 0;
krb5_free_address(retval);
goto nomem;
}
@@ -67,5 +72,45 @@ register int *error;
}
retval[i] = 0;
return(retval);
+#endif
+
+ register krb5_address **retval;
+ register int i;
+ register struct type_KRB5_HostAddresses *rv;
+
+ for (i = 0, rv = val; rv; i++, rv = rv->next)
+ ;
+
+ /* plus one for null terminator */
+ retval = (krb5_address **) xcalloc(i + 1, sizeof(*retval));
+ if (!retval) {
+ nomem:
+ *error = ENOMEM;
+ return(0);
+ }
+ for (i = 0, rv = val; rv; rv = rv->next, i++) {
+ if (qb_pullup(rv->element_KRB5_0->address) != OK) {
+ xfree(retval);
+ goto nomem;
+ }
+ retval[i] = (krb5_address *) xmalloc(sizeof(*retval[i]));
+ if (!retval[i]) {
+ krb5_free_address(retval);
+ goto nomem;
+ }
+ retval[i]->contents = (unsigned char *)xmalloc(rv->element_KRB5_0->address->qb_forw->qb_len);
+ if (!retval[i]->contents) {
+ xfree(retval[i]);
+ retval[i] = 0;
+ krb5_free_address(retval);
+ goto nomem;
+ }
+ retval[i]->addrtype = rv->element_KRB5_0->addr__type;
+ retval[i]->length = rv->element_KRB5_0->address->qb_forw->qb_len;
+ xbcopy(rv->element_KRB5_0->address->qb_forw->qb_data,
+ retval[i]->contents, retval[i]->length);
+ }
+ retval[i] = 0;
+ return(retval);
}