diff options
author | Theodore Tso <tytso@mit.edu> | 1992-06-10 20:49:25 +0000 |
---|---|---|
committer | Theodore Tso <tytso@mit.edu> | 1992-06-10 20:49:25 +0000 |
commit | 6b5da137191fb8fb47d970db2e887fed7040771f (patch) | |
tree | c3bbaf99a832fb0a3cd8c79c19ebaf3c40ed7b6e /src/lib/krb5/krb | |
parent | ad444bac9a0f03bac0fab38bfc1f58d1ebf28896 (diff) | |
download | krb5-6b5da137191fb8fb47d970db2e887fed7040771f.tar.gz krb5-6b5da137191fb8fb47d970db2e887fed7040771f.tar.xz krb5-6b5da137191fb8fb47d970db2e887fed7040771f.zip |
Checked in jfc's changes to krb5_copy_principal
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@2292 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/krb5/krb')
-rw-r--r-- | src/lib/krb5/krb/copy_princ.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/src/lib/krb5/krb/copy_princ.c b/src/lib/krb5/krb/copy_princ.c index 6b80ec242..bff89b47e 100644 --- a/src/lib/krb5/krb/copy_princ.c +++ b/src/lib/krb5/krb/copy_princ.c @@ -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; } |