1da6c28aaSamw /*
2da6c28aaSamw * CDDL HEADER START
3da6c28aaSamw *
4da6c28aaSamw * The contents of this file are subject to the terms of the
5da6c28aaSamw * Common Development and Distribution License (the "License").
6da6c28aaSamw * You may not use this file except in compliance with the License.
7da6c28aaSamw *
8da6c28aaSamw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9da6c28aaSamw * or http://www.opensolaris.org/os/licensing.
10da6c28aaSamw * See the License for the specific language governing permissions
11da6c28aaSamw * and limitations under the License.
12da6c28aaSamw *
13da6c28aaSamw * When distributing Covered Code, include this CDDL HEADER in each
14da6c28aaSamw * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15da6c28aaSamw * If applicable, add the following below this CDDL HEADER, with the
16da6c28aaSamw * fields enclosed by brackets "[]" replaced with your own identifying
17da6c28aaSamw * information: Portions Copyright [yyyy] [name of copyright owner]
18da6c28aaSamw *
19da6c28aaSamw * CDDL HEADER END
20da6c28aaSamw */
21da6c28aaSamw /*
229fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
23da6c28aaSamw * Use is subject to license terms.
24da6c28aaSamw */
25da6c28aaSamw
26da6c28aaSamw /*
27da6c28aaSamw * This file was originally generated using rpcgen.
28da6c28aaSamw */
29da6c28aaSamw
30*b819cea2SGordon Ross #if !defined(_KERNEL) && !defined(_FAKE_KERNEL)
31da6c28aaSamw #include <stdlib.h>
32da6c28aaSamw #endif /* !_KERNEL */
33da6c28aaSamw #include <smbsrv/wintypes.h>
346537f381Sas200622 #include <smbsrv/smb_sid.h>
35da6c28aaSamw #include <smbsrv/smb_xdr.h>
36da6c28aaSamw #include <smbsrv/smb_token.h>
37da6c28aaSamw
389fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States static bool_t smb_privset_xdr(XDR *, smb_privset_t *);
399fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States static bool_t smb_sid_xdr(XDR *, smb_sid_t *);
407f667e74Sjose borrego
416537f381Sas200622 static bool_t
smb_privset_helper_xdr(XDR * xdrs,char ** privs)429fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_privset_helper_xdr(XDR *xdrs, char **privs)
43da6c28aaSamw {
44da6c28aaSamw uint32_t pos, len;
45da6c28aaSamw uint32_t cnt;
46da6c28aaSamw bool_t rc;
47da6c28aaSamw smb_privset_t *p;
48da6c28aaSamw
49da6c28aaSamw if (xdrs->x_op == XDR_DECODE) {
50da6c28aaSamw pos = xdr_getpos(xdrs);
51da6c28aaSamw
52da6c28aaSamw if (!xdr_bool(xdrs, &rc))
53da6c28aaSamw return (FALSE);
54da6c28aaSamw
55da6c28aaSamw if (!xdr_uint32_t(xdrs, &cnt))
56da6c28aaSamw return (FALSE);
57da6c28aaSamw
58da6c28aaSamw rc = xdr_setpos(xdrs, pos);
59da6c28aaSamw
60da6c28aaSamw if (rc == FALSE)
61da6c28aaSamw return (FALSE);
62da6c28aaSamw } else {
63da6c28aaSamw if (*privs == NULL)
64da6c28aaSamw return (FALSE);
65da6c28aaSamw
66da6c28aaSamw p = (smb_privset_t *)(uintptr_t)*privs;
67da6c28aaSamw cnt = p->priv_cnt;
68da6c28aaSamw }
69da6c28aaSamw
70da6c28aaSamw len = sizeof (smb_privset_t)
71da6c28aaSamw - sizeof (smb_luid_attrs_t)
72da6c28aaSamw + (cnt * sizeof (smb_luid_attrs_t));
73da6c28aaSamw
749fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_pointer(xdrs, privs, len, (xdrproc_t)smb_privset_xdr))
75da6c28aaSamw return (FALSE);
76da6c28aaSamw
77da6c28aaSamw return (TRUE);
78da6c28aaSamw }
79da6c28aaSamw
807f667e74Sjose borrego static bool_t
smb_id_xdr(XDR * xdrs,smb_id_t * objp)819fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_id_xdr(XDR *xdrs, smb_id_t *objp)
82da6c28aaSamw {
837f667e74Sjose borrego uint8_t len;
847f667e74Sjose borrego
857f667e74Sjose borrego if ((xdrs->x_op == XDR_ENCODE) || (xdrs->x_op == XDR_FREE))
867f667e74Sjose borrego len = smb_sid_len(objp->i_sid);
877f667e74Sjose borrego
887f667e74Sjose borrego if (!xdr_uint32_t(xdrs, &objp->i_attrs))
89da6c28aaSamw return (FALSE);
907f667e74Sjose borrego
917f667e74Sjose borrego if (!xdr_uint8_t(xdrs, &len))
927f667e74Sjose borrego return (FALSE);
937f667e74Sjose borrego
947f667e74Sjose borrego if (!xdr_pointer(xdrs, (char **)&objp->i_sid, len,
959fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States (xdrproc_t)smb_sid_xdr))
967f667e74Sjose borrego return (FALSE);
977f667e74Sjose borrego
98da6c28aaSamw if (!xdr_uint32_t(xdrs, (uint32_t *)&objp->i_id))
99da6c28aaSamw return (FALSE);
1007f667e74Sjose borrego
101da6c28aaSamw return (TRUE);
102da6c28aaSamw }
103da6c28aaSamw
1047f667e74Sjose borrego static bool_t
smb_ids_xdr(XDR * xdrs,smb_ids_t * objp)1059fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_ids_xdr(XDR *xdrs, smb_ids_t *objp)
106da6c28aaSamw {
1077f667e74Sjose borrego if (!xdr_array(xdrs, (char **)&objp->i_ids, (uint32_t *)&objp->i_cnt,
1089fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States ~0, sizeof (smb_id_t), (xdrproc_t)smb_id_xdr))
109da6c28aaSamw return (FALSE);
1107f667e74Sjose borrego
111da6c28aaSamw return (TRUE);
112da6c28aaSamw }
113da6c28aaSamw
1147f667e74Sjose borrego static bool_t
smb_posix_grps_xdr(XDR * xdrs,smb_posix_grps_t * objp)1159fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_posix_grps_xdr(XDR *xdrs, smb_posix_grps_t *objp)
116da6c28aaSamw {
117da6c28aaSamw if (!xdr_uint32_t(xdrs, &objp->pg_ngrps))
118da6c28aaSamw return (FALSE);
119da6c28aaSamw if (!xdr_vector(xdrs, (char *)objp->pg_grps, objp->pg_ngrps,
120da6c28aaSamw sizeof (uint32_t), (xdrproc_t)xdr_uint32_t))
121da6c28aaSamw return (FALSE);
122da6c28aaSamw return (TRUE);
123da6c28aaSamw }
124da6c28aaSamw
1257f667e74Sjose borrego static bool_t
smb_posix_grps_helper_xdr(XDR * xdrs,char ** identity)1269fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_posix_grps_helper_xdr(XDR *xdrs, char **identity)
127da6c28aaSamw {
128da6c28aaSamw uint32_t pos, len;
129da6c28aaSamw uint32_t cnt;
130da6c28aaSamw bool_t rc;
131da6c28aaSamw
132da6c28aaSamw if (xdrs->x_op == XDR_DECODE) {
133da6c28aaSamw pos = xdr_getpos(xdrs);
134da6c28aaSamw
135da6c28aaSamw if (!xdr_bool(xdrs, &rc))
136da6c28aaSamw return (FALSE);
137da6c28aaSamw
138da6c28aaSamw if (!xdr_uint32_t(xdrs, &cnt))
139da6c28aaSamw return (FALSE);
140da6c28aaSamw
141da6c28aaSamw rc = xdr_setpos(xdrs, pos);
142da6c28aaSamw if (rc == FALSE)
143da6c28aaSamw return (FALSE);
144da6c28aaSamw } else {
145da6c28aaSamw if (*identity == NULL)
146da6c28aaSamw return (FALSE);
147da6c28aaSamw cnt = ((smb_posix_grps_t *)(uintptr_t)*identity)->pg_ngrps;
148da6c28aaSamw }
149da6c28aaSamw
150da6c28aaSamw len = SMB_POSIX_GRPS_SIZE(cnt);
151da6c28aaSamw
1529fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_pointer(xdrs, identity, len, (xdrproc_t)smb_posix_grps_xdr))
153da6c28aaSamw return (FALSE);
154da6c28aaSamw return (TRUE);
155da6c28aaSamw }
156da6c28aaSamw
1577f667e74Sjose borrego static bool_t
smb_session_key_xdr(XDR * xdrs,smb_session_key_t * objp)1589fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_session_key_xdr(XDR *xdrs, smb_session_key_t *objp)
159da6c28aaSamw {
160da6c28aaSamw if (!xdr_vector(xdrs, (char *)objp->data, 16,
161da6c28aaSamw sizeof (uint8_t), (xdrproc_t)xdr_uint8_t))
162da6c28aaSamw return (FALSE);
163da6c28aaSamw return (TRUE);
164da6c28aaSamw }
165da6c28aaSamw
166da6c28aaSamw bool_t
smb_logon_xdr(XDR * xdrs,smb_logon_t * objp)1679fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_logon_xdr(XDR *xdrs, smb_logon_t *objp)
168da6c28aaSamw {
1699fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_uint16_t(xdrs, &objp->lg_level))
170da6c28aaSamw return (FALSE);
1719fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_string(xdrs, &objp->lg_username, ~0))
172da6c28aaSamw return (FALSE);
1739fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_string(xdrs, &objp->lg_domain, ~0))
174da6c28aaSamw return (FALSE);
1759fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_string(xdrs, &objp->lg_e_username, ~0))
1767f667e74Sjose borrego return (FALSE);
1779fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_string(xdrs, &objp->lg_e_domain, ~0))
1787f667e74Sjose borrego return (FALSE);
1799fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_string(xdrs, &objp->lg_workstation, ~0))
180da6c28aaSamw return (FALSE);
1819fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!smb_inaddr_xdr(xdrs, &objp->lg_clnt_ipaddr))
182da6c28aaSamw return (FALSE);
1839fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!smb_inaddr_xdr(xdrs, &objp->lg_local_ipaddr))
184da6c28aaSamw return (FALSE);
1859fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_uint16_t(xdrs, &objp->lg_local_port))
186da6c28aaSamw return (FALSE);
1879fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!smb_buf32_xdr(xdrs, &objp->lg_challenge_key))
188da6c28aaSamw return (FALSE);
1899fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!smb_buf32_xdr(xdrs, &objp->lg_nt_password))
190da6c28aaSamw return (FALSE);
1919fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!smb_buf32_xdr(xdrs, &objp->lg_lm_password))
192da6c28aaSamw return (FALSE);
1939fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_int(xdrs, &objp->lg_native_os))
194da6c28aaSamw return (FALSE);
1959fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_int(xdrs, &objp->lg_native_lm))
196da6c28aaSamw return (FALSE);
1979fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_uint32_t(xdrs, &objp->lg_flags))
1989fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (FALSE);
1999fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_uint32_t(xdrs, &objp->lg_logon_id))
2009fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (FALSE);
2019fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_uint32_t(xdrs, &objp->lg_domain_type))
2029fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (FALSE);
2039fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_uint32_t(xdrs, &objp->lg_secmode))
2049fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (FALSE);
2059fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!xdr_uint32_t(xdrs, &objp->lg_status))
206da6c28aaSamw return (FALSE);
207da6c28aaSamw return (TRUE);
208da6c28aaSamw }
209da6c28aaSamw
2107f667e74Sjose borrego static bool_t
smb_sid_xdr(XDR * xdrs,smb_sid_t * objp)2119fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_sid_xdr(XDR *xdrs, smb_sid_t *objp)
212da6c28aaSamw {
2136537f381Sas200622 if (!xdr_uint8_t(xdrs, &objp->sid_revision))
214da6c28aaSamw return (FALSE);
2156537f381Sas200622 if (!xdr_uint8_t(xdrs, &objp->sid_subauthcnt))
216da6c28aaSamw return (FALSE);
2176537f381Sas200622 if (!xdr_vector(xdrs, (char *)objp->sid_authority, NT_SID_AUTH_MAX,
218da6c28aaSamw sizeof (uint8_t), (xdrproc_t)xdr_uint8_t))
219da6c28aaSamw return (FALSE);
2206537f381Sas200622 if (!xdr_vector(xdrs, (char *)objp->sid_subauth, objp->sid_subauthcnt,
221da6c28aaSamw sizeof (uint32_t), (xdrproc_t)xdr_uint32_t))
222da6c28aaSamw return (FALSE);
223da6c28aaSamw return (TRUE);
224da6c28aaSamw }
225da6c28aaSamw
2267f667e74Sjose borrego static bool_t
smb_luid_xdr(XDR * xdrs,smb_luid_t * objp)2279fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_luid_xdr(XDR *xdrs, smb_luid_t *objp)
228da6c28aaSamw {
229da6c28aaSamw if (!xdr_uint32_t(xdrs, &objp->lo_part))
230da6c28aaSamw return (FALSE);
231da6c28aaSamw if (!xdr_uint32_t(xdrs, &objp->hi_part))
232da6c28aaSamw return (FALSE);
233da6c28aaSamw return (TRUE);
234da6c28aaSamw }
235da6c28aaSamw
2367f667e74Sjose borrego static bool_t
smb_luid_attrs_xdr(XDR * xdrs,smb_luid_attrs_t * objp)2379fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_luid_attrs_xdr(XDR *xdrs, smb_luid_attrs_t *objp)
238da6c28aaSamw {
2399fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!smb_luid_xdr(xdrs, &objp->luid))
240da6c28aaSamw return (FALSE);
241da6c28aaSamw if (!xdr_uint32_t(xdrs, &objp->attrs))
242da6c28aaSamw return (FALSE);
243da6c28aaSamw return (TRUE);
244da6c28aaSamw }
245da6c28aaSamw
2467f667e74Sjose borrego static bool_t
smb_privset_xdr(XDR * xdrs,smb_privset_t * objp)2479fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_privset_xdr(XDR *xdrs, smb_privset_t *objp)
248da6c28aaSamw {
249da6c28aaSamw if (!xdr_uint32_t(xdrs, &objp->priv_cnt))
250da6c28aaSamw return (FALSE);
251da6c28aaSamw if (!xdr_uint32_t(xdrs, &objp->control))
252da6c28aaSamw return (FALSE);
253da6c28aaSamw if (!xdr_vector(xdrs, (char *)objp->priv, objp->priv_cnt,
254da6c28aaSamw sizeof (smb_luid_attrs_t),
2559fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States (xdrproc_t)smb_luid_attrs_xdr))
256da6c28aaSamw return (FALSE);
257da6c28aaSamw return (TRUE);
258da6c28aaSamw }
259da6c28aaSamw
260da6c28aaSamw bool_t
smb_token_xdr(XDR * xdrs,smb_token_t * objp)2619fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_token_xdr(XDR *xdrs, smb_token_t *objp)
262da6c28aaSamw {
2639fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!smb_id_xdr(xdrs, &objp->tkn_user))
264da6c28aaSamw return (FALSE);
2659fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!smb_id_xdr(xdrs, &objp->tkn_owner))
266da6c28aaSamw return (FALSE);
2679fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!smb_id_xdr(xdrs, &objp->tkn_primary_grp))
268da6c28aaSamw return (FALSE);
2699fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!smb_ids_xdr(xdrs, &objp->tkn_win_grps))
270da6c28aaSamw return (FALSE);
2719fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!smb_privset_helper_xdr(xdrs, (char **)&objp->tkn_privileges))
272da6c28aaSamw return (FALSE);
273da6c28aaSamw if (!xdr_string(xdrs, &objp->tkn_account_name, ~0))
274da6c28aaSamw return (FALSE);
275da6c28aaSamw if (!xdr_string(xdrs, &objp->tkn_domain_name, ~0))
276da6c28aaSamw return (FALSE);
277da6c28aaSamw if (!xdr_uint32_t(xdrs, &objp->tkn_flags))
278da6c28aaSamw return (FALSE);
279da6c28aaSamw if (!xdr_uint32_t(xdrs, &objp->tkn_audit_sid))
280da6c28aaSamw return (FALSE);
281da6c28aaSamw if (!xdr_pointer(xdrs, (char **)&objp->tkn_session_key,
2829fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States sizeof (smb_session_key_t), (xdrproc_t)smb_session_key_xdr))
283da6c28aaSamw return (FALSE);
2849fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (!smb_posix_grps_helper_xdr(xdrs, (char **)&objp->tkn_posix_grps))
285da6c28aaSamw return (FALSE);
286da6c28aaSamw return (TRUE);
287da6c28aaSamw }
288