1*da6c28aaSamw /* 2*da6c28aaSamw * CDDL HEADER START 3*da6c28aaSamw * 4*da6c28aaSamw * The contents of this file are subject to the terms of the 5*da6c28aaSamw * Common Development and Distribution License (the "License"). 6*da6c28aaSamw * You may not use this file except in compliance with the License. 7*da6c28aaSamw * 8*da6c28aaSamw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*da6c28aaSamw * or http://www.opensolaris.org/os/licensing. 10*da6c28aaSamw * See the License for the specific language governing permissions 11*da6c28aaSamw * and limitations under the License. 12*da6c28aaSamw * 13*da6c28aaSamw * When distributing Covered Code, include this CDDL HEADER in each 14*da6c28aaSamw * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*da6c28aaSamw * If applicable, add the following below this CDDL HEADER, with the 16*da6c28aaSamw * fields enclosed by brackets "[]" replaced with your own identifying 17*da6c28aaSamw * information: Portions Copyright [yyyy] [name of copyright owner] 18*da6c28aaSamw * 19*da6c28aaSamw * CDDL HEADER END 20*da6c28aaSamw */ 21*da6c28aaSamw /* 22*da6c28aaSamw * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 23*da6c28aaSamw * Use is subject to license terms. 24*da6c28aaSamw */ 25*da6c28aaSamw 26*da6c28aaSamw #ifndef _SMBSRV_SMB_XDR_H 27*da6c28aaSamw #define _SMBSRV_SMB_XDR_H 28*da6c28aaSamw 29*da6c28aaSamw #pragma ident "%Z%%M% %I% %E% SMI" 30*da6c28aaSamw 31*da6c28aaSamw #ifdef __cplusplus 32*da6c28aaSamw extern "C" { 33*da6c28aaSamw #endif 34*da6c28aaSamw 35*da6c28aaSamw #include <rpc/xdr.h> 36*da6c28aaSamw #include <sys/param.h> 37*da6c28aaSamw 38*da6c28aaSamw typedef struct smb_dr_kshare { 39*da6c28aaSamw int32_t k_op; 40*da6c28aaSamw char *k_path; 41*da6c28aaSamw char *k_sharename; 42*da6c28aaSamw } smb_dr_kshare_t; 43*da6c28aaSamw 44*da6c28aaSamw #ifdef _KERNEL 45*da6c28aaSamw #define xdr_int8_t xdr_char 46*da6c28aaSamw #define xdr_uint8_t xdr_u_char 47*da6c28aaSamw #define xdr_int16_t xdr_short 48*da6c28aaSamw #define xdr_uint16_t xdr_u_short 49*da6c28aaSamw 50*da6c28aaSamw extern bool_t xdr_u_char(XDR *xdrs, uchar_t *cp); 51*da6c28aaSamw extern bool_t xdr_vector(XDR *xdrs, char *basep, uint_t nelem, 52*da6c28aaSamw uint_t elemsize, xdrproc_t xdr_elem); 53*da6c28aaSamw 54*da6c28aaSamw smb_dr_kshare_t *smb_share_mkabsolute(uint8_t *buf, uint32_t len); 55*da6c28aaSamw #else 56*da6c28aaSamw uint8_t *smb_kshare_mkselfrel(smb_dr_kshare_t *kshare, uint32_t *len); 57*da6c28aaSamw #endif /* _KERNEL */ 58*da6c28aaSamw 59*da6c28aaSamw /* null-terminated string buffer */ 60*da6c28aaSamw typedef struct smb_dr_string { 61*da6c28aaSamw char *buf; 62*da6c28aaSamw } smb_dr_string_t; 63*da6c28aaSamw 64*da6c28aaSamw /* byte buffer (non-null terminated) */ 65*da6c28aaSamw typedef struct smb_dr_bytes { 66*da6c28aaSamw uint32_t bytes_len; 67*da6c28aaSamw uint8_t *bytes_val; 68*da6c28aaSamw } smb_dr_bytes_t; 69*da6c28aaSamw 70*da6c28aaSamw /* 71*da6c28aaSamw * smb_dr_user_ctx/smb_dr_ulist data structures are defined to transfer 72*da6c28aaSamw * the necessary information for all connected users via door to 73*da6c28aaSamw * mlsvc. The smb_dr_user_ctx provides user context that will be part 74*da6c28aaSamw * of the MLSVC rpc context. 75*da6c28aaSamw * 76*da6c28aaSamw * Both SMB session ID and SMB UID of smb_dr_user_ctx_t are used to 77*da6c28aaSamw * uniquely identified the corresponding in-kernel SMB user object. 78*da6c28aaSamw */ 79*da6c28aaSamw #define SMB_DR_MAX_USERS 50 80*da6c28aaSamw typedef struct smb_dr_user_ctx { 81*da6c28aaSamw uint64_t du_session_id; 82*da6c28aaSamw uint16_t du_uid; 83*da6c28aaSamw uint16_t du_domain_len; 84*da6c28aaSamw char *du_domain; 85*da6c28aaSamw uint16_t du_account_len; 86*da6c28aaSamw char *du_account; 87*da6c28aaSamw uint16_t du_workstation_len; 88*da6c28aaSamw char *du_workstation; 89*da6c28aaSamw uint32_t du_ipaddr; 90*da6c28aaSamw int32_t du_native_os; 91*da6c28aaSamw int64_t du_logon_time; 92*da6c28aaSamw uint32_t du_flags; 93*da6c28aaSamw } smb_dr_user_ctx_t; 94*da6c28aaSamw 95*da6c28aaSamw typedef struct smb_dr_ulist { 96*da6c28aaSamw uint32_t dul_cnt; 97*da6c28aaSamw smb_dr_user_ctx_t dul_users[SMB_DR_MAX_USERS]; 98*da6c28aaSamw } smb_dr_ulist_t; 99*da6c28aaSamw 100*da6c28aaSamw /* xdr routines for common door arguments/results */ 101*da6c28aaSamw extern bool_t xdr_smb_dr_string_t(XDR *, smb_dr_string_t *); 102*da6c28aaSamw extern bool_t xdr_smb_dr_bytes_t(XDR *, smb_dr_bytes_t *); 103*da6c28aaSamw extern bool_t xdr_smb_dr_user_ctx_t(XDR *, smb_dr_user_ctx_t *); 104*da6c28aaSamw extern bool_t xdr_smb_dr_ulist_t(XDR *, smb_dr_ulist_t *); 105*da6c28aaSamw extern bool_t xdr_smb_dr_kshare_t(XDR *, smb_dr_kshare_t *); 106*da6c28aaSamw 107*da6c28aaSamw #ifdef __cplusplus 108*da6c28aaSamw } 109*da6c28aaSamw #endif 110*da6c28aaSamw 111*da6c28aaSamw #endif /* _SMBSRV_SMB_XDR_H */ 112