add flags to change how various fields are stored, used for old cache
version support git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@6027 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 1998, 1999 Kungliga Tekniska H<>gskolan
|
* Copyright (c) 1997-1999 Kungliga Tekniska H<>gskolan
|
||||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -40,15 +40,23 @@
|
|||||||
|
|
||||||
RCSID("$Id$");
|
RCSID("$Id$");
|
||||||
|
|
||||||
krb5_boolean
|
void
|
||||||
krb5_storage_set_host_byteorder(krb5_storage *sp, krb5_boolean host_byteorder)
|
krb5_storage_set_flags(krb5_storage *sp, krb5_flags flags)
|
||||||
{
|
{
|
||||||
krb5_boolean save = sp->host_byteorder;
|
sp->flags |= flags;
|
||||||
sp->host_byteorder = host_byteorder;
|
|
||||||
return save;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is a bit XXX, but used quite many places */
|
void
|
||||||
|
krb5_storage_clear_flags(krb5_storage *sp, krb5_flags flags)
|
||||||
|
{
|
||||||
|
sp->flags &= ~flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
krb5_boolean
|
||||||
|
krb5_storage_is_flags(krb5_storage *sp, krb5_flags flags)
|
||||||
|
{
|
||||||
|
return (sp->flags & flags) == flags;
|
||||||
|
}
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
_krb5_put_int(void *buffer, unsigned long value, size_t size)
|
_krb5_put_int(void *buffer, unsigned long value, size_t size)
|
||||||
@@ -125,7 +133,7 @@ krb5_error_code
|
|||||||
krb5_store_int32(krb5_storage *sp,
|
krb5_store_int32(krb5_storage *sp,
|
||||||
int32_t value)
|
int32_t value)
|
||||||
{
|
{
|
||||||
if(sp->host_byteorder)
|
if(krb5_storage_is_flags(sp, KRB5_STORAGE_HOST_BYTEORDER))
|
||||||
value = htonl(value);
|
value = htonl(value);
|
||||||
return krb5_store_int(sp, value, 4);
|
return krb5_store_int(sp, value, 4);
|
||||||
}
|
}
|
||||||
@@ -153,7 +161,7 @@ krb5_ret_int32(krb5_storage *sp,
|
|||||||
krb5_error_code ret = krb5_ret_int(sp, value, 4);
|
krb5_error_code ret = krb5_ret_int(sp, value, 4);
|
||||||
if(ret)
|
if(ret)
|
||||||
return ret;
|
return ret;
|
||||||
if(sp->host_byteorder)
|
if(krb5_storage_is_flags(sp, KRB5_STORAGE_HOST_BYTEORDER))
|
||||||
*value = ntohl(*value);
|
*value = ntohl(*value);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -162,7 +170,7 @@ krb5_error_code
|
|||||||
krb5_store_int16(krb5_storage *sp,
|
krb5_store_int16(krb5_storage *sp,
|
||||||
int16_t value)
|
int16_t value)
|
||||||
{
|
{
|
||||||
if(sp->host_byteorder)
|
if(krb5_storage_is_flags(sp, KRB5_STORAGE_HOST_BYTEORDER))
|
||||||
value = htons(value);
|
value = htons(value);
|
||||||
return krb5_store_int(sp, value, 2);
|
return krb5_store_int(sp, value, 2);
|
||||||
}
|
}
|
||||||
@@ -177,7 +185,7 @@ krb5_ret_int16(krb5_storage *sp,
|
|||||||
if(ret)
|
if(ret)
|
||||||
return ret;
|
return ret;
|
||||||
*value = v;
|
*value = v;
|
||||||
if(sp->host_byteorder)
|
if(krb5_storage_is_flags(sp, KRB5_STORAGE_HOST_BYTEORDER))
|
||||||
*value = ntohs(*value);
|
*value = ntohs(*value);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -319,9 +327,16 @@ krb5_store_principal(krb5_storage *sp,
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if(!krb5_storage_is_flags(sp, KRB5_STORAGE_PRINCIPAL_NO_NAME_TYPE)) {
|
||||||
ret = krb5_store_int32(sp, p->name.name_type);
|
ret = krb5_store_int32(sp, p->name.name_type);
|
||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
|
}
|
||||||
|
if(krb5_storage_is_flags(sp, KRB5_STORAGE_PRINCIPAL_WRONG_NUM_COMPONENTS))
|
||||||
|
ret = krb5_store_int32(sp, p->name.name_string.len + 1);
|
||||||
|
else
|
||||||
ret = krb5_store_int32(sp, p->name.name_string.len);
|
ret = krb5_store_int32(sp, p->name.name_string.len);
|
||||||
|
|
||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
ret = krb5_store_string(sp, p->realm);
|
ret = krb5_store_string(sp, p->realm);
|
||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
@@ -346,7 +361,9 @@ krb5_ret_principal(krb5_storage *sp,
|
|||||||
if(p == NULL)
|
if(p == NULL)
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
|
|
||||||
if((ret = krb5_ret_int32(sp, &type))){
|
if(krb5_storage_is_flags(sp, KRB5_STORAGE_PRINCIPAL_NO_NAME_TYPE))
|
||||||
|
type = KRB5_NT_UNKNOWN;
|
||||||
|
else if((ret = krb5_ret_int32(sp, &type))){
|
||||||
free(p);
|
free(p);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -354,8 +371,8 @@ krb5_ret_principal(krb5_storage *sp,
|
|||||||
free(p);
|
free(p);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
/* XXX cache version 1 supposedly counts the realm as a component
|
if(krb5_storage_is_flags(sp, KRB5_STORAGE_PRINCIPAL_WRONG_NUM_COMPONENTS))
|
||||||
so we should decrement ncomp by one here */
|
ncomp--;
|
||||||
p->name.name_type = type;
|
p->name.name_type = type;
|
||||||
p->name.name_string.len = ncomp;
|
p->name.name_string.len = ncomp;
|
||||||
ret = krb5_ret_string(sp, &p->realm);
|
ret = krb5_ret_string(sp, &p->realm);
|
||||||
@@ -379,11 +396,14 @@ krb5_store_keyblock(krb5_storage *sp, krb5_keyblock p)
|
|||||||
int ret;
|
int ret;
|
||||||
ret = krb5_store_int16(sp, p.keytype);
|
ret = krb5_store_int16(sp, p.keytype);
|
||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
#if 0
|
|
||||||
/* this should be stored twice iff cache version == 3 */
|
if(krb5_storage_is_flags(sp, KRB5_STORAGE_KEYBLOCK_KEYTYPE_TWICE)){
|
||||||
|
/* this should really be enctype, but it is the same as
|
||||||
|
keytype nowadays */
|
||||||
ret = krb5_store_int16(sp, p.keytype);
|
ret = krb5_store_int16(sp, p.keytype);
|
||||||
#endif
|
|
||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
|
}
|
||||||
|
|
||||||
ret = krb5_store_data(sp, p.keyvalue);
|
ret = krb5_store_data(sp, p.keyvalue);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -393,14 +413,16 @@ krb5_ret_keyblock(krb5_storage *sp, krb5_keyblock *p)
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
int16_t tmp;
|
int16_t tmp;
|
||||||
|
|
||||||
ret = krb5_ret_int16(sp, &tmp);
|
ret = krb5_ret_int16(sp, &tmp);
|
||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
p->keytype = tmp;
|
p->keytype = tmp;
|
||||||
#if 0
|
|
||||||
/* XXX only if cache-type == 3 */
|
if(krb5_storage_is_flags(sp, KRB5_STORAGE_KEYBLOCK_KEYTYPE_TWICE)){
|
||||||
ret = krb5_ret_int16(sp, &tmp);
|
ret = krb5_ret_int16(sp, &tmp);
|
||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
#endif
|
}
|
||||||
|
|
||||||
ret = krb5_ret_data(sp, &p->keyvalue);
|
ret = krb5_ret_data(sp, &p->keyvalue);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user