From 686d40d66ef493e2a3d16a844e592a76122350e1 Mon Sep 17 00:00:00 2001 From: Johan Danielsson Date: Sat, 12 Jul 1997 14:09:28 +0000 Subject: [PATCH] Add {store,ret}_stringz (zero terminated string). git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2174 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/store.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/lib/krb5/store.c b/lib/krb5/store.c index f11f37bbb..e48014351 100644 --- a/lib/krb5/store.c +++ b/lib/krb5/store.c @@ -172,6 +172,46 @@ krb5_ret_string(krb5_storage *sp, return 0; } +krb5_error_code +krb5_store_stringz(krb5_storage *sp, + char *s) +{ + size_t len = strlen(s) + 1; + size_t ret; + ret = sp->store(sp, s, len); + if(ret != len) + if((int)ret < 0) + return ret; + else + return KRB5_CC_END; + return 0; +} + +krb5_error_code +krb5_ret_stringz(krb5_storage *sp, + char **string) +{ + char c; + char *s = NULL; + len = 0; + size_t ret; + while((ret = sp->fetch(sp, &c, 1)) == 1){ + len++; + s = realloc(s, len); + s[len - 1] = c; + if(c == 0) + break; + } + if(ret != 1){ + free(s); + if(ret == 0) + return KRB5_CC_END; + return ret; + } + *string = s; + return 0; +} + krb5_error_code krb5_store_principal(krb5_storage *sp, @@ -219,10 +259,14 @@ krb5_ret_principal(krb5_storage *sp, if(p == NULL) return ENOMEM; - if((ret = krb5_ret_int32(sp, &type))) + if((ret = krb5_ret_int32(sp, &type))){ + free(p); return ret; - if((ret = krb5_ret_int32(sp, &ncomp))) + } + if((ret = krb5_ret_int32(sp, &ncomp))){ + free(p); return ret; + } #ifdef USE_ASN1_PRINCIPAL p->name.name_type = type; p->name.name_string.len = ncomp;