Principal type changes
authorJohn Carr <jfc@mit.edu>
Fri, 21 Aug 1992 03:08:26 +0000 (03:08 +0000)
committerJohn Carr <jfc@mit.edu>
Fri, 21 Aug 1992 03:08:26 +0000 (03:08 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@2355 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/asn.1/kauth2auth.c
src/lib/krb5/asn.1/kekrp2ekrp.c
src/lib/krb5/asn.1/kerr2err.c
src/lib/krb5/asn.1/ketpt2etpt.c
src/lib/krb5/asn.1/kkdcr2kdcr.c
src/lib/krb5/asn.1/kprin2prin.c
src/lib/krb5/asn.1/ktgrq2tgrq.c
src/lib/krb5/asn.1/ktkt2tkt.c
src/lib/krb5/asn.1/prin2kprin.c

index 69dc2e5c2c6de7cbd4f26c328c2cb4a573d088ee..5bf7e1521402dd89667689500a44242553884b98 100644 (file)
@@ -56,7 +56,7 @@ register int *error;
 
     xbzero(retval, sizeof(*retval));
     retval->authenticator__vno = KRB5_PVNO;
-    retval->crealm = krb5_data2qbuf(val->client[0]);
+    retval->crealm = krb5_data2qbuf(krb5_princ_realm(val->client));
     if (!retval->crealm) {
        *error = ENOMEM;
     errout:
index edfea3ee342f2bd4dbdbfaa762c6bcc277b179b1..833313777e486b5bdb09e909420954dd17c8c8c1 100644 (file)
@@ -97,7 +97,7 @@ register int *error;
            goto errout;
        }
     }
-    retval->srealm = krb5_data2qbuf(val->server[0]);
+    retval->srealm = krb5_data2qbuf(krb5_princ_realm(val->server));
     if (!retval->srealm) {
        *error = ENOMEM;
        goto errout;
index 12ec65b9130590738918c57be3002e3b53ec319e..f1a4572a06a0555af7d324ee8300e703fa76b3de 100644 (file)
@@ -80,7 +80,7 @@ register int *error;
     retval->error__code = val->error;
 
     if (val->client) {
-       retval->crealm = krb5_data2qbuf(val->client[0]);
+       retval->crealm = krb5_data2qbuf(krb5_princ_realm(val->client));
        if (!retval->crealm) {
            *error = ENOMEM;
            goto errout;
@@ -93,7 +93,7 @@ register int *error;
 
     /* server is technically not optional, but... */
     if (val->server) {
-       retval->realm = krb5_data2qbuf(val->server[0]);
+       retval->realm = krb5_data2qbuf(krb5_princ_realm(val->server));
        if (!retval->realm) {
            *error = ENOMEM;
            goto errout;
index 690412d0d26ea2cef11c963a807b9c398cf4ddba..876baa4bc208f7435c125b34ba3b65e0c0f4a557 100644 (file)
@@ -62,7 +62,7 @@ register int *error;
        free_KRB5_EncTicketPart(retval);
        return(0);
     }
-    retval->crealm = krb5_data2qbuf(val->client[0]);
+    retval->crealm = krb5_data2qbuf(krb5_princ_realm(val->client));
     if (!retval->crealm) {
        *error = ENOMEM;
        goto errout;
index c2ffbc38cac8d42ddb3aab3dcae8c51c9eb0751a..ef80313c59ff93c892701bcea4a8acdbe26fa138 100644 (file)
@@ -38,8 +38,6 @@ static char rcsid_kkdcr2kdcr_c[] =
 
 #include <krb5/ext-proto.h>
 
-/* ISODE defines max(a,b) */
-
 struct type_KRB5_TGS__REP *
 krb5_kdc_rep2KRB5_KDC__REP(DECLARG(const register krb5_kdc_rep *,val),
                           DECLARG(register int *,error))
@@ -65,7 +63,7 @@ OLDDECLARG(register int *,error)
        }
     }
 
-    retval->crealm = krb5_data2qbuf(val->client[0]);
+    retval->crealm = krb5_data2qbuf(krb5_princ_realm(val->client));
     if (!retval->crealm) {
        *error = ENOMEM;
     errout:
index c2c6dc759816adff004b578cfff21452b34afc63..585d09e4139439986ebf193563493649a3342a69 100644 (file)
@@ -80,9 +80,11 @@ register int *error;
 #endif
     register struct type_KRB5_PrincipalName *retval = 0, *rv1 = 0, *rv2;
     register int i;
+    int nelem = krb5_princ_size(val);
+
 
     /* still skipping realm */
-    for (i = 1; val[i]; i++, rv1 = rv2) { 
+    for (i = 0; i < nelem; i++, rv1 = rv2) { 
        rv2 = (struct type_KRB5_PrincipalName *) xmalloc(sizeof(*rv2));
        if (!rv2) {
            if (retval)
@@ -96,7 +98,7 @@ register int *error;
        if (!retval)
            retval = rv2;
 
-       rv2->GeneralString = krb5_data2qbuf(val[i]);
+       rv2->GeneralString = krb5_data2qbuf(krb5_princ_component(val, i));
        if (!rv2->GeneralString) {
            /* clean up */
            if (retval)
index 8663097ce28eab5148d59ce7ce4f3cc7331ec294..31e6a7b9af28c09437457dfc6b518d0b8089378b 100644 (file)
@@ -71,7 +71,7 @@ register int *error;
            goto errout;
        }
     }    
-    retval->realm = krb5_data2qbuf(val->server[0]);
+    retval->realm = krb5_data2qbuf(krb5_princ_realm(val->server));
     if (!retval->realm) {
        *error = ENOMEM;
        goto errout;
index ef34e6baaafb2662d188875f7d42fa358bca64c3..833facd2e8312c406163c88ec353c7c9a7ab84c9 100644 (file)
@@ -56,7 +56,7 @@ register int *error;
     xbzero(retval, sizeof(*retval));
 
     retval->tkt__vno = KRB5_PVNO;
-    retval->realm = krb5_data2qbuf(val->server[0]);
+    retval->realm = krb5_data2qbuf(krb5_princ_realm(val->server));
     if (!retval->realm) {
        *error = ENOMEM;
     errout:
index f9cb2002416dcd50b9e6e2eeddad7aaa24ed124e..36701d7ba3888d1af806ce69c1c4ab7aab66dc13 100644 (file)
@@ -39,7 +39,23 @@ static char rcsid_prin2kprin_c[] =
 
 #include <krb5/ext-proto.h>
 
-/* ISODE defines max(a,b) */
+static int qbuf_to_data(val, data)
+register const struct qbuf *val;
+krb5_data *data;
+{
+    int length;
+    if (qb_pullup(val) != OK)
+       return 1;
+    if ((length = val->qb_forw->qb_len) > 0) {
+       data->data = malloc(length);
+       memcpy(data->data, val->qb_forw->qb_data, length);
+    } else {
+       data->data = 0;
+    }
+    data->length = length;
+    return 0;
+}
+
 
 krb5_principal
 KRB5_PrincipalName2krb5_principal(val, realm, error)
@@ -85,26 +101,34 @@ register int *error;
     for (i = 1, rv = val; rv->next; i++, rv = rv->next)
        ;
 
-    /* plus one for the realm, plus one for null term */
-    retval = (krb5_principal) xcalloc(i + 2, sizeof(krb5_data *));
-                                            
+    retval = (krb5_principal) malloc(sizeof(krb5_principal_data));
+
     if (!retval) {
        *error = ENOMEM;
        return(0);
     }
+    /* plus one for the realm */
+    retval->length = i;
+    retval->data = (krb5_data *)malloc(i * sizeof(krb5_data));
+    if (retval->data == 0) {
+       xfree(retval);
+       *error = ENOMEM;
+       return 0;
+    }
 
-    retval[0] = qbuf2krb5_data(realm, error);
-    if (!retval[0]) {
+    if (qbuf_to_data(realm, krb5_princ_realm(retval))) {
+       xfree(retval->data);
        xfree(retval);
-       return(0);
+       *error = ENOMEM;
+       return 0;
     }
-    for (i = 1, rv = val; rv; rv = rv->next, i++) {
-       retval[i] = qbuf2krb5_data(rv->GeneralString, error);
-       if (!retval[i]) {
-           krb5_free_principal(retval);
+
+    for (i = 0, rv = val; rv; rv = rv->next, i++) 
+       if (qbuf_to_data(rv->GeneralString, krb5_princ_component(retval, i))) {
+           while (--i >= 0)
+               free(krb5_princ_component(retval, i)->data);
+           *error = ENOMEM;
            return(0);
        }
-    }
-    retval[i] = 0;
     return(retval);
 }