move xdr function here
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@24313 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
68
kadmin/rpc.c
68
kadmin/rpc.c
@@ -236,13 +236,55 @@ collect_framents(krb5_storage *sp, krb5_storage *msg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
krb5_error_code KRB5_LIB_FUNCTION
|
||||||
|
store_data_xdr(krb5_storage *sp, krb5_data data)
|
||||||
|
{
|
||||||
|
krb5_error_code ret;
|
||||||
|
size_t res;
|
||||||
|
|
||||||
|
ret = krb5_store_data(sp, data);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
res = 4 - (data.length % 4);
|
||||||
|
if (res != 4) {
|
||||||
|
static const char zero[4] = { 0, 0, 0, 0 };
|
||||||
|
|
||||||
|
ret = krb5_storage_write(sp, zero, res);
|
||||||
|
if(ret != res)
|
||||||
|
return (ret < 0)? errno : krb5_storage_get_eof_code(sp);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
krb5_error_code KRB5_LIB_FUNCTION
|
||||||
|
ret_data_xdr(krb5_storage *sp, krb5_data *data)
|
||||||
|
{
|
||||||
|
krb5_error_code ret;
|
||||||
|
ret = krb5_ret_data(sp, data);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
if ((data->length % 4) != 0) {
|
||||||
|
char buf[4];
|
||||||
|
size_t res;
|
||||||
|
|
||||||
|
res = 4 - (data->length % 4);
|
||||||
|
if (res != 4) {
|
||||||
|
ret = krb5_storage_read(sp, buf, res);
|
||||||
|
if(ret != res)
|
||||||
|
return (ret < 0)? errno : krb5_storage_get_eof_code(sp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
ret_auth_opaque(krb5_storage *msg, struct opaque_auth *ao)
|
ret_auth_opaque(krb5_storage *msg, struct opaque_auth *ao)
|
||||||
{
|
{
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
ret = krb5_ret_uint32(msg, &ao->flavor);
|
ret = krb5_ret_uint32(msg, &ao->flavor);
|
||||||
if (ret) return ret;
|
if (ret) return ret;
|
||||||
ret = krb5_ret_data_xdr(msg, &ao->data);
|
ret = ret_data_xdr(msg, &ao->data);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,7 +302,7 @@ ret_gcred(krb5_data *data, struct gcred *gcred)
|
|||||||
CHECK(krb5_ret_uint32(sp, &gcred->proc));
|
CHECK(krb5_ret_uint32(sp, &gcred->proc));
|
||||||
CHECK(krb5_ret_uint32(sp, &gcred->seq_num));
|
CHECK(krb5_ret_uint32(sp, &gcred->seq_num));
|
||||||
CHECK(krb5_ret_uint32(sp, &gcred->service));
|
CHECK(krb5_ret_uint32(sp, &gcred->service));
|
||||||
CHECK(krb5_ret_data_xdr(sp, &gcred->handle));
|
CHECK(ret_data_xdr(sp, &gcred->handle));
|
||||||
|
|
||||||
krb5_storage_free(sp);
|
krb5_storage_free(sp);
|
||||||
|
|
||||||
@@ -278,13 +320,13 @@ store_gss_init_res(krb5_storage *sp, krb5_data handle,
|
|||||||
out.data = gout->value;
|
out.data = gout->value;
|
||||||
out.length = gout->length;
|
out.length = gout->length;
|
||||||
|
|
||||||
ret = krb5_store_data_xdr(sp, handle);
|
ret = store_data_xdr(sp, handle);
|
||||||
if (ret) return ret;
|
if (ret) return ret;
|
||||||
ret = krb5_store_uint32(sp, maj_stat);
|
ret = krb5_store_uint32(sp, maj_stat);
|
||||||
if (ret) return ret;
|
if (ret) return ret;
|
||||||
ret = krb5_store_uint32(sp, min_stat);
|
ret = krb5_store_uint32(sp, min_stat);
|
||||||
if (ret) return ret;
|
if (ret) return ret;
|
||||||
ret = krb5_store_data_xdr(sp, out);
|
ret = store_data_xdr(sp, out);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -298,7 +340,7 @@ store_string_xdr(krb5_storage *sp, const char *str)
|
|||||||
} else
|
} else
|
||||||
krb5_data_zero(&c);
|
krb5_data_zero(&c);
|
||||||
|
|
||||||
return krb5_store_data_xdr(sp, c);
|
return store_data_xdr(sp, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -306,7 +348,7 @@ ret_string_xdr(krb5_storage *sp, char **str)
|
|||||||
{
|
{
|
||||||
krb5_data c;
|
krb5_data c;
|
||||||
*str = NULL;
|
*str = NULL;
|
||||||
CHECK(krb5_ret_data_xdr(sp, &c));
|
CHECK(ret_data_xdr(sp, &c));
|
||||||
if (c.length) {
|
if (c.length) {
|
||||||
*str = malloc(c.length + 1);
|
*str = malloc(c.length + 1);
|
||||||
INSIST(*str != NULL);
|
INSIST(*str != NULL);
|
||||||
@@ -382,7 +424,7 @@ store_principal_ent(krb5_context context,
|
|||||||
|
|
||||||
CHECK(krb5_store_int32(sp, 0)); /* last item */
|
CHECK(krb5_store_int32(sp, 0)); /* last item */
|
||||||
CHECK(krb5_store_int32(sp, tp->tl_data_type));
|
CHECK(krb5_store_int32(sp, tp->tl_data_type));
|
||||||
CHECK(krb5_store_data_xdr(sp, c));
|
CHECK(store_data_xdr(sp, c));
|
||||||
}
|
}
|
||||||
CHECK(krb5_store_int32(sp, 1)); /* last item */
|
CHECK(krb5_store_int32(sp, 1)); /* last item */
|
||||||
}
|
}
|
||||||
@@ -457,7 +499,7 @@ ret_principal_ent(krb5_context context,
|
|||||||
INSIST(*tp != NULL);
|
INSIST(*tp != NULL);
|
||||||
CHECK(krb5_ret_uint32(sp, &flag));
|
CHECK(krb5_ret_uint32(sp, &flag));
|
||||||
(*tp)->tl_data_type = flag;
|
(*tp)->tl_data_type = flag;
|
||||||
CHECK(krb5_ret_data_xdr(sp, &c));
|
CHECK(ret_data_xdr(sp, &c));
|
||||||
(*tp)->tl_data_length = c.length;
|
(*tp)->tl_data_length = c.length;
|
||||||
(*tp)->tl_data_contents = c.data;
|
(*tp)->tl_data_contents = c.data;
|
||||||
tp = &(*tp)->tl_data_next;
|
tp = &(*tp)->tl_data_next;
|
||||||
@@ -624,7 +666,7 @@ proc_chrand_principal_v2(kadm5_server_context *context,
|
|||||||
|
|
||||||
for(i = 0; i < n_keys; i++){
|
for(i = 0; i < n_keys; i++){
|
||||||
CHECK(krb5_store_uint32(out, new_keys[i].keytype));
|
CHECK(krb5_store_uint32(out, new_keys[i].keytype));
|
||||||
CHECK(krb5_store_data_xdr(out, new_keys[i].keyvalue));
|
CHECK(store_data_xdr(out, new_keys[i].keyvalue));
|
||||||
krb5_free_keyblock_contents(context->context, &new_keys[i]);
|
krb5_free_keyblock_contents(context->context, &new_keys[i]);
|
||||||
}
|
}
|
||||||
free(new_keys);
|
free(new_keys);
|
||||||
@@ -837,7 +879,7 @@ process_stream(krb5_context context,
|
|||||||
|
|
||||||
INSIST(krb5_data_cmp(&gcred.handle, &gctx.handle) == 0);
|
INSIST(krb5_data_cmp(&gcred.handle, &gctx.handle) == 0);
|
||||||
|
|
||||||
CHECK(krb5_ret_data_xdr(msg, &data));
|
CHECK(ret_data_xdr(msg, &data));
|
||||||
|
|
||||||
gin.value = data.data;
|
gin.value = data.data;
|
||||||
gin.length = data.length;
|
gin.length = data.length;
|
||||||
@@ -894,7 +936,7 @@ process_stream(krb5_context context,
|
|||||||
|
|
||||||
INSIST(gctx.inprogress);
|
INSIST(gctx.inprogress);
|
||||||
|
|
||||||
CHECK(krb5_ret_data_xdr(msg, &in));
|
CHECK(ret_data_xdr(msg, &in));
|
||||||
|
|
||||||
gin.value = in.data;
|
gin.value = in.data;
|
||||||
gin.length = in.length;
|
gin.length = in.length;
|
||||||
@@ -999,7 +1041,7 @@ process_stream(krb5_context context,
|
|||||||
data.length = gout.length;
|
data.length = gout.length;
|
||||||
|
|
||||||
CHECK(krb5_store_uint32(reply, FLAVOR_GSS));
|
CHECK(krb5_store_uint32(reply, FLAVOR_GSS));
|
||||||
CHECK(krb5_store_data_xdr(reply, data));
|
CHECK(store_data_xdr(reply, data));
|
||||||
gss_release_buffer(&min_stat, &gout);
|
gss_release_buffer(&min_stat, &gout);
|
||||||
|
|
||||||
CHECK(krb5_store_uint32(reply, 0)); /* SUCCESS */
|
CHECK(krb5_store_uint32(reply, 0)); /* SUCCESS */
|
||||||
@@ -1027,7 +1069,7 @@ process_stream(krb5_context context,
|
|||||||
data.data = gout.value;
|
data.data = gout.value;
|
||||||
data.length = gout.length;
|
data.length = gout.length;
|
||||||
|
|
||||||
krb5_store_data_xdr(reply, data);
|
store_data_xdr(reply, data);
|
||||||
gss_release_buffer(&min_stat, &gout);
|
gss_release_buffer(&min_stat, &gout);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user