Checked in jfc's changes to krb5_copy_principal
authorTheodore Tso <tytso@mit.edu>
Wed, 10 Jun 1992 20:49:25 +0000 (20:49 +0000)
committerTheodore Tso <tytso@mit.edu>
Wed, 10 Jun 1992 20:49:25 +0000 (20:49 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@2292 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/krb/copy_princ.c

index 6b80ec2424a8e8e6893d0c75bec215fce176353f..bff89b47e0b2d931f12aecd80c26958243b54208 100644 (file)
@@ -42,22 +42,33 @@ krb5_copy_principal(inprinc, outprinc)
 krb5_const_principal inprinc;
 krb5_principal *outprinc;
 {
-    krb5_error_code retval;
-    krb5_principal tempprinc;
-    register int nelems;
+    register krb5_principal tempprinc;
+    register int i, nelems;
 
-    for (nelems = 0; inprinc[nelems]; nelems++);
+    tempprinc = (krb5_principal)malloc(sizeof(krb5_principal_data));
 
-    /* one more for a null terminated list */
-    if (!(tempprinc = (krb5_principal) calloc(nelems+1, sizeof(krb5_data *))))
+    if (tempprinc == 0)
        return ENOMEM;
 
-    for (nelems = 0; inprinc[nelems]; nelems++)
-       if (retval = krb5_copy_data(inprinc[nelems], &tempprinc[nelems])) {
-           krb5_free_principal(tempprinc);
-           return retval;
-       }
+    nelems = krb5_princ_size(inprinc);
+    tempprinc->data = malloc(nelems * sizeof(krb5_data));
+
+    if (tempprinc->data == 0) {
+       free((char *)tempprinc);
+       return ENOMEM;
+    }
 
+    for (i = 0; i < nelems; i++) {
+       int len = krb5_princ_component(inprinc, i)->length;
+       krb5_princ_component(tempprinc, i)->length = len;
+       if ((krb5_princ_component(tempprinc, i)->data = malloc(len)) == 0) {
+           while (--i >= 0)
+               free(krb5_princ_component(tempprinc, i)->data);
+           free (tempprinc->data);
+           free (tempprinc);
+           return ENOMEM;
+       }
+    }
     *outprinc = tempprinc;
     return 0;
 }