xref: /titanic_44/usr/src/common/smbsrv/smb_token_xdr.c (revision b819cea2f73f98c5662230cc9affc8cc84f77fcf)
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