(krb5_storage_set_host_byteorder): add

(krb5_store_int32,krb5_ret_int32,krb5_store_int16,krb5_ret_int16):
check host_byteorder flag
(krb5_store_creds): add
(krb5_ret_creds): add


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@5959 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
1999-04-15 15:42:10 +00:00
parent fb69627e1b
commit 200aeaacb9

View File

@@ -40,6 +40,14 @@
RCSID("$Id$");
krb5_boolean
krb5_storage_set_host_byteorder(krb5_storage *sp, krb5_boolean host_byteorder)
{
krb5_boolean save = sp->host_byteorder;
sp->host_byteorder = host_byteorder;
return save;
}
/* This is a bit XXX, but used quite many places */
size_t
@@ -115,6 +123,8 @@ krb5_error_code
krb5_store_int32(krb5_storage *sp,
int32_t value)
{
if(sp->host_byteorder)
value = htonl(value);
return krb5_store_int(sp, value, 4);
}
@@ -138,13 +148,20 @@ krb5_error_code
krb5_ret_int32(krb5_storage *sp,
int32_t *value)
{
return krb5_ret_int(sp, value, 4);
krb5_error_code ret = krb5_ret_int(sp, value, 4);
if(ret)
return ret;
if(sp->host_byteorder)
*value = ntohl(*value);
return 0;
}
krb5_error_code
krb5_store_int16(krb5_storage *sp,
int16_t value)
{
if(sp->host_byteorder)
value = htons(value);
return krb5_store_int(sp, value, 2);
}
@@ -154,10 +171,12 @@ krb5_ret_int16(krb5_storage *sp,
{
int32_t v;
int ret;
ret =krb5_ret_int(sp, &v, 2);
ret = krb5_ret_int(sp, &v, 2);
if(ret)
return ret;
*value = v;
if(sp->host_byteorder)
*value = ntohs(*value);
return 0;
}
@@ -333,6 +352,8 @@ krb5_ret_principal(krb5_storage *sp,
free(p);
return ret;
}
/* XXX cache version 1 supposedly counts the realm as a component
so we should decrement ncomp by one here */
p->name.name_type = type;
p->name.name_string.len = ncomp;
ret = krb5_ret_string(sp, &p->realm);
@@ -504,3 +525,57 @@ krb5_ret_authdata(krb5_storage *sp, krb5_authdata *auth)
}
return ret;
}
krb5_error_code
krb5_store_creds(krb5_storage *sp, krb5_creds *creds)
{
krb5_store_principal(sp, creds->client);
krb5_store_principal(sp, creds->server);
krb5_store_keyblock(sp, creds->session);
krb5_store_times(sp, creds->times);
krb5_store_int8(sp, 0); /* this is probably the
enc-tkt-in-skey bit from KDCOptions */
krb5_store_int32(sp, creds->flags.i);
krb5_store_addrs(sp, creds->addresses);
krb5_store_authdata(sp, creds->authdata);
krb5_store_data(sp, creds->ticket);
krb5_store_data(sp, creds->second_ticket);
return 0;
}
krb5_error_code
krb5_ret_creds(krb5_storage *sp, krb5_creds *creds)
{
krb5_error_code ret;
int8_t dummy8;
int32_t dummy32;
memset(creds, 0, sizeof(*creds));
ret = krb5_ret_principal (sp, &creds->client);
if(ret) goto cleanup;
ret = krb5_ret_principal (sp, &creds->server);
if(ret) goto cleanup;
ret = krb5_ret_keyblock (sp, &creds->session);
if(ret) goto cleanup;
ret = krb5_ret_times (sp, &creds->times);
if(ret) goto cleanup;
ret = krb5_ret_int8 (sp, &dummy8);
if(ret) goto cleanup;
ret = krb5_ret_int32 (sp, &dummy32);
if(ret) goto cleanup;
creds->flags.i = dummy32;
ret = krb5_ret_addrs (sp, &creds->addresses);
if(ret) goto cleanup;
ret = krb5_ret_authdata (sp, &creds->authdata);
if(ret) goto cleanup;
ret = krb5_ret_data (sp, &creds->ticket);
if(ret) goto cleanup;
ret = krb5_ret_data (sp, &creds->second_ticket);
cleanup:
if(ret)
#if 0
krb5_free_creds_contents(context, creds) /* XXX */
#endif
;
return ret;
}