1 /* 2 * CDDL HEADER START 3 * 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. 7 * 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. 12 * 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] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #pragma ident "%Z%%M% %I% %E% SMI" 27 28 /* 29 * This file was originally generated using rpcgen. 30 */ 31 32 #ifndef _KERNEL 33 #include <stdlib.h> 34 #endif /* !_KERNEL */ 35 #include <smbsrv/smb_vops.h> 36 #include <smbsrv/wintypes.h> 37 #include <smbsrv/ntsid.h> 38 #include <smbsrv/smb_xdr.h> 39 #include <smbsrv/smb_token.h> 40 41 bool_t 42 xdr_ntsid_helper(xdrs, sid) 43 XDR *xdrs; 44 char **sid; 45 { 46 uint32_t pos, len; 47 uint8_t dummy, cnt; 48 bool_t rc; 49 50 switch (xdrs->x_op) { 51 case XDR_DECODE: 52 /* 53 * chicken-and-egg: Can't use nt_sid_length() since it takes 54 * SID as its parameter while sid is yet to be decoded. 55 */ 56 pos = xdr_getpos(xdrs); 57 58 if (!xdr_bool(xdrs, &rc)) 59 return (FALSE); 60 61 if (!xdr_uint8_t(xdrs, &dummy)) 62 return (FALSE); 63 64 if (!xdr_uint8_t(xdrs, &cnt)) 65 return (FALSE); 66 67 rc = xdr_setpos(xdrs, pos); 68 69 if (rc == FALSE) 70 return (FALSE); 71 72 len = sizeof (nt_sid_t) - sizeof (uint32_t) + 73 (cnt * sizeof (uint32_t)); 74 75 if (!xdr_pointer(xdrs, sid, len, (xdrproc_t)xdr_nt_sid_t)) 76 return (FALSE); 77 break; 78 79 case XDR_ENCODE: 80 case XDR_FREE: 81 if (*sid == NULL) 82 return (FALSE); 83 84 len = nt_sid_length((nt_sid_t *)(uintptr_t)*sid); 85 if (!xdr_pointer(xdrs, sid, len, (xdrproc_t)xdr_nt_sid_t)) 86 return (FALSE); 87 break; 88 } 89 90 return (TRUE); 91 } 92 93 bool_t 94 xdr_smb_privset_helper(xdrs, privs) 95 XDR *xdrs; 96 char **privs; 97 { 98 uint32_t pos, len; 99 uint32_t cnt; 100 bool_t rc; 101 smb_privset_t *p; 102 103 if (xdrs->x_op == XDR_DECODE) { 104 pos = xdr_getpos(xdrs); 105 106 if (!xdr_bool(xdrs, &rc)) 107 return (FALSE); 108 109 if (!xdr_uint32_t(xdrs, &cnt)) 110 return (FALSE); 111 112 rc = xdr_setpos(xdrs, pos); 113 114 if (rc == FALSE) 115 return (FALSE); 116 } else { 117 if (*privs == NULL) 118 return (FALSE); 119 120 p = (smb_privset_t *)(uintptr_t)*privs; 121 cnt = p->priv_cnt; 122 } 123 124 len = sizeof (smb_privset_t) 125 - sizeof (smb_luid_attrs_t) 126 + (cnt * sizeof (smb_luid_attrs_t)); 127 128 if (!xdr_pointer(xdrs, privs, len, (xdrproc_t)xdr_smb_privset_t)) 129 return (FALSE); 130 131 return (TRUE); 132 } 133 134 bool_t 135 xdr_smb_win_grps_helper(xdrs, grps) 136 XDR *xdrs; 137 char **grps; 138 { 139 uint32_t pos, len; 140 uint16_t cnt; 141 bool_t rc; 142 143 if (xdrs->x_op == XDR_DECODE) { 144 pos = xdr_getpos(xdrs); 145 146 if (!xdr_bool(xdrs, &rc)) 147 return (FALSE); 148 149 if (!xdr_uint16_t(xdrs, &cnt)) 150 return (FALSE); 151 152 rc = xdr_setpos(xdrs, pos); 153 if (rc == FALSE) 154 return (FALSE); 155 } else { 156 if (*grps == NULL) 157 return (FALSE); 158 159 cnt = ((smb_win_grps_t *)(uintptr_t)*grps)->wg_count; 160 } 161 162 len = cnt * sizeof (smb_id_t) + sizeof (smb_win_grps_t); 163 164 if (!xdr_pointer(xdrs, grps, len, (xdrproc_t)xdr_smb_win_grps_t)) 165 return (FALSE); 166 167 return (TRUE); 168 } 169 170 bool_t 171 xdr_smb_id_t(xdrs, objp) 172 XDR *xdrs; 173 smb_id_t *objp; 174 { 175 if (!xdr_smb_sid_attrs_t(xdrs, &objp->i_sidattr)) 176 return (FALSE); 177 if (!xdr_uint32_t(xdrs, (uint32_t *)&objp->i_id)) 178 return (FALSE); 179 return (TRUE); 180 } 181 182 bool_t 183 xdr_smb_win_grps_t(xdrs, objp) 184 XDR *xdrs; 185 smb_win_grps_t *objp; 186 { 187 if (!xdr_uint16_t(xdrs, &objp->wg_count)) 188 return (FALSE); 189 if (!xdr_vector(xdrs, (char *)objp->wg_groups, objp->wg_count, 190 sizeof (smb_id_t), (xdrproc_t)xdr_smb_id_t)) 191 return (FALSE); 192 return (TRUE); 193 } 194 195 bool_t 196 xdr_smb_posix_grps_t(xdrs, objp) 197 XDR *xdrs; 198 smb_posix_grps_t *objp; 199 { 200 if (!xdr_uint32_t(xdrs, &objp->pg_ngrps)) 201 return (FALSE); 202 if (!xdr_vector(xdrs, (char *)objp->pg_grps, objp->pg_ngrps, 203 sizeof (uint32_t), (xdrproc_t)xdr_uint32_t)) 204 return (FALSE); 205 return (TRUE); 206 } 207 208 bool_t 209 xdr_smb_posix_grps_helper(xdrs, identity) 210 XDR *xdrs; 211 char **identity; 212 { 213 uint32_t pos, len; 214 uint32_t cnt; 215 bool_t rc; 216 217 if (xdrs->x_op == XDR_DECODE) { 218 pos = xdr_getpos(xdrs); 219 220 if (!xdr_bool(xdrs, &rc)) 221 return (FALSE); 222 223 if (!xdr_uint32_t(xdrs, &cnt)) 224 return (FALSE); 225 226 rc = xdr_setpos(xdrs, pos); 227 if (rc == FALSE) 228 return (FALSE); 229 } else { 230 if (*identity == NULL) 231 return (FALSE); 232 cnt = ((smb_posix_grps_t *)(uintptr_t)*identity)->pg_ngrps; 233 } 234 235 len = SMB_POSIX_GRPS_SIZE(cnt); 236 237 if (!xdr_pointer(xdrs, identity, len, (xdrproc_t)xdr_smb_posix_grps_t)) 238 return (FALSE); 239 return (TRUE); 240 } 241 242 bool_t 243 xdr_smb_session_key_t(xdrs, objp) 244 XDR *xdrs; 245 smb_session_key_t *objp; 246 { 247 if (!xdr_vector(xdrs, (char *)objp->data, 16, 248 sizeof (uint8_t), (xdrproc_t)xdr_uint8_t)) 249 return (FALSE); 250 return (TRUE); 251 } 252 253 bool_t 254 xdr_netr_client_t(xdrs, objp) 255 XDR *xdrs; 256 netr_client_t *objp; 257 { 258 if (!xdr_uint16_t(xdrs, &objp->logon_level)) 259 return (FALSE); 260 if (!xdr_string(xdrs, &objp->username, ~0)) 261 return (FALSE); 262 if (!xdr_string(xdrs, &objp->domain, ~0)) 263 return (FALSE); 264 if (!xdr_string(xdrs, &objp->workstation, ~0)) 265 return (FALSE); 266 if (!xdr_uint32_t(xdrs, &objp->ipaddr)) 267 return (FALSE); 268 if (!xdr_array(xdrs, (char **)&objp->challenge_key.challenge_key_val, 269 (uint32_t *)&objp->challenge_key.challenge_key_len, ~0, 270 sizeof (uint8_t), (xdrproc_t)xdr_uint8_t)) 271 return (FALSE); 272 if (!xdr_array(xdrs, (char **)&objp->nt_password.nt_password_val, 273 (uint32_t *)&objp->nt_password.nt_password_len, ~0, 274 sizeof (uint8_t), (xdrproc_t)xdr_uint8_t)) 275 return (FALSE); 276 if (!xdr_array(xdrs, (char **)&objp->lm_password.lm_password_val, 277 (uint32_t *)&objp->lm_password.lm_password_len, ~0, 278 sizeof (uint8_t), (xdrproc_t)xdr_uint8_t)) 279 return (FALSE); 280 if (!xdr_uint32_t(xdrs, &objp->logon_id)) 281 return (FALSE); 282 if (!xdr_int(xdrs, &objp->native_os)) 283 return (FALSE); 284 if (!xdr_int(xdrs, &objp->native_lm)) 285 return (FALSE); 286 if (!xdr_uint32_t(xdrs, &objp->local_ipaddr)) 287 return (FALSE); 288 if (!xdr_uint16_t(xdrs, &objp->local_port)) 289 return (FALSE); 290 if (!xdr_uint32_t(xdrs, &objp->flags)) 291 return (FALSE); 292 return (TRUE); 293 } 294 295 bool_t 296 xdr_nt_sid_t(xdrs, objp) 297 XDR *xdrs; 298 nt_sid_t *objp; 299 { 300 if (!xdr_uint8_t(xdrs, &objp->Revision)) 301 return (FALSE); 302 if (!xdr_uint8_t(xdrs, &objp->SubAuthCount)) 303 return (FALSE); 304 if (!xdr_vector(xdrs, (char *)objp->Authority, NT_SID_AUTH_MAX, 305 sizeof (uint8_t), (xdrproc_t)xdr_uint8_t)) 306 return (FALSE); 307 if (!xdr_vector(xdrs, (char *)objp->SubAuthority, objp->SubAuthCount, 308 sizeof (uint32_t), (xdrproc_t)xdr_uint32_t)) 309 return (FALSE); 310 return (TRUE); 311 } 312 313 bool_t 314 xdr_smb_luid_t(xdrs, objp) 315 XDR *xdrs; 316 smb_luid_t *objp; 317 { 318 if (!xdr_uint32_t(xdrs, &objp->lo_part)) 319 return (FALSE); 320 if (!xdr_uint32_t(xdrs, &objp->hi_part)) 321 return (FALSE); 322 return (TRUE); 323 } 324 325 bool_t 326 xdr_smb_luid_attrs_t(xdrs, objp) 327 XDR *xdrs; 328 smb_luid_attrs_t *objp; 329 { 330 if (!xdr_smb_luid_t(xdrs, &objp->luid)) 331 return (FALSE); 332 if (!xdr_uint32_t(xdrs, &objp->attrs)) 333 return (FALSE); 334 return (TRUE); 335 } 336 337 bool_t 338 xdr_smb_privset_t(xdrs, objp) 339 XDR *xdrs; 340 smb_privset_t *objp; 341 { 342 if (!xdr_uint32_t(xdrs, &objp->priv_cnt)) 343 return (FALSE); 344 if (!xdr_uint32_t(xdrs, &objp->control)) 345 return (FALSE); 346 if (!xdr_vector(xdrs, (char *)objp->priv, objp->priv_cnt, 347 sizeof (smb_luid_attrs_t), 348 (xdrproc_t)xdr_smb_luid_attrs_t)) 349 return (FALSE); 350 return (TRUE); 351 } 352 353 bool_t 354 xdr_smb_sid_attrs_t(xdrs, objp) 355 XDR *xdrs; 356 smb_sid_attrs_t *objp; 357 { 358 if (!xdr_uint32_t(xdrs, &objp->attrs)) 359 return (FALSE); 360 return (xdr_ntsid_helper(xdrs, (char **)&objp->sid)); 361 } 362 363 bool_t 364 xdr_smb_token_t(xdrs, objp) 365 XDR *xdrs; 366 smb_token_t *objp; 367 { 368 if (!xdr_pointer(xdrs, (char **)&objp->tkn_user, 369 sizeof (smb_id_t), (xdrproc_t)xdr_smb_id_t)) 370 return (FALSE); 371 if (!xdr_pointer(xdrs, (char **)&objp->tkn_owner, 372 sizeof (smb_id_t), (xdrproc_t)xdr_smb_id_t)) 373 return (FALSE); 374 if (!xdr_pointer(xdrs, (char **)&objp->tkn_primary_grp, 375 sizeof (smb_id_t), (xdrproc_t)xdr_smb_id_t)) 376 return (FALSE); 377 if (!xdr_smb_win_grps_helper(xdrs, (char **)&objp->tkn_win_grps)) 378 return (FALSE); 379 if (!xdr_smb_privset_helper(xdrs, (char **)&objp->tkn_privileges)) 380 return (FALSE); 381 if (!xdr_string(xdrs, &objp->tkn_account_name, ~0)) 382 return (FALSE); 383 if (!xdr_string(xdrs, &objp->tkn_domain_name, ~0)) 384 return (FALSE); 385 if (!xdr_uint32_t(xdrs, &objp->tkn_flags)) 386 return (FALSE); 387 if (!xdr_uint32_t(xdrs, &objp->tkn_audit_sid)) 388 return (FALSE); 389 if (!xdr_pointer(xdrs, (char **)&objp->tkn_session_key, 390 sizeof (smb_session_key_t), (xdrproc_t)xdr_smb_session_key_t)) 391 return (FALSE); 392 if (!xdr_smb_posix_grps_helper(xdrs, (char **)&objp->tkn_posix_grps)) 393 return (FALSE); 394 return (TRUE); 395 } 396