Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/crypto/krb5/src/lib/kadm5/srv/adb_xdr.c
39566 views
1
/* -*- mode: c; c-file-style: "bsd"; indent-tabs-mode: t -*- */
2
/*
3
* Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved
4
*
5
* $Header$
6
*/
7
8
#include <sys/types.h>
9
#include <krb5.h>
10
#include <gssrpc/rpc.h>
11
#include "server_internal.h"
12
#include "admin_xdr.h"
13
#ifdef HAVE_MEMORY_H
14
#include <memory.h>
15
#endif
16
17
bool_t
18
xdr_krb5_key_data(XDR *xdrs, krb5_key_data *objp)
19
{
20
unsigned int tmp;
21
22
if (!xdr_krb5_int16(xdrs, &objp->key_data_ver))
23
return(FALSE);
24
if (!xdr_krb5_ui_2(xdrs, &objp->key_data_kvno))
25
return(FALSE);
26
if (!xdr_krb5_int16(xdrs, &objp->key_data_type[0]))
27
return(FALSE);
28
if (!xdr_krb5_int16(xdrs, &objp->key_data_type[1]))
29
return(FALSE);
30
if (!xdr_krb5_ui_2(xdrs, &objp->key_data_length[0]))
31
return(FALSE);
32
if (!xdr_krb5_ui_2(xdrs, &objp->key_data_length[1]))
33
return(FALSE);
34
35
tmp = (unsigned int) objp->key_data_length[0];
36
if (!xdr_bytes(xdrs, (char **) &objp->key_data_contents[0],
37
&tmp, ~0))
38
return FALSE;
39
if (tmp != objp->key_data_length[0])
40
return FALSE;
41
42
tmp = (unsigned int) objp->key_data_length[1];
43
if (!xdr_bytes(xdrs, (char **) &objp->key_data_contents[1],
44
&tmp, ~0))
45
return FALSE;
46
if (tmp != objp->key_data_length[1])
47
return FALSE;
48
49
/* don't need to copy tmp out, since key_data_length will be set
50
by the above encoding. */
51
52
return(TRUE);
53
}
54
55
bool_t
56
xdr_osa_pw_hist_ent(XDR *xdrs, osa_pw_hist_ent *objp)
57
{
58
if (!xdr_array(xdrs, (caddr_t *) &objp->key_data,
59
(u_int *) &objp->n_key_data, ~0,
60
sizeof(krb5_key_data), (xdrproc_t)xdr_krb5_key_data))
61
return (FALSE);
62
return (TRUE);
63
}
64
65
bool_t
66
xdr_osa_princ_ent_rec(XDR *xdrs, osa_princ_ent_t objp)
67
{
68
switch (xdrs->x_op) {
69
case XDR_ENCODE:
70
objp->version = OSA_ADB_PRINC_VERSION_1;
71
/* fall through */
72
case XDR_FREE:
73
if (!xdr_int(xdrs, &objp->version))
74
return FALSE;
75
break;
76
case XDR_DECODE:
77
if (!xdr_int(xdrs, &objp->version))
78
return FALSE;
79
if (objp->version != OSA_ADB_PRINC_VERSION_1)
80
return FALSE;
81
break;
82
}
83
84
if (!xdr_nullstring(xdrs, &objp->policy))
85
return (FALSE);
86
if (!xdr_long(xdrs, &objp->aux_attributes))
87
return (FALSE);
88
if (!xdr_u_int(xdrs, &objp->old_key_next))
89
return (FALSE);
90
if (!xdr_krb5_kvno(xdrs, &objp->admin_history_kvno))
91
return (FALSE);
92
if (!xdr_array(xdrs, (caddr_t *) &objp->old_keys,
93
(unsigned int *) &objp->old_key_len, ~0,
94
sizeof(osa_pw_hist_ent), (xdrproc_t)xdr_osa_pw_hist_ent))
95
return (FALSE);
96
return (TRUE);
97
}
98
99
void
100
osa_free_princ_ent(osa_princ_ent_t val)
101
{
102
XDR xdrs;
103
104
xdrmem_create(&xdrs, NULL, 0, XDR_FREE);
105
106
xdr_osa_princ_ent_rec(&xdrs, val);
107
free(val);
108
}
109
110