1/*
2 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
3 * Use is subject to license terms.
4 */
5
6
7/*
8 * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
9 *
10 *	Openvision retains the copyright to derivative works of
11 *	this source code.  Do *NOT* create a derivative of this
12 *	source code before consulting with your legal department.
13 *	Do *NOT* integrate *ANY* of this source code into another
14 *	product before consulting with your legal department.
15 *
16 *	For further information, read the top-level Openvision
17 *	copyright which is contained in the top-level MIT Kerberos
18 *	copyright.
19 *
20 * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
21 *
22 */
23
24
25/*
26 * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved
27 *
28 * $Header$
29 */
30
31#if !defined(lint) && !defined(__CODECENTER__)
32static char *rcsid = "$Header$";
33#endif
34
35#include <sys/types.h>
36#include	"server_internal.h"
37#include <krb5.h>
38#include <rpc/rpc.h> /* SUNWresync121 XXX */
39#include "admin_xdr.h"
40#ifdef HAVE_MEMORY_H
41#include <memory.h>
42#endif
43
44bool_t
45xdr_krb5_key_data(XDR *xdrs, krb5_key_data *objp)
46{
47    unsigned int tmp;
48
49    if (!xdr_krb5_int16(xdrs, &objp->key_data_ver))
50	return(FALSE);
51    if (!xdr_krb5_int16(xdrs, &objp->key_data_kvno))
52	return(FALSE);
53    if (!xdr_krb5_int16(xdrs, &objp->key_data_type[0]))
54	return(FALSE);
55    if (!xdr_krb5_int16(xdrs, &objp->key_data_type[1]))
56	return(FALSE);
57	/* SUNW14resync */
58    if (!xdr_krb5_ui_2(xdrs, (krb5_ui_2 *)&objp->key_data_length[0]))
59	return(FALSE);
60    if (!xdr_krb5_ui_2(xdrs, (krb5_ui_2 *)&objp->key_data_length[1]))
61	return(FALSE);
62
63    tmp = (unsigned int) objp->key_data_length[0];
64    if (!xdr_bytes(xdrs, (char **) &objp->key_data_contents[0],
65		   &tmp, ~0))
66	return FALSE;
67
68    tmp = (unsigned int) objp->key_data_length[1];
69    if (!xdr_bytes(xdrs, (char **) &objp->key_data_contents[1],
70		   &tmp, ~0))
71	return FALSE;
72
73    /* don't need to copy tmp out, since key_data_length will be set
74       by the above encoding. */
75
76    return(TRUE);
77}
78
79bool_t
80xdr_osa_pw_hist_ent(XDR *xdrs, osa_pw_hist_ent *objp)
81{
82    if (!xdr_array(xdrs, (caddr_t *) &objp->key_data,
83		   (u_int *) &objp->n_key_data, ~0,
84		   sizeof(krb5_key_data),
85		   xdr_krb5_key_data))
86	return (FALSE);
87    return (TRUE);
88}
89
90bool_t
91xdr_osa_princ_ent_rec(XDR *xdrs, osa_princ_ent_t objp)
92{
93    switch (xdrs->x_op) {
94    case XDR_ENCODE:
95	 objp->version = OSA_ADB_PRINC_VERSION_1;
96	 /* fall through */
97    case XDR_FREE:
98	 if (!xdr_int(xdrs, &objp->version))
99	      return FALSE;
100	 break;
101    case XDR_DECODE:
102	 if (!xdr_int(xdrs, &objp->version))
103	      return FALSE;
104	 if (objp->version != OSA_ADB_PRINC_VERSION_1)
105	      return FALSE;
106	 break;
107    }
108
109    if (!xdr_nullstring(xdrs, &objp->policy))
110	return (FALSE);
111    if (!xdr_long(xdrs, &objp->aux_attributes))
112	return (FALSE);
113    if (!xdr_u_int(xdrs, &objp->old_key_next))
114	return (FALSE);
115    if (!xdr_krb5_kvno(xdrs, &objp->admin_history_kvno))
116	return (FALSE);
117    if (!xdr_array(xdrs, (caddr_t *) &objp->old_keys,
118		   (unsigned int *) &objp->old_key_len, ~0,
119		   sizeof(osa_pw_hist_ent),
120		   xdr_osa_pw_hist_ent))
121	return (FALSE);
122    return (TRUE);
123}
124
125void
126osa_free_princ_ent(osa_princ_ent_t val)
127{
128    XDR xdrs;
129
130    xdrmem_create(&xdrs, NULL, 0, XDR_FREE);
131
132    xdr_osa_princ_ent_rec(&xdrs, val);
133    free(val);
134}
135
136