dmake: do not set MAKEFLAGS=k
[unleashed/tickless.git] / usr / src / common / smbsrv / smb_token_xdr.c
blob373eeb60fd208cfbc69b5ec7b3d924f168b362c8
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
25 * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
29 * This file was originally generated using rpcgen.
32 #if !defined(_KERNEL)
33 #include <stdlib.h>
34 #endif /* !_KERNEL */
35 #include <smbsrv/wintypes.h>
36 #include <smbsrv/smb_sid.h>
37 #include <smbsrv/smb_xdr.h>
38 #include <smbsrv/smb_token.h>
40 static bool_t smb_privset_xdr(XDR *, smb_privset_t *);
41 static bool_t smb_sid_xdr(XDR *, smb_sid_t *);
43 static bool_t
44 smb_privset_helper_xdr(XDR *xdrs, char **privs)
46 uint32_t pos, len;
47 uint32_t cnt;
48 bool_t rc;
49 smb_privset_t *p;
51 if (xdrs->x_op == XDR_DECODE) {
52 pos = xdr_getpos(xdrs);
54 if (!xdr_bool(xdrs, &rc))
55 return (FALSE);
57 if (!xdr_uint32_t(xdrs, &cnt))
58 return (FALSE);
60 rc = xdr_setpos(xdrs, pos);
62 if (rc == FALSE)
63 return (FALSE);
64 } else {
65 if (*privs == NULL)
66 return (FALSE);
68 p = (smb_privset_t *)(uintptr_t)*privs;
69 cnt = p->priv_cnt;
72 len = sizeof (smb_privset_t)
73 - sizeof (smb_luid_attrs_t)
74 + (cnt * sizeof (smb_luid_attrs_t));
76 if (!xdr_pointer(xdrs, privs, len, (xdrproc_t)smb_privset_xdr))
77 return (FALSE);
79 return (TRUE);
82 static bool_t
83 smb_id_xdr(XDR *xdrs, smb_id_t *objp)
85 uint8_t len;
87 if ((xdrs->x_op == XDR_ENCODE) || (xdrs->x_op == XDR_FREE))
88 len = smb_sid_len(objp->i_sid);
90 if (!xdr_uint32_t(xdrs, &objp->i_attrs))
91 return (FALSE);
93 if (!xdr_uint8_t(xdrs, &len))
94 return (FALSE);
96 if (!xdr_pointer(xdrs, (char **)&objp->i_sid, len,
97 (xdrproc_t)smb_sid_xdr))
98 return (FALSE);
100 if (!xdr_uint32_t(xdrs, (uint32_t *)&objp->i_id))
101 return (FALSE);
103 return (TRUE);
106 static bool_t
107 smb_ids_xdr(XDR *xdrs, smb_ids_t *objp)
109 if (!xdr_array(xdrs, (char **)&objp->i_ids, (uint32_t *)&objp->i_cnt,
110 ~0, sizeof (smb_id_t), (xdrproc_t)smb_id_xdr))
111 return (FALSE);
113 return (TRUE);
116 static bool_t
117 smb_posix_grps_xdr(XDR *xdrs, smb_posix_grps_t *objp)
119 if (!xdr_uint32_t(xdrs, &objp->pg_ngrps))
120 return (FALSE);
121 if (!xdr_vector(xdrs, (char *)objp->pg_grps, objp->pg_ngrps,
122 sizeof (uint32_t), (xdrproc_t)xdr_uint32_t))
123 return (FALSE);
124 return (TRUE);
127 static bool_t
128 smb_posix_grps_helper_xdr(XDR *xdrs, char **identity)
130 uint32_t pos, len;
131 uint32_t cnt;
132 bool_t rc;
134 if (xdrs->x_op == XDR_DECODE) {
135 pos = xdr_getpos(xdrs);
137 if (!xdr_bool(xdrs, &rc))
138 return (FALSE);
140 if (!xdr_uint32_t(xdrs, &cnt))
141 return (FALSE);
143 rc = xdr_setpos(xdrs, pos);
144 if (rc == FALSE)
145 return (FALSE);
146 } else {
147 if (*identity == NULL)
148 return (FALSE);
149 cnt = ((smb_posix_grps_t *)(uintptr_t)*identity)->pg_ngrps;
152 len = SMB_POSIX_GRPS_SIZE(cnt);
154 if (!xdr_pointer(xdrs, identity, len, (xdrproc_t)smb_posix_grps_xdr))
155 return (FALSE);
156 return (TRUE);
159 bool_t
160 smb_logon_xdr(XDR *xdrs, smb_logon_t *objp)
162 if (!xdr_uint16_t(xdrs, &objp->lg_level))
163 return (FALSE);
164 if (!xdr_string(xdrs, &objp->lg_username, ~0))
165 return (FALSE);
166 if (!xdr_string(xdrs, &objp->lg_domain, ~0))
167 return (FALSE);
168 if (!xdr_string(xdrs, &objp->lg_e_username, ~0))
169 return (FALSE);
170 if (!xdr_string(xdrs, &objp->lg_e_domain, ~0))
171 return (FALSE);
172 if (!xdr_string(xdrs, &objp->lg_workstation, ~0))
173 return (FALSE);
174 if (!smb_inaddr_xdr(xdrs, &objp->lg_clnt_ipaddr))
175 return (FALSE);
176 if (!smb_inaddr_xdr(xdrs, &objp->lg_local_ipaddr))
177 return (FALSE);
178 if (!xdr_uint16_t(xdrs, &objp->lg_local_port))
179 return (FALSE);
180 if (!smb_buf32_xdr(xdrs, &objp->lg_challenge_key))
181 return (FALSE);
182 if (!smb_buf32_xdr(xdrs, &objp->lg_nt_password))
183 return (FALSE);
184 if (!smb_buf32_xdr(xdrs, &objp->lg_lm_password))
185 return (FALSE);
186 if (!xdr_uint32_t(xdrs, &objp->lg_ntlm_flags))
187 return (FALSE);
188 if (!xdr_int(xdrs, &objp->lg_native_os))
189 return (FALSE);
190 if (!xdr_int(xdrs, &objp->lg_native_lm))
191 return (FALSE);
192 if (!xdr_uint32_t(xdrs, &objp->lg_flags))
193 return (FALSE);
194 if (!xdr_uint32_t(xdrs, &objp->lg_logon_id))
195 return (FALSE);
196 if (!xdr_uint32_t(xdrs, &objp->lg_domain_type))
197 return (FALSE);
198 if (!xdr_uint32_t(xdrs, &objp->lg_secmode))
199 return (FALSE);
200 if (!xdr_uint32_t(xdrs, &objp->lg_status))
201 return (FALSE);
202 return (TRUE);
205 static bool_t
206 smb_sid_xdr(XDR *xdrs, smb_sid_t *objp)
208 if (!xdr_uint8_t(xdrs, &objp->sid_revision))
209 return (FALSE);
210 if (!xdr_uint8_t(xdrs, &objp->sid_subauthcnt))
211 return (FALSE);
212 if (!xdr_vector(xdrs, (char *)objp->sid_authority, NT_SID_AUTH_MAX,
213 sizeof (uint8_t), (xdrproc_t)xdr_uint8_t))
214 return (FALSE);
215 if (!xdr_vector(xdrs, (char *)objp->sid_subauth, objp->sid_subauthcnt,
216 sizeof (uint32_t), (xdrproc_t)xdr_uint32_t))
217 return (FALSE);
218 return (TRUE);
221 static bool_t
222 smb_luid_xdr(XDR *xdrs, smb_luid_t *objp)
224 if (!xdr_uint32_t(xdrs, &objp->lo_part))
225 return (FALSE);
226 if (!xdr_uint32_t(xdrs, &objp->hi_part))
227 return (FALSE);
228 return (TRUE);
231 static bool_t
232 smb_luid_attrs_xdr(XDR *xdrs, smb_luid_attrs_t *objp)
234 if (!smb_luid_xdr(xdrs, &objp->luid))
235 return (FALSE);
236 if (!xdr_uint32_t(xdrs, &objp->attrs))
237 return (FALSE);
238 return (TRUE);
241 static bool_t
242 smb_privset_xdr(XDR *xdrs, smb_privset_t *objp)
244 if (!xdr_uint32_t(xdrs, &objp->priv_cnt))
245 return (FALSE);
246 if (!xdr_uint32_t(xdrs, &objp->control))
247 return (FALSE);
248 if (!xdr_vector(xdrs, (char *)objp->priv, objp->priv_cnt,
249 sizeof (smb_luid_attrs_t),
250 (xdrproc_t)smb_luid_attrs_xdr))
251 return (FALSE);
252 return (TRUE);
255 bool_t
256 smb_token_xdr(XDR *xdrs, smb_token_t *objp)
258 if (!smb_id_xdr(xdrs, &objp->tkn_user))
259 return (FALSE);
260 if (!smb_id_xdr(xdrs, &objp->tkn_owner))
261 return (FALSE);
262 if (!smb_id_xdr(xdrs, &objp->tkn_primary_grp))
263 return (FALSE);
264 if (!smb_ids_xdr(xdrs, &objp->tkn_win_grps))
265 return (FALSE);
266 if (!smb_privset_helper_xdr(xdrs, (char **)&objp->tkn_privileges))
267 return (FALSE);
268 if (!xdr_string(xdrs, &objp->tkn_account_name, ~0))
269 return (FALSE);
270 if (!xdr_string(xdrs, &objp->tkn_domain_name, ~0))
271 return (FALSE);
272 if (!xdr_uint32_t(xdrs, &objp->tkn_flags))
273 return (FALSE);
274 if (!xdr_uint32_t(xdrs, &objp->tkn_audit_sid))
275 return (FALSE);
276 if (!smb_buf32_xdr(xdrs, &objp->tkn_ssnkey))
277 return (FALSE);
278 if (!smb_posix_grps_helper_xdr(xdrs, (char **)&objp->tkn_posix_grps))
279 return (FALSE);
280 return (TRUE);